igniteui-grid-lite 0.9.0 → 0.11.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/components/cell.d.ts +11 -15
- package/components/cell.js +14 -3
- package/components/cell.js.map +1 -1
- package/components/column.d.ts +2 -2
- package/components/column.js.map +1 -1
- package/components/filter-row.d.ts +5 -3
- package/components/filter-row.js +97 -67
- package/components/filter-row.js.map +1 -1
- package/components/grid.d.ts +49 -8
- package/components/grid.js +116 -79
- package/components/grid.js.map +1 -1
- package/components/header-row.d.ts +1 -2
- package/components/header-row.js +6 -8
- package/components/header-row.js.map +1 -1
- package/components/header.d.ts +9 -0
- package/components/header.js +37 -28
- package/components/header.js.map +1 -1
- package/components/row.d.ts +4 -4
- package/components/row.js +15 -4
- package/components/row.js.map +1 -1
- package/controllers/data-operation.d.ts +1 -7
- package/controllers/data-operation.js +7 -24
- package/controllers/data-operation.js.map +1 -1
- package/controllers/dom.d.ts +16 -9
- package/controllers/dom.js +71 -20
- package/controllers/dom.js.map +1 -1
- package/controllers/filter.d.ts +17 -13
- package/controllers/filter.js +51 -61
- package/controllers/filter.js.map +1 -1
- package/controllers/navigation.d.ts +13 -18
- package/controllers/navigation.js +71 -76
- package/controllers/navigation.js.map +1 -1
- package/controllers/resize.d.ts +11 -17
- package/controllers/resize.js +20 -16
- package/controllers/resize.js.map +1 -1
- package/controllers/sort.d.ts +13 -6
- package/controllers/sort.js +39 -41
- package/controllers/sort.js.map +1 -1
- package/controllers/state.d.ts +18 -19
- package/controllers/state.js +31 -35
- package/controllers/state.js.map +1 -1
- package/custom-elements.json +970 -488
- package/docs/igniteui-grid-lite.json +1293 -782
- package/index.d.ts +1 -1
- package/index.js.map +1 -1
- package/internal/a11y.d.ts +26 -0
- package/internal/a11y.js +24 -0
- package/internal/a11y.js.map +1 -0
- package/internal/body-focus.d.ts +6 -0
- package/internal/body-focus.js +46 -0
- package/internal/body-focus.js.map +1 -0
- package/internal/constants.d.ts +6 -2
- package/internal/constants.js +3 -4
- package/internal/constants.js.map +1 -1
- package/internal/element-from-event-path.d.ts +1 -1
- package/internal/element-from-event-path.js +2 -9
- package/internal/element-from-event-path.js.map +1 -1
- package/internal/normalize-case.d.ts +5 -1
- package/internal/normalize-case.js +2 -1
- package/internal/normalize-case.js.map +1 -1
- package/internal/part-map.js +9 -17
- package/internal/part-map.js.map +1 -1
- package/internal/tags.d.ts +1 -2
- package/internal/tags.js +1 -2
- package/internal/tags.js.map +1 -1
- package/internal/types.d.ts +19 -8
- package/internal/types.js.map +1 -1
- package/internal/utils.d.ts +7 -8
- package/internal/utils.js +22 -5
- package/internal/utils.js.map +1 -1
- package/internal/watch.js +8 -9
- package/internal/watch.js.map +1 -1
- package/operations/base.js +3 -2
- package/operations/base.js.map +1 -1
- package/operations/filter/state.d.ts +0 -1
- package/operations/filter/state.js +2 -8
- package/operations/filter/state.js.map +1 -1
- package/operations/filter/tree.d.ts +1 -2
- package/operations/filter/tree.js +2 -7
- package/operations/filter/tree.js.map +1 -1
- package/operations/filter/types.d.ts +1 -1
- package/operations/filter/types.js.map +1 -1
- package/operations/filter.js +16 -3
- package/operations/filter.js.map +1 -1
- package/operations/sort/types.d.ts +1 -1
- package/operations/sort/types.js.map +1 -1
- package/operations/sort.d.ts +0 -1
- package/operations/sort.js +12 -10
- package/operations/sort.js.map +1 -1
- package/package.json +2 -3
- package/styles/header-cell/header-cell.css.js +1 -1
- package/styles/header-cell/header-cell.css.js.map +1 -1
- package/styles/themes/filtering-row-themes.js +2 -30
- package/styles/themes/filtering-row-themes.js.map +1 -1
- package/styles/themes/grid-header-themes.js +2 -20
- package/styles/themes/grid-header-themes.js.map +1 -1
- package/styles/themes/grid-themes.js +10 -31
- package/styles/themes/grid-themes.js.map +1 -1
- package/styles/themes/grid.base.css.js +1 -1
- package/styles/themes/grid.base.css.js.map +1 -1
- package/styles/themes/shared/grid.common.css.js +1 -1
- package/styles/themes/shared/grid.common.css.js.map +1 -1
- package/components/virtualizer.d.ts +0 -12
- package/components/virtualizer.js +0 -20
- package/components/virtualizer.js.map +0 -1
- package/internal/virt-flow-layout.d.ts +0 -4
- package/internal/virt-flow-layout.js +0 -15
- package/internal/virt-flow-layout.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-operation.js","sourceRoot":"","sources":["../../src/controllers/data-operation.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"data-operation.js","sourceRoot":"","sources":["../../src/controllers/data-operation.ts"],"names":[],"mappings":"AACA,OAAO,mBAAmB,MAAM,yBAAyB,CAAC;AAC1D,OAAO,iBAAiB,MAAM,uBAAuB,CAAC;AAGtD,MAAM,wBAAwB;IAI5B,YAAsB,IAAiB;QAAjB,SAAI,GAAJ,IAAI,CAAa;QAH7B,YAAO,GAAG,IAAI,iBAAiB,EAAK,CAAC;QACrC,cAAS,GAAG,IAAI,mBAAmB,EAAK,CAAC;IAET,CAAC;IAEpC,KAAK,CAAC,KAAK,CAAC,IAAS,EAAE,KAAyB;QAErD,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,yBAAyB,IAAI,EAAE,CAAC;QAEnE,MAAM,QAAQ,GAAG,MAAM;YACrB,CAAC,CAAC,MAAM,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;YACzD,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAEtD,OAAO,IAAI;YACT,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;YAC/D,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACxD,CAAC;CACF;AAED,SAAS,8BAA8B,CACrC,IAAiB;IAEjB,OAAO,IAAI,wBAAwB,CAAI,IAAI,CAAC,CAAC;AAC/C,CAAC;AAGD,OAAO,EAAE,8BAA8B,EAAE,CAAC","sourcesContent":["import type { GridHost } from '../internal/types.js';\nimport FilterDataOperation from '../operations/filter.js';\nimport SortDataOperation from '../operations/sort.js';\nimport type { StateController } from './state.js';\n\nclass DataOperationsController<T extends object> {\n protected sorting = new SortDataOperation<T>();\n protected filtering = new FilterDataOperation<T>();\n\n constructor(protected host: GridHost<T>) {}\n\n public async apply(data: T[], state: StateController<T>) {\n // A hook, when configured, replaces the built-in operation.\n const { filter, sort } = this.host.dataPipelineConfiguration ?? {};\n\n const filtered = filter\n ? await filter({ data, grid: this.host, type: 'filter' })\n : this.filtering.apply(data, state.filtering.state);\n\n return sort\n ? await sort({ data: filtered, grid: this.host, type: 'sort' })\n : this.sorting.apply(filtered, state.sorting.state);\n }\n}\n\nfunction createDataOperationsController<T extends object>(\n host: GridHost<T>\n): DataOperationsController<T> {\n return new DataOperationsController<T>(host);\n}\n\nexport type { DataOperationsController };\nexport { createDataOperationsController };\n"]}
|
package/controllers/dom.d.ts
CHANGED
|
@@ -1,18 +1,25 @@
|
|
|
1
|
+
import { IgcVirtualScrollComponent } from 'igniteui-webcomponents';
|
|
1
2
|
import type { ReactiveController } from 'lit';
|
|
2
3
|
import type { StyleInfo } from 'lit/directives/style-map.js';
|
|
3
|
-
import type
|
|
4
|
-
import type
|
|
4
|
+
import type IgcFilterRow from '../components/filter-row.js';
|
|
5
|
+
import type IgcGridLiteRow from '../components/row.js';
|
|
6
|
+
import type { ColumnConfiguration, GridHost } from '../internal/types.js';
|
|
7
|
+
/** Grid DOM access: render root queries, column track sizes, scrollbar offset, body focus. */
|
|
5
8
|
declare class GridDOMController<T extends object> implements ReactiveController {
|
|
9
|
+
#private;
|
|
6
10
|
protected readonly _host: GridHost<T>;
|
|
7
|
-
|
|
8
|
-
constructor(host: GridHost<T>, state: StateController<T>);
|
|
11
|
+
constructor(host: GridHost<T>);
|
|
9
12
|
columnSizes: StyleInfo;
|
|
13
|
+
get filterRow(): IgcFilterRow<T> | null;
|
|
14
|
+
get rows(): IgcGridLiteRow<T>[];
|
|
15
|
+
get virtualizer(): IgcVirtualScrollComponent | null;
|
|
10
16
|
hostConnected(): void;
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
17
|
+
hostDisconnected(): void;
|
|
18
|
+
/** Scrolls the data area back to the top. */
|
|
19
|
+
resetScrollPosition(): void;
|
|
20
|
+
/** Re-derives the column track sizes. Column configs are immutable: same array, same sizes. */
|
|
21
|
+
setColumns(columns: ColumnConfiguration<T>[]): void;
|
|
15
22
|
}
|
|
16
|
-
declare function createDomController<T extends object>(host: GridHost<T
|
|
23
|
+
declare function createDomController<T extends object>(host: GridHost<T>): GridDOMController<T>;
|
|
17
24
|
export type { GridDOMController };
|
|
18
25
|
export { createDomController };
|
package/controllers/dom.js
CHANGED
|
@@ -1,40 +1,91 @@
|
|
|
1
|
+
import { IgcVirtualScrollComponent } from 'igniteui-webcomponents';
|
|
2
|
+
import { addBodyFocus } from '../internal/body-focus.js';
|
|
3
|
+
import { SCROLL_STATE_CHANGE } from '../internal/constants.js';
|
|
1
4
|
import { registerGridIcons } from '../internal/icon-registry.js';
|
|
5
|
+
import { GRID_FILTER_ROW_TAG, GRID_ROW_TAG } from '../internal/tags.js';
|
|
2
6
|
import { applyColumnWidths } from '../internal/utils.js';
|
|
7
|
+
const SCROLLBAR_OFFSET_VAR = '--scrollbar-offset';
|
|
3
8
|
class GridDOMController {
|
|
4
|
-
|
|
9
|
+
#observed;
|
|
10
|
+
#listeners;
|
|
11
|
+
#scrollOffset;
|
|
12
|
+
#pendingFrame;
|
|
13
|
+
#columns;
|
|
14
|
+
#onScrollbarChange;
|
|
15
|
+
constructor(host) {
|
|
16
|
+
this.#scrollOffset = -1;
|
|
17
|
+
this.#onScrollbarChange = () => {
|
|
18
|
+
if (this.#pendingFrame !== undefined) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
this.#pendingFrame = requestAnimationFrame(() => {
|
|
22
|
+
this.#pendingFrame = undefined;
|
|
23
|
+
this.#applyScrollOffset();
|
|
24
|
+
});
|
|
25
|
+
};
|
|
5
26
|
this.columnSizes = {};
|
|
6
27
|
this._host = host;
|
|
7
|
-
this._state = state;
|
|
8
28
|
this._host.addController(this);
|
|
9
29
|
}
|
|
30
|
+
get filterRow() {
|
|
31
|
+
return this._host.renderRoot.querySelector(GRID_FILTER_ROW_TAG);
|
|
32
|
+
}
|
|
33
|
+
get rows() {
|
|
34
|
+
return Array.from(this._host.renderRoot.querySelectorAll(GRID_ROW_TAG));
|
|
35
|
+
}
|
|
36
|
+
get virtualizer() {
|
|
37
|
+
return this._host.renderRoot.querySelector(IgcVirtualScrollComponent.tagName);
|
|
38
|
+
}
|
|
10
39
|
hostConnected() {
|
|
11
40
|
registerGridIcons();
|
|
12
|
-
this.setGridColumnSizes();
|
|
13
41
|
this._host.updateComplete.then(() => {
|
|
14
|
-
this
|
|
15
|
-
this.setScrollOffset();
|
|
16
|
-
}, { once: true });
|
|
42
|
+
this.#observeVirtualizer();
|
|
17
43
|
});
|
|
18
44
|
}
|
|
19
|
-
|
|
20
|
-
this
|
|
21
|
-
|
|
45
|
+
hostDisconnected() {
|
|
46
|
+
if (this.#pendingFrame !== undefined) {
|
|
47
|
+
cancelAnimationFrame(this.#pendingFrame);
|
|
48
|
+
this.#pendingFrame = undefined;
|
|
49
|
+
}
|
|
50
|
+
this.#listeners?.abort();
|
|
51
|
+
this.#observed = undefined;
|
|
52
|
+
}
|
|
53
|
+
#observeVirtualizer() {
|
|
54
|
+
const virtualizer = this.virtualizer;
|
|
55
|
+
if (!virtualizer || virtualizer === this.#observed) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
this.#observed = virtualizer;
|
|
59
|
+
this.#listeners = new AbortController();
|
|
60
|
+
const { signal } = this.#listeners;
|
|
61
|
+
addBodyFocus(virtualizer, signal);
|
|
62
|
+
virtualizer.addEventListener(SCROLL_STATE_CHANGE, this.#onScrollbarChange, { signal });
|
|
63
|
+
const resizeObserver = new ResizeObserver(this.#onScrollbarChange);
|
|
64
|
+
resizeObserver.observe(virtualizer);
|
|
65
|
+
signal.addEventListener('abort', () => resizeObserver.disconnect());
|
|
22
66
|
}
|
|
23
|
-
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
67
|
+
#applyScrollOffset() {
|
|
68
|
+
const virtualizer = this.#observed;
|
|
69
|
+
const offset = virtualizer ? virtualizer.offsetWidth - virtualizer.clientWidth : 0;
|
|
70
|
+
if (offset === this.#scrollOffset) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
this.#scrollOffset = offset;
|
|
74
|
+
this._host.style.setProperty(SCROLLBAR_OFFSET_VAR, `${offset}px`);
|
|
28
75
|
}
|
|
29
|
-
|
|
30
|
-
this.
|
|
76
|
+
resetScrollPosition() {
|
|
77
|
+
this.virtualizer?.scrollTo({ top: 0 });
|
|
31
78
|
}
|
|
32
|
-
|
|
33
|
-
|
|
79
|
+
setColumns(columns) {
|
|
80
|
+
if (columns === this.#columns) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
this.#columns = columns;
|
|
84
|
+
this.columnSizes = applyColumnWidths(columns);
|
|
34
85
|
}
|
|
35
86
|
}
|
|
36
|
-
function createDomController(host
|
|
37
|
-
return new GridDOMController(host
|
|
87
|
+
function createDomController(host) {
|
|
88
|
+
return new GridDOMController(host);
|
|
38
89
|
}
|
|
39
90
|
export { createDomController };
|
|
40
91
|
//# sourceMappingURL=dom.js.map
|
package/controllers/dom.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dom.js","sourceRoot":"","sources":["../../src/controllers/dom.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dom.js","sourceRoot":"","sources":["../../src/controllers/dom.ts"],"names":[],"mappings":"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","sourcesContent":["import { IgcVirtualScrollComponent } from 'igniteui-webcomponents';\nimport type { ReactiveController } from 'lit';\nimport type { StyleInfo } from 'lit/directives/style-map.js';\nimport type IgcFilterRow from '../components/filter-row.js';\nimport type IgcGridLiteRow from '../components/row.js';\nimport { addBodyFocus } from '../internal/body-focus.js';\nimport { SCROLL_STATE_CHANGE } from '../internal/constants.js';\nimport { registerGridIcons } from '../internal/icon-registry.js';\nimport { GRID_FILTER_ROW_TAG, GRID_ROW_TAG } from '../internal/tags.js';\nimport type { ColumnConfiguration, GridHost } from '../internal/types.js';\nimport { applyColumnWidths } from '../internal/utils.js';\n\nconst SCROLLBAR_OFFSET_VAR = '--scrollbar-offset';\n\n/** Grid DOM access: render root queries, column track sizes, scrollbar offset, body focus. */\nclass GridDOMController<T extends object> implements ReactiveController {\n protected readonly _host: GridHost<T>;\n\n #observed?: IgcVirtualScrollComponent;\n #listeners?: AbortController;\n\n /** Last written offset in pixels. -1 means not measured yet. */\n #scrollOffset = -1;\n #pendingFrame?: number;\n\n /** The column configuration `columnSizes` was derived from. */\n #columns?: ColumnConfiguration<T>[];\n\n #onScrollbarChange = (): void => {\n if (this.#pendingFrame !== undefined) {\n return;\n }\n\n this.#pendingFrame = requestAnimationFrame(() => {\n this.#pendingFrame = undefined;\n this.#applyScrollOffset();\n });\n };\n\n constructor(host: GridHost<T>) {\n this._host = host;\n this._host.addController(this);\n }\n\n public columnSizes: StyleInfo = {};\n\n public get filterRow(): IgcFilterRow<T> | null {\n return this._host.renderRoot.querySelector<IgcFilterRow<T>>(GRID_FILTER_ROW_TAG);\n }\n\n public get rows(): IgcGridLiteRow<T>[] {\n return Array.from(this._host.renderRoot.querySelectorAll<IgcGridLiteRow<T>>(GRID_ROW_TAG));\n }\n\n public get virtualizer(): IgcVirtualScrollComponent | null {\n return this._host.renderRoot.querySelector(IgcVirtualScrollComponent.tagName);\n }\n\n public hostConnected(): void {\n registerGridIcons();\n\n // The virtualizer is part of the host template. Observe it after the first render.\n this._host.updateComplete.then(() => {\n this.#observeVirtualizer();\n });\n }\n\n public hostDisconnected(): void {\n if (this.#pendingFrame !== undefined) {\n cancelAnimationFrame(this.#pendingFrame);\n this.#pendingFrame = undefined;\n }\n\n this.#listeners?.abort();\n this.#observed = undefined;\n }\n\n /**\n * Tracks scrollbar toggles (range change, content box resize) without a forced\n * layout per host update. Also keeps body focus across row recycling.\n */\n #observeVirtualizer(): void {\n const virtualizer = this.virtualizer;\n\n if (!virtualizer || virtualizer === this.#observed) {\n return;\n }\n\n this.#observed = virtualizer;\n this.#listeners = new AbortController();\n\n const { signal } = this.#listeners;\n addBodyFocus(virtualizer, signal);\n virtualizer.addEventListener(SCROLL_STATE_CHANGE, this.#onScrollbarChange, { signal });\n\n const resizeObserver = new ResizeObserver(this.#onScrollbarChange);\n resizeObserver.observe(virtualizer);\n signal.addEventListener('abort', () => resizeObserver.disconnect());\n }\n\n /** Writes the scrollbar offset CSS variable only when the measurement changed. */\n #applyScrollOffset(): void {\n const virtualizer = this.#observed;\n const offset = virtualizer ? virtualizer.offsetWidth - virtualizer.clientWidth : 0;\n\n if (offset === this.#scrollOffset) {\n return;\n }\n\n this.#scrollOffset = offset;\n this._host.style.setProperty(SCROLLBAR_OFFSET_VAR, `${offset}px`);\n }\n\n /** Scrolls the data area back to the top. */\n public resetScrollPosition(): void {\n this.virtualizer?.scrollTo({ top: 0 });\n }\n\n /** Re-derives the column track sizes. Column configs are immutable: same array, same sizes. */\n public setColumns(columns: ColumnConfiguration<T>[]): void {\n if (columns === this.#columns) {\n return;\n }\n\n this.#columns = columns;\n this.columnSizes = applyColumnWidths(columns);\n }\n}\n\nfunction createDomController<T extends object>(host: GridHost<T>): GridDOMController<T> {\n return new GridDOMController<T>(host);\n}\n\nexport type { GridDOMController };\nexport { createDomController };\n"]}
|
package/controllers/filter.d.ts
CHANGED
|
@@ -1,34 +1,38 @@
|
|
|
1
|
-
import type { ReactiveController } from 'lit';
|
|
2
1
|
import type IgcFilterRow from '../components/filter-row.js';
|
|
2
|
+
import type { IgcFilteringEvent } from '../components/grid.js';
|
|
3
3
|
import type { ColumnConfiguration, Keys } from '../internal/types.js';
|
|
4
4
|
import { FilterState } from '../operations/filter/state.js';
|
|
5
5
|
import type { FilterExpression } from '../operations/filter/types.js';
|
|
6
|
+
import type { GridDOMController } from './dom.js';
|
|
6
7
|
import type { StateController } from './state.js';
|
|
7
|
-
|
|
8
|
+
type FilterEventType = IgcFilteringEvent<object>['type'];
|
|
9
|
+
export declare class FilterController<T extends object> {
|
|
8
10
|
#private;
|
|
9
11
|
private readonly _stateController;
|
|
10
|
-
|
|
12
|
+
private readonly _dom;
|
|
13
|
+
constructor(state: StateController<T>, dom: GridDOMController<T>);
|
|
11
14
|
state: FilterState<T>;
|
|
12
15
|
get host(): import("../internal/types.js").GridHost<T>;
|
|
13
16
|
get filterRow(): IgcFilterRow<T> | null;
|
|
14
|
-
hostConnected(): void;
|
|
15
|
-
hostUpdate(): void;
|
|
16
17
|
get(key: Keys<T>): import("../operations/filter/tree.js").FilterExpressionTree<T> | undefined;
|
|
17
18
|
reset(key?: Keys<T>): void;
|
|
18
19
|
setActiveColumn(column?: ColumnConfiguration<T>): void;
|
|
19
20
|
getDefaultExpression(column: ColumnConfiguration<T>): FilterExpression<T>;
|
|
20
21
|
removeAllExpressions(key: Keys<T>): Promise<void>;
|
|
21
22
|
removeExpression(expression: FilterExpression<T>): Promise<void>;
|
|
22
|
-
filterWithEvent(expression: FilterExpression<T>, type: 'add' | 'modify' | 'remove'): Promise<void>;
|
|
23
|
-
filter(expression: FilterExpression<T> | FilterExpression<T>[]): void;
|
|
24
23
|
/**
|
|
25
|
-
*
|
|
26
|
-
*
|
|
24
|
+
* Emits `filtering` for `expression` and, if not canceled, applies it.
|
|
25
|
+
*
|
|
26
|
+
* @remarks
|
|
27
|
+
* `expression` is a candidate copy of the stored `target`, so a canceled event
|
|
28
|
+
* leaves `target` untouched. On commit it merges into `target`, keeping the
|
|
29
|
+
* identity the expression tree and the chip selection use.
|
|
27
30
|
*/
|
|
31
|
+
filterWithEvent(expression: FilterExpression<T>, type: FilterEventType, target?: FilterExpression<T>): Promise<void>;
|
|
32
|
+
filter(expression: FilterExpression<T> | FilterExpression<T>[]): void;
|
|
33
|
+
/** Stores copies before columns exist. `resolveConditions` rewrites them later. */
|
|
28
34
|
setRaw(expressions: FilterExpression<T>[]): void;
|
|
29
|
-
/**
|
|
30
|
-
* Resolves any string conditions in the current filter state using available column configuration.
|
|
31
|
-
* Called after columns become available to finalize deferred expressions.
|
|
32
|
-
*/
|
|
35
|
+
/** Resolves string conditions and default case sensitivity once columns exist. */
|
|
33
36
|
resolveConditions(): void;
|
|
34
37
|
}
|
|
38
|
+
export {};
|
package/controllers/filter.js
CHANGED
|
@@ -1,28 +1,21 @@
|
|
|
1
1
|
import { PIPELINE } from '../internal/constants.js';
|
|
2
|
-
import { asArray, getFilterOperandsFor, isString } from '../internal/utils.js';
|
|
2
|
+
import { asArray, getFilterOperandsFor, isString, resolveCondition } from '../internal/utils.js';
|
|
3
3
|
import { FilterState } from '../operations/filter/state.js';
|
|
4
4
|
export class FilterController {
|
|
5
|
-
constructor(state) {
|
|
5
|
+
constructor(state, dom) {
|
|
6
6
|
this.state = new FilterState();
|
|
7
7
|
this._stateController = state;
|
|
8
|
-
this.
|
|
8
|
+
this._dom = dom;
|
|
9
9
|
}
|
|
10
10
|
get host() {
|
|
11
11
|
return this._stateController.host;
|
|
12
12
|
}
|
|
13
13
|
get filterRow() {
|
|
14
|
-
return this.
|
|
14
|
+
return this._dom.filterRow;
|
|
15
15
|
}
|
|
16
|
-
|
|
17
|
-
return this._stateController.virtualizer;
|
|
18
|
-
}
|
|
19
|
-
#emitFilteringEvent(expression, type) {
|
|
16
|
+
#emitFilteringEvent(key, expressions, type) {
|
|
20
17
|
return this.host.emitEvent('filtering', {
|
|
21
|
-
detail: {
|
|
22
|
-
key: expression.key,
|
|
23
|
-
expressions: [expression],
|
|
24
|
-
type,
|
|
25
|
-
},
|
|
18
|
+
detail: { key, expressions, type },
|
|
26
19
|
cancelable: true,
|
|
27
20
|
});
|
|
28
21
|
}
|
|
@@ -33,91 +26,88 @@ export class FilterController {
|
|
|
33
26
|
for (const expr of asArray(expression)) {
|
|
34
27
|
this.state.set(expr);
|
|
35
28
|
}
|
|
36
|
-
this
|
|
29
|
+
this._dom.resetScrollPosition();
|
|
30
|
+
this._stateController.updateObservers();
|
|
37
31
|
this.host.requestUpdate(PIPELINE);
|
|
38
32
|
}
|
|
39
|
-
hostConnected() { }
|
|
40
|
-
hostUpdate() {
|
|
41
|
-
this.filterRow?.requestUpdate();
|
|
42
|
-
}
|
|
43
33
|
get(key) {
|
|
44
34
|
return this.state.get(key);
|
|
45
35
|
}
|
|
46
36
|
reset(key) {
|
|
47
|
-
|
|
37
|
+
if (key === undefined) {
|
|
38
|
+
this.state.clear();
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
this.state.delete(key);
|
|
42
|
+
}
|
|
43
|
+
this._stateController.updateObservers();
|
|
48
44
|
}
|
|
49
45
|
setActiveColumn(column) {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
this.host.requestUpdate();
|
|
46
|
+
const filterRow = this.filterRow;
|
|
47
|
+
if (!(column?.filterable && filterRow?.active)) {
|
|
48
|
+
return;
|
|
54
49
|
}
|
|
50
|
+
filterRow.column = column;
|
|
51
|
+
filterRow.expression = this.getDefaultExpression(column);
|
|
52
|
+
this._stateController.updateObservers();
|
|
55
53
|
}
|
|
56
54
|
getDefaultExpression(column) {
|
|
57
|
-
const caseSensitive = Boolean(column.filteringCaseSensitive);
|
|
58
|
-
const operands = getFilterOperandsFor(column);
|
|
59
|
-
const keys = Object.keys(operands);
|
|
60
55
|
return {
|
|
61
56
|
key: column.field,
|
|
62
|
-
condition:
|
|
63
|
-
caseSensitive,
|
|
57
|
+
condition: Object.values(getFilterOperandsFor(column))[0],
|
|
58
|
+
caseSensitive: Boolean(column.filteringCaseSensitive),
|
|
64
59
|
};
|
|
65
60
|
}
|
|
66
|
-
async
|
|
67
|
-
|
|
68
|
-
if (!this.host.emitEvent('filtering', {
|
|
69
|
-
detail: {
|
|
70
|
-
key,
|
|
71
|
-
expressions: state,
|
|
72
|
-
type: 'remove',
|
|
73
|
-
},
|
|
74
|
-
cancelable: true,
|
|
75
|
-
})) {
|
|
61
|
+
async #applyWithEvents(key, expressions, type, commit) {
|
|
62
|
+
if (!this.#emitFilteringEvent(key, expressions, type)) {
|
|
76
63
|
return;
|
|
77
64
|
}
|
|
78
|
-
|
|
79
|
-
this
|
|
80
|
-
await this.host.updateComplete;
|
|
65
|
+
commit();
|
|
66
|
+
await this.host._pipelineComplete;
|
|
81
67
|
this.#emitFilteredEvent({ key, state: this.get(key)?.all ?? [] });
|
|
82
68
|
}
|
|
69
|
+
async removeAllExpressions(key) {
|
|
70
|
+
await this.#applyWithEvents(key, this.get(key)?.all ?? [], 'remove', () => {
|
|
71
|
+
this.reset(key);
|
|
72
|
+
this.#filter([]);
|
|
73
|
+
});
|
|
74
|
+
}
|
|
83
75
|
async removeExpression(expression) {
|
|
84
76
|
const state = this.get(expression.key);
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
this
|
|
91
|
-
}
|
|
92
|
-
this.#filter([]);
|
|
93
|
-
await this.host.updateComplete;
|
|
94
|
-
this.#emitFilteredEvent({ key: expression.key, state: state?.all ?? [] });
|
|
77
|
+
await this.#applyWithEvents(expression.key, [expression], 'remove', () => {
|
|
78
|
+
state?.remove(expression);
|
|
79
|
+
if (state?.empty) {
|
|
80
|
+
this.reset(state.key);
|
|
81
|
+
}
|
|
82
|
+
this.#filter([]);
|
|
83
|
+
});
|
|
95
84
|
}
|
|
96
|
-
async filterWithEvent(expression, type) {
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
85
|
+
async filterWithEvent(expression, type, target = expression) {
|
|
86
|
+
await this.#applyWithEvents(expression.key, [expression], type, () => {
|
|
87
|
+
if (target !== expression) {
|
|
88
|
+
Object.assign(target, expression);
|
|
89
|
+
}
|
|
90
|
+
this.#filter(target);
|
|
91
|
+
});
|
|
103
92
|
}
|
|
104
93
|
filter(expression) {
|
|
105
94
|
this.#filter(asArray(expression).map((expr) => Object.assign(this.getDefaultExpression(this.host.getColumn(expr.key)), expr)));
|
|
106
95
|
}
|
|
107
96
|
setRaw(expressions) {
|
|
108
97
|
for (const expr of expressions) {
|
|
109
|
-
this.state.set(expr);
|
|
98
|
+
this.state.set({ ...expr });
|
|
110
99
|
}
|
|
111
100
|
}
|
|
112
101
|
resolveConditions() {
|
|
113
102
|
for (const tree of this.state.values) {
|
|
114
103
|
const column = this.host.getColumn(tree.key);
|
|
115
|
-
if (!column)
|
|
104
|
+
if (!column) {
|
|
116
105
|
continue;
|
|
106
|
+
}
|
|
117
107
|
const defaults = this.getDefaultExpression(column);
|
|
118
108
|
for (const expr of tree.all) {
|
|
119
109
|
if (isString(expr.condition)) {
|
|
120
|
-
expr.condition =
|
|
110
|
+
expr.condition = resolveCondition(column, expr.condition);
|
|
121
111
|
}
|
|
122
112
|
if (expr.caseSensitive === undefined) {
|
|
123
113
|
expr.caseSensitive = defaults.caseSensitive;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter.js","sourceRoot":"","sources":["../../src/controllers/filter.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ReactiveController } from 'lit';\nimport type IgcFilterRow from '../components/filter-row.js';\nimport type { IgcFilteredEvent } from '../components/grid.js';\nimport { PIPELINE } from '../internal/constants.js';\nimport type { ColumnConfiguration, Keys } from '../internal/types.js';\nimport { asArray, getFilterOperandsFor, isString } from '../internal/utils.js';\nimport { FilterState } from '../operations/filter/state.js';\nimport type { FilterExpression } from '../operations/filter/types.js';\nimport type { StateController } from './state.js';\n\nexport class FilterController<T extends object> implements ReactiveController {\n private readonly _stateController: StateController<T>;\n\n constructor(state: StateController<T>) {\n this._stateController = state;\n this._stateController.host.addController(this);\n }\n\n public state: FilterState<T> = new FilterState();\n\n public get host() {\n return this._stateController.host;\n }\n\n public get filterRow(): IgcFilterRow<T> | null {\n return this._stateController.filterRow;\n }\n\n get #virtualizer() {\n return this._stateController.virtualizer;\n }\n\n #emitFilteringEvent(expression: FilterExpression<T>, type: 'add' | 'modify' | 'remove') {\n return this.host.emitEvent('filtering', {\n detail: {\n key: expression.key,\n expressions: [expression],\n type,\n },\n cancelable: true,\n });\n }\n\n #emitFilteredEvent(detail?: IgcFilteredEvent<T>) {\n return this.host.emitEvent('filtered', { detail });\n }\n\n #filter(expression: FilterExpression<T> | FilterExpression<T>[]) {\n for (const expr of asArray(expression)) {\n this.state.set(expr);\n }\n\n // HACK: In the case where the scrollTop is a large and amount and a big chunk of data is filtered out\n // HACK: the virtualizer can't recalculate its scroll position correctly. Thus, we reset the scrollTop state.\n this.#virtualizer?.scrollTo({ top: 0 });\n this.host.requestUpdate(PIPELINE);\n }\n\n public hostConnected() {}\n\n public hostUpdate(): void {\n this.filterRow?.requestUpdate();\n }\n\n public get(key: Keys<T>) {\n return this.state.get(key);\n }\n\n public reset(key?: Keys<T>) {\n key ? this.state.delete(key) : this.state.clear();\n }\n\n public setActiveColumn(column?: ColumnConfiguration<T>) {\n if (column?.filterable && this.filterRow?.active) {\n this.filterRow.column = column;\n this.filterRow.expression = this.getDefaultExpression(column);\n this.host.requestUpdate();\n }\n }\n\n public getDefaultExpression(column: ColumnConfiguration<T>) {\n const caseSensitive = Boolean(column.filteringCaseSensitive);\n const operands = getFilterOperandsFor(column);\n const keys = Object.keys(operands) as (keyof typeof operands)[];\n\n // XXX: Types\n return {\n key: column.field,\n condition: operands[keys[0]],\n caseSensitive,\n } as unknown as FilterExpression<T>;\n }\n\n public async removeAllExpressions(key: Keys<T>) {\n const state = this.get(key)?.all ?? [];\n\n if (\n !this.host.emitEvent('filtering', {\n detail: {\n key,\n expressions: state,\n type: 'remove',\n },\n cancelable: true,\n })\n ) {\n return;\n }\n\n this.reset(key);\n this.#filter([]);\n\n await this.host.updateComplete;\n this.#emitFilteredEvent({ key, state: this.get(key)?.all ?? [] });\n }\n\n public async removeExpression(expression: FilterExpression<T>) {\n const state = this.get(expression.key);\n\n if (!this.#emitFilteringEvent(expression, 'remove')) {\n return;\n }\n\n state?.remove(expression);\n\n if (state?.empty) {\n this.reset(state.key);\n }\n\n this.#filter([]);\n\n await this.host.updateComplete;\n this.#emitFilteredEvent({ key: expression.key, state: state?.all ?? [] });\n }\n\n public async filterWithEvent(expression: FilterExpression<T>, type: 'add' | 'modify' | 'remove') {\n if (!this.#emitFilteringEvent(expression, type)) {\n return;\n }\n\n this.#filter(expression);\n\n await this.host.updateComplete;\n this.#emitFilteredEvent({ key: expression.key, state: this.get(expression.key)?.all ?? [] });\n }\n\n public filter(expression: FilterExpression<T> | FilterExpression<T>[]) {\n this.#filter(\n asArray(expression).map((expr) =>\n Object.assign(this.getDefaultExpression(this.host.getColumn(expr.key)!), expr)\n )\n );\n }\n\n /**\n * Stores expressions directly in the filter state without requiring column configuration.\n * Used when setting initial filter expressions before columns are available.\n */\n public setRaw(expressions: FilterExpression<T>[]) {\n for (const expr of expressions) {\n this.state.set(expr);\n }\n }\n\n /**\n * Resolves any string conditions in the current filter state using available column configuration.\n * Called after columns become available to finalize deferred expressions.\n */\n public resolveConditions() {\n for (const tree of this.state.values) {\n const column = this.host.getColumn(tree.key);\n if (!column) continue;\n const defaults = this.getDefaultExpression(column);\n for (const expr of tree.all) {\n if (isString(expr.condition)) {\n (expr as any).condition = (getFilterOperandsFor(column) as any)[expr.condition as string];\n }\n if (expr.caseSensitive === undefined) {\n expr.caseSensitive = defaults.caseSensitive;\n }\n }\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"filter.js","sourceRoot":"","sources":["../../src/controllers/filter.ts"],"names":[],"mappings":"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","sourcesContent":["import type IgcFilterRow from '../components/filter-row.js';\nimport type { IgcFilteredEvent, IgcFilteringEvent } from '../components/grid.js';\nimport { PIPELINE } from '../internal/constants.js';\nimport type { ColumnConfiguration, Keys } from '../internal/types.js';\nimport { asArray, getFilterOperandsFor, isString, resolveCondition } from '../internal/utils.js';\nimport { FilterState } from '../operations/filter/state.js';\nimport type { FilterExpression } from '../operations/filter/types.js';\nimport type { GridDOMController } from './dom.js';\nimport type { StateController } from './state.js';\n\ntype FilterEventType = IgcFilteringEvent<object>['type'];\n\nexport class FilterController<T extends object> {\n private readonly _stateController: StateController<T>;\n private readonly _dom: GridDOMController<T>;\n\n constructor(state: StateController<T>, dom: GridDOMController<T>) {\n this._stateController = state;\n this._dom = dom;\n }\n\n public state: FilterState<T> = new FilterState();\n\n public get host() {\n return this._stateController.host;\n }\n\n public get filterRow(): IgcFilterRow<T> | null {\n return this._dom.filterRow;\n }\n\n #emitFilteringEvent(key: Keys<T>, expressions: FilterExpression<T>[], type: FilterEventType) {\n return this.host.emitEvent('filtering', {\n detail: { key, expressions, type },\n cancelable: true,\n });\n }\n\n #emitFilteredEvent(detail: IgcFilteredEvent<T>) {\n return this.host.emitEvent('filtered', { detail });\n }\n\n #filter(expression: FilterExpression<T> | FilterExpression<T>[]) {\n for (const expr of asArray(expression)) {\n this.state.set(expr);\n }\n\n // HACK: a large scrollTop plus a heavy filter broke the scroll position. Reset it.\n this._dom.resetScrollPosition();\n this._stateController.updateObservers();\n this.host.requestUpdate(PIPELINE);\n }\n\n public get(key: Keys<T>) {\n return this.state.get(key);\n }\n\n public reset(key?: Keys<T>) {\n if (key === undefined) {\n this.state.clear();\n } else {\n this.state.delete(key);\n }\n\n // The filter row renders its chips from this state.\n this._stateController.updateObservers();\n }\n\n public setActiveColumn(column?: ColumnConfiguration<T>) {\n const filterRow = this.filterRow;\n\n if (!(column?.filterable && filterRow?.active)) {\n return;\n }\n\n filterRow.column = column;\n filterRow.expression = this.getDefaultExpression(column);\n\n // The header row marks the filtered column.\n this._stateController.updateObservers();\n }\n\n public getDefaultExpression(column: ColumnConfiguration<T>) {\n return {\n key: column.field,\n condition: Object.values(getFilterOperandsFor(column))[0],\n caseSensitive: Boolean(column.filteringCaseSensitive),\n } as unknown as FilterExpression<T>;\n }\n\n /** Emits `filtering`. If not canceled: commits, awaits the pipeline, emits `filtered`. */\n async #applyWithEvents(\n key: Keys<T>,\n expressions: FilterExpression<T>[],\n type: FilterEventType,\n commit: () => void\n ) {\n if (!this.#emitFilteringEvent(key, expressions, type)) {\n return;\n }\n\n commit();\n\n await this.host._pipelineComplete;\n this.#emitFilteredEvent({ key, state: this.get(key)?.all ?? [] });\n }\n\n public async removeAllExpressions(key: Keys<T>) {\n await this.#applyWithEvents(key, this.get(key)?.all ?? [], 'remove', () => {\n this.reset(key);\n this.#filter([]);\n });\n }\n\n public async removeExpression(expression: FilterExpression<T>) {\n const state = this.get(expression.key);\n\n await this.#applyWithEvents(expression.key, [expression], 'remove', () => {\n state?.remove(expression);\n\n if (state?.empty) {\n this.reset(state.key);\n }\n\n this.#filter([]);\n });\n }\n\n /**\n * Emits `filtering` for `expression` and, if not canceled, applies it.\n *\n * @remarks\n * `expression` is a candidate copy of the stored `target`, so a canceled event\n * leaves `target` untouched. On commit it merges into `target`, keeping the\n * identity the expression tree and the chip selection use.\n */\n public async filterWithEvent(\n expression: FilterExpression<T>,\n type: FilterEventType,\n target: FilterExpression<T> = expression\n ) {\n await this.#applyWithEvents(expression.key, [expression], type, () => {\n if (target !== expression) {\n Object.assign(target, expression);\n }\n\n this.#filter(target);\n });\n }\n\n public filter(expression: FilterExpression<T> | FilterExpression<T>[]) {\n this.#filter(\n asArray(expression).map((expr) =>\n Object.assign(this.getDefaultExpression(this.host.getColumn(expr.key)!), expr)\n )\n );\n }\n\n /** Stores copies before columns exist. `resolveConditions` rewrites them later. */\n public setRaw(expressions: FilterExpression<T>[]) {\n for (const expr of expressions) {\n this.state.set({ ...expr });\n }\n }\n\n /** Resolves string conditions and default case sensitivity once columns exist. */\n public resolveConditions() {\n for (const tree of this.state.values) {\n const column = this.host.getColumn(tree.key);\n\n if (!column) {\n continue;\n }\n\n const defaults = this.getDefaultExpression(column);\n\n for (const expr of tree.all) {\n if (isString(expr.condition)) {\n (expr as any).condition = resolveCondition(column, expr.condition);\n }\n if (expr.caseSensitive === undefined) {\n expr.caseSensitive = defaults.caseSensitive;\n }\n }\n }\n }\n}\n"]}
|
|
@@ -1,30 +1,25 @@
|
|
|
1
1
|
import type { ReactiveController } from 'lit';
|
|
2
|
-
import type
|
|
3
|
-
import type {
|
|
2
|
+
import type { ActiveNode, NavigateToOptions } from '../internal/types.js';
|
|
3
|
+
import type { GridDOMController } from './dom.js';
|
|
4
4
|
import type { StateController } from './state.js';
|
|
5
|
+
/** The active node a row at `index` receives: only the active row sees it. */
|
|
6
|
+
export declare function activeNodeFor<T extends object>(active: ActiveNode<T>, index: number): ActiveNode<T>;
|
|
5
7
|
export declare class NavigationController<T extends object> implements ReactiveController {
|
|
8
|
+
#private;
|
|
6
9
|
protected _state: StateController<T>;
|
|
7
|
-
protected
|
|
8
|
-
protected
|
|
9
|
-
protected
|
|
10
|
-
protected _active:
|
|
10
|
+
protected _dom: GridDOMController<T>;
|
|
11
|
+
protected handlers: Map<string, () => void>;
|
|
12
|
+
protected get _virtualizer(): import("igniteui-webcomponents").IgcVirtualScrollComponent<any> | null;
|
|
13
|
+
protected _active: ActiveNode<T>;
|
|
11
14
|
protected get nextNode(): ActiveNode<T>;
|
|
12
15
|
protected get _columns(): import("../index.js").ColumnConfiguration<T>[];
|
|
13
|
-
protected get _firstColumn():
|
|
14
|
-
protected
|
|
15
|
-
protected getNextColumn(key: Keys<T>): Exclude<keyof T & string, keyof T> | (Keys<T> & string) | (Keys<T> & number) | (Keys<T> & symbol) | (Keys<T> & `${string}.${string}`) | (Keys<T> & `${string}.${string}.${string}`);
|
|
16
|
-
protected queryRowByIndex(index: number): IgcGridLiteRow<T>;
|
|
16
|
+
protected get _firstColumn(): import("../index.js").Keys<any>;
|
|
17
|
+
protected queryRowByIndex(index: number): import("../components/row.js").default<T> | undefined;
|
|
17
18
|
protected scrollToCell(node: ActiveNode<T>): void;
|
|
18
19
|
get active(): ActiveNode<T>;
|
|
19
20
|
set active(node: ActiveNode<T>);
|
|
20
|
-
constructor(_state: StateController<T>);
|
|
21
|
-
protected home(): void;
|
|
22
|
-
protected end(): void;
|
|
23
|
-
protected arrowDown(): void;
|
|
24
|
-
protected arrowUp(): void;
|
|
25
|
-
protected arrowLeft(): void;
|
|
26
|
-
protected arrowRight(): void;
|
|
21
|
+
constructor(_state: StateController<T>, _dom: GridDOMController<T>);
|
|
27
22
|
hostDisconnected(): void;
|
|
28
23
|
navigate(event: KeyboardEvent): void;
|
|
29
|
-
navigateTo(row: number,
|
|
24
|
+
navigateTo(row: number, options?: NavigateToOptions<T>): Promise<void>;
|
|
30
25
|
}
|