@digital-realty/ix-grid 1.3.9 → 1.3.11
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/dist/IxGrid.d.ts +9 -0
- package/dist/IxGrid.js +61 -1
- package/dist/IxGrid.js.map +1 -1
- package/dist/components/IxGridRowFilter.d.ts +2 -0
- package/dist/components/IxGridRowFilter.js +37 -13
- package/dist/components/IxGridRowFilter.js.map +1 -1
- package/dist/components/grid-row-filter-styles.js +7 -1
- package/dist/components/grid-row-filter-styles.js.map +1 -1
- package/dist/ix-grid.min.js +4 -4
- package/dist/test/ix-grid-row-filter.test.js +21 -0
- package/dist/test/ix-grid-row-filter.test.js.map +1 -1
- package/dist/test/ix-grid.test.js +38 -1
- package/dist/test/ix-grid.test.js.map +1 -1
- package/package.json +4 -3
- package/src/IxGrid.ts +79 -1
- package/src/components/IxGridRowFilter.ts +36 -15
- package/src/components/grid-row-filter-styles.ts +7 -1
- package/src/test/ix-grid-row-filter.test.ts +30 -0
- package/src/test/ix-grid.test.ts +60 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ix-grid-row-filter.test.js","sourceRoot":"","sources":["../../src/test/ix-grid-row-filter.test.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable no-restricted-globals */\nimport { aTimeout, elementUpdated, expect, fixture } from '@open-wc/testing';\nimport { html } from 'lit';\nimport sinon from 'sinon';\nimport { Filter, IxGridRowFilter } from '../components/IxGridRowFilter.js';\n\nconst columns = [\n {\n name: 'firstName',\n header: 'First name',\n filterable: true,\n filterOperators: ['contains', 'equals'],\n },\n {\n name: 'lastName',\n header: 'Last name',\n filterable: true,\n filterOperators: ['contains', 'equals'],\n },\n {\n name: 'middleName',\n header: 'Middle name',\n filterable: false,\n filterOperators: ['contains', 'equals'],\n },\n {\n name: 'email',\n header: 'Email',\n filterable: true,\n filterOperators: ['contains', 'equals'],\n },\n];\n\nconst filters: Filter[] = [\n {\n columnField: 'firstName',\n operatorValue: 'contains',\n value: 'John',\n },\n];\n\ndescribe('IxGridRowFilter', () => {\n it('should render the grid row filter', async () => {\n const el = await fixture(\n html`<ix-grid-row-filter .columns=${columns}></ix-grid-row-filter>`\n );\n\n expect(el).to.be.instanceOf(IxGridRowFilter);\n });\n\n it('renders and popluates the grid row filter', async () => {\n const el = await fixture(\n html`<ix-grid-row-filter\n .columns=${columns}\n .filters=${filters}\n ></ix-grid-row-filter>`\n );\n\n const openMenu = el.shadowRoot?.querySelector(\n '.filter-button'\n ) as HTMLInputElement;\n\n openMenu.click();\n\n await elementUpdated(el);\n\n const columnOptions = el.shadowRoot?.querySelectorAll(\n 'select[data-v=\"firstName\"] option'\n );\n\n expect(columnOptions?.length).to.equal(3);\n\n const filterOperatorInput = el.shadowRoot?.querySelector(\n 'select.filterOperatorInput'\n ) as HTMLSelectElement;\n\n filterOperatorInput.value = 'equals';\n\n filterOperatorInput.dispatchEvent(\n new Event('change', {\n bubbles: true,\n cancelable: true,\n })\n );\n\n await elementUpdated(el);\n\n const selectedOperator = filterOperatorInput.querySelector(\n 'option[selected]'\n ) as HTMLOptionElement;\n\n expect(selectedOperator?.value).to.equal('equals');\n });\n\n it('should debounce the filter input', async () => {\n const debounceTime = 100;\n const el = await fixture(\n html`<ix-grid-row-filter\n .columns=${columns}\n .filters=${filters}\n .filterValueChangeDebounceTime=${debounceTime}\n ></ix-grid-row-filter>`\n );\n\n const openMenu = el.shadowRoot?.querySelector(\n '.filter-button'\n ) as HTMLInputElement;\n\n openMenu.click();\n\n await elementUpdated(el);\n\n const filterInput = el.shadowRoot?.querySelector(\n 'div.filterValueField input'\n ) as HTMLInputElement;\n\n const debouncedOnFilterValueChangeSpy = sinon.spy(\n el,\n <any>'debouncedOnFilterValueChange'\n );\n const onFilterValueChangeSpy = sinon.spy(el, <any>'onfilterValueChange');\n\n for (let i = 0; i < 5; i += 1) {\n filterInput.dispatchEvent(\n new InputEvent('input', {\n bubbles: true,\n cancelable: true,\n composed: true,\n })\n );\n }\n expect(debouncedOnFilterValueChangeSpy).to.have.been.called;\n expect(onFilterValueChangeSpy).to.not.have.been.called;\n\n await aTimeout(debounceTime);\n\n expect(onFilterValueChangeSpy).to.have.been.calledOnce;\n });\n\n describe('Filter type input', () => {\n it('should render a string input control for non-supplied data type', async () => {\n const columnsWithDataType = [\n {\n name: 'firstName',\n header: 'First name',\n filterable: true,\n },\n ];\n const el = await fixture(\n html`<ix-grid-row-filter\n .columns=${columnsWithDataType}\n ></ix-grid-row-filter>`\n );\n\n const openMenu = el.shadowRoot?.querySelector(\n '.filter-button'\n ) as HTMLElement;\n openMenu?.click();\n await elementUpdated(el);\n\n const filterInput = el.shadowRoot?.querySelector(\n 'div.filterValueField input'\n );\n expect(filterInput).to.exist;\n expect(filterInput).to.be.instanceOf(HTMLInputElement);\n });\n\n it('should render a string input control for string data type', async () => {\n const columnsWithDataType = [\n {\n name: 'firstName',\n header: 'First name',\n filterable: true,\n dataType: 'string',\n },\n ];\n const el = await fixture(\n html`<ix-grid-row-filter\n .columns=${columnsWithDataType}\n ></ix-grid-row-filter>`\n );\n\n const openMenu = el.shadowRoot?.querySelector(\n '.filter-button'\n ) as HTMLElement;\n openMenu?.click();\n await elementUpdated(el);\n\n const filterInput = el.shadowRoot?.querySelector(\n 'div.filterValueField input'\n );\n expect(filterInput).to.exist;\n expect(filterInput).to.be.instanceOf(HTMLInputElement);\n });\n\n it('should render a date input control for dateTime data type', async () => {\n const columnsWithDataType = [\n {\n name: 'createdDate',\n header: 'Created Date',\n filterable: true,\n dataType: 'dateTime',\n },\n ];\n const el = await fixture(\n html`<ix-grid-row-filter\n .columns=${columnsWithDataType}\n ></ix-grid-row-filter>`\n );\n\n const openMenu = el.shadowRoot?.querySelector(\n '.filter-button'\n ) as HTMLElement;\n openMenu?.click();\n await elementUpdated(el);\n\n const dateInput = el.shadowRoot?.querySelector(\n 'div.filterValueField ix-date'\n );\n expect(dateInput).to.exist;\n expect(dateInput).to.be.instanceOf(HTMLElement);\n });\n\n it('should render nothing when an unknown data type is used', async () => {\n const columnsWithDataType = [\n {\n name: 'unknownTypeField',\n header: 'Unknown Type',\n filterable: true,\n dataType: 'unknownType',\n },\n ];\n const el = await fixture(\n html`<ix-grid-row-filter\n .columns=${columnsWithDataType}\n ></ix-grid-row-filter>`\n );\n\n const openMenu = el.shadowRoot?.querySelector(\n '.filter-button'\n ) as HTMLElement;\n openMenu?.click();\n await elementUpdated(el);\n\n const inputField = el.shadowRoot?.querySelector(\n 'div.filterValueField input'\n );\n expect(inputField).to.be.null;\n });\n\n it('should build filter from URL when readParamsFromURL is True', async () => {\n const columnsWithDataType = [\n {\n name: 'firstName',\n header: 'First name',\n filterable: true,\n dataType: 'string',\n filterOperators: ['contains', 'equals'],\n },\n {\n name: 'lastName',\n header: 'Last Name',\n filterable: true,\n dataType: 'string',\n filterOperators: ['equals'],\n },\n {\n name: 'createdDate',\n header: 'Created Date',\n filterable: true,\n dataType: 'dateTime',\n filterOperators: ['equals'],\n },\n ];\n\n const el = (await fixture(\n html`<ix-grid-row-filter\n .columns=${columnsWithDataType}\n .readParamsFromURL=${true}\n ></ix-grid-row-filter>`\n )) as any;\n\n const url = 'firstName_contains=John&createdDate_equals=2021-09-01';\n\n history.pushState(null, '', `${location.pathname}?${url}`);\n el.firstUpdated();\n\n const openMenu = el.shadowRoot?.querySelector(\n '.filter-button'\n ) as HTMLElement;\n openMenu?.click();\n await elementUpdated(el);\n\n const formFilters = el.shadowRoot?.querySelectorAll('.filter-form');\n\n const filter1Name = formFilters[0]\n .querySelector('.filterColumnField')\n .querySelector('select')\n .attributes.getNamedItem('data-v')?.value;\n const filter1Operator = formFilters[0]\n .querySelector('.filterOperatorField')\n .querySelector('select')\n .attributes.getNamedItem('data-v')?.value;\n const filter1Value = formFilters[0]\n .querySelector('.filterValueField')\n .querySelector('input').value;\n\n const filter2Name = formFilters[1]\n .querySelector('.filterColumnField')\n .querySelector('select')\n .attributes.getNamedItem('data-v')?.value;\n const filter2Operator = formFilters[1]\n .querySelector('.filterOperatorField')\n .querySelector('select')\n .attributes.getNamedItem('data-v')?.value;\n const filter2Value = formFilters[1]\n .querySelector('.filterValueField')\n .querySelector('ix-date').value;\n\n expect(formFilters.length).to.be.eq(2);\n expect(filter1Name).to.be.eq('firstName');\n expect(filter1Operator).to.be.eq('contains');\n expect(filter1Value).to.be.eq('John');\n expect(filter2Name).to.be.eq('createdDate');\n expect(filter2Operator).to.be.eq('equals');\n expect(filter2Value).to.be.eq('2021-09-01');\n });\n\n it('should use maxDate for date inputs if provided', async () => {\n const columnsWithDataType = [\n {\n name: 'dateField',\n header: 'Date Field',\n filterable: true,\n filterOperators: ['='],\n dataType: 'dateTime',\n },\n ];\n const el = await fixture(\n html`<ix-grid-row-filter\n .columns=${columnsWithDataType}\n .maxDate=${'2025-12-31'}\n ></ix-grid-row-filter>`\n );\n\n const openMenu = el.shadowRoot?.querySelector(\n '.filter-button'\n ) as HTMLElement;\n openMenu?.click();\n await elementUpdated(el);\n\n const dateInput = el.shadowRoot?.querySelector(\n 'div.filterValueField ix-date'\n );\n expect(dateInput).to.exist;\n expect(dateInput?.getAttribute('max')).to.equal('2025-12-31');\n });\n\n it('should fallback to default maxDate if maxDate is not provided', async () => {\n const columnsWithDataType = [\n {\n name: 'dateField',\n header: 'Date Field',\n filterable: true,\n filterOperators: ['='],\n dataType: 'dateTime',\n },\n ];\n const el = await fixture(\n html`<ix-grid-row-filter\n .columns=${columnsWithDataType}\n ></ix-grid-row-filter>`\n );\n\n const openMenu = el.shadowRoot?.querySelector(\n '.filter-button'\n ) as HTMLElement;\n openMenu?.click();\n await elementUpdated(el);\n\n const dateInput = el.shadowRoot?.querySelector(\n 'div.filterValueField ix-date'\n );\n expect(dateInput).to.exist;\n const today = new Date().toISOString().split('T')[0];\n expect(dateInput?.getAttribute('max')).to.equal(today);\n });\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"ix-grid-row-filter.test.js","sourceRoot":"","sources":["../../src/test/ix-grid-row-filter.test.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable no-restricted-globals */\nimport { aTimeout, elementUpdated, expect, fixture } from '@open-wc/testing';\nimport { html } from 'lit';\nimport sinon from 'sinon';\nimport { Filter, IxGridRowFilter } from '../components/IxGridRowFilter.js';\n\nconst columns = [\n {\n name: 'firstName',\n header: 'First name',\n filterable: true,\n filterOperators: ['contains', 'equals'],\n },\n {\n name: 'lastName',\n header: 'Last name',\n filterable: true,\n filterOperators: ['contains', 'equals'],\n },\n {\n name: 'middleName',\n header: 'Middle name',\n filterable: false,\n filterOperators: ['contains', 'equals'],\n },\n {\n name: 'email',\n header: 'Email',\n filterable: true,\n filterOperators: ['contains', 'equals'],\n },\n];\n\nconst filters: Filter[] = [\n {\n columnField: 'firstName',\n operatorValue: 'contains',\n value: 'John',\n },\n];\n\ndescribe('IxGridRowFilter', () => {\n it('should render the grid row filter', async () => {\n const el = await fixture(\n html`<ix-grid-row-filter .columns=${columns}></ix-grid-row-filter>`\n );\n\n expect(el).to.be.instanceOf(IxGridRowFilter);\n });\n\n it('renders and popluates the grid row filter', async () => {\n const el = await fixture(\n html`<ix-grid-row-filter\n .columns=${columns}\n .filters=${filters}\n ></ix-grid-row-filter>`\n );\n\n const openMenu = el.shadowRoot?.querySelector(\n '.filter-button'\n ) as HTMLInputElement;\n\n openMenu.click();\n\n await elementUpdated(el);\n\n const columnOptions = el.shadowRoot?.querySelectorAll(\n 'select[data-v=\"firstName\"] option'\n );\n\n expect(columnOptions?.length).to.equal(3);\n\n const filterOperatorInput = el.shadowRoot?.querySelector(\n 'select.filterOperatorInput'\n ) as HTMLSelectElement;\n\n filterOperatorInput.value = 'equals';\n\n filterOperatorInput.dispatchEvent(\n new Event('change', {\n bubbles: true,\n cancelable: true,\n })\n );\n\n await elementUpdated(el);\n\n const selectedOperator = filterOperatorInput.querySelector(\n 'option[selected]'\n ) as HTMLOptionElement;\n\n expect(selectedOperator?.value).to.equal('equals');\n });\n\n it('should debounce the filter input', async () => {\n const debounceTime = 100;\n const el = await fixture(\n html`<ix-grid-row-filter\n .columns=${columns}\n .filters=${filters}\n .filterValueChangeDebounceTime=${debounceTime}\n ></ix-grid-row-filter>`\n );\n\n const openMenu = el.shadowRoot?.querySelector(\n '.filter-button'\n ) as HTMLInputElement;\n\n openMenu.click();\n\n await elementUpdated(el);\n\n const filterInput = el.shadowRoot?.querySelector(\n 'div.filterValueField input'\n ) as HTMLInputElement;\n\n const debouncedOnFilterValueChangeSpy = sinon.spy(\n el,\n <any>'debouncedOnFilterValueChange'\n );\n const onFilterValueChangeSpy = sinon.spy(el, <any>'onfilterValueChange');\n\n for (let i = 0; i < 5; i += 1) {\n filterInput.dispatchEvent(\n new InputEvent('input', {\n bubbles: true,\n cancelable: true,\n composed: true,\n })\n );\n }\n expect(debouncedOnFilterValueChangeSpy).to.have.been.called;\n expect(onFilterValueChangeSpy).to.not.have.been.called;\n\n await aTimeout(debounceTime);\n\n expect(onFilterValueChangeSpy).to.have.been.calledOnce;\n });\n\n describe('Filter type input', () => {\n it('should render a string input control for non-supplied data type', async () => {\n const columnsWithDataType = [\n {\n name: 'firstName',\n header: 'First name',\n filterable: true,\n },\n ];\n const el = await fixture(\n html`<ix-grid-row-filter\n .columns=${columnsWithDataType}\n ></ix-grid-row-filter>`\n );\n\n const openMenu = el.shadowRoot?.querySelector(\n '.filter-button'\n ) as HTMLElement;\n openMenu?.click();\n await elementUpdated(el);\n\n const filterInput = el.shadowRoot?.querySelector(\n 'div.filterValueField input'\n );\n expect(filterInput).to.exist;\n expect(filterInput).to.be.instanceOf(HTMLInputElement);\n });\n\n it('should render a string input control for string data type', async () => {\n const columnsWithDataType = [\n {\n name: 'firstName',\n header: 'First name',\n filterable: true,\n dataType: 'string',\n },\n ];\n const el = await fixture(\n html`<ix-grid-row-filter\n .columns=${columnsWithDataType}\n ></ix-grid-row-filter>`\n );\n\n const openMenu = el.shadowRoot?.querySelector(\n '.filter-button'\n ) as HTMLElement;\n openMenu?.click();\n await elementUpdated(el);\n\n const filterInput = el.shadowRoot?.querySelector(\n 'div.filterValueField input'\n );\n expect(filterInput).to.exist;\n expect(filterInput).to.be.instanceOf(HTMLInputElement);\n });\n\n it('should render a date input control for dateTime data type', async () => {\n const columnsWithDataType = [\n {\n name: 'createdDate',\n header: 'Created Date',\n filterable: true,\n dataType: 'dateTime',\n },\n ];\n const el = await fixture(\n html`<ix-grid-row-filter\n .columns=${columnsWithDataType}\n ></ix-grid-row-filter>`\n );\n\n const openMenu = el.shadowRoot?.querySelector(\n '.filter-button'\n ) as HTMLElement;\n openMenu?.click();\n await elementUpdated(el);\n\n const dateInput = el.shadowRoot?.querySelector(\n 'div.filterValueField ix-date'\n );\n expect(dateInput).to.exist;\n expect(dateInput).to.be.instanceOf(HTMLElement);\n });\n\n it('should render nothing when an unknown data type is used', async () => {\n const columnsWithDataType = [\n {\n name: 'unknownTypeField',\n header: 'Unknown Type',\n filterable: true,\n dataType: 'unknownType',\n },\n ];\n const el = await fixture(\n html`<ix-grid-row-filter\n .columns=${columnsWithDataType}\n ></ix-grid-row-filter>`\n );\n\n const openMenu = el.shadowRoot?.querySelector(\n '.filter-button'\n ) as HTMLElement;\n openMenu?.click();\n await elementUpdated(el);\n\n const inputField = el.shadowRoot?.querySelector(\n 'div.filterValueField input'\n );\n expect(inputField).to.be.null;\n });\n\n it('should build filter from URL when readParamsFromURL is True', async () => {\n const columnsWithDataType = [\n {\n name: 'firstName',\n header: 'First name',\n filterable: true,\n dataType: 'string',\n filterOperators: ['contains', 'equals'],\n },\n {\n name: 'lastName',\n header: 'Last Name',\n filterable: true,\n dataType: 'string',\n filterOperators: ['equals'],\n },\n {\n name: 'createdDate',\n header: 'Created Date',\n filterable: true,\n dataType: 'dateTime',\n filterOperators: ['equals'],\n },\n ];\n\n const el = (await fixture(\n html`<ix-grid-row-filter\n .columns=${columnsWithDataType}\n .readParamsFromURL=${true}\n ></ix-grid-row-filter>`\n )) as any;\n\n const url = 'firstName_contains=John&createdDate_equals=2021-09-01';\n\n history.pushState(null, '', `${location.pathname}?${url}`);\n el.firstUpdated();\n\n const openMenu = el.shadowRoot?.querySelector(\n '.filter-button'\n ) as HTMLElement;\n openMenu?.click();\n await elementUpdated(el);\n\n const formFilters = el.shadowRoot?.querySelectorAll('.filter-form');\n\n const filter1Name = formFilters[0]\n .querySelector('.filterColumnField')\n .querySelector('select')\n .attributes.getNamedItem('data-v')?.value;\n const filter1Operator = formFilters[0]\n .querySelector('.filterOperatorField')\n .querySelector('select')\n .attributes.getNamedItem('data-v')?.value;\n const filter1Value = formFilters[0]\n .querySelector('.filterValueField')\n .querySelector('input').value;\n\n const filter2Name = formFilters[1]\n .querySelector('.filterColumnField')\n .querySelector('select')\n .attributes.getNamedItem('data-v')?.value;\n const filter2Operator = formFilters[1]\n .querySelector('.filterOperatorField')\n .querySelector('select')\n .attributes.getNamedItem('data-v')?.value;\n const filter2Value = formFilters[1]\n .querySelector('.filterValueField')\n .querySelector('ix-date').value;\n\n expect(formFilters.length).to.be.eq(2);\n expect(filter1Name).to.be.eq('firstName');\n expect(filter1Operator).to.be.eq('contains');\n expect(filter1Value).to.be.eq('John');\n expect(filter2Name).to.be.eq('createdDate');\n expect(filter2Operator).to.be.eq('equals');\n expect(filter2Value).to.be.eq('2021-09-01');\n });\n\n it('should use maxDate for date inputs if provided', async () => {\n const columnsWithDataType = [\n {\n name: 'dateField',\n header: 'Date Field',\n filterable: true,\n filterOperators: ['='],\n dataType: 'dateTime',\n },\n ];\n const el = await fixture(\n html`<ix-grid-row-filter\n .columns=${columnsWithDataType}\n .maxDate=${'2025-12-31'}\n ></ix-grid-row-filter>`\n );\n\n const openMenu = el.shadowRoot?.querySelector(\n '.filter-button'\n ) as HTMLElement;\n openMenu?.click();\n await elementUpdated(el);\n\n const dateInput = el.shadowRoot?.querySelector(\n 'div.filterValueField ix-date'\n );\n expect(dateInput).to.exist;\n expect(dateInput?.getAttribute('max')).to.equal('2025-12-31');\n });\n\n it('should fallback to default maxDate if maxDate is not provided', async () => {\n const columnsWithDataType = [\n {\n name: 'dateField',\n header: 'Date Field',\n filterable: true,\n filterOperators: ['='],\n dataType: 'dateTime',\n },\n ];\n const el = await fixture(\n html`<ix-grid-row-filter\n .columns=${columnsWithDataType}\n ></ix-grid-row-filter>`\n );\n\n const openMenu = el.shadowRoot?.querySelector(\n '.filter-button'\n ) as HTMLElement;\n openMenu?.click();\n await elementUpdated(el);\n\n const dateInput = el.shadowRoot?.querySelector(\n 'div.filterValueField ix-date'\n );\n expect(dateInput).to.exist;\n const today = new Date().toISOString().split('T')[0];\n expect(dateInput?.getAttribute('max')).to.equal(today);\n });\n\n it('should render ix-date-next if \"useNewDatePicker\" is true', async () => {\n const columnsWithDataType = [\n {\n name: 'dateField',\n header: 'Date Field',\n filterable: true,\n filterOperators: ['='],\n dataType: 'dateTime',\n },\n ];\n\n const el = await fixture(\n html`<ix-grid-row-filter\n .columns=${columnsWithDataType}\n .useNewDatePicker=${true}\n ></ix-grid-row-filter>`\n );\n\n const openMenu = el.shadowRoot?.querySelector(\n '.filter-button'\n ) as HTMLElement;\n openMenu?.click();\n await elementUpdated(el);\n\n const dateInput = el.shadowRoot?.querySelector(\n 'div.filterValueField ix-date-next'\n );\n expect(dateInput).to.exist;\n });\n });\n});\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* eslint-disable no-restricted-globals */
|
|
2
|
-
import { expect, fixture, oneEvent } from '@open-wc/testing';
|
|
2
|
+
import { elementUpdated, expect, fixture, oneEvent } from '@open-wc/testing';
|
|
3
3
|
import { html } from 'lit';
|
|
4
4
|
import { IxGridRowFilter } from '../components/IxGridRowFilter.js';
|
|
5
5
|
import '../ix-grid-no-rows.js';
|
|
@@ -38,7 +38,11 @@ const columns = [
|
|
|
38
38
|
filterOperators: ['equals', 'contains'],
|
|
39
39
|
},
|
|
40
40
|
];
|
|
41
|
+
const sessionStorageKey = 'test-session-key';
|
|
41
42
|
describe('IxGrid', () => {
|
|
43
|
+
beforeEach(() => {
|
|
44
|
+
sessionStorage.clear();
|
|
45
|
+
});
|
|
42
46
|
it('renders a grid', async () => {
|
|
43
47
|
const el = await fixture(html `<ix-grid></ix-grid>`);
|
|
44
48
|
expect(el).to.not.be.null;
|
|
@@ -75,6 +79,7 @@ describe('IxGrid', () => {
|
|
|
75
79
|
it('resets pagination upon filter change', async () => {
|
|
76
80
|
var _a, _b;
|
|
77
81
|
const el = await fixture(html `<ix-grid
|
|
82
|
+
session-storage-key=${sessionStorageKey}
|
|
78
83
|
.columns=${columns}
|
|
79
84
|
.rows=${rows}
|
|
80
85
|
></ix-grid>`);
|
|
@@ -103,7 +108,9 @@ describe('IxGrid', () => {
|
|
|
103
108
|
.columns=${columns}
|
|
104
109
|
.rows=${rows}
|
|
105
110
|
.readParamsFromURL=${true}
|
|
111
|
+
session-storage-key=${sessionStorageKey}
|
|
106
112
|
></ix-grid>`);
|
|
113
|
+
sessionStorage.removeItem(`urlPageSizeRead`);
|
|
107
114
|
const url = '?sort=lastName&order=asc&page=2&size=5';
|
|
108
115
|
history.pushState(null, '', `${location.pathname}${url}`);
|
|
109
116
|
el.firstUpdated();
|
|
@@ -112,6 +119,34 @@ describe('IxGrid', () => {
|
|
|
112
119
|
expect(el.sortedColumn).to.be.eq('lastName');
|
|
113
120
|
expect(el.sortDirection).to.be.eq('asc');
|
|
114
121
|
});
|
|
122
|
+
it('sessionStorage sets the URL', async () => {
|
|
123
|
+
sessionStorage.setItem(`grid-${sessionStorageKey}`, JSON.stringify({
|
|
124
|
+
pageSize: 25,
|
|
125
|
+
}));
|
|
126
|
+
const el = await fixture(html `<ix-grid
|
|
127
|
+
.columns=${columns}
|
|
128
|
+
.rows=${rows}
|
|
129
|
+
session-storage-key=${sessionStorageKey}
|
|
130
|
+
></ix-grid>`);
|
|
131
|
+
await elementUpdated(el);
|
|
132
|
+
expect(location.href).to.contain('size=25');
|
|
133
|
+
});
|
|
134
|
+
it('page and page size from URL sets sessionStorage', async () => {
|
|
135
|
+
sessionStorage.setItem(`grid-${sessionStorageKey}`, JSON.stringify({
|
|
136
|
+
pageSize: 10,
|
|
137
|
+
}));
|
|
138
|
+
const el = await fixture(html `<ix-grid
|
|
139
|
+
.columns=${columns}
|
|
140
|
+
.rows=${rows}
|
|
141
|
+
.readParamsFromURL=${true}
|
|
142
|
+
session-storage-key=${sessionStorageKey}
|
|
143
|
+
></ix-grid>`);
|
|
144
|
+
const url = '?sort=lastName&order=asc&page=2&size=25';
|
|
145
|
+
history.pushState(null, '', `${location.pathname}${url}`);
|
|
146
|
+
await elementUpdated(el);
|
|
147
|
+
const sessionData = JSON.parse(sessionStorage.getItem(`grid-${sessionStorageKey}`) || '{}');
|
|
148
|
+
expect(sessionData.pageSize).to.be.eq(25);
|
|
149
|
+
});
|
|
115
150
|
it('should set sort, order, page, page size and filters in the URL when addParamsToURL is set to true', async () => {
|
|
116
151
|
var _a, _b;
|
|
117
152
|
const columnsWithFilters = [
|
|
@@ -142,6 +177,7 @@ describe('IxGrid', () => {
|
|
|
142
177
|
const el = await fixture(html `<ix-grid
|
|
143
178
|
.columns=${columnsWithFilters}
|
|
144
179
|
.addParamsToURL=${true}
|
|
180
|
+
session-storage-key=${sessionStorageKey}
|
|
145
181
|
></ix-grid>`);
|
|
146
182
|
const rowFilter = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('ix-grid-row-filter');
|
|
147
183
|
rowFilter.dispatchEvent(new CustomEvent('rowFilter', {
|
|
@@ -193,6 +229,7 @@ describe('IxGrid', () => {
|
|
|
193
229
|
.rows=${[]}
|
|
194
230
|
.addParamsToURL=${true}
|
|
195
231
|
.preservedQueryParamKeys=${['userId', 'token']}
|
|
232
|
+
session-storage-key=${sessionStorageKey}
|
|
196
233
|
></ix-grid>
|
|
197
234
|
`);
|
|
198
235
|
await el.updateComplete;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ix-grid.test.js","sourceRoot":"","sources":["../../src/test/ix-grid.test.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable no-restricted-globals */\nimport { expect, fixture, oneEvent } from '@open-wc/testing';\nimport { html } from 'lit';\nimport { IxGrid } from '../IxGrid.js';\nimport { IxGridRowFilter } from '../components/IxGridRowFilter.js';\nimport '../ix-grid-no-rows.js';\nimport '../ix-grid.js';\n\nconst rows = [\n {\n name: 'one',\n },\n {\n name: 'two',\n },\n {\n name: 'three',\n },\n];\n\nconst columns = [\n {\n name: 'one',\n header: 'one',\n bodyRenderer: row => html` <span>${row.name}</span>`,\n filterable: true,\n filterOperators: ['equals'],\n },\n {\n name: 'two',\n header: 'one',\n bodyRenderer: row => html` <span>${row.name}</span>`,\n filterable: true,\n filterOperators: ['equals', 'contains'],\n },\n {\n name: 'three',\n header: 'one',\n bodyRenderer: row => html` <span>${row.name}</span>`,\n filterable: true,\n filterOperators: ['equals', 'contains'],\n },\n];\n\ndescribe('IxGrid', () => {\n it('renders a grid', async () => {\n const el = await fixture<IxGrid>(html`<ix-grid></ix-grid>`);\n\n expect(el).to.not.be.null;\n });\n\n it('renders the correct number of rows', async () => {\n const el = await fixture<IxGrid>(html`<ix-grid\n .columns=${columns}\n .rows=${rows}\n ></ix-grid>`);\n\n expect(rows.length).to.equal(3);\n\n expect(el).to.not.be.null;\n });\n\n it('renders no rows component state', async () => {\n const el = await fixture<IxGrid>(html`<ix-grid\n .columns=${columns}\n .rows=${[]}\n ><ix-grid-no-rows slot=\"no-rows\"></ix-grid-no-rows\n ></ix-grid>`);\n\n const noRows = el.shadowRoot?.querySelector('slot[name=\"no-rows\"]');\n expect(noRows).to.not.be.null;\n });\n\n it('renders an ix-grid-row-filter', async () => {\n const el = await fixture<IxGrid>(html`<ix-grid\n .columns=${columns}\n .rows=${rows}\n .filterValueChangeDebounceTime=${1000}\n ></ix-grid>`);\n\n const rowFilter = el.shadowRoot?.querySelector('ix-grid-row-filter');\n expect(rowFilter).to.be.instanceOf(IxGridRowFilter);\n expect((<IxGridRowFilter>rowFilter).filterValueChangeDebounceTime).to.equal(\n 1000\n );\n });\n\n it('resets pagination upon filter change', async () => {\n const el = await fixture<IxGrid>(html`<ix-grid\n .columns=${columns}\n .rows=${rows}\n ></ix-grid>`);\n\n const pagination = el.shadowRoot?.querySelector('ix-pagination');\n pagination!.dispatchEvent(\n new CustomEvent('updatePagination', {\n detail: {\n page: 2,\n pageSize: 10,\n },\n bubbles: true,\n composed: true,\n })\n );\n expect(el.page).to.equal(2);\n\n const rowFilter = el.shadowRoot?.querySelector('ix-grid-row-filter');\n rowFilter!.dispatchEvent(\n new CustomEvent('rowFilter', {\n detail: {\n resetPage: true,\n },\n bubbles: true,\n composed: true,\n })\n );\n expect(el.page).to.equal(1);\n });\n\n it('should read and set sort, order, page and page size from URL if readParamsFromURL is set to true', async () => {\n const el = await fixture<IxGrid>(html`<ix-grid\n .columns=${columns}\n .rows=${rows}\n .readParamsFromURL=${true}\n ></ix-grid>`);\n\n const url = '?sort=lastName&order=asc&page=2&size=5';\n\n history.pushState(null, '', `${location.pathname}${url}`);\n el.firstUpdated();\n\n expect(el.page).to.be.eq(2);\n expect(el.pageSize).to.be.eq(5);\n expect(el.sortedColumn).to.be.eq('lastName');\n expect(el.sortDirection).to.be.eq('asc');\n });\n\n it('should set sort, order, page, page size and filters in the URL when addParamsToURL is set to true', async () => {\n const columnsWithFilters = [\n {\n name: 'firstName',\n header: 'First name',\n filterable: true,\n dataType: 'string',\n filterOperators: ['contains', 'equals'],\n },\n {\n name: 'lastName',\n header: 'Last Name',\n filterable: true,\n dataType: 'string',\n filterOperators: ['equals'],\n },\n {\n name: 'createdDate',\n header: 'Created Date',\n filterable: true,\n dataType: 'dateTime',\n filterOperators: ['equals'],\n },\n ];\n\n const existingSearchParams = '?realUsername=Earl&userAge=30';\n history.pushState(null, '', `${location.pathname}${existingSearchParams}`);\n\n const el = await fixture<IxGrid>(html`<ix-grid\n .columns=${columnsWithFilters}\n .addParamsToURL=${true}\n ></ix-grid>`);\n\n const rowFilter = el.shadowRoot?.querySelector('ix-grid-row-filter');\n rowFilter!.dispatchEvent(\n new CustomEvent('rowFilter', {\n detail: {\n filters: [\n {\n columnField: 'firstName',\n operatorValue: 'contains',\n value: 'test',\n },\n {\n columnField: 'createdDate',\n operatorValue: 'equals',\n value: '2024-10-10',\n },\n ],\n },\n bubbles: true,\n composed: true,\n })\n );\n\n el.sortedColumn = 'firstName';\n el.sortDirection = 'desc';\n\n const pagination = el.shadowRoot?.querySelector('ix-pagination');\n pagination!.dispatchEvent(\n new CustomEvent('updatePagination', {\n detail: {\n page: 3,\n pageSize: 5,\n },\n bubbles: true,\n composed: true,\n })\n );\n\n expect(location.search).to.be.eq(\n `${existingSearchParams}&sort=firstName&order=desc&page=3&size=5&firstName_contains=test&createdDate_equals=2024-10-10`\n );\n });\n\n describe('IxGrid updateSort', () => {\n it('should update URL with sort, order, page, pageSize, filters', async () => {\n history.replaceState(null, '', '/?userId=123&token=abc');\n\n const updateSortColumns = [\n {\n name: 'name',\n header: 'Name',\n filterable: true,\n filterOperators: ['contains'],\n sortable: true,\n },\n ];\n\n const el = await fixture<IxGrid>(html`\n <ix-grid\n .columns=${updateSortColumns}\n .rows=${[]}\n .addParamsToURL=${true}\n .preservedQueryParamKeys=${['userId', 'token']}\n ></ix-grid>\n `);\n\n await el.updateComplete;\n await el.handleSort('name');\n\n const url = new URL(window.location.href);\n const { searchParams } = url;\n\n expect(searchParams.get('sort')).to.equal('name');\n expect(searchParams.get('order')).to.equal('asc');\n expect(searchParams.get('page')).to.equal('1');\n expect(searchParams.get('size')).to.equal('10');\n expect(searchParams.get('userId')).to.equal('123');\n expect(searchParams.get('token')).to.equal('abc');\n });\n });\n\n describe('IxGrid LocalStorage Persistence', () => {\n beforeEach(() => {\n localStorage.clear();\n });\n\n it('should reset localStorage value if columns length does not match', async () => {\n const tempEl = await fixture<IxGrid>(\n html`<ix-grid .columns=${columns} localStorageID=\"testGrid\"></ix-grid>`\n );\n const localStorageKey = tempEl.columnsLocalStorageKey;\n\n // Simulating a user fully deleting and adding a fake column to their local storage\n localStorage.setItem(\n localStorageKey,\n JSON.stringify([{ name: 'six', header: 'six' }])\n );\n\n const el = await fixture<IxGrid>(\n html`<ix-grid .columns=${columns} localStorageID=\"testGrid\"></ix-grid>`\n );\n await el.updateComplete;\n\n const storedColumns = JSON.parse(\n localStorage.getItem(el.columnsLocalStorageKey) || '[]'\n );\n expect(storedColumns.length).to.equal(columns.length);\n expect(storedColumns.map(c => c.name)).to.deep.equal(\n columns.map(c => c.name)\n );\n });\n\n it('should reset localStorage value if it contains a column that does not exist in the provided columns', async () => {\n const tempEl = await fixture<IxGrid>(\n html`<ix-grid .columns=${columns} localStorageID=\"testGrid\"></ix-grid>`\n );\n const localStorageKey = tempEl.columnsLocalStorageKey;\n\n // Simulating a user adding an additional column to local storage\n localStorage.setItem(\n localStorageKey,\n JSON.stringify([\n ...columns,\n { name: 'nonexistent', header: 'Nonexistent' },\n ])\n );\n\n const el = await fixture<IxGrid>(\n html`<ix-grid .columns=${columns} localStorageID=\"testGrid\"></ix-grid>`\n );\n await el.updateComplete;\n\n const storedColumns = JSON.parse(\n localStorage.getItem(el.columnsLocalStorageKey) || '[]'\n );\n expect(storedColumns.length).to.equal(columns.length);\n expect(storedColumns.map(c => c.name)).to.deep.equal(\n columns.map(c => c.name)\n );\n });\n\n it('should delete localStorage if a provided column does not exist in localStorage and not create new local storage', async () => {\n const initialColumns = columns.slice(0, -1);\n\n const tempEl = await fixture<IxGrid>(\n html`<ix-grid\n .columns=${initialColumns}\n localStorageID=\"testGrid\"\n ></ix-grid>`\n );\n const localStorageKey = tempEl.columnsLocalStorageKey;\n\n // Simulating a user deleting most columns from local storage\n localStorage.setItem(localStorageKey, JSON.stringify(initialColumns));\n\n const el = await fixture<IxGrid>(\n html`<ix-grid .columns=${columns} localStorageID=\"testGrid\"></ix-grid>`\n );\n await el.updateComplete;\n\n expect(localStorage.getItem(el.columnsLocalStorageKey)).to.equal(null);\n });\n\n it('should reorder columns based on table header flex order', async () => {\n const el = await fixture<IxGrid>(\n html`<ix-grid\n .columns=${columns}\n .rows=${rows}\n localStorageID=\"testGrid\"\n ></ix-grid>`\n );\n await el.updateComplete;\n\n const headerCells = el.grid.shadowRoot?.querySelectorAll('th');\n if (!headerCells || headerCells.length !== columns.length) {\n throw new Error(\n 'Table headers not found or do not match expected count'\n );\n }\n\n const orderMap = [2, 0, 1];\n headerCells.forEach((th, index) => {\n const thElement = th as HTMLElement;\n thElement.style.order = orderMap[index].toString();\n });\n\n await el.updateComplete;\n await el.reorderColumnsFromTable();\n\n const reorderedColumns = [columns[1], columns[2], columns[0]];\n const storedColumns = JSON.parse(\n localStorage.getItem(el.columnsLocalStorageKey) || '[]'\n );\n\n expect(storedColumns.map(c => c.name)).to.deep.equal(\n reorderedColumns.map(c => c.name)\n );\n });\n\n it('should reorder columns when a filter reorder event is triggered', async () => {\n const el = await fixture<IxGrid>(\n html`<ix-grid .columns=${columns} localStorageID=\"testGrid\"></ix-grid>`\n );\n await el.updateComplete;\n\n const reorderedColumns = [columns[2], columns[0], columns[1]];\n const event = new CustomEvent('columnFilter', {\n detail: { reorderedColumns },\n bubbles: true,\n composed: true,\n });\n\n el.reorderColumnsFromFilter(event);\n await el.updateComplete;\n\n const storedColumns = JSON.parse(\n localStorage.getItem(el.columnsLocalStorageKey) || '[]'\n );\n expect(el.displayColumns.map(c => c.name)).to.deep.equal(\n reorderedColumns.map(c => c.name)\n );\n expect(storedColumns.map(c => c.name)).to.deep.equal(\n reorderedColumns.map(c => c.name)\n );\n });\n });\n\n describe('IxGrid handlePopState', () => {\n const handlePopStateColumns = [\n {\n name: 'customcolumnfilter',\n header: 'Custom',\n filterable: true,\n filterOperators: ['contains'],\n },\n {\n name: 'id',\n header: 'ID',\n filterable: true,\n filterOperators: ['equals'],\n },\n ];\n\n it('should handle empty sort/order/page/size in URL', async () => {\n history.replaceState(null, '', '/?sort=&order=&page=&size=');\n\n const el = await fixture<IxGrid>(html`\n <ix-grid\n .columns=${handlePopStateColumns}\n .rows=${[]}\n .readParamsFromURL=${true}\n ></ix-grid>\n `);\n await el.updateComplete;\n\n const changeEventPromise = oneEvent(el, 'change');\n window.dispatchEvent(new PopStateEvent('popstate'));\n const event = await changeEventPromise;\n\n expect(el.sortedColumn).to.equal('');\n expect(el.sortDirection).to.equal('');\n expect(el.page).to.equal(1);\n expect(el.pageSize).to.equal(10);\n\n expect(event.detail.filters).to.deep.equal({});\n });\n\n it('should handle valid sort/order/page/size in URL', async () => {\n history.replaceState(null, '', '/?sort=id&order=desc&page=1&size=20');\n\n const el = await fixture<IxGrid>(html`\n <ix-grid\n .columns=${handlePopStateColumns}\n .rows=${[]}\n .readParamsFromURL=${true}\n ></ix-grid>\n `);\n await el.updateComplete;\n\n const changeEventPromise = oneEvent(el, 'change');\n window.dispatchEvent(new PopStateEvent('popstate'));\n const event = await changeEventPromise;\n\n expect(el.sortedColumn).to.equal('id');\n expect(el.sortDirection).to.equal('desc');\n expect(el.page).to.equal(1);\n expect(el.pageSize).to.equal(20);\n\n expect(event.detail.filters).to.deep.equal({});\n });\n\n it('should update filters from URL with custom filter', async () => {\n history.replaceState(null, '', '/?customcolumnfilter_contains=foobar');\n\n const el = await fixture<IxGrid>(html`\n <ix-grid\n .columns=${handlePopStateColumns}\n .rows=${[]}\n .readParamsFromURL=${true}\n ></ix-grid>\n `);\n await el.updateComplete;\n\n const changeEventPromise = oneEvent(el, 'change');\n window.dispatchEvent(new PopStateEvent('popstate'));\n const event = await changeEventPromise;\n\n expect(event.detail.filters).to.deep.equal({\n customcolumnfilter: 'foobar',\n });\n });\n\n it('should dispatch a change event with correct detail', async () => {\n history.replaceState(\n null,\n '',\n '/?sort=id&order=desc&page=1&size=20&customcolumnfilter_contains=foobar'\n );\n\n const el = await fixture<IxGrid>(html`\n <ix-grid\n .columns=${handlePopStateColumns}\n .rows=${[]}\n .readParamsFromURL=${true}\n ></ix-grid>\n `);\n await el.updateComplete;\n\n const changeEventPromise = oneEvent(el, 'change');\n window.dispatchEvent(new PopStateEvent('popstate'));\n const event = await changeEventPromise;\n\n expect(event.detail).to.include({\n columnName: 'id',\n sortOrder: 'desc',\n page: 1,\n pageSize: 20,\n });\n\n expect(event.detail.filters).to.deep.equal({\n customcolumnfilter: 'foobar',\n });\n\n expect(event.detail.filtersOperators).to.deep.equal([\n {\n columnField: 'customcolumnfilter',\n operator: 'contains',\n },\n ]);\n });\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"ix-grid.test.js","sourceRoot":"","sources":["../../src/test/ix-grid.test.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable no-restricted-globals */\nimport { elementUpdated, expect, fixture, oneEvent } from '@open-wc/testing';\nimport { html } from 'lit';\n\nimport { IxGrid } from '../IxGrid.js';\nimport { IxGridRowFilter } from '../components/IxGridRowFilter.js';\nimport '../ix-grid-no-rows.js';\nimport '../ix-grid.js';\n\nconst rows = [\n {\n name: 'one',\n },\n {\n name: 'two',\n },\n {\n name: 'three',\n },\n];\n\nconst columns = [\n {\n name: 'one',\n header: 'one',\n bodyRenderer: row => html` <span>${row.name}</span>`,\n filterable: true,\n filterOperators: ['equals'],\n },\n {\n name: 'two',\n header: 'one',\n bodyRenderer: row => html` <span>${row.name}</span>`,\n filterable: true,\n filterOperators: ['equals', 'contains'],\n },\n {\n name: 'three',\n header: 'one',\n bodyRenderer: row => html` <span>${row.name}</span>`,\n filterable: true,\n filterOperators: ['equals', 'contains'],\n },\n];\n\nconst sessionStorageKey = 'test-session-key';\n\ndescribe('IxGrid', () => {\n beforeEach(() => {\n sessionStorage.clear();\n });\n\n it('renders a grid', async () => {\n const el = await fixture<IxGrid>(html`<ix-grid></ix-grid>`);\n\n expect(el).to.not.be.null;\n });\n\n it('renders the correct number of rows', async () => {\n const el = await fixture<IxGrid>(html`<ix-grid\n .columns=${columns}\n .rows=${rows}\n ></ix-grid>`);\n\n expect(rows.length).to.equal(3);\n\n expect(el).to.not.be.null;\n });\n\n it('renders no rows component state', async () => {\n const el = await fixture<IxGrid>(html`<ix-grid\n .columns=${columns}\n .rows=${[]}\n ><ix-grid-no-rows slot=\"no-rows\"></ix-grid-no-rows\n ></ix-grid>`);\n\n const noRows = el.shadowRoot?.querySelector('slot[name=\"no-rows\"]');\n expect(noRows).to.not.be.null;\n });\n\n it('renders an ix-grid-row-filter', async () => {\n const el = await fixture<IxGrid>(html`<ix-grid\n .columns=${columns}\n .rows=${rows}\n .filterValueChangeDebounceTime=${1000}\n ></ix-grid>`);\n\n const rowFilter = el.shadowRoot?.querySelector('ix-grid-row-filter');\n expect(rowFilter).to.be.instanceOf(IxGridRowFilter);\n expect((<IxGridRowFilter>rowFilter).filterValueChangeDebounceTime).to.equal(\n 1000\n );\n });\n\n it('resets pagination upon filter change', async () => {\n const el = await fixture<IxGrid>(html`<ix-grid\n session-storage-key=${sessionStorageKey}\n .columns=${columns}\n .rows=${rows}\n ></ix-grid>`);\n\n const pagination = el.shadowRoot?.querySelector('ix-pagination');\n pagination!.dispatchEvent(\n new CustomEvent('updatePagination', {\n detail: {\n page: 2,\n pageSize: 10,\n },\n bubbles: true,\n composed: true,\n })\n );\n expect(el.page).to.equal(2);\n\n const rowFilter = el.shadowRoot?.querySelector('ix-grid-row-filter');\n rowFilter!.dispatchEvent(\n new CustomEvent('rowFilter', {\n detail: {\n resetPage: true,\n },\n bubbles: true,\n composed: true,\n })\n );\n expect(el.page).to.equal(1);\n });\n\n it('should read and set sort, order, page and page size from URL if readParamsFromURL is set to true', async () => {\n const el = await fixture<IxGrid>(html`<ix-grid\n .columns=${columns}\n .rows=${rows}\n .readParamsFromURL=${true}\n session-storage-key=${sessionStorageKey}\n ></ix-grid>`);\n\n sessionStorage.removeItem(`urlPageSizeRead`);\n\n const url = '?sort=lastName&order=asc&page=2&size=5';\n\n history.pushState(null, '', `${location.pathname}${url}`);\n el.firstUpdated();\n\n expect(el.page).to.be.eq(2);\n expect(el.pageSize).to.be.eq(5);\n expect(el.sortedColumn).to.be.eq('lastName');\n expect(el.sortDirection).to.be.eq('asc');\n });\n\n it('sessionStorage sets the URL', async () => {\n sessionStorage.setItem(\n `grid-${sessionStorageKey}`,\n JSON.stringify({\n pageSize: 25,\n })\n );\n\n const el = await fixture<IxGrid>(html`<ix-grid\n .columns=${columns}\n .rows=${rows}\n session-storage-key=${sessionStorageKey}\n ></ix-grid>`);\n\n await elementUpdated(el);\n\n expect(location.href).to.contain('size=25');\n });\n\n it('page and page size from URL sets sessionStorage', async () => {\n sessionStorage.setItem(\n `grid-${sessionStorageKey}`,\n JSON.stringify({\n pageSize: 10,\n })\n );\n\n const el = await fixture<IxGrid>(html`<ix-grid\n .columns=${columns}\n .rows=${rows}\n .readParamsFromURL=${true}\n session-storage-key=${sessionStorageKey}\n ></ix-grid>`);\n\n const url = '?sort=lastName&order=asc&page=2&size=25';\n\n history.pushState(null, '', `${location.pathname}${url}`);\n await elementUpdated(el);\n\n const sessionData = JSON.parse(\n sessionStorage.getItem(`grid-${sessionStorageKey}`) || '{}'\n );\n\n expect(sessionData.pageSize).to.be.eq(25);\n });\n\n it('should set sort, order, page, page size and filters in the URL when addParamsToURL is set to true', async () => {\n const columnsWithFilters = [\n {\n name: 'firstName',\n header: 'First name',\n filterable: true,\n dataType: 'string',\n filterOperators: ['contains', 'equals'],\n },\n {\n name: 'lastName',\n header: 'Last Name',\n filterable: true,\n dataType: 'string',\n filterOperators: ['equals'],\n },\n {\n name: 'createdDate',\n header: 'Created Date',\n filterable: true,\n dataType: 'dateTime',\n filterOperators: ['equals'],\n },\n ];\n\n const existingSearchParams = '?realUsername=Earl&userAge=30';\n history.pushState(null, '', `${location.pathname}${existingSearchParams}`);\n\n const el = await fixture<IxGrid>(html`<ix-grid\n .columns=${columnsWithFilters}\n .addParamsToURL=${true}\n session-storage-key=${sessionStorageKey}\n ></ix-grid>`);\n\n const rowFilter = el.shadowRoot?.querySelector('ix-grid-row-filter');\n rowFilter!.dispatchEvent(\n new CustomEvent('rowFilter', {\n detail: {\n filters: [\n {\n columnField: 'firstName',\n operatorValue: 'contains',\n value: 'test',\n },\n {\n columnField: 'createdDate',\n operatorValue: 'equals',\n value: '2024-10-10',\n },\n ],\n },\n bubbles: true,\n composed: true,\n })\n );\n\n el.sortedColumn = 'firstName';\n el.sortDirection = 'desc';\n\n const pagination = el.shadowRoot?.querySelector('ix-pagination');\n pagination!.dispatchEvent(\n new CustomEvent('updatePagination', {\n detail: {\n page: 3,\n pageSize: 5,\n },\n bubbles: true,\n composed: true,\n })\n );\n\n expect(location.search).to.be.eq(\n `${existingSearchParams}&sort=firstName&order=desc&page=3&size=5&firstName_contains=test&createdDate_equals=2024-10-10`\n );\n });\n\n describe('IxGrid updateSort', () => {\n it('should update URL with sort, order, page, pageSize, filters', async () => {\n history.replaceState(null, '', '/?userId=123&token=abc');\n\n const updateSortColumns = [\n {\n name: 'name',\n header: 'Name',\n filterable: true,\n filterOperators: ['contains'],\n sortable: true,\n },\n ];\n\n const el = await fixture<IxGrid>(html`\n <ix-grid\n .columns=${updateSortColumns}\n .rows=${[]}\n .addParamsToURL=${true}\n .preservedQueryParamKeys=${['userId', 'token']}\n session-storage-key=${sessionStorageKey}\n ></ix-grid>\n `);\n\n await el.updateComplete;\n await el.handleSort('name');\n\n const url = new URL(window.location.href);\n const { searchParams } = url;\n\n expect(searchParams.get('sort')).to.equal('name');\n expect(searchParams.get('order')).to.equal('asc');\n expect(searchParams.get('page')).to.equal('1');\n expect(searchParams.get('size')).to.equal('10');\n expect(searchParams.get('userId')).to.equal('123');\n expect(searchParams.get('token')).to.equal('abc');\n });\n });\n\n describe('IxGrid LocalStorage Persistence', () => {\n beforeEach(() => {\n localStorage.clear();\n });\n\n it('should reset localStorage value if columns length does not match', async () => {\n const tempEl = await fixture<IxGrid>(\n html`<ix-grid .columns=${columns} localStorageID=\"testGrid\"></ix-grid>`\n );\n const localStorageKey = tempEl.columnsLocalStorageKey;\n\n // Simulating a user fully deleting and adding a fake column to their local storage\n localStorage.setItem(\n localStorageKey,\n JSON.stringify([{ name: 'six', header: 'six' }])\n );\n\n const el = await fixture<IxGrid>(\n html`<ix-grid .columns=${columns} localStorageID=\"testGrid\"></ix-grid>`\n );\n await el.updateComplete;\n\n const storedColumns = JSON.parse(\n localStorage.getItem(el.columnsLocalStorageKey) || '[]'\n );\n expect(storedColumns.length).to.equal(columns.length);\n expect(storedColumns.map(c => c.name)).to.deep.equal(\n columns.map(c => c.name)\n );\n });\n\n it('should reset localStorage value if it contains a column that does not exist in the provided columns', async () => {\n const tempEl = await fixture<IxGrid>(\n html`<ix-grid .columns=${columns} localStorageID=\"testGrid\"></ix-grid>`\n );\n const localStorageKey = tempEl.columnsLocalStorageKey;\n\n // Simulating a user adding an additional column to local storage\n localStorage.setItem(\n localStorageKey,\n JSON.stringify([\n ...columns,\n { name: 'nonexistent', header: 'Nonexistent' },\n ])\n );\n\n const el = await fixture<IxGrid>(\n html`<ix-grid .columns=${columns} localStorageID=\"testGrid\"></ix-grid>`\n );\n await el.updateComplete;\n\n const storedColumns = JSON.parse(\n localStorage.getItem(el.columnsLocalStorageKey) || '[]'\n );\n expect(storedColumns.length).to.equal(columns.length);\n expect(storedColumns.map(c => c.name)).to.deep.equal(\n columns.map(c => c.name)\n );\n });\n\n it('should delete localStorage if a provided column does not exist in localStorage and not create new local storage', async () => {\n const initialColumns = columns.slice(0, -1);\n\n const tempEl = await fixture<IxGrid>(\n html`<ix-grid\n .columns=${initialColumns}\n localStorageID=\"testGrid\"\n ></ix-grid>`\n );\n const localStorageKey = tempEl.columnsLocalStorageKey;\n\n // Simulating a user deleting most columns from local storage\n localStorage.setItem(localStorageKey, JSON.stringify(initialColumns));\n\n const el = await fixture<IxGrid>(\n html`<ix-grid .columns=${columns} localStorageID=\"testGrid\"></ix-grid>`\n );\n await el.updateComplete;\n\n expect(localStorage.getItem(el.columnsLocalStorageKey)).to.equal(null);\n });\n\n it('should reorder columns based on table header flex order', async () => {\n const el = await fixture<IxGrid>(\n html`<ix-grid\n .columns=${columns}\n .rows=${rows}\n localStorageID=\"testGrid\"\n ></ix-grid>`\n );\n await el.updateComplete;\n\n const headerCells = el.grid.shadowRoot?.querySelectorAll('th');\n if (!headerCells || headerCells.length !== columns.length) {\n throw new Error(\n 'Table headers not found or do not match expected count'\n );\n }\n\n const orderMap = [2, 0, 1];\n headerCells.forEach((th, index) => {\n const thElement = th as HTMLElement;\n thElement.style.order = orderMap[index].toString();\n });\n\n await el.updateComplete;\n await el.reorderColumnsFromTable();\n\n const reorderedColumns = [columns[1], columns[2], columns[0]];\n const storedColumns = JSON.parse(\n localStorage.getItem(el.columnsLocalStorageKey) || '[]'\n );\n\n expect(storedColumns.map(c => c.name)).to.deep.equal(\n reorderedColumns.map(c => c.name)\n );\n });\n\n it('should reorder columns when a filter reorder event is triggered', async () => {\n const el = await fixture<IxGrid>(\n html`<ix-grid .columns=${columns} localStorageID=\"testGrid\"></ix-grid>`\n );\n await el.updateComplete;\n\n const reorderedColumns = [columns[2], columns[0], columns[1]];\n const event = new CustomEvent('columnFilter', {\n detail: { reorderedColumns },\n bubbles: true,\n composed: true,\n });\n\n el.reorderColumnsFromFilter(event);\n await el.updateComplete;\n\n const storedColumns = JSON.parse(\n localStorage.getItem(el.columnsLocalStorageKey) || '[]'\n );\n expect(el.displayColumns.map(c => c.name)).to.deep.equal(\n reorderedColumns.map(c => c.name)\n );\n expect(storedColumns.map(c => c.name)).to.deep.equal(\n reorderedColumns.map(c => c.name)\n );\n });\n });\n\n describe('IxGrid handlePopState', () => {\n const handlePopStateColumns = [\n {\n name: 'customcolumnfilter',\n header: 'Custom',\n filterable: true,\n filterOperators: ['contains'],\n },\n {\n name: 'id',\n header: 'ID',\n filterable: true,\n filterOperators: ['equals'],\n },\n ];\n\n it('should handle empty sort/order/page/size in URL', async () => {\n history.replaceState(null, '', '/?sort=&order=&page=&size=');\n\n const el = await fixture<IxGrid>(html`\n <ix-grid\n .columns=${handlePopStateColumns}\n .rows=${[]}\n .readParamsFromURL=${true}\n ></ix-grid>\n `);\n await el.updateComplete;\n\n const changeEventPromise = oneEvent(el, 'change');\n window.dispatchEvent(new PopStateEvent('popstate'));\n const event = await changeEventPromise;\n\n expect(el.sortedColumn).to.equal('');\n expect(el.sortDirection).to.equal('');\n expect(el.page).to.equal(1);\n expect(el.pageSize).to.equal(10);\n\n expect(event.detail.filters).to.deep.equal({});\n });\n\n it('should handle valid sort/order/page/size in URL', async () => {\n history.replaceState(null, '', '/?sort=id&order=desc&page=1&size=20');\n\n const el = await fixture<IxGrid>(html`\n <ix-grid\n .columns=${handlePopStateColumns}\n .rows=${[]}\n .readParamsFromURL=${true}\n ></ix-grid>\n `);\n await el.updateComplete;\n\n const changeEventPromise = oneEvent(el, 'change');\n window.dispatchEvent(new PopStateEvent('popstate'));\n const event = await changeEventPromise;\n\n expect(el.sortedColumn).to.equal('id');\n expect(el.sortDirection).to.equal('desc');\n expect(el.page).to.equal(1);\n expect(el.pageSize).to.equal(20);\n\n expect(event.detail.filters).to.deep.equal({});\n });\n\n it('should update filters from URL with custom filter', async () => {\n history.replaceState(null, '', '/?customcolumnfilter_contains=foobar');\n\n const el = await fixture<IxGrid>(html`\n <ix-grid\n .columns=${handlePopStateColumns}\n .rows=${[]}\n .readParamsFromURL=${true}\n ></ix-grid>\n `);\n await el.updateComplete;\n\n const changeEventPromise = oneEvent(el, 'change');\n window.dispatchEvent(new PopStateEvent('popstate'));\n const event = await changeEventPromise;\n\n expect(event.detail.filters).to.deep.equal({\n customcolumnfilter: 'foobar',\n });\n });\n\n it('should dispatch a change event with correct detail', async () => {\n history.replaceState(\n null,\n '',\n '/?sort=id&order=desc&page=1&size=20&customcolumnfilter_contains=foobar'\n );\n\n const el = await fixture<IxGrid>(html`\n <ix-grid\n .columns=${handlePopStateColumns}\n .rows=${[]}\n .readParamsFromURL=${true}\n ></ix-grid>\n `);\n await el.updateComplete;\n\n const changeEventPromise = oneEvent(el, 'change');\n window.dispatchEvent(new PopStateEvent('popstate'));\n const event = await changeEventPromise;\n\n expect(event.detail).to.include({\n columnName: 'id',\n sortOrder: 'desc',\n page: 1,\n pageSize: 20,\n });\n\n expect(event.detail.filters).to.deep.equal({\n customcolumnfilter: 'foobar',\n });\n\n expect(event.detail.filtersOperators).to.deep.equal([\n {\n columnField: 'customcolumnfilter',\n operator: 'contains',\n },\n ]);\n });\n });\n});\n"]}
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"description": "Webcomponent ix-grid following open-wc recommendations",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"author": "Digital Realty",
|
|
6
|
-
"version": "1.3.
|
|
6
|
+
"version": "1.3.11",
|
|
7
7
|
"type": "module",
|
|
8
8
|
"main": "dist/index.js",
|
|
9
9
|
"module": "dist/index.js",
|
|
@@ -30,8 +30,9 @@
|
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
32
|
"@digital-realty/grid": "^1.1.2",
|
|
33
|
-
"@digital-realty/ix-button": "^3.4.
|
|
33
|
+
"@digital-realty/ix-button": "^3.4.3",
|
|
34
34
|
"@digital-realty/ix-date": "^1.2.2",
|
|
35
|
+
"@digital-realty/ix-date-next": "^1.1.6",
|
|
35
36
|
"@digital-realty/ix-icon": "^1.2.2",
|
|
36
37
|
"@digital-realty/ix-icon-button": "^1.2.2",
|
|
37
38
|
"@digital-realty/ix-menu": "^1.2.2",
|
|
@@ -112,5 +113,5 @@
|
|
|
112
113
|
"prettier --write"
|
|
113
114
|
]
|
|
114
115
|
},
|
|
115
|
-
"gitHead": "
|
|
116
|
+
"gitHead": "c3c75d912f2c2d41e7f9ea4ff7c250c021dfb586"
|
|
116
117
|
}
|
package/src/IxGrid.ts
CHANGED
|
@@ -57,6 +57,10 @@ export interface FieldOperator {
|
|
|
57
57
|
operator: FilterOperator;
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
+
export interface SessionStorageData {
|
|
61
|
+
pageSize?: number;
|
|
62
|
+
}
|
|
63
|
+
|
|
60
64
|
export class IxGrid extends LitElement {
|
|
61
65
|
static readonly styles = [IxGridViewStyles];
|
|
62
66
|
|
|
@@ -155,6 +159,11 @@ export class IxGrid extends LitElement {
|
|
|
155
159
|
|
|
156
160
|
@property({ type: Function }) onRemoveAllButtonClick?: any;
|
|
157
161
|
|
|
162
|
+
@property({ type: String, attribute: 'session-storage-key' })
|
|
163
|
+
sessionStorageKey: string | undefined = undefined;
|
|
164
|
+
|
|
165
|
+
@property({ type: Boolean }) useNewDatePicker = false;
|
|
166
|
+
|
|
158
167
|
@state() private filters: Filter[] = [];
|
|
159
168
|
|
|
160
169
|
@state() isColumnsReordering = false;
|
|
@@ -163,6 +172,8 @@ export class IxGrid extends LitElement {
|
|
|
163
172
|
|
|
164
173
|
@state() displayColumns: Column[] = [];
|
|
165
174
|
|
|
175
|
+
@state() sessionStorageData: SessionStorageData | undefined = undefined;
|
|
176
|
+
|
|
166
177
|
private defaultFilterKeys = ['sort', 'order', 'page', 'size'];
|
|
167
178
|
|
|
168
179
|
private initialised = false;
|
|
@@ -216,10 +227,12 @@ export class IxGrid extends LitElement {
|
|
|
216
227
|
connectedCallback() {
|
|
217
228
|
super.connectedCallback?.();
|
|
218
229
|
window.addEventListener('popstate', this.handlePopState);
|
|
230
|
+
window.addEventListener('beforeunload', this.handleUnload);
|
|
219
231
|
}
|
|
220
232
|
|
|
221
233
|
disconnectedCallback() {
|
|
222
234
|
window.removeEventListener('popstate', this.handlePopState);
|
|
235
|
+
window.removeEventListener('beforeunload', this.handleUnload);
|
|
223
236
|
super.disconnectedCallback?.();
|
|
224
237
|
}
|
|
225
238
|
|
|
@@ -228,9 +241,15 @@ export class IxGrid extends LitElement {
|
|
|
228
241
|
this.dispatchChangeEvent();
|
|
229
242
|
};
|
|
230
243
|
|
|
244
|
+
private handleUnload = () => {
|
|
245
|
+
sessionStorage.removeItem(`urlPageSizeRead`);
|
|
246
|
+
};
|
|
247
|
+
|
|
231
248
|
private updateSearchParamsFromUri(
|
|
232
249
|
rebuildFiltersFromUri: boolean = false
|
|
233
250
|
): void {
|
|
251
|
+
// If the grid is not visible, do not update from search params
|
|
252
|
+
if(this.grid.getBoundingClientRect().width === 0) return;
|
|
234
253
|
if (this.readParamsFromURL) {
|
|
235
254
|
const url = new URL(window.location.href);
|
|
236
255
|
const searchParams = new URLSearchParams(url.search);
|
|
@@ -250,7 +269,17 @@ export class IxGrid extends LitElement {
|
|
|
250
269
|
}
|
|
251
270
|
|
|
252
271
|
if (size) {
|
|
253
|
-
|
|
272
|
+
// update pageSize with url param only on load or refresh
|
|
273
|
+
// otherwise use session storage value
|
|
274
|
+
if (
|
|
275
|
+
!this.getSessionStorageData() ||
|
|
276
|
+
!sessionStorage.getItem(`urlPageSizeRead`) &&
|
|
277
|
+
this.grid.getBoundingClientRect().width > 0
|
|
278
|
+
) {
|
|
279
|
+
sessionStorage.setItem(`urlPageSizeRead`, true.toString());
|
|
280
|
+
this.pageSize = parseInt(size, 10) || this.defaultPageSize;
|
|
281
|
+
this.updateSessionStorage({ pageSize: this.pageSize });
|
|
282
|
+
}
|
|
254
283
|
}
|
|
255
284
|
|
|
256
285
|
if (rebuildFiltersFromUri) {
|
|
@@ -314,12 +343,57 @@ export class IxGrid extends LitElement {
|
|
|
314
343
|
this.checkLocalStorageUpdate();
|
|
315
344
|
this.initialised = true;
|
|
316
345
|
}
|
|
346
|
+
|
|
347
|
+
if (
|
|
348
|
+
changedProperties.has('sessionStorageData') &&
|
|
349
|
+
this.sessionStorageData
|
|
350
|
+
) {
|
|
351
|
+
const newPageSize =
|
|
352
|
+
this.sessionStorageData.pageSize || this.defaultPageSize;
|
|
353
|
+
|
|
354
|
+
if (this.pageSize !== newPageSize) {
|
|
355
|
+
this.pageSize = newPageSize;
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
|
|
317
359
|
super.update(changedProperties);
|
|
318
360
|
}
|
|
319
361
|
|
|
320
362
|
firstUpdated() {
|
|
321
363
|
this.updateSearchParamsFromUri();
|
|
322
364
|
this.removeOldLocalStorageValues();
|
|
365
|
+
this.sessionStorageData = this.getSessionStorageData();
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
private getSessionStorageData() {
|
|
369
|
+
if (this.sessionStorageKey) {
|
|
370
|
+
const sessionData = sessionStorage.getItem(
|
|
371
|
+
`grid-${this.sessionStorageKey}`
|
|
372
|
+
);
|
|
373
|
+
|
|
374
|
+
if (sessionData) {
|
|
375
|
+
return JSON.parse(sessionData);
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
return undefined;
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
private updateSessionStorage(data: SessionStorageData) {
|
|
383
|
+
const sessionData = this.getSessionStorageData() || {};
|
|
384
|
+
|
|
385
|
+
if (this.sessionStorageKey && data) {
|
|
386
|
+
const updatedData = {
|
|
387
|
+
...sessionData,
|
|
388
|
+
...data,
|
|
389
|
+
};
|
|
390
|
+
|
|
391
|
+
sessionStorage.setItem(
|
|
392
|
+
`grid-${this.sessionStorageKey}`,
|
|
393
|
+
JSON.stringify(updatedData)
|
|
394
|
+
);
|
|
395
|
+
this.sessionStorageData = updatedData;
|
|
396
|
+
}
|
|
323
397
|
}
|
|
324
398
|
|
|
325
399
|
private checkLocalStorageUpdate(): void {
|
|
@@ -736,6 +810,7 @@ export class IxGrid extends LitElement {
|
|
|
736
810
|
.filterValueChangeDebounceTime}
|
|
737
811
|
.readParamsFromURL=${this.readParamsFromURL}
|
|
738
812
|
.maxDate=${this.filterMaxDate}
|
|
813
|
+
.useNewDatePicker=${this.useNewDatePicker}
|
|
739
814
|
@rowFilter=${(e: CustomEvent) => {
|
|
740
815
|
this.filters = e.detail.filters;
|
|
741
816
|
if (e.detail.resetPage) {
|
|
@@ -848,6 +923,9 @@ export class IxGrid extends LitElement {
|
|
|
848
923
|
@updatePagination=${(e: CustomEvent) => {
|
|
849
924
|
this.page = e.detail.page;
|
|
850
925
|
this.pageSize = e.detail.pageSize;
|
|
926
|
+
this.updateSessionStorage({
|
|
927
|
+
pageSize: this.pageSize,
|
|
928
|
+
});
|
|
851
929
|
this.updatePage();
|
|
852
930
|
}}
|
|
853
931
|
></ix-pagination>
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import '@digital-realty/ix-button/ix-button.js';
|
|
2
2
|
import '@digital-realty/ix-date/ix-date.js';
|
|
3
|
+
import '@digital-realty/ix-date-next/ix-date-next.js';
|
|
3
4
|
import '@digital-realty/ix-icon-button/ix-icon-button.js';
|
|
4
5
|
import '@digital-realty/ix-icon/ix-icon.js';
|
|
5
6
|
import '@digital-realty/ix-select/ix-select.js';
|
|
6
|
-
import { formatDate } from 'date-fns/format.js';
|
|
7
|
+
import { format, formatDate } from 'date-fns/format.js';
|
|
7
8
|
import { LitElement, html, nothing } from 'lit';
|
|
8
9
|
import { customElement, property, state } from 'lit/decorators.js';
|
|
9
10
|
import { repeat } from 'lit/directives/repeat.js';
|
|
@@ -29,6 +30,8 @@ export class IxGridRowFilter extends LitElement {
|
|
|
29
30
|
|
|
30
31
|
@property({ type: Boolean }) readParamsFromURL = false;
|
|
31
32
|
|
|
33
|
+
@property({ type: Boolean }) useNewDatePicker = false;
|
|
34
|
+
|
|
32
35
|
@property({ type: String }) maxDate: string = formatDate(
|
|
33
36
|
new Date(),
|
|
34
37
|
'yyyy-MM-dd'
|
|
@@ -255,12 +258,19 @@ export class IxGridRowFilter extends LitElement {
|
|
|
255
258
|
}
|
|
256
259
|
return html` <p>${this.activeFilters.length} ${copy.activeFilter}</p>
|
|
257
260
|
<ul>
|
|
258
|
-
${this.activeFilters.map(
|
|
259
|
-
|
|
261
|
+
${this.activeFilters.map(filter => {
|
|
262
|
+
let displayValue = filter.value;
|
|
263
|
+
|
|
264
|
+
if (filter.dataType === 'dateTime' && this.useNewDatePicker) {
|
|
265
|
+
const date = this.shadowRoot?.querySelector(`ix-date-next`) as any;
|
|
266
|
+
displayValue = format(displayValue, date.format);
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
return html`<li>
|
|
260
270
|
${this.formatCamelCaseToEnglish(filter.columnField)}
|
|
261
|
-
${filter.operatorValue} ${
|
|
262
|
-
</li
|
|
263
|
-
)}
|
|
271
|
+
${filter.operatorValue} ${displayValue}
|
|
272
|
+
</li>`;
|
|
273
|
+
})}
|
|
264
274
|
</ul>`;
|
|
265
275
|
}
|
|
266
276
|
|
|
@@ -278,15 +288,26 @@ export class IxGridRowFilter extends LitElement {
|
|
|
278
288
|
}
|
|
279
289
|
|
|
280
290
|
private renderDateInput(value: any, index: number) {
|
|
281
|
-
return
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
291
|
+
return this.useNewDatePicker
|
|
292
|
+
? html`<ix-date-next
|
|
293
|
+
data-testid=${`filterValueInput-${index}`}
|
|
294
|
+
.value=${value.value}
|
|
295
|
+
max=${this.maxDate}
|
|
296
|
+
name="${value.columnField}-valueDate"
|
|
297
|
+
showCalendarOnMouseDown="true"
|
|
298
|
+
.errorText=${this.fromDateErrorText}
|
|
299
|
+
.onChanged=${e => this.onDatefilterValueChange(index, e)}
|
|
300
|
+
>
|
|
301
|
+
</ix-date-next>`
|
|
302
|
+
: html`<ix-date
|
|
303
|
+
data-testid=${`filterValueInput-${index}`}
|
|
304
|
+
.value=${value.value}
|
|
305
|
+
max=${this.maxDate}
|
|
306
|
+
name="${value.columnField}-valueDate"
|
|
307
|
+
.errorText=${this.fromDateErrorText}
|
|
308
|
+
.onChanged=${e => this.onDatefilterValueChange(index, e)}
|
|
309
|
+
>
|
|
310
|
+
</ix-date>`;
|
|
290
311
|
}
|
|
291
312
|
|
|
292
313
|
private renderFilterInputControl(value: any, index: number) {
|
|
@@ -160,8 +160,14 @@ export const IxGridRowFilterStyles = css`
|
|
|
160
160
|
flex-direction: column;
|
|
161
161
|
align-items: baseline;
|
|
162
162
|
height: 54px;
|
|
163
|
-
justify-content:
|
|
163
|
+
justify-content: space-between;
|
|
164
164
|
font-family: var(--text-default-font, sans-serif);
|
|
165
|
+
white-space: wrap;
|
|
166
|
+
|
|
167
|
+
ix-date-next,
|
|
168
|
+
ix-date {
|
|
169
|
+
margin-top: 10px;
|
|
170
|
+
}
|
|
165
171
|
}
|
|
166
172
|
|
|
167
173
|
option {
|