UNPKG

@redocly/theme

Version:

Shared UI components lib

59 lines 2.99 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.dynamic = dynamic; const react_1 = __importDefault(require("react")); function dynamic(factory, { ssr = true, loading } = {}) { const Component = react_1.default.lazy(() => factory().then((mod) => { // Case 1: factory() => import('./SomeModule') - direct import // Case 2: factory() => import('./SomeModule').then(mod => mod.default) - extract default if (typeof mod === 'function') { return { default: mod }; } // Case 3: factory() => import('./SomeModule').then(mod => ({ default: mod.default })) - manual wrap // Case 4: factory() => import('./SomeModule').then(mod => ({ default: mod.Named })) - manual wrap named if (mod && typeof mod === 'object' && 'default' in mod) { const defaultExport = mod.default; // Handle both function components and React component objects (e.g., memo/forwardRef) if (typeof defaultExport === 'function') { return { default: defaultExport }; } if (defaultExport && typeof defaultExport === 'object' && '$$typeof' in defaultExport) { return { default: defaultExport }; } } // Case 5: factory() => import('./SomeModule').then(mod => mod.Named) - find named export if (mod && typeof mod === 'object') { const modObj = mod; for (const key in modObj) { const value = modObj[key]; if (typeof value === 'function') { return { default: value }; } if (value && typeof value === 'object' && '$$typeof' in value) { return { default: value }; } } } throw new Error('Dynamic import did not return a valid React component'); })); const LoadingComponent = loading || (() => null); return (props) => { const [hasMounted, setHasMounted] = react_1.default.useState(false); react_1.default.useEffect(() => { setHasMounted(true); }, []); if (ssr) { return (react_1.default.createElement(react_1.default.Suspense, { fallback: react_1.default.createElement(LoadingComponent, Object.assign({}, props)) }, react_1.default.createElement(Component, Object.assign({}, props)))); } if (!hasMounted) { return react_1.default.createElement(LoadingComponent, Object.assign({}, props)); } return (react_1.default.createElement(react_1.default.Suspense, { fallback: react_1.default.createElement(LoadingComponent, Object.assign({}, props)) }, react_1.default.createElement(Component, Object.assign({}, props)))); }; } //# sourceMappingURL=Dynamic.js.map