Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import com.facebook.react.common.MapBuilder;
import com.facebook.react.uimanager.ThemedReactContext;
import com.facebook.react.uimanager.ViewGroupManager;
import com.facebook.react.uimanager.annotations.ReactProp;

import org.json.JSONObject;

Expand All @@ -35,6 +36,13 @@ public class HyperFragmentViewManager extends ViewGroupManager<FrameLayout> {
private static final int COMMAND_PROCESS = 175;

private final ReactApplicationContext reactContext;
// Track props for each view
private String currentNamespace = null;
private String currentPayload = null;
private FrameLayout currentView = null;

// Architecture detection
private final Boolean newArchEnabled = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED;

public HyperFragmentViewManager(ReactApplicationContext reactContext) {
this.reactContext = reactContext;
Expand All @@ -58,6 +66,59 @@ protected FrameLayout createViewInstance(@NonNull ThemedReactContext context) {
public Map<String, Integer> getCommandsMap() {
return MapBuilder.of("process", COMMAND_PROCESS);
}
// Fabric-compatible props
@ReactProp(name = "namespace")
public void setNamespace(FrameLayout view, @Nullable String namespace) {
currentNamespace = namespace;
currentView = view;
tryProcessProps();
}

@ReactProp(name = "payload")
public void setPayload(FrameLayout view, @Nullable String payload) {
currentPayload = payload;
currentView = view;
tryProcessProps();
}

private void tryProcessProps() {
if (currentNamespace != null && currentPayload != null && currentView != null && newArchEnabled) {
currentView.post(() -> {
processWithProps(currentView, currentNamespace, currentPayload);
});
}
}

private void processWithProps(FrameLayout view, String namespace, String payload) {
try {
setupLayout(view);

JSONObject fragments = new JSONObject();
fragments.put(namespace, view);

JSONObject payloadObj = new JSONObject(payload);
payloadObj.getJSONObject("payload").put("fragmentViewGroups", fragments);

FragmentActivity activity = (FragmentActivity) reactContext.getCurrentActivity();
HyperServices hyperServices = HyperSdkReactModule.getHyperServices();

if (activity == null || hyperServices == null) {
return;
}

hyperServices.process(activity, payloadObj);

} catch (Exception e) {
SdkTracker.trackAndLogBootException(
NAME,
LogConstants.CATEGORY_LIFECYCLE,
LogConstants.SUBCATEGORY_HYPER_SDK,
LogConstants.SDK_TRACKER_LABEL,
"Exception in processWithProps",
e
);
}
}

@Override
public void receiveCommand(@NonNull FrameLayout root, String commandId, @Nullable ReadableArray args) {
Expand Down
Loading