export async function loadOverview()

in docs-sdk/docs-consumer/src/index.tsx [40:121]


export async function loadOverview(
  opts: ILoadOverviewOpts
): Promise<React.ComponentType<IOverviewProps>> {
  const {
    resolveAppDeps,
    resolveAppServePath,
    resolveDemoOpts,
  } = await wrapResolvers(opts);
  const resolvedDeps = await resolveAppDeps(opts.consoleOSId);
  const actualDeps = {
    ...resolvedDeps,
    "@breezr-doc-internals/externaled-deps": resolvedDeps,
  };
  const ActualOverview = await load({
    servePath: opts.servePath,
    consoleOSId: opts.consoleOSId,
    deps: actualDeps,
    exportName: "Overview",
  })
    .then((m: any) => m())
    .then((m: any) => m.default);

  // 包装一下加载到的组件,覆盖resolveAppDeps,使得它能拿到loadedSelfDeps
  const Wrapped: React.ComponentType<IOverviewProps> = (props) => {
    const mergedResolveAppDeps = React.useCallback(
      async (consoleOSId) => {
        const [a, b] = await Promise.all([
          resolveAppDeps(consoleOSId),
          props.resolveAppDeps?.(consoleOSId),
        ]);
        return {
          ...a,
          ...b,
        };
      },
      [props.resolveAppDeps]
    );

    const mergedResolveAppServePath = React.useCallback(
      (consoleOSId) => {
        let res = props.resolveAppServePath?.(consoleOSId) ?? "";
        if (!res) res = resolveAppServePath(consoleOSId);
        return res;
      },
      [props.resolveAppDeps]
    );

    const mergedResolveDemoOpts = React.useCallback(
      (consoleOSId) => {
        return {
          ...resolveDemoOpts?.(consoleOSId),
          ...props.resolveDemoOpts?.(consoleOSId),
        };
      },
      [props.resolveDemoOpts]
    );

    const demoOpts = React.useMemo(() => {
      return mergedResolveDemoOpts(opts.consoleOSId);
    }, [mergedResolveDemoOpts]);

    const loadOpts = React.useMemo(() => {
      return {
        ...opts,
        entryKey: props.entryKey,
      };
    }, [props.entryKey]);

    return (
      <ActualOverview
        {...props}
        resolveAppDeps={mergedResolveAppDeps}
        resolveAppServePath={mergedResolveAppServePath}
        resolveDemoOpts={mergedResolveDemoOpts}
        demoOpts={demoOpts}
        loadOpts={loadOpts}
      />
    );
  };

  return Wrapped;
}