{"version":3,"file":"/Users/anthonygubler/development/dojo-org/widgets/src/tree/index.tsx","sourceRoot":"","sources":["index.tsx"],"names":[],"mappings":"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","sourcesContent":["import { create, tsx, diffProperty } from '@dojo/framework/core/vdom';\nimport { RenderResult } from '@dojo/framework/core/interfaces';\nimport { createICacheMiddleware } from '@dojo/framework/core/middleware/icache';\nimport { createResourceMiddleware } from '@dojo/framework/core/middleware/resources';\nimport theme from '../middleware/theme';\nimport focus from '@dojo/framework/core/middleware/focus';\nimport { flat } from '@dojo/framework/shim/array';\n\nimport { Keys } from '../common/util';\nimport Icon from '../icon';\nimport Checkbox from '../checkbox';\nimport { ListItem } from '../list';\n\nimport * as css from '../theme/default/tree.m.css';\nimport LoadingIndicator from '../loading-indicator';\n\nexport interface TreeNodeOption {\n\tid: string;\n\tparent: string;\n\tvalue: string;\n\thasChildren: boolean;\n}\n\nexport interface TreeProperties {\n\tcheckable?: boolean;\n\tselectable?: boolean;\n\tcheckedIds?: string[];\n\texpandedIds?: string[];\n\tinitialChecked?: string[];\n\tinitialExpanded?: string[];\n\tvalue?: string;\n\tdisabledIds?: string[];\n\tparentSelection?: boolean;\n\tonValue?(id: string): void;\n\tonCheck?(id: string[]): void;\n\tonExpand?(id: string[]): void;\n}\n\nexport interface TreeChildren {\n\t(node: TreeNodeOption): RenderResult;\n}\n\ninterface TreeCache {\n\tactiveNode?: string;\n\tvalue?: string;\n\tcheckedIds: string[];\n\texpandedIds: string[];\n}\n\nconst resource = createResourceMiddleware<TreeNodeOption>();\nconst icache = createICacheMiddleware<TreeCache>();\nconst factory = create({ theme, icache, diffProperty, focus, resource })\n\t.properties<TreeProperties>()\n\t.children<TreeChildren | undefined>();\n\nexport default factory(function Tree({\n\tmiddleware: { theme, icache, diffProperty, resource },\n\tproperties,\n\tchildren\n}) {\n\tdiffProperty('value', properties, ({ value: current }, { value: next }) => {\n\t\tif ((current || next) && current !== next) {\n\t\t\ticache.set('value', next);\n\t\t}\n\t});\n\tdiffProperty(\n\t\t'initialChecked',\n\t\tproperties,\n\t\t({ initialChecked: current }, { initialChecked: next }) => {\n\t\t\tif ((current || next) && current !== next) {\n\t\t\t\ticache.set('checkedIds', next || []);\n\t\t\t}\n\t\t}\n\t);\n\tdiffProperty(\n\t\t'initialExpanded',\n\t\tproperties,\n\t\t({ initialExpanded: current }, { initialExpanded: next }) => {\n\t\t\tif ((current || next) && current !== next) {\n\t\t\t\ticache.set('expandedIds', next || []);\n\t\t\t}\n\t\t}\n\t);\n\tconst {\n\t\tcheckable = false,\n\t\tselectable = false,\n\t\tcheckedIds,\n\t\texpandedIds,\n\t\tonValue,\n\t\tonCheck,\n\t\tonExpand,\n\t\tdisabledIds,\n\t\tresource: { template },\n\t\tparentSelection = false,\n\t\ttheme: themeProp,\n\t\tclasses,\n\t\tvariant\n\t} = properties();\n\tconst {\n\t\tget,\n\t\ttemplate: { read }\n\t} = resource.template(template);\n\n\tconst themedCss = theme.classes(css);\n\tconst defaultRenderer = (n: TreeNodeOption) => n.value;\n\tconst [itemRenderer] = children();\n\n\tconst activeNode = icache.get('activeNode');\n\tconst selectedNode = icache.get('value');\n\n\tif (checkedIds) {\n\t\ticache.set('checkedIds', checkedIds);\n\t}\n\n\tif (expandedIds) {\n\t\ticache.set('expandedIds', expandedIds);\n\t}\n\n\tconst expandedNodes = icache.getOrSet('expandedIds', []);\n\tconst checkedNodes = icache.getOrSet('checkedIds', []);\n\n\tfunction activateNode(id: string) {\n\t\ticache.set('activeNode', id);\n\t}\n\n\tfunction selectNode(id: string) {\n\t\ticache.set('value', id);\n\t\tonValue && onValue(id);\n\t}\n\n\tfunction checkNode(id: string, checked: boolean) {\n\t\tif (checked) {\n\t\t\ticache.set('checkedIds', (currentChecked = []) => [...currentChecked, id]);\n\t\t} else {\n\t\t\ticache.set('checkedIds', (currentChecked = []) =>\n\t\t\t\tcurrentChecked ? currentChecked.filter((n) => n !== id) : []\n\t\t\t);\n\t\t}\n\t\tonCheck && onCheck(icache.get('checkedIds') || []);\n\t}\n\n\tfunction expandNode(id: string) {\n\t\ticache.set('expandedIds', (currentExpanded = []) => [...currentExpanded, id]);\n\t\tonExpand && onExpand(icache.get('expandedIds') || []);\n\t}\n\n\tfunction collapseNode(id: string) {\n\t\ticache.set('expandedIds', (currentExpanded = []) =>\n\t\t\tcurrentExpanded ? currentExpanded.filter((n) => n !== id) : []\n\t\t);\n\t\tonExpand && onExpand(icache.get('expandedIds') || []);\n\t}\n\n\tfunction createNodeFlatMap(nodeId: string = 'root'): TreeNodeOption[] {\n\t\tlet nodes: TreeNodeOption[] = [];\n\t\tconst options = resource.createOptions((curr, next) => ({ ...curr, ...next }));\n\t\tconst {\n\t\t\tmeta: { total }\n\t\t} = get(options({ query: { parent: nodeId } }), { read, meta: true });\n\t\tif (total) {\n\t\t\tconst results = get(options({ size: total }), { read });\n\t\t\tconst queriedNodes = results ? flat(results) : [];\n\n\t\t\tqueriedNodes.forEach((node) => {\n\t\t\t\tnodes.push(node);\n\t\t\t\tif (expandedNodes.indexOf(node.id) !== -1) {\n\t\t\t\t\tnodes = [...nodes, ...createNodeFlatMap(node.id)];\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\treturn nodes;\n\t}\n\n\tfunction onKeyDown(event: KeyboardEvent) {\n\t\tevent.stopPropagation();\n\t\tconst nodes = createNodeFlatMap();\n\t\tconst activeIndex = nodes.findIndex((node) => node.id === activeNode);\n\n\t\tswitch (event.which) {\n\t\t\t// select\n\t\t\tcase Keys.Enter:\n\t\t\tcase Keys.Space:\n\t\t\t\tevent.preventDefault();\n\t\t\t\tif (activeNode && selectedNode !== activeNode && !nodes[activeIndex].hasChildren) {\n\t\t\t\t\tselectable && selectNode(activeNode);\n\t\t\t\t\tcheckable && checkNode(activeNode, !checkedNodes.includes(activeNode));\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t// next\n\t\t\tcase Keys.Down:\n\t\t\t\tevent.preventDefault();\n\t\t\t\tactivateNode(nodes[(activeIndex + 1) % nodes.length].id);\n\t\t\t\tbreak;\n\n\t\t\t// previous\n\t\t\tcase Keys.Up:\n\t\t\t\tevent.preventDefault();\n\t\t\t\tif (activeIndex - 1 < 0) {\n\t\t\t\t\tactivateNode(nodes[nodes.length - 1].id);\n\t\t\t\t} else {\n\t\t\t\t\tactivateNode(nodes[activeIndex - 1].id);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t// expand\n\t\t\tcase Keys.Right:\n\t\t\t\tevent.preventDefault();\n\t\t\t\tif (\n\t\t\t\t\tactiveNode &&\n\t\t\t\t\t!expandedNodes.includes(activeNode) &&\n\t\t\t\t\tnodes[activeIndex].hasChildren\n\t\t\t\t) {\n\t\t\t\t\texpandNode(activeNode);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t// collapse\n\t\t\tcase Keys.Left:\n\t\t\t\tevent.preventDefault();\n\t\t\t\tif (activeNode && expandedNodes.includes(activeNode)) {\n\t\t\t\t\tcollapseNode(activeNode);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tfunction mapNodeTree(nodeId: string = 'root') {\n\t\tconst { meta } = get(\n\t\t\t{ size: 30, offset: 0, query: { parent: nodeId } },\n\t\t\t{ read, meta: true }\n\t\t);\n\n\t\tif (meta.status !== 'read') {\n\t\t\treturn <LoadingIndicator theme={themeProp} classes={classes} variant={variant} />;\n\t\t}\n\n\t\tconst results = get(\n\t\t\t{\n\t\t\t\tsize: meta.total || 0,\n\t\t\t\toffset: 0,\n\t\t\t\tquery: { parent: nodeId }\n\t\t\t},\n\t\t\t{ read }\n\t\t);\n\n\t\tconst nodes = results ? flat(results) : [];\n\n\t\treturn (\n\t\t\t<ol\n\t\t\t\tclasses={[\n\t\t\t\t\tnodeId === 'root' ? themedCss.root : null,\n\t\t\t\t\tthemedCss.nodeParent,\n\t\t\t\t\ttheme.variant()\n\t\t\t\t]}\n\t\t\t\tonkeydown={onKeyDown}\n\t\t\t\ttabIndex={0}\n\t\t\t\trole={nodeId === 'root' ? 'tree' : 'group'}\n\t\t\t>\n\t\t\t\t{nodes.map((node) => {\n\t\t\t\t\tconst isExpanded = expandedNodes.includes(node.id);\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<li\n\t\t\t\t\t\t\tclasses={[\n\t\t\t\t\t\t\t\tthemedCss.node,\n\t\t\t\t\t\t\t\tnode.hasChildren && themedCss.leaf,\n\t\t\t\t\t\t\t\tselectable && themedCss.selectable,\n\t\t\t\t\t\t\t\tnode.id === selectedNode && themedCss.selected\n\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t\trole={'treeitem'}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<TreeNode\n\t\t\t\t\t\t\t\tclasses={classes}\n\t\t\t\t\t\t\t\ttheme={themeProp}\n\t\t\t\t\t\t\t\tvariant={variant}\n\t\t\t\t\t\t\t\tactiveNode={activeNode}\n\t\t\t\t\t\t\t\tcheckable={checkable}\n\t\t\t\t\t\t\t\tselectable={selectable}\n\t\t\t\t\t\t\t\tselected={node.id === selectedNode}\n\t\t\t\t\t\t\t\tchecked={checkedNodes.includes(node.id)}\n\t\t\t\t\t\t\t\tvalue={selectedNode}\n\t\t\t\t\t\t\t\tdisabled={(disabledIds || []).includes(node.id)}\n\t\t\t\t\t\t\t\texpanded={isExpanded}\n\t\t\t\t\t\t\t\tparentSelection={parentSelection}\n\t\t\t\t\t\t\t\tnode={node}\n\t\t\t\t\t\t\t\tonActive={() => activateNode(node.id)}\n\t\t\t\t\t\t\t\tonValue={() => selectNode(node.id)}\n\t\t\t\t\t\t\t\tonCheck={(checked: boolean) => checkNode(node.id, checked)}\n\t\t\t\t\t\t\t\tonExpand={(expanded) => {\n\t\t\t\t\t\t\t\t\tif (expanded) {\n\t\t\t\t\t\t\t\t\t\texpandNode(node.id);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tcollapseNode(node.id);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{itemRenderer || defaultRenderer}\n\t\t\t\t\t\t\t</TreeNode>\n\t\t\t\t\t\t\t{isExpanded && mapNodeTree(node.id)}\n\t\t\t\t\t\t</li>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</ol>\n\t\t);\n\t}\n\treturn mapNodeTree();\n});\n\ninterface TreeNodeProperties {\n\tcheckable: boolean;\n\tchecked?: boolean;\n\tselectable?: boolean;\n\tdisabled?: boolean;\n\tactiveNode?: string;\n\tvalue?: string;\n\texpanded: boolean;\n\tselected: boolean;\n\tparentSelection?: boolean;\n\tnode: TreeNodeOption;\n\tonActive(): void;\n\tonValue(): void;\n\tonCheck(checked: boolean): void;\n\tonExpand(expanded: boolean): void;\n}\n\ninterface TreeNodeChildren {\n\t(node: TreeNodeOption): RenderResult;\n}\n\nconst treeNodeFactory = create({ theme })\n\t.properties<TreeNodeProperties>()\n\t.children<TreeNodeChildren>();\n\nexport const TreeNode = treeNodeFactory(function TreeNode({\n\tmiddleware: { theme },\n\tproperties,\n\tchildren\n}) {\n\tconst {\n\t\tnode,\n\t\tcheckable,\n\t\tselectable,\n\t\tactiveNode,\n\t\tchecked,\n\t\tdisabled,\n\t\texpanded,\n\t\tselected,\n\t\tonActive,\n\t\tonValue,\n\t\tonCheck,\n\t\tonExpand,\n\t\tparentSelection,\n\t\ttheme: themeProp,\n\t\tclasses,\n\t\tvariant\n\t} = properties();\n\tconst [itemRenderer] = children();\n\tconst themedCss = theme.classes(css);\n\tconst isActive = node.id === activeNode;\n\tconst isExpandable = node.hasChildren;\n\n\treturn (\n\t\t<ListItem\n\t\t\tactive={isActive}\n\t\t\tselected={selected}\n\t\t\tonRequestActive={() => {\n\t\t\t\tonActive();\n\t\t\t}}\n\t\t\tonSelect={() => {\n\t\t\t\tisExpandable && onExpand(!expanded);\n\t\t\t\tif (parentSelection || !isExpandable) {\n\t\t\t\t\tselectable && onValue();\n\t\t\t\t\tcheckable && onCheck(!checked);\n\t\t\t\t}\n\t\t\t}}\n\t\t\tdisabled={disabled}\n\t\t\twidgetId={node.id}\n\t\t\tclasses={classes}\n\t\t\ttheme={themeProp}\n\t\t\tvariant={variant}\n\t\t>\n\t\t\t<div classes={themedCss.contentWrapper}>\n\t\t\t\t<div classes={themedCss.content}>\n\t\t\t\t\t{isExpandable && (\n\t\t\t\t\t\t<div classes={themedCss.expander}>\n\t\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\t\ttype={expanded ? 'downIcon' : 'rightIcon'}\n\t\t\t\t\t\t\t\ttheme={themeProp}\n\t\t\t\t\t\t\t\tclasses={classes}\n\t\t\t\t\t\t\t\tvariant={variant}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t\t{checkable && (parentSelection || !isExpandable) && (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tonpointerdown={(event: Event) => {\n\t\t\t\t\t\t\t\t// don't allow the check's activity to effect our expand/collapse\n\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Checkbox\n\t\t\t\t\t\t\t\tchecked={!!checked}\n\t\t\t\t\t\t\t\tonValue={(value) => {\n\t\t\t\t\t\t\t\t\tonCheck(value);\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\tclasses={classes}\n\t\t\t\t\t\t\t\ttheme={themeProp}\n\t\t\t\t\t\t\t\tvariant={variant}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t\t<div classes={themedCss.title}>{itemRenderer(node)}</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</ListItem>\n\t);\n});\n"]}