UNPKG

comindware.core.ui

Version:

Comindware Core UI provides the basic components like editors, lists, dropdowns, popups that we so desperately need while creating Marionette-based single-page applications.

69 lines (53 loc) 2.23 kB
import BranchView from '../views/BranchView'; import RootView from '../views/RootView'; import RootViewWithToolbar from '../views/RootViewWithToolbar'; import LeafView from '../views/LeafView'; import EmptyView from '../views/EmptyView'; import UnNamedBranchView from '../views/UnNamedBranchView'; import { RootViewFactoryOptions, NodeViewFactoryOptions } from '../types'; export default { getRootView(config: RootViewFactoryOptions) { if (config.showToolbar) { return RootViewWithToolbar; } return RootView; }, getNodeView(config: NodeViewFactoryOptions) { const { model, unNamedType, nestingOptions } = config; const { stopNestingType, forceBranchType, forceLeafType } = nestingOptions; const type = model.get('type'); const fieldType = model.get('fieldType'); const getIsForceType = (forceType?: string[] | string) => { if (!forceType) { return; } const result = Array.isArray(forceType) ? forceType.includes(type) || forceType.includes(fieldType) : type === forceType || fieldType === forceType; return result; }; const isForcedBranch = getIsForceType(forceBranchType); const isForcedLeaf = getIsForceType(forceLeafType); const nestingAllowed = !stopNestingType || (() => { const modelParent = model.getParent; // TODO resolve type errors if (!modelParent) { return false; } return modelParent().get('type') !== stopNestingType || modelParent().get('fieldType') !== stopNestingType; })(); // TODO think about passing an optional getNodeView const isBranchView = isForcedBranch || nestingAllowed; if (!model.isContainer || isForcedLeaf) { return LeafView; } const collection = model.get(model.childrenAttribute); if (!collection.length) { return EmptyView; } if (unNamedType && type === unNamedType) { return UnNamedBranchView; } if (isBranchView) { return BranchView; } } };