beattyml1/metatonic-platform

View on GitHub
metatonic-redux/src/createMetatonicAppInitializer.ts

Summary

Maintainability
A
45 mins
Test Coverage
import {AllMetatonicEvents, FormState, MetatonicRootAction} from "metatonic-core";
import {PersistentDataStore} from "metatonic-core";
import {ComponentRegistry, defaultComponentRegistry} from "metatonic-core";
import {
    MetatonicAppConfig, MetatonicContextInitializer, MetatonicReduxApp,
    MetatonicReduxContext
} from "./MetatonicReduxApp.interfaces";
import {FormEvents, MetatonicAction} from "metatonic-core";
import {FormProperties} from "metatonic-core";
import {getEditorResolverContext} from "metatonic-core";
import {MetatonicReduxAppInstance} from "./MetatonicReduxAppInstance";
import {Map} from "./PrivateTypes";

export function createMetatonicAppInitializer(config: MetatonicAppConfig){
    let o = config;
    let hasDefaultContext = o.dataStore && o.componentRegistry;
    let getAllKeys = (...maps: any[]) => new Set(maps.filter(_=>_).reduce((keys, map) => [...keys, Object.keys(map)], new Array<string>()));
    let allKeys = getAllKeys(o.dataStores, o.contexts, o.componentRegistries, hasDefaultContext ? { default: {} } : {});
    let getContext = (key) =>
        o.contexts && o.contexts[key] || {
            componentRegistry: o.componentRegistries && o.componentRegistries[key] || o.componentRegistry,
            dataStore: o.dataStores && o.dataStores[key] || o.dataStore
        }
    let contexts = Array.from(allKeys.entries()).reduce((contexts, key) => Object.assign(getContext(key), contexts), {});
    return contexts;
}