@spectrum-web-components/table 0.37.0 → 0.39.0
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.
- package/README.md +295 -24
- package/custom-elements.json +101 -0
- package/package.json +8 -8
- package/src/Table.d.ts +12 -0
- package/src/Table.dev.js +27 -7
- package/src/Table.dev.js.map +2 -2
- package/src/Table.js +12 -12
- package/src/Table.js.map +3 -3
- package/src/TableCheckboxCell.d.ts +5 -0
- package/src/TableCheckboxCell.dev.js +10 -3
- package/src/TableCheckboxCell.dev.js.map +2 -2
- package/src/TableCheckboxCell.js +3 -2
- package/src/TableCheckboxCell.js.map +3 -3
- package/src/TableHeadCell.dev.js +3 -2
- package/src/TableHeadCell.dev.js.map +2 -2
- package/src/TableHeadCell.js +4 -4
- package/src/TableHeadCell.js.map +3 -3
- package/src/spectrum-config.js +124 -4
- package/src/spectrum-table-body.css.dev.js +9 -9
- package/src/spectrum-table-body.css.dev.js.map +1 -1
- package/src/spectrum-table-body.css.js +11 -11
- package/src/spectrum-table-body.css.js.map +1 -1
- package/src/spectrum-table-cell.css.dev.js +59 -15
- package/src/spectrum-table-cell.css.dev.js.map +2 -2
- package/src/spectrum-table-cell.css.js +61 -17
- package/src/spectrum-table-cell.css.js.map +2 -2
- package/src/spectrum-table-checkbox-cell.css.dev.js +101 -3
- package/src/spectrum-table-checkbox-cell.css.dev.js.map +2 -2
- package/src/spectrum-table-checkbox-cell.css.js +103 -5
- package/src/spectrum-table-checkbox-cell.css.js.map +2 -2
- package/src/spectrum-table-head-cell.css.dev.js +102 -32
- package/src/spectrum-table-head-cell.css.dev.js.map +2 -2
- package/src/spectrum-table-head-cell.css.js +104 -34
- package/src/spectrum-table-head-cell.css.js.map +2 -2
- package/src/spectrum-table-head.css.dev.js +1 -1
- package/src/spectrum-table-head.css.dev.js.map +1 -1
- package/src/spectrum-table-head.css.js +1 -1
- package/src/spectrum-table-head.css.js.map +1 -1
- package/src/spectrum-table-row.css.dev.js +199 -27
- package/src/spectrum-table-row.css.dev.js.map +2 -2
- package/src/spectrum-table-row.css.js +201 -29
- package/src/spectrum-table-row.css.js.map +2 -2
- package/src/spectrum-table.css.dev.js +247 -325
- package/src/spectrum-table.css.dev.js.map +2 -2
- package/src/spectrum-table.css.js +249 -327
- package/src/spectrum-table.css.js.map +2 -2
- package/src/table-body.css.dev.js +17 -9
- package/src/table-body.css.dev.js.map +2 -2
- package/src/table-body.css.js +17 -9
- package/src/table-body.css.js.map +2 -2
- package/src/table-cell.css.dev.js +59 -15
- package/src/table-cell.css.dev.js.map +2 -2
- package/src/table-cell.css.js +61 -17
- package/src/table-cell.css.js.map +2 -2
- package/src/table-checkbox-cell.css.dev.js +101 -3
- package/src/table-checkbox-cell.css.dev.js.map +2 -2
- package/src/table-checkbox-cell.css.js +101 -3
- package/src/table-checkbox-cell.css.js.map +2 -2
- package/src/table-head-cell.css.dev.js +103 -33
- package/src/table-head-cell.css.dev.js.map +2 -2
- package/src/table-head-cell.css.js +105 -35
- package/src/table-head-cell.css.js.map +2 -2
- package/src/table-head.css.dev.js +1 -1
- package/src/table-head.css.dev.js.map +1 -1
- package/src/table-head.css.js +1 -1
- package/src/table-head.css.js.map +1 -1
- package/src/table-row.css.dev.js +199 -27
- package/src/table-row.css.dev.js.map +2 -2
- package/src/table-row.css.js +201 -29
- package/src/table-row.css.js.map +2 -2
- package/src/table.css.dev.js +247 -325
- package/src/table.css.dev.js.map +2 -2
- package/src/table.css.js +249 -327
- package/src/table.css.js.map +2 -2
- package/stories/table-elements.stories.js +40 -4
- package/stories/table-elements.stories.js.map +2 -2
- package/test/helpers.js +18 -0
- package/test/helpers.js.map +7 -0
- package/test/table-selects.test.js +2 -16
- package/test/table-selects.test.js.map +2 -2
- package/test/table.test.js +42 -24
- package/test/table.test.js.map +2 -2
- package/test/virtualized-table-selects.test.js +15 -46
- package/test/virtualized-table-selects.test.js.map +2 -2
- package/test/virtualized-table.test.js +4 -27
- package/test/virtualized-table.test.js.map +2 -2
package/test/table.test.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["table.test.ts"],
|
|
4
|
-
"sourcesContent": ["/*\nCopyright 2022 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\nimport {\n elementUpdated,\n expect,\n fixture,\n html,\n nextFrame,\n} from '@open-wc/testing';\n\nimport { TemplateResult } from '@spectrum-web-components/base';\nimport '@spectrum-web-components/theme/sp-theme.js';\nimport '@spectrum-web-components/theme/src/themes.js';\nimport type { Theme } from '@spectrum-web-components/theme';\nimport '@spectrum-web-components/table/sp-table.js';\nimport '@spectrum-web-components/table/sp-table-head.js';\nimport '@spectrum-web-components/table/sp-table-head-cell.js';\nimport '@spectrum-web-components/table/sp-table-body.js';\nimport '@spectrum-web-components/table/sp-table-row.js';\nimport '@spectrum-web-components/table/sp-table-cell.js';\nimport type { Table, TableCheckboxCell } from '@spectrum-web-components/table';\nimport { elements } from '../stories/table-elements.stories.js';\nimport { spy } from 'sinon';\n\nlet globalErrorHandler: undefined | OnErrorEventHandler = undefined;\nbefore(function () {\n // Save Mocha's handler.\n (\n Mocha as unknown as { process: { removeListener(name: string): void } }\n ).process.removeListener('uncaughtException');\n globalErrorHandler = window.onerror;\n addEventListener('error', (error) => {\n if (error.message?.match?.(/ResizeObserver loop limit exceeded/)) {\n return;\n } else {\n globalErrorHandler?.(error);\n }\n });\n});\nafter(function () {\n window.onerror = globalErrorHandler as OnErrorEventHandler;\n});\n\nasync function styledFixture<T extends Element>(\n story: TemplateResult\n): Promise<T> {\n const test = await fixture<Theme>(html`\n <sp-theme theme=\"classic\" scale=\"medium\" color=\"light\">\n ${story}\n </sp-theme>\n `);\n return test.children[0] as T;\n}\n\ndescribe('Table', () => {\n it('loads default table accessibly', async () => {\n const el = await styledFixture<Table>(elements());\n await nextFrame();\n await nextFrame();\n await nextFrame();\n await nextFrame();\n await nextFrame();\n await nextFrame();\n await expect(el).to.be.accessible();\n });\n\n it('can be size `s`', async () => {\n const el = await fixture<Table>(html`\n <sp-table size=\"s\">\n <sp-table-head>\n <sp-table-head-cell>Column Title</sp-table-head-cell>\n <sp-table-head-cell>Column Title</sp-table-head-cell>\n <sp-table-head-cell>Column Title</sp-table-head-cell>\n </sp-table-head>\n <sp-table-body style=\"height: 120px\">\n <sp-table-row value=\"row1\">\n <sp-table-cell>Row Item Alpha</sp-table-cell>\n <sp-table-cell>Row Item Alpha</sp-table-cell>\n <sp-table-cell>Row Item Alpha</sp-table-cell>\n </sp-table-row>\n <sp-table-row value=\"row2\">\n <sp-table-cell>Row Item Bravo</sp-table-cell>\n <sp-table-cell>Row Item Bravo</sp-table-cell>\n <sp-table-cell>Row Item Bravo</sp-table-cell>\n </sp-table-row>\n <sp-table-row value=\"row3\">\n <sp-table-cell>Row Item Charlie</sp-table-cell>\n <sp-table-cell>Row Item Charlie</sp-table-cell>\n <sp-table-cell>Row Item Charlie</sp-table-cell>\n </sp-table-row>\n <sp-table-row value=\"row4\">\n <sp-table-cell>Row Item Delta</sp-table-cell>\n <sp-table-cell>Row Item Delta</sp-table-cell>\n <sp-table-cell>Row Item Delta</sp-table-cell>\n </sp-table-row>\n <sp-table-row value=\"row5\">\n <sp-table-cell>Row Item Echo</sp-table-cell>\n <sp-table-cell>Row Item Echo</sp-table-cell>\n <sp-table-cell>Row Item Echo</sp-table-cell>\n </sp-table-row>\n </sp-table-body>\n </sp-table>\n `);\n await elementUpdated(el);\n\n expect(el.size).to.equal('s');\n });\n\n it('dispatches `change` events', async () => {\n const changeSpy = spy();\n const el = await fixture<Table>(html`\n <sp-table\n size=\"m\"\n selects=\"multiple\"\n .selected=${['row1', 'row2']}\n @change=${({ target }: Event & { target: Table }) => {\n changeSpy(target);\n }}\n >\n <sp-table-head>\n <sp-table-head-cell>Column Title</sp-table-head-cell>\n <sp-table-head-cell>Column Title</sp-table-head-cell>\n <sp-table-head-cell>Column Title</sp-table-head-cell>\n </sp-table-head>\n <sp-table-body style=\"height: 120px\">\n <sp-table-row value=\"row1\">\n <sp-table-cell>Row Item Alpha</sp-table-cell>\n <sp-table-cell>Row Item Alpha</sp-table-cell>\n <sp-table-cell>Row Item Alpha</sp-table-cell>\n </sp-table-row>\n <sp-table-row value=\"row2\">\n <sp-table-cell>Row Item Bravo</sp-table-cell>\n <sp-table-cell>Row Item Bravo</sp-table-cell>\n <sp-table-cell>Row Item Bravo</sp-table-cell>\n </sp-table-row>\n <sp-table-row value=\"row3\">\n <sp-table-cell>Row Item Charlie</sp-table-cell>\n <sp-table-cell>Row Item Charlie</sp-table-cell>\n <sp-table-cell>Row Item Charlie</sp-table-cell>\n </sp-table-row>\n <sp-table-row value=\"row4\">\n <sp-table-cell>Row Item Delta</sp-table-cell>\n <sp-table-cell>Row Item Delta</sp-table-cell>\n <sp-table-cell>Row Item Delta</sp-table-cell>\n </sp-table-row>\n <sp-table-row value=\"row5\">\n <sp-table-cell>Row Item Echo</sp-table-cell>\n <sp-table-cell>Row Item Echo</sp-table-cell>\n <sp-table-cell>Row Item Echo</sp-table-cell>\n </sp-table-row>\n </sp-table-body>\n </sp-table>\n `);\n const rowThreeCheckboxCell = el.querySelector(\n '[value=\"row3\"] sp-table-checkbox-cell'\n ) as TableCheckboxCell;\n\n const tableHeadCheckboxCell = el.querySelector(\n 'sp-table-head sp-table-checkbox-cell'\n ) as TableCheckboxCell;\n\n expect(el.selected).to.deep.equal(['row1', 'row2']);\n\n rowThreeCheckboxCell.checkbox.click();\n\n expect(el.selected).to.deep.equal(['row1', 'row2', 'row3']);\n expect(changeSpy.calledOnce).to.be.true;\n expect(changeSpy.calledWithExactly(el)).to.be.true;\n\n changeSpy.resetHistory();\n\n tableHeadCheckboxCell.checkbox.click();\n\n expect(el.selected).to.deep.equal([\n 'row1',\n 'row2',\n 'row3',\n 'row4',\n 'row5',\n ]);\n expect(changeSpy.calledOnce).to.to.true;\n expect(changeSpy.calledWithExactly(el)).to.be.true;\n });\n\n it('accepts change events dispatched from TableHead `<sp-table-checkbox-cell>`', async () => {\n const changeSpy = spy();\n const el = await fixture<Table>(html`\n <sp-table\n size=\"m\"\n selects=\"multiple\"\n .selected=${['row1', 'row2']}\n @change=${({ target }: Event & { target: Table }) => {\n changeSpy(target);\n }}\n >\n <sp-table-head>\n <sp-table-head-cell>Column Title</sp-table-head-cell>\n <sp-table-head-cell>Column Title</sp-table-head-cell>\n <sp-table-head-cell>Column Title</sp-table-head-cell>\n </sp-table-head>\n <sp-table-body style=\"height: 120px\">\n <sp-table-row value=\"row1\">\n <sp-table-cell>Row Item Alpha</sp-table-cell>\n <sp-table-cell>Row Item Alpha</sp-table-cell>\n <sp-table-cell>Row Item Alpha</sp-table-cell>\n </sp-table-row>\n <sp-table-row value=\"row2\">\n <sp-table-cell>Row Item Bravo</sp-table-cell>\n <sp-table-cell>Row Item Bravo</sp-table-cell>\n <sp-table-cell>Row Item Bravo</sp-table-cell>\n </sp-table-row>\n <sp-table-row value=\"row3\">\n <sp-table-cell>Row Item Charlie</sp-table-cell>\n <sp-table-cell>Row Item Charlie</sp-table-cell>\n <sp-table-cell>Row Item Charlie</sp-table-cell>\n </sp-table-row>\n <sp-table-row value=\"row4\">\n <sp-table-cell>Row Item Delta</sp-table-cell>\n <sp-table-cell>Row Item Delta</sp-table-cell>\n <sp-table-cell>Row Item Delta</sp-table-cell>\n </sp-table-row>\n <sp-table-row value=\"row5\">\n <sp-table-cell>Row Item Echo</sp-table-cell>\n <sp-table-cell>Row Item Echo</sp-table-cell>\n <sp-table-cell>Row Item Echo</sp-table-cell>\n </sp-table-row>\n </sp-table-body>\n </sp-table>\n `);\n const tableHeadCheckboxCell = el.querySelector(\n 'sp-table-head sp-table-checkbox-cell'\n ) as TableCheckboxCell;\n\n expect(el.selected).to.deep.equal(['row1', 'row2']);\n expect(tableHeadCheckboxCell.checkbox.indeterminate).to.be.true;\n expect(tableHeadCheckboxCell.checkbox.checked).to.be.false;\n\n tableHeadCheckboxCell.checkbox.click();\n await elementUpdated(el);\n\n expect(changeSpy.calledOnce).to.be.true;\n expect(changeSpy.calledWithExactly(el)).to.be.true;\n expect(tableHeadCheckboxCell.checkbox.checked).to.be.true;\n expect(tableHeadCheckboxCell.checkbox.indeterminate).to.be.false;\n\n expect(el.selected).to.deep.equal([\n 'row1',\n 'row2',\n 'row3',\n 'row4',\n 'row5',\n ]);\n\n tableHeadCheckboxCell.checkbox.click();\n await elementUpdated(el);\n\n expect(el.selected).to.deep.equal([]);\n expect(tableHeadCheckboxCell.checkbox.checked).to.be.false;\n expect(tableHeadCheckboxCell.checkbox.indeterminate).to.be.false;\n });\n});\n"],
|
|
5
|
-
"mappings": ";AAWA;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACG;
|
|
4
|
+
"sourcesContent": ["/*\nCopyright 2022 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\nimport {\n elementUpdated,\n expect,\n fixture,\n html,\n nextFrame,\n} from '@open-wc/testing';\n\nimport '@spectrum-web-components/theme/sp-theme.js';\nimport '@spectrum-web-components/theme/src/themes.js';\nimport '@spectrum-web-components/table/sp-table.js';\nimport '@spectrum-web-components/table/sp-table-head.js';\nimport '@spectrum-web-components/table/sp-table-head-cell.js';\nimport '@spectrum-web-components/table/sp-table-body.js';\nimport '@spectrum-web-components/table/sp-table-row.js';\nimport '@spectrum-web-components/table/sp-table-cell.js';\nimport type {\n Table,\n TableCheckboxCell,\n TableHead,\n} from '@spectrum-web-components/table';\nimport { elements } from '../stories/table-elements.stories.js';\nimport { spy } from 'sinon';\nimport { ignoreResizeObserverLoopError } from '../../../test/testing-helpers.js';\nimport { styledFixture } from './helpers.js';\n\nignoreResizeObserverLoopError(before, after);\n\ndescribe('Table', () => {\n it('loads default table accessibly', async () => {\n const el = await styledFixture<Table>(elements());\n await nextFrame();\n await nextFrame();\n await nextFrame();\n await nextFrame();\n await nextFrame();\n await nextFrame();\n await expect(el).to.be.accessible();\n });\n\n it('can be size `s`', async () => {\n const el = await fixture<Table>(html`\n <sp-table size=\"s\">\n <sp-table-head>\n <sp-table-head-cell>Column Title</sp-table-head-cell>\n <sp-table-head-cell>Column Title</sp-table-head-cell>\n <sp-table-head-cell>Column Title</sp-table-head-cell>\n </sp-table-head>\n <sp-table-body style=\"height: 120px\">\n <sp-table-row value=\"row1\">\n <sp-table-cell>Row Item Alpha</sp-table-cell>\n <sp-table-cell>Row Item Alpha</sp-table-cell>\n <sp-table-cell>Row Item Alpha</sp-table-cell>\n </sp-table-row>\n <sp-table-row value=\"row2\">\n <sp-table-cell>Row Item Bravo</sp-table-cell>\n <sp-table-cell>Row Item Bravo</sp-table-cell>\n <sp-table-cell>Row Item Bravo</sp-table-cell>\n </sp-table-row>\n <sp-table-row value=\"row3\">\n <sp-table-cell>Row Item Charlie</sp-table-cell>\n <sp-table-cell>Row Item Charlie</sp-table-cell>\n <sp-table-cell>Row Item Charlie</sp-table-cell>\n </sp-table-row>\n <sp-table-row value=\"row4\">\n <sp-table-cell>Row Item Delta</sp-table-cell>\n <sp-table-cell>Row Item Delta</sp-table-cell>\n <sp-table-cell>Row Item Delta</sp-table-cell>\n </sp-table-row>\n <sp-table-row value=\"row5\">\n <sp-table-cell>Row Item Echo</sp-table-cell>\n <sp-table-cell>Row Item Echo</sp-table-cell>\n <sp-table-cell>Row Item Echo</sp-table-cell>\n </sp-table-row>\n </sp-table-body>\n </sp-table>\n `);\n await elementUpdated(el);\n\n expect(el.size).to.equal('s');\n });\n\n it('dispatches `change` events', async () => {\n const changeSpy = spy();\n const el = await fixture<Table>(html`\n <sp-table\n size=\"m\"\n selects=\"multiple\"\n .selected=${['row1', 'row2']}\n @change=${({ target }: Event & { target: Table }) => {\n changeSpy(target);\n }}\n >\n <sp-table-head>\n <sp-table-head-cell>Column Title</sp-table-head-cell>\n <sp-table-head-cell>Column Title</sp-table-head-cell>\n <sp-table-head-cell>Column Title</sp-table-head-cell>\n </sp-table-head>\n <sp-table-body style=\"height: 120px\">\n <sp-table-row value=\"row1\">\n <sp-table-cell>Row Item Alpha</sp-table-cell>\n <sp-table-cell>Row Item Alpha</sp-table-cell>\n <sp-table-cell>Row Item Alpha</sp-table-cell>\n </sp-table-row>\n <sp-table-row value=\"row2\">\n <sp-table-cell>Row Item Bravo</sp-table-cell>\n <sp-table-cell>Row Item Bravo</sp-table-cell>\n <sp-table-cell>Row Item Bravo</sp-table-cell>\n </sp-table-row>\n <sp-table-row value=\"row3\">\n <sp-table-cell>Row Item Charlie</sp-table-cell>\n <sp-table-cell>Row Item Charlie</sp-table-cell>\n <sp-table-cell>Row Item Charlie</sp-table-cell>\n </sp-table-row>\n <sp-table-row value=\"row4\">\n <sp-table-cell>Row Item Delta</sp-table-cell>\n <sp-table-cell>Row Item Delta</sp-table-cell>\n <sp-table-cell>Row Item Delta</sp-table-cell>\n </sp-table-row>\n <sp-table-row value=\"row5\">\n <sp-table-cell>Row Item Echo</sp-table-cell>\n <sp-table-cell>Row Item Echo</sp-table-cell>\n <sp-table-cell>Row Item Echo</sp-table-cell>\n </sp-table-row>\n </sp-table-body>\n </sp-table>\n `);\n const rowThreeCheckboxCell = el.querySelector(\n '[value=\"row3\"] sp-table-checkbox-cell'\n ) as TableCheckboxCell;\n\n const tableHeadCheckboxCell = el.querySelector(\n 'sp-table-head sp-table-checkbox-cell'\n ) as TableCheckboxCell;\n\n expect(el.selected).to.deep.equal(['row1', 'row2']);\n\n rowThreeCheckboxCell.checkbox.click();\n\n expect(el.selected).to.deep.equal(['row1', 'row2', 'row3']);\n expect(changeSpy.calledOnce).to.be.true;\n expect(changeSpy.calledWithExactly(el)).to.be.true;\n\n changeSpy.resetHistory();\n\n tableHeadCheckboxCell.checkbox.click();\n\n expect(el.selected).to.deep.equal([\n 'row1',\n 'row2',\n 'row3',\n 'row4',\n 'row5',\n ]);\n expect(changeSpy.calledOnce).to.to.true;\n expect(changeSpy.calledWithExactly(el)).to.be.true;\n });\n\n it('accepts change events dispatched from TableHead `<sp-table-checkbox-cell>`', async () => {\n const changeSpy = spy();\n const el = await fixture<Table>(html`\n <sp-table\n size=\"m\"\n selects=\"multiple\"\n .selected=${['row1', 'row2']}\n @change=${({ target }: Event & { target: Table }) => {\n changeSpy(target);\n }}\n >\n <sp-table-head>\n <sp-table-head-cell>Column Title</sp-table-head-cell>\n <sp-table-head-cell>Column Title</sp-table-head-cell>\n <sp-table-head-cell>Column Title</sp-table-head-cell>\n </sp-table-head>\n <sp-table-body style=\"height: 120px\">\n <sp-table-row value=\"row1\">\n <sp-table-cell>Row Item Alpha</sp-table-cell>\n <sp-table-cell>Row Item Alpha</sp-table-cell>\n <sp-table-cell>Row Item Alpha</sp-table-cell>\n </sp-table-row>\n <sp-table-row value=\"row2\">\n <sp-table-cell>Row Item Bravo</sp-table-cell>\n <sp-table-cell>Row Item Bravo</sp-table-cell>\n <sp-table-cell>Row Item Bravo</sp-table-cell>\n </sp-table-row>\n <sp-table-row value=\"row3\">\n <sp-table-cell>Row Item Charlie</sp-table-cell>\n <sp-table-cell>Row Item Charlie</sp-table-cell>\n <sp-table-cell>Row Item Charlie</sp-table-cell>\n </sp-table-row>\n <sp-table-row value=\"row4\">\n <sp-table-cell>Row Item Delta</sp-table-cell>\n <sp-table-cell>Row Item Delta</sp-table-cell>\n <sp-table-cell>Row Item Delta</sp-table-cell>\n </sp-table-row>\n <sp-table-row value=\"row5\">\n <sp-table-cell>Row Item Echo</sp-table-cell>\n <sp-table-cell>Row Item Echo</sp-table-cell>\n <sp-table-cell>Row Item Echo</sp-table-cell>\n </sp-table-row>\n </sp-table-body>\n </sp-table>\n `);\n const tableHeadCheckboxCell = el.querySelector(\n 'sp-table-head sp-table-checkbox-cell'\n ) as TableCheckboxCell;\n\n expect(el.selected).to.deep.equal(['row1', 'row2']);\n expect(tableHeadCheckboxCell.checkbox.indeterminate).to.be.true;\n expect(tableHeadCheckboxCell.checkbox.checked).to.be.false;\n\n tableHeadCheckboxCell.checkbox.click();\n await elementUpdated(el);\n\n expect(changeSpy.calledOnce).to.be.true;\n expect(changeSpy.calledWithExactly(el)).to.be.true;\n expect(tableHeadCheckboxCell.checkbox.checked).to.be.true;\n expect(tableHeadCheckboxCell.checkbox.indeterminate).to.be.false;\n\n expect(el.selected).to.deep.equal([\n 'row1',\n 'row2',\n 'row3',\n 'row4',\n 'row5',\n ]);\n\n tableHeadCheckboxCell.checkbox.click();\n await elementUpdated(el);\n\n expect(el.selected).to.deep.equal([]);\n expect(tableHeadCheckboxCell.checkbox.checked).to.be.false;\n expect(tableHeadCheckboxCell.checkbox.indeterminate).to.be.false;\n });\n\n it('can be headerless', async () => {\n const el = await fixture<Table>(html`\n <sp-table>\n <sp-table-body style=\"height: 120px\">\n <sp-table-row value=\"row1\">\n <sp-table-cell>Row Item Alpha</sp-table-cell>\n <sp-table-cell>Row Item Alpha</sp-table-cell>\n <sp-table-cell>Row Item Alpha</sp-table-cell>\n </sp-table-row>\n <sp-table-row value=\"row2\">\n <sp-table-cell>Row Item Bravo</sp-table-cell>\n <sp-table-cell>Row Item Bravo</sp-table-cell>\n <sp-table-cell>Row Item Bravo</sp-table-cell>\n </sp-table-row>\n <sp-table-row value=\"row3\">\n <sp-table-cell>Row Item Charlie</sp-table-cell>\n <sp-table-cell>Row Item Charlie</sp-table-cell>\n <sp-table-cell>Row Item Charlie</sp-table-cell>\n </sp-table-row>\n <sp-table-row value=\"row4\">\n <sp-table-cell>Row Item Delta</sp-table-cell>\n <sp-table-cell>Row Item Delta</sp-table-cell>\n <sp-table-cell>Row Item Delta</sp-table-cell>\n </sp-table-row>\n <sp-table-row value=\"row5\">\n <sp-table-cell>Row Item Echo</sp-table-cell>\n <sp-table-cell>Row Item Echo</sp-table-cell>\n <sp-table-cell>Row Item Echo</sp-table-cell>\n </sp-table-row>\n </sp-table-body>\n </sp-table>\n `);\n await elementUpdated(el);\n expect(el.size).to.equal('m');\n const tableHead = el.querySelector('sp-table-head') as TableHead;\n expect(tableHead).to.not.exist;\n const tableRows = el.querySelectorAll('sp-table-row');\n expect(tableRows.length).to.equal(5);\n });\n});\n"],
|
|
5
|
+
"mappings": ";AAWA;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACG;AAEP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AAMP,SAAS,gBAAgB;AACzB,SAAS,WAAW;AACpB,SAAS,qCAAqC;AAC9C,SAAS,qBAAqB;AAE9B,8BAA8B,QAAQ,KAAK;AAE3C,SAAS,SAAS,MAAM;AACpB,KAAG,kCAAkC,YAAY;AAC7C,UAAM,KAAK,MAAM,cAAqB,SAAS,CAAC;AAChD,UAAM,UAAU;AAChB,UAAM,UAAU;AAChB,UAAM,UAAU;AAChB,UAAM,UAAU;AAChB,UAAM,UAAU;AAChB,UAAM,UAAU;AAChB,UAAM,OAAO,EAAE,EAAE,GAAG,GAAG,WAAW;AAAA,EACtC,CAAC;AAED,KAAG,mBAAmB,YAAY;AAC9B,UAAM,KAAK,MAAM,QAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAmC/B;AACD,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,IAAI,EAAE,GAAG,MAAM,GAAG;AAAA,EAChC,CAAC;AAED,KAAG,8BAA8B,YAAY;AACzC,UAAM,YAAY,IAAI;AACtB,UAAM,KAAK,MAAM,QAAe;AAAA;AAAA;AAAA;AAAA,4BAIZ,CAAC,QAAQ,MAAM,CAAC;AAAA,0BAClB,CAAC,EAAE,OAAO,MAAiC;AACjD,gBAAU,MAAM;AAAA,IACpB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAmCR;AACD,UAAM,uBAAuB,GAAG;AAAA,MAC5B;AAAA,IACJ;AAEA,UAAM,wBAAwB,GAAG;AAAA,MAC7B;AAAA,IACJ;AAEA,WAAO,GAAG,QAAQ,EAAE,GAAG,KAAK,MAAM,CAAC,QAAQ,MAAM,CAAC;AAElD,yBAAqB,SAAS,MAAM;AAEpC,WAAO,GAAG,QAAQ,EAAE,GAAG,KAAK,MAAM,CAAC,QAAQ,QAAQ,MAAM,CAAC;AAC1D,WAAO,UAAU,UAAU,EAAE,GAAG,GAAG;AACnC,WAAO,UAAU,kBAAkB,EAAE,CAAC,EAAE,GAAG,GAAG;AAE9C,cAAU,aAAa;AAEvB,0BAAsB,SAAS,MAAM;AAErC,WAAO,GAAG,QAAQ,EAAE,GAAG,KAAK,MAAM;AAAA,MAC9B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACJ,CAAC;AACD,WAAO,UAAU,UAAU,EAAE,GAAG,GAAG;AACnC,WAAO,UAAU,kBAAkB,EAAE,CAAC,EAAE,GAAG,GAAG;AAAA,EAClD,CAAC;AAED,KAAG,8EAA8E,YAAY;AACzF,UAAM,YAAY,IAAI;AACtB,UAAM,KAAK,MAAM,QAAe;AAAA;AAAA;AAAA;AAAA,4BAIZ,CAAC,QAAQ,MAAM,CAAC;AAAA,0BAClB,CAAC,EAAE,OAAO,MAAiC;AACjD,gBAAU,MAAM;AAAA,IACpB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAmCR;AACD,UAAM,wBAAwB,GAAG;AAAA,MAC7B;AAAA,IACJ;AAEA,WAAO,GAAG,QAAQ,EAAE,GAAG,KAAK,MAAM,CAAC,QAAQ,MAAM,CAAC;AAClD,WAAO,sBAAsB,SAAS,aAAa,EAAE,GAAG,GAAG;AAC3D,WAAO,sBAAsB,SAAS,OAAO,EAAE,GAAG,GAAG;AAErD,0BAAsB,SAAS,MAAM;AACrC,UAAM,eAAe,EAAE;AAEvB,WAAO,UAAU,UAAU,EAAE,GAAG,GAAG;AACnC,WAAO,UAAU,kBAAkB,EAAE,CAAC,EAAE,GAAG,GAAG;AAC9C,WAAO,sBAAsB,SAAS,OAAO,EAAE,GAAG,GAAG;AACrD,WAAO,sBAAsB,SAAS,aAAa,EAAE,GAAG,GAAG;AAE3D,WAAO,GAAG,QAAQ,EAAE,GAAG,KAAK,MAAM;AAAA,MAC9B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACJ,CAAC;AAED,0BAAsB,SAAS,MAAM;AACrC,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,QAAQ,EAAE,GAAG,KAAK,MAAM,CAAC,CAAC;AACpC,WAAO,sBAAsB,SAAS,OAAO,EAAE,GAAG,GAAG;AACrD,WAAO,sBAAsB,SAAS,aAAa,EAAE,GAAG,GAAG;AAAA,EAC/D,CAAC;AAED,KAAG,qBAAqB,YAAY;AAChC,UAAM,KAAK,MAAM,QAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SA8B/B;AACD,UAAM,eAAe,EAAE;AACvB,WAAO,GAAG,IAAI,EAAE,GAAG,MAAM,GAAG;AAC5B,UAAM,YAAY,GAAG,cAAc,eAAe;AAClD,WAAO,SAAS,EAAE,GAAG,IAAI;AACzB,UAAM,YAAY,GAAG,iBAAiB,cAAc;AACpD,WAAO,UAAU,MAAM,EAAE,GAAG,MAAM,CAAC;AAAA,EACvC,CAAC;AACL,CAAC;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -24,16 +24,8 @@ import {
|
|
|
24
24
|
} from "../stories/table-virtualized.stories.js";
|
|
25
25
|
import { makeItems, renderItem } from "../stories/index.js";
|
|
26
26
|
import { ignoreResizeObserverLoopError } from "../../../test/testing-helpers.js";
|
|
27
|
-
import {
|
|
27
|
+
import { styledFixture, tableLayoutComplete } from "./helpers.js";
|
|
28
28
|
ignoreResizeObserverLoopError(before, after);
|
|
29
|
-
async function styledFixture(story) {
|
|
30
|
-
const test = await fixture(html`
|
|
31
|
-
<sp-theme theme="classic" scale="medium" color="light">
|
|
32
|
-
${story}
|
|
33
|
-
</sp-theme>
|
|
34
|
-
`);
|
|
35
|
-
return test.children[0];
|
|
36
|
-
}
|
|
37
29
|
describe("Virtualized Table Selects", () => {
|
|
38
30
|
it("selects and deselects all checkboxes in Virtualized Table when clicking the TableHeadCheckboxCell", async () => {
|
|
39
31
|
const test = await fixture(
|
|
@@ -115,16 +107,16 @@ describe("Virtualized Table Selects", () => {
|
|
|
115
107
|
`
|
|
116
108
|
);
|
|
117
109
|
const el = test.querySelector("sp-table");
|
|
118
|
-
await oneEvent(el, "rangeChanged");
|
|
119
|
-
await elementUpdated(el);
|
|
120
|
-
expect(el.selected, "'Row 50 selected").to.deep.equal(["49"]);
|
|
121
110
|
const body = el.querySelector("sp-table-body");
|
|
111
|
+
await tableLayoutComplete(el);
|
|
112
|
+
expect(el.selected, "'Row 50 selected").to.deep.equal(["49"]);
|
|
122
113
|
body.scrollTop = body.scrollHeight;
|
|
123
114
|
await nextFrame();
|
|
124
115
|
await nextFrame();
|
|
125
116
|
await elementUpdated(el);
|
|
126
117
|
await elementUpdated(body);
|
|
127
118
|
const lastRow = el.querySelector('[value="49"]');
|
|
119
|
+
expect(lastRow).to.not.be.null;
|
|
128
120
|
const lastRowCheckboxCell = lastRow.querySelector(
|
|
129
121
|
"sp-table-checkbox-cell"
|
|
130
122
|
);
|
|
@@ -140,10 +132,7 @@ describe("Virtualized Table Selects", () => {
|
|
|
140
132
|
);
|
|
141
133
|
const el = test.querySelector("sp-table");
|
|
142
134
|
el.selected = [];
|
|
143
|
-
await
|
|
144
|
-
await elementUpdated(el);
|
|
145
|
-
const body = el.querySelector("sp-table-body");
|
|
146
|
-
await body[virtualizerRef].layoutComplete;
|
|
135
|
+
await tableLayoutComplete(el);
|
|
147
136
|
const rowTwo = el.querySelector('[value="1"]');
|
|
148
137
|
const rowTwoCheckbox = rowTwo.querySelector(
|
|
149
138
|
"sp-table-checkbox-cell"
|
|
@@ -175,15 +164,11 @@ describe("Virtualized Table Selects", () => {
|
|
|
175
164
|
`
|
|
176
165
|
);
|
|
177
166
|
const el = test.querySelector("sp-table");
|
|
178
|
-
await oneEvent(el, "rangeChanged");
|
|
179
|
-
await elementUpdated(el);
|
|
180
|
-
expect(el.selected).to.deep.equal(["0", "48"]);
|
|
181
167
|
const body = el.querySelector("sp-table-body");
|
|
168
|
+
await tableLayoutComplete(el);
|
|
169
|
+
expect(el.selected).to.deep.equal(["0", "48"]);
|
|
182
170
|
body.scrollTop = body.scrollHeight;
|
|
183
|
-
await
|
|
184
|
-
await nextFrame();
|
|
185
|
-
await elementUpdated(el);
|
|
186
|
-
await elementUpdated(body);
|
|
171
|
+
await tableLayoutComplete(el);
|
|
187
172
|
const unseenRow = el.querySelector('[value="48"]');
|
|
188
173
|
expect(unseenRow).to.not.be.null;
|
|
189
174
|
const unseenRowCheckboxCell = unseenRow.querySelector(
|
|
@@ -203,10 +188,7 @@ describe("Virtualized Table Selects", () => {
|
|
|
203
188
|
);
|
|
204
189
|
const el = test.querySelector("sp-table");
|
|
205
190
|
el.selected = [];
|
|
206
|
-
await
|
|
207
|
-
await elementUpdated(el);
|
|
208
|
-
const body = el.querySelector("sp-table-body");
|
|
209
|
-
await body[virtualizerRef].layoutComplete;
|
|
191
|
+
await tableLayoutComplete(el);
|
|
210
192
|
const rowTwo = el.querySelector('[value="2"]');
|
|
211
193
|
const tableHeadCheckboxCell = el.querySelector(
|
|
212
194
|
"sp-table-head sp-table-checkbox-cell"
|
|
@@ -236,10 +218,7 @@ describe("Virtualized Table Selects", () => {
|
|
|
236
218
|
);
|
|
237
219
|
const el = test.querySelector("sp-table");
|
|
238
220
|
el.selected = ["1"];
|
|
239
|
-
await
|
|
240
|
-
await elementUpdated(el);
|
|
241
|
-
const body = el.querySelector("sp-table-body");
|
|
242
|
-
await body[virtualizerRef].layoutComplete;
|
|
221
|
+
await tableLayoutComplete(el);
|
|
243
222
|
const rowOne = el.querySelector('[value="1"]');
|
|
244
223
|
const rowOneCheckboxCell = rowOne.querySelector(
|
|
245
224
|
"sp-table-checkbox-cell"
|
|
@@ -265,10 +244,7 @@ describe("Virtualized Table Selects", () => {
|
|
|
265
244
|
var _a;
|
|
266
245
|
const test = await fixture(virtualized());
|
|
267
246
|
const el = (_a = test.shadowRoot) == null ? void 0 : _a.querySelector("sp-table");
|
|
268
|
-
await
|
|
269
|
-
await elementUpdated(el);
|
|
270
|
-
const body = el.querySelector("sp-table-body");
|
|
271
|
-
await body[virtualizerRef].layoutComplete;
|
|
247
|
+
await tableLayoutComplete(el);
|
|
272
248
|
expect(el.selects).to.be.undefined;
|
|
273
249
|
el.selects = "single";
|
|
274
250
|
await elementUpdated(el);
|
|
@@ -318,10 +294,7 @@ describe("Virtualized Table Selects", () => {
|
|
|
318
294
|
const test = await fixture(virtualized());
|
|
319
295
|
const el = (_a = test.shadowRoot) == null ? void 0 : _a.querySelector("sp-table");
|
|
320
296
|
el.selected = ["0"];
|
|
321
|
-
await
|
|
322
|
-
await elementUpdated(el);
|
|
323
|
-
const body = el.querySelector("sp-table-body");
|
|
324
|
-
await body[virtualizerRef].layoutComplete;
|
|
297
|
+
await tableLayoutComplete(el);
|
|
325
298
|
expect(el.selected.length).to.equal(1);
|
|
326
299
|
const rowOne = el.querySelector('[value="0"]');
|
|
327
300
|
const rowTwo = el.querySelector('[value="1"]');
|
|
@@ -341,8 +314,8 @@ describe("Virtualized Table Selects", () => {
|
|
|
341
314
|
`
|
|
342
315
|
);
|
|
343
316
|
const el = test.querySelector("sp-table");
|
|
344
|
-
|
|
345
|
-
await
|
|
317
|
+
const body = el.querySelector("sp-table-body");
|
|
318
|
+
await tableLayoutComplete(el);
|
|
346
319
|
const rowOne = el.querySelector('[value="0"]');
|
|
347
320
|
const rowOneCheckboxCell = rowOne.querySelector(
|
|
348
321
|
"sp-table-checkbox-cell"
|
|
@@ -350,7 +323,6 @@ describe("Virtualized Table Selects", () => {
|
|
|
350
323
|
expect(el.selected).to.deep.equal(["0", "48"]);
|
|
351
324
|
expect(rowOne.selected).to.be.true;
|
|
352
325
|
expect(rowOneCheckboxCell.checkbox.checked).to.be.true;
|
|
353
|
-
const body = el.querySelector("sp-table-body");
|
|
354
326
|
body.scrollTop = body.scrollHeight;
|
|
355
327
|
await nextFrame();
|
|
356
328
|
await nextFrame();
|
|
@@ -374,10 +346,7 @@ describe("Virtualized Table Selects", () => {
|
|
|
374
346
|
`
|
|
375
347
|
);
|
|
376
348
|
const el = test.querySelector("sp-table");
|
|
377
|
-
await
|
|
378
|
-
await elementUpdated(el);
|
|
379
|
-
const body = el.querySelector("sp-table-body");
|
|
380
|
-
await body[virtualizerRef].layoutComplete;
|
|
349
|
+
await tableLayoutComplete(el);
|
|
381
350
|
const rowOne = el.querySelector('[value="0"]');
|
|
382
351
|
const rowOneCheckboxCell = rowOne.querySelector(
|
|
383
352
|
"sp-table-checkbox-cell"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["virtualized-table-selects.test.ts"],
|
|
4
|
-
"sourcesContent": ["/*\nCopyright 2022 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport {\n elementUpdated,\n expect,\n fixture,\n html,\n nextFrame,\n oneEvent,\n} from '@open-wc/testing';\n\nimport '@spectrum-web-components/table/sp-table.js';\nimport '@spectrum-web-components/table/sp-table-head.js';\nimport '@spectrum-web-components/table/sp-table-head-cell.js';\nimport '@spectrum-web-components/table/sp-table-body.js';\nimport '@spectrum-web-components/table/sp-table-row.js';\nimport '@spectrum-web-components/table/sp-table-cell.js';\nimport '@spectrum-web-components/theme/sp-theme.js';\nimport '@spectrum-web-components/theme/src/themes.js';\nimport type {\n Table,\n TableBody,\n TableCheckboxCell,\n TableRow,\n} from '@spectrum-web-components/table';\nimport {\n virtualized,\n virtualizedCustomRow,\n virtualizedCustomValue,\n virtualizedMultiple,\n virtualizedSingle,\n} from '../stories/table-virtualized.stories.js';\nimport { makeItems, Properties, renderItem } from '../stories/index.js';\nimport { ignoreResizeObserverLoopError } from '../../../test/testing-helpers.js';\nimport { virtualizerRef } from '@lit-labs/virtualizer/virtualize.js';\nimport { Virtualizer } from '@lit-labs/virtualizer/Virtualizer.js';\nimport { TemplateResult } from '@spectrum-web-components/base';\nimport { Theme } from '@spectrum-web-components/theme';\n\nignoreResizeObserverLoopError(before, after);\n\nasync function styledFixture<T extends Element>(\n story: TemplateResult\n): Promise<T> {\n const test = await fixture<Theme>(html`\n <sp-theme theme=\"classic\" scale=\"medium\" color=\"light\">\n ${story}\n </sp-theme>\n `);\n return test.children[0] as T;\n}\n\ndescribe('Virtualized Table Selects', () => {\n it('selects and deselects all checkboxes in Virtualized Table when clicking the TableHeadCheckboxCell', async () => {\n const test = await fixture<Table>(\n html`\n <div>\n ${virtualizedMultiple(\n virtualizedMultiple.args as Properties\n )}\n </div>\n `\n );\n const el = test.querySelector('sp-table') as Table;\n\n await oneEvent(el, 'rangeChanged');\n await elementUpdated(el);\n\n expect(el.selected).to.deep.equal(['0', '48']);\n expect(el.selected.length).to.equal(2);\n\n const tableHeadCheckboxCell = el.querySelector(\n 'sp-table-head sp-table-checkbox-cell'\n ) as TableCheckboxCell;\n\n tableHeadCheckboxCell.checkbox.click();\n\n await elementUpdated(el);\n\n expect(el.selected.length).to.equal(49);\n\n tableHeadCheckboxCell.checkbox.click();\n\n await elementUpdated(el);\n await elementUpdated(tableHeadCheckboxCell);\n\n expect(el.selected.length).to.equal(0);\n });\n\n it('validates `value` property to make sure it matches the values in `selected`', async () => {\n const el = await fixture<Table>(\n virtualizedCustomValue(virtualizedCustomValue.args as Properties)\n );\n\n expect(el.selected).to.deep.equal(['applied-47']);\n\n el.selected = ['0'];\n await elementUpdated(el);\n\n expect(el.selected).to.deep.equal([]);\n\n el.selected = ['applied-1'];\n await elementUpdated(el);\n\n expect(el.selected).to.deep.equal(['applied-1']);\n });\n\n it('can prevent selection', async () => {\n const el = await fixture<Table>(\n html`\n <sp-table\n size=\"m\"\n style=\"height: 200px\"\n selects=\"single\"\n @change=${(event: Event) => {\n event.preventDefault();\n }}\n .items=${makeItems(50)}\n .renderItem=${renderItem}\n >\n <sp-table-head>\n <sp-table-head-cell>Column Title</sp-table-head-cell>\n <sp-table-head-cell>Column Title</sp-table-head-cell>\n <sp-table-head-cell>Column Title</sp-table-head-cell>\n </sp-table-head>\n </sp-table>\n `\n );\n\n await oneEvent(el, 'rangeChanged');\n await elementUpdated(el);\n\n const rowTwo = el.querySelector('[value=\"2\"]') as TableRow;\n const rowTwoCheckbox = rowTwo.querySelector(\n 'sp-table-checkbox-cell'\n ) as TableCheckboxCell;\n\n rowTwoCheckbox.checkbox.click();\n await elementUpdated(el);\n\n expect(rowTwoCheckbox.checked).to.be.false;\n expect(rowTwo.selected).to.be.false;\n expect(el.selected.length).to.equal(0);\n });\n\n it('surfaces [selects=\"single\"] selection on Virtualized Table', async () => {\n const test = await fixture<Table>(\n html`\n <sp-theme theme=\"spectrum\" scale=\"medium\" color=\"light\">\n ${virtualizedSingle(virtualizedSingle.args as Properties)}\n </sp-theme>\n `\n );\n const el = test.querySelector('sp-table') as Table;\n\n await oneEvent(el, 'rangeChanged');\n await elementUpdated(el);\n\n expect(el.selected, \"'Row 50 selected\").to.deep.equal(['49']);\n\n const body = el.querySelector('sp-table-body') as unknown as TableBody;\n body.scrollTop = body.scrollHeight;\n\n await nextFrame();\n await nextFrame();\n await elementUpdated(el);\n await elementUpdated(body);\n\n const lastRow = el.querySelector('[value=\"49\"]') as TableRow;\n const lastRowCheckboxCell = lastRow.querySelector(\n 'sp-table-checkbox-cell'\n ) as TableCheckboxCell;\n\n expect(lastRowCheckboxCell.checked).to.be.true;\n });\n\n it('selects via `click` while [selects=\"single\"]', async () => {\n const test = await fixture<Table>(\n html`\n <sp-theme theme=\"spectrum\" scale=\"medium\" color=\"light\">\n ${virtualizedSingle(virtualizedSingle.args as Properties)}\n </sp-theme>\n `\n );\n const el = test.querySelector('sp-table') as Table;\n el.selected = [];\n await oneEvent(el, 'rangeChanged');\n await elementUpdated(el);\n const body = el.querySelector('sp-table-body') as unknown as {\n [virtualizerRef]: Virtualizer;\n };\n await body[virtualizerRef].layoutComplete;\n\n const rowTwo = el.querySelector('[value=\"1\"]') as TableRow;\n const rowTwoCheckbox = rowTwo.querySelector(\n 'sp-table-checkbox-cell'\n ) as TableCheckboxCell;\n const rowThree = el.querySelector('[value=\"2\"]') as TableRow;\n const rowThreeCheckbox = rowThree.querySelector(\n 'sp-table-checkbox-cell'\n ) as TableCheckboxCell;\n\n await elementUpdated(el);\n expect(el.selected.length).to.equal(0);\n\n rowTwoCheckbox.checkbox.click();\n await elementUpdated(el);\n\n expect(el.selected).to.deep.equal(['1']);\n\n rowThreeCheckbox.click();\n await elementUpdated(el);\n\n expect(el.selected).to.deep.equal(['2']);\n\n rowTwo.click();\n await elementUpdated(el);\n\n expect(el.selected).to.deep.equal(['1']);\n });\n\n it('surfaces [selects=\"multiple\"] selection on Virtualized Table', async () => {\n const test = await fixture<Table>(\n html`\n <sp-theme theme=\"spectrum\" scale=\"medium\" color=\"light\">\n ${virtualizedMultiple(\n virtualizedMultiple.args as Properties\n )}\n </sp-theme>\n `\n );\n const el = test.querySelector('sp-table') as Table;\n\n await oneEvent(el, 'rangeChanged');\n await elementUpdated(el);\n\n expect(el.selected).to.deep.equal(['0', '48']);\n\n const body = el.querySelector('sp-table-body') as unknown as TableBody;\n body.scrollTop = body.scrollHeight;\n\n await nextFrame();\n await nextFrame();\n await elementUpdated(el);\n await elementUpdated(body);\n\n const unseenRow = el.querySelector('[value=\"48\"]') as TableRow;\n expect(unseenRow).to.not.be.null;\n const unseenRowCheckboxCell = unseenRow.querySelector(\n 'sp-table-checkbox-cell'\n ) as TableCheckboxCell;\n\n expect(unseenRowCheckboxCell.checked).to.be.true;\n });\n\n it('selects via `click` while [selects=\"multiple\"] selection', async () => {\n const test = await styledFixture<Table>(\n html`\n <div>\n ${virtualizedMultiple(\n virtualizedMultiple.args as Properties\n )}\n </div>\n `\n );\n const el = test.querySelector('sp-table') as Table;\n el.selected = [];\n await oneEvent(el, 'rangeChanged');\n await elementUpdated(el);\n const body = el.querySelector('sp-table-body') as unknown as {\n [virtualizerRef]: Virtualizer;\n };\n await body[virtualizerRef].layoutComplete;\n\n const rowTwo = el.querySelector('[value=\"2\"]') as TableRow;\n const tableHeadCheckboxCell = el.querySelector(\n 'sp-table-head sp-table-checkbox-cell'\n ) as TableCheckboxCell;\n const rowTwoCheckbox = rowTwo.querySelector(\n 'sp-table-checkbox-cell'\n ) as TableCheckboxCell;\n\n await elementUpdated(el);\n expect(el.selected.length).to.equal(0);\n\n rowTwoCheckbox.checkbox.click();\n await elementUpdated(el);\n\n expect(rowTwoCheckbox.checked).to.be.true;\n expect(el.selected).to.deep.equal(['2']);\n\n tableHeadCheckboxCell.checkbox.click();\n await elementUpdated(el);\n\n expect(el.selected.length).to.equal(49);\n });\n\n it('allows .selected values to be changed by the application when [selects=\"multiple\"]', async () => {\n const test = await styledFixture<Table>(\n html`\n <div>\n ${virtualizedMultiple(\n virtualizedMultiple.args as Properties\n )}\n </div>\n `\n );\n const el = test.querySelector('sp-table') as Table;\n el.selected = ['1'];\n await oneEvent(el, 'rangeChanged');\n await elementUpdated(el);\n const body = el.querySelector('sp-table-body') as unknown as {\n [virtualizerRef]: Virtualizer;\n };\n await body[virtualizerRef].layoutComplete;\n\n const rowOne = el.querySelector('[value=\"1\"]') as TableRow;\n const rowOneCheckboxCell = rowOne.querySelector(\n 'sp-table-checkbox-cell'\n ) as TableCheckboxCell;\n const rowTwo = el.querySelector('[value=\"2\"]') as TableRow;\n const rowTwoCheckboxCell = rowTwo.querySelector(\n 'sp-table-checkbox-cell'\n ) as TableCheckboxCell;\n\n expect(el.selected).to.deep.equal(['1']);\n expect(rowOneCheckboxCell.checkbox.checked).to.be.true;\n expect(rowTwoCheckboxCell.checkbox.checked).to.be.false;\n\n el.selected = ['1', '2'];\n\n await nextFrame;\n await nextFrame;\n await elementUpdated(el);\n await elementUpdated(rowTwoCheckboxCell);\n\n expect(el.selected).to.deep.equal(['1', '2']);\n expect(rowOneCheckboxCell.checkbox.checked).to.be.true;\n expect(rowTwo.selected).to.be.true;\n expect(rowTwoCheckboxCell.checkbox.checked).to.be.true;\n });\n\n it('allows [selects] to be changed by the application', async () => {\n const test = await fixture<HTMLElement>(virtualized());\n const el = test.shadowRoot?.querySelector('sp-table') as Table;\n await oneEvent(el, 'rangeChanged');\n await elementUpdated(el);\n const body = el.querySelector('sp-table-body') as unknown as {\n [virtualizerRef]: Virtualizer;\n };\n await body[virtualizerRef].layoutComplete;\n\n expect(el.selects).to.be.undefined;\n\n el.selects = 'single';\n await elementUpdated(el);\n\n expect(el.selects).to.equal('single');\n\n // render table body\n await nextFrame();\n // render checkboxes\n await nextFrame();\n await elementUpdated(el);\n\n const rowOne = el.querySelector('[value=\"0\"]') as TableRow;\n const rowOneCheckboxCell = rowOne.querySelector(\n 'sp-table-checkbox-cell'\n ) as TableCheckboxCell;\n\n const rowTwo = el.querySelector('[value=\"1\"]') as TableRow;\n const rowTwoCheckboxCell = rowTwo.querySelector(\n 'sp-table-checkbox-cell'\n ) as TableCheckboxCell;\n const tableHeadCheckboxCell = el.querySelector(\n 'sp-table-head sp-table-checkbox-cell'\n ) as TableCheckboxCell;\n\n expect(tableHeadCheckboxCell.selectsSingle).to.be.true;\n\n rowOneCheckboxCell.checkbox.click();\n await elementUpdated(el);\n\n expect(el.selected).to.deep.equal(['0']);\n expect(rowOneCheckboxCell.checkbox.checked).to.be.true;\n expect(rowTwoCheckboxCell.checkbox.checked).to.be.false;\n\n el.selects = 'multiple';\n await elementUpdated(el);\n\n expect(el.selects).to.equal('multiple');\n expect(tableHeadCheckboxCell.indeterminate).to.be.true;\n\n rowTwoCheckboxCell.checkbox.click();\n\n await elementUpdated(el);\n await elementUpdated(rowTwoCheckboxCell);\n\n expect(el.selected).to.deep.equal(['0', '1']);\n expect(rowOneCheckboxCell.checkbox.checked).to.be.true;\n expect(rowTwoCheckboxCell.checkbox.checked).to.be.true;\n expect(tableHeadCheckboxCell.indeterminate).to.be.true;\n\n el.removeAttribute('selects');\n await elementUpdated(el);\n\n expect(el.selects).to.be.null;\n expect(tableHeadCheckboxCell.indeterminate).to.be.true;\n\n const checkboxes = el.querySelectorAll(\n 'sp-table-checkbox-cell'\n ) as NodeListOf<TableCheckboxCell>;\n\n expect(checkboxes.length).to.equal(0);\n });\n\n it('selects a user-passed value for .selected array with no [selects] specified on Virtualized `<sp-table>`, but does not allow interaction afterwards', async () => {\n const test = await fixture<HTMLElement>(virtualized());\n const el = test.shadowRoot?.querySelector('sp-table') as Table;\n el.selected = ['0'];\n await oneEvent(el, 'rangeChanged');\n await elementUpdated(el);\n const body = el.querySelector('sp-table-body') as unknown as {\n [virtualizerRef]: Virtualizer;\n };\n await body[virtualizerRef].layoutComplete;\n\n expect(el.selected.length).to.equal(1);\n\n const rowOne = el.querySelector('[value=\"0\"]') as TableRow;\n const rowTwo = el.querySelector('[value=\"1\"]') as TableRow;\n const rowTwoCheckbox = rowTwo.querySelector('sp-table-checkbox-cell');\n\n expect(rowOne.selected).to.be.true;\n expect(rowTwo.selected).to.be.false;\n\n expect(rowTwoCheckbox).to.be.null;\n });\n\n it('ensures that virtualized elements with values in .selected are visually selected when brought into view using scrollTop', async () => {\n const test = await fixture<Table>(\n html`\n <sp-theme theme=\"spectrum\" scale=\"medium\" color=\"light\">\n ${virtualizedMultiple(\n virtualizedMultiple.args as Properties\n )}\n </sp-theme>\n `\n );\n const el = test.querySelector('sp-table') as Table;\n\n await oneEvent(el, 'rangeChanged');\n await elementUpdated(el);\n\n const rowOne = el.querySelector('[value=\"0\"]') as TableRow;\n const rowOneCheckboxCell = rowOne.querySelector(\n 'sp-table-checkbox-cell'\n ) as TableCheckboxCell;\n\n expect(el.selected).to.deep.equal(['0', '48']);\n expect(rowOne.selected).to.be.true;\n expect(rowOneCheckboxCell.checkbox.checked).to.be.true;\n\n const body = el.querySelector('sp-table-body') as unknown as TableBody;\n body.scrollTop = body.scrollHeight;\n\n await nextFrame();\n await nextFrame();\n await elementUpdated(el);\n await elementUpdated(body);\n\n const unseenRow = el.querySelector('[value=\"48\"]') as TableRow;\n const unseenRowCheckboxCell = unseenRow.querySelector(\n 'sp-table-checkbox-cell'\n ) as TableCheckboxCell;\n\n expect(unseenRow.selected).to.be.true;\n expect(unseenRowCheckboxCell.checkbox.checked).to.be.true;\n });\n\n it('ensures that virtualized elements with values in .selected are visually selected when brought into view using scrollToIndex', async () => {\n const test = await fixture<Table>(\n html`\n <div>\n ${virtualizedMultiple(\n virtualizedMultiple.args as Properties\n )}\n </div>\n `\n );\n const el = test.querySelector('sp-table') as Table;\n\n await oneEvent(el, 'rangeChanged');\n await elementUpdated(el);\n const body = el.querySelector('sp-table-body') as unknown as {\n [virtualizerRef]: Virtualizer;\n };\n await body[virtualizerRef].layoutComplete;\n\n const rowOne = el.querySelector('[value=\"0\"]') as TableRow;\n const rowOneCheckboxCell = rowOne.querySelector(\n 'sp-table-checkbox-cell'\n ) as TableCheckboxCell;\n\n expect(el.selected).to.deep.equal(['0', '48']);\n expect(rowOne.selected).to.be.true;\n expect(rowOneCheckboxCell.checkbox.checked).to.be.true;\n\n el.scrollToIndex(47);\n\n await nextFrame();\n await nextFrame();\n await elementUpdated(el);\n\n const unseenRow = el.querySelector('[value=\"48\"]') as TableRow;\n const unseenRowCheckboxCell = unseenRow.querySelector(\n 'sp-table-checkbox-cell'\n ) as TableCheckboxCell;\n\n expect(unseenRow.selected).to.be.true;\n expect(unseenRowCheckboxCell.checkbox.checked).to.be.true;\n });\n\n it('does not set `allSelected` to true by default on Virtualised `<sp-table>`', async () => {\n const test = await fixture<Table>(\n html`\n <div>\n ${virtualizedMultiple(\n virtualizedMultiple.args as Properties\n )}\n </div>\n `\n );\n const el = test.querySelector('sp-table') as Table;\n\n await oneEvent(el, 'rangeChanged');\n await elementUpdated(el);\n await elementUpdated(el);\n\n const tableHeadCheckboxCell = el.querySelector(\n 'sp-table-head sp-table-checkbox-cell'\n ) as TableCheckboxCell;\n\n expect(el.selected).to.deep.equal(['0', '48']);\n expect(tableHeadCheckboxCell.checkbox.checked).to.be.false;\n expect(tableHeadCheckboxCell.checkbox.indeterminate).to.be.true;\n });\n});\n\nit('renders custom content at a particular row and does not select it', async () => {\n const test = await fixture<Table>(\n html`\n <div>\n ${virtualizedCustomRow(virtualizedCustomRow.args as Properties)}\n </div>\n `\n );\n const el = test.querySelector('sp-table') as Table;\n\n await oneEvent(el, 'rangeChanged');\n await elementUpdated(el);\n\n const customRow = el.querySelector('[value=\"3\"]') as TableRow;\n const customRowCheckbox = customRow.querySelector('sp-checkbox-cell');\n\n expect(customRowCheckbox).to.be.null;\n\n const tableHeadCheckboxCell = el.querySelector(\n 'sp-table-head sp-table-checkbox-cell'\n ) as TableCheckboxCell;\n tableHeadCheckboxCell.checkbox.click();\n await elementUpdated(el);\n\n expect(customRow.selected).to.be.false;\n});\n"],
|
|
5
|
-
"mappings": ";AAYA;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACG;AAEP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AAOP;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACG;AACP,SAAS,WAAuB,kBAAkB;AAClD,SAAS,qCAAqC;AAC9C,SAAS,
|
|
4
|
+
"sourcesContent": ["/*\nCopyright 2022 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport {\n elementUpdated,\n expect,\n fixture,\n html,\n nextFrame,\n oneEvent,\n} from '@open-wc/testing';\n\nimport '@spectrum-web-components/table/sp-table.js';\nimport '@spectrum-web-components/table/sp-table-head.js';\nimport '@spectrum-web-components/table/sp-table-head-cell.js';\nimport '@spectrum-web-components/table/sp-table-body.js';\nimport '@spectrum-web-components/table/sp-table-row.js';\nimport '@spectrum-web-components/table/sp-table-cell.js';\nimport '@spectrum-web-components/theme/sp-theme.js';\nimport '@spectrum-web-components/theme/src/themes.js';\nimport type {\n Table,\n TableBody,\n TableCheckboxCell,\n TableRow,\n} from '@spectrum-web-components/table';\nimport {\n virtualized,\n virtualizedCustomRow,\n virtualizedCustomValue,\n virtualizedMultiple,\n virtualizedSingle,\n} from '../stories/table-virtualized.stories.js';\nimport { makeItems, Properties, renderItem } from '../stories/index.js';\nimport { ignoreResizeObserverLoopError } from '../../../test/testing-helpers.js';\nimport { styledFixture, tableLayoutComplete } from './helpers.js';\n\nignoreResizeObserverLoopError(before, after);\n\ndescribe('Virtualized Table Selects', () => {\n it('selects and deselects all checkboxes in Virtualized Table when clicking the TableHeadCheckboxCell', async () => {\n const test = await fixture<Table>(\n html`\n <div>\n ${virtualizedMultiple(\n virtualizedMultiple.args as Properties\n )}\n </div>\n `\n );\n const el = test.querySelector('sp-table') as Table;\n\n await oneEvent(el, 'rangeChanged');\n await elementUpdated(el);\n\n expect(el.selected).to.deep.equal(['0', '48']);\n expect(el.selected.length).to.equal(2);\n\n const tableHeadCheckboxCell = el.querySelector(\n 'sp-table-head sp-table-checkbox-cell'\n ) as TableCheckboxCell;\n\n tableHeadCheckboxCell.checkbox.click();\n\n await elementUpdated(el);\n\n expect(el.selected.length).to.equal(49);\n\n tableHeadCheckboxCell.checkbox.click();\n\n await elementUpdated(el);\n await elementUpdated(tableHeadCheckboxCell);\n\n expect(el.selected.length).to.equal(0);\n });\n\n it('validates `value` property to make sure it matches the values in `selected`', async () => {\n const el = await fixture<Table>(\n virtualizedCustomValue(virtualizedCustomValue.args as Properties)\n );\n\n expect(el.selected).to.deep.equal(['applied-47']);\n\n el.selected = ['0'];\n await elementUpdated(el);\n\n expect(el.selected).to.deep.equal([]);\n\n el.selected = ['applied-1'];\n await elementUpdated(el);\n\n expect(el.selected).to.deep.equal(['applied-1']);\n });\n\n it('can prevent selection', async () => {\n const el = await fixture<Table>(\n html`\n <sp-table\n size=\"m\"\n style=\"height: 200px\"\n selects=\"single\"\n @change=${(event: Event) => {\n event.preventDefault();\n }}\n .items=${makeItems(50)}\n .renderItem=${renderItem}\n >\n <sp-table-head>\n <sp-table-head-cell>Column Title</sp-table-head-cell>\n <sp-table-head-cell>Column Title</sp-table-head-cell>\n <sp-table-head-cell>Column Title</sp-table-head-cell>\n </sp-table-head>\n </sp-table>\n `\n );\n\n await oneEvent(el, 'rangeChanged');\n await elementUpdated(el);\n\n const rowTwo = el.querySelector('[value=\"2\"]') as TableRow;\n const rowTwoCheckbox = rowTwo.querySelector(\n 'sp-table-checkbox-cell'\n ) as TableCheckboxCell;\n\n rowTwoCheckbox.checkbox.click();\n await elementUpdated(el);\n\n expect(rowTwoCheckbox.checked).to.be.false;\n expect(rowTwo.selected).to.be.false;\n expect(el.selected.length).to.equal(0);\n });\n\n it('surfaces [selects=\"single\"] selection on Virtualized Table', async () => {\n const test = await fixture<Table>(\n html`\n <sp-theme theme=\"spectrum\" scale=\"medium\" color=\"light\">\n ${virtualizedSingle(virtualizedSingle.args as Properties)}\n </sp-theme>\n `\n );\n const el = test.querySelector('sp-table') as Table;\n const body = el.querySelector('sp-table-body') as TableBody;\n\n await tableLayoutComplete(el);\n\n expect(el.selected, \"'Row 50 selected\").to.deep.equal(['49']);\n\n body.scrollTop = body.scrollHeight;\n\n await nextFrame();\n await nextFrame();\n await elementUpdated(el);\n await elementUpdated(body);\n\n const lastRow = el.querySelector('[value=\"49\"]') as TableRow;\n expect(lastRow).to.not.be.null;\n\n const lastRowCheckboxCell = lastRow.querySelector(\n 'sp-table-checkbox-cell'\n ) as TableCheckboxCell;\n\n expect(lastRowCheckboxCell.checked).to.be.true;\n });\n\n it('selects via `click` while [selects=\"single\"]', async () => {\n const test = await fixture<Table>(\n html`\n <sp-theme theme=\"spectrum\" scale=\"medium\" color=\"light\">\n ${virtualizedSingle(virtualizedSingle.args as Properties)}\n </sp-theme>\n `\n );\n const el = test.querySelector('sp-table') as Table;\n el.selected = [];\n\n await tableLayoutComplete(el);\n\n const rowTwo = el.querySelector('[value=\"1\"]') as TableRow;\n const rowTwoCheckbox = rowTwo.querySelector(\n 'sp-table-checkbox-cell'\n ) as TableCheckboxCell;\n const rowThree = el.querySelector('[value=\"2\"]') as TableRow;\n const rowThreeCheckbox = rowThree.querySelector(\n 'sp-table-checkbox-cell'\n ) as TableCheckboxCell;\n\n await elementUpdated(el);\n expect(el.selected.length).to.equal(0);\n\n rowTwoCheckbox.checkbox.click();\n await elementUpdated(el);\n\n expect(el.selected).to.deep.equal(['1']);\n\n rowThreeCheckbox.click();\n await elementUpdated(el);\n\n expect(el.selected).to.deep.equal(['2']);\n\n rowTwo.click();\n await elementUpdated(el);\n\n expect(el.selected).to.deep.equal(['1']);\n });\n\n it('surfaces [selects=\"multiple\"] selection on Virtualized Table', async () => {\n const test = await fixture<Table>(\n html`\n <sp-theme theme=\"spectrum\" scale=\"medium\" color=\"light\">\n ${virtualizedMultiple(\n virtualizedMultiple.args as Properties\n )}\n </sp-theme>\n `\n );\n const el = test.querySelector('sp-table') as Table;\n const body = el.querySelector('sp-table-body') as TableBody;\n\n await tableLayoutComplete(el);\n\n expect(el.selected).to.deep.equal(['0', '48']);\n\n body.scrollTop = body.scrollHeight;\n\n await tableLayoutComplete(el);\n\n const unseenRow = el.querySelector('[value=\"48\"]') as TableRow;\n expect(unseenRow).to.not.be.null;\n const unseenRowCheckboxCell = unseenRow.querySelector(\n 'sp-table-checkbox-cell'\n ) as TableCheckboxCell;\n\n expect(unseenRowCheckboxCell.checked).to.be.true;\n });\n\n it('selects via `click` while [selects=\"multiple\"] selection', async () => {\n const test = await styledFixture<Table>(\n html`\n <div>\n ${virtualizedMultiple(\n virtualizedMultiple.args as Properties\n )}\n </div>\n `\n );\n const el = test.querySelector('sp-table') as Table;\n el.selected = [];\n\n await tableLayoutComplete(el);\n\n const rowTwo = el.querySelector('[value=\"2\"]') as TableRow;\n const tableHeadCheckboxCell = el.querySelector(\n 'sp-table-head sp-table-checkbox-cell'\n ) as TableCheckboxCell;\n const rowTwoCheckbox = rowTwo.querySelector(\n 'sp-table-checkbox-cell'\n ) as TableCheckboxCell;\n\n await elementUpdated(el);\n expect(el.selected.length).to.equal(0);\n\n rowTwoCheckbox.checkbox.click();\n await elementUpdated(el);\n\n expect(rowTwoCheckbox.checked).to.be.true;\n expect(el.selected).to.deep.equal(['2']);\n\n tableHeadCheckboxCell.checkbox.click();\n await elementUpdated(el);\n\n expect(el.selected.length).to.equal(49);\n });\n\n it('allows .selected values to be changed by the application when [selects=\"multiple\"]', async () => {\n const test = await styledFixture<Table>(\n html`\n <div>\n ${virtualizedMultiple(\n virtualizedMultiple.args as Properties\n )}\n </div>\n `\n );\n const el = test.querySelector('sp-table') as Table;\n el.selected = ['1'];\n await tableLayoutComplete(el);\n\n const rowOne = el.querySelector('[value=\"1\"]') as TableRow;\n const rowOneCheckboxCell = rowOne.querySelector(\n 'sp-table-checkbox-cell'\n ) as TableCheckboxCell;\n const rowTwo = el.querySelector('[value=\"2\"]') as TableRow;\n const rowTwoCheckboxCell = rowTwo.querySelector(\n 'sp-table-checkbox-cell'\n ) as TableCheckboxCell;\n\n expect(el.selected).to.deep.equal(['1']);\n expect(rowOneCheckboxCell.checkbox.checked).to.be.true;\n expect(rowTwoCheckboxCell.checkbox.checked).to.be.false;\n\n el.selected = ['1', '2'];\n\n await nextFrame;\n await nextFrame;\n await elementUpdated(el);\n await elementUpdated(rowTwoCheckboxCell);\n\n expect(el.selected).to.deep.equal(['1', '2']);\n expect(rowOneCheckboxCell.checkbox.checked).to.be.true;\n expect(rowTwo.selected).to.be.true;\n expect(rowTwoCheckboxCell.checkbox.checked).to.be.true;\n });\n\n it('allows [selects] to be changed by the application', async () => {\n const test = await fixture<HTMLElement>(virtualized());\n const el = test.shadowRoot?.querySelector('sp-table') as Table;\n\n await tableLayoutComplete(el);\n\n expect(el.selects).to.be.undefined;\n\n el.selects = 'single';\n await elementUpdated(el);\n\n expect(el.selects).to.equal('single');\n\n // render table body\n await nextFrame();\n // render checkboxes\n await nextFrame();\n await elementUpdated(el);\n\n const rowOne = el.querySelector('[value=\"0\"]') as TableRow;\n const rowOneCheckboxCell = rowOne.querySelector(\n 'sp-table-checkbox-cell'\n ) as TableCheckboxCell;\n\n const rowTwo = el.querySelector('[value=\"1\"]') as TableRow;\n const rowTwoCheckboxCell = rowTwo.querySelector(\n 'sp-table-checkbox-cell'\n ) as TableCheckboxCell;\n const tableHeadCheckboxCell = el.querySelector(\n 'sp-table-head sp-table-checkbox-cell'\n ) as TableCheckboxCell;\n\n expect(tableHeadCheckboxCell.selectsSingle).to.be.true;\n\n rowOneCheckboxCell.checkbox.click();\n await elementUpdated(el);\n\n expect(el.selected).to.deep.equal(['0']);\n expect(rowOneCheckboxCell.checkbox.checked).to.be.true;\n expect(rowTwoCheckboxCell.checkbox.checked).to.be.false;\n\n el.selects = 'multiple';\n await elementUpdated(el);\n\n expect(el.selects).to.equal('multiple');\n expect(tableHeadCheckboxCell.indeterminate).to.be.true;\n\n rowTwoCheckboxCell.checkbox.click();\n\n await elementUpdated(el);\n await elementUpdated(rowTwoCheckboxCell);\n\n expect(el.selected).to.deep.equal(['0', '1']);\n expect(rowOneCheckboxCell.checkbox.checked).to.be.true;\n expect(rowTwoCheckboxCell.checkbox.checked).to.be.true;\n expect(tableHeadCheckboxCell.indeterminate).to.be.true;\n\n el.removeAttribute('selects');\n await elementUpdated(el);\n\n expect(el.selects).to.be.null;\n expect(tableHeadCheckboxCell.indeterminate).to.be.true;\n\n const checkboxes = el.querySelectorAll(\n 'sp-table-checkbox-cell'\n ) as NodeListOf<TableCheckboxCell>;\n\n expect(checkboxes.length).to.equal(0);\n });\n\n it('selects a user-passed value for .selected array with no [selects] specified on Virtualized `<sp-table>`, but does not allow interaction afterwards', async () => {\n const test = await fixture<HTMLElement>(virtualized());\n const el = test.shadowRoot?.querySelector('sp-table') as Table;\n\n el.selected = ['0'];\n\n await tableLayoutComplete(el);\n\n expect(el.selected.length).to.equal(1);\n\n const rowOne = el.querySelector('[value=\"0\"]') as TableRow;\n const rowTwo = el.querySelector('[value=\"1\"]') as TableRow;\n const rowTwoCheckbox = rowTwo.querySelector('sp-table-checkbox-cell');\n\n expect(rowOne.selected).to.be.true;\n expect(rowTwo.selected).to.be.false;\n\n expect(rowTwoCheckbox).to.be.null;\n });\n\n it('ensures that virtualized elements with values in .selected are visually selected when brought into view using scrollTop', async () => {\n const test = await fixture<Table>(\n html`\n <sp-theme theme=\"spectrum\" scale=\"medium\" color=\"light\">\n ${virtualizedMultiple(\n virtualizedMultiple.args as Properties\n )}\n </sp-theme>\n `\n );\n const el = test.querySelector('sp-table') as Table;\n const body = el.querySelector('sp-table-body') as TableBody;\n\n await tableLayoutComplete(el);\n\n const rowOne = el.querySelector('[value=\"0\"]') as TableRow;\n const rowOneCheckboxCell = rowOne.querySelector(\n 'sp-table-checkbox-cell'\n ) as TableCheckboxCell;\n\n expect(el.selected).to.deep.equal(['0', '48']);\n expect(rowOne.selected).to.be.true;\n expect(rowOneCheckboxCell.checkbox.checked).to.be.true;\n\n body.scrollTop = body.scrollHeight;\n\n await nextFrame();\n await nextFrame();\n await elementUpdated(el);\n await elementUpdated(body);\n\n const unseenRow = el.querySelector('[value=\"48\"]') as TableRow;\n const unseenRowCheckboxCell = unseenRow.querySelector(\n 'sp-table-checkbox-cell'\n ) as TableCheckboxCell;\n\n expect(unseenRow.selected).to.be.true;\n expect(unseenRowCheckboxCell.checkbox.checked).to.be.true;\n });\n\n it('ensures that virtualized elements with values in .selected are visually selected when brought into view using scrollToIndex', async () => {\n const test = await fixture<Table>(\n html`\n <div>\n ${virtualizedMultiple(\n virtualizedMultiple.args as Properties\n )}\n </div>\n `\n );\n const el = test.querySelector('sp-table') as Table;\n\n await tableLayoutComplete(el);\n\n const rowOne = el.querySelector('[value=\"0\"]') as TableRow;\n const rowOneCheckboxCell = rowOne.querySelector(\n 'sp-table-checkbox-cell'\n ) as TableCheckboxCell;\n\n expect(el.selected).to.deep.equal(['0', '48']);\n expect(rowOne.selected).to.be.true;\n expect(rowOneCheckboxCell.checkbox.checked).to.be.true;\n\n el.scrollToIndex(47);\n\n await nextFrame();\n await nextFrame();\n await elementUpdated(el);\n\n const unseenRow = el.querySelector('[value=\"48\"]') as TableRow;\n const unseenRowCheckboxCell = unseenRow.querySelector(\n 'sp-table-checkbox-cell'\n ) as TableCheckboxCell;\n\n expect(unseenRow.selected).to.be.true;\n expect(unseenRowCheckboxCell.checkbox.checked).to.be.true;\n });\n\n it('does not set `allSelected` to true by default on Virtualised `<sp-table>`', async () => {\n const test = await fixture<Table>(\n html`\n <div>\n ${virtualizedMultiple(\n virtualizedMultiple.args as Properties\n )}\n </div>\n `\n );\n const el = test.querySelector('sp-table') as Table;\n\n await oneEvent(el, 'rangeChanged');\n await elementUpdated(el);\n await elementUpdated(el);\n\n const tableHeadCheckboxCell = el.querySelector(\n 'sp-table-head sp-table-checkbox-cell'\n ) as TableCheckboxCell;\n\n expect(el.selected).to.deep.equal(['0', '48']);\n expect(tableHeadCheckboxCell.checkbox.checked).to.be.false;\n expect(tableHeadCheckboxCell.checkbox.indeterminate).to.be.true;\n });\n});\n\nit('renders custom content at a particular row and does not select it', async () => {\n const test = await fixture<Table>(\n html`\n <div>\n ${virtualizedCustomRow(virtualizedCustomRow.args as Properties)}\n </div>\n `\n );\n const el = test.querySelector('sp-table') as Table;\n\n await oneEvent(el, 'rangeChanged');\n await elementUpdated(el);\n\n const customRow = el.querySelector('[value=\"3\"]') as TableRow;\n const customRowCheckbox = customRow.querySelector('sp-checkbox-cell');\n\n expect(customRowCheckbox).to.be.null;\n\n const tableHeadCheckboxCell = el.querySelector(\n 'sp-table-head sp-table-checkbox-cell'\n ) as TableCheckboxCell;\n tableHeadCheckboxCell.checkbox.click();\n await elementUpdated(el);\n\n expect(customRow.selected).to.be.false;\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -19,31 +19,9 @@ import { virtualized } from "../stories/table-virtualized.stories.js";
|
|
|
19
19
|
import { makeItems, renderItem } from "../stories/index.js";
|
|
20
20
|
import { sendKeys } from "@web/test-runner-commands";
|
|
21
21
|
import { spy } from "sinon";
|
|
22
|
-
import {
|
|
23
|
-
|
|
24
|
-
before
|
|
25
|
-
Mocha.process.removeListener("uncaughtException");
|
|
26
|
-
globalErrorHandler = window.onerror;
|
|
27
|
-
addEventListener("error", (error) => {
|
|
28
|
-
var _a, _b;
|
|
29
|
-
if ((_b = (_a = error.message) == null ? void 0 : _a.match) == null ? void 0 : _b.call(_a, /ResizeObserver loop limit exceeded/)) {
|
|
30
|
-
return;
|
|
31
|
-
} else {
|
|
32
|
-
globalErrorHandler == null ? void 0 : globalErrorHandler(error);
|
|
33
|
-
}
|
|
34
|
-
});
|
|
35
|
-
});
|
|
36
|
-
after(function() {
|
|
37
|
-
window.onerror = globalErrorHandler;
|
|
38
|
-
});
|
|
39
|
-
async function styledFixture(story) {
|
|
40
|
-
const test = await fixture(html`
|
|
41
|
-
<sp-theme theme="classic" scale="medium" color="light">
|
|
42
|
-
${story}
|
|
43
|
-
</sp-theme>
|
|
44
|
-
`);
|
|
45
|
-
return test.children[0];
|
|
46
|
-
}
|
|
22
|
+
import { ignoreResizeObserverLoopError } from "../../../test/testing-helpers.js";
|
|
23
|
+
import { styledFixture, tableLayoutComplete } from "./helpers.js";
|
|
24
|
+
ignoreResizeObserverLoopError(before, after);
|
|
47
25
|
describe("Virtualized Table", () => {
|
|
48
26
|
const virtualItems = makeItems(50);
|
|
49
27
|
it("loads virtualized table accessibly", async () => {
|
|
@@ -282,8 +260,7 @@ describe("Virtualized Table", () => {
|
|
|
282
260
|
</sp-table-head>
|
|
283
261
|
</sp-table>
|
|
284
262
|
`);
|
|
285
|
-
|
|
286
|
-
await body[virtualizerRef].layoutComplete;
|
|
263
|
+
await tableLayoutComplete(el);
|
|
287
264
|
expect(el.selected).to.deep.equal(["1", "47"]);
|
|
288
265
|
el.scrollToIndex(47);
|
|
289
266
|
await nextFrame();
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["virtualized-table.test.ts"],
|
|
4
|
-
"sourcesContent": ["/*\nCopyright 2022 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\nimport {\n elementUpdated,\n expect,\n fixture,\n html,\n nextFrame,\n oneEvent,\n} from '@open-wc/testing';\n\nimport { TemplateResult } from '@spectrum-web-components/base';\nimport '@spectrum-web-components/theme/sp-theme.js';\nimport '@spectrum-web-components/theme/src/themes.js';\nimport type { Theme } from '@spectrum-web-components/theme';\nimport '@spectrum-web-components/table/sp-table.js';\nimport '@spectrum-web-components/table/sp-table-head.js';\nimport '@spectrum-web-components/table/sp-table-head-cell.js';\nimport '@spectrum-web-components/table/sp-table-body.js';\nimport '@spectrum-web-components/table/sp-table-row.js';\nimport '@spectrum-web-components/table/sp-table-cell.js';\nimport type {\n Table,\n TableCheckboxCell,\n TableHeadCell,\n TableRow,\n} from '@spectrum-web-components/table';\nimport { virtualized } from '../stories/table-virtualized.stories.js';\nimport { makeItems, renderItem } from '../stories/index.js';\nimport { sendKeys } from '@web/test-runner-commands';\nimport { spy } from 'sinon';\nimport { virtualizerRef } from '@lit-labs/virtualizer/virtualize.js';\nimport { Virtualizer } from '@lit-labs/virtualizer/Virtualizer.js';\n\nlet globalErrorHandler: undefined | OnErrorEventHandler = undefined;\nbefore(function () {\n // Save Mocha's handler.\n (\n Mocha as unknown as { process: { removeListener(name: string): void } }\n ).process.removeListener('uncaughtException');\n globalErrorHandler = window.onerror;\n addEventListener('error', (error) => {\n if (error.message?.match?.(/ResizeObserver loop limit exceeded/)) {\n return;\n } else {\n globalErrorHandler?.(error);\n }\n });\n});\nafter(function () {\n window.onerror = globalErrorHandler as OnErrorEventHandler;\n});\n\nasync function styledFixture<T extends Element>(\n story: TemplateResult\n): Promise<T> {\n const test = await fixture<Theme>(html`\n <sp-theme theme=\"classic\" scale=\"medium\" color=\"light\">\n ${story}\n </sp-theme>\n `);\n return test.children[0] as T;\n}\n\ndescribe('Virtualized Table', () => {\n const virtualItems = makeItems(50);\n\n it('loads virtualized table accessibly', async () => {\n const el = await styledFixture<Table>(virtualized());\n await nextFrame();\n await nextFrame();\n await nextFrame();\n await nextFrame();\n await nextFrame();\n await nextFrame();\n await expect(el).to.be.accessible();\n });\n\n it('can be size `s`', async () => {\n const el = await fixture<Table>(html`\n <sp-table\n size=\"s\"\n style=\"height: 120px\"\n .items=${virtualItems}\n .renderItem=${renderItem}\n scroller?=\"true\"\n >\n <sp-table-head>\n <sp-table-head-cell>Column Title</sp-table-head-cell>\n <sp-table-head-cell>Column Title</sp-table-head-cell>\n <sp-table-head-cell>Column Title</sp-table-head-cell>\n </sp-table-head>\n </sp-table>\n `);\n await oneEvent(el, 'rangeChanged');\n await elementUpdated(el);\n\n expect(el.size).to.equal('s');\n });\n\n it('creates tab stops for `<sp-table-head-cell sortable>`', async () => {\n const input = document.createElement('input');\n const test = await fixture<HTMLElement>(virtualized());\n const el = test.shadowRoot?.querySelector('sp-table') as Table;\n\n test.insertAdjacentElement('beforebegin', input);\n\n input.focus();\n expect(input === document.activeElement).to.be.true;\n\n const firstSortable = el.querySelector(\n '[sortable]:nth-of-type(1)'\n ) as TableHeadCell;\n const secondSortable = el.querySelector(\n '[sortable]:nth-of-type(2)'\n ) as TableHeadCell;\n\n await sendKeys({\n press: 'Tab',\n });\n expect(firstSortable === test.shadowRoot?.activeElement).to.be.true;\n\n await sendKeys({\n press: 'Tab',\n });\n expect(secondSortable === test.shadowRoot?.activeElement).to.be.true;\n });\n\n it('does not tab stop on non-sortable `<sp-table-head-cell>`s', async () => {\n const input = document.createElement('input');\n const test = await fixture<HTMLElement>(virtualized());\n const el = test.shadowRoot?.querySelector('sp-table') as Table;\n\n test.insertAdjacentElement('beforebegin', input);\n\n input.focus();\n expect(input === document.activeElement).to.be.true;\n\n const firstHeadCell = el.querySelector(\n 'sp-table-head-cell:nth-of-type(1)'\n ) as TableHeadCell;\n const secondHeadCell = el.querySelector(\n 'sp-table-head-cell:nth-of-type(2)'\n ) as TableHeadCell;\n const thirdHeadCell = el.querySelector(\n 'sp-table-head-cell:nth-of-type(3)'\n ) as TableHeadCell;\n\n await sendKeys({\n press: 'Tab',\n });\n expect(firstHeadCell === test.shadowRoot?.activeElement).to.be.true;\n\n await sendKeys({\n press: 'Tab',\n });\n expect(secondHeadCell === test.shadowRoot?.activeElement).to.be.true;\n\n await sendKeys({\n press: 'Tab',\n });\n expect(thirdHeadCell === test.shadowRoot?.activeElement).to.be.false;\n });\n\n it('can be focus()ed from the `<sp-table>`', async () => {\n const test = await fixture<HTMLElement>(virtualized());\n const el = test.shadowRoot?.querySelector('sp-table') as Table;\n\n el.focus();\n\n const firstSortable = el.querySelector(\n '[sortable]:nth-of-type(1)'\n ) as TableHeadCell;\n\n expect(firstSortable === test.shadowRoot?.activeElement).to.be.true;\n });\n\n it('dispatches `sorted` events', async () => {\n const test = await fixture<Table>(virtualized());\n const el = test.shadowRoot?.querySelector('sp-table') as Table;\n\n const tableHeadCell1 = el.querySelector(\n '[sortable][sort-direction]'\n ) as TableHeadCell;\n const tableHeadCell2 = el.querySelector(\n '[sortable]:not([sort-direction])'\n ) as TableHeadCell;\n\n tableHeadCell2.click();\n await nextFrame();\n\n expect(tableHeadCell1.hasAttribute('sort-direction')).to.be.false;\n expect(tableHeadCell2.hasAttribute('sort-direction')).to.be.true;\n expect(tableHeadCell2.getAttribute('sort-direction')).to.equal('asc');\n\n tableHeadCell2.click();\n await nextFrame();\n\n expect(tableHeadCell1.hasAttribute('sort-direction')).to.be.false;\n expect(tableHeadCell2.hasAttribute('sort-direction')).to.be.true;\n expect(tableHeadCell2.getAttribute('sort-direction')).to.equal('desc');\n\n tableHeadCell1.click();\n await nextFrame();\n\n expect(tableHeadCell2.hasAttribute('sort-direction')).to.be.false;\n expect(tableHeadCell1.hasAttribute('sort-direction')).to.be.true;\n expect(tableHeadCell1.getAttribute('sort-direction')).to.equal('asc');\n });\n\n it('dispatches `change` events', async () => {\n const changeSpy = spy();\n const el = await fixture<Table>(html`\n <sp-table\n .selected=${['0', '22']}\n selects=\"multiple\"\n style=\"height: 120px\"\n .items=${virtualItems}\n .renderItem=${renderItem}\n scroller?=\"true\"\n @change=${({ target }: Event & { target: Table }) => {\n changeSpy(target);\n }}\n >\n <sp-table-head>\n <sp-table-head-cell>Column Title</sp-table-head-cell>\n <sp-table-head-cell>Column Title</sp-table-head-cell>\n <sp-table-head-cell>Column Title</sp-table-head-cell>\n </sp-table-head>\n </sp-table>\n `);\n await oneEvent(el, 'rangeChanged');\n await elementUpdated(el);\n\n expect(el.selected).to.deep.equal(['0', '22']);\n\n await nextFrame;\n\n const rowTwo = el.querySelector('[value=\"3\"]') as TableRow;\n const rowTwoCheckboxCell = rowTwo.querySelector(\n 'sp-table-checkbox-cell'\n ) as TableCheckboxCell;\n\n rowTwoCheckboxCell.checkbox.click();\n\n expect(el.selected).to.deep.equal(['0', '22', '3']);\n });\n it('accepts change events dispatched from TableHead `<sp-table-checkbox-cell>`', async () => {\n const changeSpy = spy();\n const el = await fixture<Table>(html`\n <sp-table\n .selected=${['0', '22']}\n selects=\"multiple\"\n style=\"height: 120px\"\n .items=${virtualItems}\n .renderItem=${renderItem}\n scroller?=\"true\"\n @change=${({ target }: Event & { target: Table }) => {\n changeSpy(target);\n }}\n >\n <sp-table-head>\n <sp-table-head-cell>Column Title</sp-table-head-cell>\n <sp-table-head-cell>Column Title</sp-table-head-cell>\n <sp-table-head-cell>Column Title</sp-table-head-cell>\n </sp-table-head>\n </sp-table>\n `);\n await oneEvent(el, 'rangeChanged');\n await elementUpdated(el);\n\n const tableHeadCheckboxCell = el.querySelector(\n 'sp-table-head sp-table-checkbox-cell'\n ) as TableCheckboxCell;\n\n expect(el.selected).to.deep.equal(['0', '22']);\n\n tableHeadCheckboxCell.checkbox.click();\n\n expect(changeSpy.calledOnce).to.be.true;\n expect(changeSpy.calledWithExactly(el)).to.be.true;\n\n expect(el.selected.length).to.equal(50);\n expect(tableHeadCheckboxCell.checkbox.checked).to.be.true;\n });\n\n it('dispatches `rangeChanged` events on Virtualized Table', async () => {\n const el = await fixture<Table>(html`\n <sp-table\n selects=\"multiple\"\n .selected=${['1', '47']}\n style=\"height: 120px\"\n .items=${makeItems(50)}\n .renderItem=${renderItem}\n scroller?=\"true\"\n >\n <sp-table-head>\n <sp-table-head-cell>Column Title</sp-table-head-cell>\n <sp-table-head-cell>Column Title</sp-table-head-cell>\n <sp-table-head-cell>Column Title</sp-table-head-cell>\n </sp-table-head>\n </sp-table>\n `);\n await oneEvent(el, 'rangeChanged');\n await elementUpdated(el);\n\n expect(el.selected).to.deep.equal(['1', '47']);\n\n const rangeChanged = oneEvent(el, 'rangeChanged');\n let tableRow = el.querySelector('sp-table-row') as TableRow;\n const initialValue = tableRow.value;\n\n el.scrollToIndex(47);\n\n await rangeChanged;\n\n tableRow = el.querySelector('sp-table-row') as TableRow;\n const newValue = tableRow.value;\n\n expect(newValue).to.not.equal(initialValue);\n });\n\n it('dispatches `visibilityChanged` events on Virtualized Table', async () => {\n const visibilityChangedSpy = spy();\n\n const el = await fixture<Table>(html`\n <sp-table\n selects=\"multiple\"\n .selected=${['1', '47']}\n style=\"height: 120px\"\n .items=${virtualItems}\n .renderItem=${renderItem}\n scroller?=\"true\"\n @visibilityChanged=${({\n target,\n }: Event & { target: Table }) => {\n visibilityChangedSpy(target);\n }}\n >\n <sp-table-head>\n <sp-table-head-cell>Column Title</sp-table-head-cell>\n <sp-table-head-cell>Column Title</sp-table-head-cell>\n <sp-table-head-cell>Column Title</sp-table-head-cell>\n </sp-table-head>\n </sp-table>\n `);\n const body = el.querySelector('sp-table-body') as unknown as {\n [virtualizerRef]: Virtualizer;\n };\n await body[virtualizerRef].layoutComplete;\n\n expect(el.selected).to.deep.equal(['1', '47']);\n\n el.scrollToIndex(47);\n\n // waiting for table body\n await nextFrame();\n // waiting for virtualizer\n await nextFrame();\n await elementUpdated(el);\n\n expect(visibilityChangedSpy.called).to.be.true;\n });\n});\n"],
|
|
5
|
-
"mappings": ";AAWA;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACG;
|
|
4
|
+
"sourcesContent": ["/*\nCopyright 2022 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\nimport {\n elementUpdated,\n expect,\n fixture,\n html,\n nextFrame,\n oneEvent,\n} from '@open-wc/testing';\n\nimport '@spectrum-web-components/theme/sp-theme.js';\nimport '@spectrum-web-components/theme/src/themes.js';\nimport '@spectrum-web-components/table/sp-table.js';\nimport '@spectrum-web-components/table/sp-table-head.js';\nimport '@spectrum-web-components/table/sp-table-head-cell.js';\nimport '@spectrum-web-components/table/sp-table-body.js';\nimport '@spectrum-web-components/table/sp-table-row.js';\nimport '@spectrum-web-components/table/sp-table-cell.js';\nimport type {\n Table,\n TableCheckboxCell,\n TableHeadCell,\n TableRow,\n} from '@spectrum-web-components/table';\nimport { virtualized } from '../stories/table-virtualized.stories.js';\nimport { makeItems, renderItem } from '../stories/index.js';\nimport { sendKeys } from '@web/test-runner-commands';\nimport { spy } from 'sinon';\nimport { ignoreResizeObserverLoopError } from '../../../test/testing-helpers.js';\nimport { styledFixture, tableLayoutComplete } from './helpers.js';\n\nignoreResizeObserverLoopError(before, after);\n\ndescribe('Virtualized Table', () => {\n const virtualItems = makeItems(50);\n\n it('loads virtualized table accessibly', async () => {\n const el = await styledFixture<Table>(virtualized());\n await nextFrame();\n await nextFrame();\n await nextFrame();\n await nextFrame();\n await nextFrame();\n await nextFrame();\n await expect(el).to.be.accessible();\n });\n\n it('can be size `s`', async () => {\n const el = await fixture<Table>(html`\n <sp-table\n size=\"s\"\n style=\"height: 120px\"\n .items=${virtualItems}\n .renderItem=${renderItem}\n scroller?=\"true\"\n >\n <sp-table-head>\n <sp-table-head-cell>Column Title</sp-table-head-cell>\n <sp-table-head-cell>Column Title</sp-table-head-cell>\n <sp-table-head-cell>Column Title</sp-table-head-cell>\n </sp-table-head>\n </sp-table>\n `);\n await oneEvent(el, 'rangeChanged');\n await elementUpdated(el);\n\n expect(el.size).to.equal('s');\n });\n\n it('creates tab stops for `<sp-table-head-cell sortable>`', async () => {\n const input = document.createElement('input');\n const test = await fixture<HTMLElement>(virtualized());\n const el = test.shadowRoot?.querySelector('sp-table') as Table;\n\n test.insertAdjacentElement('beforebegin', input);\n\n input.focus();\n expect(input === document.activeElement).to.be.true;\n\n const firstSortable = el.querySelector(\n '[sortable]:nth-of-type(1)'\n ) as TableHeadCell;\n const secondSortable = el.querySelector(\n '[sortable]:nth-of-type(2)'\n ) as TableHeadCell;\n\n await sendKeys({\n press: 'Tab',\n });\n expect(firstSortable === test.shadowRoot?.activeElement).to.be.true;\n\n await sendKeys({\n press: 'Tab',\n });\n expect(secondSortable === test.shadowRoot?.activeElement).to.be.true;\n });\n\n it('does not tab stop on non-sortable `<sp-table-head-cell>`s', async () => {\n const input = document.createElement('input');\n const test = await fixture<HTMLElement>(virtualized());\n const el = test.shadowRoot?.querySelector('sp-table') as Table;\n\n test.insertAdjacentElement('beforebegin', input);\n\n input.focus();\n expect(input === document.activeElement).to.be.true;\n\n const firstHeadCell = el.querySelector(\n 'sp-table-head-cell:nth-of-type(1)'\n ) as TableHeadCell;\n const secondHeadCell = el.querySelector(\n 'sp-table-head-cell:nth-of-type(2)'\n ) as TableHeadCell;\n const thirdHeadCell = el.querySelector(\n 'sp-table-head-cell:nth-of-type(3)'\n ) as TableHeadCell;\n\n await sendKeys({\n press: 'Tab',\n });\n expect(firstHeadCell === test.shadowRoot?.activeElement).to.be.true;\n\n await sendKeys({\n press: 'Tab',\n });\n expect(secondHeadCell === test.shadowRoot?.activeElement).to.be.true;\n\n await sendKeys({\n press: 'Tab',\n });\n expect(thirdHeadCell === test.shadowRoot?.activeElement).to.be.false;\n });\n\n it('can be focus()ed from the `<sp-table>`', async () => {\n const test = await fixture<HTMLElement>(virtualized());\n const el = test.shadowRoot?.querySelector('sp-table') as Table;\n\n el.focus();\n\n const firstSortable = el.querySelector(\n '[sortable]:nth-of-type(1)'\n ) as TableHeadCell;\n\n expect(firstSortable === test.shadowRoot?.activeElement).to.be.true;\n });\n\n it('dispatches `sorted` events', async () => {\n const test = await fixture<Table>(virtualized());\n const el = test.shadowRoot?.querySelector('sp-table') as Table;\n\n const tableHeadCell1 = el.querySelector(\n '[sortable][sort-direction]'\n ) as TableHeadCell;\n const tableHeadCell2 = el.querySelector(\n '[sortable]:not([sort-direction])'\n ) as TableHeadCell;\n\n tableHeadCell2.click();\n await nextFrame();\n\n expect(tableHeadCell1.hasAttribute('sort-direction')).to.be.false;\n expect(tableHeadCell2.hasAttribute('sort-direction')).to.be.true;\n expect(tableHeadCell2.getAttribute('sort-direction')).to.equal('asc');\n\n tableHeadCell2.click();\n await nextFrame();\n\n expect(tableHeadCell1.hasAttribute('sort-direction')).to.be.false;\n expect(tableHeadCell2.hasAttribute('sort-direction')).to.be.true;\n expect(tableHeadCell2.getAttribute('sort-direction')).to.equal('desc');\n\n tableHeadCell1.click();\n await nextFrame();\n\n expect(tableHeadCell2.hasAttribute('sort-direction')).to.be.false;\n expect(tableHeadCell1.hasAttribute('sort-direction')).to.be.true;\n expect(tableHeadCell1.getAttribute('sort-direction')).to.equal('asc');\n });\n\n it('dispatches `change` events', async () => {\n const changeSpy = spy();\n const el = await fixture<Table>(html`\n <sp-table\n .selected=${['0', '22']}\n selects=\"multiple\"\n style=\"height: 120px\"\n .items=${virtualItems}\n .renderItem=${renderItem}\n scroller?=\"true\"\n @change=${({ target }: Event & { target: Table }) => {\n changeSpy(target);\n }}\n >\n <sp-table-head>\n <sp-table-head-cell>Column Title</sp-table-head-cell>\n <sp-table-head-cell>Column Title</sp-table-head-cell>\n <sp-table-head-cell>Column Title</sp-table-head-cell>\n </sp-table-head>\n </sp-table>\n `);\n await oneEvent(el, 'rangeChanged');\n await elementUpdated(el);\n\n expect(el.selected).to.deep.equal(['0', '22']);\n\n await nextFrame;\n\n const rowTwo = el.querySelector('[value=\"3\"]') as TableRow;\n const rowTwoCheckboxCell = rowTwo.querySelector(\n 'sp-table-checkbox-cell'\n ) as TableCheckboxCell;\n\n rowTwoCheckboxCell.checkbox.click();\n\n expect(el.selected).to.deep.equal(['0', '22', '3']);\n });\n it('accepts change events dispatched from TableHead `<sp-table-checkbox-cell>`', async () => {\n const changeSpy = spy();\n const el = await fixture<Table>(html`\n <sp-table\n .selected=${['0', '22']}\n selects=\"multiple\"\n style=\"height: 120px\"\n .items=${virtualItems}\n .renderItem=${renderItem}\n scroller?=\"true\"\n @change=${({ target }: Event & { target: Table }) => {\n changeSpy(target);\n }}\n >\n <sp-table-head>\n <sp-table-head-cell>Column Title</sp-table-head-cell>\n <sp-table-head-cell>Column Title</sp-table-head-cell>\n <sp-table-head-cell>Column Title</sp-table-head-cell>\n </sp-table-head>\n </sp-table>\n `);\n await oneEvent(el, 'rangeChanged');\n await elementUpdated(el);\n\n const tableHeadCheckboxCell = el.querySelector(\n 'sp-table-head sp-table-checkbox-cell'\n ) as TableCheckboxCell;\n\n expect(el.selected).to.deep.equal(['0', '22']);\n\n tableHeadCheckboxCell.checkbox.click();\n\n expect(changeSpy.calledOnce).to.be.true;\n expect(changeSpy.calledWithExactly(el)).to.be.true;\n\n expect(el.selected.length).to.equal(50);\n expect(tableHeadCheckboxCell.checkbox.checked).to.be.true;\n });\n\n it('dispatches `rangeChanged` events on Virtualized Table', async () => {\n const el = await fixture<Table>(html`\n <sp-table\n selects=\"multiple\"\n .selected=${['1', '47']}\n style=\"height: 120px\"\n .items=${makeItems(50)}\n .renderItem=${renderItem}\n scroller?=\"true\"\n >\n <sp-table-head>\n <sp-table-head-cell>Column Title</sp-table-head-cell>\n <sp-table-head-cell>Column Title</sp-table-head-cell>\n <sp-table-head-cell>Column Title</sp-table-head-cell>\n </sp-table-head>\n </sp-table>\n `);\n await oneEvent(el, 'rangeChanged');\n await elementUpdated(el);\n\n expect(el.selected).to.deep.equal(['1', '47']);\n\n const rangeChanged = oneEvent(el, 'rangeChanged');\n let tableRow = el.querySelector('sp-table-row') as TableRow;\n const initialValue = tableRow.value;\n\n el.scrollToIndex(47);\n\n await rangeChanged;\n\n tableRow = el.querySelector('sp-table-row') as TableRow;\n const newValue = tableRow.value;\n\n expect(newValue).to.not.equal(initialValue);\n });\n\n it('dispatches `visibilityChanged` events on Virtualized Table', async () => {\n const visibilityChangedSpy = spy();\n\n const el = await fixture<Table>(html`\n <sp-table\n selects=\"multiple\"\n .selected=${['1', '47']}\n style=\"height: 120px\"\n .items=${virtualItems}\n .renderItem=${renderItem}\n scroller?=\"true\"\n @visibilityChanged=${({\n target,\n }: Event & { target: Table }) => {\n visibilityChangedSpy(target);\n }}\n >\n <sp-table-head>\n <sp-table-head-cell>Column Title</sp-table-head-cell>\n <sp-table-head-cell>Column Title</sp-table-head-cell>\n <sp-table-head-cell>Column Title</sp-table-head-cell>\n </sp-table-head>\n </sp-table>\n `);\n\n await tableLayoutComplete(el);\n\n expect(el.selected).to.deep.equal(['1', '47']);\n\n el.scrollToIndex(47);\n\n // waiting for table body\n await nextFrame();\n // waiting for virtualizer\n await nextFrame();\n await elementUpdated(el);\n\n expect(visibilityChangedSpy.called).to.be.true;\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|