@ni/nimble-components 30.0.1 → 30.0.2
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 +25 -24
- package/dist/all-components-bundle.js.map +1 -1
- package/dist/all-components-bundle.min.js +11 -18
- package/dist/all-components-bundle.min.js.map +1 -1
- package/dist/esm/table/index.d.ts +3 -6
- package/dist/esm/table/index.js +23 -14
- package/dist/esm/table/index.js.map +1 -1
- package/dist/esm/table/template.js +1 -9
- package/dist/esm/table/template.js.map +1 -1
- package/dist/esm/table/types.d.ts +1 -1
- package/dist/esm/table/types.js.map +1 -1
- package/package.json +1 -1
|
@@ -35,10 +35,6 @@ export declare class Table<TData extends TableRecord = TableRecord> extends Foun
|
|
|
35
35
|
* @internal
|
|
36
36
|
*/
|
|
37
37
|
readonly rowElements: (TableRow | TableGroupRow)[];
|
|
38
|
-
/**
|
|
39
|
-
* @internal
|
|
40
|
-
*/
|
|
41
|
-
actionMenuSlots: string[];
|
|
42
38
|
/**
|
|
43
39
|
* @internal
|
|
44
40
|
*/
|
|
@@ -130,7 +126,8 @@ export declare class Table<TData extends TableRecord = TableRecord> extends Foun
|
|
|
130
126
|
private readonly layoutManagerNotifier;
|
|
131
127
|
private isInitialized;
|
|
132
128
|
private ignoreSelectionChangeEvents;
|
|
133
|
-
private readonly
|
|
129
|
+
private readonly requestedSlots;
|
|
130
|
+
private actionMenuSlots;
|
|
134
131
|
constructor();
|
|
135
132
|
setData(newData: readonly TData[]): Promise<void>;
|
|
136
133
|
getSelectedRecordIds(): Promise<string[]>;
|
|
@@ -202,7 +199,7 @@ export declare class Table<TData extends TableRecord = TableRecord> extends Foun
|
|
|
202
199
|
protected idFieldNameChanged(_prev: string | undefined, _next: string | undefined): void;
|
|
203
200
|
protected parentIdFieldNameChanged(_prev: string | undefined, _next: string | undefined): void;
|
|
204
201
|
protected columnsChanged(_prev: TableColumn[] | undefined, _next: TableColumn[]): void;
|
|
205
|
-
private
|
|
202
|
+
private updateRequestedSlotsForOpeningActionMenu;
|
|
206
203
|
private handleActionMenuBeforeToggleEvent;
|
|
207
204
|
private handleRowActionMenuToggleEvent;
|
|
208
205
|
private getActionMenuToggleEventDetail;
|
package/dist/esm/table/index.js
CHANGED
|
@@ -53,10 +53,6 @@ export class Table extends FoundationElement {
|
|
|
53
53
|
* @internal
|
|
54
54
|
*/
|
|
55
55
|
this.rowElements = [];
|
|
56
|
-
/**
|
|
57
|
-
* @internal
|
|
58
|
-
*/
|
|
59
|
-
this.actionMenuSlots = [];
|
|
60
56
|
/**
|
|
61
57
|
* @internal
|
|
62
58
|
*/
|
|
@@ -95,7 +91,8 @@ export class Table extends FoundationElement {
|
|
|
95
91
|
this.ignoreSelectionChangeEvents = false;
|
|
96
92
|
// Map from the external slot name to the record ID of the row that should have the slot
|
|
97
93
|
// and the unique slot name that the slot should be slotted into.
|
|
98
|
-
this.
|
|
94
|
+
this.requestedSlots = new Map();
|
|
95
|
+
this.actionMenuSlots = [];
|
|
99
96
|
this.onViewPortScroll = (event) => {
|
|
100
97
|
this.scrollX = event.target.scrollLeft;
|
|
101
98
|
};
|
|
@@ -293,7 +290,7 @@ export class Table extends FoundationElement {
|
|
|
293
290
|
event.stopImmediatePropagation();
|
|
294
291
|
for (const slotMetadata of event.detail.slots) {
|
|
295
292
|
const uniqueSlot = uniquifySlotNameForColumnId(event.detail.columnInternalId, slotMetadata.slot);
|
|
296
|
-
this.
|
|
293
|
+
this.requestedSlots.set(slotMetadata.name, {
|
|
297
294
|
recordId: event.detail.recordId,
|
|
298
295
|
uniqueSlot
|
|
299
296
|
});
|
|
@@ -472,9 +469,12 @@ export class Table extends FoundationElement {
|
|
|
472
469
|
this.observeColumns();
|
|
473
470
|
this.tableUpdateTracker.trackColumnInstancesChanged();
|
|
474
471
|
}
|
|
475
|
-
|
|
472
|
+
updateRequestedSlotsForOpeningActionMenu(openActionMenuRecordId) {
|
|
476
473
|
for (const actionMenuSlot of this.actionMenuSlots) {
|
|
477
|
-
this.
|
|
474
|
+
this.requestedSlots.set(actionMenuSlot, {
|
|
475
|
+
recordId: openActionMenuRecordId,
|
|
476
|
+
uniqueSlot: `row-action-menu-${actionMenuSlot}`
|
|
477
|
+
});
|
|
478
478
|
}
|
|
479
479
|
this.refreshRows();
|
|
480
480
|
}
|
|
@@ -484,7 +484,7 @@ export class Table extends FoundationElement {
|
|
|
484
484
|
await this.emitSelectionChangeEvent();
|
|
485
485
|
}
|
|
486
486
|
this.openActionMenuRecordId = event.detail.recordIds[0];
|
|
487
|
-
this.
|
|
487
|
+
this.updateRequestedSlotsForOpeningActionMenu(this.openActionMenuRecordId);
|
|
488
488
|
const detail = await this.getActionMenuToggleEventDetail(event);
|
|
489
489
|
this.$emit('action-menu-beforetoggle', detail);
|
|
490
490
|
}
|
|
@@ -612,6 +612,13 @@ export class Table extends FoundationElement {
|
|
|
612
612
|
this.updateTableOptions(updatedOptions);
|
|
613
613
|
}
|
|
614
614
|
updateActionMenuSlots() {
|
|
615
|
+
if (this.openActionMenuRecordId !== undefined) {
|
|
616
|
+
// If the action menu is open, delete all the slots associated
|
|
617
|
+
// with the old action menu slots.
|
|
618
|
+
for (const actionMenuSlot of this.actionMenuSlots) {
|
|
619
|
+
this.requestedSlots.delete(actionMenuSlot);
|
|
620
|
+
}
|
|
621
|
+
}
|
|
615
622
|
const slots = new Set();
|
|
616
623
|
for (const column of this.columns) {
|
|
617
624
|
if (column.actionMenuSlot) {
|
|
@@ -619,6 +626,11 @@ export class Table extends FoundationElement {
|
|
|
619
626
|
}
|
|
620
627
|
}
|
|
621
628
|
this.actionMenuSlots = Array.from(slots);
|
|
629
|
+
if (this.openActionMenuRecordId !== undefined) {
|
|
630
|
+
// If the action menu is open, create slots for all the new
|
|
631
|
+
// action menu slots.
|
|
632
|
+
this.updateRequestedSlotsForOpeningActionMenu(this.openActionMenuRecordId);
|
|
633
|
+
}
|
|
622
634
|
}
|
|
623
635
|
validate() {
|
|
624
636
|
this.tableValidator.validateIdFieldConfiguration(this.selectionMode, this.idFieldName, this.parentIdFieldName);
|
|
@@ -703,7 +715,7 @@ export class Table extends FoundationElement {
|
|
|
703
715
|
groupColumn: this.getGroupRowColumn(row),
|
|
704
716
|
resolvedRowIndex: row.index,
|
|
705
717
|
isLoadingChildren: this.expansionManager.isLoadingChildren(row.id),
|
|
706
|
-
|
|
718
|
+
requestedSlots: slotsByRecordId[row.id] ?? []
|
|
707
719
|
};
|
|
708
720
|
hasDataHierarchy = hasDataHierarchy || isParent;
|
|
709
721
|
return rowState;
|
|
@@ -715,7 +727,7 @@ export class Table extends FoundationElement {
|
|
|
715
727
|
getRequestedSlotsByRecordId() {
|
|
716
728
|
const slotsByRecordId = {};
|
|
717
729
|
for (const [slotName, { recordId, uniqueSlot }] of this
|
|
718
|
-
.
|
|
730
|
+
.requestedSlots) {
|
|
719
731
|
if (!Object.prototype.hasOwnProperty.call(slotsByRecordId, recordId)) {
|
|
720
732
|
slotsByRecordId[recordId] = [];
|
|
721
733
|
}
|
|
@@ -863,9 +875,6 @@ __decorate([
|
|
|
863
875
|
__decorate([
|
|
864
876
|
observable
|
|
865
877
|
], Table.prototype, "rowElements", void 0);
|
|
866
|
-
__decorate([
|
|
867
|
-
observable
|
|
868
|
-
], Table.prototype, "actionMenuSlots", void 0);
|
|
869
878
|
__decorate([
|
|
870
879
|
observable
|
|
871
880
|
], Table.prototype, "openActionMenuRecordId", void 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/table/index.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n attr,\n Observable,\n observable,\n Notifier,\n DOM\n} from '@microsoft/fast-element';\nimport {\n Checkbox,\n DesignSystem,\n FoundationElement\n} from '@microsoft/fast-foundation';\nimport {\n ColumnDef as TanStackColumnDef,\n TableState as TanStackTableState,\n Updater as TanStackUpdater,\n Table as TanStackTable,\n Row as TanStackRow,\n createTable as tanStackCreateTable,\n getCoreRowModel as tanStackGetCoreRowModel,\n getSortedRowModel as tanStackGetSortedRowModel,\n getGroupedRowModel as tanStackGetGroupedRowModel,\n getExpandedRowModel as tanStackGetExpandedRowModel,\n TableOptionsResolved as TanStackTableOptionsResolved,\n SortingState as TanStackSortingState,\n RowSelectionState as TanStackRowSelectionState,\n GroupingState as TanStackGroupingState,\n ExpandedState as TanStackExpandedState,\n OnChangeFn as TanStackOnChangeFn\n} from '@tanstack/table-core';\nimport { keyEnter } from '@microsoft/fast-web-utilities';\nimport { TableColumn } from '../table-column/base';\nimport { TableValidator } from './models/table-validator';\nimport { styles } from './styles';\nimport { template } from './template';\nimport {\n TableNode,\n TableActionMenuToggleEventDetail,\n TableColumnConfigurationChangeEventDetail,\n TableColumnSortDirection,\n TableFieldValue,\n TableRecord,\n TableRowSelectionEventDetail,\n TableRowSelectionMode,\n TableRowSelectionState,\n TableRowSelectionToggleEventDetail,\n TableRowState,\n TableValidity,\n TableSetRecordHierarchyOptions,\n RowSlotRequestEventDetail,\n SlotMetadata\n} from './types';\nimport { Virtualizer } from './models/virtualizer';\nimport { getTanStackSortingFunction } from './models/sort-operations';\nimport { TableLayoutManager } from './models/table-layout-manager';\nimport { TableUpdateTracker } from './models/table-update-tracker';\nimport type { TableRow } from './components/row';\nimport type { TableGroupRow } from './components/group-row';\nimport { ColumnInternals } from '../table-column/base/models/column-internals';\nimport { InteractiveSelectionManager } from './models/interactive-selection-manager';\nimport { DataHierarchyManager } from './models/data-hierarchy-manager';\nimport { ExpansionManager } from './models/expansion-manager';\nimport { waitUntilCustomElementsDefinedAsync } from '../utilities/wait-until-custom-elements-defined-async';\nimport { ColumnValidator } from '../table-column/base/models/column-validator';\nimport { uniquifySlotNameForColumnId } from './models/utilities';\nimport { KeyboardNavigationManager } from './models/keyboard-navigation-manager';\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nimble-table': Table;\n }\n}\n\n/**\n * A nimble-styled table.\n */\nexport class Table<\n TData extends TableRecord = TableRecord\n> extends FoundationElement {\n @attr({ attribute: 'id-field-name' })\n public idFieldName?: string;\n\n @attr({ attribute: 'parent-id-field-name' })\n public parentIdFieldName?: string;\n\n @attr({ attribute: 'selection-mode' })\n public selectionMode: TableRowSelectionMode = TableRowSelectionMode.none;\n\n /**\n * @internal\n */\n @observable\n public tableData: TableRowState<TData>[] = [];\n\n /**\n * @internal\n */\n @observable\n public columns: TableColumn[] = [];\n\n /**\n * @internal\n */\n @observable\n public readonly childItems: Element[] = [];\n\n /**\n * @internal\n */\n @observable\n public readonly rowElements: (TableRow | TableGroupRow)[] = [];\n\n /**\n * @internal\n */\n @observable\n public actionMenuSlots: string[] = [];\n\n /**\n * @internal\n */\n @observable\n public openActionMenuRecordId?: string;\n\n /**\n * @internal\n */\n @observable\n public canRenderRows = true;\n\n /**\n * @internal\n */\n @observable\n public scrollX = 0;\n\n /**\n * @internal\n */\n @observable\n public rowGridColumns?: string;\n\n /**\n * @internal\n */\n @observable\n public selectionState: TableRowSelectionState = TableRowSelectionState.notSelected;\n\n public get validity(): TableValidity {\n return this.tableValidator.getValidity();\n }\n\n /**\n * @internal\n */\n public get showRowOperationColumn(): boolean {\n return (\n this.selectionMode === TableRowSelectionMode.multiple\n || this.showCollapseAll\n );\n }\n\n /**\n * @internal\n */\n public readonly viewport!: HTMLElement;\n\n /**\n * @internal\n */\n @observable\n public readonly selectionCheckbox?: Checkbox;\n\n /**\n * @internal\n */\n @observable\n public readonly collapseAllButton?: HTMLElement;\n\n /**\n * @internal\n */\n @observable\n public showCollapseAll = false;\n\n /**\n * @internal\n */\n public readonly headerRowActionContainer!: HTMLElement;\n\n /**\n * @internal\n */\n public readonly rowContainer!: HTMLElement;\n\n /**\n * @internal\n */\n public readonly columnHeadersContainer!: Element;\n\n /**\n * @internal\n */\n public readonly virtualizer: Virtualizer<TData>;\n\n /**\n * @internal\n */\n public readonly layoutManager: TableLayoutManager<TData>;\n\n /**\n * @internal\n */\n public readonly keyboardNavigationManager: KeyboardNavigationManager<TData>;\n\n /**\n * @internal\n */\n @observable\n public firstSortedColumn?: TableColumn;\n\n /**\n * @internal\n */\n @observable\n public visibleColumns: TableColumn[] = [];\n\n /**\n * @internal\n * This value determines the size of the viewport area when a user has created horizontal scrollable\n * space through a column resize operation.\n */\n @observable\n public tableScrollableMinWidth = 0;\n\n @observable\n public windowShiftKeyDown = false;\n\n private readonly table: TanStackTable<TableNode<TData>>;\n private options: TanStackTableOptionsResolved<TableNode<TData>>;\n private readonly tableValidator = new TableValidator<TData>();\n private readonly tableUpdateTracker = new TableUpdateTracker(this);\n private readonly selectionManager: InteractiveSelectionManager<TData>;\n private dataHierarchyManager?: DataHierarchyManager<TData>;\n private readonly expansionManager: ExpansionManager<TData>;\n private columnNotifiers: Notifier[] = [];\n private readonly layoutManagerNotifier: Notifier;\n private isInitialized = false;\n // Programmatically updating the selection state of a checkbox fires the 'change' event.\n // Therefore, selection change events that occur due to programmatically updating\n // the selection checkbox 'checked' value should be ingored.\n // https://github.com/microsoft/fast/issues/5750\n private ignoreSelectionChangeEvents = false;\n // Map from the external slot name to the record ID of the row that should have the slot\n // and the unique slot name that the slot should be slotted into.\n private readonly columnRequestedSlots: Map<\n string,\n { recordId: string, uniqueSlot: string }\n > = new Map();\n\n public constructor() {\n super();\n this.options = {\n data: [],\n onStateChange: (_: TanStackUpdater<TanStackTableState>) => {},\n onRowSelectionChange: this.handleRowSelectionChange,\n onExpandedChange: this.handleExpandedChange,\n getCoreRowModel: tanStackGetCoreRowModel(),\n getSortedRowModel: tanStackGetSortedRowModel(),\n getGroupedRowModel: tanStackGetGroupedRowModel(),\n getExpandedRowModel: tanStackGetExpandedRowModel(),\n getRowCanExpand: this.getRowCanExpand,\n getIsRowExpanded: this.getIsRowExpanded,\n getSubRows: r => r.subRows,\n columns: [],\n state: {\n rowSelection: {},\n grouping: [],\n expanded: true // Workaround until we can apply a fix to TanStack regarding leveraging our getIsRowExpanded implementation\n },\n enableRowSelection: row => !row.getIsGrouped(),\n enableMultiRowSelection: false,\n enableSubRowSelection: false,\n enableSorting: true,\n enableGrouping: true,\n renderFallbackValue: null,\n autoResetAll: false\n };\n this.table = tanStackCreateTable(this.options);\n this.virtualizer = new Virtualizer(this, this.table);\n this.keyboardNavigationManager = new KeyboardNavigationManager(\n this,\n this.virtualizer\n );\n this.layoutManager = new TableLayoutManager(this);\n this.layoutManagerNotifier = Observable.getNotifier(this.layoutManager);\n this.layoutManagerNotifier.subscribe(this, 'isColumnBeingSized');\n this.selectionManager = new InteractiveSelectionManager(\n this.table,\n this.selectionMode\n );\n this.expansionManager = new ExpansionManager(this.table);\n }\n\n public async setData(newData: readonly TData[]): Promise<void> {\n await this.processPendingUpdates();\n const tanstackUpdates = this.calculateTanStackData(newData);\n this.updateTableOptions(tanstackUpdates);\n }\n\n public async getSelectedRecordIds(): Promise<string[]> {\n await this.processPendingUpdates();\n return this.selectionManager.getCurrentSelectedRecordIds();\n }\n\n public async setSelectedRecordIds(\n recordIds: readonly string[]\n ): Promise<void> {\n await this.processPendingUpdates();\n\n if (this.selectionMode === TableRowSelectionMode.none) {\n return;\n }\n\n this.updateTableOptions({\n state: {\n rowSelection: this.calculateTanStackSelectionState(recordIds)\n }\n });\n }\n\n public async setRecordHierarchyOptions(\n hierarchyOptions: TableSetRecordHierarchyOptions[]\n ): Promise<void> {\n await this.processPendingUpdates();\n const clonedOptions = structuredClone(hierarchyOptions);\n const presentOptions = this.tableValidator.getOptionsWithPresentIds(clonedOptions);\n this.expansionManager.setHierarchyOptions(presentOptions);\n this.refreshRows();\n }\n\n public override connectedCallback(): void {\n super.connectedCallback();\n this.initialize();\n this.virtualizer.connect();\n this.viewport.addEventListener('scroll', this.onViewPortScroll, {\n passive: true\n });\n this.keyboardNavigationManager.connect();\n window.addEventListener('keydown', this.onKeyDown);\n window.addEventListener('keyup', this.onKeyUp);\n window.addEventListener('blur', this.onBlur);\n }\n\n public override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.virtualizer.disconnect();\n this.keyboardNavigationManager.disconnect();\n this.viewport.removeEventListener('scroll', this.onViewPortScroll);\n window.removeEventListener('keydown', this.onKeyDown);\n window.removeEventListener('keyup', this.onKeyUp);\n window.removeEventListener('blur', this.onBlur);\n }\n\n public checkValidity(): boolean {\n return this.tableValidator.isValid();\n }\n\n /**\n * @internal\n *\n * The event handler that is called when a notifier detects a change. Notifiers are added\n * to each column, so `source` is expected to be an instance of `TableColumn`, and `args`\n * is the string name of the property that changed on that column.\n */\n public handleChange(source: unknown, args: unknown): void {\n if (\n (source instanceof TableColumn\n || source instanceof ColumnInternals)\n && typeof args === 'string'\n ) {\n this.tableUpdateTracker.trackColumnPropertyChanged(args);\n } else if (\n source instanceof ColumnValidator\n && args === 'isColumnValid'\n ) {\n this.tableValidator.validateColumnConfigurations(this.columns);\n } else if (\n source instanceof TableLayoutManager\n && args === 'isColumnBeingSized'\n && !this.layoutManager.isColumnBeingSized\n ) {\n // 'isColumnBeingSized' changing to 'false' indicates an interactive\n // column sizing operation has been completed\n this.emitColumnConfigurationChangeEvent();\n }\n }\n\n /** @internal */\n public onRowSelectionToggle(\n rowIndex: number,\n event: CustomEvent<TableRowSelectionToggleEventDetail>\n ): void {\n event.stopImmediatePropagation();\n\n const selectionChanged = this.selectionManager.handleRowSelectionToggle(\n this.tableData[rowIndex],\n event.detail.newState,\n this.windowShiftKeyDown\n );\n\n if (selectionChanged) {\n void this.emitSelectionChangeEvent();\n }\n }\n\n /** @internal */\n public onRowClick(rowIndex: number, event: MouseEvent): boolean {\n const selectionChanged = this.selectionManager.handleRowClick(\n this.tableData[rowIndex],\n event.shiftKey,\n event.ctrlKey || event.metaKey\n );\n\n if (selectionChanged) {\n void this.emitSelectionChangeEvent();\n }\n\n return true;\n }\n\n /** @internal */\n public onRowFocusIn(event: FocusEvent): void {\n this.keyboardNavigationManager.onRowFocusIn(event);\n }\n\n /** @internal */\n public onRowBlur(event: FocusEvent): void {\n this.keyboardNavigationManager.onRowBlur(event);\n }\n\n /** @internal */\n public onAllRowsSelectionChange(event: CustomEvent): void {\n event.stopPropagation();\n\n if (this.ignoreSelectionChangeEvents) {\n return;\n }\n\n this.table.toggleAllRowsSelected(this.selectionCheckbox!.checked);\n void this.emitSelectionChangeEvent();\n }\n\n /** @internal */\n public onRowActionMenuBeforeToggle(\n rowIndex: number,\n event: CustomEvent<TableActionMenuToggleEventDetail>\n ): void {\n event.stopImmediatePropagation();\n void this.handleActionMenuBeforeToggleEvent(rowIndex, event);\n }\n\n /** @internal */\n public onRowActionMenuToggle(\n event: CustomEvent<TableActionMenuToggleEventDetail>\n ): void {\n event.stopImmediatePropagation();\n void this.handleRowActionMenuToggleEvent(event);\n }\n\n /** @internal */\n public onRowSlotsRequest(\n event: CustomEvent<RowSlotRequestEventDetail>\n ): void {\n event.stopImmediatePropagation();\n\n for (const slotMetadata of event.detail.slots) {\n const uniqueSlot = uniquifySlotNameForColumnId(\n event.detail.columnInternalId,\n slotMetadata.slot\n );\n this.columnRequestedSlots.set(slotMetadata.name, {\n recordId: event.detail.recordId,\n uniqueSlot\n });\n }\n\n this.refreshRows();\n }\n\n /** @internal */\n public handleCollapseAllRows(): void {\n this.expansionManager.collapseAll();\n }\n\n /** @internal */\n public onRightDividerMouseDown(\n event: MouseEvent,\n columnIndex: number\n ): void {\n if (event.button === 0) {\n this.layoutManager.beginColumnInteractiveSize(\n event.clientX,\n this.getRightDividerIndex(columnIndex)\n );\n }\n }\n\n /** @internal */\n public onLeftDividerMouseDown(\n event: MouseEvent,\n columnIndex: number\n ): void {\n if (event.button === 0) {\n this.layoutManager.beginColumnInteractiveSize(\n event.clientX,\n this.getLeftDividerIndex(columnIndex)\n );\n }\n }\n\n /** @internal */\n public getLeftDividerIndex(columnIndex: number): number {\n return columnIndex * 2 - 1;\n }\n\n /** @internal */\n public getRightDividerIndex(columnIndex: number): number {\n return columnIndex * 2;\n }\n\n /** @internal */\n public handleGroupRowExpanded(rowIndex: number, event: Event): void {\n this.toggleRowExpanded(rowIndex);\n event.stopPropagation();\n }\n\n /** @internal */\n public handleRowExpanded(rowIndex: number): void {\n this.toggleRowExpanded(rowIndex);\n }\n\n /**\n * @internal\n */\n public toggleColumnSort(\n column: TableColumn,\n allowMultiSort: boolean\n ): void {\n if (column.columnInternals.sortingDisabled) {\n return;\n }\n\n const allSortedColumns = this.getColumnsParticipatingInSorting().sort(\n (x, y) => x.columnInternals.currentSortIndex!\n - y.columnInternals.currentSortIndex!\n );\n\n const columnIndex = allSortedColumns.indexOf(column);\n const columnAlreadySorted = columnIndex > -1;\n\n const oldSortDirection = column.columnInternals.currentSortDirection;\n let newSortDirection: TableColumnSortDirection = TableColumnSortDirection.ascending;\n\n if (columnAlreadySorted) {\n if (oldSortDirection === TableColumnSortDirection.descending) {\n allSortedColumns.splice(columnIndex, 1);\n newSortDirection = TableColumnSortDirection.none;\n column.columnInternals.currentSortIndex = undefined;\n } else {\n newSortDirection = TableColumnSortDirection.descending;\n }\n } else {\n allSortedColumns.push(column);\n }\n column.columnInternals.currentSortDirection = newSortDirection;\n\n for (let i = 0; i < allSortedColumns.length; i++) {\n const currentColumn = allSortedColumns[i]!;\n if (allowMultiSort) {\n allSortedColumns[i]!.columnInternals.currentSortIndex = i;\n } else if (currentColumn === column) {\n currentColumn.columnInternals.currentSortIndex = 0;\n } else {\n currentColumn.columnInternals.currentSortIndex = undefined;\n currentColumn.columnInternals.currentSortDirection = TableColumnSortDirection.none;\n }\n }\n\n this.emitColumnConfigurationChangeEvent();\n }\n\n /**\n * @internal\n */\n public onHeaderKeyDown(column: TableColumn, event: KeyboardEvent): boolean {\n const allowMultiSort = event.shiftKey;\n if (event.key === keyEnter) {\n this.toggleColumnSort(column, allowMultiSort);\n }\n // Return true so that we don't prevent default behavior. Without this, Tab navigation\n // gets stuck on the column headers.\n return true;\n }\n\n /**\n * @internal\n */\n public update(): void {\n this.validate();\n if (this.tableUpdateTracker.requiresTanStackUpdate) {\n this.updateTanStack();\n }\n\n if (this.tableUpdateTracker.updateActionMenuSlots) {\n this.updateActionMenuSlots();\n }\n\n if (this.tableUpdateTracker.updateColumnWidths) {\n this.rowGridColumns = this.layoutManager.getGridTemplateColumns();\n this.visibleColumns = this.columns.filter(\n column => !column.columnHidden\n );\n }\n\n if (this.tableUpdateTracker.requiresKeyboardFocusReset) {\n this.keyboardNavigationManager.resetFocusState();\n }\n }\n\n public override get ariaMultiSelectable(): 'true' | 'false' | null {\n switch (this.selectionMode) {\n case TableRowSelectionMode.multiple:\n return 'true';\n case TableRowSelectionMode.single:\n return 'false';\n default:\n return null;\n }\n }\n\n /**\n * @internal\n */\n public getHeaderContainerElements(): NodeListOf<Element> {\n return this.columnHeadersContainer.querySelectorAll(\n '.header-container'\n );\n }\n\n /**\n * @internal\n */\n public calculateTanStackData(\n data: readonly TData[]\n ): Partial<TanStackTableOptionsResolved<TableNode<TData>>> {\n this.dataHierarchyManager = new DataHierarchyManager(\n data,\n this.idFieldName,\n this.parentIdFieldName\n );\n const tableNodes = this.dataHierarchyManager.hierarchicalData;\n this.tableValidator.setParentIdConfigurationValidity(\n this.dataHierarchyManager.parentIdConfigurationValid\n );\n const tanStackUpdates: Partial<\n TanStackTableOptionsResolved<TableNode<TData>>\n > = {\n data: tableNodes\n };\n this.validateWithData(data);\n if (this.tableValidator.areRecordIdsValid()) {\n // Update the selection state to remove previously selected records that no longer exist in the\n // data set while maintaining the selection state of records that still exist in the data set.\n const previousSelection = this.selectionManager.getCurrentSelectedRecordIds();\n tanStackUpdates.state = {\n rowSelection:\n this.calculateTanStackSelectionState(previousSelection),\n // Reset the TanStack expanded state to \"true\" to clear TanStack's cache of expanded state that may include\n // rows that no longer exist in the table. The nimble table's expansion manager tracks the expanded\n // state of each row, so no state is lost by resetting TanStack.\n expanded: true\n };\n }\n return tanStackUpdates;\n }\n\n protected selectionModeChanged(\n _prev: string | undefined,\n _next: string | undefined\n ): void {\n if (!this.$fastController.isConnected) {\n return;\n }\n\n this.tableUpdateTracker.trackSelectionModeChanged();\n }\n\n protected idFieldNameChanged(\n _prev: string | undefined,\n _next: string | undefined\n ): void {\n if (!this.$fastController.isConnected) {\n return;\n }\n\n this.tableUpdateTracker.trackIdFieldNameChanged();\n }\n\n protected parentIdFieldNameChanged(\n _prev: string | undefined,\n _next: string | undefined\n ): void {\n if (!this.$fastController.isConnected) {\n return;\n }\n\n this.tableUpdateTracker.trackParentIdFieldNameChanged();\n }\n\n protected columnsChanged(\n _prev: TableColumn[] | undefined,\n _next: TableColumn[]\n ): void {\n if (!this.$fastController.isConnected) {\n return;\n }\n\n this.observeColumns();\n this.tableUpdateTracker.trackColumnInstancesChanged();\n }\n\n private removeActionMenuSlotsFromColumnRequestedSlots(): void {\n for (const actionMenuSlot of this.actionMenuSlots) {\n this.columnRequestedSlots.delete(actionMenuSlot);\n }\n\n this.refreshRows();\n }\n\n private async handleActionMenuBeforeToggleEvent(\n rowIndex: number,\n event: CustomEvent<TableActionMenuToggleEventDetail>\n ): Promise<void> {\n const selectionChanged = this.selectionManager.handleActionMenuOpening(\n this.tableData[rowIndex]\n );\n if (selectionChanged) {\n await this.emitSelectionChangeEvent();\n }\n\n this.openActionMenuRecordId = event.detail.recordIds[0];\n this.removeActionMenuSlotsFromColumnRequestedSlots();\n const detail = await this.getActionMenuToggleEventDetail(event);\n this.$emit('action-menu-beforetoggle', detail);\n }\n\n private async handleRowActionMenuToggleEvent(\n event: CustomEvent<TableActionMenuToggleEventDetail>\n ): Promise<void> {\n this.keyboardNavigationManager.onRowActionMenuToggle(event);\n const detail = await this.getActionMenuToggleEventDetail(event);\n this.$emit('action-menu-toggle', detail);\n if (!event.detail.newState) {\n this.openActionMenuRecordId = undefined;\n }\n }\n\n private async getActionMenuToggleEventDetail(\n originalEvent: CustomEvent<TableActionMenuToggleEventDetail>\n ): Promise<TableActionMenuToggleEventDetail> {\n const recordIds = this.selectionMode === TableRowSelectionMode.multiple\n ? await this.getSelectedRecordIds()\n : [this.openActionMenuRecordId!];\n return {\n ...originalEvent.detail,\n recordIds\n };\n }\n\n private readonly onViewPortScroll = (event: Event): void => {\n this.scrollX = (event.target as HTMLElement).scrollLeft;\n };\n\n private readonly onKeyDown = (event: KeyboardEvent): void => {\n this.windowShiftKeyDown = event.shiftKey;\n };\n\n private readonly onKeyUp = (event: KeyboardEvent): void => {\n this.windowShiftKeyDown = event.shiftKey;\n };\n\n private readonly onBlur = (): void => {\n this.windowShiftKeyDown = false;\n };\n\n private removeColumnObservers(): void {\n this.columnNotifiers.forEach(notifier => {\n notifier.unsubscribe(this);\n });\n this.columnNotifiers = [];\n }\n\n private initialize(): void {\n if (this.isInitialized) {\n // The table is already initialized. There is nothing more to do.\n return;\n }\n\n this.isInitialized = true;\n // Initialize the controller to ensure that FAST functionality such as Observables work as expected.\n this.$fastController.onConnectedCallback();\n this.tableUpdateTracker.trackAllStateChanged();\n this.observeColumns();\n }\n\n private async processPendingUpdates(): Promise<void> {\n this.initialize();\n await DOM.nextUpdate();\n\n if (this.tableUpdateTracker.hasPendingUpdates) {\n throw new Error('Expected pending updates to be resolved');\n }\n }\n\n private observeColumns(): void {\n this.removeColumnObservers();\n\n for (const column of this.columns) {\n const notifier = Observable.getNotifier(column);\n notifier.subscribe(this);\n this.columnNotifiers.push(notifier);\n const notifierInternals = Observable.getNotifier(\n column.columnInternals\n );\n notifierInternals.subscribe(this);\n this.columnNotifiers.push(notifierInternals);\n const validatorNotifier = Observable.getNotifier(\n column.columnInternals.validator\n );\n validatorNotifier.subscribe(this);\n this.columnNotifiers.push(validatorNotifier);\n }\n }\n\n private getColumnsParticipatingInSorting(): TableColumn[] {\n return this.columns.filter(\n x => !x.columnInternals.sortingDisabled\n && x.columnInternals.currentSortDirection\n !== TableColumnSortDirection.none\n && typeof x.columnInternals.currentSortIndex === 'number'\n );\n }\n\n private getColumnsParticipatingInGrouping(): TableColumn[] {\n return this.columns.filter(\n x => !x.columnInternals.groupingDisabled\n && typeof x.columnInternals.groupIndex === 'number'\n );\n }\n\n private childItemsChanged(): void {\n void this.updateColumnsFromChildItems();\n }\n\n private async updateColumnsFromChildItems(): Promise<void> {\n await waitUntilCustomElementsDefinedAsync(this.childItems);\n this.columns = this.childItems.filter(\n (x): x is TableColumn => x instanceof TableColumn\n );\n }\n\n private updateTanStack(): void {\n const updatedOptions: Partial<\n TanStackTableOptionsResolved<TableNode<TData>>\n > = {};\n updatedOptions.state = {};\n\n if (this.tableUpdateTracker.updateColumnSort) {\n updatedOptions.state.sorting = this.calculateTanStackSortState();\n }\n if (this.tableUpdateTracker.updateColumnDefinition) {\n updatedOptions.columns = this.calculateTanStackColumns();\n }\n if (this.tableUpdateTracker.updateRowIds) {\n updatedOptions.getRowId = this.calculateTanStackRowIdFunction();\n updatedOptions.state.rowSelection = {};\n this.selectionManager.handleSelectionReset();\n this.expansionManager.resetHierarchyOptions();\n }\n if (this.tableUpdateTracker.updateRowParentIds) {\n this.expansionManager.setHierarchyEnabled(\n this.isHierarchyEnabled()\n );\n }\n if (this.tableUpdateTracker.updateSelectionMode) {\n updatedOptions.enableMultiRowSelection = this.selectionMode === TableRowSelectionMode.multiple;\n updatedOptions.enableSubRowSelection = this.selectionMode === TableRowSelectionMode.multiple;\n updatedOptions.state.rowSelection = {};\n this.selectionManager.handleSelectionModeChanged(\n this.selectionMode\n );\n }\n if (\n this.dataHierarchyManager\n && this.tableUpdateTracker.requiresTanStackDataReset\n ) {\n if (\n !this.parentIdFieldName\n && !this.tableUpdateTracker.updateRowParentIds\n ) {\n // Perform a shallow copy of the data to trigger tanstack to regenerate the row models and columns.\n updatedOptions.data = [...this.table.options.data];\n } else {\n const orderedRecords = this.dataHierarchyManager.getAllRecords(true);\n const tanstackUpdates = this.calculateTanStackData(orderedRecords);\n if (tanstackUpdates.state) {\n updatedOptions.state.rowSelection = tanstackUpdates.state.rowSelection;\n }\n updatedOptions.data = tanstackUpdates.data;\n }\n }\n\n if (this.tableUpdateTracker.updateGroupRows) {\n updatedOptions.state.grouping = this.calculateTanStackGroupingState();\n }\n\n if (\n this.tableUpdateTracker.updateRowIds\n || this.tableUpdateTracker.updateRowParentIds\n || this.tableUpdateTracker.updateGroupRows\n ) {\n updatedOptions.state.expanded = true;\n this.expansionManager.resetExpansionState();\n }\n\n this.updateTableOptions(updatedOptions);\n }\n\n private updateActionMenuSlots(): void {\n const slots = new Set<string>();\n for (const column of this.columns) {\n if (column.actionMenuSlot) {\n slots.add(column.actionMenuSlot);\n }\n }\n this.actionMenuSlots = Array.from(slots);\n }\n\n private validate(): void {\n this.tableValidator.validateIdFieldConfiguration(\n this.selectionMode,\n this.idFieldName,\n this.parentIdFieldName\n );\n this.tableValidator.validateColumnIds(\n this.columns.map(x => x.columnId)\n );\n this.tableValidator.validateColumnSortIndices(\n this.getColumnsParticipatingInSorting().map(\n x => x.columnInternals.currentSortIndex!\n )\n );\n this.tableValidator.validateColumnGroupIndices(\n this.getColumnsParticipatingInGrouping().map(\n x => x.columnInternals.groupIndex!\n )\n );\n this.tableValidator.validateColumnConfigurations(this.columns);\n if (this.dataHierarchyManager) {\n this.validateWithData(this.dataHierarchyManager.getAllRecords());\n }\n }\n\n private validateWithData(data: readonly TData[]): void {\n this.tableValidator.validateRecordIds(data, this.idFieldName);\n this.canRenderRows = this.checkValidity();\n }\n\n private emitColumnConfigurationChangeEvent(): void {\n const detail: TableColumnConfigurationChangeEventDetail = {\n columns: this.columns.map(column => ({\n columnId: column.columnId,\n sortIndex: column.columnInternals.currentSortIndex ?? undefined,\n sortDirection: column.columnInternals.currentSortDirection,\n groupIndex: column.columnInternals.groupIndex,\n hidden: column.columnHidden,\n fractionalWidth: column.columnInternals.currentFractionalWidth,\n pixelWidth: column.columnInternals.currentPixelWidth\n }))\n };\n this.$emit('column-configuration-change', detail);\n }\n\n private async emitSelectionChangeEvent(): Promise<void> {\n const detail: TableRowSelectionEventDetail = {\n selectedRecordIds: await this.getSelectedRecordIds()\n };\n\n this.$emit('selection-change', detail);\n }\n\n private selectionStateChanged(): void {\n this.setSelectionCheckboxState();\n }\n\n private selectionCheckboxChanged(): void {\n this.setSelectionCheckboxState();\n }\n\n private setSelectionCheckboxState(): void {\n if (this.selectionCheckbox) {\n this.ignoreSelectionChangeEvents = true;\n this.selectionCheckbox.checked = this.selectionState === TableRowSelectionState.selected;\n this.selectionCheckbox.indeterminate = this.selectionState\n === TableRowSelectionState.partiallySelected;\n this.ignoreSelectionChangeEvents = false;\n }\n }\n\n private isHierarchyEnabled(): boolean {\n return typeof this.parentIdFieldName === 'string';\n }\n\n private refreshRows(): void {\n this.selectionState = this.getTableSelectionState();\n\n let hasDataHierarchy = false;\n const rows = this.table.getRowModel().rows;\n const slotsByRecordId = this.getRequestedSlotsByRecordId();\n this.tableData = rows.map(row => {\n const isGroupRow = row.getIsGrouped();\n const hasParentRow = isGroupRow ? false : row.getParentRow();\n const isParent = !isGroupRow && this.getRowCanExpand(row);\n const isChildOfGroupRowWithNoHierarchy = !isGroupRow\n && !isParent\n && !hasParentRow\n && row.depth > 0\n && !this.parentIdFieldName;\n const rowState: TableRowState<TData> = {\n record: row.original.clientRecord,\n id: row.id,\n selectionState: this.getRowSelectionState(row),\n isGroupRow,\n isExpanded: row.getIsExpanded(),\n groupRowValue: isGroupRow\n ? row.getValue(row.groupingColumnId!)\n : undefined,\n nestingLevel: isChildOfGroupRowWithNoHierarchy\n ? row.depth - 1\n : row.depth,\n isParentRow: isParent,\n immediateChildCount: row.subRows.length,\n groupColumn: this.getGroupRowColumn(row),\n resolvedRowIndex: row.index,\n isLoadingChildren: this.expansionManager.isLoadingChildren(\n row.id\n ),\n slots: slotsByRecordId[row.id] ?? []\n };\n hasDataHierarchy = hasDataHierarchy || isParent;\n return rowState;\n });\n this.showCollapseAll = hasDataHierarchy\n || this.getColumnsParticipatingInGrouping().length > 0;\n this.virtualizer.dataChanged();\n }\n\n private getRequestedSlotsByRecordId(): {\n [recordId: string]: SlotMetadata[]\n } {\n const slotsByRecordId: { [recordId: string]: SlotMetadata[] } = {};\n\n for (const [slotName, { recordId, uniqueSlot }] of this\n .columnRequestedSlots) {\n if (\n !Object.prototype.hasOwnProperty.call(slotsByRecordId, recordId)\n ) {\n slotsByRecordId[recordId] = [];\n }\n slotsByRecordId[recordId]!.push({\n name: slotName,\n slot: uniqueSlot\n });\n }\n\n return slotsByRecordId;\n }\n\n private getTableSelectionState(): TableRowSelectionState {\n if (this.table.getIsAllRowsSelected()) {\n return TableRowSelectionState.selected;\n }\n if (this.table.getIsSomeRowsSelected()) {\n return TableRowSelectionState.partiallySelected;\n }\n return TableRowSelectionState.notSelected;\n }\n\n private getRowSelectionState(\n row: TanStackRow<TableNode<TData>>\n ): TableRowSelectionState {\n if (row.getIsGrouped()) {\n return this.getGroupedRowSelectionState(row);\n }\n\n return row.getIsSelected()\n ? TableRowSelectionState.selected\n : TableRowSelectionState.notSelected;\n }\n\n private getGroupedRowSelectionState(\n groupedRow: TanStackRow<TableNode<TData>>\n ): TableRowSelectionState {\n const leafRows = groupedRow.getLeafRows().filter(x => !x.getIsGrouped()) ?? [];\n let foundSelectedRow = false;\n let foundNotSelectedRow = false;\n for (const row of leafRows) {\n if (row.getIsSelected()) {\n foundSelectedRow = true;\n } else {\n foundNotSelectedRow = true;\n }\n\n if (foundSelectedRow && foundNotSelectedRow) {\n return TableRowSelectionState.partiallySelected;\n }\n }\n\n return foundSelectedRow\n ? TableRowSelectionState.selected\n : TableRowSelectionState.notSelected;\n }\n\n private getGroupRowColumn(\n row: TanStackRow<TableNode<TData>>\n ): TableColumn | undefined {\n const groupedId = row.groupingColumnId;\n if (groupedId !== undefined) {\n return this.columns.find(\n c => c.columnInternals.uniqueId === groupedId\n );\n }\n\n return undefined;\n }\n\n private updateTableOptions(\n updatedOptions: Partial<TanStackTableOptionsResolved<TableNode<TData>>>\n ): void {\n this.options = {\n ...this.options,\n ...updatedOptions,\n state: { ...this.options.state, ...updatedOptions.state }\n };\n this.table.setOptions(this.options);\n if (updatedOptions.data && this.tableValidator.areRecordIdsValid()) {\n const rows = this.table.getRowModel().flatRows;\n this.expansionManager.processDataUpdate(rows);\n }\n this.refreshRows();\n }\n\n private readonly getRowCanExpand = (\n row: TanStackRow<TableNode<TData>>\n ): boolean => {\n return this.expansionManager.isRowExpandable(row);\n };\n\n private readonly getIsRowExpanded = (\n row: TanStackRow<TableNode<TData>>\n ): boolean => {\n return this.expansionManager.isRowExpanded(row);\n };\n\n private readonly handleRowSelectionChange: TanStackOnChangeFn<TanStackRowSelectionState> = (updaterOrValue: TanStackUpdater<TanStackRowSelectionState>): void => {\n const rowSelectionState = updaterOrValue instanceof Function\n ? updaterOrValue(this.table.getState().rowSelection)\n : updaterOrValue;\n\n this.updateTableOptions({\n state: {\n rowSelection: rowSelectionState\n }\n });\n };\n\n private readonly handleExpandedChange: TanStackOnChangeFn<TanStackExpandedState> = (updaterOrValue: TanStackUpdater<TanStackExpandedState>): void => {\n const expandedState = updaterOrValue instanceof Function\n ? updaterOrValue(this.table.getState().expanded)\n : updaterOrValue;\n\n this.updateTableOptions({\n state: {\n expanded: expandedState\n }\n });\n };\n\n private toggleRowExpanded(rowIndex: number): void {\n const rows = this.table.getRowModel().rows;\n const row = rows[rowIndex]!;\n this.expansionManager.toggleRowExpansion(row);\n }\n\n private calculateTanStackSortState(): TanStackSortingState {\n const sortedColumns = this.getColumnsParticipatingInSorting().sort(\n (x, y) => x.columnInternals.currentSortIndex!\n - y.columnInternals.currentSortIndex!\n );\n this.firstSortedColumn = sortedColumns.length\n ? sortedColumns[0]\n : undefined;\n\n return sortedColumns.map(column => {\n return {\n id: column.columnInternals.uniqueId,\n desc:\n column.columnInternals.currentSortDirection\n === TableColumnSortDirection.descending\n };\n });\n }\n\n private calculateTanStackGroupingState(): TanStackGroupingState {\n const groupedColumns = this.getColumnsParticipatingInGrouping().sort(\n (x, y) => x.columnInternals.groupIndex! - y.columnInternals.groupIndex!\n );\n\n return groupedColumns.map(column => column.columnInternals.uniqueId);\n }\n\n private calculateTanStackRowIdFunction():\n | ((\n originalRow: TableNode<TData>,\n index: number,\n parent?: TanStackRow<TableNode<TData>>\n ) => string)\n | undefined {\n return this.idFieldName === null || this.idFieldName === undefined\n ? undefined\n : (record: TableNode<TData>) => record.clientRecord[this.idFieldName!] as string;\n }\n\n private calculateTanStackColumns(): TanStackColumnDef<TableNode<TData>>[] {\n return this.columns.map(column => {\n return {\n id: column.columnInternals.uniqueId,\n accessorFn: (record: TableNode<TData>): TableFieldValue => {\n const fieldName = column.columnInternals.operandDataRecordFieldName;\n if (typeof fieldName !== 'string') {\n return undefined;\n }\n return record.clientRecord[fieldName];\n },\n sortingFn: getTanStackSortingFunction(\n column.columnInternals.sortOperation\n ),\n sortUndefined: false\n };\n });\n }\n\n private calculateTanStackSelectionState(\n recordIdsToSelect: readonly string[]\n ): TanStackRowSelectionState {\n if (this.selectionMode === TableRowSelectionMode.none) {\n return {};\n }\n\n const tanstackSelectionState: TanStackRowSelectionState = {};\n const selectableRecordIds = this.tableValidator.getPresentRecordIds(recordIdsToSelect);\n for (const recordId of selectableRecordIds) {\n tanstackSelectionState[recordId] = true;\n\n if (this.selectionMode === TableRowSelectionMode.single) {\n // In single selection mode, only select the first record ID that is requested\n break;\n }\n }\n\n return tanstackSelectionState;\n }\n}\n\nconst nimbleTable = Table.compose({\n baseName: 'table',\n template,\n styles\n});\n\nDesignSystem.getOrCreate().withPrefix('nimble').register(nimbleTable());\nexport const tableTag = 'nimble-table';\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/table/index.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n attr,\n Observable,\n observable,\n Notifier,\n DOM\n} from '@microsoft/fast-element';\nimport {\n Checkbox,\n DesignSystem,\n FoundationElement\n} from '@microsoft/fast-foundation';\nimport {\n ColumnDef as TanStackColumnDef,\n TableState as TanStackTableState,\n Updater as TanStackUpdater,\n Table as TanStackTable,\n Row as TanStackRow,\n createTable as tanStackCreateTable,\n getCoreRowModel as tanStackGetCoreRowModel,\n getSortedRowModel as tanStackGetSortedRowModel,\n getGroupedRowModel as tanStackGetGroupedRowModel,\n getExpandedRowModel as tanStackGetExpandedRowModel,\n TableOptionsResolved as TanStackTableOptionsResolved,\n SortingState as TanStackSortingState,\n RowSelectionState as TanStackRowSelectionState,\n GroupingState as TanStackGroupingState,\n ExpandedState as TanStackExpandedState,\n OnChangeFn as TanStackOnChangeFn\n} from '@tanstack/table-core';\nimport { keyEnter } from '@microsoft/fast-web-utilities';\nimport { TableColumn } from '../table-column/base';\nimport { TableValidator } from './models/table-validator';\nimport { styles } from './styles';\nimport { template } from './template';\nimport {\n TableNode,\n TableActionMenuToggleEventDetail,\n TableColumnConfigurationChangeEventDetail,\n TableColumnSortDirection,\n TableFieldValue,\n TableRecord,\n TableRowSelectionEventDetail,\n TableRowSelectionMode,\n TableRowSelectionState,\n TableRowSelectionToggleEventDetail,\n TableRowState,\n TableValidity,\n TableSetRecordHierarchyOptions,\n RowSlotRequestEventDetail,\n SlotMetadata\n} from './types';\nimport { Virtualizer } from './models/virtualizer';\nimport { getTanStackSortingFunction } from './models/sort-operations';\nimport { TableLayoutManager } from './models/table-layout-manager';\nimport { TableUpdateTracker } from './models/table-update-tracker';\nimport type { TableRow } from './components/row';\nimport type { TableGroupRow } from './components/group-row';\nimport { ColumnInternals } from '../table-column/base/models/column-internals';\nimport { InteractiveSelectionManager } from './models/interactive-selection-manager';\nimport { DataHierarchyManager } from './models/data-hierarchy-manager';\nimport { ExpansionManager } from './models/expansion-manager';\nimport { waitUntilCustomElementsDefinedAsync } from '../utilities/wait-until-custom-elements-defined-async';\nimport { ColumnValidator } from '../table-column/base/models/column-validator';\nimport { uniquifySlotNameForColumnId } from './models/utilities';\nimport { KeyboardNavigationManager } from './models/keyboard-navigation-manager';\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nimble-table': Table;\n }\n}\n\n/**\n * A nimble-styled table.\n */\nexport class Table<\n TData extends TableRecord = TableRecord\n> extends FoundationElement {\n @attr({ attribute: 'id-field-name' })\n public idFieldName?: string;\n\n @attr({ attribute: 'parent-id-field-name' })\n public parentIdFieldName?: string;\n\n @attr({ attribute: 'selection-mode' })\n public selectionMode: TableRowSelectionMode = TableRowSelectionMode.none;\n\n /**\n * @internal\n */\n @observable\n public tableData: TableRowState<TData>[] = [];\n\n /**\n * @internal\n */\n @observable\n public columns: TableColumn[] = [];\n\n /**\n * @internal\n */\n @observable\n public readonly childItems: Element[] = [];\n\n /**\n * @internal\n */\n @observable\n public readonly rowElements: (TableRow | TableGroupRow)[] = [];\n\n /**\n * @internal\n */\n @observable\n public openActionMenuRecordId?: string;\n\n /**\n * @internal\n */\n @observable\n public canRenderRows = true;\n\n /**\n * @internal\n */\n @observable\n public scrollX = 0;\n\n /**\n * @internal\n */\n @observable\n public rowGridColumns?: string;\n\n /**\n * @internal\n */\n @observable\n public selectionState: TableRowSelectionState = TableRowSelectionState.notSelected;\n\n public get validity(): TableValidity {\n return this.tableValidator.getValidity();\n }\n\n /**\n * @internal\n */\n public get showRowOperationColumn(): boolean {\n return (\n this.selectionMode === TableRowSelectionMode.multiple\n || this.showCollapseAll\n );\n }\n\n /**\n * @internal\n */\n public readonly viewport!: HTMLElement;\n\n /**\n * @internal\n */\n @observable\n public readonly selectionCheckbox?: Checkbox;\n\n /**\n * @internal\n */\n @observable\n public readonly collapseAllButton?: HTMLElement;\n\n /**\n * @internal\n */\n @observable\n public showCollapseAll = false;\n\n /**\n * @internal\n */\n public readonly headerRowActionContainer!: HTMLElement;\n\n /**\n * @internal\n */\n public readonly rowContainer!: HTMLElement;\n\n /**\n * @internal\n */\n public readonly columnHeadersContainer!: Element;\n\n /**\n * @internal\n */\n public readonly virtualizer: Virtualizer<TData>;\n\n /**\n * @internal\n */\n public readonly layoutManager: TableLayoutManager<TData>;\n\n /**\n * @internal\n */\n public readonly keyboardNavigationManager: KeyboardNavigationManager<TData>;\n\n /**\n * @internal\n */\n @observable\n public firstSortedColumn?: TableColumn;\n\n /**\n * @internal\n */\n @observable\n public visibleColumns: TableColumn[] = [];\n\n /**\n * @internal\n * This value determines the size of the viewport area when a user has created horizontal scrollable\n * space through a column resize operation.\n */\n @observable\n public tableScrollableMinWidth = 0;\n\n @observable\n public windowShiftKeyDown = false;\n\n private readonly table: TanStackTable<TableNode<TData>>;\n private options: TanStackTableOptionsResolved<TableNode<TData>>;\n private readonly tableValidator = new TableValidator<TData>();\n private readonly tableUpdateTracker = new TableUpdateTracker(this);\n private readonly selectionManager: InteractiveSelectionManager<TData>;\n private dataHierarchyManager?: DataHierarchyManager<TData>;\n private readonly expansionManager: ExpansionManager<TData>;\n private columnNotifiers: Notifier[] = [];\n private readonly layoutManagerNotifier: Notifier;\n private isInitialized = false;\n // Programmatically updating the selection state of a checkbox fires the 'change' event.\n // Therefore, selection change events that occur due to programmatically updating\n // the selection checkbox 'checked' value should be ingored.\n // https://github.com/microsoft/fast/issues/5750\n private ignoreSelectionChangeEvents = false;\n // Map from the external slot name to the record ID of the row that should have the slot\n // and the unique slot name that the slot should be slotted into.\n private readonly requestedSlots: Map<\n string,\n { recordId: string, uniqueSlot: string }\n > = new Map();\n\n private actionMenuSlots: string[] = [];\n\n public constructor() {\n super();\n this.options = {\n data: [],\n onStateChange: (_: TanStackUpdater<TanStackTableState>) => {},\n onRowSelectionChange: this.handleRowSelectionChange,\n onExpandedChange: this.handleExpandedChange,\n getCoreRowModel: tanStackGetCoreRowModel(),\n getSortedRowModel: tanStackGetSortedRowModel(),\n getGroupedRowModel: tanStackGetGroupedRowModel(),\n getExpandedRowModel: tanStackGetExpandedRowModel(),\n getRowCanExpand: this.getRowCanExpand,\n getIsRowExpanded: this.getIsRowExpanded,\n getSubRows: r => r.subRows,\n columns: [],\n state: {\n rowSelection: {},\n grouping: [],\n expanded: true // Workaround until we can apply a fix to TanStack regarding leveraging our getIsRowExpanded implementation\n },\n enableRowSelection: row => !row.getIsGrouped(),\n enableMultiRowSelection: false,\n enableSubRowSelection: false,\n enableSorting: true,\n enableGrouping: true,\n renderFallbackValue: null,\n autoResetAll: false\n };\n this.table = tanStackCreateTable(this.options);\n this.virtualizer = new Virtualizer(this, this.table);\n this.keyboardNavigationManager = new KeyboardNavigationManager(\n this,\n this.virtualizer\n );\n this.layoutManager = new TableLayoutManager(this);\n this.layoutManagerNotifier = Observable.getNotifier(this.layoutManager);\n this.layoutManagerNotifier.subscribe(this, 'isColumnBeingSized');\n this.selectionManager = new InteractiveSelectionManager(\n this.table,\n this.selectionMode\n );\n this.expansionManager = new ExpansionManager(this.table);\n }\n\n public async setData(newData: readonly TData[]): Promise<void> {\n await this.processPendingUpdates();\n const tanstackUpdates = this.calculateTanStackData(newData);\n this.updateTableOptions(tanstackUpdates);\n }\n\n public async getSelectedRecordIds(): Promise<string[]> {\n await this.processPendingUpdates();\n return this.selectionManager.getCurrentSelectedRecordIds();\n }\n\n public async setSelectedRecordIds(\n recordIds: readonly string[]\n ): Promise<void> {\n await this.processPendingUpdates();\n\n if (this.selectionMode === TableRowSelectionMode.none) {\n return;\n }\n\n this.updateTableOptions({\n state: {\n rowSelection: this.calculateTanStackSelectionState(recordIds)\n }\n });\n }\n\n public async setRecordHierarchyOptions(\n hierarchyOptions: TableSetRecordHierarchyOptions[]\n ): Promise<void> {\n await this.processPendingUpdates();\n const clonedOptions = structuredClone(hierarchyOptions);\n const presentOptions = this.tableValidator.getOptionsWithPresentIds(clonedOptions);\n this.expansionManager.setHierarchyOptions(presentOptions);\n this.refreshRows();\n }\n\n public override connectedCallback(): void {\n super.connectedCallback();\n this.initialize();\n this.virtualizer.connect();\n this.viewport.addEventListener('scroll', this.onViewPortScroll, {\n passive: true\n });\n this.keyboardNavigationManager.connect();\n window.addEventListener('keydown', this.onKeyDown);\n window.addEventListener('keyup', this.onKeyUp);\n window.addEventListener('blur', this.onBlur);\n }\n\n public override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.virtualizer.disconnect();\n this.keyboardNavigationManager.disconnect();\n this.viewport.removeEventListener('scroll', this.onViewPortScroll);\n window.removeEventListener('keydown', this.onKeyDown);\n window.removeEventListener('keyup', this.onKeyUp);\n window.removeEventListener('blur', this.onBlur);\n }\n\n public checkValidity(): boolean {\n return this.tableValidator.isValid();\n }\n\n /**\n * @internal\n *\n * The event handler that is called when a notifier detects a change. Notifiers are added\n * to each column, so `source` is expected to be an instance of `TableColumn`, and `args`\n * is the string name of the property that changed on that column.\n */\n public handleChange(source: unknown, args: unknown): void {\n if (\n (source instanceof TableColumn\n || source instanceof ColumnInternals)\n && typeof args === 'string'\n ) {\n this.tableUpdateTracker.trackColumnPropertyChanged(args);\n } else if (\n source instanceof ColumnValidator\n && args === 'isColumnValid'\n ) {\n this.tableValidator.validateColumnConfigurations(this.columns);\n } else if (\n source instanceof TableLayoutManager\n && args === 'isColumnBeingSized'\n && !this.layoutManager.isColumnBeingSized\n ) {\n // 'isColumnBeingSized' changing to 'false' indicates an interactive\n // column sizing operation has been completed\n this.emitColumnConfigurationChangeEvent();\n }\n }\n\n /** @internal */\n public onRowSelectionToggle(\n rowIndex: number,\n event: CustomEvent<TableRowSelectionToggleEventDetail>\n ): void {\n event.stopImmediatePropagation();\n\n const selectionChanged = this.selectionManager.handleRowSelectionToggle(\n this.tableData[rowIndex],\n event.detail.newState,\n this.windowShiftKeyDown\n );\n\n if (selectionChanged) {\n void this.emitSelectionChangeEvent();\n }\n }\n\n /** @internal */\n public onRowClick(rowIndex: number, event: MouseEvent): boolean {\n const selectionChanged = this.selectionManager.handleRowClick(\n this.tableData[rowIndex],\n event.shiftKey,\n event.ctrlKey || event.metaKey\n );\n\n if (selectionChanged) {\n void this.emitSelectionChangeEvent();\n }\n\n return true;\n }\n\n /** @internal */\n public onRowFocusIn(event: FocusEvent): void {\n this.keyboardNavigationManager.onRowFocusIn(event);\n }\n\n /** @internal */\n public onRowBlur(event: FocusEvent): void {\n this.keyboardNavigationManager.onRowBlur(event);\n }\n\n /** @internal */\n public onAllRowsSelectionChange(event: CustomEvent): void {\n event.stopPropagation();\n\n if (this.ignoreSelectionChangeEvents) {\n return;\n }\n\n this.table.toggleAllRowsSelected(this.selectionCheckbox!.checked);\n void this.emitSelectionChangeEvent();\n }\n\n /** @internal */\n public onRowActionMenuBeforeToggle(\n rowIndex: number,\n event: CustomEvent<TableActionMenuToggleEventDetail>\n ): void {\n event.stopImmediatePropagation();\n void this.handleActionMenuBeforeToggleEvent(rowIndex, event);\n }\n\n /** @internal */\n public onRowActionMenuToggle(\n event: CustomEvent<TableActionMenuToggleEventDetail>\n ): void {\n event.stopImmediatePropagation();\n void this.handleRowActionMenuToggleEvent(event);\n }\n\n /** @internal */\n public onRowSlotsRequest(\n event: CustomEvent<RowSlotRequestEventDetail>\n ): void {\n event.stopImmediatePropagation();\n\n for (const slotMetadata of event.detail.slots) {\n const uniqueSlot = uniquifySlotNameForColumnId(\n event.detail.columnInternalId,\n slotMetadata.slot\n );\n this.requestedSlots.set(slotMetadata.name, {\n recordId: event.detail.recordId,\n uniqueSlot\n });\n }\n\n this.refreshRows();\n }\n\n /** @internal */\n public handleCollapseAllRows(): void {\n this.expansionManager.collapseAll();\n }\n\n /** @internal */\n public onRightDividerMouseDown(\n event: MouseEvent,\n columnIndex: number\n ): void {\n if (event.button === 0) {\n this.layoutManager.beginColumnInteractiveSize(\n event.clientX,\n this.getRightDividerIndex(columnIndex)\n );\n }\n }\n\n /** @internal */\n public onLeftDividerMouseDown(\n event: MouseEvent,\n columnIndex: number\n ): void {\n if (event.button === 0) {\n this.layoutManager.beginColumnInteractiveSize(\n event.clientX,\n this.getLeftDividerIndex(columnIndex)\n );\n }\n }\n\n /** @internal */\n public getLeftDividerIndex(columnIndex: number): number {\n return columnIndex * 2 - 1;\n }\n\n /** @internal */\n public getRightDividerIndex(columnIndex: number): number {\n return columnIndex * 2;\n }\n\n /** @internal */\n public handleGroupRowExpanded(rowIndex: number, event: Event): void {\n this.toggleRowExpanded(rowIndex);\n event.stopPropagation();\n }\n\n /** @internal */\n public handleRowExpanded(rowIndex: number): void {\n this.toggleRowExpanded(rowIndex);\n }\n\n /**\n * @internal\n */\n public toggleColumnSort(\n column: TableColumn,\n allowMultiSort: boolean\n ): void {\n if (column.columnInternals.sortingDisabled) {\n return;\n }\n\n const allSortedColumns = this.getColumnsParticipatingInSorting().sort(\n (x, y) => x.columnInternals.currentSortIndex!\n - y.columnInternals.currentSortIndex!\n );\n\n const columnIndex = allSortedColumns.indexOf(column);\n const columnAlreadySorted = columnIndex > -1;\n\n const oldSortDirection = column.columnInternals.currentSortDirection;\n let newSortDirection: TableColumnSortDirection = TableColumnSortDirection.ascending;\n\n if (columnAlreadySorted) {\n if (oldSortDirection === TableColumnSortDirection.descending) {\n allSortedColumns.splice(columnIndex, 1);\n newSortDirection = TableColumnSortDirection.none;\n column.columnInternals.currentSortIndex = undefined;\n } else {\n newSortDirection = TableColumnSortDirection.descending;\n }\n } else {\n allSortedColumns.push(column);\n }\n column.columnInternals.currentSortDirection = newSortDirection;\n\n for (let i = 0; i < allSortedColumns.length; i++) {\n const currentColumn = allSortedColumns[i]!;\n if (allowMultiSort) {\n allSortedColumns[i]!.columnInternals.currentSortIndex = i;\n } else if (currentColumn === column) {\n currentColumn.columnInternals.currentSortIndex = 0;\n } else {\n currentColumn.columnInternals.currentSortIndex = undefined;\n currentColumn.columnInternals.currentSortDirection = TableColumnSortDirection.none;\n }\n }\n\n this.emitColumnConfigurationChangeEvent();\n }\n\n /**\n * @internal\n */\n public onHeaderKeyDown(column: TableColumn, event: KeyboardEvent): boolean {\n const allowMultiSort = event.shiftKey;\n if (event.key === keyEnter) {\n this.toggleColumnSort(column, allowMultiSort);\n }\n // Return true so that we don't prevent default behavior. Without this, Tab navigation\n // gets stuck on the column headers.\n return true;\n }\n\n /**\n * @internal\n */\n public update(): void {\n this.validate();\n if (this.tableUpdateTracker.requiresTanStackUpdate) {\n this.updateTanStack();\n }\n\n if (this.tableUpdateTracker.updateActionMenuSlots) {\n this.updateActionMenuSlots();\n }\n\n if (this.tableUpdateTracker.updateColumnWidths) {\n this.rowGridColumns = this.layoutManager.getGridTemplateColumns();\n this.visibleColumns = this.columns.filter(\n column => !column.columnHidden\n );\n }\n\n if (this.tableUpdateTracker.requiresKeyboardFocusReset) {\n this.keyboardNavigationManager.resetFocusState();\n }\n }\n\n public override get ariaMultiSelectable(): 'true' | 'false' | null {\n switch (this.selectionMode) {\n case TableRowSelectionMode.multiple:\n return 'true';\n case TableRowSelectionMode.single:\n return 'false';\n default:\n return null;\n }\n }\n\n /**\n * @internal\n */\n public getHeaderContainerElements(): NodeListOf<Element> {\n return this.columnHeadersContainer.querySelectorAll(\n '.header-container'\n );\n }\n\n /**\n * @internal\n */\n public calculateTanStackData(\n data: readonly TData[]\n ): Partial<TanStackTableOptionsResolved<TableNode<TData>>> {\n this.dataHierarchyManager = new DataHierarchyManager(\n data,\n this.idFieldName,\n this.parentIdFieldName\n );\n const tableNodes = this.dataHierarchyManager.hierarchicalData;\n this.tableValidator.setParentIdConfigurationValidity(\n this.dataHierarchyManager.parentIdConfigurationValid\n );\n const tanStackUpdates: Partial<\n TanStackTableOptionsResolved<TableNode<TData>>\n > = {\n data: tableNodes\n };\n this.validateWithData(data);\n if (this.tableValidator.areRecordIdsValid()) {\n // Update the selection state to remove previously selected records that no longer exist in the\n // data set while maintaining the selection state of records that still exist in the data set.\n const previousSelection = this.selectionManager.getCurrentSelectedRecordIds();\n tanStackUpdates.state = {\n rowSelection:\n this.calculateTanStackSelectionState(previousSelection),\n // Reset the TanStack expanded state to \"true\" to clear TanStack's cache of expanded state that may include\n // rows that no longer exist in the table. The nimble table's expansion manager tracks the expanded\n // state of each row, so no state is lost by resetting TanStack.\n expanded: true\n };\n }\n return tanStackUpdates;\n }\n\n protected selectionModeChanged(\n _prev: string | undefined,\n _next: string | undefined\n ): void {\n if (!this.$fastController.isConnected) {\n return;\n }\n\n this.tableUpdateTracker.trackSelectionModeChanged();\n }\n\n protected idFieldNameChanged(\n _prev: string | undefined,\n _next: string | undefined\n ): void {\n if (!this.$fastController.isConnected) {\n return;\n }\n\n this.tableUpdateTracker.trackIdFieldNameChanged();\n }\n\n protected parentIdFieldNameChanged(\n _prev: string | undefined,\n _next: string | undefined\n ): void {\n if (!this.$fastController.isConnected) {\n return;\n }\n\n this.tableUpdateTracker.trackParentIdFieldNameChanged();\n }\n\n protected columnsChanged(\n _prev: TableColumn[] | undefined,\n _next: TableColumn[]\n ): void {\n if (!this.$fastController.isConnected) {\n return;\n }\n\n this.observeColumns();\n this.tableUpdateTracker.trackColumnInstancesChanged();\n }\n\n private updateRequestedSlotsForOpeningActionMenu(\n openActionMenuRecordId: string\n ): void {\n for (const actionMenuSlot of this.actionMenuSlots) {\n this.requestedSlots.set(actionMenuSlot, {\n recordId: openActionMenuRecordId,\n uniqueSlot: `row-action-menu-${actionMenuSlot}`\n });\n }\n\n this.refreshRows();\n }\n\n private async handleActionMenuBeforeToggleEvent(\n rowIndex: number,\n event: CustomEvent<TableActionMenuToggleEventDetail>\n ): Promise<void> {\n const selectionChanged = this.selectionManager.handleActionMenuOpening(\n this.tableData[rowIndex]\n );\n if (selectionChanged) {\n await this.emitSelectionChangeEvent();\n }\n\n this.openActionMenuRecordId = event.detail.recordIds[0];\n this.updateRequestedSlotsForOpeningActionMenu(\n this.openActionMenuRecordId!\n );\n const detail = await this.getActionMenuToggleEventDetail(event);\n this.$emit('action-menu-beforetoggle', detail);\n }\n\n private async handleRowActionMenuToggleEvent(\n event: CustomEvent<TableActionMenuToggleEventDetail>\n ): Promise<void> {\n this.keyboardNavigationManager.onRowActionMenuToggle(event);\n const detail = await this.getActionMenuToggleEventDetail(event);\n this.$emit('action-menu-toggle', detail);\n if (!event.detail.newState) {\n this.openActionMenuRecordId = undefined;\n }\n }\n\n private async getActionMenuToggleEventDetail(\n originalEvent: CustomEvent<TableActionMenuToggleEventDetail>\n ): Promise<TableActionMenuToggleEventDetail> {\n const recordIds = this.selectionMode === TableRowSelectionMode.multiple\n ? await this.getSelectedRecordIds()\n : [this.openActionMenuRecordId!];\n return {\n ...originalEvent.detail,\n recordIds\n };\n }\n\n private readonly onViewPortScroll = (event: Event): void => {\n this.scrollX = (event.target as HTMLElement).scrollLeft;\n };\n\n private readonly onKeyDown = (event: KeyboardEvent): void => {\n this.windowShiftKeyDown = event.shiftKey;\n };\n\n private readonly onKeyUp = (event: KeyboardEvent): void => {\n this.windowShiftKeyDown = event.shiftKey;\n };\n\n private readonly onBlur = (): void => {\n this.windowShiftKeyDown = false;\n };\n\n private removeColumnObservers(): void {\n this.columnNotifiers.forEach(notifier => {\n notifier.unsubscribe(this);\n });\n this.columnNotifiers = [];\n }\n\n private initialize(): void {\n if (this.isInitialized) {\n // The table is already initialized. There is nothing more to do.\n return;\n }\n\n this.isInitialized = true;\n // Initialize the controller to ensure that FAST functionality such as Observables work as expected.\n this.$fastController.onConnectedCallback();\n this.tableUpdateTracker.trackAllStateChanged();\n this.observeColumns();\n }\n\n private async processPendingUpdates(): Promise<void> {\n this.initialize();\n await DOM.nextUpdate();\n\n if (this.tableUpdateTracker.hasPendingUpdates) {\n throw new Error('Expected pending updates to be resolved');\n }\n }\n\n private observeColumns(): void {\n this.removeColumnObservers();\n\n for (const column of this.columns) {\n const notifier = Observable.getNotifier(column);\n notifier.subscribe(this);\n this.columnNotifiers.push(notifier);\n const notifierInternals = Observable.getNotifier(\n column.columnInternals\n );\n notifierInternals.subscribe(this);\n this.columnNotifiers.push(notifierInternals);\n const validatorNotifier = Observable.getNotifier(\n column.columnInternals.validator\n );\n validatorNotifier.subscribe(this);\n this.columnNotifiers.push(validatorNotifier);\n }\n }\n\n private getColumnsParticipatingInSorting(): TableColumn[] {\n return this.columns.filter(\n x => !x.columnInternals.sortingDisabled\n && x.columnInternals.currentSortDirection\n !== TableColumnSortDirection.none\n && typeof x.columnInternals.currentSortIndex === 'number'\n );\n }\n\n private getColumnsParticipatingInGrouping(): TableColumn[] {\n return this.columns.filter(\n x => !x.columnInternals.groupingDisabled\n && typeof x.columnInternals.groupIndex === 'number'\n );\n }\n\n private childItemsChanged(): void {\n void this.updateColumnsFromChildItems();\n }\n\n private async updateColumnsFromChildItems(): Promise<void> {\n await waitUntilCustomElementsDefinedAsync(this.childItems);\n this.columns = this.childItems.filter(\n (x): x is TableColumn => x instanceof TableColumn\n );\n }\n\n private updateTanStack(): void {\n const updatedOptions: Partial<\n TanStackTableOptionsResolved<TableNode<TData>>\n > = {};\n updatedOptions.state = {};\n\n if (this.tableUpdateTracker.updateColumnSort) {\n updatedOptions.state.sorting = this.calculateTanStackSortState();\n }\n if (this.tableUpdateTracker.updateColumnDefinition) {\n updatedOptions.columns = this.calculateTanStackColumns();\n }\n if (this.tableUpdateTracker.updateRowIds) {\n updatedOptions.getRowId = this.calculateTanStackRowIdFunction();\n updatedOptions.state.rowSelection = {};\n this.selectionManager.handleSelectionReset();\n this.expansionManager.resetHierarchyOptions();\n }\n if (this.tableUpdateTracker.updateRowParentIds) {\n this.expansionManager.setHierarchyEnabled(\n this.isHierarchyEnabled()\n );\n }\n if (this.tableUpdateTracker.updateSelectionMode) {\n updatedOptions.enableMultiRowSelection = this.selectionMode === TableRowSelectionMode.multiple;\n updatedOptions.enableSubRowSelection = this.selectionMode === TableRowSelectionMode.multiple;\n updatedOptions.state.rowSelection = {};\n this.selectionManager.handleSelectionModeChanged(\n this.selectionMode\n );\n }\n if (\n this.dataHierarchyManager\n && this.tableUpdateTracker.requiresTanStackDataReset\n ) {\n if (\n !this.parentIdFieldName\n && !this.tableUpdateTracker.updateRowParentIds\n ) {\n // Perform a shallow copy of the data to trigger tanstack to regenerate the row models and columns.\n updatedOptions.data = [...this.table.options.data];\n } else {\n const orderedRecords = this.dataHierarchyManager.getAllRecords(true);\n const tanstackUpdates = this.calculateTanStackData(orderedRecords);\n if (tanstackUpdates.state) {\n updatedOptions.state.rowSelection = tanstackUpdates.state.rowSelection;\n }\n updatedOptions.data = tanstackUpdates.data;\n }\n }\n\n if (this.tableUpdateTracker.updateGroupRows) {\n updatedOptions.state.grouping = this.calculateTanStackGroupingState();\n }\n\n if (\n this.tableUpdateTracker.updateRowIds\n || this.tableUpdateTracker.updateRowParentIds\n || this.tableUpdateTracker.updateGroupRows\n ) {\n updatedOptions.state.expanded = true;\n this.expansionManager.resetExpansionState();\n }\n\n this.updateTableOptions(updatedOptions);\n }\n\n private updateActionMenuSlots(): void {\n if (this.openActionMenuRecordId !== undefined) {\n // If the action menu is open, delete all the slots associated\n // with the old action menu slots.\n for (const actionMenuSlot of this.actionMenuSlots) {\n this.requestedSlots.delete(actionMenuSlot);\n }\n }\n\n const slots = new Set<string>();\n for (const column of this.columns) {\n if (column.actionMenuSlot) {\n slots.add(column.actionMenuSlot);\n }\n }\n this.actionMenuSlots = Array.from(slots);\n\n if (this.openActionMenuRecordId !== undefined) {\n // If the action menu is open, create slots for all the new\n // action menu slots.\n this.updateRequestedSlotsForOpeningActionMenu(\n this.openActionMenuRecordId\n );\n }\n }\n\n private validate(): void {\n this.tableValidator.validateIdFieldConfiguration(\n this.selectionMode,\n this.idFieldName,\n this.parentIdFieldName\n );\n this.tableValidator.validateColumnIds(\n this.columns.map(x => x.columnId)\n );\n this.tableValidator.validateColumnSortIndices(\n this.getColumnsParticipatingInSorting().map(\n x => x.columnInternals.currentSortIndex!\n )\n );\n this.tableValidator.validateColumnGroupIndices(\n this.getColumnsParticipatingInGrouping().map(\n x => x.columnInternals.groupIndex!\n )\n );\n this.tableValidator.validateColumnConfigurations(this.columns);\n if (this.dataHierarchyManager) {\n this.validateWithData(this.dataHierarchyManager.getAllRecords());\n }\n }\n\n private validateWithData(data: readonly TData[]): void {\n this.tableValidator.validateRecordIds(data, this.idFieldName);\n this.canRenderRows = this.checkValidity();\n }\n\n private emitColumnConfigurationChangeEvent(): void {\n const detail: TableColumnConfigurationChangeEventDetail = {\n columns: this.columns.map(column => ({\n columnId: column.columnId,\n sortIndex: column.columnInternals.currentSortIndex ?? undefined,\n sortDirection: column.columnInternals.currentSortDirection,\n groupIndex: column.columnInternals.groupIndex,\n hidden: column.columnHidden,\n fractionalWidth: column.columnInternals.currentFractionalWidth,\n pixelWidth: column.columnInternals.currentPixelWidth\n }))\n };\n this.$emit('column-configuration-change', detail);\n }\n\n private async emitSelectionChangeEvent(): Promise<void> {\n const detail: TableRowSelectionEventDetail = {\n selectedRecordIds: await this.getSelectedRecordIds()\n };\n\n this.$emit('selection-change', detail);\n }\n\n private selectionStateChanged(): void {\n this.setSelectionCheckboxState();\n }\n\n private selectionCheckboxChanged(): void {\n this.setSelectionCheckboxState();\n }\n\n private setSelectionCheckboxState(): void {\n if (this.selectionCheckbox) {\n this.ignoreSelectionChangeEvents = true;\n this.selectionCheckbox.checked = this.selectionState === TableRowSelectionState.selected;\n this.selectionCheckbox.indeterminate = this.selectionState\n === TableRowSelectionState.partiallySelected;\n this.ignoreSelectionChangeEvents = false;\n }\n }\n\n private isHierarchyEnabled(): boolean {\n return typeof this.parentIdFieldName === 'string';\n }\n\n private refreshRows(): void {\n this.selectionState = this.getTableSelectionState();\n\n let hasDataHierarchy = false;\n const rows = this.table.getRowModel().rows;\n const slotsByRecordId = this.getRequestedSlotsByRecordId();\n this.tableData = rows.map(row => {\n const isGroupRow = row.getIsGrouped();\n const hasParentRow = isGroupRow ? false : row.getParentRow();\n const isParent = !isGroupRow && this.getRowCanExpand(row);\n const isChildOfGroupRowWithNoHierarchy = !isGroupRow\n && !isParent\n && !hasParentRow\n && row.depth > 0\n && !this.parentIdFieldName;\n const rowState: TableRowState<TData> = {\n record: row.original.clientRecord,\n id: row.id,\n selectionState: this.getRowSelectionState(row),\n isGroupRow,\n isExpanded: row.getIsExpanded(),\n groupRowValue: isGroupRow\n ? row.getValue(row.groupingColumnId!)\n : undefined,\n nestingLevel: isChildOfGroupRowWithNoHierarchy\n ? row.depth - 1\n : row.depth,\n isParentRow: isParent,\n immediateChildCount: row.subRows.length,\n groupColumn: this.getGroupRowColumn(row),\n resolvedRowIndex: row.index,\n isLoadingChildren: this.expansionManager.isLoadingChildren(\n row.id\n ),\n requestedSlots: slotsByRecordId[row.id] ?? []\n };\n hasDataHierarchy = hasDataHierarchy || isParent;\n return rowState;\n });\n this.showCollapseAll = hasDataHierarchy\n || this.getColumnsParticipatingInGrouping().length > 0;\n this.virtualizer.dataChanged();\n }\n\n private getRequestedSlotsByRecordId(): {\n [recordId: string]: SlotMetadata[]\n } {\n const slotsByRecordId: { [recordId: string]: SlotMetadata[] } = {};\n\n for (const [slotName, { recordId, uniqueSlot }] of this\n .requestedSlots) {\n if (\n !Object.prototype.hasOwnProperty.call(slotsByRecordId, recordId)\n ) {\n slotsByRecordId[recordId] = [];\n }\n slotsByRecordId[recordId]!.push({\n name: slotName,\n slot: uniqueSlot\n });\n }\n\n return slotsByRecordId;\n }\n\n private getTableSelectionState(): TableRowSelectionState {\n if (this.table.getIsAllRowsSelected()) {\n return TableRowSelectionState.selected;\n }\n if (this.table.getIsSomeRowsSelected()) {\n return TableRowSelectionState.partiallySelected;\n }\n return TableRowSelectionState.notSelected;\n }\n\n private getRowSelectionState(\n row: TanStackRow<TableNode<TData>>\n ): TableRowSelectionState {\n if (row.getIsGrouped()) {\n return this.getGroupedRowSelectionState(row);\n }\n\n return row.getIsSelected()\n ? TableRowSelectionState.selected\n : TableRowSelectionState.notSelected;\n }\n\n private getGroupedRowSelectionState(\n groupedRow: TanStackRow<TableNode<TData>>\n ): TableRowSelectionState {\n const leafRows = groupedRow.getLeafRows().filter(x => !x.getIsGrouped()) ?? [];\n let foundSelectedRow = false;\n let foundNotSelectedRow = false;\n for (const row of leafRows) {\n if (row.getIsSelected()) {\n foundSelectedRow = true;\n } else {\n foundNotSelectedRow = true;\n }\n\n if (foundSelectedRow && foundNotSelectedRow) {\n return TableRowSelectionState.partiallySelected;\n }\n }\n\n return foundSelectedRow\n ? TableRowSelectionState.selected\n : TableRowSelectionState.notSelected;\n }\n\n private getGroupRowColumn(\n row: TanStackRow<TableNode<TData>>\n ): TableColumn | undefined {\n const groupedId = row.groupingColumnId;\n if (groupedId !== undefined) {\n return this.columns.find(\n c => c.columnInternals.uniqueId === groupedId\n );\n }\n\n return undefined;\n }\n\n private updateTableOptions(\n updatedOptions: Partial<TanStackTableOptionsResolved<TableNode<TData>>>\n ): void {\n this.options = {\n ...this.options,\n ...updatedOptions,\n state: { ...this.options.state, ...updatedOptions.state }\n };\n this.table.setOptions(this.options);\n if (updatedOptions.data && this.tableValidator.areRecordIdsValid()) {\n const rows = this.table.getRowModel().flatRows;\n this.expansionManager.processDataUpdate(rows);\n }\n this.refreshRows();\n }\n\n private readonly getRowCanExpand = (\n row: TanStackRow<TableNode<TData>>\n ): boolean => {\n return this.expansionManager.isRowExpandable(row);\n };\n\n private readonly getIsRowExpanded = (\n row: TanStackRow<TableNode<TData>>\n ): boolean => {\n return this.expansionManager.isRowExpanded(row);\n };\n\n private readonly handleRowSelectionChange: TanStackOnChangeFn<TanStackRowSelectionState> = (updaterOrValue: TanStackUpdater<TanStackRowSelectionState>): void => {\n const rowSelectionState = updaterOrValue instanceof Function\n ? updaterOrValue(this.table.getState().rowSelection)\n : updaterOrValue;\n\n this.updateTableOptions({\n state: {\n rowSelection: rowSelectionState\n }\n });\n };\n\n private readonly handleExpandedChange: TanStackOnChangeFn<TanStackExpandedState> = (updaterOrValue: TanStackUpdater<TanStackExpandedState>): void => {\n const expandedState = updaterOrValue instanceof Function\n ? updaterOrValue(this.table.getState().expanded)\n : updaterOrValue;\n\n this.updateTableOptions({\n state: {\n expanded: expandedState\n }\n });\n };\n\n private toggleRowExpanded(rowIndex: number): void {\n const rows = this.table.getRowModel().rows;\n const row = rows[rowIndex]!;\n this.expansionManager.toggleRowExpansion(row);\n }\n\n private calculateTanStackSortState(): TanStackSortingState {\n const sortedColumns = this.getColumnsParticipatingInSorting().sort(\n (x, y) => x.columnInternals.currentSortIndex!\n - y.columnInternals.currentSortIndex!\n );\n this.firstSortedColumn = sortedColumns.length\n ? sortedColumns[0]\n : undefined;\n\n return sortedColumns.map(column => {\n return {\n id: column.columnInternals.uniqueId,\n desc:\n column.columnInternals.currentSortDirection\n === TableColumnSortDirection.descending\n };\n });\n }\n\n private calculateTanStackGroupingState(): TanStackGroupingState {\n const groupedColumns = this.getColumnsParticipatingInGrouping().sort(\n (x, y) => x.columnInternals.groupIndex! - y.columnInternals.groupIndex!\n );\n\n return groupedColumns.map(column => column.columnInternals.uniqueId);\n }\n\n private calculateTanStackRowIdFunction():\n | ((\n originalRow: TableNode<TData>,\n index: number,\n parent?: TanStackRow<TableNode<TData>>\n ) => string)\n | undefined {\n return this.idFieldName === null || this.idFieldName === undefined\n ? undefined\n : (record: TableNode<TData>) => record.clientRecord[this.idFieldName!] as string;\n }\n\n private calculateTanStackColumns(): TanStackColumnDef<TableNode<TData>>[] {\n return this.columns.map(column => {\n return {\n id: column.columnInternals.uniqueId,\n accessorFn: (record: TableNode<TData>): TableFieldValue => {\n const fieldName = column.columnInternals.operandDataRecordFieldName;\n if (typeof fieldName !== 'string') {\n return undefined;\n }\n return record.clientRecord[fieldName];\n },\n sortingFn: getTanStackSortingFunction(\n column.columnInternals.sortOperation\n ),\n sortUndefined: false\n };\n });\n }\n\n private calculateTanStackSelectionState(\n recordIdsToSelect: readonly string[]\n ): TanStackRowSelectionState {\n if (this.selectionMode === TableRowSelectionMode.none) {\n return {};\n }\n\n const tanstackSelectionState: TanStackRowSelectionState = {};\n const selectableRecordIds = this.tableValidator.getPresentRecordIds(recordIdsToSelect);\n for (const recordId of selectableRecordIds) {\n tanstackSelectionState[recordId] = true;\n\n if (this.selectionMode === TableRowSelectionMode.single) {\n // In single selection mode, only select the first record ID that is requested\n break;\n }\n }\n\n return tanstackSelectionState;\n }\n}\n\nconst nimbleTable = Table.compose({\n baseName: 'table',\n template,\n styles\n});\n\nDesignSystem.getOrCreate().withPrefix('nimble').register(nimbleTable());\nexport const tableTag = 'nimble-table';\n"]}
|
|
@@ -163,15 +163,7 @@ export const template = html `
|
|
|
163
163
|
@row-slots-request="${(_, c) => c.parent.onRowSlotsRequest(c.event)}"
|
|
164
164
|
@row-expand-toggle="${(x, c) => c.parent.handleRowExpanded(x.index)}"
|
|
165
165
|
>
|
|
166
|
-
${
|
|
167
|
-
${repeat((_, c) => c.parent.actionMenuSlots, html `
|
|
168
|
-
<slot
|
|
169
|
-
name="${x => x}"
|
|
170
|
-
slot="${x => `row-action-menu-${x}`}">
|
|
171
|
-
</slot>
|
|
172
|
-
`)}
|
|
173
|
-
`)}
|
|
174
|
-
${repeat((x, c) => (c.parent.tableData[x.index]?.slots || []), html `
|
|
166
|
+
${repeat((x, c) => (c.parent.tableData[x.index]?.requestedSlots || []), html `
|
|
175
167
|
<slot
|
|
176
168
|
name="${x => x.name}"
|
|
177
169
|
slot="${x => x.slot}"
|