igniteui-grid-lite 0.0.1 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +233 -8
- package/components/cell.d.ts +1 -1
- package/components/cell.js +2 -3
- package/components/cell.js.map +1 -1
- package/components/column.d.ts +39 -0
- package/components/column.js +77 -0
- package/components/column.js.map +1 -0
- package/components/filter-row.d.ts +1 -1
- package/components/filter-row.js +45 -33
- package/components/filter-row.js.map +1 -1
- package/components/grid.d.ts +35 -35
- package/components/grid.js +147 -107
- package/components/grid.js.map +1 -1
- package/components/header-row.d.ts +5 -8
- package/components/header-row.js +18 -28
- package/components/header-row.js.map +1 -1
- package/components/header.d.ts +2 -1
- package/components/header.js +13 -11
- package/components/header.js.map +1 -1
- package/components/row.d.ts +3 -5
- package/components/row.js +6 -12
- package/components/row.js.map +1 -1
- package/components/virtualizer.d.ts +0 -1
- package/components/virtualizer.js +0 -5
- package/components/virtualizer.js.map +1 -1
- package/controllers/data-operation.d.ts +4 -1
- package/controllers/data-operation.js +5 -1
- package/controllers/data-operation.js.map +1 -1
- package/controllers/dom.d.ts +9 -10
- package/controllers/dom.js +20 -34
- package/controllers/dom.js.map +1 -1
- package/controllers/filter.d.ts +7 -4
- package/controllers/filter.js +8 -5
- package/controllers/filter.js.map +1 -1
- package/controllers/navigation.d.ts +8 -8
- package/controllers/navigation.js +28 -28
- package/controllers/navigation.js.map +1 -1
- package/controllers/sort.d.ts +4 -4
- package/controllers/sort.js +2 -2
- package/controllers/sort.js.map +1 -1
- package/controllers/state.d.ts +32 -15
- package/controllers/state.js +54 -17
- package/controllers/state.js.map +1 -1
- package/custom-elements.json +924 -190
- package/docs/assets/hierarchy.js +1 -1
- package/docs/assets/highlight.css +27 -13
- package/docs/assets/main.js +2 -2
- package/docs/assets/navigation.js +1 -1
- package/docs/assets/search.js +1 -1
- package/docs/assets/style.css +3 -3
- package/docs/classes/IgcGridLite.html +24 -26
- package/docs/classes/IgcGridLiteColumn.html +38 -0
- package/docs/hierarchy.html +1 -1
- package/docs/index.html +193 -11
- package/docs/interfaces/BaseColumnConfiguration.html +11 -11
- package/docs/interfaces/BaseColumnSortConfiguration.html +4 -4
- package/docs/interfaces/BaseFilterExpression.html +6 -6
- package/docs/interfaces/BaseIgcCellContext.html +6 -6
- package/docs/interfaces/BaseSortingExpression.html +12 -0
- package/docs/interfaces/ColumnFilterConfiguration.html +3 -3
- package/docs/interfaces/DataPipelineConfiguration.html +4 -4
- package/docs/interfaces/GridLiteSortingOptions.html +4 -0
- package/docs/interfaces/IgcFilteredEvent.html +4 -4
- package/docs/interfaces/IgcFilteringEvent.html +5 -5
- package/docs/interfaces/IgcGridLiteEventMap.html +6 -6
- package/docs/interfaces/IgcHeaderContext.html +4 -4
- package/docs/media/LICENSE +9 -0
- package/docs/modules.html +1 -1
- package/docs/types/BasePropertyType.html +2 -2
- package/docs/types/BaseSortComparer.html +2 -2
- package/docs/types/ColumnConfiguration.html +2 -2
- package/docs/types/ColumnSortConfiguration.html +2 -2
- package/docs/types/DataPipelineHook.html +2 -2
- package/docs/types/DataPipelineParams.html +5 -5
- package/docs/types/DataType.html +2 -2
- package/docs/types/FilterCriteria.html +2 -2
- package/docs/types/FilterExpression.html +2 -2
- package/docs/types/IgcCellContext.html +2 -2
- package/docs/types/Keys.html +2 -2
- package/docs/types/PropertyType.html +2 -2
- package/docs/types/SortComparer.html +2 -2
- package/docs/types/SortState.html +2 -2
- package/docs/types/SortingDirection.html +2 -2
- package/docs/types/SortingExpression.html +2 -0
- package/index.d.ts +3 -2
- package/index.js +1 -0
- package/index.js.map +1 -1
- package/internal/constants.js +5 -1
- package/internal/constants.js.map +1 -1
- package/internal/context.d.ts +9 -0
- package/internal/context.js +7 -0
- package/internal/context.js.map +1 -0
- package/internal/element-from-event-path.d.ts +2 -0
- package/internal/element-from-event-path.js +12 -0
- package/internal/element-from-event-path.js.map +1 -0
- package/internal/part-map.d.ts +16 -3
- package/internal/part-map.js +44 -4
- package/internal/part-map.js.map +1 -1
- package/internal/tags.d.ts +1 -0
- package/internal/tags.js +1 -0
- package/internal/tags.js.map +1 -1
- package/internal/theming.js +5 -7
- package/internal/theming.js.map +1 -1
- package/internal/types.d.ts +3 -7
- package/internal/types.js.map +1 -1
- package/internal/utils.d.ts +6 -2
- package/internal/utils.js +43 -14
- package/internal/utils.js.map +1 -1
- package/operations/filter/tree.d.ts +1 -1
- package/operations/sort/types.d.ts +4 -4
- package/operations/sort/types.js.map +1 -1
- package/operations/sort.d.ts +2 -2
- package/operations/sort.js.map +1 -1
- package/package.json +2 -2
- package/styles/_common.css.js +1 -1
- package/styles/_common.css.js.map +1 -1
- package/styles/body-cell/body-cell.css.js +1 -1
- package/styles/body-cell/body-cell.css.js.map +1 -1
- package/styles/body-row/body-row.css.js +1 -1
- package/styles/body-row/body-row.css.js.map +1 -1
- package/styles/filter-row/filter-row.css.js +1 -1
- package/styles/filter-row/filter-row.css.js.map +1 -1
- package/styles/header-cell/header-cell.css.js +1 -1
- package/styles/header-cell/header-cell.css.js.map +1 -1
- package/styles/header-row/header-row.base.css.js +1 -1
- package/styles/header-row/header-row.base.css.js.map +1 -1
- package/styles/themes/dark/_themes.css.js +3 -0
- package/styles/themes/dark/_themes.css.js.map +1 -0
- package/styles/themes/dark/grid.bootstrap.css.js +3 -0
- package/styles/themes/dark/grid.bootstrap.css.js.map +1 -0
- package/styles/themes/dark/grid.fluent.css.js +3 -0
- package/styles/themes/dark/grid.fluent.css.js.map +1 -0
- package/styles/themes/dark/grid.indigo.css.js +3 -0
- package/styles/themes/dark/grid.indigo.css.js.map +1 -0
- package/styles/themes/dark/grid.material.css.js +3 -0
- package/styles/themes/dark/grid.material.css.js.map +1 -0
- package/styles/themes/grid-header-themes.d.ts +2 -0
- package/styles/themes/grid-header-themes.js +21 -0
- package/styles/themes/grid-header-themes.js.map +1 -0
- package/styles/themes/grid-themes.d.ts +2 -0
- package/styles/{grid/themes/themes.js → themes/grid-themes.js} +17 -9
- package/styles/themes/grid-themes.js.map +1 -0
- package/styles/themes/grid.base.css.js +3 -0
- package/styles/themes/grid.base.css.js.map +1 -0
- package/styles/themes/light/_themes.css.js +3 -0
- package/styles/themes/light/_themes.css.js.map +1 -0
- package/styles/themes/light/grid.bootstrap.css.js +3 -0
- package/styles/themes/light/grid.bootstrap.css.js.map +1 -0
- package/styles/themes/light/grid.fluent.css.js +3 -0
- package/styles/themes/light/grid.fluent.css.js.map +1 -0
- package/styles/themes/light/grid.indigo.css.d.ts +1 -0
- package/styles/themes/light/grid.indigo.css.js +3 -0
- package/styles/themes/light/grid.indigo.css.js.map +1 -0
- package/styles/themes/light/grid.material.css.d.ts +1 -0
- package/styles/themes/light/grid.material.css.js +3 -0
- package/styles/themes/light/grid.material.css.js.map +1 -0
- package/styles/themes/light/grid.shared.css.d.ts +1 -0
- package/styles/themes/light/grid.shared.css.js +3 -0
- package/styles/themes/light/grid.shared.css.js.map +1 -0
- package/styles/themes/shared/grid.common.css.d.ts +1 -0
- package/styles/themes/shared/grid.common.css.js +3 -0
- package/styles/themes/shared/grid.common.css.js.map +1 -0
- package/styles/themes/shared/header.bootstrap.css.d.ts +1 -0
- package/styles/themes/shared/header.bootstrap.css.js +3 -0
- package/styles/themes/shared/header.bootstrap.css.js.map +1 -0
- package/styles/themes/shared/header.fluent.css.d.ts +1 -0
- package/styles/themes/shared/header.fluent.css.js +3 -0
- package/styles/themes/shared/header.fluent.css.js.map +1 -0
- package/docs/interfaces/BaseSortExpression.html +0 -12
- package/docs/interfaces/GridSortConfiguration.html +0 -6
- package/docs/types/SortExpression.html +0 -2
- package/styles/grid/themes/dark/grid.bootstrap.css.js +0 -3
- package/styles/grid/themes/dark/grid.bootstrap.css.js.map +0 -1
- package/styles/grid/themes/dark/grid.fluent.css.js +0 -3
- package/styles/grid/themes/dark/grid.fluent.css.js.map +0 -1
- package/styles/grid/themes/dark/grid.indigo.css.js +0 -3
- package/styles/grid/themes/dark/grid.indigo.css.js.map +0 -1
- package/styles/grid/themes/dark/grid.material.css.js +0 -3
- package/styles/grid/themes/dark/grid.material.css.js.map +0 -1
- package/styles/grid/themes/grid.base.css.js +0 -3
- package/styles/grid/themes/grid.base.css.js.map +0 -1
- package/styles/grid/themes/light/grid.bootstrap.css.js +0 -3
- package/styles/grid/themes/light/grid.bootstrap.css.js.map +0 -1
- package/styles/grid/themes/light/grid.fluent.css.js +0 -3
- package/styles/grid/themes/light/grid.fluent.css.js.map +0 -1
- package/styles/grid/themes/light/grid.indigo.css.js +0 -3
- package/styles/grid/themes/light/grid.indigo.css.js.map +0 -1
- package/styles/grid/themes/light/grid.material.css.js +0 -3
- package/styles/grid/themes/light/grid.material.css.js.map +0 -1
- package/styles/grid/themes/themes.d.ts +0 -2
- package/styles/grid/themes/themes.js.map +0 -1
- /package/styles/{grid/themes/dark/grid.bootstrap.css.d.ts → themes/dark/_themes.css.d.ts} +0 -0
- /package/styles/{grid/themes/light → themes/dark}/grid.bootstrap.css.d.ts +0 -0
- /package/styles/{grid/themes → themes}/dark/grid.fluent.css.d.ts +0 -0
- /package/styles/{grid/themes → themes}/dark/grid.indigo.css.d.ts +0 -0
- /package/styles/{grid/themes → themes}/dark/grid.material.css.d.ts +0 -0
- /package/styles/{grid/themes → themes}/grid.base.css.d.ts +0 -0
- /package/styles/{grid/themes/light/grid.fluent.css.d.ts → themes/light/_themes.css.d.ts} +0 -0
- /package/styles/{grid/themes/light/grid.indigo.css.d.ts → themes/light/grid.bootstrap.css.d.ts} +0 -0
- /package/styles/{grid/themes/light/grid.material.css.d.ts → themes/light/grid.fluent.css.d.ts} +0 -0
package/controllers/dom.js
CHANGED
|
@@ -1,54 +1,40 @@
|
|
|
1
|
-
import { html } from 'lit';
|
|
2
|
-
import { styleMap } from 'lit/directives/style-map.js';
|
|
3
1
|
import { registerGridIcons } from '../internal/icon-registry.js';
|
|
4
2
|
import { applyColumnWidths } from '../internal/utils.js';
|
|
5
|
-
|
|
3
|
+
class GridDOMController {
|
|
6
4
|
constructor(host, state) {
|
|
7
|
-
this.host = host;
|
|
8
|
-
this.state = state;
|
|
9
|
-
this.#initialSize = () => {
|
|
10
|
-
setTimeout(() => this.setScrollOffset());
|
|
11
|
-
};
|
|
12
5
|
this.columnSizes = {};
|
|
13
|
-
this.
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
part="row"
|
|
17
|
-
style=${styleMap({ ...this.columnSizes, ...this.getActiveRowStyles(index) })}
|
|
18
|
-
.index=${index}
|
|
19
|
-
.activeNode=${this.state.active}
|
|
20
|
-
.data=${data}
|
|
21
|
-
.columns=${this.host.columns}
|
|
22
|
-
>
|
|
23
|
-
</igc-grid-lite-row>
|
|
24
|
-
`;
|
|
25
|
-
};
|
|
26
|
-
this.host.addController(this);
|
|
6
|
+
this._host = host;
|
|
7
|
+
this._state = state;
|
|
8
|
+
this._host.addController(this);
|
|
27
9
|
}
|
|
28
|
-
|
|
29
|
-
get container() {
|
|
30
|
-
return this.host.scrollContainer;
|
|
31
|
-
}
|
|
32
|
-
async hostConnected() {
|
|
10
|
+
hostConnected() {
|
|
33
11
|
registerGridIcons();
|
|
34
12
|
this.setGridColumnSizes();
|
|
35
|
-
|
|
36
|
-
|
|
13
|
+
this._host.updateComplete.then(() => {
|
|
14
|
+
this._state.virtualizer?.addEventListener('visibilityChanged', () => {
|
|
15
|
+
this.setScrollOffset();
|
|
16
|
+
}, { once: true });
|
|
17
|
+
});
|
|
37
18
|
}
|
|
38
19
|
hostUpdate() {
|
|
39
20
|
this.setScrollOffset();
|
|
40
21
|
this.setGridColumnSizes();
|
|
41
22
|
}
|
|
42
23
|
setScrollOffset() {
|
|
43
|
-
const size = this.
|
|
44
|
-
|
|
24
|
+
const size = this._state.virtualizer
|
|
25
|
+
? this._state.virtualizer.offsetWidth - this._state.virtualizer.clientWidth
|
|
26
|
+
: 0;
|
|
27
|
+
this._host.style.setProperty('--scrollbar-offset', `${size}px`);
|
|
45
28
|
}
|
|
46
29
|
setGridColumnSizes() {
|
|
47
|
-
this.columnSizes = applyColumnWidths(this.
|
|
30
|
+
this.columnSizes = applyColumnWidths(this._state.columns);
|
|
48
31
|
}
|
|
49
32
|
getActiveRowStyles(index) {
|
|
50
|
-
|
|
51
|
-
return row === index ? { 'z-index': '3' } : {};
|
|
33
|
+
return this._state.active.row === index ? { 'z-index': '3' } : {};
|
|
52
34
|
}
|
|
53
35
|
}
|
|
36
|
+
function createDomController(host, state) {
|
|
37
|
+
return new GridDOMController(host, state);
|
|
38
|
+
}
|
|
39
|
+
export { createDomController };
|
|
54
40
|
//# 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":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAGzD,MAAM,iBAAiB;IAIrB,YAAY,IAAiB,EAAE,KAAyB;QAMjD,gBAAW,GAAc,EAAE,CAAC;QALjC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAIM,aAAa;QAClB,iBAAiB,EAAE,CAAC;QACpB,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAE1B,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE;YAClC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,gBAAgB,CACvC,mBAAmB,EACnB,GAAG,EAAE;gBACH,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,CAAC,EACD,EAAE,IAAI,EAAE,IAAI,EAAE,CACf,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,UAAU;QACf,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAEM,eAAe;QACpB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW;YAClC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,WAAW;YAC3E,CAAC,CAAC,CAAC,CAAC;QACN,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,oBAAoB,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC;IAClE,CAAC;IAES,kBAAkB;QAC1B,IAAI,CAAC,WAAW,GAAG,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC5D,CAAC;IAEM,kBAAkB,CAAC,KAAa;QACrC,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACpE,CAAC;CACF;AAED,SAAS,mBAAmB,CAC1B,IAAiB,EACjB,KAAyB;IAEzB,OAAO,IAAI,iBAAiB,CAAI,IAAI,EAAE,KAAK,CAAC,CAAC;AAC/C,CAAC;AAED,OAAO,EAAE,mBAAmB,EAAE,CAAC","sourcesContent":["import type { ReactiveController } from 'lit';\nimport type { StyleInfo } from 'lit/directives/style-map.js';\nimport { registerGridIcons } from '../internal/icon-registry.js';\nimport type { GridHost } from '../internal/types.js';\nimport { applyColumnWidths } from '../internal/utils.js';\nimport type { StateController } from './state.js';\n\nclass GridDOMController<T extends object> implements ReactiveController {\n protected readonly _host: GridHost<T>;\n protected readonly _state: StateController<T>;\n\n constructor(host: GridHost<T>, state: StateController<T>) {\n this._host = host;\n this._state = state;\n this._host.addController(this);\n }\n\n public columnSizes: StyleInfo = {};\n\n public hostConnected(): void {\n registerGridIcons();\n this.setGridColumnSizes();\n\n this._host.updateComplete.then(() => {\n this._state.virtualizer?.addEventListener(\n 'visibilityChanged',\n () => {\n this.setScrollOffset();\n },\n { once: true }\n );\n });\n }\n\n public hostUpdate(): void {\n this.setScrollOffset();\n this.setGridColumnSizes();\n }\n\n public setScrollOffset(): void {\n const size = this._state.virtualizer\n ? this._state.virtualizer.offsetWidth - this._state.virtualizer.clientWidth\n : 0;\n this._host.style.setProperty('--scrollbar-offset', `${size}px`);\n }\n\n protected setGridColumnSizes(): void {\n this.columnSizes = applyColumnWidths(this._state.columns);\n }\n\n public getActiveRowStyles(index: number): StyleInfo {\n return this._state.active.row === index ? { 'z-index': '3' } : {};\n }\n}\n\nfunction createDomController<T extends object>(\n host: GridHost<T>,\n state: StateController<T>\n): GridDOMController<T> {\n return new GridDOMController<T>(host, state);\n}\n\nexport { createDomController };\nexport type { GridDOMController };\n"]}
|
package/controllers/filter.d.ts
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
import type { ReactiveController } from 'lit';
|
|
2
|
-
import type
|
|
2
|
+
import type IgcFilterRow from '../components/filter-row.js';
|
|
3
|
+
import type { ColumnConfiguration, Keys } from '../internal/types.js';
|
|
3
4
|
import { FilterState } from '../operations/filter/state.js';
|
|
4
5
|
import type { FilterExpression } from '../operations/filter/types.js';
|
|
6
|
+
import type { StateController } from './state.js';
|
|
5
7
|
export declare class FilterController<T extends object> implements ReactiveController {
|
|
6
8
|
#private;
|
|
7
|
-
|
|
8
|
-
constructor(
|
|
9
|
+
private readonly _stateController;
|
|
10
|
+
constructor(state: StateController<T>);
|
|
9
11
|
state: FilterState<T>;
|
|
10
|
-
get
|
|
12
|
+
get host(): import("../internal/types.js").GridHost<T>;
|
|
13
|
+
get filterRow(): IgcFilterRow<T> | null;
|
|
11
14
|
hostConnected(): void;
|
|
12
15
|
hostUpdate(): void;
|
|
13
16
|
get(key: Keys<T>): import("../operations/filter/tree.js").FilterExpressionTree<T> | undefined;
|
package/controllers/filter.js
CHANGED
|
@@ -2,16 +2,19 @@ import { PIPELINE } from '../internal/constants.js';
|
|
|
2
2
|
import { asArray, getFilterOperandsFor } from '../internal/utils.js';
|
|
3
3
|
import { FilterState } from '../operations/filter/state.js';
|
|
4
4
|
export class FilterController {
|
|
5
|
-
constructor(
|
|
6
|
-
this.host = host;
|
|
5
|
+
constructor(state) {
|
|
7
6
|
this.state = new FilterState();
|
|
8
|
-
this.
|
|
7
|
+
this._stateController = state;
|
|
8
|
+
this._stateController.host.addController(this);
|
|
9
|
+
}
|
|
10
|
+
get host() {
|
|
11
|
+
return this._stateController.host;
|
|
9
12
|
}
|
|
10
13
|
get filterRow() {
|
|
11
|
-
return this.
|
|
14
|
+
return this._stateController.filterRow;
|
|
12
15
|
}
|
|
13
16
|
get #virtualizer() {
|
|
14
|
-
return this.
|
|
17
|
+
return this._stateController.virtualizer;
|
|
15
18
|
}
|
|
16
19
|
#emitFilteringEvent(expression, type) {
|
|
17
20
|
return this.host.emitEvent('filtering', {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter.js","sourceRoot":"","sources":["../../src/controllers/filter.ts"],"names":[],"mappings":"
|
|
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 } 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?.filter && 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 =\n typeof column.filter === 'boolean' ? false : Boolean(column.filter?.caseSensitive);\n const operands = getFilterOperandsFor(column);\n const keys = Object.keys(operands) as Keys<typeof operands>[];\n\n // XXX: Types\n return {\n key: column.key,\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"]}
|
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
import type { ReactiveController } from 'lit';
|
|
2
|
-
import type { ActiveNode,
|
|
2
|
+
import type { ActiveNode, Keys } from '../internal/types.js';
|
|
3
|
+
import type { StateController } from './state.js';
|
|
3
4
|
export declare class NavigationController<T extends object> implements ReactiveController {
|
|
4
|
-
protected
|
|
5
|
+
protected _state: StateController<T>;
|
|
5
6
|
protected handlers: Map<string, (() => void) | (() => void) | (() => void) | (() => void) | (() => void) | (() => void)>;
|
|
6
|
-
protected get
|
|
7
|
-
protected
|
|
7
|
+
protected get _virtualizer(): import("../components/virtualizer.js").default | null;
|
|
8
|
+
protected _navigationState: Map<import("../internal/types.js").NavigationState, ActiveNode<any>>;
|
|
8
9
|
protected _active: Readonly<ActiveNode<any>>;
|
|
9
10
|
protected get nextNode(): ActiveNode<T>;
|
|
10
|
-
protected get
|
|
11
|
-
protected get
|
|
11
|
+
protected get _columns(): import("../index.js").ColumnConfiguration<T, keyof T>[];
|
|
12
|
+
protected get _firstColumn(): (keyof T & string) | (keyof T & number) | (keyof T & symbol);
|
|
12
13
|
protected getPreviousColumn(key: Keys<T>): (keyof T & string) | (keyof T & number) | (keyof T & symbol);
|
|
13
14
|
protected getNextColumn(key: Keys<T>): (keyof T & string) | (keyof T & number) | (keyof T & symbol);
|
|
14
15
|
protected scrollToCell(node: ActiveNode<T>): void;
|
|
15
16
|
get active(): ActiveNode<T>;
|
|
16
17
|
set active(node: ActiveNode<T>);
|
|
17
|
-
constructor(
|
|
18
|
+
constructor(_state: StateController<T>);
|
|
18
19
|
protected home(): void;
|
|
19
20
|
protected end(): void;
|
|
20
21
|
protected arrowDown(): void;
|
|
21
22
|
protected arrowUp(): void;
|
|
22
23
|
protected arrowLeft(): void;
|
|
23
24
|
protected arrowRight(): void;
|
|
24
|
-
hostConnected(): void;
|
|
25
25
|
hostDisconnected(): void;
|
|
26
26
|
navigate(event: KeyboardEvent): void;
|
|
27
27
|
}
|
|
@@ -1,29 +1,30 @@
|
|
|
1
|
-
import IgcGridLiteRow from '../components/row.js';
|
|
2
1
|
import { NAVIGATION_STATE, SENTINEL_NODE } from '../internal/constants.js';
|
|
2
|
+
import { GRID_ROW_TAG } from '../internal/tags.js';
|
|
3
3
|
export class NavigationController {
|
|
4
|
-
get
|
|
5
|
-
return this.
|
|
4
|
+
get _virtualizer() {
|
|
5
|
+
return this._state.virtualizer;
|
|
6
6
|
}
|
|
7
7
|
get nextNode() {
|
|
8
|
-
const node = this.
|
|
8
|
+
const node = this._navigationState.get('current');
|
|
9
9
|
return node === SENTINEL_NODE
|
|
10
|
-
? { column: this.
|
|
10
|
+
? { column: this._firstColumn, row: 0 }
|
|
11
11
|
: { ...node };
|
|
12
12
|
}
|
|
13
|
-
get
|
|
14
|
-
return this.
|
|
13
|
+
get _columns() {
|
|
14
|
+
return this._state.columns;
|
|
15
15
|
}
|
|
16
|
-
get
|
|
17
|
-
return this.host.getColumn(0).key ?? '';
|
|
16
|
+
get _firstColumn() {
|
|
17
|
+
return this._state.host.getColumn(0).key ?? '';
|
|
18
18
|
}
|
|
19
19
|
getPreviousColumn(key) {
|
|
20
|
-
return this.
|
|
20
|
+
return this._columns[Math.max(this._columns.indexOf(this._state.host.getColumn(key)) - 1, 0)]
|
|
21
|
+
.key;
|
|
21
22
|
}
|
|
22
23
|
getNextColumn(key) {
|
|
23
|
-
return this.
|
|
24
|
+
return this._columns[Math.min(this._columns.indexOf(this._state.host.getColumn(key)) + 1, this._columns.length - 1)].key;
|
|
24
25
|
}
|
|
25
26
|
scrollToCell(node) {
|
|
26
|
-
const row = Array.from(this.
|
|
27
|
+
const row = Array.from(this._virtualizer?.querySelectorAll(GRID_ROW_TAG) ?? []).find((row) => row.index === node.row);
|
|
27
28
|
if (row) {
|
|
28
29
|
row.cells
|
|
29
30
|
.find((cell) => cell.column.key === node.column)
|
|
@@ -34,13 +35,13 @@ export class NavigationController {
|
|
|
34
35
|
return this._active;
|
|
35
36
|
}
|
|
36
37
|
set active(node) {
|
|
37
|
-
this._active = node;
|
|
38
|
-
this.
|
|
39
|
-
this.
|
|
40
|
-
this.host.requestUpdate();
|
|
38
|
+
this._active = node ?? SENTINEL_NODE;
|
|
39
|
+
this._navigationState.set('previous', this._active);
|
|
40
|
+
this._navigationState.set('current', node);
|
|
41
|
+
this._state.host.requestUpdate();
|
|
41
42
|
}
|
|
42
|
-
constructor(
|
|
43
|
-
this.
|
|
43
|
+
constructor(_state) {
|
|
44
|
+
this._state = _state;
|
|
44
45
|
this.handlers = new Map(Object.entries({
|
|
45
46
|
ArrowDown: this.arrowDown,
|
|
46
47
|
ArrowUp: this.arrowUp,
|
|
@@ -49,29 +50,29 @@ export class NavigationController {
|
|
|
49
50
|
Home: this.home,
|
|
50
51
|
End: this.end,
|
|
51
52
|
}));
|
|
52
|
-
this.
|
|
53
|
+
this._navigationState = NAVIGATION_STATE;
|
|
53
54
|
this._active = SENTINEL_NODE;
|
|
54
|
-
this.host.addController(this);
|
|
55
|
+
this._state.host.addController(this);
|
|
55
56
|
}
|
|
56
57
|
home() {
|
|
57
58
|
this.active = Object.assign(this.nextNode, { row: 0 });
|
|
58
|
-
this.
|
|
59
|
+
this._virtualizer?.element(this.active.row)?.scrollIntoView({ block: 'nearest' });
|
|
59
60
|
}
|
|
60
61
|
end() {
|
|
61
|
-
this.active = Object.assign(this.nextNode, { row: this.host.totalItems - 1 });
|
|
62
|
-
this.
|
|
62
|
+
this.active = Object.assign(this.nextNode, { row: this._state.host.totalItems - 1 });
|
|
63
|
+
this._virtualizer?.element(this.active.row)?.scrollIntoView({ block: 'nearest' });
|
|
63
64
|
}
|
|
64
65
|
arrowDown() {
|
|
65
66
|
const next = this.nextNode;
|
|
66
67
|
this.active = Object.assign(next, {
|
|
67
|
-
row: Math.min(next.row + 1, this.host.totalItems - 1),
|
|
68
|
+
row: Math.min(next.row + 1, this._state.host.totalItems - 1),
|
|
68
69
|
});
|
|
69
|
-
this.
|
|
70
|
+
this._virtualizer?.element(next.row)?.scrollIntoView({ block: 'nearest' });
|
|
70
71
|
}
|
|
71
72
|
arrowUp() {
|
|
72
73
|
const next = this.nextNode;
|
|
73
74
|
this.active = Object.assign(next, { row: Math.max(0, next.row - 1) });
|
|
74
|
-
this.
|
|
75
|
+
this._virtualizer?.element(next.row)?.scrollIntoView({ block: 'nearest' });
|
|
75
76
|
}
|
|
76
77
|
arrowLeft() {
|
|
77
78
|
const next = this.nextNode;
|
|
@@ -83,10 +84,9 @@ export class NavigationController {
|
|
|
83
84
|
this.active = Object.assign(next, { column: this.getNextColumn(next.column) });
|
|
84
85
|
this.scrollToCell(this.active);
|
|
85
86
|
}
|
|
86
|
-
hostConnected() { }
|
|
87
87
|
hostDisconnected() {
|
|
88
88
|
this.active = SENTINEL_NODE;
|
|
89
|
-
this.
|
|
89
|
+
this._navigationState = NAVIGATION_STATE;
|
|
90
90
|
}
|
|
91
91
|
navigate(event) {
|
|
92
92
|
if (this.handlers.has(event.key)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navigation.js","sourceRoot":"","sources":["../../src/controllers/navigation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"navigation.js","sourceRoot":"","sources":["../../src/controllers/navigation.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ReactiveController } from 'lit';\nimport type IgcGridLiteRow from '../components/row.js';\nimport { NAVIGATION_STATE, SENTINEL_NODE } from '../internal/constants.js';\nimport { GRID_ROW_TAG } from '../internal/tags.js';\nimport type { ActiveNode, Keys } from '../internal/types.js';\nimport type { StateController } from './state.js';\n\nexport class NavigationController<T extends object> implements ReactiveController {\n protected handlers = new Map(\n Object.entries({\n ArrowDown: this.arrowDown,\n ArrowUp: this.arrowUp,\n ArrowLeft: this.arrowLeft,\n ArrowRight: this.arrowRight,\n Home: this.home,\n End: this.end,\n })\n );\n\n protected get _virtualizer() {\n return this._state.virtualizer;\n }\n\n protected _navigationState = NAVIGATION_STATE;\n protected _active = SENTINEL_NODE;\n\n protected get nextNode() {\n const node = this._navigationState.get('current')!;\n return node === SENTINEL_NODE\n ? { column: this._firstColumn, row: 0 }\n : ({ ...node } as ActiveNode<T>);\n }\n\n protected get _columns() {\n return this._state.columns;\n }\n\n protected get _firstColumn() {\n return this._state.host.getColumn(0)!.key ?? '';\n }\n\n protected getPreviousColumn(key: Keys<T>) {\n return this._columns[Math.max(this._columns.indexOf(this._state.host.getColumn(key)!) - 1, 0)]\n .key;\n }\n\n protected getNextColumn(key: Keys<T>) {\n return this._columns[\n Math.min(\n this._columns.indexOf(this._state.host.getColumn(key)!) + 1,\n this._columns.length - 1\n )\n ].key;\n }\n\n protected scrollToCell(node: ActiveNode<T>) {\n const row = Array.from(this._virtualizer?.querySelectorAll(GRID_ROW_TAG) ?? []).find(\n (row) => row.index === node.row\n ) as unknown as IgcGridLiteRow<T>;\n\n if (row) {\n row.cells\n .find((cell) => cell.column.key === node.column)\n ?.scrollIntoView({ block: 'nearest' });\n }\n }\n\n public get active(): ActiveNode<T> {\n return this._active as ActiveNode<T>;\n }\n\n public set active(node: ActiveNode<T>) {\n this._active = node ?? SENTINEL_NODE;\n this._navigationState.set('previous', this._active);\n this._navigationState.set('current', node);\n this._state.host.requestUpdate();\n }\n\n constructor(protected _state: StateController<T>) {\n this._state.host.addController(this);\n }\n\n protected home() {\n this.active = Object.assign(this.nextNode, { row: 0 });\n this._virtualizer?.element(this.active.row)?.scrollIntoView({ block: 'nearest' });\n }\n\n protected end() {\n this.active = Object.assign(this.nextNode, { row: this._state.host.totalItems - 1 });\n this._virtualizer?.element(this.active.row)?.scrollIntoView({ block: 'nearest' });\n }\n\n protected arrowDown() {\n const next = this.nextNode;\n\n this.active = Object.assign(next, {\n row: Math.min(next.row + 1, this._state.host.totalItems - 1),\n });\n this._virtualizer?.element(next.row)?.scrollIntoView({ block: 'nearest' });\n }\n\n protected arrowUp() {\n const next = this.nextNode;\n this.active = Object.assign(next, { row: Math.max(0, next.row - 1) });\n this._virtualizer?.element(next.row)?.scrollIntoView({ block: 'nearest' });\n }\n\n protected arrowLeft() {\n const next = this.nextNode;\n this.active = Object.assign(next, { column: this.getPreviousColumn(next.column) });\n this.scrollToCell(this.active);\n }\n\n protected arrowRight() {\n const next = this.nextNode;\n this.active = Object.assign(next, { column: this.getNextColumn(next.column) });\n this.scrollToCell(this.active);\n }\n\n public hostDisconnected() {\n this.active = SENTINEL_NODE as ActiveNode<T>;\n this._navigationState = NAVIGATION_STATE;\n }\n\n public navigate(event: KeyboardEvent) {\n if (this.handlers.has(event.key)) {\n event.preventDefault();\n this.handlers.get(event.key)!.call(this);\n }\n }\n}\n"]}
|
package/controllers/sort.d.ts
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import type { ReactiveController } from 'lit';
|
|
2
2
|
import type { ColumnConfiguration, GridHost, Keys } from '../internal/types.js';
|
|
3
|
-
import type {
|
|
3
|
+
import type { SortingExpression, SortState } from '../operations/sort/types.js';
|
|
4
4
|
export declare class SortController<T extends object> implements ReactiveController {
|
|
5
5
|
#private;
|
|
6
6
|
protected host: GridHost<T>;
|
|
7
7
|
constructor(host: GridHost<T>);
|
|
8
8
|
state: SortState<T>;
|
|
9
9
|
sortFromHeaderClick(column: ColumnConfiguration<T>): Promise<void>;
|
|
10
|
-
prepareExpression({ key, sort: options }: ColumnConfiguration<T>):
|
|
10
|
+
prepareExpression({ key, sort: options }: ColumnConfiguration<T>): SortingExpression<T>;
|
|
11
11
|
reset(key?: Keys<T>): void;
|
|
12
|
-
protected _sort(expressions:
|
|
13
|
-
sort(expressions:
|
|
12
|
+
protected _sort(expressions: SortingExpression<T> | SortingExpression<T>[]): void;
|
|
13
|
+
sort(expressions: SortingExpression<T> | SortingExpression<T>[]): void;
|
|
14
14
|
hostConnected(): void;
|
|
15
15
|
}
|
package/controllers/sort.js
CHANGED
|
@@ -7,10 +7,10 @@ export class SortController {
|
|
|
7
7
|
this.host.addController(this);
|
|
8
8
|
}
|
|
9
9
|
get #isMultipleSort() {
|
|
10
|
-
return this.host.
|
|
10
|
+
return this.host.sortingOptions.mode === 'multiple';
|
|
11
11
|
}
|
|
12
12
|
get #isTriStateSort() {
|
|
13
|
-
return
|
|
13
|
+
return true;
|
|
14
14
|
}
|
|
15
15
|
#resolveSortOptions(options) {
|
|
16
16
|
const expr = {
|
package/controllers/sort.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sort.js","sourceRoot":"","sources":["../../src/controllers/sort.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAOpD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAG/C,MAAM,OAAO,cAAc;IACzB,YAAsB,IAAiB;QAAjB,SAAI,GAAJ,IAAI,CAAa;QAIhC,UAAK,GAAiB,IAAI,GAAG,EAAE,CAAC;QAHrC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAID,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"sort.js","sourceRoot":"","sources":["../../src/controllers/sort.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ReactiveController } from 'lit';\nimport { PIPELINE } from '../internal/constants.js';\nimport type {\n ColumnConfiguration,\n ColumnSortConfiguration,\n GridHost,\n Keys,\n} from '../internal/types.js';\nimport { asArray } from '../internal/utils.js';\nimport type { SortingDirection, SortingExpression, SortState } from '../operations/sort/types.js';\n\nexport class SortController<T extends object> implements ReactiveController {\n constructor(protected host: GridHost<T>) {\n this.host.addController(this);\n }\n\n public state: SortState<T> = new Map();\n\n get #isMultipleSort() {\n return this.host.sortingOptions.mode === 'multiple';\n }\n\n get #isTriStateSort() {\n return true;\n }\n\n #resolveSortOptions(options?: boolean | ColumnSortConfiguration<T>) {\n const expr: Pick<SortingExpression<T>, 'caseSensitive' | 'comparer'> = {\n caseSensitive: false,\n comparer: undefined,\n };\n\n if (!options || typeof options === 'boolean') {\n return expr as Partial<SortingExpression<T>>;\n }\n\n return Object.assign(expr, {\n caseSensitive: options.caseSensitive,\n comparer: options.comparer,\n }) as Partial<SortingExpression<T>>;\n }\n\n #createDefaultExpression(key: Keys<T>) {\n const options = this.host.getColumn(key)?.sort;\n\n return {\n key,\n direction: 'ascending',\n ...this.#resolveSortOptions(options),\n } as SortingExpression<T>;\n }\n\n #orderBy(dir?: SortingDirection): SortingDirection {\n return this.#isTriStateSort\n ? dir === 'ascending'\n ? 'descending'\n : dir === 'descending'\n ? 'none'\n : 'ascending'\n : dir === 'ascending'\n ? 'descending'\n : 'ascending';\n }\n\n #emitSortingEvent(detail: SortingExpression<T>) {\n return this.host.emitEvent('sorting', { detail, cancelable: true });\n }\n\n #emitSortedEvent(detail: SortingExpression<T>) {\n return this.host.emitEvent('sorted', { detail });\n }\n\n #setExpression(expression: SortingExpression<T>) {\n expression.direction === 'none'\n ? this.reset(expression.key)\n : this.state.set(expression.key, { ...expression });\n }\n\n public async sortFromHeaderClick(column: ColumnConfiguration<T>) {\n const expression = this.prepareExpression(column);\n\n if (!this.#emitSortingEvent(expression)) {\n return;\n }\n\n if (!this.#isMultipleSort) {\n this.reset();\n }\n\n this._sort(expression);\n\n await this.host.updateComplete;\n this.#emitSortedEvent(expression);\n }\n\n public prepareExpression({ key, sort: options }: ColumnConfiguration<T>): SortingExpression<T> {\n if (this.state.has(key)) {\n const expr = this.state.get(key)!;\n\n return Object.assign(expr, {\n direction: this.#orderBy(expr.direction),\n ...this.#resolveSortOptions(options),\n });\n }\n\n // Initial state\n return this.#createDefaultExpression(key);\n }\n\n public reset(key?: Keys<T>) {\n key ? this.state.delete(key) : this.state.clear();\n }\n\n protected _sort(expressions: SortingExpression<T> | SortingExpression<T>[]) {\n for (const expr of asArray(expressions)) {\n this.#setExpression(expr);\n }\n\n this.host.requestUpdate(PIPELINE);\n }\n\n public sort(expressions: SortingExpression<T> | SortingExpression<T>[]) {\n this._sort(\n asArray(expressions).map((expr) =>\n Object.assign(this.state.get(expr.key) ?? this.#createDefaultExpression(expr.key), expr)\n )\n );\n }\n\n public hostConnected() {}\n}\n"]}
|
package/controllers/state.d.ts
CHANGED
|
@@ -1,24 +1,41 @@
|
|
|
1
1
|
import type { ReactiveController } from 'lit';
|
|
2
|
-
import type
|
|
2
|
+
import type IgcFilterRow from '../components/filter-row.js';
|
|
3
|
+
import type IgcGridLiteHeaderRow from '../components/header-row.js';
|
|
4
|
+
import type IgcGridLiteRow from '../components/row.js';
|
|
5
|
+
import type IgcVirtualizer from '../components/virtualizer.js';
|
|
6
|
+
import type { ActiveNode, ColumnConfiguration, GridHost } from '../internal/types.js';
|
|
3
7
|
import { FilterController } from './filter.js';
|
|
4
8
|
import { NavigationController } from './navigation.js';
|
|
5
9
|
import { ResizeController } from './resize.js';
|
|
6
10
|
import { SortController } from './sort.js';
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
declare class StateController<T extends object> implements ReactiveController {
|
|
12
|
+
private _columns;
|
|
13
|
+
private readonly _observersCallback;
|
|
14
|
+
/** The grid host element. */
|
|
15
|
+
readonly host: GridHost<T>;
|
|
16
|
+
readonly sorting: SortController<T>;
|
|
17
|
+
readonly filtering: FilterController<T>;
|
|
18
|
+
readonly navigation: NavigationController<T>;
|
|
19
|
+
readonly resizing: ResizeController<T>;
|
|
20
|
+
get columns(): ColumnConfiguration<T>[];
|
|
21
|
+
/** Returns the header row element of the grid. */
|
|
22
|
+
get headerRow(): IgcGridLiteHeaderRow<T> | null;
|
|
23
|
+
/** Returns the filter row element of the grid. */
|
|
24
|
+
get filterRow(): IgcFilterRow<T> | null;
|
|
25
|
+
/** Returns the data row elements of the grid. */
|
|
26
|
+
get rows(): IgcGridLiteRow<T>[];
|
|
27
|
+
/** Returns the virtualizer element of the grid. */
|
|
28
|
+
get virtualizer(): IgcVirtualizer | null;
|
|
29
|
+
/** The currently active node in the grid. */
|
|
13
30
|
get active(): ActiveNode<T>;
|
|
31
|
+
/** Sets the currently active node in the grid. */
|
|
14
32
|
set active(node: ActiveNode<T>);
|
|
15
|
-
|
|
16
|
-
get scrollContainer(): import("../components/virtualizer.js").default;
|
|
17
|
-
constructor(host: GridHost<T>);
|
|
18
|
-
protected init(): void;
|
|
19
|
-
hostConnected(): void;
|
|
33
|
+
constructor(host: GridHost<T>, observersCallback: () => void);
|
|
20
34
|
hostUpdate(): void;
|
|
35
|
+
setColumnConfiguration(columns: ColumnConfiguration<T>[]): void;
|
|
36
|
+
setAutoColumnConfiguration(): void;
|
|
37
|
+
updateColumnsConfiguration(config: ColumnConfiguration<T>[]): void;
|
|
21
38
|
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
};
|
|
39
|
+
declare function createStateController<T extends object>(host: GridHost<T>, observersCallback: () => void): StateController<T>;
|
|
40
|
+
export { createStateController };
|
|
41
|
+
export type { StateController };
|
package/controllers/state.js
CHANGED
|
@@ -1,37 +1,74 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { PIPELINE } from '../internal/constants.js';
|
|
2
|
+
import { GRID_BODY, GRID_FILTER_ROW_TAG, GRID_HEADER_ROW_TAG, GRID_ROW_TAG, } from '../internal/tags.js';
|
|
3
|
+
import { createColumnConfiguration, setColumnsFromData } from '../internal/utils.js';
|
|
2
4
|
import { FilterController } from './filter.js';
|
|
3
5
|
import { NavigationController } from './navigation.js';
|
|
4
6
|
import { ResizeController } from './resize.js';
|
|
5
7
|
import { SortController } from './sort.js';
|
|
6
|
-
|
|
8
|
+
class StateController {
|
|
9
|
+
get columns() {
|
|
10
|
+
return this._columns;
|
|
11
|
+
}
|
|
12
|
+
get headerRow() {
|
|
13
|
+
return this.host.renderRoot.querySelector(GRID_HEADER_ROW_TAG);
|
|
14
|
+
}
|
|
15
|
+
get filterRow() {
|
|
16
|
+
return this.host.renderRoot.querySelector(GRID_FILTER_ROW_TAG);
|
|
17
|
+
}
|
|
18
|
+
get rows() {
|
|
19
|
+
return Array.from(this.host.renderRoot.querySelectorAll(GRID_ROW_TAG));
|
|
20
|
+
}
|
|
21
|
+
get virtualizer() {
|
|
22
|
+
return this.host.renderRoot.querySelector(GRID_BODY);
|
|
23
|
+
}
|
|
7
24
|
get active() {
|
|
8
25
|
return this.navigation.active;
|
|
9
26
|
}
|
|
10
27
|
set active(node) {
|
|
11
28
|
this.navigation.active = node;
|
|
12
29
|
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
get scrollContainer() {
|
|
17
|
-
return this.host.scrollContainer;
|
|
18
|
-
}
|
|
19
|
-
constructor(host) {
|
|
30
|
+
constructor(host, observersCallback) {
|
|
31
|
+
this._columns = [];
|
|
32
|
+
this._observersCallback = observersCallback;
|
|
20
33
|
this.host = host;
|
|
21
34
|
this.host.addController(this);
|
|
22
|
-
this.init();
|
|
23
|
-
}
|
|
24
|
-
init() {
|
|
25
35
|
this.sorting = new SortController(this.host);
|
|
26
|
-
this.filtering = new FilterController(this
|
|
27
|
-
this.navigation = new NavigationController(this
|
|
36
|
+
this.filtering = new FilterController(this);
|
|
37
|
+
this.navigation = new NavigationController(this);
|
|
28
38
|
this.resizing = new ResizeController(this.host);
|
|
29
39
|
}
|
|
30
|
-
hostConnected() { }
|
|
31
40
|
hostUpdate() {
|
|
32
41
|
this.headerRow?.requestUpdate();
|
|
33
|
-
this.
|
|
42
|
+
this.virtualizer?.requestUpdate();
|
|
43
|
+
}
|
|
44
|
+
setColumnConfiguration(columns) {
|
|
45
|
+
this._columns = columns.map((column) => createColumnConfiguration(column));
|
|
46
|
+
this._observersCallback.call(this.host);
|
|
47
|
+
this.host.requestUpdate(PIPELINE);
|
|
34
48
|
}
|
|
49
|
+
setAutoColumnConfiguration() {
|
|
50
|
+
if (this.host.autoGenerate && this.host.data.length > 0) {
|
|
51
|
+
this._columns = setColumnsFromData(this.host.data[0]);
|
|
52
|
+
this.host.requestUpdate(PIPELINE);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
updateColumnsConfiguration(config) {
|
|
56
|
+
for (const columnConfig of config) {
|
|
57
|
+
const existing = this._columns.findIndex((column) => column.key === columnConfig.key);
|
|
58
|
+
if (existing !== -1) {
|
|
59
|
+
this._columns[existing] = {
|
|
60
|
+
...this._columns[existing],
|
|
61
|
+
...createColumnConfiguration(columnConfig),
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
this._columns = [...this._columns];
|
|
66
|
+
this._observersCallback.call(this.host);
|
|
67
|
+
this.host.requestUpdate(PIPELINE);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
function createStateController(host, observersCallback) {
|
|
71
|
+
return new StateController(host, observersCallback);
|
|
35
72
|
}
|
|
36
|
-
export
|
|
73
|
+
export { createStateController };
|
|
37
74
|
//# sourceMappingURL=state.js.map
|