codevise/pageflow

View on GitHub
entry_types/paged/packages/pageflow-paged-react/src/boot.js

Summary

Maintainability
A
2 hrs
Test Coverage
import {registry as pageTypeRegistry} from 'registerPageType';
import {registry as widgetTypeRegistry} from 'registerWidgetType';

import createStore from 'createStore';

import backgroundMedia from 'backgroundMedia';
import cookieNotice from 'cookieNotice';
import featuresModule from 'features';
import siteModule from 'site';
import storylinesModule from 'storylines';
import chaptersModule from 'chapters';
import pagesModule, {createPageType} from 'pages';
import pageTypesModule from 'pageTypes';
import currentModule from 'current';
import filesModule from 'files';
import settingsModule from 'settings';
import i18nModule from 'i18n';
import entryModule from 'entry';
import hotkeysModule from 'hotkeys';
import hideTextModule from 'hideText';
import widgetsModule, {createWidgetType} from 'widgets';
import widgetPresenceModule from 'widgetPresence';
import themeModule from 'theme';
import consentModule from 'consent';

export default function(pageflow) {
  const isEditor = !!pageflow.storylines;
  const isServerSide = !pageflow.settings;

  const seed = pageflow.seed;
  const collections = isEditor ? pageflow : seed;

  const options = {
    isServerSide,

    locale: seed.locale,
    entry: collections.entry,

    enabledFeatureNames: seed['enabled_feature_names'],
    fileUrlTemplates: seed['file_url_templates'],
    modelTypes: seed['file_model_types'],
    pageTypesSeed: seed['page_types'],

    pageTypes: pageTypeRegistry,

    site: seed.site,
    files: collections.files || {},
    storylines: collections.storylines,
    chapters: collections.chapters,
    pages: collections.pages,
    widgets: isEditor ? pageflow.entry.widgets : seed.widgets,

    cookies: pageflow.cookies,
    hideText: pageflow.hideText,
    events: pageflow.events,
    settings: pageflow.settings,
    widgetsApi: pageflow.widgets,
    backgroundMedia: pageflow.backgroundMedia,
    consent: pageflow.consent,

    window: isServerSide ? null : window
  };

  const store = createStore([
    backgroundMedia,
    cookieNotice,
    featuresModule,
    i18nModule,
    siteModule,
    entryModule,
    currentModule,
    storylinesModule,
    chaptersModule,
    pagesModule,
    filesModule,
    settingsModule,
    hideTextModule,
    widgetsModule,
    widgetPresenceModule,
    pageTypesModule,
    hotkeysModule,
    themeModule,
    consentModule
  ], options);


  if (!isServerSide) {
    pageTypeRegistry.forEach(options =>
      pageflow.pageType.register(options.name, createPageType({
        ...options,
        Component: options.component,
        store
      }))
    );

    widgetTypeRegistry.forEach(({name, component}) =>
      pageflow.widgetTypes.register(name, createWidgetType(component, store))
    );
  }

  return store;
}