function createAlfaApp()

in packages/react/alfa-react/src/createAlfaApp.tsx [22:68]


function createAlfaApp<P = any>(option: AlfaFactoryOption): React.FC<any> {
  const { name, dependencies, priority, dynamicConfig, manifest } = option || {};

  // check app option
  if (!name) return () => null;

  let preLoader: () => Promise<any>;

  if (priority === 'high' && !IS_SSR) {
    const p = loader.register({
      ...option,
      // 必须设置 container,否则沙箱会创建插入一个新的 body
      container: document.body,
      dynamicConfig: typeof dynamicConfig === 'boolean' ? dynamicConfig : !manifest,
    });

    preLoader = async () => p;
  }

  const passedInOption = option;

  return (props: P & IProps) => {
    const customProps = useMemo(() => ({
      ...props,
      __injectHistory: props.history,
    }), [props]);

    return (
      <ErrorBoundary {...props}>
        <Application
          // 兼容历史逻辑,优先使用 option 中的 sandbox 参数
          {...passedInOption}
          style={props.style || passedInOption.style}
          syncHistory={props.syncHistory}
          syncRegion={props.syncRegion}
          syncResourceGroup={props.syncResourceGroup}
          onSyncHistory={props.onSyncHistory}
          basename={props.basename}
          sandbox={option.sandbox || props.sandbox}
          deps={dependencies || {}}
          customProps={customProps}
          preLoader={preLoader}
        />
      </ErrorBoundary>
    );
  };
}