@digital-realty/ix-generic-tree 2.0.2 → 2.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -77,7 +77,7 @@ export class IxGenericTree extends LitElement {
77
77
  @input=${(e) => {
78
78
  const input = e.target;
79
79
  this.dispatchEvent(new CustomEvent('search-text-change', {
80
- detail: { searchText: input.value },
80
+ detail: { searchText: input.value }
81
81
  }));
82
82
  }}
83
83
  data-testid="${IxGenericTreeTestIds.SEARCH_BOX}"
@@ -1 +1 @@
1
- {"version":3,"file":"IxGenericTree.js","sourceRoot":"","sources":["../src/IxGenericTree.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, html, nothing, TemplateResult } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport '@digital-realty/ix-textbox/ix-textbox.js';\nimport type { IGenericTreeNode } from './ix-generic-tree-types.js';\nimport './ix-generic-tree-node.js';\nimport { updateNodeCheckedStatus } from './ix-generic-tree-utils.js';\nimport { IxGenericTreeNodeStyles } from './ix-generic-tree-styles.js';\nimport { IxGenericTreeTestIds } from './IxGenericTreeTestIds.js';\n\nexport class IxGenericTree extends LitElement {\n static styles = [IxGenericTreeNodeStyles];\n\n @property({ type: Object }) rootNode!: IGenericTreeNode;\n\n @property({ type: Boolean }) showCheckboxes = false;\n\n @property({ type: Boolean }) disableCheckboxes = false;\n\n @property({ type: Boolean }) filledIcons = false;\n\n @property({ type: Boolean }) searchEnabled = false;\n\n @property({ type: String }) searchPlaceholder = '';\n\n @property({ type: String }) searchText = '';\n\n @property({ type: String }) selectedId = '';\n\n private onTreeNodeExpandToggle(e: CustomEvent) {\n const { node } = e.detail.message;\n node.expanded = !node.expanded;\n this.dispatchEvent(\n new CustomEvent('expand-toggle', {\n detail: {\n message: {\n ...e.detail.message,\n update: this.requestUpdate.bind(this),\n },\n },\n }),\n );\n this.requestUpdate();\n }\n\n private onTreeNodeCheckToggle(e: CustomEvent): void {\n const { node } = e.detail.message;\n updateNodeCheckedStatus(node, this.rootNode);\n this.rootNode = structuredClone(this.rootNode);\n this.dispatchEvent(\n new CustomEvent('check-toggle', {\n detail: {\n message: {\n ...e.detail.message,\n rootNode: this.rootNode,\n },\n },\n }),\n );\n }\n\n private renderNodes(\n nodes: Array<IGenericTreeNode> = [],\n level: number = 0,\n ): Array<TemplateResult<1>> {\n const renderedNodes = [];\n\n for (const node of nodes) {\n const renderedNode = html`<ix-generic-tree-node\n id=${node.id}\n ?expanded=${!!node.expanded}\n ?loading=${!!node.loading}\n ?disabled=${this.disableCheckboxes || !!node.disabled}\n .level=${level}\n .node=${node}\n ?showCheckbox=${this.showCheckboxes}\n ?filledIcons=${this.filledIcons}\n .selected=${this.selectedId === node.id}\n @check-toggle=${this.onTreeNodeCheckToggle}\n @expand-toggle=${this.onTreeNodeExpandToggle}\n data-testid=\"${IxGenericTreeTestIds.NODE_ID(node.id)}\"\n >\n ${node.expanded ? this.renderNodes(node.children, level + 1) : nothing}\n </ix-generic-tree-node>`;\n renderedNodes.push(renderedNode);\n }\n\n return renderedNodes;\n }\n\n private renderTextSearch() {\n return this.searchEnabled\n ? html` <ix-textbox\n filled\n leading-icon=\"search\"\n has-leading-icon\n placeholder=${this.searchPlaceholder}\n .value=${this.searchText}\n @input=${(e: Event) => {\n const input = e.target as HTMLInputElement;\n this.dispatchEvent(\n new CustomEvent('search-text-change', {\n detail: { searchText: input.value },\n }),\n );\n }}\n data-testid=\"${IxGenericTreeTestIds.SEARCH_BOX}\"\n ></ix-textbox>`\n : nothing;\n }\n\n render() {\n return html`<div>\n ${this.renderTextSearch()} ${this.renderNodes(this.rootNode.children, 0)}\n </div>`;\n }\n}\n"]}
1
+ {"version":3,"file":"IxGenericTree.js","sourceRoot":"","sources":["../src/IxGenericTree.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, html, nothing, TemplateResult } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport '@digital-realty/ix-textbox/ix-textbox.js';\nimport type { IGenericTreeNode } from './ix-generic-tree-types.js';\nimport './ix-generic-tree-node.js';\nimport { updateNodeCheckedStatus } from './ix-generic-tree-utils.js';\nimport { IxGenericTreeNodeStyles } from './ix-generic-tree-styles.js';\nimport { IxGenericTreeTestIds } from './IxGenericTreeTestIds.js';\n\nexport class IxGenericTree extends LitElement {\n static styles = [IxGenericTreeNodeStyles];\n\n @property({ type: Object }) rootNode!: IGenericTreeNode;\n\n @property({ type: Boolean }) showCheckboxes = false;\n\n @property({ type: Boolean }) disableCheckboxes = false;\n\n @property({ type: Boolean }) filledIcons = false;\n\n @property({ type: Boolean }) searchEnabled = false;\n\n @property({ type: String }) searchPlaceholder = '';\n\n @property({ type: String }) searchText = '';\n\n @property({ type: String }) selectedId = '';\n\n private onTreeNodeExpandToggle(e: CustomEvent) {\n const { node } = e.detail.message;\n node.expanded = !node.expanded;\n this.dispatchEvent(\n new CustomEvent('expand-toggle', {\n detail: {\n message: {\n ...e.detail.message,\n update: this.requestUpdate.bind(this),\n },\n },\n }),\n );\n this.requestUpdate();\n }\n\n private onTreeNodeCheckToggle(e: CustomEvent): void {\n const { node } = e.detail.message;\n updateNodeCheckedStatus(node, this.rootNode);\n this.rootNode = structuredClone(this.rootNode);\n this.dispatchEvent(\n new CustomEvent('check-toggle', {\n detail: {\n message: {\n ...e.detail.message,\n rootNode: this.rootNode,\n },\n },\n }),\n );\n }\n\n private renderNodes(\n nodes: Array<IGenericTreeNode> = [],\n level: number = 0,\n ): Array<TemplateResult<1>> {\n const renderedNodes = [];\n\n for (const node of nodes) {\n const renderedNode = html`<ix-generic-tree-node\n id=${node.id}\n ?expanded=${!!node.expanded}\n ?loading=${!!node.loading}\n ?disabled=${this.disableCheckboxes || !!node.disabled}\n .level=${level}\n .node=${node}\n ?showCheckbox=${this.showCheckboxes}\n ?filledIcons=${this.filledIcons}\n .selected=${this.selectedId === node.id}\n @check-toggle=${this.onTreeNodeCheckToggle}\n @expand-toggle=${this.onTreeNodeExpandToggle}\n data-testid=\"${IxGenericTreeTestIds.NODE_ID(node.id)}\"\n >\n ${node.expanded ? this.renderNodes(node.children, level + 1) : nothing}\n </ix-generic-tree-node>`;\n renderedNodes.push(renderedNode);\n }\n\n return renderedNodes;\n }\n\n private renderTextSearch() {\n return this.searchEnabled\n ? html` <ix-textbox\n filled\n leading-icon=\"search\"\n has-leading-icon\n placeholder=${this.searchPlaceholder}\n .value=${this.searchText}\n @input=${(e: Event) => {\n const input = e.target as HTMLInputElement;\n this.dispatchEvent(\n new CustomEvent('search-text-change', {\n detail: { searchText: input.value }\n }),\n );\n }}\n data-testid=\"${IxGenericTreeTestIds.SEARCH_BOX}\"\n ></ix-textbox>`\n : nothing;\n }\n\n render() {\n return html`<div>\n ${this.renderTextSearch()} ${this.renderNodes(this.rootNode.children, 0)}\n </div>`;\n }\n}\n"]}
@@ -62,6 +62,7 @@ export class IxGenericTreeNode extends LitElement {
62
62
  style="visibility: ${this.expandable ? 'visible' : 'hidden'}"
63
63
  icon=${icon}
64
64
  test-id="tree-node-expand-toggle"
65
+ data-testid=${IxGenericTreeTestIds.NODE_EXPAND_TOGGLE(this.node.id)}
65
66
  >
66
67
  </ix-icon-button>`;
67
68
  }
@@ -167,7 +168,7 @@ __decorate([
167
168
  property({ type: Boolean })
168
169
  ], IxGenericTreeNode.prototype, "showCheckbox", void 0);
169
170
  __decorate([
170
- property({ type: Boolean })
171
+ property({ type: Boolean, reflect: true })
171
172
  ], IxGenericTreeNode.prototype, "expanded", void 0);
172
173
  __decorate([
173
174
  property({ type: Boolean })
@@ -1 +1 @@
1
- {"version":3,"file":"IxGenericTreeNode.js","sourceRoot":"","sources":["../src/IxGenericTreeNode.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, html, nothing } from 'lit';\nimport { property } from 'lit/decorators.js';\n\nimport '@digital-realty/ix-checkbox/ix-checkbox.js';\nimport '@digital-realty/ix-icon/ix-icon.js';\nimport '@digital-realty/ix-icon-button/ix-icon-button.js';\nimport '@digital-realty/ix-progress/ix-progress.js';\n\nimport type { IGenericTreeNode } from './ix-generic-tree-types.js';\nimport { IxGenericTreeNodeStyles } from './ix-generic-tree-styles.js';\nimport { IxGenericTreeTestIds } from './IxGenericTreeTestIds.js';\n\nexport class IxGenericTreeNode extends LitElement {\n static readonly styles = [IxGenericTreeNodeStyles];\n\n @property({ type: Object }) node!: IGenericTreeNode;\n\n @property({ type: Boolean }) showCheckbox: boolean = false;\n\n @property({ type: Boolean }) expanded: boolean = false;\n\n @property({ type: Boolean }) loading: boolean = false;\n\n @property({ type: Boolean }) disabled: boolean = false;\n\n @property({ type: Boolean }) selected: boolean = false;\n\n @property({ type: Number }) level = 0;\n\n @property({ type: Boolean }) filledIcons = false;\n\n private onCheck() {\n this.node.isDirty = true;\n if (this.node.checked) {\n this.node.checked = false;\n this.node.indeterminate = false;\n } else {\n this.node.checked = true;\n this.node.indeterminate = false;\n }\n const event = new CustomEvent('check-toggle', {\n detail: {\n message: {\n node: this.node,\n },\n },\n });\n\n this.dispatchEvent(event);\n }\n\n private onNodeExpand(): void {\n if (!this.expandable) {\n return;\n }\n\n const event = new CustomEvent('expand-toggle', {\n detail: {\n message: {\n node: this.node,\n },\n },\n });\n\n this.dispatchEvent(event);\n }\n\n private get expandable() {\n const childrenDataIsPresent: boolean =\n this.node.children !== undefined && this.node.children.length > 0;\n const hasChildrenToLoad: boolean =\n this.node.childrenCount !== undefined && this.node.childrenCount > 0;\n return childrenDataIsPresent || hasChildrenToLoad;\n }\n\n private arrowIcon() {\n const icon = this.expanded ? 'arrow_drop_down' : 'arrow_right';\n return html`<ix-icon-button\n @click=${() => this.onNodeExpand()}\n style=\"visibility: ${this.expandable ? 'visible' : 'hidden'}\"\n icon=${icon}\n test-id=\"tree-node-expand-toggle\"\n >\n </ix-icon-button>`;\n }\n\n private checkbox() {\n if (this.node.inherited) {\n return html` <div class=\"pl-2\">\n <ix-icon\n data-testid=\"${IxGenericTreeTestIds.CHECK_BOX_ID(this.node.id)}\"\n class=\"inherited\"\n >\n arrow_drop_up\n </ix-icon>\n </div>`;\n }\n\n return this.showCheckbox\n ? html`<div class=\"pl-2\" style=\"margin-top: 0.65rem\">\n <ix-checkbox\n .disabled=${this.loading || this.disabled}\n .checked=${this.node.checked}\n .indeterminate=${this.node.indeterminate}\n @click=${() => this.onCheck()}\n data-testid=\"${IxGenericTreeTestIds.CHECK_BOX_ID(this.node.id)}\"\n ></ix-checkbox>\n </div>`\n : nothing;\n }\n\n private nodeIcon() {\n const { icon } = this.node;\n return icon\n ? html`<div class=\"pl-4 mt-2\">\n <ix-icon\n style=\"color: #092241; opacity: 0.6; font-size: 20px;\"\n ?filled=${this.filledIcons}\n >\n ${icon}\n </ix-icon>\n </div> `\n : nothing;\n }\n\n private label() {\n return html`\n <p\n class=\"label dlr-text-small\"\n data-testid=\"${IxGenericTreeTestIds.NODE_LABEL(this.node.id)}\"\n >\n ${this.node.label}\n </p>\n `;\n }\n\n private childCount() {\n const count =\n this.node.childrenCount === undefined ? 0 : this.node.childrenCount;\n return html`<p\n class=\"pl-2 child-count dlr-text-small\"\n data-testid=\"${IxGenericTreeTestIds.NODE_COUNT(this.node.id)}\"\n >\n ${count !== 0 ? count : nothing}\n </p>`;\n }\n\n private secondaryLabel() {\n return this.node.secondaryLabel\n ? html`<p class=\"secondary-label dlr-text-caption\">\n ${this.node.secondaryLabel}\n </p>`\n : nothing;\n }\n\n private loadingCircle() {\n return html`<div\n style=\"visibility: ${this.loading\n ? 'visible'\n : 'hidden'}; padding-left: 1rem;\"\n class=\"animate-pulse\"\n >\n <ix-progress .linear=${false} .indeterminate=${true}></ix-progress>\n </div>`;\n }\n\n render() {\n return html`\n <div style=\"padding-left: ${this.level > 0 ? '2.2rem' : '0'}\">\n <div class=\"node-item ${this.selected ? 'selected' : ''}\">\n ${this.arrowIcon()} ${this.checkbox()} ${this.nodeIcon()}\n <div\n class=\"node-item-label\"\n @click=${this.onNodeExpand}\n @keydown=${this.onNodeExpand}\n >\n <div class=\"node-item-inner\">\n ${this.label()} ${this.childCount()}\n </div>\n ${this.secondaryLabel()}\n </div>\n ${this.loadingCircle()}\n </div>\n <slot></slot>\n </div>\n `;\n }\n}\n"]}
1
+ {"version":3,"file":"IxGenericTreeNode.js","sourceRoot":"","sources":["../src/IxGenericTreeNode.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, html, nothing } from 'lit';\nimport { property } from 'lit/decorators.js';\n\nimport '@digital-realty/ix-checkbox/ix-checkbox.js';\nimport '@digital-realty/ix-icon/ix-icon.js';\nimport '@digital-realty/ix-icon-button/ix-icon-button.js';\nimport '@digital-realty/ix-progress/ix-progress.js';\n\nimport type { IGenericTreeNode } from './ix-generic-tree-types.js';\nimport { IxGenericTreeNodeStyles } from './ix-generic-tree-styles.js';\nimport { IxGenericTreeTestIds } from './IxGenericTreeTestIds.js';\n\nexport class IxGenericTreeNode extends LitElement {\n static readonly styles = [IxGenericTreeNodeStyles];\n\n @property({ type: Object }) node!: IGenericTreeNode;\n\n @property({ type: Boolean }) showCheckbox: boolean = false;\n\n @property({ type: Boolean, reflect: true }) expanded: boolean = false;\n\n @property({ type: Boolean }) loading: boolean = false;\n\n @property({ type: Boolean }) disabled: boolean = false;\n\n @property({ type: Boolean }) selected: boolean = false;\n\n @property({ type: Number }) level = 0;\n\n @property({ type: Boolean }) filledIcons = false;\n\n private onCheck() {\n this.node.isDirty = true;\n if (this.node.checked) {\n this.node.checked = false;\n this.node.indeterminate = false;\n } else {\n this.node.checked = true;\n this.node.indeterminate = false;\n }\n const event = new CustomEvent('check-toggle', {\n detail: {\n message: {\n node: this.node,\n },\n },\n });\n\n this.dispatchEvent(event);\n }\n\n private onNodeExpand(): void {\n if (!this.expandable) {\n return;\n }\n\n const event = new CustomEvent('expand-toggle', {\n detail: {\n message: {\n node: this.node,\n },\n },\n });\n\n this.dispatchEvent(event);\n }\n\n private get expandable() {\n const childrenDataIsPresent: boolean =\n this.node.children !== undefined && this.node.children.length > 0;\n const hasChildrenToLoad: boolean =\n this.node.childrenCount !== undefined && this.node.childrenCount > 0;\n return childrenDataIsPresent || hasChildrenToLoad;\n }\n\n private arrowIcon() {\n const icon = this.expanded ? 'arrow_drop_down' : 'arrow_right';\n return html`<ix-icon-button\n @click=${() => this.onNodeExpand()}\n style=\"visibility: ${this.expandable ? 'visible' : 'hidden'}\"\n icon=${icon}\n test-id=\"tree-node-expand-toggle\"\n data-testid=${IxGenericTreeTestIds.NODE_EXPAND_TOGGLE(this.node.id)}\n >\n </ix-icon-button>`;\n }\n\n private checkbox() {\n if (this.node.inherited) {\n return html` <div class=\"pl-2\">\n <ix-icon\n data-testid=\"${IxGenericTreeTestIds.CHECK_BOX_ID(this.node.id)}\"\n class=\"inherited\"\n >\n arrow_drop_up\n </ix-icon>\n </div>`;\n }\n\n return this.showCheckbox\n ? html`<div class=\"pl-2\" style=\"margin-top: 0.65rem\">\n <ix-checkbox\n .disabled=${this.loading || this.disabled}\n .checked=${this.node.checked}\n .indeterminate=${this.node.indeterminate}\n @click=${() => this.onCheck()}\n data-testid=\"${IxGenericTreeTestIds.CHECK_BOX_ID(this.node.id)}\"\n ></ix-checkbox>\n </div>`\n : nothing;\n }\n\n private nodeIcon() {\n const { icon } = this.node;\n return icon\n ? html`<div class=\"pl-4 mt-2\">\n <ix-icon\n style=\"color: #092241; opacity: 0.6; font-size: 20px;\"\n ?filled=${this.filledIcons}\n >\n ${icon}\n </ix-icon>\n </div> `\n : nothing;\n }\n\n private label() {\n return html`\n <p\n class=\"label dlr-text-small\"\n data-testid=\"${IxGenericTreeTestIds.NODE_LABEL(this.node.id)}\"\n >\n ${this.node.label}\n </p>\n `;\n }\n\n private childCount() {\n const count =\n this.node.childrenCount === undefined ? 0 : this.node.childrenCount;\n return html`<p\n class=\"pl-2 child-count dlr-text-small\"\n data-testid=\"${IxGenericTreeTestIds.NODE_COUNT(this.node.id)}\"\n >\n ${count !== 0 ? count : nothing}\n </p>`;\n }\n\n private secondaryLabel() {\n return this.node.secondaryLabel\n ? html`<p class=\"secondary-label dlr-text-caption\">\n ${this.node.secondaryLabel}\n </p>`\n : nothing;\n }\n\n private loadingCircle() {\n return html`<div\n style=\"visibility: ${this.loading\n ? 'visible'\n : 'hidden'}; padding-left: 1rem;\"\n class=\"animate-pulse\"\n >\n <ix-progress .linear=${false} .indeterminate=${true}></ix-progress>\n </div>`;\n }\n\n render() {\n return html`\n <div style=\"padding-left: ${this.level > 0 ? '2.2rem' : '0'}\">\n <div class=\"node-item ${this.selected ? 'selected' : ''}\">\n ${this.arrowIcon()} ${this.checkbox()} ${this.nodeIcon()}\n <div\n class=\"node-item-label\"\n @click=${this.onNodeExpand}\n @keydown=${this.onNodeExpand}\n >\n <div class=\"node-item-inner\">\n ${this.label()} ${this.childCount()}\n </div>\n ${this.secondaryLabel()}\n </div>\n ${this.loadingCircle()}\n </div>\n <slot></slot>\n </div>\n `;\n }\n}\n"]}
@@ -4,4 +4,5 @@ export declare class IxGenericTreeTestIds {
4
4
  static NODE_ID: (id: string) => string;
5
5
  static NODE_LABEL: (id: string) => string;
6
6
  static NODE_COUNT: (id: string) => string;
7
+ static NODE_EXPAND_TOGGLE: (id: string) => string;
7
8
  }
@@ -5,4 +5,5 @@ IxGenericTreeTestIds.CHECK_BOX_ID = (id) => `checkbox-${id}`;
5
5
  IxGenericTreeTestIds.NODE_ID = (id) => `node-${id}`;
6
6
  IxGenericTreeTestIds.NODE_LABEL = (id) => `label-${id}`;
7
7
  IxGenericTreeTestIds.NODE_COUNT = (id) => `count-${id}`;
8
+ IxGenericTreeTestIds.NODE_EXPAND_TOGGLE = (id) => `tree-node-toggle-${id}`;
8
9
  //# sourceMappingURL=IxGenericTreeTestIds.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"IxGenericTreeTestIds.js","sourceRoot":"","sources":["../src/IxGenericTreeTestIds.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,oBAAoB;;AACR,+BAAU,GAAG,YAAY,CAAC;AAEnC,iCAAY,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,YAAY,EAAE,EAAE,CAAC;AAEhD,4BAAO,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;AAEvC,+BAAU,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC;AAE3C,+BAAU,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC","sourcesContent":["export class IxGenericTreeTestIds {\n public static readonly SEARCH_BOX = 'search-box';\n\n public static CHECK_BOX_ID = (id: string) => `checkbox-${id}`;\n\n public static NODE_ID = (id: string) => `node-${id}`;\n\n public static NODE_LABEL = (id: string) => `label-${id}`;\n\n public static NODE_COUNT = (id: string) => `count-${id}`;\n}\n"]}
1
+ {"version":3,"file":"IxGenericTreeTestIds.js","sourceRoot":"","sources":["../src/IxGenericTreeTestIds.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,oBAAoB;;AACR,+BAAU,GAAG,YAAY,CAAC;AAEnC,iCAAY,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,YAAY,EAAE,EAAE,CAAC;AAEhD,4BAAO,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;AAEvC,+BAAU,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC;AAE3C,+BAAU,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC;AAE3C,uCAAkB,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,oBAAoB,EAAE,EAAE,CAAC","sourcesContent":["export class IxGenericTreeTestIds {\n public static readonly SEARCH_BOX = 'search-box';\n\n public static CHECK_BOX_ID = (id: string) => `checkbox-${id}`;\n\n public static NODE_ID = (id: string) => `node-${id}`;\n\n public static NODE_LABEL = (id: string) => `label-${id}`;\n\n public static NODE_COUNT = (id: string) => `count-${id}`;\n\n public static NODE_EXPAND_TOGGLE = (id: string) => `tree-node-toggle-${id}`;\n}\n"]}
@@ -130,7 +130,7 @@ export function resetCheckedAndIndeterminateStatus(node) {
130
130
  export function getCheckedAndIndeterminateNodesOnly(node) {
131
131
  const checkedNodes = [];
132
132
  function getCheckedNodes(n) {
133
- if (n.checked || n.indeterminate) {
133
+ if (n.checked || n.indeterminate || n.inherited) {
134
134
  checkedNodes.push(n);
135
135
  }
136
136
  if (n.children) {
@@ -1 +1 @@
1
- {"version":3,"file":"ix-generic-tree-utils.js","sourceRoot":"","sources":["../src/ix-generic-tree-utils.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable no-nested-ternary */\nimport type { IGenericTreeNode } from './ix-generic-tree-types.js';\n\nexport const IconTypeMap = {\n Global: 'globe',\n Continent: 'map',\n Country: 'flag',\n City: 'domain',\n Campus: 'device_hub',\n Site: 'location_on',\n Floor: 'view_stream',\n Room: 'meeting_room',\n Cage: 'view_column',\n Row: 'view_headline',\n Cabinet: 'dock',\n Panel: 'calendar_view_day',\n Port: '',\n Fallback: 'chevron_right',\n};\n\nexport function findChildNodeById(\n node: IGenericTreeNode,\n id: string,\n): IGenericTreeNode | null {\n if (node.id === id) {\n return node;\n }\n if (!node.children) {\n return null;\n }\n\n for (const childNode of node.children) {\n const foundNode = findChildNodeById(childNode, id);\n\n if (foundNode) {\n return foundNode;\n }\n }\n\n return null;\n}\n\nexport function updateNodeCheckedStatus(\n node: IGenericTreeNode,\n rootNode: IGenericTreeNode,\n): void {\n /* eslint-disable no-param-reassign */\n function updateChildren(n: IGenericTreeNode, checked = false): void {\n n.indeterminate = false;\n if (n.children) {\n n.children.forEach(child => {\n child.inherited = checked;\n child.checked = false;\n updateChildren(child, checked);\n });\n }\n }\n\n function updateParents(n: IGenericTreeNode): void {\n if (!n.parentId) return;\n\n const currentParent = findChildNodeById(rootNode, n.parentId);\n if (!currentParent || !currentParent.children) return;\n\n const someChildrenChecked = currentParent.children.some(\n child => child.checked || child.indeterminate,\n );\n\n currentParent.indeterminate = someChildrenChecked;\n\n updateParents(currentParent);\n }\n\n // update all children to match current node checked status\n updateChildren(node, node.checked);\n\n // update all parents checked and indeterminate status\n updateParents(node);\n}\n\nexport function getFlatArrayOfCheckedNodes(\n node: IGenericTreeNode,\n): IGenericTreeNode[] {\n const checkedNodes: IGenericTreeNode[] = [];\n\n function getCheckedNodes(n: IGenericTreeNode): void {\n if (n.checked) {\n checkedNodes.push(n);\n }\n if (n.children) {\n n.children.forEach(child => {\n getCheckedNodes(child);\n });\n }\n }\n\n getCheckedNodes(node);\n return checkedNodes;\n}\n\nexport function flattenTree(rootNode: IGenericTreeNode): IGenericTreeNode[] {\n const flatArray: IGenericTreeNode[] = [];\n\n function flatten(n: IGenericTreeNode): void {\n flatArray.push(n);\n if (n.children) {\n n.children.forEach(child => {\n flatten(child);\n });\n }\n }\n\n flatten(rootNode);\n return flatArray;\n}\n\nexport function buildTreeFromFlatArray(\n flatArray: IGenericTreeNode[],\n): IGenericTreeNode {\n const rootNode: IGenericTreeNode = {\n id: 'root',\n label: '',\n children: [],\n };\n\n rootNode.children = flatArray.filter(child => !child.parentId);\n\n function buildTree(n: IGenericTreeNode): void {\n const children = flatArray.filter(child => child.parentId === n.id);\n n.children = children;\n n.children.forEach(child => {\n buildTree(child);\n });\n }\n\n rootNode.children.forEach(child => {\n buildTree(child);\n });\n return rootNode;\n}\n\nexport function isAnyNodeChecked(node: IGenericTreeNode): boolean {\n if (node.checked || node.indeterminate) {\n return true;\n }\n if (!node.children) {\n return false;\n }\n\n for (const childNode of node.children) {\n const checked = isAnyNodeChecked(childNode);\n\n if (checked) {\n return checked;\n }\n }\n\n return false;\n}\n\nexport function resetCheckedAndIndeterminateStatus(\n node: IGenericTreeNode,\n): void {\n node.checked = false;\n node.indeterminate = false;\n\n if (node.children) {\n node.children.forEach(child => {\n resetCheckedAndIndeterminateStatus(child);\n });\n }\n}\n\nexport function getCheckedAndIndeterminateNodesOnly(\n node: IGenericTreeNode,\n): IGenericTreeNode[] {\n const checkedNodes: IGenericTreeNode[] = [];\n\n function getCheckedNodes(n: IGenericTreeNode): void {\n if (n.checked || n.indeterminate) {\n checkedNodes.push(n);\n }\n if (n.children) {\n n.children.forEach(child => {\n getCheckedNodes(child);\n });\n }\n }\n\n getCheckedNodes(node);\n return checkedNodes;\n}\n\nexport function findDeepestNode(\n root: IGenericTreeNode,\n): IGenericTreeNode | null {\n let maxDepth = -1;\n let deepestNode = null;\n function dfs(node: IGenericTreeNode, depth: number) {\n if (!node) return;\n if (depth > maxDepth) {\n maxDepth = depth;\n deepestNode = node;\n }\n if (!node.children) return;\n for (const child of node.children) {\n dfs(child, depth + 1);\n }\n }\n dfs(root, 0);\n return deepestNode;\n}\n\nexport function updateChildrenCount(rootNode: IGenericTreeNode): void {\n const deepestNode = findDeepestNode(rootNode);\n if (!deepestNode) return;\n\n function updateParents(n: IGenericTreeNode): void {\n if (!n.parentId) return;\n\n const currentParent = findChildNodeById(rootNode, n.parentId);\n if (!currentParent) return;\n currentParent.childrenCount = 0;\n if (currentParent.children) {\n currentParent.childrenCount += currentParent.children.reduce(\n (prev, curr) =>\n prev + (curr.childrenCount === 0 ? 1 : (curr.childrenCount ?? 0)),\n 0,\n );\n }\n updateParents(currentParent);\n }\n\n updateParents(deepestNode);\n}\n\nexport function getCheckedNodesCount(node: IGenericTreeNode): number {\n let count = 0;\n function getCheckedNodes(n: IGenericTreeNode): void {\n if (n.checked || n.inherited) {\n count += 1;\n }\n if (n.children) {\n n.children.forEach(child => {\n getCheckedNodes(child);\n });\n }\n }\n getCheckedNodes(node);\n return count;\n}\n\nexport function collapseAllNodes(node: IGenericTreeNode): void {\n node.expanded = false;\n if (node.children) {\n node.children.forEach(child => {\n collapseAllNodes(child);\n });\n }\n}\n\nexport function calculateCheckedEndNodesCount(node: IGenericTreeNode): number {\n let count = 0;\n function getCheckedEndNodes(n: IGenericTreeNode): void {\n if ((n.checked || n.inherited) && n.childrenCount === 0) {\n count += 1;\n }\n if (n.children) {\n n.children.forEach(child => {\n getCheckedEndNodes(child);\n });\n }\n if (!n.children?.length && n.childrenCount !== 0) {\n if (n.checked) count += n.childrenCount ?? 0;\n if (n.indeterminate) count += n.checkedChildrenCount ?? 0;\n }\n }\n getCheckedEndNodes(node);\n return count;\n}\n"]}
1
+ {"version":3,"file":"ix-generic-tree-utils.js","sourceRoot":"","sources":["../src/ix-generic-tree-utils.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable no-nested-ternary */\nimport type { IGenericTreeNode } from './ix-generic-tree-types.js';\n\nexport const IconTypeMap = {\n Global: 'globe',\n Continent: 'map',\n Country: 'flag',\n City: 'domain',\n Campus: 'device_hub',\n Site: 'location_on',\n Floor: 'view_stream',\n Room: 'meeting_room',\n Cage: 'view_column',\n Row: 'view_headline',\n Cabinet: 'dock',\n Panel: 'calendar_view_day',\n Port: '',\n Fallback: 'chevron_right',\n};\n\nexport function findChildNodeById(\n node: IGenericTreeNode,\n id: string,\n): IGenericTreeNode | null {\n if (node.id === id) {\n return node;\n }\n if (!node.children) {\n return null;\n }\n\n for (const childNode of node.children) {\n const foundNode = findChildNodeById(childNode, id);\n\n if (foundNode) {\n return foundNode;\n }\n }\n\n return null;\n}\n\nexport function updateNodeCheckedStatus(\n node: IGenericTreeNode,\n rootNode: IGenericTreeNode,\n): void {\n /* eslint-disable no-param-reassign */\n function updateChildren(n: IGenericTreeNode, checked = false): void {\n n.indeterminate = false;\n if (n.children) {\n n.children.forEach(child => {\n child.inherited = checked;\n child.checked = false;\n updateChildren(child, checked);\n });\n }\n }\n\n function updateParents(n: IGenericTreeNode): void {\n if (!n.parentId) return;\n\n const currentParent = findChildNodeById(rootNode, n.parentId);\n if (!currentParent || !currentParent.children) return;\n\n const someChildrenChecked = currentParent.children.some(\n child => child.checked || child.indeterminate,\n );\n\n currentParent.indeterminate = someChildrenChecked;\n\n updateParents(currentParent);\n }\n\n // update all children to match current node checked status\n updateChildren(node, node.checked);\n\n // update all parents checked and indeterminate status\n updateParents(node);\n}\n\nexport function getFlatArrayOfCheckedNodes(\n node: IGenericTreeNode,\n): IGenericTreeNode[] {\n const checkedNodes: IGenericTreeNode[] = [];\n\n function getCheckedNodes(n: IGenericTreeNode): void {\n if (n.checked) {\n checkedNodes.push(n);\n }\n if (n.children) {\n n.children.forEach(child => {\n getCheckedNodes(child);\n });\n }\n }\n\n getCheckedNodes(node);\n return checkedNodes;\n}\n\nexport function flattenTree(rootNode: IGenericTreeNode): IGenericTreeNode[] {\n const flatArray: IGenericTreeNode[] = [];\n\n function flatten(n: IGenericTreeNode): void {\n flatArray.push(n);\n if (n.children) {\n n.children.forEach(child => {\n flatten(child);\n });\n }\n }\n\n flatten(rootNode);\n return flatArray;\n}\n\nexport function buildTreeFromFlatArray(\n flatArray: IGenericTreeNode[],\n): IGenericTreeNode {\n const rootNode: IGenericTreeNode = {\n id: 'root',\n label: '',\n children: [],\n };\n\n rootNode.children = flatArray.filter(child => !child.parentId);\n\n function buildTree(n: IGenericTreeNode): void {\n const children = flatArray.filter(child => child.parentId === n.id);\n n.children = children;\n n.children.forEach(child => {\n buildTree(child);\n });\n }\n\n rootNode.children.forEach(child => {\n buildTree(child);\n });\n return rootNode;\n}\n\nexport function isAnyNodeChecked(node: IGenericTreeNode): boolean {\n if (node.checked || node.indeterminate) {\n return true;\n }\n if (!node.children) {\n return false;\n }\n\n for (const childNode of node.children) {\n const checked = isAnyNodeChecked(childNode);\n\n if (checked) {\n return checked;\n }\n }\n\n return false;\n}\n\nexport function resetCheckedAndIndeterminateStatus(\n node: IGenericTreeNode,\n): void {\n node.checked = false;\n node.indeterminate = false;\n\n if (node.children) {\n node.children.forEach(child => {\n resetCheckedAndIndeterminateStatus(child);\n });\n }\n}\n\nexport function getCheckedAndIndeterminateNodesOnly(\n node: IGenericTreeNode,\n): IGenericTreeNode[] {\n const checkedNodes: IGenericTreeNode[] = [];\n\n function getCheckedNodes(n: IGenericTreeNode): void {\n if (n.checked || n.indeterminate || n.inherited) {\n checkedNodes.push(n);\n }\n if (n.children) {\n n.children.forEach(child => {\n getCheckedNodes(child);\n });\n }\n }\n\n getCheckedNodes(node);\n return checkedNodes;\n}\n\nexport function findDeepestNode(\n root: IGenericTreeNode,\n): IGenericTreeNode | null {\n let maxDepth = -1;\n let deepestNode = null;\n function dfs(node: IGenericTreeNode, depth: number) {\n if (!node) return;\n if (depth > maxDepth) {\n maxDepth = depth;\n deepestNode = node;\n }\n if (!node.children) return;\n for (const child of node.children) {\n dfs(child, depth + 1);\n }\n }\n dfs(root, 0);\n return deepestNode;\n}\n\nexport function updateChildrenCount(rootNode: IGenericTreeNode): void {\n const deepestNode = findDeepestNode(rootNode);\n if (!deepestNode) return;\n\n function updateParents(n: IGenericTreeNode): void {\n if (!n.parentId) return;\n\n const currentParent = findChildNodeById(rootNode, n.parentId);\n if (!currentParent) return;\n currentParent.childrenCount = 0;\n if (currentParent.children) {\n currentParent.childrenCount += currentParent.children.reduce(\n (prev, curr) =>\n prev + (curr.childrenCount === 0 ? 1 : (curr.childrenCount ?? 0)),\n 0,\n );\n }\n updateParents(currentParent);\n }\n\n updateParents(deepestNode);\n}\n\nexport function getCheckedNodesCount(node: IGenericTreeNode): number {\n let count = 0;\n function getCheckedNodes(n: IGenericTreeNode): void {\n if (n.checked || n.inherited) {\n count += 1;\n }\n if (n.children) {\n n.children.forEach(child => {\n getCheckedNodes(child);\n });\n }\n }\n getCheckedNodes(node);\n return count;\n}\n\nexport function collapseAllNodes(node: IGenericTreeNode): void {\n node.expanded = false;\n if (node.children) {\n node.children.forEach(child => {\n collapseAllNodes(child);\n });\n }\n}\n\nexport function calculateCheckedEndNodesCount(node: IGenericTreeNode): number {\n let count = 0;\n function getCheckedEndNodes(n: IGenericTreeNode): void {\n if ((n.checked || n.inherited) && n.childrenCount === 0) {\n count += 1;\n }\n if (n.children) {\n n.children.forEach(child => {\n getCheckedEndNodes(child);\n });\n }\n if (!n.children?.length && n.childrenCount !== 0) {\n if (n.checked) count += n.childrenCount ?? 0;\n if (n.indeterminate) count += n.checkedChildrenCount ?? 0;\n }\n }\n getCheckedEndNodes(node);\n return count;\n}\n"]}
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "description": "Webcomponent ix-generic-tree following open-wc recommendations",
4
4
  "license": "MIT",
5
5
  "author": "Digital Realty",
6
- "version": "2.0.2",
6
+ "version": "2.0.4",
7
7
  "type": "module",
8
8
  "main": "dist/index.js",
9
9
  "module": "dist/index.js",
@@ -31,10 +31,10 @@
31
31
  },
32
32
  "dependencies": {
33
33
  "@digital-realty/ix-checkbox": "^1.2.6",
34
- "@digital-realty/ix-icon": "1.1.6",
35
- "@digital-realty/ix-icon-button": "1.1.6",
36
- "@digital-realty/ix-progress": "1.2.6",
37
- "@digital-realty/ix-textbox": "2.2.11",
34
+ "@digital-realty/ix-icon": "^1.1.7",
35
+ "@digital-realty/ix-icon-button": "^1.1.6",
36
+ "@digital-realty/ix-progress": "^1.2.6",
37
+ "@digital-realty/ix-textbox": "^2.2.16",
38
38
  "lit": "^3.1.4"
39
39
  },
40
40
  "devDependencies": {
@@ -97,5 +97,5 @@
97
97
  "README.md",
98
98
  "LICENSE"
99
99
  ],
100
- "gitHead": "d37e3ce6b4ce957dac894bab5320e2f21b83a57b"
100
+ "gitHead": "d2f0174e76eb58b8680648048414dd389dfa9478"
101
101
  }