export function createCWSWidget()

in packages/react/alfa-react/src/widget.tsx [11:48]


export function createCWSWidget<T>(option: WidgetFactoryOption) {
  const AlfaWidget = lazy(async () => {
    let { url } = option;

    let config: WidgetCWSConfig = {
      links: {},
      features: {},
      locales: {},
      conf: {},
    };

    if (!url) {
      const { version, entryUrl } = await getWidgetVersionById(option);
      url = entryUrl;
      config = await getWidgetConfigById({ ...option, version });
    }

    const deps = await getWidgetDeps(config, option);

    return loadBundle({
      id: normalizeName(option.name),
      url: (option.url || url || '').replace('index.js', (option?.alfaLoader) ? 'index.alfa.js' : 'index.js'),
      deps: {
        ...deps,
        ...option.dependencies,
      },
      xmlrequest: !option.alfaLoader,
      context: {
        window,
        location,
        history,
        document,
      },
    });
  });

  return (props: T) => (
    <Suspense fallback={<Loading loading={option.loading} />}>