UNPKG

102 kBSource Map (JSON)View Raw
1{"version":3,"file":"eyzy-tree.js","sources":["../src/utils/index.ts","../src/utils/cn.ts","../src/utils/shallowEqual.ts","../src/components/TreeNode.tsx","../src/utils/find.ts","../src/utils/traveler.ts","../src/TreeAPI.ts","../src/core/State.ts","../src/utils/uuid.ts","../src/utils/parser.ts","../src/core/Core.ts","../src/utils/linkedNode.ts","../src/components/Tree.tsx"],"sourcesContent":["import { TreeNode } from '../types/Node'\r\n\r\nexport const hasOwnProp = {}.hasOwnProperty\r\n\r\nexport function toArray(value: any): any[] {\r\n return isArray(value) ? value : [value]\r\n} \r\n\r\nexport function callFetcher(node: TreeNode, fn: any): PromiseLike<any> {\r\n if (!isCallable(fn)) {\r\n throw new TypeError('\"fetcher\" it must be either function or promise')\r\n }\r\n\r\n const result = isFunction(fn) ? fn(node) : fn\r\n\r\n if (!result || !result.then) {\r\n throw new TypeError('\"fetcher\" property must return a Promise')\r\n }\r\n\r\n return result\r\n}\r\n\r\nexport function grapObjProps(obj: any, props: string[]) {\r\n return props.reduce((result: any, name: string) => {\r\n if (name in obj) {\r\n result[name] = obj[name]\r\n }\r\n\r\n return result\r\n }, {});\r\n}\r\n\r\nexport function isObject(obj: any) {\r\n return obj != null && typeof obj === 'object' && !Array.isArray(obj)\r\n}\r\n\r\nexport function isString(obj: any): boolean {\r\n return 'string' === typeof obj\r\n}\r\n\r\nexport function isRegExp(obj: any): boolean {\r\n return obj instanceof RegExp\r\n}\r\n\r\nexport function isBoolean(obj: any): boolean {\r\n return 'boolean' === typeof obj\r\n}\r\n\r\nexport function isArray(obj: any): boolean {\r\n return Array.isArray(obj)\r\n}\r\n\r\nexport function isExpandable(node: TreeNode): boolean {\r\n return !!(node.child && node.child.length) || !!node.isBatch\r\n}\r\n\r\nexport function isCheckable(node: TreeNode): boolean {\r\n return !(!!node.disabled || !!node.disabledCheckbox)\r\n}\r\n\r\nexport function isFunction(value: any): boolean {\r\n return 'function' === typeof value \r\n}\r\n\r\nexport function isCallable(value: any): boolean {\r\n return isFunction(value) || (value && !!value.then)\r\n}\r\n\r\nexport function isEmpty(value: any): boolean {\r\n if (isArray(value)) {\r\n return value.length === 0\r\n }\r\n\r\n return !value\r\n}\r\n\r\nexport function get(obj: any, path: any): any {\r\n if (!obj) {\r\n return void 0\r\n }\r\n\r\n if (!isArray(path)) {\r\n path = path.split('.')\r\n }\r\n\r\n const len: number = path.length\r\n let i: number = 0\r\n\r\n while (obj != null && i < len) {\r\n obj = obj[path[i++]]\r\n }\r\n\r\n return i && i === len ? obj : undefined\r\n}\r\n\r\nexport function has(targetArray: any[], targetValue: any): boolean {\r\n return !!~targetArray.indexOf(targetValue)\r\n}\r\n\r\nexport function copyArray<T>(arr: T[]): T[] {\r\n return arr.concat([])\r\n}\r\n\r\nexport function copy(obj: any): any {\r\n const result = isArray(obj) ? [] : {}\r\n\r\n for (const key in obj) {\r\n if ('parent' === key) {\r\n continue\r\n }\r\n\r\n if (hasOwnProp.call(obj, key)) {\r\n const value: any = obj[key]\r\n result[key] = (typeof value === \"object\") ? copy(value) : value\r\n }\r\n }\r\n\r\n return result\r\n}\r\n\r\nexport function copyObject(obj: any) {\r\n const newObj = {}\r\n\r\n for (const i in obj) {\r\n if (hasOwnProp.call(obj, i)) {\r\n newObj[i] = isArray(obj[i]) ? copyArray(obj[i]) : obj[i]\r\n }\r\n }\r\n\r\n return newObj\r\n}\r\n\r\nexport function remove(targetArr: any[], targetItem: any) {\r\n const index: number = targetArr.indexOf(targetItem)\r\n\r\n if (~index) {\r\n targetArr.splice(index, 1)\r\n }\r\n}\r\n\r\nexport function isRoot(node: TreeNode): boolean {\r\n return node && !node.parent\r\n}\r\n\r\nexport function isLeaf(node: TreeNode): boolean {\r\n return !node.child || (0 === node.child.length && !node.isBatch)\r\n}\r\n\r\nexport function isNodeIndeterminate(node: TreeNode, treeCheckedNodes: string[], indeterminateNodes: string[]): boolean {\r\n if (!node.child.length) {\r\n return false\r\n }\r\n\r\n const hasIndeterminate: boolean = node.child.some((child: TreeNode) => {\r\n return !child.disabled && !child.disabledCheckbox && -1 !== indeterminateNodes.indexOf(child.id)\r\n })\r\n\r\n if (hasIndeterminate) {\r\n return true\r\n }\r\n\r\n const uncheckedNodes = node.child.reduce((count: number, item: TreeNode) => {\r\n if (true !== item.disabled && true !== item.disabledCheckbox && -1 === treeCheckedNodes.indexOf(item.id)) {\r\n count++\r\n }\r\n\r\n return count\r\n }, 0)\r\n\r\n return uncheckedNodes > 0 && uncheckedNodes < node.child.length\r\n}\r\n","import { isArray } from './index'\r\n\r\nconst hasOwn = {}.hasOwnProperty\r\n\r\nexport default function cn(args: any): string {\r\n const result = []\r\n\r\n if (isArray(args)) {\r\n return args.join(' ')\r\n }\r\n\r\n for (const key in args) {\r\n if (hasOwn.call(args, key) && args[key]) {\r\n result.push(key)\r\n }\r\n }\r\n\r\n return result.join(' ')\r\n}","\r\nexport function shallowEqual(objA: any, objB: any, keys: string[]): boolean {\r\n if (objA === objB) {\r\n return true\r\n }\r\n\r\n for (let i = 0; i < keys.length; i++) {\r\n const key = keys[i]\r\n const valueA = objA[key]\r\n const valueB = objB[key]\r\n\r\n if (valueA !== valueB) {\r\n return false\r\n }\r\n }\r\n\r\n return true\r\n}","import React from 'react'\r\nimport { TreeNodeProps, TreeNode } from '../types/Node'\r\n\r\nimport cn from '../utils/cn'\r\nimport { shallowEqual } from '../utils/shallowEqual'\r\n\r\nconst hasChild = (node: TreeNodeProps): boolean => {\r\n return node.isBatch || node.child.length > 0\r\n}\r\n\r\nconst comparingKeys = [\r\n 'id', 'checked', 'selected', 'child', 'checked', 'expanded', 'hash', 'loading'\r\n]\r\n\r\nexport default class Node extends React.Component<TreeNodeProps> {\r\n shouldComponentUpdate(nextProps: TreeNodeProps): boolean {\r\n if (0 === nextProps.depth && this.props.hash !== nextProps.hash) {\r\n return true\r\n }\r\n\r\n return !shallowEqual(this.props, nextProps, comparingKeys)\r\n }\r\n\r\n getNode(): TreeNode {\r\n return this.props.node\r\n }\r\n\r\n handleSelect = (event: React.MouseEvent) => {\r\n if (this.props.onSelect) {\r\n this.props.onSelect(this.getNode(), event)\r\n }\r\n }\r\n\r\n handleCheck = () => {\r\n if (this.props.onCheck) {\r\n this.props.onCheck(this.getNode())\r\n }\r\n }\r\n\r\n handleExpand = () => {\r\n if (this.props.onExpand) {\r\n this.props.onExpand(this.getNode())\r\n }\r\n }\r\n\r\n handleDoubleClick = (e: any) => {\r\n if (this.props.onDoubleClick) {\r\n this.props.onDoubleClick(this.getNode())\r\n }\r\n }\r\n\r\n renderCheckbox = () => {\r\n if (!this.props.checkable) {\r\n return null\r\n }\r\n\r\n const Checkbox = this.props.checkboxRenderer\r\n\r\n if (!Checkbox) {\r\n return <span className=\"node-checkbox\" onMouseUp={this.handleCheck} /> \r\n }\r\n\r\n return (\r\n <span className=\"node-checkbox-overrided\" onMouseUp={this.handleCheck}>\r\n <Checkbox node={this.getNode()} />\r\n </span>\r\n )\r\n }\r\n\r\n renderArrow = () => {\r\n const ArrowRenderer = this.props.arrowRenderer\r\n\r\n if (!hasChild(this.props)) {\r\n return <span className=\"node-noop\" />\r\n }\r\n\r\n if (!ArrowRenderer) {\r\n return <span className=\"node-arrow\" onMouseUp={this.handleExpand} />\r\n }\r\n\r\n return (\r\n <span className=\"node-arrow-extended\" onMouseUp={this.handleExpand}>\r\n <ArrowRenderer node={this.getNode()} />\r\n </span>\r\n )\r\n }\r\n\r\n render() {\r\n const {\r\n loading,\r\n checked,\r\n selected,\r\n children,\r\n expanded,\r\n disabled,\r\n disabledCheckbox,\r\n className,\r\n indeterminate,\r\n useIndeterminateState,\r\n textRenderer: TextRenderer\r\n } = this.props\r\n\r\n const text = this.props.text\r\n const nodeContentClass = cn({\r\n 'node-content': true,\r\n 'has-child': hasChild(this.props),\r\n 'selected': selected,\r\n 'checked': checked,\r\n 'expanded': expanded,\r\n 'disabled': disabled,\r\n 'loading': loading,\r\n 'disabled-checkbox': disabledCheckbox,\r\n 'indeterminate': !checked && indeterminate && false !== useIndeterminateState\r\n })\r\n\r\n const containerClassNames = ['tree-node']\r\n\r\n if (className) {\r\n containerClassNames.push(className)\r\n }\r\n\r\n return (\r\n <li className={containerClassNames.join(' ')}>\r\n <div className={nodeContentClass}>\r\n\r\n { this.renderArrow() }\r\n { this.renderCheckbox() }\r\n\r\n <span className=\"node-text\" onMouseUp={this.handleSelect} onDoubleClick={this.handleDoubleClick}>\r\n { TextRenderer ? <TextRenderer node={this.getNode()} /> : text }\r\n </span>\r\n </div>\r\n\r\n { children && expanded &&\r\n <ul className=\"node-child\">{ children }</ul>\r\n }\r\n </li>\r\n )\r\n }\r\n}\r\n","import { TreeNode } from '../types/Node'\r\nimport { \r\n isObject, \r\n isString, \r\n isRegExp, \r\n isFunction, \r\n isExpandable, \r\n isCheckable, \r\n isEmpty, \r\n toArray,\r\n get\r\n} from './index'\r\n\r\ntype Traveler = (source: TreeNode[], cb: (node: TreeNode) => boolean) => boolean\r\ntype Query = (node: TreeNode) => boolean\r\n\r\n/**\r\n * Queries:\r\n * - api.find(/item \\d{2}/) // it will search by text (using RegExp)\r\n * - api.find('item') // the same\r\n * - api.find(node => node.disabled) // function \r\n * \r\n * - api.find({text: ['Item 1', 'Item 2']}) // KEY OR\r\n * - api.find({text: /item/, selected: true}) // AND\r\n * - api.find([{text: /item/}, {selected: true}]) // OR\r\n */\r\n\r\nconst specials = {\r\n disabledCheckbox: (node: TreeNode, value: any) => !value === !node.disabledCheckbox,\r\n disabled: (node: TreeNode, value: any) => !value === !node.disabled,\r\n expandable: (node: TreeNode, value: any) => value === isExpandable(node),\r\n expanded: (node: TreeNode, value: any) => {\r\n if (value) {\r\n return !!node.expanded\r\n }\r\n\r\n return isExpandable(node) && !node.expanded\r\n },\r\n selected: (node: TreeNode, value: any) => !value === !node.selected,\r\n checked: (node: TreeNode, value: any) => !value === !node.checked,\r\n checkable: (node: TreeNode, value: any) => value === isCheckable(node),\r\n isLeaf: (node: TreeNode, value: any) => value !== isExpandable(node),\r\n $not: (node: TreeNode, value: any) => {\r\n const searchQuery: Query[] = toArray(value).map(parseQuery)\r\n\r\n if (isObject(value) && 'expanded' in value) {\r\n searchQuery.push(parseQuery({expandable: false}))\r\n }\r\n\r\n return false === matchQuery(node, searchQuery)\r\n }\r\n}\r\n\r\nfunction parseQuery(query: any): Query {\r\n if (isFunction(query)) {\r\n return query\r\n }\r\n\r\n if (isString(query) ) {\r\n return (node: TreeNode): boolean => {\r\n return testKey(query, node.id) || testKey(query, node.text)\r\n }\r\n }\r\n\r\n if (query.id) {\r\n return (node: TreeNode): boolean => {\r\n return testKey(query.id, node.id)\r\n }\r\n }\r\n\r\n const matches = isRegExp(query)\r\n ? { text: query }\r\n : query\r\n\r\n return (node: TreeNode): boolean => {\r\n const keys: string[] = Object.keys(matches)\r\n\r\n if (!keys.length) {\r\n return false\r\n }\r\n\r\n return keys.every((key: string): boolean => {\r\n if (key in specials) {\r\n return toArray(matches[key])\r\n .some((value: any) => testSpecial(\r\n specials[key],\r\n value,\r\n node\r\n ))\r\n }\r\n\r\n return toArray(matches[key])\r\n .some((value: any) => testKey(value, get(node, key)))\r\n })\r\n }\r\n}\r\n\r\nfunction testSpecial(s: (node: TreeNode, value: any) => boolean, value: any, node: TreeNode): boolean {\r\n return true === s(node, value)\r\n}\r\n\r\nfunction testKey(v0: any, v1: any): boolean {\r\n if (isRegExp(v0)) {\r\n return new RegExp(v0).test(v1)\r\n }\r\n\r\n return v0 === v1\r\n}\r\n\r\nfunction matchQuery(node: TreeNode, query: Query[]): boolean {\r\n return query.some(query => true === query(node))\r\n}\r\n\r\nexport function find(source: TreeNode[], traveler: Traveler, multiple: boolean, query: any[]): any {\r\n if (isEmpty(query)) {\r\n return null\r\n }\r\n\r\n const result: TreeNode[] = []\r\n\r\n const searchQuery: Query[] = toArray(query).map(parseQuery)\r\n const seeker = (node: TreeNode): boolean => {\r\n if (matchQuery(node, searchQuery)) {\r\n result.push(node)\r\n return multiple\r\n }\r\n\r\n return true\r\n }\r\n\r\n traveler(source, seeker)\r\n\r\n if (!result.length) {\r\n return multiple ? [] : null\r\n }\r\n\r\n return multiple ? result : result[0]\r\n}","import { TreeNode } from '../types/Node'\r\n\r\nexport function recurseDown(obj: any, fn: (obj: TreeNode, depth: number) => any, excludeSelf?: boolean, depth: number = 0): any {\r\n let res\r\n\r\n if (Array.isArray(obj)) {\r\n return obj.map(node => recurseDown(node, fn, false, depth))\r\n }\r\n\r\n if (!excludeSelf) {\r\n res = fn(obj, depth)\r\n }\r\n\r\n if (res !== false && obj.child && obj.child.length) {\r\n res = recurseDown(obj.child, fn, false, depth + 1)\r\n }\r\n\r\n return res\r\n}\r\n\r\nexport function rootElement(obj: TreeNode): TreeNode | null {\r\n let node = obj.parent\r\n\r\n while (node) {\r\n if (!node.parent) {\r\n return node\r\n }\r\n\r\n node = node.parent\r\n }\r\n\r\n return null\r\n}\r\n\r\nexport function traverseUp(obj: TreeNode, fn: (obj: TreeNode) => any): any {\r\n let node = obj.parent\r\n\r\n while (node) {\r\n if (false === fn(node) || !node.parent) {\r\n return\r\n }\r\n\r\n node = node.parent\r\n }\r\n}\r\n\r\nexport function getFirstChild(node: TreeNode, onlyEnabled?: boolean): TreeNode | null {\r\n if (onlyEnabled) {\r\n const enabledNodes: TreeNode[] = node.child.filter((n: TreeNode) => !n.disabled)\r\n\r\n return enabledNodes.length ? enabledNodes[0] : null\r\n }\r\n\r\n return node.child[0] || null\r\n}\r\n\r\nexport function getLastChild(node: TreeNode, onlyEnabled?: boolean): TreeNode | null {\r\n const len: number = node.child ? node.child.length : 0\r\n\r\n if (!len) {\r\n return null\r\n }\r\n\r\n if (onlyEnabled) {\r\n const enabledNodes: TreeNode[] = node.child.filter((n: TreeNode) => !n.disabled)\r\n const enabledNodeLen: number = enabledNodes.length\r\n\r\n return enabledNodeLen ? enabledNodes[enabledNodeLen - 1] : null\r\n }\r\n\r\n return node.child[len - 1]\r\n}\r\n\r\nexport interface FlatMap {\r\n nodes: TreeNode[]\r\n ids: string[]\r\n}\r\n\r\nfunction isRootParentCollapsed(node: TreeNode) {\r\n const root: TreeNode | null = rootElement(node)\r\n return !root ? false : !root.expanded\r\n}\r\n\r\nexport function flatMap(collection: TreeNode[], ignoreCollapsed?: boolean): FlatMap {\r\n const result = {\r\n nodes: [],\r\n ids: []\r\n } as FlatMap\r\n\r\n recurseDown(collection, (node: TreeNode) => {\r\n if (node.disabled) {\r\n return\r\n }\r\n\r\n if (ignoreCollapsed && node.parent && !node.parent.expanded || isRootParentCollapsed(node)) {\r\n return\r\n }\r\n\r\n result.nodes.push(node)\r\n result.ids.push(node.id)\r\n })\r\n\r\n return result\r\n}\r\n\r\nexport function walkBreadth(items: TreeNode[], cb: (node: TreeNode) => boolean): boolean {\r\n const levels = {}\r\n\r\n recurseDown(items, (item: TreeNode) => {\r\n const depth = item.depth || 0\r\n\r\n if (!levels[depth]) {\r\n levels[depth] = []\r\n }\r\n\r\n levels[depth].push(item)\r\n })\r\n\r\n const nodes: TreeNode[] = Object.keys(levels).reduce((nodes: TreeNode[], level: string): TreeNode[] => {\r\n nodes.push(...levels[level])\r\n return nodes\r\n }, [])\r\n\r\n return nodes.some((node: TreeNode) => false === cb(node))\r\n}","import { TreeNode } from './types/Node'\r\nimport { TreeComponent } from './types/Tree'\r\nimport { State } from './types/State'\r\nimport { Core, PromiseNodes, InsertOptions } from './types/Core'\r\nimport { CheckboxValueConsistency, TreeAPI as ITreeAPI } from './types/Tree'\r\n\r\nimport { isCheckable, isLeaf } from './utils/index'\r\nimport { find } from './utils/find'\r\nimport { walkBreadth } from './utils/traveler'\r\n\r\nexport class TreeAPI implements ITreeAPI {\r\n readonly state: State\r\n readonly tree: TreeComponent\r\n readonly core: Core\r\n\r\n constructor(tree: TreeComponent, state: State, core: Core) {\r\n this.tree = tree\r\n this.state = state\r\n this.core = core\r\n }\r\n\r\n private _operate<T = any>(query: any, operator: (node: TreeNode) => T | null): T | null {\r\n const node: TreeNode | null = this.find(query)\r\n\r\n if (!node) {\r\n return null\r\n }\r\n\r\n return operator(node)\r\n }\r\n\r\n find(query: any): TreeNode | null {\r\n return find(this.state.get(), walkBreadth, false, query)\r\n }\r\n\r\n findAll(query: any): TreeNode[] {\r\n return find(this.state.get(), walkBreadth, true, query)\r\n }\r\n\r\n selected(): TreeNode[] | TreeNode | null {\r\n const state = this.state\r\n const selected: Array<TreeNode | null> = this.tree.selected\r\n .map((id: string): TreeNode | null => state.byId(id))\r\n\r\n if (true !== this.tree.props.multiple) {\r\n return selected.length ? selected[0] : null\r\n }\r\n\r\n return selected.filter((item: TreeNode | null) => null !== item) as TreeNode[]\r\n }\r\n\r\n checked(valueConsistsOf?: CheckboxValueConsistency, showDisabled?: boolean): TreeNode[] {\r\n const state = this.state\r\n let checked: TreeNode[] = []\r\n\r\n this.tree.checked.forEach((id: string) => {\r\n const node = state.byId(id)\r\n\r\n if (node) {\r\n checked.push(node)\r\n }\r\n })\r\n\r\n if ('WITH_INDETERMINATE' === valueConsistsOf) {\r\n this.tree.indeterminate.forEach((id: string) => {\r\n const node = state.byId(id)\r\n \r\n if (node) {\r\n checked.push(node)\r\n }\r\n })\r\n }\r\n\r\n if (!showDisabled) {\r\n checked = checked.filter(isCheckable)\r\n }\r\n\r\n switch(valueConsistsOf) {\r\n case 'LEAF': return checked.filter((node: TreeNode) => isLeaf(node))\r\n case 'BRANCH': \r\n return checked.filter((node: TreeNode) => {\r\n if (node.parent && node.parent.checked) {\r\n return false\r\n }\r\n\r\n return true\r\n })\r\n }\r\n\r\n return checked\r\n }\r\n\r\n set(query: any, key: string, value: any): boolean {\r\n const node: TreeNode | null = this.find(query)\r\n\r\n if (!node) {\r\n return false\r\n }\r\n\r\n // TODO: selected, checked should be dublicated in the tree state\r\n this.state.set(node.id, key, value)\r\n this.tree.updateState()\r\n\r\n return true\r\n }\r\n\r\n data(query: any, key: any, value?: any): any {\r\n return this._operate<TreeNode>(query, (node: TreeNode) => {\r\n return this.core.data(node, key, value)\r\n })\r\n }\r\n\r\n addClass(query: any, classNames: string | string[]): TreeNode | null {\r\n return this._operate<TreeNode>(query, (node: TreeNode) => {\r\n return this.core.addClass(node, classNames)\r\n })\r\n }\r\n\r\n removeClass(query: any, classNames: string | string[]): TreeNode | null {\r\n return this._operate<TreeNode>(query, (node: TreeNode) => {\r\n return this.core.removeClass(node, classNames)\r\n })\r\n }\r\n\r\n hasClass(query: any, className: string): boolean | null {\r\n return this._operate<boolean>(query, (node: TreeNode) => {\r\n return this.core.hasClass(node, className)\r\n })\r\n }\r\n\r\n append(query: any, source: any, opts?: InsertOptions): PromiseNodes | null {\r\n return this._operate<PromiseNodes>(query, (node: TreeNode) => {\r\n return this.core.insert(node, source, opts)\r\n })\r\n }\r\n\r\n prepend(query: any, source: any, opts?: InsertOptions): PromiseNodes | null {\r\n return this._operate<PromiseNodes>(query, (node: TreeNode) => {\r\n return this.core.insert(node, source, Object.assign({}, opts, {index: 0}))\r\n })\r\n }\r\n\r\n before(query: any, source: any): PromiseNodes | null {\r\n return this._operate<PromiseNodes>(query, (node: TreeNode) => {\r\n return this.core.beside(node, source, 0)\r\n })\r\n }\r\n\r\n after(query: any, source: any): PromiseNodes | null {\r\n return this._operate<PromiseNodes>(query, (node: TreeNode) => {\r\n return this.core.beside(node, source, 1)\r\n })\r\n }\r\n\r\n remove(query: any): TreeNode | null {\r\n return this._operate<TreeNode>(query, (node: TreeNode) => {\r\n return this.core.remove(node)\r\n })\r\n }\r\n\r\n uncheckAll() {\r\n return this.core.uncheckAll()\r\n }\r\n\r\n unselectAll() {\r\n return this.core.unselectAll()\r\n }\r\n\r\n toArray(): TreeNode[] {\r\n return this.state.get()\r\n }\r\n}","import { TreeNode } from '../types/Node'\r\nimport { IterableValue, State as StateType } from '../types/State'\r\n\r\nimport { recurseDown, rootElement } from '../utils/traveler'\r\nimport {\r\n isRoot,\r\n copyObject,\r\n copyArray,\r\n hasOwnProp,\r\n copy\r\n} from '../utils/index'\r\n\r\nfunction iterable(key: any, value: any): IterableValue[] {\r\n if ('string' === typeof key) {\r\n return [[key, value]]\r\n }\r\n\r\n if (!value) {\r\n const res: IterableValue[] = []\r\n\r\n for (const i in key) {\r\n if (hasOwnProp.call(key, i)) {\r\n res.push([i, key[i]])\r\n }\r\n }\r\n\r\n return res\r\n }\r\n\r\n return []\r\n}\r\n\r\nfunction replace(node: TreeNode): TreeNode {\r\n if (!node || !node.child) {\r\n return node\r\n }\r\n\r\n node.child = copyArray(node.child)\r\n node.child.forEach((child: TreeNode) => {\r\n const replaced = replace(child)\r\n replaced.parent = node\r\n\r\n return replaced\r\n })\r\n\r\n return node\r\n}\r\n\r\nfunction itemById(id: string, targetState: any): any {\r\n return Object.keys(targetState)\r\n .find((k: string) => targetState[k].id === id) || null\r\n}\r\n\r\nfunction updateChild(parentNode: TreeNode) {\r\n parentNode.child.forEach((child: TreeNode) => {\r\n child.parent = parentNode\r\n })\r\n\r\n return parentNode\r\n}\r\n\r\nexport default class State implements StateType {\r\n nodes: TreeNode[]\r\n\r\n constructor(nodes: TreeNode[]) {\r\n this.nodes = nodes\r\n }\r\n\r\n updateRoot(node: TreeNode, iterableValue?: IterableValue[]): TreeNode | void {\r\n const i = itemById(node.id, this.nodes)\r\n const newObj = copyObject(node)\r\n\r\n if (iterableValue) {\r\n iterableValue.forEach(([key, value]: IterableValue) => {\r\n node[key] = value\r\n newObj[key] = value\r\n })\r\n }\r\n\r\n if (null !== i) {\r\n this.nodes[i] = updateChild(newObj as TreeNode)\r\n return this.nodes[i]\r\n }\r\n }\r\n\r\n updateLeaf(node: TreeNode, iterableValue?: IterableValue[]): TreeNode | void {\r\n const root: TreeNode | null = rootElement(node)\r\n const parentNode: TreeNode | null = node.parent\r\n\r\n if (!parentNode || !root || !parentNode.child) {\r\n return\r\n }\r\n\r\n const index = this.getIndex(node)\r\n\r\n if (null === index) {\r\n return\r\n }\r\n\r\n if (iterableValue) {\r\n iterableValue.forEach(([key, value]: IterableValue) => {\r\n node[key] = value\r\n parentNode.child[index][key] = value\r\n })\r\n }\r\n\r\n this.updateRoot(replace(root))\r\n\r\n return node\r\n }\r\n\r\n set(id: string, key: any, value?: any): TreeNode | void {\r\n const node = this.byId(id)\r\n\r\n if (!node) {\r\n return\r\n }\r\n\r\n if (isRoot(node)) {\r\n return this.updateRoot(node, iterable(key, value))\r\n }\r\n\r\n return this.updateLeaf(node, iterable(key, value))\r\n }\r\n\r\n getIndex(node: TreeNode): number | null {\r\n const parent: TreeNode | null = node.parent\r\n const nodeId: string = node.id\r\n\r\n if (parent && parent.child) {\r\n let childIndex: number | null = null\r\n\r\n parent.child.some((node: TreeNode, i: number): boolean => {\r\n if (nodeId === node.id) {\r\n childIndex = i\r\n return true\r\n }\r\n \r\n return false\r\n })\r\n \r\n return childIndex\r\n }\r\n\r\n for (let i = 0; i < this.nodes.length; i++ ) {\r\n if (this.nodes[i].id === nodeId) {\r\n return i\r\n }\r\n }\r\n \r\n return null\r\n }\r\n\r\n insertAt(parent: TreeNode | null, nodes: TreeNode[], index: number): TreeNode[] {\r\n if (parent && parent.child) {\r\n const child: TreeNode[] = copyArray(parent.child)\r\n child.splice(index, 0, ...nodes)\r\n return child\r\n } else {\r\n this.nodes.splice(index, 0, ...nodes)\r\n }\r\n\r\n return nodes\r\n }\r\n\r\n remove(id: string): TreeNode | null {\r\n const node: TreeNode | null = this.byId(id)\r\n\r\n if (!node) {\r\n return null\r\n }\r\n\r\n const index: number | null = this.getIndex(node)\r\n\r\n if (null === index || !~index) {\r\n return null\r\n }\r\n\r\n const parent: TreeNode | null = node.parent\r\n\r\n if (!parent) {\r\n this.nodes.splice(index, 1)\r\n } else {\r\n const child = copyArray(parent.child)\r\n child.splice(index, 1)\r\n this.set(parent.id, 'child', child)\r\n }\r\n\r\n return node\r\n }\r\n\r\n byId(id: string): TreeNode | null {\r\n let node: TreeNode | null = null\r\n\r\n recurseDown(this.nodes, (obj: TreeNode): any => {\r\n if (obj.id === id) {\r\n node = obj\r\n return false\r\n }\r\n })\r\n\r\n return node\r\n }\r\n\r\n get(): TreeNode[] {\r\n return this.nodes\r\n }\r\n\r\n toArray(): TreeNode[] {\r\n return copy(this.nodes)\r\n }\r\n}","\r\nfunction s4() {\r\n return Math.floor((1 + Math.random()) * 0x10000)\r\n .toString(16)\r\n .substring(1)\r\n}\r\n\r\nexport default function uuid() {\r\n return s4() + '-' + s4()\r\n}\r\n","import { TreeNode } from '../types/Node'\r\nimport uuid from './uuid'\r\nimport { isArray, isString } from './index'\r\n\r\nexport function parseNode(data: any, parentNode?: TreeNode | null): TreeNode[] {\r\n if (!isArray(data)) {\r\n return parseNode([data], parentNode)\r\n }\r\n\r\n const parent = parentNode || null\r\n\r\n return data\r\n .reduce((result: TreeNode[], node: TreeNode): TreeNode[] => {\r\n if ('number' === typeof node || !node) {\r\n return result\r\n }\r\n \r\n if ('string' === typeof node) {\r\n result.push({\r\n id: uuid(),\r\n text: node,\r\n parent,\r\n child: [],\r\n data: {}\r\n })\r\n } else if (isArray(node)) {\r\n result.push(...parseNode(node, parentNode))\r\n } else {\r\n node.id = node.id || uuid()\r\n node.child = isArray(node.child)\r\n ? parseNode(node.child, node)\r\n : []\r\n\r\n if (!node.data) {\r\n node.data = {}\r\n }\r\n\r\n node.parent = parent\r\n\r\n result.push(node)\r\n }\r\n\r\n return result\r\n }, [])\r\n .filter((node: TreeNode) => node.text && isString(node.text))\r\n}","import { TreeNode } from '../types/Node'\r\nimport { TreeComponent } from '../types/Tree'\r\nimport { State } from '../types/State'\r\nimport { Core, PromiseCallback, PromiseNodes, Resource, InsertOptions } from '../types/Core'\r\nimport { callFetcher, isCallable, isString, remove, has, isLeaf, toArray } from '../utils'\r\nimport { parseNode } from '../utils/parser'\r\nimport { recurseDown, walkBreadth, FlatMap, flatMap } from '../utils/traveler'\r\nimport { find } from '../utils/find'\r\n\r\nfunction parseOpts(opts?: InsertOptions): InsertOptions {\r\n try {\r\n return Object.assign({}, {loading: true}, opts)\r\n } catch(e) {\r\n return {\r\n loading: true\r\n }\r\n }\r\n}\r\n\r\nexport default class CoreTree implements Core {\r\n private state: State\r\n private tree: TreeComponent\r\n\r\n constructor(tree: TreeComponent, state: State) {\r\n this.state = state\r\n this.tree = tree\r\n }\r\n\r\n flatMap = (collection: TreeNode[], ignoreCollapsed?: boolean): FlatMap => {\r\n return flatMap(collection, ignoreCollapsed)\r\n }\r\n\r\n find<T>(target: TreeNode[], multiple: boolean, query: any): T | null {\r\n return find(target, walkBreadth, multiple, query)\r\n }\r\n\r\n set = (node: TreeNode, key: string, value: any): void => {\r\n // TODO: selected, checked should be dublicated in the tree state\r\n this.state.set(node.id, key, value)\r\n this.tree.updateState()\r\n }\r\n\r\n updateKeys = (nodes: TreeNode[], targetNodes?: TreeNode[]): void => {\r\n const tree = this.tree\r\n const state = tree.getState()\r\n const checked = tree.checked\r\n const cascadeCheck: boolean = true !== tree.props.noCascade\r\n\r\n let lastSelected: string\r\n\r\n if (targetNodes) {\r\n targetNodes.forEach((node: TreeNode) => {\r\n if (node.selected) {\r\n lastSelected = node.id\r\n }\r\n })\r\n }\r\n\r\n nodes.forEach((parentNode: TreeNode) => {\r\n const parentDepth: number = parentNode.depth || 0\r\n\r\n recurseDown(parentNode, (obj: TreeNode, depth: number) => {\r\n if (obj.id !== parentNode.id) {\r\n obj.depth = parentDepth + depth\r\n }\r\n \r\n if (cascadeCheck && obj.parent && obj.parent.checked) {\r\n obj.checked = true\r\n }\r\n \r\n if (obj.checked && !has(checked, obj.id)) {\r\n checked.push(obj.id)\r\n }\r\n\r\n if (obj.selected) {\r\n tree.selected.push(obj.id)\r\n\r\n if (!lastSelected) {\r\n lastSelected = obj.id\r\n }\r\n }\r\n })\r\n\r\n if (lastSelected) {\r\n tree.selected = tree.selected.filter((id: string) => {\r\n if (id !== lastSelected) {\r\n state.set(id, 'selected', false)\r\n }\r\n\r\n return id === lastSelected\r\n })\r\n }\r\n\r\n if (cascadeCheck) {\r\n checked.forEach((id: string) => {\r\n const node: TreeNode | null = state.byId(id)\r\n\r\n if (node && isLeaf(node)) {\r\n tree.refreshDefinite(id, true, false)\r\n }\r\n })\r\n }\r\n })\r\n }\r\n\r\n clearKeys = (node: TreeNode, includeSelf: boolean = false): void => {\r\n const selected: string[] = this.tree.selected\r\n const checked: string[] = this.tree.checked\r\n const indeterminate: string[] = this.tree.indeterminate\r\n\r\n recurseDown(node, (child: TreeNode) => {\r\n if (child.selected) {\r\n remove(selected, child.id)\r\n }\r\n\r\n if (child.checked) {\r\n remove(checked, child.id)\r\n }\r\n\r\n remove(indeterminate, child.id)\r\n }, includeSelf)\r\n }\r\n\r\n load = (node: TreeNode, resource: Resource, showLoading?: boolean): PromiseNodes => {\r\n const result = callFetcher(node, resource)\r\n\r\n if (showLoading) {\r\n this.set(node, 'loading', true)\r\n }\r\n\r\n return result.then((items: any) => {\r\n this.state.set(node.id, {\r\n isBatch: false,\r\n loading: false\r\n })\r\n\r\n return parseNode(items, node)\r\n })\r\n }\r\n\r\n beside = (targetNode: TreeNode, resource: Resource, shift: number): PromiseNodes => {\r\n const insertIndex: number | null = this.state.getIndex(targetNode)\r\n\r\n if (null === insertIndex) {\r\n return Promise.resolve([])\r\n }\r\n\r\n const parent: TreeNode | null = targetNode.parent\r\n const insert = (nodes: Resource) => {\r\n return this.insert(parent, nodes, { \r\n expand: parent ? parent.expanded : false, \r\n loading: false, \r\n index: insertIndex + shift \r\n })\r\n }\r\n\r\n if (isCallable(resource)) {\r\n return this.load(targetNode, resource, false).then((nodes: TreeNode[]) => {\r\n return insert(nodes)\r\n })\r\n } else {\r\n return insert(resource)\r\n }\r\n }\r\n\r\n insert = (parent: TreeNode | null, resource: Resource, opts: InsertOptions): PromiseNodes => {\r\n opts = parseOpts(opts)\r\n\r\n const tree = this.tree\r\n const state = tree.getState()\r\n\r\n const insert = (nodes: TreeNode[]) => {\r\n const index: number = undefined !== opts.index \r\n ? opts.index \r\n : (parent && parent.child ? parent.child.length : 0)\r\n\r\n const child = state.insertAt(\r\n parent,\r\n nodes,\r\n index\r\n )\r\n\r\n if (parent) {\r\n const updatedItem = state.set(parent.id, {\r\n child\r\n })\r\n\r\n if (updatedItem) {\r\n // it must be called before checking 'selectOnExpand'\r\n this.updateKeys([updatedItem], nodes)\r\n\r\n if (opts.expand && !updatedItem.expanded) {\r\n this.tree.expand(updatedItem)\r\n }\r\n }\r\n } else {\r\n this.updateKeys(nodes)\r\n }\r\n\r\n tree.$emit('Add', parent, nodes)\r\n tree.updateState()\r\n\r\n return nodes\r\n .map((node: TreeNode) => state.byId(node.id))\r\n .filter(Boolean) as TreeNode[]\r\n }\r\n\r\n if (parent && isCallable(resource)) {\r\n return this.load(parent, resource as PromiseCallback, opts.loading).then(insert)\r\n } else {\r\n return Promise.resolve(\r\n insert(parseNode(resource))\r\n )\r\n }\r\n }\r\n\r\n remove = (node: TreeNode): TreeNode | null => {\r\n const tree = this.tree\r\n const id = node.id\r\n\r\n if (tree.props.checkable && node.checked) {\r\n this.state.set(id, 'checked', false)\r\n\r\n tree.checked = tree.checked.filter((checkedId: string) => id !== checkedId)\r\n tree.refreshDefinite(id, false, false)\r\n }\r\n\r\n const removedNode: TreeNode | null = this.state.remove(id)\r\n\r\n if (removedNode) {\r\n removedNode.parent = null\r\n\r\n this.clearKeys(removedNode)\r\n\r\n tree.updateState()\r\n tree.$emit('Remove', removedNode)\r\n }\r\n\r\n return removedNode\r\n }\r\n\r\n data = (node: TreeNode, key: any, value?: any): any => {\r\n if (!key && !value) {\r\n return node.data\r\n }\r\n\r\n if (undefined === value && isString(key)) {\r\n return node.data[key]\r\n }\r\n\r\n let data\r\n\r\n if (!isString(key)) {\r\n data = Object.assign({}, node.data, key)\r\n } else {\r\n node.data[key] = value\r\n data = node.data\r\n }\r\n\r\n this.state.set(node.id, 'data', data)\r\n this.tree.updateState()\r\n\r\n return node\r\n }\r\n\r\n hasClass = (node: TreeNode, className: string): boolean => {\r\n return !!node.className && new RegExp(className).test(node.className)\r\n }\r\n\r\n removeClass(node: TreeNode, classNames: string | string[]): TreeNode {\r\n const className: string = (node.className || \"\")\r\n .split(' ') \r\n .filter((klazz: string) => !has(toArray(classNames), klazz))\r\n .join(' ')\r\n\r\n this.set(node, 'className', className)\r\n\r\n return node\r\n }\r\n\r\n addClass(node: TreeNode, classNames: string | string[]): TreeNode {\r\n const className: string[] = node.className ? node.className.split(' ') : [] \r\n\r\n toArray(classNames).forEach((klazz: string) => {\r\n if (!has(className, \"\" + klazz)) {\r\n className.push(klazz)\r\n }\r\n })\r\n\r\n this.set(node, 'className', className.join(' '))\r\n\r\n return node\r\n }\r\n\r\n uncheckAll = () => {\r\n const tree = this.tree\r\n\r\n if (!tree.props.checkable) {\r\n return\r\n }\r\n\r\n const state = tree.getState()\r\n const nodes: TreeNode[] | null = this.find(\r\n state.get(), \r\n true, \r\n [{ checked: true }, { indeterminate: true }]\r\n )\r\n\r\n if (nodes) {\r\n nodes.forEach((node: TreeNode) => {\r\n this.tree.$emit('UnCheck', state.set(node.id, {\r\n checked: false,\r\n indeterminate: false\r\n }))\r\n })\r\n }\r\n\r\n tree.updateState()\r\n tree.checked = []\r\n tree.indeterminate = []\r\n }\r\n\r\n unselectAll = () => {\r\n const tree = this.tree\r\n const state = tree.getState()\r\n\r\n const nodes: TreeNode[] | null = this.find(state.get(), true, { selected: true })\r\n\r\n if (nodes) {\r\n nodes.forEach((node: TreeNode) => {\r\n this.tree.$emit('UnSelect', state.set(node.id, {\r\n selected: false\r\n }))\r\n })\r\n }\r\n\r\n tree.updateState()\r\n tree.selected = []\r\n }\r\n}","import { TreeNode } from '../types/Node'\r\nimport { State } from '../types/State'\r\n\r\nimport { flatMap } from './traveler'\r\n\r\ninterface LinkedNode {\r\n current: TreeNode\r\n parent?: TreeNode | null,\r\n next?: TreeNode | null,\r\n prev?: TreeNode | null\r\n}\r\n\r\nexport function linkedNode(node: TreeNode, state: State, ignoreExpanded?: boolean): LinkedNode {\r\n const result: LinkedNode = {\r\n current: node\r\n }\r\n\r\n const { ids } = flatMap(state.get(), true)\r\n const currentIndex: number = ids.indexOf(node.id)\r\n\r\n if (!~currentIndex) {\r\n return result\r\n }\r\n\r\n return {\r\n current: node,\r\n parent: node.parent,\r\n next: state.byId(ids[currentIndex + 1]),\r\n prev: state.byId(ids[currentIndex - 1])\r\n } as LinkedNode\r\n}","import React, { ReactElement } from 'react'\r\nimport '../assets/tree.scss'\r\nimport '../assets/node.scss'\r\nimport '../assets/theme.scss'\r\nimport '../assets/animations.scss'\r\n\r\nimport NodeComponent from './TreeNode'\r\n\r\nimport { Node, TreeNode } from '../types/Node'\r\nimport { TreeProps, TreeComponent } from '../types/Tree'\r\nimport { State as StateType } from '../types/State'\r\nimport { Core, PromiseNodes } from '../types/Core'\r\n\r\nimport { TreeAPI } from '../TreeAPI'\r\nimport State from '../core/State'\r\nimport CoreTree from '../core/Core'\r\n\r\nimport uuid from '../utils/uuid'\r\nimport { grapObjProps, isString, copy } from '../utils/index'\r\nimport { parseNode } from '../utils/parser'\r\nimport { shallowEqual } from '../utils/shallowEqual'\r\nimport { recurseDown, traverseUp, getFirstChild, flatMap } from '../utils/traveler'\r\nimport { linkedNode } from '../utils/linkedNode'\r\nimport { has, copyArray, isNodeIndeterminate, isLeaf, isExpandable } from '../utils'\r\n\r\nconst mutatingFields = [\r\n 'checkable', \r\n 'useIndeterminateState', \r\n 'checkboxRenderer',\r\n 'arrowRenderer',\r\n 'textRenderer'\r\n]\r\n\r\ninterface TreeState {\r\n nodes: TreeNode[]\r\n hash: string\r\n mutatingFields: {string: any}\r\n}\r\n\r\nexport default class EyzyTree extends React.Component<TreeProps, TreeState> implements TreeComponent {\r\n static TreeNode = NodeComponent\r\n\r\n silence: boolean = false\r\n\r\n selected: string[] = []\r\n checked: string[] = []\r\n indeterminate: string[] = []\r\n\r\n focused: string\r\n\r\n core: Core\r\n\r\n // tslint:disable-next-line\r\n _state: StateType\r\n\r\n constructor(props: TreeProps) {\r\n super(props)\r\n\r\n const data = parseNode(\r\n copy(props.data || [])\r\n )\r\n\r\n recurseDown(data, (obj: TreeNode, depth: number) => {\r\n obj.depth = depth\r\n\r\n if (obj.selected) {\r\n this.selected.push(obj.id)\r\n }\r\n\r\n if (obj.checked) {\r\n this.checked.push(obj.id)\r\n }\r\n })\r\n\r\n this._state = new State(data)\r\n this.core = new CoreTree(this, this._state)\r\n\r\n if (this.props.noCascade !== true) {\r\n this.checked.forEach((id: string) => {\r\n const node = this._state.byId(id)\r\n\r\n if (!node) {\r\n return\r\n }\r\n\r\n if (isLeaf(node) || !node.parent) {\r\n this.refreshDefinite(id, true, false)\r\n }\r\n })\r\n }\r\n\r\n this.state = {\r\n nodes: this._state.get(),\r\n hash: uuid(),\r\n mutatingFields: grapObjProps(props, mutatingFields)\r\n }\r\n }\r\n\r\n static getDerivedStateFromProps(nextProps: TreeProps, state: TreeState) {\r\n if (nextProps.onChange) {\r\n return {\r\n hash: uuid(),\r\n nodes: parseNode(copy(nextProps.data || []))\r\n }\r\n }\r\n\r\n if (!shallowEqual(nextProps, state.mutatingFields, mutatingFields)) {\r\n return {\r\n hash: uuid(),\r\n mutatingFields: grapObjProps(nextProps, mutatingFields)\r\n }\r\n }\r\n\r\n return null\r\n }\r\n\r\n isControlled(): boolean {\r\n return !!this.props.onChange\r\n }\r\n\r\n componentDidMount() {\r\n if (this.props.onReady) {\r\n this.props.onReady(\r\n new TreeAPI(this as TreeComponent, this._state, this.core)\r\n )\r\n }\r\n }\r\n\r\n $emit = (name: string, id: string | TreeNode, ...args: any) => {\r\n if (this.silence) {\r\n return\r\n }\r\n\r\n const eventCb = this.props['on' + name]\r\n\r\n if (!eventCb) {\r\n return\r\n }\r\n\r\n if (isString(id)) {\r\n const node = this.getState().byId(id as string)\r\n\r\n if (node) {\r\n eventCb.call(null, node, ...args)\r\n }\r\n } else {\r\n eventCb.call(null, id, ...args)\r\n }\r\n }\r\n\r\n refreshDefinite = (id: string, willBeChecked: boolean, shouldRender?: boolean) => {\r\n let checked: string[] = copyArray(this.checked)\r\n let indeterminate = copyArray(this.indeterminate)\r\n\r\n const state = this.getState()\r\n const childIds: string[] = []\r\n const node = state.byId(id)\r\n const nodesForEvent: string[] = []\r\n\r\n if (!node) {\r\n return\r\n }\r\n\r\n recurseDown(node, (child: TreeNode) => {\r\n if (!child.disabled && !child.disabledCheckbox) {\r\n childIds.push(child.id)\r\n\r\n if (child.checked !== willBeChecked) {\r\n nodesForEvent.push(child.id)\r\n }\r\n }\r\n }, true)\r\n\r\n if (willBeChecked) {\r\n checked.push(...childIds.filter((id: string) => !has(checked, id)))\r\n } else {\r\n checked = checked.filter(nodeId => !has(childIds, nodeId))\r\n }\r\n\r\n traverseUp(node, (parentNode: TreeNode): any => {\r\n if (parentNode.disabledCheckbox || parentNode.disabled) {\r\n return false\r\n }\r\n\r\n const isIndeterminate = isNodeIndeterminate(parentNode, checked, indeterminate)\r\n const id = parentNode.id\r\n\r\n if (isIndeterminate) {\r\n if (!has(indeterminate, id)) {\r\n indeterminate.push(id)\r\n }\r\n\r\n checked = checked.filter(nodeId => nodeId !== id)\r\n } else {\r\n indeterminate = indeterminate.filter(nodeId => nodeId !== id)\r\n\r\n if (willBeChecked && !has(checked, id)) {\r\n checked.push(id)\r\n } else {\r\n checked = checked.filter(nodeId => nodeId !== id)\r\n }\r\n }\r\n })\r\n\r\n indeterminate = indeterminate.filter(nodeId => !has(checked, nodeId))\r\n\r\n if (willBeChecked) {\r\n checked.forEach((id: string) => {\r\n if (!has(this.checked, id)) {\r\n state.set(id, 'checked', true)\r\n }\r\n })\r\n } else {\r\n this.checked.forEach((id: string) => {\r\n if (!has(checked, id)) {\r\n state.set(id, 'checked', false)\r\n }\r\n })\r\n\r\n childIds.forEach((id: string) => {\r\n state.set(id, 'checked', false)\r\n })\r\n }\r\n\r\n this.indeterminate.forEach((id: string) => {\r\n state.set(id, 'indeterminate', false)\r\n })\r\n\r\n const useIndeterminateState: boolean = false !== this.props.useIndeterminateState\r\n\r\n if (useIndeterminateState) {\r\n indeterminate.forEach((id: string) => state.set(id, 'indeterminate', true))\r\n }\r\n\r\n this.checked = checked\r\n this.indeterminate = indeterminate\r\n\r\n if (false !== shouldRender) {\r\n this.updateState()\r\n }\r\n\r\n nodesForEvent.forEach((id: string) => {\r\n this.$emit('Check', id, willBeChecked)\r\n })\r\n }\r\n\r\n getState = (): StateType => {\r\n return this._state\r\n }\r\n\r\n getSelectedNode = (): TreeNode | null => {\r\n const lastSelectedNode = this.selected[this.selected.length - 1]\r\n\r\n if (!lastSelectedNode) {\r\n return null\r\n }\r\n\r\n return this.getState().byId(lastSelectedNode)\r\n }\r\n\r\n updateState = (state: StateType = this._state) => {\r\n const nodes: TreeNode[] = state.get()\r\n\r\n if (this.props.onChange) {\r\n this.props.onChange(state.toArray())\r\n } else {\r\n this.setState({ nodes })\r\n }\r\n }\r\n\r\n unselect = (node: TreeNode) => {\r\n if (!node.selected) {\r\n return\r\n }\r\n\r\n const state = this.getState()\r\n state.set(node.id, 'selected', false)\r\n\r\n this.selected = this.selected.filter((id: string) => {\r\n if (id !== node.id) {\r\n return true\r\n }\r\n\r\n if (state.byId(id)) {\r\n state.set(id, 'selected', false)\r\n this.$emit('UnSelect', id)\r\n }\r\n\r\n return false\r\n })\r\n\r\n this.updateState()\r\n }\r\n\r\n select = (node: TreeNode, ignoreEvent?: boolean, extendSelection?: boolean, ignoreUpdating?: boolean) => {\r\n const state = this.getState()\r\n const id: string = node.id\r\n const events: string[][] = []\r\n const { multiple } = this.props\r\n\r\n if (extendSelection && node.selected) {\r\n return this.unselect(node)\r\n }\r\n\r\n if (!multiple && node.selected) {\r\n return\r\n }\r\n\r\n if (!multiple || (multiple && !extendSelection)) {\r\n this.selected = this.selected.filter((nodeId: string) => {\r\n const node = state.byId(nodeId)\r\n\r\n if (node) {\r\n state.set(node.id, 'selected', false)\r\n events.push(['UnSelect', node.id])\r\n }\r\n\r\n return false\r\n })\r\n }\r\n\r\n state.set(id, 'selected', true)\r\n\r\n this.focused = id\r\n this.selected.push(id)\r\n\r\n if (!ignoreUpdating) {\r\n this.updateState()\r\n }\r\n\r\n if (true !== ignoreEvent) {\r\n events.push(['Select', id])\r\n events.forEach((event: string[]) => this.$emit(event[0], event[1]))\r\n }\r\n }\r\n\r\n selectRange = (focused: string, targetNode: string) => {\r\n const { ids, nodes } = flatMap(this.state.nodes, true)\r\n\r\n const focusedIndex = ids.indexOf(focused)\r\n const targetIndex = ids.indexOf(targetNode)\r\n\r\n if (!~focusedIndex || !~targetIndex) {\r\n return\r\n }\r\n\r\n const start = Math.min(focusedIndex, targetIndex)\r\n const end = Math.max(focusedIndex, targetIndex) + 1\r\n const state = this.getState()\r\n const willBeSelected: string[] = nodes.slice(start, end).map((node: TreeNode) => node.id) \r\n const $emits: string[][] = []\r\n\r\n this.selected.forEach((id: string) => {\r\n if (!has(willBeSelected, id)) {\r\n state.set(id, 'selected', false)\r\n $emits.push(['UnSelect', id])\r\n }\r\n })\r\n\r\n this.selected = willBeSelected.map((id: string) => {\r\n if (!has(this.selected, id)) {\r\n state.set(id, 'selected', true)\r\n $emits.push(['Select', id])\r\n }\r\n\r\n return id\r\n })\r\n\r\n this.updateState()\r\n \r\n $emits.forEach(([name, id]) => {\r\n this.$emit(name, id)\r\n })\r\n }\r\n\r\n check = (node: TreeNode) => {\r\n if (!this.props.checkable || node.disabled || node.disabledCheckbox) {\r\n return\r\n }\r\n\r\n const state = this.getState()\r\n const willBeChecked: boolean = !node.checked\r\n const id: string = node.id\r\n\r\n state.set(id, 'checked', willBeChecked)\r\n\r\n if (willBeChecked) {\r\n this.checked = [...this.checked, id]\r\n } else {\r\n this.checked = this.checked.filter((checkedId: string) => id !== checkedId)\r\n }\r\n\r\n if (this.props.selectOnCheck) {\r\n this.select(node)\r\n }\r\n\r\n if (this.props.noCascade !== true) {\r\n this.refreshDefinite(node.id, willBeChecked)\r\n } else {\r\n this.updateState()\r\n }\r\n\r\n this.$emit('Check', id, willBeChecked)\r\n }\r\n\r\n expand = (node: TreeNode, includingDisabled?: boolean) => {\r\n if (node.disabled && !includingDisabled) {\r\n return\r\n }\r\n\r\n if (node.isBatch) {\r\n return this.loadChild(node)\r\n }\r\n\r\n if (!isExpandable(node)) {\r\n return\r\n }\r\n\r\n const state = this.getState()\r\n const { selectOnExpand } = this.props\r\n\r\n state.set(node.id, 'expanded', !node.expanded)\r\n\r\n if (selectOnExpand && !node.selected) {\r\n this.select(node)\r\n }\r\n\r\n this.updateState()\r\n this.$emit('Expand', node.id, !node.expanded)\r\n }\r\n\r\n handleDoubleClick = (node: TreeNode) => {\r\n this.$emit('DoubleClick', node.id)\r\n\r\n if (node.disabled || isLeaf(node) || this.props.expandOnSelect) {\r\n return\r\n }\r\n\r\n this.expand(node)\r\n }\r\n\r\n handleSelect = (node: TreeNode, event: React.MouseEvent) => {\r\n if (node.disabled) {\r\n return\r\n }\r\n\r\n if (this.props.preventSelectParent && isExpandable(node)) {\r\n return this.expand(node)\r\n }\r\n\r\n const { multiple, checkOnSelect, expandOnSelect, checkable } = this.props\r\n\r\n if (event.shiftKey && multiple && this.focused) {\r\n return this.selectRange(this.focused, node.id)\r\n }\r\n\r\n this.select(node, false, event.ctrlKey)\r\n\r\n if (event.ctrlKey) {\r\n return\r\n }\r\n\r\n if (checkable && checkOnSelect && !node.disabledCheckbox) {\r\n this.check(node)\r\n } else if (expandOnSelect) {\r\n this.expand(node)\r\n }\r\n }\r\n\r\n handleKeyUp = (event: React.KeyboardEvent) => {\r\n if (false === this.props.keyboardNavigation) {\r\n return\r\n }\r\n\r\n const keyCode = event.keyCode\r\n const selectedNode = this.getSelectedNode()\r\n\r\n if (selectedNode) {\r\n switch(keyCode) {\r\n case 32: // space\r\n case 13: // enter\r\n if (this.props.checkable && !selectedNode.disabled && !selectedNode.disabledCheckbox) {\r\n this.check(selectedNode)\r\n } else if (!isLeaf(selectedNode)) {\r\n this.expand(selectedNode)\r\n }\r\n break;\r\n \r\n case 27: // esc\r\n if (this.props.multiple) {\r\n this.core.unselectAll()\r\n } else {\r\n this.unselect(selectedNode)\r\n }\r\n break;\r\n\r\n case 39: // right arrow\r\n if (!isLeaf(selectedNode)) {\r\n if (!selectedNode.expanded) {\r\n this.expand(selectedNode)\r\n } else {\r\n const firstChild = getFirstChild(selectedNode, true)\r\n\r\n if (firstChild) {\r\n this.select(firstChild)\r\n }\r\n }\r\n }\r\n break;\r\n\r\n case 37: // left arrow \r\n if (isLeaf(selectedNode) || !selectedNode.expanded) {\r\n const parentNode = selectedNode.parent\r\n\r\n if (parentNode && !parentNode.disabled) {\r\n this.select(parentNode)\r\n }\r\n } else if (selectedNode.expanded) {\r\n this.expand(selectedNode)\r\n }\r\n break;\r\n\r\n case 40: // bottom arrow\r\n const {next} = linkedNode(selectedNode, this.getState())\r\n \r\n if (next) {\r\n this.select(next)\r\n }\r\n break;\r\n\r\n case 38: // up arrow\r\n const {prev} = linkedNode(selectedNode, this.getState())\r\n\r\n if (prev) {\r\n this.select(prev)\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n loadChild = (node: TreeNode): PromiseNodes | void => {\r\n const { fetchData } = this.props\r\n\r\n if (!fetchData || node.loading) {\r\n return\r\n }\r\n\r\n return this.core.insert(node, fetchData, { expand: true })\r\n }\r\n\r\n renderNode = (node: TreeNode): ReactElement<Node> => {\r\n const treePropsKeys: string[] = [\r\n 'checkable', 'arrowRenderer', 'textRenderer', 'checkboxRenderer'\r\n ]\r\n\r\n const treeProps = treePropsKeys.reduce((props: any, key: string) => {\r\n if (this.props[key]) {\r\n props[key] = this.props[key]\r\n }\r\n\r\n return props\r\n }, {})\r\n\r\n treeProps.hash = this.state.hash\r\n treeProps.useIndeterminateState = this.props.useIndeterminateState\r\n\r\n return (\r\n <NodeComponent\r\n key={node.id}\r\n node={node}\r\n onSelect={this.handleSelect}\r\n onDoubleClick={this.handleDoubleClick}\r\n onCheck={this.check}\r\n onExpand={this.expand}\r\n {...treeProps}\r\n {...node}\r\n >\r\n { node.expanded ? node.child.map(this.renderNode) : null }\r\n </NodeComponent>\r\n )\r\n }\r\n\r\n render() {\r\n const props = this.props\r\n const treeClass = 'theme' in props \r\n ? 'eyzy-tree ' + props.theme\r\n : 'eyzy-tree eyzy-theme'\r\n\r\n if (this.isControlled()) {\r\n this._state.nodes = this.state.nodes\r\n }\r\n\r\n return (\r\n <ul \r\n className={treeClass} \r\n tabIndex={-1} \r\n onKeyDown={this.handleKeyUp}>\r\n {this.state.nodes.map((node: TreeNode) => \r\n this.renderNode(node) \r\n )}\r\n </ul>\r\n )\r\n }\r\n}\r\n"],"names":["tslib_1.__extends","NodeComponent"],"mappings":"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"}
\No newline at end of file