@ni/nimble-components 30.0.3 → 30.0.4
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/all-components-bundle.js +21 -13
- package/dist/all-components-bundle.js.map +1 -1
- package/dist/all-components-bundle.min.js +7 -5
- package/dist/all-components-bundle.min.js.map +1 -1
- package/dist/esm/table/models/selection-managers/multi-selection-manager.js +20 -12
- package/dist/esm/table/models/selection-managers/multi-selection-manager.js.map +1 -1
- package/package.json +1 -1
|
@@ -7,29 +7,31 @@ import { SelectionManagerBase } from './selection-manager-base';
|
|
|
7
7
|
export class MultiSelectionManager extends SelectionManagerBase {
|
|
8
8
|
handleRowSelectionToggle(rowState, isSelecting, shiftKey) {
|
|
9
9
|
if (shiftKey) {
|
|
10
|
-
if (this.tryUpdateRangeSelection(rowState.id)) {
|
|
10
|
+
if (this.tryUpdateRangeSelection(rowState.id, true)) {
|
|
11
11
|
// Made a range selection
|
|
12
12
|
return true;
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
|
-
this.shiftSelectStartRowId = rowState.id;
|
|
15
|
+
this.shiftSelectStartRowId = isSelecting ? rowState.id : undefined;
|
|
16
16
|
this.previousShiftSelectRowEndId = undefined;
|
|
17
17
|
this.toggleIsRowSelected(rowState, isSelecting);
|
|
18
18
|
return true;
|
|
19
19
|
}
|
|
20
20
|
handleRowClick(rowState, shiftKey, ctrlKey) {
|
|
21
|
-
if (ctrlKey) {
|
|
22
|
-
this.shiftSelectStartRowId = rowState.id;
|
|
23
|
-
this.previousShiftSelectRowEndId = undefined;
|
|
24
|
-
this.toggleIsRowSelected(rowState);
|
|
25
|
-
return true;
|
|
26
|
-
}
|
|
27
21
|
if (shiftKey) {
|
|
28
|
-
|
|
22
|
+
const additiveSelection = ctrlKey;
|
|
23
|
+
if (this.tryUpdateRangeSelection(rowState.id, additiveSelection)) {
|
|
29
24
|
// Made a range selection
|
|
30
25
|
return true;
|
|
31
26
|
}
|
|
32
27
|
}
|
|
28
|
+
if (ctrlKey) {
|
|
29
|
+
const isSelecting = rowState.selectionState !== TableRowSelectionState.selected;
|
|
30
|
+
this.shiftSelectStartRowId = isSelecting ? rowState.id : undefined;
|
|
31
|
+
this.previousShiftSelectRowEndId = undefined;
|
|
32
|
+
this.toggleIsRowSelected(rowState);
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
33
35
|
this.shiftSelectStartRowId = rowState.id;
|
|
34
36
|
this.previousShiftSelectRowEndId = undefined;
|
|
35
37
|
return this.selectSingleRow(rowState);
|
|
@@ -44,7 +46,7 @@ export class MultiSelectionManager extends SelectionManagerBase {
|
|
|
44
46
|
this.shiftSelectStartRowId = undefined;
|
|
45
47
|
this.previousShiftSelectRowEndId = undefined;
|
|
46
48
|
}
|
|
47
|
-
tryUpdateRangeSelection(rowId) {
|
|
49
|
+
tryUpdateRangeSelection(rowId, additiveSelection) {
|
|
48
50
|
if (this.shiftSelectStartRowId === undefined) {
|
|
49
51
|
return false;
|
|
50
52
|
}
|
|
@@ -53,8 +55,14 @@ export class MultiSelectionManager extends SelectionManagerBase {
|
|
|
53
55
|
if (selectionStartIndex === -1) {
|
|
54
56
|
return false;
|
|
55
57
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
+
let selectionState = {};
|
|
59
|
+
if (additiveSelection) {
|
|
60
|
+
// If the range selection is additive to the existing selection, start with the initial selection state
|
|
61
|
+
// and remove the previous range selection, if any. Otherwise, the range selection will start empty and
|
|
62
|
+
// only contain the new range selection.
|
|
63
|
+
selectionState = this.tanStackTable.getState().rowSelection;
|
|
64
|
+
this.removePreviousRangeSelection(selectionState, selectionStartIndex, allRows);
|
|
65
|
+
}
|
|
58
66
|
this.addNewRangeSelection(selectionState, rowId, selectionStartIndex, allRows);
|
|
59
67
|
this.previousShiftSelectRowEndId = rowId;
|
|
60
68
|
this.tanStackTable.setRowSelection(selectionState);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multi-selection-manager.js","sourceRoot":"","sources":["../../../../../src/table/models/selection-managers/multi-selection-manager.ts"],"names":[],"mappings":"AAIA,OAAO,EAGH,sBAAsB,EAEzB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE;;;GAGG;AACH,MAAM,OAAO,qBAEX,SAAQ,oBAA2B;IAIjB,wBAAwB,CACpC,QAAuB,EACvB,WAAoB,EACpB,QAAiB;QAEjB,IAAI,QAAQ,EAAE;YACV,IAAI,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;gBAC3C,yBAAyB;gBACzB,OAAO,IAAI,CAAC;aACf;SACJ;QAED,IAAI,CAAC,qBAAqB,GAAG,QAAQ,CAAC,EAAE,CAAC;QACzC,IAAI,CAAC,2BAA2B,GAAG,SAAS,CAAC;QAC7C,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEe,cAAc,CAC1B,QAAuB,EACvB,QAAiB,EACjB,OAAgB;QAEhB,IAAI,OAAO,EAAE;YACT,IAAI,CAAC,qBAAqB,GAAG,QAAQ,CAAC,EAAE,CAAC;YACzC,IAAI,CAAC,2BAA2B,GAAG,SAAS,CAAC;YAC7C,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;YACnC,OAAO,IAAI,CAAC;SACf;QAED,IAAI,QAAQ,EAAE;YACV,IAAI,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;gBAC3C,yBAAyB;gBACzB,OAAO,IAAI,CAAC;aACf;SACJ;QAED,IAAI,CAAC,qBAAqB,GAAG,QAAQ,CAAC,EAAE,CAAC;QACzC,IAAI,CAAC,2BAA2B,GAAG,SAAS,CAAC;QAC7C,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC;IAEe,uBAAuB,CAAC,QAAuB;QAC3D,IAAI,QAAQ,CAAC,cAAc,KAAK,sBAAsB,CAAC,QAAQ,EAAE;YAC7D,OAAO,KAAK,CAAC;SAChB;QACD,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC;IAEe,KAAK;QACjB,IAAI,CAAC,qBAAqB,GAAG,SAAS,CAAC;QACvC,IAAI,CAAC,2BAA2B,GAAG,SAAS,CAAC;IACjD,CAAC;IAEO,uBAAuB,CAAC,KAAa;QACzC,IAAI,IAAI,CAAC,qBAAqB,KAAK,SAAS,EAAE;YAC1C,OAAO,KAAK,CAAC;SAChB;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzC,MAAM,mBAAmB,GAAG,IAAI,CAAC,gBAAgB,CAC7C,IAAI,CAAC,qBAAqB,EAC1B,OAAO,CACV,CAAC;QACF,IAAI,mBAAmB,KAAK,CAAC,CAAC,EAAE;YAC5B,OAAO,KAAK,CAAC;SAChB;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,YAAY,CAAC;QAClE,IAAI,CAAC,4BAA4B,CAC7B,cAAc,EACd,mBAAmB,EACnB,OAAO,CACV,CAAC;QACF,IAAI,CAAC,oBAAoB,CACrB,cAAc,EACd,KAAK,EACL,mBAAmB,EACnB,OAAO,CACV,CAAC;QACF,IAAI,CAAC,2BAA2B,GAAG,KAAK,CAAC;QACzC,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;QAEnD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,4BAA4B,CAChC,SAAoC,EACpC,wBAAgC,EAChC,OAAwC;QAExC,MAAM,qBAAqB,GAAG,IAAI,CAAC,gBAAgB,CAC/C,IAAI,CAAC,2BAA2B,EAChC,OAAO,CACV,CAAC;QACF,IAAI,CAAC,4BAA4B,CAC7B,SAAS,EACT,wBAAwB,EACxB,qBAAqB,EACrB,OAAO,EACP,KAAK,CACR,CAAC;IACN,CAAC;IAEO,oBAAoB,CACxB,SAAoC,EACpC,aAAqB,EACrB,wBAAgC,EAChC,OAAwC;QAExC,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QACvE,IAAI,CAAC,4BAA4B,CAC7B,SAAS,EACT,wBAAwB,EACxB,gBAAgB,EAChB,OAAO,EACP,IAAI,CACP,CAAC;IACN,CAAC;IAEO,4BAA4B,CAChC,SAAoC,EACpC,eAAuB,EACvB,aAAqB,EACrB,OAAwC,EACxC,WAAoB;QAEpB,IAAI,eAAe,KAAK,CAAC,CAAC,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE;YAChD,OAAO;SACV;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;QAC/D,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;QAC9D,KAAK,IAAI,CAAC,GAAG,aAAa,EAAE,CAAC,IAAI,YAAY,EAAE,CAAC,EAAE,EAAE;YAChD,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC;YACxB,IAAI,GAAG,CAAC,YAAY,EAAE,EAAE;gBACpB,SAAS;aACZ;YACD,IAAI,CAAC,0BAA0B,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;SACnE;QAED,MAAM,WAAW,GAAG,OAAO,CAAC,aAAa,CAAE,CAAC;QAC5C,IAAI,WAAW,CAAC,YAAY,EAAE,EAAE;YAC5B,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,0BAA0B,CAAC,SAAS,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC;SACpH;IACL,CAAC;IAEO,0BAA0B,CAC9B,SAAoC,EACpC,KAAa,EACb,WAAoB;QAEpB,IAAI,WAAW,EAAE;YACb,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;SAC3B;aAAM;YACH,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;SAC3B;IACL,CAAC;IAEO,gBAAgB,CACpB,EAAsB,EACtB,IAAqC;QAErC,IAAI,CAAC,EAAE,EAAE;YACL,OAAO,CAAC,CAAC,CAAC;SACb;QACD,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5C,CAAC;CACJ","sourcesContent":["import type {\n Row as TanStackRow,\n RowSelectionState as TanStackRowSelectionState\n} from '@tanstack/table-core';\nimport {\n TableNode,\n TableRecord,\n TableRowSelectionState,\n TableRowState\n} from '../../types';\nimport { SelectionManagerBase } from './selection-manager-base';\n\n/**\n * Selection manager for interactive selection when the selection mode of the table is\n * `TableRowSelectionMode.multiple`.\n */\nexport class MultiSelectionManager<\n TData extends TableRecord\n> extends SelectionManagerBase<TData> {\n private shiftSelectStartRowId?: string;\n private previousShiftSelectRowEndId?: string;\n\n public override handleRowSelectionToggle(\n rowState: TableRowState,\n isSelecting: boolean,\n shiftKey: boolean\n ): boolean {\n if (shiftKey) {\n if (this.tryUpdateRangeSelection(rowState.id)) {\n // Made a range selection\n return true;\n }\n }\n\n this.shiftSelectStartRowId = rowState.id;\n this.previousShiftSelectRowEndId = undefined;\n this.toggleIsRowSelected(rowState, isSelecting);\n return true;\n }\n\n public override handleRowClick(\n rowState: TableRowState,\n shiftKey: boolean,\n ctrlKey: boolean\n ): boolean {\n if (ctrlKey) {\n this.shiftSelectStartRowId = rowState.id;\n this.previousShiftSelectRowEndId = undefined;\n this.toggleIsRowSelected(rowState);\n return true;\n }\n\n if (shiftKey) {\n if (this.tryUpdateRangeSelection(rowState.id)) {\n // Made a range selection\n return true;\n }\n }\n\n this.shiftSelectStartRowId = rowState.id;\n this.previousShiftSelectRowEndId = undefined;\n return this.selectSingleRow(rowState);\n }\n\n public override handleActionMenuOpening(rowState: TableRowState): boolean {\n if (rowState.selectionState === TableRowSelectionState.selected) {\n return false;\n }\n return this.selectSingleRow(rowState);\n }\n\n public override reset(): void {\n this.shiftSelectStartRowId = undefined;\n this.previousShiftSelectRowEndId = undefined;\n }\n\n private tryUpdateRangeSelection(rowId: string): boolean {\n if (this.shiftSelectStartRowId === undefined) {\n return false;\n }\n\n const allRows = this.getAllOrderedRows();\n const selectionStartIndex = this.getRowIndexForId(\n this.shiftSelectStartRowId,\n allRows\n );\n if (selectionStartIndex === -1) {\n return false;\n }\n\n const selectionState = this.tanStackTable.getState().rowSelection;\n this.removePreviousRangeSelection(\n selectionState,\n selectionStartIndex,\n allRows\n );\n this.addNewRangeSelection(\n selectionState,\n rowId,\n selectionStartIndex,\n allRows\n );\n this.previousShiftSelectRowEndId = rowId;\n this.tanStackTable.setRowSelection(selectionState);\n\n return true;\n }\n\n private removePreviousRangeSelection(\n selection: TanStackRowSelectionState,\n shiftSelectStartRowIndex: number,\n allRows: TanStackRow<TableNode<TData>>[]\n ): void {\n const previousRangeEndIndex = this.getRowIndexForId(\n this.previousShiftSelectRowEndId,\n allRows\n );\n this.updateSelectionStateForRange(\n selection,\n shiftSelectStartRowIndex,\n previousRangeEndIndex,\n allRows,\n false\n );\n }\n\n private addNewRangeSelection(\n selection: TanStackRowSelectionState,\n endRangeRowId: string,\n shiftSelectStartRowIndex: number,\n allRows: TanStackRow<TableNode<TData>>[]\n ): void {\n const newRangeEndIndex = this.getRowIndexForId(endRangeRowId, allRows);\n this.updateSelectionStateForRange(\n selection,\n shiftSelectStartRowIndex,\n newRangeEndIndex,\n allRows,\n true\n );\n }\n\n private updateSelectionStateForRange(\n selection: TanStackRowSelectionState,\n rangeStartIndex: number,\n rangeEndIndex: number,\n allRows: TanStackRow<TableNode<TData>>[],\n isSelecting: boolean\n ): void {\n if (rangeStartIndex === -1 || rangeEndIndex === -1) {\n return;\n }\n\n const firstRowIndex = Math.min(rangeStartIndex, rangeEndIndex);\n const lastRowIndex = Math.max(rangeStartIndex, rangeEndIndex);\n for (let i = firstRowIndex; i <= lastRowIndex; i++) {\n const row = allRows[i]!;\n if (row.getIsGrouped()) {\n continue;\n }\n this.updateSelectionStateForRow(selection, row.id, isSelecting);\n }\n\n const endRangeRow = allRows[rangeEndIndex]!;\n if (endRangeRow.getIsGrouped()) {\n this.getAllLeafRowIds(endRangeRow.id).forEach(id => this.updateSelectionStateForRow(selection, id, isSelecting));\n }\n }\n\n private updateSelectionStateForRow(\n selection: TanStackRowSelectionState,\n rowId: string,\n isSelecting: boolean\n ): void {\n if (isSelecting) {\n selection[rowId] = true;\n } else {\n delete selection[rowId];\n }\n }\n\n private getRowIndexForId(\n id: string | undefined,\n rows: TanStackRow<TableNode<TData>>[]\n ): number {\n if (!id) {\n return -1;\n }\n return rows.findIndex(x => x.id === id);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"multi-selection-manager.js","sourceRoot":"","sources":["../../../../../src/table/models/selection-managers/multi-selection-manager.ts"],"names":[],"mappings":"AAIA,OAAO,EAGH,sBAAsB,EAEzB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE;;;GAGG;AACH,MAAM,OAAO,qBAEX,SAAQ,oBAA2B;IAIjB,wBAAwB,CACpC,QAAuB,EACvB,WAAoB,EACpB,QAAiB;QAEjB,IAAI,QAAQ,EAAE;YACV,IAAI,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE;gBACjD,yBAAyB;gBACzB,OAAO,IAAI,CAAC;aACf;SACJ;QAED,IAAI,CAAC,qBAAqB,GAAG,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACnE,IAAI,CAAC,2BAA2B,GAAG,SAAS,CAAC;QAC7C,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEe,cAAc,CAC1B,QAAuB,EACvB,QAAiB,EACjB,OAAgB;QAEhB,IAAI,QAAQ,EAAE;YACV,MAAM,iBAAiB,GAAG,OAAO,CAAC;YAClC,IAAI,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,EAAE,EAAE,iBAAiB,CAAC,EAAE;gBAC9D,yBAAyB;gBACzB,OAAO,IAAI,CAAC;aACf;SACJ;QAED,IAAI,OAAO,EAAE;YACT,MAAM,WAAW,GAAG,QAAQ,CAAC,cAAc,KAAK,sBAAsB,CAAC,QAAQ,CAAC;YAChF,IAAI,CAAC,qBAAqB,GAAG,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YACnE,IAAI,CAAC,2BAA2B,GAAG,SAAS,CAAC;YAC7C,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;YACnC,OAAO,IAAI,CAAC;SACf;QAED,IAAI,CAAC,qBAAqB,GAAG,QAAQ,CAAC,EAAE,CAAC;QACzC,IAAI,CAAC,2BAA2B,GAAG,SAAS,CAAC;QAC7C,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC;IAEe,uBAAuB,CAAC,QAAuB;QAC3D,IAAI,QAAQ,CAAC,cAAc,KAAK,sBAAsB,CAAC,QAAQ,EAAE;YAC7D,OAAO,KAAK,CAAC;SAChB;QACD,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC;IAEe,KAAK;QACjB,IAAI,CAAC,qBAAqB,GAAG,SAAS,CAAC;QACvC,IAAI,CAAC,2BAA2B,GAAG,SAAS,CAAC;IACjD,CAAC;IAEO,uBAAuB,CAC3B,KAAa,EACb,iBAA0B;QAE1B,IAAI,IAAI,CAAC,qBAAqB,KAAK,SAAS,EAAE;YAC1C,OAAO,KAAK,CAAC;SAChB;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzC,MAAM,mBAAmB,GAAG,IAAI,CAAC,gBAAgB,CAC7C,IAAI,CAAC,qBAAqB,EAC1B,OAAO,CACV,CAAC;QACF,IAAI,mBAAmB,KAAK,CAAC,CAAC,EAAE;YAC5B,OAAO,KAAK,CAAC;SAChB;QAED,IAAI,cAAc,GAA8B,EAAE,CAAC;QACnD,IAAI,iBAAiB,EAAE;YACnB,uGAAuG;YACvG,uGAAuG;YACvG,wCAAwC;YACxC,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,YAAY,CAAC;YAC5D,IAAI,CAAC,4BAA4B,CAC7B,cAAc,EACd,mBAAmB,EACnB,OAAO,CACV,CAAC;SACL;QAED,IAAI,CAAC,oBAAoB,CACrB,cAAc,EACd,KAAK,EACL,mBAAmB,EACnB,OAAO,CACV,CAAC;QACF,IAAI,CAAC,2BAA2B,GAAG,KAAK,CAAC;QACzC,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;QAEnD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,4BAA4B,CAChC,SAAoC,EACpC,wBAAgC,EAChC,OAAwC;QAExC,MAAM,qBAAqB,GAAG,IAAI,CAAC,gBAAgB,CAC/C,IAAI,CAAC,2BAA2B,EAChC,OAAO,CACV,CAAC;QACF,IAAI,CAAC,4BAA4B,CAC7B,SAAS,EACT,wBAAwB,EACxB,qBAAqB,EACrB,OAAO,EACP,KAAK,CACR,CAAC;IACN,CAAC;IAEO,oBAAoB,CACxB,SAAoC,EACpC,aAAqB,EACrB,wBAAgC,EAChC,OAAwC;QAExC,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QACvE,IAAI,CAAC,4BAA4B,CAC7B,SAAS,EACT,wBAAwB,EACxB,gBAAgB,EAChB,OAAO,EACP,IAAI,CACP,CAAC;IACN,CAAC;IAEO,4BAA4B,CAChC,SAAoC,EACpC,eAAuB,EACvB,aAAqB,EACrB,OAAwC,EACxC,WAAoB;QAEpB,IAAI,eAAe,KAAK,CAAC,CAAC,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE;YAChD,OAAO;SACV;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;QAC/D,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;QAC9D,KAAK,IAAI,CAAC,GAAG,aAAa,EAAE,CAAC,IAAI,YAAY,EAAE,CAAC,EAAE,EAAE;YAChD,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC;YACxB,IAAI,GAAG,CAAC,YAAY,EAAE,EAAE;gBACpB,SAAS;aACZ;YACD,IAAI,CAAC,0BAA0B,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;SACnE;QAED,MAAM,WAAW,GAAG,OAAO,CAAC,aAAa,CAAE,CAAC;QAC5C,IAAI,WAAW,CAAC,YAAY,EAAE,EAAE;YAC5B,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,0BAA0B,CAAC,SAAS,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC;SACpH;IACL,CAAC;IAEO,0BAA0B,CAC9B,SAAoC,EACpC,KAAa,EACb,WAAoB;QAEpB,IAAI,WAAW,EAAE;YACb,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;SAC3B;aAAM;YACH,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;SAC3B;IACL,CAAC;IAEO,gBAAgB,CACpB,EAAsB,EACtB,IAAqC;QAErC,IAAI,CAAC,EAAE,EAAE;YACL,OAAO,CAAC,CAAC,CAAC;SACb;QACD,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5C,CAAC;CACJ","sourcesContent":["import type {\n Row as TanStackRow,\n RowSelectionState as TanStackRowSelectionState\n} from '@tanstack/table-core';\nimport {\n TableNode,\n TableRecord,\n TableRowSelectionState,\n TableRowState\n} from '../../types';\nimport { SelectionManagerBase } from './selection-manager-base';\n\n/**\n * Selection manager for interactive selection when the selection mode of the table is\n * `TableRowSelectionMode.multiple`.\n */\nexport class MultiSelectionManager<\n TData extends TableRecord\n> extends SelectionManagerBase<TData> {\n private shiftSelectStartRowId?: string;\n private previousShiftSelectRowEndId?: string;\n\n public override handleRowSelectionToggle(\n rowState: TableRowState,\n isSelecting: boolean,\n shiftKey: boolean\n ): boolean {\n if (shiftKey) {\n if (this.tryUpdateRangeSelection(rowState.id, true)) {\n // Made a range selection\n return true;\n }\n }\n\n this.shiftSelectStartRowId = isSelecting ? rowState.id : undefined;\n this.previousShiftSelectRowEndId = undefined;\n this.toggleIsRowSelected(rowState, isSelecting);\n return true;\n }\n\n public override handleRowClick(\n rowState: TableRowState,\n shiftKey: boolean,\n ctrlKey: boolean\n ): boolean {\n if (shiftKey) {\n const additiveSelection = ctrlKey;\n if (this.tryUpdateRangeSelection(rowState.id, additiveSelection)) {\n // Made a range selection\n return true;\n }\n }\n\n if (ctrlKey) {\n const isSelecting = rowState.selectionState !== TableRowSelectionState.selected;\n this.shiftSelectStartRowId = isSelecting ? rowState.id : undefined;\n this.previousShiftSelectRowEndId = undefined;\n this.toggleIsRowSelected(rowState);\n return true;\n }\n\n this.shiftSelectStartRowId = rowState.id;\n this.previousShiftSelectRowEndId = undefined;\n return this.selectSingleRow(rowState);\n }\n\n public override handleActionMenuOpening(rowState: TableRowState): boolean {\n if (rowState.selectionState === TableRowSelectionState.selected) {\n return false;\n }\n return this.selectSingleRow(rowState);\n }\n\n public override reset(): void {\n this.shiftSelectStartRowId = undefined;\n this.previousShiftSelectRowEndId = undefined;\n }\n\n private tryUpdateRangeSelection(\n rowId: string,\n additiveSelection: boolean\n ): boolean {\n if (this.shiftSelectStartRowId === undefined) {\n return false;\n }\n\n const allRows = this.getAllOrderedRows();\n const selectionStartIndex = this.getRowIndexForId(\n this.shiftSelectStartRowId,\n allRows\n );\n if (selectionStartIndex === -1) {\n return false;\n }\n\n let selectionState: TanStackRowSelectionState = {};\n if (additiveSelection) {\n // If the range selection is additive to the existing selection, start with the initial selection state\n // and remove the previous range selection, if any. Otherwise, the range selection will start empty and\n // only contain the new range selection.\n selectionState = this.tanStackTable.getState().rowSelection;\n this.removePreviousRangeSelection(\n selectionState,\n selectionStartIndex,\n allRows\n );\n }\n\n this.addNewRangeSelection(\n selectionState,\n rowId,\n selectionStartIndex,\n allRows\n );\n this.previousShiftSelectRowEndId = rowId;\n this.tanStackTable.setRowSelection(selectionState);\n\n return true;\n }\n\n private removePreviousRangeSelection(\n selection: TanStackRowSelectionState,\n shiftSelectStartRowIndex: number,\n allRows: TanStackRow<TableNode<TData>>[]\n ): void {\n const previousRangeEndIndex = this.getRowIndexForId(\n this.previousShiftSelectRowEndId,\n allRows\n );\n this.updateSelectionStateForRange(\n selection,\n shiftSelectStartRowIndex,\n previousRangeEndIndex,\n allRows,\n false\n );\n }\n\n private addNewRangeSelection(\n selection: TanStackRowSelectionState,\n endRangeRowId: string,\n shiftSelectStartRowIndex: number,\n allRows: TanStackRow<TableNode<TData>>[]\n ): void {\n const newRangeEndIndex = this.getRowIndexForId(endRangeRowId, allRows);\n this.updateSelectionStateForRange(\n selection,\n shiftSelectStartRowIndex,\n newRangeEndIndex,\n allRows,\n true\n );\n }\n\n private updateSelectionStateForRange(\n selection: TanStackRowSelectionState,\n rangeStartIndex: number,\n rangeEndIndex: number,\n allRows: TanStackRow<TableNode<TData>>[],\n isSelecting: boolean\n ): void {\n if (rangeStartIndex === -1 || rangeEndIndex === -1) {\n return;\n }\n\n const firstRowIndex = Math.min(rangeStartIndex, rangeEndIndex);\n const lastRowIndex = Math.max(rangeStartIndex, rangeEndIndex);\n for (let i = firstRowIndex; i <= lastRowIndex; i++) {\n const row = allRows[i]!;\n if (row.getIsGrouped()) {\n continue;\n }\n this.updateSelectionStateForRow(selection, row.id, isSelecting);\n }\n\n const endRangeRow = allRows[rangeEndIndex]!;\n if (endRangeRow.getIsGrouped()) {\n this.getAllLeafRowIds(endRangeRow.id).forEach(id => this.updateSelectionStateForRow(selection, id, isSelecting));\n }\n }\n\n private updateSelectionStateForRow(\n selection: TanStackRowSelectionState,\n rowId: string,\n isSelecting: boolean\n ): void {\n if (isSelecting) {\n selection[rowId] = true;\n } else {\n delete selection[rowId];\n }\n }\n\n private getRowIndexForId(\n id: string | undefined,\n rows: TanStackRow<TableNode<TData>>[]\n ): number {\n if (!id) {\n return -1;\n }\n return rows.findIndex(x => x.id === id);\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ni/nimble-components",
|
|
3
|
-
"version": "30.0.
|
|
3
|
+
"version": "30.0.4",
|
|
4
4
|
"description": "Styled web components for the NI Nimble Design System",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"build": "npm run generate-icons && npm run generate-workers && npm run build-components && npm run bundle-components && npm run generate-scss",
|