UNPKG

@intuitionrobotics/thunderstorm

Version:
208 lines 7.35 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Adapter = exports.BaseAdapter = void 0; exports.AdapterBuilder = AdapterBuilder; const React = require("react"); const ts_common_1 = require("@intuitionrobotics/ts-common"); const SimpleTreeNodeRenderer_1 = require("../tree/SimpleTreeNodeRenderer"); class BaseAdapter { constructor(data) { this.getChildren = (obj) => (0, ts_common_1._keys)(obj); this.isParent = (obj) => true; this.data = data; } setData(data) { this.data = data; return this; } filter(obj, key) { return true; } getFilteredChildren(obj) { if (obj === undefined || obj === null) return []; if (typeof obj !== "object" && !Array.isArray(obj)) return []; // @ts-ignore return this.getChildren(obj).filter((__key) => this.filter(obj, __key)); } adjust(obj) { return { data: obj, deltaPath: "" }; } clone(baseAdapter) { (0, ts_common_1._keys)(this).forEach(k => { baseAdapter[k] = this[k]; }); return baseAdapter; } } exports.BaseAdapter = BaseAdapter; class Adapter extends BaseAdapter { constructor() { super(...arguments); this.hideRoot = false; this.treeNodeRenderer = SimpleTreeNodeRenderer_1.SimpleTreeNodeRenderer; } setTreeNodeRenderer(renderer) { this.treeNodeRenderer = renderer; return this; } resolveRenderer(propKey) { return (pah) => null; } } exports.Adapter = Adapter; class BaseAdapterBuilder { constructor() { this.getChildrenKeys = (obj) => (0, ts_common_1._keys)(obj); this.isParent = (obj) => true; this.adjust = (obj) => ({ data: obj, deltaPath: "" }); } setData(data) { this.data = data; return this; } } class ListSingleAdapterBuilder extends BaseAdapterBuilder { constructor(renderer) { super(); this.renderer = renderer; this.treeNodeRenderer = (props) => { const _Renderer = this.renderer; return React.createElement("div", { id: props.node.path, onClick: props.node.onClick }, React.createElement(_Renderer, { item: props.item, node: props.node })); }; this.isParent = (obj) => obj === this.data; } nested() { this.getChildrenKeys = (obj) => { if (typeof obj !== "object") return []; if (Array.isArray(obj)) return (0, ts_common_1._keys)(obj); if (!obj._children) return []; return ["_children"]; }; this.treeNodeRenderer = (props) => { const item = props.item; const _Renderer = this.renderer; return React.createElement("div", { id: props.node.path, onClick: props.node.onClick }, React.createElement(_Renderer, { item: typeof props.item === "object" ? item.item : props.item, node: props.node })); }; return this; } build() { const adapter = new Adapter(this.data); adapter.hideRoot = true; adapter.treeNodeRenderer = this.treeNodeRenderer; adapter.getChildren = this.getChildrenKeys; adapter.isParent = this.isParent; adapter.adjust = this.adjust; // @ts-ignore adapter.itemRenderer = this.renderer; return adapter; } } class ListMultiAdapterBuilder extends BaseAdapterBuilder { constructor(rendererMap) { super(); this.rendererMap = rendererMap; this.getChildrenKeys = (obj) => { if (typeof obj !== "object") return []; if (Array.isArray(obj)) return (0, ts_common_1._keys)(obj); if (!obj._children) return []; return ["_children"]; }; this.treeNodeRenderer = (props) => { if (props.node.propKey === "_children") return null; const _Renderer = this.rendererMap[props.item.type]; return React.createElement("div", { id: props.node.path, onClick: props.node.onClick }, React.createElement(_Renderer, { item: props.item.item, node: props.node })); }; } nested() { return this; } noGeneralOnClick() { this.treeNodeRenderer = (props) => { if (props.node.propKey === "_children") return null; const _Renderer = this.rendererMap[props.item.type]; return React.createElement("div", { id: props.node.path }, React.createElement(_Renderer, { item: props.item.item, node: props.node })); }; return this; } build() { const adapter = new Adapter(this.data); adapter.hideRoot = true; adapter.adjust = this.adjust; adapter.treeNodeRenderer = this.treeNodeRenderer; adapter.getChildren = this.getChildrenKeys; return adapter; } } class TreeSingleAdapterBuilder extends BaseAdapterBuilder { constructor(renderer) { super(); this.treeNodeRenderer = (props) => { const item = props.item; const _Renderer = this.renderer; return React.createElement("div", { id: props.node.path, onClick: props.node.onClick }, React.createElement(_Renderer, { item: typeof props.item === "object" ? item.item : props.item, node: props.node })); }; this.renderer = renderer; } build() { const adapter = new Adapter(this.data); adapter.treeNodeRenderer = (props) => { const renderCollapse = () => { let toDisplay; if (typeof props.item !== "object") toDisplay = ""; else if (Object.keys(props.item).length === 0) toDisplay = ""; else if (props.node.expanded) toDisplay = "-"; else toDisplay = "+"; return React.createElement("div", { className: `clickable`, id: props.node.path, onClick: props.node.expandToggler, style: { width: "15px" } }, toDisplay); }; return (React.createElement("div", { className: "ll_h_c" }, renderCollapse(), React.createElement("div", { id: props.node.path, className: 'clickable', onClick: props.node.onClick, style: { backgroundColor: props.node.focused ? "red" : "salmon", userSelect: "none" } }, React.createElement(SimpleTreeNodeRenderer_1.SimpleNodeRenderer, Object.assign({}, props))))); }; return adapter; } } class ListAdapterBuilder { singleRender(renderer) { return new ListSingleAdapterBuilder(renderer); } multiRender(rendererMap) { return new ListMultiAdapterBuilder(rendererMap); } } class TreeAdapterBuilder { singleRender(renderer) { return new TreeSingleAdapterBuilder(renderer); } } class MainAdapterBuilder { list() { return new ListAdapterBuilder(); } tree() { return new TreeAdapterBuilder(); } } function AdapterBuilder() { return new MainAdapterBuilder(); } //# sourceMappingURL=Adapter.js.map