@digital-realty/ix-generic-tree 2.1.7 → 2.1.8

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.
@@ -1 +1 @@
1
- {"version":3,"file":"ix-generic-tree.test.js","sourceRoot":"","sources":["../../src/test/ix-generic-tree.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { expect, fixture } from '@open-wc/testing';\nimport { html } from 'lit';\nimport { IxCheckbox } from '@digital-realty/ix-checkbox';\nimport { IxTextbox } from '@digital-realty/ix-textbox';\nimport { IxGenericTree } from '../IxGenericTree.js';\nimport { IxGenericTreeNode } from '../IxGenericTreeNode.js';\nimport { IxGenericTreeTestIds } from '../IxGenericTreeTestIds.js';\nimport type { IGenericTreeNode } from '../ix-generic-tree-types.js';\nimport ixGenericTreeTestData from './test-data.js';\nimport '../ix-generic-tree.js';\nimport '../ix-generic-tree-node.js';\n\nconst selectorTestId = <T extends HTMLElement>(\n element: IxGenericTree,\n id: string,\n): T | undefined => {\n let target = element.shadowRoot?.querySelector<T>(`[data-testid=\"${id}\"]`);\n if (target) return target;\n\n const nodes =\n element.shadowRoot?.querySelectorAll<IxGenericTreeNode>(\n 'ix-generic-tree-node',\n ) ?? [];\n for (const n of nodes) {\n target = n.shadowRoot!.querySelector<T>(`[data-testid=\"${id}\"]`);\n if (target) return target;\n }\n\n return undefined;\n};\n\nconst replaceNodeKey = (\n data: IGenericTreeNode,\n key: keyof IGenericTreeNode,\n value: any,\n) => {\n /* eslint-disable no-param-reassign */\n // @ts-ignore\n data[key] = value;\n if (data.children?.length) {\n data.children.forEach(child => replaceNodeKey(child, key, value));\n }\n return data;\n};\n\nconst extractNodeValues = <T>(\n data: IGenericTreeNode,\n key: keyof IGenericTreeNode,\n) => {\n const values: T[] = [];\n\n if (data[key]) {\n // @ts-ignore\n values.push(data[key]);\n }\n if (data.children?.length) {\n data.children.forEach(child =>\n values.push(...extractNodeValues<T>(child, key)),\n );\n }\n return values;\n};\n\nconst extractNodeValuesAtDepth = <T>(\n data: IGenericTreeNode,\n key: keyof IGenericTreeNode,\n depth: number,\n) => {\n const values: T[] = [];\n\n if (data[key] !== undefined && depth === 0) {\n // @ts-ignore\n values.push(data[key]);\n }\n if (data.children?.length) {\n data.children.forEach(child =>\n values.push(...extractNodeValuesAtDepth<T>(child, key, depth - 1)),\n );\n }\n return values;\n};\n\ndescribe('<ix-generic-tree>', () => {\n it('should render the search box correctly', async () => {\n const element = await fixture<IxGenericTree>(\n html`<ix-generic-tree\n .rootNode=${ixGenericTreeTestData}\n searchEnabled\n searchPlaceholder=\"placeholder\"\n ></ix-generic-tree>`,\n );\n\n let searchBox = selectorTestId<IxTextbox>(\n element,\n IxGenericTreeTestIds.SEARCH_BOX,\n );\n expect(searchBox, IxGenericTreeTestIds.SEARCH_BOX).to.exist;\n await expect(searchBox?.placeholder, 'placeholder').to.equal('placeholder');\n\n element.searchEnabled = false;\n await element.updateComplete;\n searchBox = selectorTestId<IxTextbox>(\n element,\n IxGenericTreeTestIds.SEARCH_BOX,\n );\n expect(searchBox, IxGenericTreeTestIds.SEARCH_BOX).to.not.exist;\n });\n\n it('should render the check boxes correctly', async () => {\n const data = replaceNodeKey(\n structuredClone(ixGenericTreeTestData),\n 'expanded',\n true,\n );\n\n const element = await fixture<IxGenericTree>(\n html`<ix-generic-tree\n .rootNode=${data}\n showCheckboxes\n searchEnabled\n searchPlaceholder=\"placeholder\"\n ></ix-generic-tree>`,\n );\n\n const ids = extractNodeValues<string>(data, 'id').filter(\n id => id !== 'root',\n );\n\n // Checkboxes exist and not disabled\n for (const id of ids) {\n const targetId = IxGenericTreeTestIds.CHECK_BOX_ID(id);\n const checkbox = selectorTestId<IxCheckbox>(element, targetId);\n expect(checkbox, targetId).to.exist;\n expect(checkbox?.disabled, targetId).to.be.false;\n }\n\n element.disableCheckboxes = true;\n await element.updateComplete;\n\n // Checkboxes exist and are disabled\n for (const id of ids) {\n const targetId = IxGenericTreeTestIds.CHECK_BOX_ID(id);\n const checkbox = selectorTestId<IxCheckbox>(element, targetId);\n expect(checkbox, targetId).to.exist;\n expect(checkbox?.disabled, targetId).to.be.true;\n }\n\n element.showCheckboxes = false;\n await element.updateComplete;\n\n // Checkboxes hidden\n for (const id of ids) {\n const targetId = IxGenericTreeTestIds.CHECK_BOX_ID(id);\n const checkbox = selectorTestId<IxCheckbox>(element, targetId);\n expect(checkbox, targetId).to.not.exist;\n }\n });\n\n it('should expand the nodes and render correct labels', async () => {\n const element = await fixture<IxGenericTree>(\n html`<ix-generic-tree\n .rootNode=${ixGenericTreeTestData}\n showCheckboxes\n searchEnabled\n searchPlaceholder=\"placeholder\"\n ></ix-generic-tree>`,\n );\n\n const ids = extractNodeValues<string>(ixGenericTreeTestData, 'id').filter(\n id => id !== 'root',\n );\n\n let nodes: IxGenericTreeNode[] = [];\n\n function getNodes() {\n const _nodes: IxGenericTreeNode[] = [];\n for (const id of ids) {\n const node = selectorTestId<IxGenericTreeNode>(\n element,\n IxGenericTreeTestIds.NODE_ID(id),\n );\n if (node) _nodes.push(node);\n }\n nodes = _nodes;\n }\n\n async function testLabel(id: string, label?: string) {\n const targetId = IxGenericTreeTestIds.NODE_LABEL(id);\n const target = selectorTestId<HTMLParagraphElement>(element, targetId);\n expect(target, targetId).to.exist;\n await expect(target?.innerText, label).to.eq(label);\n target?.click();\n }\n\n async function testCount(id: string, count: number) {\n const targetId = IxGenericTreeTestIds.NODE_COUNT(id);\n const target = selectorTestId<HTMLParagraphElement>(element, targetId);\n expect(target, targetId).to.exist;\n\n // A count of zero is not rendered\n await expect(target?.innerText, targetId).to.eq(\n count ? count.toString(10) : '',\n );\n }\n /* eslint-disable no-await-in-loop */\n for (let i = 1; i < 5; i += 1) {\n getNodes();\n const _ids = extractNodeValuesAtDepth<string>(\n ixGenericTreeTestData,\n 'id',\n i,\n );\n const labels = extractNodeValuesAtDepth<string>(\n ixGenericTreeTestData,\n 'label',\n i,\n );\n const counts = extractNodeValuesAtDepth<number>(\n ixGenericTreeTestData,\n 'childrenCount',\n i,\n );\n\n if (i !== 4) {\n await expect(nodes.length, `level-${i}`).to.eq(i);\n await testLabel(_ids.at(-1)!, labels.at(-1));\n await testCount(_ids.at(-1)!, counts.at(-1)!);\n await element.updateComplete;\n } else {\n // Last node has 2 children\n await expect(nodes.length, `level-${i}`).to.eq(i + 1);\n await testLabel(_ids.at(-1)!, labels.at(-1));\n await testLabel(_ids.at(-2)!, labels.at(-2));\n await testCount(_ids.at(-1)!, counts.at(-1)!);\n await testCount(_ids.at(-2)!, counts.at(-2)!);\n }\n }\n });\n});\n"]}
1
+ {"version":3,"file":"ix-generic-tree.test.js","sourceRoot":"","sources":["../../src/test/ix-generic-tree.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { expect, fixture } from '@open-wc/testing';\nimport { html } from 'lit';\nimport { IxGenericTree } from '../IxGenericTree.js';\nimport { IxGenericTreeNode } from '../IxGenericTreeNode.js';\nimport { IxGenericTreeTestIds } from '../IxGenericTreeTestIds.js';\nimport type { IGenericTreeNode } from '../ix-generic-tree-types.js';\nimport ixGenericTreeTestData from './test-data.js';\nimport '../ix-generic-tree.js';\nimport '../ix-generic-tree-node.js';\n\nconst selectorTestId = <T extends HTMLElement>(\n element: IxGenericTree,\n id: string,\n): T | undefined => {\n let target = element.shadowRoot?.querySelector<T>(`[data-testid=\"${id}\"]`);\n if (target) return target;\n\n const nodes =\n element.shadowRoot?.querySelectorAll<IxGenericTreeNode>(\n 'ix-generic-tree-node',\n ) ?? [];\n for (const n of nodes) {\n target = n.shadowRoot!.querySelector<T>(`[data-testid=\"${id}\"]`);\n if (target) return target;\n }\n\n return undefined;\n};\n\nconst replaceNodeKey = (\n data: IGenericTreeNode,\n key: keyof IGenericTreeNode,\n value: any,\n) => {\n /* eslint-disable no-param-reassign */\n // @ts-ignore\n data[key] = value;\n if (data.children?.length) {\n data.children.forEach(child => replaceNodeKey(child, key, value));\n }\n return data;\n};\n\nconst extractNodeValues = <T>(\n data: IGenericTreeNode,\n key: keyof IGenericTreeNode,\n) => {\n const values: T[] = [];\n\n if (data[key]) {\n // @ts-ignore\n values.push(data[key]);\n }\n if (data.children?.length) {\n data.children.forEach(child =>\n values.push(...extractNodeValues<T>(child, key)),\n );\n }\n return values;\n};\n\nconst extractNodeValuesAtDepth = <T>(\n data: IGenericTreeNode,\n key: keyof IGenericTreeNode,\n depth: number,\n) => {\n const values: T[] = [];\n\n if (data[key] !== undefined && depth === 0) {\n // @ts-ignore\n values.push(data[key]);\n }\n if (data.children?.length) {\n data.children.forEach(child =>\n values.push(...extractNodeValuesAtDepth<T>(child, key, depth - 1)),\n );\n }\n return values;\n};\n\ndescribe('<ix-generic-tree>', () => {\n it('should render the search box correctly', async () => {\n const element = await fixture<IxGenericTree>(\n html`<ix-generic-tree\n .rootNode=${ixGenericTreeTestData}\n searchEnabled\n searchPlaceholder=\"placeholder\"\n ></ix-generic-tree>`,\n );\n\n let searchBox = selectorTestId<HTMLInputElement>(\n element,\n IxGenericTreeTestIds.SEARCH_BOX,\n );\n expect(searchBox, IxGenericTreeTestIds.SEARCH_BOX).to.exist;\n await expect(searchBox?.placeholder, 'placeholder').to.equal('placeholder');\n\n element.searchEnabled = false;\n await element.updateComplete;\n searchBox = selectorTestId<HTMLInputElement>(\n element,\n IxGenericTreeTestIds.SEARCH_BOX,\n );\n expect(searchBox, IxGenericTreeTestIds.SEARCH_BOX).to.not.exist;\n });\n\n it('should render the check boxes correctly', async () => {\n const data = replaceNodeKey(\n structuredClone(ixGenericTreeTestData),\n 'expanded',\n true,\n );\n\n const element = await fixture<IxGenericTree>(\n html`<ix-generic-tree\n .rootNode=${data}\n showCheckboxes\n searchEnabled\n searchPlaceholder=\"placeholder\"\n ></ix-generic-tree>`,\n );\n\n const ids = extractNodeValues<string>(data, 'id').filter(\n id => id !== 'root',\n );\n\n // Checkboxes exist and not disabled\n for (const id of ids) {\n const targetId = IxGenericTreeTestIds.CHECK_BOX_ID(id);\n const checkbox = selectorTestId<HTMLInputElement>(element, targetId);\n expect(checkbox, targetId).to.exist;\n expect(checkbox?.disabled, targetId).to.be.false;\n }\n\n element.disableCheckboxes = true;\n await element.updateComplete;\n\n // Checkboxes exist and are disabled\n for (const id of ids) {\n const targetId = IxGenericTreeTestIds.CHECK_BOX_ID(id);\n const checkbox = selectorTestId<HTMLInputElement>(element, targetId);\n expect(checkbox, targetId).to.exist;\n expect(checkbox?.disabled, targetId).to.be.true;\n }\n\n element.showCheckboxes = false;\n await element.updateComplete;\n\n // Checkboxes hidden\n for (const id of ids) {\n const targetId = IxGenericTreeTestIds.CHECK_BOX_ID(id);\n const checkbox = selectorTestId<HTMLInputElement>(element, targetId);\n expect(checkbox, targetId).to.not.exist;\n }\n });\n\n it('should expand the nodes and render correct labels', async () => {\n const element = await fixture<IxGenericTree>(\n html`<ix-generic-tree\n .rootNode=${ixGenericTreeTestData}\n showCheckboxes\n searchEnabled\n searchPlaceholder=\"placeholder\"\n ></ix-generic-tree>`,\n );\n\n const ids = extractNodeValues<string>(ixGenericTreeTestData, 'id').filter(\n id => id !== 'root',\n );\n\n let nodes: IxGenericTreeNode[] = [];\n\n function getNodes() {\n const _nodes: IxGenericTreeNode[] = [];\n for (const id of ids) {\n const node = selectorTestId<IxGenericTreeNode>(\n element,\n IxGenericTreeTestIds.NODE_ID(id),\n );\n if (node) _nodes.push(node);\n }\n nodes = _nodes;\n }\n\n async function testLabel(id: string, label?: string) {\n const targetId = IxGenericTreeTestIds.NODE_LABEL(id);\n const target = selectorTestId<HTMLParagraphElement>(element, targetId);\n expect(target, targetId).to.exist;\n await expect(target?.innerText, label).to.eq(label);\n target?.click();\n }\n\n async function testCount(id: string, count: number) {\n const targetId = IxGenericTreeTestIds.NODE_COUNT(id);\n const target = selectorTestId<HTMLParagraphElement>(element, targetId);\n expect(target, targetId).to.exist;\n\n // A count of zero is not rendered\n await expect(target?.innerText, targetId).to.eq(\n count ? count.toString(10) : '',\n );\n }\n /* eslint-disable no-await-in-loop */\n for (let i = 1; i < 5; i += 1) {\n getNodes();\n const _ids = extractNodeValuesAtDepth<string>(\n ixGenericTreeTestData,\n 'id',\n i,\n );\n const labels = extractNodeValuesAtDepth<string>(\n ixGenericTreeTestData,\n 'label',\n i,\n );\n const counts = extractNodeValuesAtDepth<number>(\n ixGenericTreeTestData,\n 'childrenCount',\n i,\n );\n\n if (i !== 4) {\n await expect(nodes.length, `level-${i}`).to.eq(i);\n await testLabel(_ids.at(-1)!, labels.at(-1));\n await testCount(_ids.at(-1)!, counts.at(-1)!);\n await element.updateComplete;\n } else {\n // Last node has 2 children\n await expect(nodes.length, `level-${i}`).to.eq(i + 1);\n await testLabel(_ids.at(-1)!, labels.at(-1));\n await testLabel(_ids.at(-2)!, labels.at(-2));\n await testCount(_ids.at(-1)!, counts.at(-1)!);\n await testCount(_ids.at(-2)!, counts.at(-2)!);\n }\n }\n });\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.1.7",
6
+ "version": "2.1.8",
7
7
  "type": "module",
8
8
  "main": "dist/index.js",
9
9
  "module": "dist/index.js",
@@ -32,11 +32,11 @@
32
32
  "ts:watch": "tsc --watch --preserveWatchOutput"
33
33
  },
34
34
  "dependencies": {
35
- "@digital-realty/ix-checkbox": "^1.3.5",
35
+ "@digital-realty/ix-checkbox": "^1.3.6",
36
36
  "@digital-realty/ix-icon": "^1.2.4",
37
- "@digital-realty/ix-icon-button": "^1.2.4",
37
+ "@digital-realty/ix-icon-button": "^1.2.5",
38
38
  "@digital-realty/ix-progress": "^1.3.4",
39
- "@digital-realty/ix-textbox": "^2.3.5",
39
+ "@digital-realty/ix-textbox": "^2.3.6",
40
40
  "lit": "^3.1.4"
41
41
  },
42
42
  "devDependencies": {
@@ -100,5 +100,5 @@
100
100
  "README.md",
101
101
  "LICENSE"
102
102
  ],
103
- "gitHead": "5f957be9ee993f439c24887108d7d1f35c40ab17"
103
+ "gitHead": "ab315b433acc9b12065e1a2038a2bc3a7c07487f"
104
104
  }