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;
}