Skip to content

Commit

Permalink
Merge pull request #5504 from nickgros/SWC-6882d
Browse files Browse the repository at this point in the history
  • Loading branch information
nickgros committed Aug 29, 2024
2 parents aea03f3 + 386d6be commit f36f0a2
Show file tree
Hide file tree
Showing 59 changed files with 150 additions and 151 deletions.
5 changes: 3 additions & 2 deletions devdocs/ReactIntegration.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ How you manage updating your widget's view will vary based on the scenario, but
```java
import org.sagebionetworks.web.client.context.SynapseReactClientFullContextPropsProvider;
import org.sagebionetworks.web.client.jsinterop.React;
import org.sagebionetworks.web.client.jsinterop.ReactElement;

class MyView {

Expand All @@ -57,12 +58,12 @@ class MyView {

void renderComponent() {
MyProps props = props.create(/**/);
ReactNode reactNode = React.createElementWithSynapseContext(
ReactElement reactElement = React.createElementWithSynapseContext(
SRC.SynapseComponents.MyComponent,
props,
propsProvider.getJsInteropContextProps()
);
reactComponent.render(reactNode);
reactComponent.render(reactElement);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
import org.sagebionetworks.web.client.cookie.CookieProvider;
import org.sagebionetworks.web.client.jsinterop.React;
import org.sagebionetworks.web.client.jsinterop.ReactDOM;
import org.sagebionetworks.web.client.jsinterop.ReactNode;
import org.sagebionetworks.web.client.jsinterop.ReactElement;
import org.sagebionetworks.web.client.jsinterop.SRC;
import org.sagebionetworks.web.client.mvp.AppActivityMapper;
import org.sagebionetworks.web.client.mvp.AppPlaceHistoryMapper;
Expand Down Expand Up @@ -467,7 +467,7 @@ public void initializeToastContainer() {
isToastContainerInitialized = true;

Element toastContainer = RootPanel.get("toastContainer").getElement();
ReactNode component = React.createElementWithThemeContext(
ReactElement component = React.createElementWithThemeContext(
SRC.SynapseComponents.SynapseToastContainer,
null
);
Expand Down
31 changes: 16 additions & 15 deletions src/main/java/org/sagebionetworks/web/client/jsinterop/React.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,16 @@
@JsType(isNative = true, namespace = JsPackage.GLOBAL)
public class React {

public static native <P extends ReactComponentProps> ReactNode createElement(
ReactComponentType<P> component,
P props
);
public static native <
P extends ReactComponentProps
> ReactElement createElement(ReactComponentType<P> component, P props);

public static native <P extends ReactComponentProps> ReactNode createElement(
public static native <
P extends ReactComponentProps
> ReactElement createElement(
ReactComponentType<P> component,
P props,
ReactNode... children
ReactElement... children
);

public static native <T> T createRef();
Expand All @@ -28,7 +29,7 @@ public static native <P extends ReactComponentProps> ReactNode createElement(
@JsOverlay
public static <
P extends ReactComponentProps
> ReactNode createElementWithThemeContext(
> ReactElement createElementWithThemeContext(
ReactComponentType<P> component,
P props
) {
Expand All @@ -54,29 +55,29 @@ > ReactNode createElementWithThemeContext(
@JsOverlay
public static <
P extends ReactComponentProps
> ReactNode createElementWithSynapseContext(
> ReactElement createElementWithSynapseContext(
ReactComponentType<P> component,
P props,
SynapseReactClientFullContextProviderProps wrapperProps
) {
ReactNode componentElement = createElement(component, props);
ReactElement componentElement = createElement(component, props);
return createElement(
SRC.SynapseContext.FullContextProvider,
wrapperProps,
componentElement
);
}

public static native ReactNode cloneElement(ReactNode element);
public static native ReactElement cloneElement(ReactElement element);

public static native ReactNode cloneElement(
ReactNode element,
public static native ReactElement cloneElement(
ReactElement element,
ReactComponentProps props
);

public static native ReactNode cloneElement(
ReactNode element,
public static native ReactElement cloneElement(
ReactElement element,
ReactComponentProps props,
ReactNode... children
ReactElement... children
);
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,13 @@ public interface CallbackRef {
void run(Element element);
}

public JsArray<ReactNode<?>> children;
public JsArray<ReactElement<?>> children;

// Either a ComponentRef or CallbackRef may be passed. A CallbackRef will be invoked when the ref is set.
public Object ref;

@JsOverlay
public final void addChild(ReactNode<?> child) {
public final void addChild(ReactElement<?> child) {
if (children == null) {
children = new JsArray<>();
}
Expand All @@ -37,7 +37,7 @@ public final void clearChildren() {
}

@JsOverlay
public final JsArray<ReactNode<?>> getChildren() {
public final JsArray<ReactElement<?>> getChildren() {
if (children == null) {
children = new JsArray<>();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
@JsType(isNative = true, namespace = JsPackage.GLOBAL, name = "Object")
public class ReactDOMRoot {

public native void render(ReactNode element);
public native void render(ReactElement element);

public native void unmount();
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import jsinterop.annotations.JsType;

@JsType(isNative = true, namespace = JsPackage.GLOBAL, name = "Object")
public class ReactNode<T extends ReactComponentProps> {
public class ReactElement<T extends ReactComponentProps> {

@JsNullable
public T props;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import com.google.inject.Inject;
import org.sagebionetworks.web.client.context.SynapseReactClientFullContextPropsProvider;
import org.sagebionetworks.web.client.jsinterop.React;
import org.sagebionetworks.web.client.jsinterop.ReactNode;
import org.sagebionetworks.web.client.jsinterop.ReactElement;
import org.sagebionetworks.web.client.jsinterop.SRC;
import org.sagebionetworks.web.client.widget.ReactComponent;
import org.sagebionetworks.web.client.widget.header.Header;
Expand Down Expand Up @@ -43,7 +43,7 @@ public void render() {
headerWidget.refresh();
Window.scrollTo(0, 0);

ReactNode node = React.createElementWithSynapseContext(
ReactElement node = React.createElementWithSynapseContext(
SRC.SynapseComponents.ReviewerDashboard,
null,
propsProvider.getJsInteropContextProps()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,10 @@
import com.google.gwt.user.client.ui.Widget;
import com.google.inject.Inject;
import org.sagebionetworks.web.client.GlobalApplicationState;
import org.sagebionetworks.web.client.PlaceChanger;
import org.sagebionetworks.web.client.context.SynapseReactClientFullContextPropsProvider;
import org.sagebionetworks.web.client.jsinterop.ErrorPageProps;
import org.sagebionetworks.web.client.jsinterop.React;
import org.sagebionetworks.web.client.jsinterop.ReactNode;
import org.sagebionetworks.web.client.jsinterop.ReactElement;
import org.sagebionetworks.web.client.jsinterop.SRC;
import org.sagebionetworks.web.client.widget.ReactComponent;
import org.sagebionetworks.web.client.widget.header.Header;
Expand Down Expand Up @@ -90,7 +89,7 @@ public void renderMaintenancePage() {
globalAppState.handleRelativePathClick(href);
}
);
ReactNode component = React.createElementWithSynapseContext(
ReactElement component = React.createElementWithSynapseContext(
SRC.SynapseComponents.ErrorPage,
props,
propsProvider.getJsInteropContextProps()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import org.sagebionetworks.web.client.context.SynapseReactClientFullContextPropsProvider;
import org.sagebionetworks.web.client.jsinterop.DownloadCartPageProps;
import org.sagebionetworks.web.client.jsinterop.React;
import org.sagebionetworks.web.client.jsinterop.ReactNode;
import org.sagebionetworks.web.client.jsinterop.ReactElement;
import org.sagebionetworks.web.client.jsinterop.SRC;
import org.sagebionetworks.web.client.security.AuthenticationController;
import org.sagebionetworks.web.client.widget.ReactComponent;
Expand Down Expand Up @@ -43,7 +43,7 @@ public void render() {
DownloadCartPageProps props = DownloadCartPageProps.create(entityId -> {
presenter.onViewSharingSettingsClicked(entityId);
});
ReactNode component = React.createElementWithSynapseContext(
ReactElement component = React.createElementWithSynapseContext(
SRC.SynapseComponents.DownloadCartPage,
props,
propsProvider.getJsInteropContextProps()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
import org.sagebionetworks.web.client.context.SynapseReactClientFullContextPropsProvider;
import org.sagebionetworks.web.client.jsinterop.EmptyProps;
import org.sagebionetworks.web.client.jsinterop.React;
import org.sagebionetworks.web.client.jsinterop.ReactNode;
import org.sagebionetworks.web.client.jsinterop.ReactElement;
import org.sagebionetworks.web.client.jsinterop.SRC;
import org.sagebionetworks.web.client.widget.ReactComponent;
import org.sagebionetworks.web.client.widget.header.Header;
Expand Down Expand Up @@ -61,7 +61,7 @@ public void clear() {

private void configure() {
headerWidget.configure();
ReactNode element = React.createElementWithSynapseContext(
ReactElement element = React.createElementWithSynapseContext(
SRC.SynapseComponents.SubscriptionPage,
EmptyProps.create(),
propsProvider.getJsInteropContextProps()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,12 @@
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Widget;
import com.google.inject.Inject;
import org.sagebionetworks.web.client.DisplayUtils;
import org.sagebionetworks.web.client.FeatureFlagConfig;
import org.sagebionetworks.web.client.FeatureFlagKey;
import org.sagebionetworks.web.client.GlobalApplicationState;
import org.sagebionetworks.web.client.context.SynapseReactClientFullContextPropsProvider;
import org.sagebionetworks.web.client.cookie.CookieProvider;
import org.sagebionetworks.web.client.jsinterop.React;
import org.sagebionetworks.web.client.jsinterop.ReactNode;
import org.sagebionetworks.web.client.jsinterop.ReactElement;
import org.sagebionetworks.web.client.jsinterop.SRC;
import org.sagebionetworks.web.client.jsinterop.SynapseHomepageProps;
import org.sagebionetworks.web.client.jsinterop.SynapseHomepageV2Props;
Expand Down Expand Up @@ -54,7 +52,7 @@ public HomeViewImpl(
@Override
public void render() {
scrollToTop();
ReactNode component;
ReactElement component;

if (featureFlagConfig.isFeatureEnabled(FeatureFlagKey.HOMEPAGE_V2)) {
SynapseHomepageV2Props props = SynapseHomepageV2Props.create(href -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
import org.sagebionetworks.web.client.SynapseJSNIUtils;
import org.sagebionetworks.web.client.context.SynapseReactClientFullContextPropsProvider;
import org.sagebionetworks.web.client.jsinterop.React;
import org.sagebionetworks.web.client.jsinterop.ReactNode;
import org.sagebionetworks.web.client.jsinterop.ReactElement;
import org.sagebionetworks.web.client.jsinterop.SRC;
import org.sagebionetworks.web.client.jsinterop.TermsAndConditionsProps;
import org.sagebionetworks.web.client.utils.Callback;
Expand Down Expand Up @@ -168,7 +168,7 @@ public void showTermsOfUse(boolean hasAccepted) {
TermsAndConditionsProps props = TermsAndConditionsProps.create(
this::onFormChange
);
ReactNode component = React.createElementWithSynapseContext(
ReactElement component = React.createElementWithSynapseContext(
SRC.SynapseComponents.TermsAndConditions,
props,
propsProvider.getJsInteropContextProps()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
import org.sagebionetworks.web.client.cookie.CookieProvider;
import org.sagebionetworks.web.client.jsinterop.EmptyProps;
import org.sagebionetworks.web.client.jsinterop.React;
import org.sagebionetworks.web.client.jsinterop.ReactNode;
import org.sagebionetworks.web.client.jsinterop.ReactElement;
import org.sagebionetworks.web.client.jsinterop.SRC;
import org.sagebionetworks.web.client.place.Search;
import org.sagebionetworks.web.client.place.Synapse;
Expand Down Expand Up @@ -603,7 +603,7 @@ public void onClick(ClickEvent event) {
"https://help.synapse.org/docs/Navigating-Synapse.2048557182.html#NavigatingSynapse-Favorites"
);
EmptyProps props = EmptyProps.create();
ReactNode component = React.createElementWithSynapseContext(
ReactElement component = React.createElementWithSynapseContext(
SRC.SynapseComponents.FavoritesPage,
props,
propsProvider.getJsInteropContextProps()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import org.sagebionetworks.repo.model.EntityType;
import org.sagebionetworks.web.client.jsinterop.EntityTypeIconProps;
import org.sagebionetworks.web.client.jsinterop.React;
import org.sagebionetworks.web.client.jsinterop.ReactNode;
import org.sagebionetworks.web.client.jsinterop.ReactElement;
import org.sagebionetworks.web.client.jsinterop.SRC;

public class EntityTypeIconImpl
Expand All @@ -23,7 +23,7 @@ public EntityTypeIconImpl(EntityType type) {
@Override
public void configure(EntityType type) {
EntityTypeIconProps props = EntityTypeIconProps.create(type);
ReactNode component = React.createElementWithThemeContext(
ReactElement component = React.createElementWithThemeContext(
SRC.SynapseComponents.EntityTypeIcon,
props
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import org.sagebionetworks.web.client.jsinterop.AlertButtonConfig;
import org.sagebionetworks.web.client.jsinterop.FullWidthAlertProps;
import org.sagebionetworks.web.client.jsinterop.React;
import org.sagebionetworks.web.client.jsinterop.ReactNode;
import org.sagebionetworks.web.client.jsinterop.ReactElement;
import org.sagebionetworks.web.client.jsinterop.SRC;

public class FullWidthAlert implements IsWidget {
Expand Down Expand Up @@ -60,7 +60,7 @@ private void rerender() {
isGlobal,
alertType
);
ReactNode component = React.createElementWithThemeContext(
ReactElement component = React.createElementWithThemeContext(
SRC.SynapseComponents.FullWidthAlert,
props
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import org.gwtbootstrap3.client.ui.html.Span;
import org.sagebionetworks.web.client.jsinterop.HelpPopoverProps;
import org.sagebionetworks.web.client.jsinterop.React;
import org.sagebionetworks.web.client.jsinterop.ReactNode;
import org.sagebionetworks.web.client.jsinterop.ReactElement;
import org.sagebionetworks.web.client.jsinterop.SRC;

/**
Expand Down Expand Up @@ -54,7 +54,7 @@ protected void updateContent() {
showCloseButton,
className
);
ReactNode component = React.createElementWithThemeContext(
ReactElement component = React.createElementWithThemeContext(
SRC.SynapseComponents.HelpPopover,
props
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import com.google.gwt.dom.client.SpanElement;
import org.sagebionetworks.web.client.jsinterop.IconSvgProps;
import org.sagebionetworks.web.client.jsinterop.React;
import org.sagebionetworks.web.client.jsinterop.ReactNode;
import org.sagebionetworks.web.client.jsinterop.ReactElement;
import org.sagebionetworks.web.client.jsinterop.SRC;

public class IconSvg extends ReactComponent {
Expand All @@ -24,7 +24,7 @@ public void configure(String icon, String label) {

private void renderComponent() {
IconSvgProps props = IconSvgProps.create(icon, label);
ReactNode component = React.createElementWithThemeContext(
ReactElement component = React.createElementWithThemeContext(
SRC.SynapseComponents.IconSvg,
props
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import org.sagebionetworks.web.client.jsinterop.AlertButtonConfig;
import org.sagebionetworks.web.client.jsinterop.OrientationBannerProps;
import org.sagebionetworks.web.client.jsinterop.React;
import org.sagebionetworks.web.client.jsinterop.ReactNode;
import org.sagebionetworks.web.client.jsinterop.ReactElement;
import org.sagebionetworks.web.client.jsinterop.SRC;

public class OrientationBanner implements IsWidget {
Expand Down Expand Up @@ -43,7 +43,7 @@ private void rerender() {
primaryButtonConfig,
secondaryButtonConfig
);
ReactNode component = React.createElementWithThemeContext(
ReactElement component = React.createElementWithThemeContext(
SRC.SynapseComponents.OrientationBanner,
props
);
Expand Down
Loading

0 comments on commit f36f0a2

Please sign in to comment.