Skip to content

Commit 2722f95

Browse files
cubuspl42facebook-github-bot
authored andcommitted
Extract fragment conversions to separate functions (facebook#42597)
Summary: Extract fragment conversions to separate functions to make refactoring easier and simplify reasoning about the code. This code is being modified later. This is a minor improvement in the context of my multi-PR work on react-native-community/discussions-and-proposals#695. ## Changelog: <!-- Help reviewers and the release process by writing your own changelog entry. Pick one each for the category and type tags: [ANDROID|GENERAL|IOS|INTERNAL] [BREAKING|ADDED|CHANGED|DEPRECATED|REMOVED|FIXED|SECURITY] - Message For more details, see: https://reactnative.dev/contributing/changelogs-in-pull-requests --> [INTERNAL] [CHANGE] - Extract fragment conversions to separate functions Pull Request resolved: facebook#42597 Reviewed By: NickGerleman Differential Revision: D52960655 Pulled By: robhogan fbshipit-source-id: 0df62b9980c06a1c2fc113d645ba8b6b668fa394
1 parent e27452a commit 2722f95

File tree

1 file changed

+40
-34
lines changed
  • packages/react-native/ReactCommon/react/renderer/attributedstring

1 file changed

+40
-34
lines changed

packages/react-native/ReactCommon/react/renderer/attributedstring/conversions.h

Lines changed: 40 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -896,24 +896,28 @@ inline folly::dynamic toDynamic(const TextAttributes& textAttributes) {
896896
return _textAttributes;
897897
}
898898

899+
inline folly::dynamic toDynamic(const AttributedString::Fragment& fragment) {
900+
folly::dynamic value = folly::dynamic::object();
901+
902+
value["string"] = fragment.string;
903+
if (fragment.parentShadowView.componentHandle) {
904+
value["reactTag"] = fragment.parentShadowView.tag;
905+
}
906+
if (fragment.isAttachment()) {
907+
value["isAttachment"] = true;
908+
value["width"] = fragment.parentShadowView.layoutMetrics.frame.size.width;
909+
value["height"] = fragment.parentShadowView.layoutMetrics.frame.size.height;
910+
}
911+
value["textAttributes"] = toDynamic(fragment.textAttributes);
912+
913+
return value;
914+
}
915+
899916
inline folly::dynamic toDynamic(const AttributedString& attributedString) {
900917
auto value = folly::dynamic::object();
901918
auto fragments = folly::dynamic::array();
902919
for (auto fragment : attributedString.getFragments()) {
903-
folly::dynamic dynamicFragment = folly::dynamic::object();
904-
dynamicFragment["string"] = fragment.string;
905-
if (fragment.parentShadowView.componentHandle) {
906-
dynamicFragment["reactTag"] = fragment.parentShadowView.tag;
907-
}
908-
if (fragment.isAttachment()) {
909-
dynamicFragment["isAttachment"] = true;
910-
dynamicFragment["width"] =
911-
fragment.parentShadowView.layoutMetrics.frame.size.width;
912-
dynamicFragment["height"] =
913-
fragment.parentShadowView.layoutMetrics.frame.size.height;
914-
}
915-
dynamicFragment["textAttributes"] = toDynamic(fragment.textAttributes);
916-
fragments.push_back(dynamicFragment);
920+
fragments.push_back(toDynamic(fragment));
917921
}
918922
value("fragments", fragments);
919923
value(
@@ -1134,31 +1138,33 @@ inline MapBuffer toMapBuffer(const TextAttributes& textAttributes) {
11341138
return builder.build();
11351139
}
11361140

1141+
inline MapBuffer toMapBuffer(const AttributedString::Fragment& fragment) {
1142+
auto builder = MapBufferBuilder();
1143+
1144+
builder.putString(FR_KEY_STRING, fragment.string);
1145+
if (fragment.parentShadowView.componentHandle) {
1146+
builder.putInt(FR_KEY_REACT_TAG, fragment.parentShadowView.tag);
1147+
}
1148+
if (fragment.isAttachment()) {
1149+
builder.putBool(FR_KEY_IS_ATTACHMENT, true);
1150+
builder.putDouble(
1151+
FR_KEY_WIDTH, fragment.parentShadowView.layoutMetrics.frame.size.width);
1152+
builder.putDouble(
1153+
FR_KEY_HEIGHT,
1154+
fragment.parentShadowView.layoutMetrics.frame.size.height);
1155+
}
1156+
auto textAttributesMap = toMapBuffer(fragment.textAttributes);
1157+
builder.putMapBuffer(FR_KEY_TEXT_ATTRIBUTES, textAttributesMap);
1158+
1159+
return builder.build();
1160+
}
1161+
11371162
inline MapBuffer toMapBuffer(const AttributedString& attributedString) {
11381163
auto fragmentsBuilder = MapBufferBuilder();
11391164

11401165
int index = 0;
11411166
for (auto fragment : attributedString.getFragments()) {
1142-
auto dynamicFragmentBuilder = MapBufferBuilder();
1143-
dynamicFragmentBuilder.putString(FR_KEY_STRING, fragment.string);
1144-
if (fragment.parentShadowView.componentHandle) {
1145-
dynamicFragmentBuilder.putInt(
1146-
FR_KEY_REACT_TAG, fragment.parentShadowView.tag);
1147-
}
1148-
if (fragment.isAttachment()) {
1149-
dynamicFragmentBuilder.putBool(FR_KEY_IS_ATTACHMENT, true);
1150-
dynamicFragmentBuilder.putDouble(
1151-
FR_KEY_WIDTH,
1152-
fragment.parentShadowView.layoutMetrics.frame.size.width);
1153-
dynamicFragmentBuilder.putDouble(
1154-
FR_KEY_HEIGHT,
1155-
fragment.parentShadowView.layoutMetrics.frame.size.height);
1156-
}
1157-
auto textAttributesMap = toMapBuffer(fragment.textAttributes);
1158-
dynamicFragmentBuilder.putMapBuffer(
1159-
FR_KEY_TEXT_ATTRIBUTES, textAttributesMap);
1160-
auto dynamicFragmentMap = dynamicFragmentBuilder.build();
1161-
fragmentsBuilder.putMapBuffer(index++, dynamicFragmentMap);
1167+
fragmentsBuilder.putMapBuffer(index++, toMapBuffer(fragment));
11621168
}
11631169

11641170
auto builder = MapBufferBuilder();

0 commit comments

Comments
 (0)