in src/components/ComponentsProvider/index.tsx [34:82]
function getComponent(code: string, callback: GetComponentCallback = () => {}) {
const comp = componentsRef.current[code];
// no component
if (!comp) {
callback({ code, errCode: 'NO_CODE' });
return null;
}
if ('component' in comp) {
if (comp.type !== 'decorator') {
callback({ code, async: false, component: comp.component });
}
return comp.component;
}
if ('decorator' in comp) {
const component = (compProps: any) => (
<LazyComponentWithCode
code={comp.decorator}
decoratorData={comp.data}
onLoad={callback}
{...compProps}
/>
);
componentsRef.current[code] = { component, type: 'decorator' };
return component;
}
if ('url' in comp) {
const component = lazyComponent(
comp.url,
comp.name,
() => {
componentsRef.current[code] = { component };
callback({ code, async: true, component });
},
() => {
callback({ code, errCode: 'ERR_IMPORT_SCRIPT' });
},
);
return component;
}
callback({ code, errCode: 'NO_HANDLER' });
return null;
}