@intuitionrobotics/thunderstorm
Version:
208 lines • 7.35 kB
JavaScript
"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