@ni/nimble-components 30.0.7 → 30.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/all-components-bundle.js +133 -97
- package/dist/all-components-bundle.js.map +1 -1
- package/dist/all-components-bundle.min.js +1291 -1272
- package/dist/all-components-bundle.min.js.map +1 -1
- package/dist/esm/anchor-menu-item/index.js.map +1 -1
- package/dist/esm/anchor-tabs/index.js.map +1 -1
- package/dist/esm/anchor-tree-item/index.js.map +1 -1
- package/dist/esm/combobox/index.js +4 -4
- package/dist/esm/combobox/index.js.map +1 -1
- package/dist/esm/combobox/styles.js +0 -4
- package/dist/esm/combobox/styles.js.map +1 -1
- package/dist/esm/combobox/template.js +13 -2
- package/dist/esm/combobox/template.js.map +1 -1
- package/dist/esm/combobox/testing/combobox.pageobject.d.ts +8 -0
- package/dist/esm/combobox/testing/combobox.pageobject.js +15 -0
- package/dist/esm/combobox/testing/combobox.pageobject.js.map +1 -1
- package/dist/esm/dialog/index.js.map +1 -1
- package/dist/esm/drawer/index.js.map +1 -1
- package/dist/esm/label-provider/base/index.js.map +1 -1
- package/dist/esm/list-option/index.js.map +1 -1
- package/dist/esm/list-option-group/index.js.map +1 -1
- package/dist/esm/mapping/icon/index.js.map +1 -1
- package/dist/esm/menu-button/index.js.map +1 -1
- package/dist/esm/menu-button/testing/menu-button.pageobject.js.map +1 -1
- package/dist/esm/patterns/dropdown/styles.js +68 -51
- package/dist/esm/patterns/dropdown/styles.js.map +1 -1
- package/dist/esm/rich-text/base/index.js.map +1 -1
- package/dist/esm/rich-text/editor/index.js.map +1 -1
- package/dist/esm/rich-text/editor/models/create-tiptap-editor.js.map +1 -1
- package/dist/esm/rich-text/editor/testing/rich-text-editor.pageobject.js.map +1 -1
- package/dist/esm/rich-text/mention-listbox/index.js +3 -0
- package/dist/esm/rich-text/mention-listbox/index.js.map +1 -1
- package/dist/esm/rich-text/mention-listbox/template.js +18 -3
- package/dist/esm/rich-text/mention-listbox/template.js.map +1 -1
- package/dist/esm/rich-text/models/markdown-parser.js +12 -12
- package/dist/esm/rich-text/models/markdown-parser.js.map +1 -1
- package/dist/esm/rich-text/models/rich-text-tracker.js.map +1 -1
- package/dist/esm/rich-text/models/testing/markdown-parser-utils.js.map +1 -1
- package/dist/esm/rich-text/viewer/index.js.map +1 -1
- package/dist/esm/rich-text/viewer/testing/rich-text-viewer.pageobject.js.map +1 -1
- package/dist/esm/rich-text-mention/base/index.js.map +1 -1
- package/dist/esm/rich-text-mention/base/models/mention-validator.js.map +1 -1
- package/dist/esm/rich-text-mention/users/index.js.map +1 -1
- package/dist/esm/select/index.js.map +1 -1
- package/dist/esm/select/models/select-form-associated.js +1 -0
- package/dist/esm/select/models/select-form-associated.js.map +1 -1
- package/dist/esm/select/styles.js +0 -16
- package/dist/esm/select/styles.js.map +1 -1
- package/dist/esm/select/template.js +7 -6
- package/dist/esm/select/template.js.map +1 -1
- package/dist/esm/select/testing/select.pageobject.js.map +1 -1
- package/dist/esm/spinner/template.js +1 -0
- package/dist/esm/spinner/template.js.map +1 -1
- package/dist/esm/table/components/group-row/index.js.map +1 -1
- package/dist/esm/table/components/group-row/template.js +1 -0
- package/dist/esm/table/components/group-row/template.js.map +1 -1
- package/dist/esm/table/components/header/index.js.map +1 -1
- package/dist/esm/table/components/row/index.js.map +1 -1
- package/dist/esm/table/index.js.map +1 -1
- package/dist/esm/table/models/array-to-tree.js.map +1 -1
- package/dist/esm/table/models/data-hierarchy-manager.js.map +1 -1
- package/dist/esm/table/models/expansion-manager.js.map +1 -1
- package/dist/esm/table/models/interactive-selection-manager.js.map +1 -1
- package/dist/esm/table/models/keyboard-navigation-manager.js.map +1 -1
- package/dist/esm/table/models/selection-managers/multi-selection-manager.js.map +1 -1
- package/dist/esm/table/models/selection-managers/selection-manager-base.js.map +1 -1
- package/dist/esm/table/models/sort-operations.js.map +1 -1
- package/dist/esm/table/models/table-layout-manager.js.map +1 -1
- package/dist/esm/table/models/table-update-tracker.js.map +1 -1
- package/dist/esm/table/models/table-validator.js.map +1 -1
- package/dist/esm/table/models/virtualizer.js.map +1 -1
- package/dist/esm/table/testing/table.pageobject.js.map +1 -1
- package/dist/esm/table-column/anchor/cell-view/index.js.map +1 -1
- package/dist/esm/table-column/anchor/cell-view/template.js +1 -0
- package/dist/esm/table-column/anchor/cell-view/template.js.map +1 -1
- package/dist/esm/table-column/base/cell-view/index.js.map +1 -1
- package/dist/esm/table-column/base/cell-view/template.js.map +1 -1
- package/dist/esm/table-column/base/group-header-view/template.js.map +1 -1
- package/dist/esm/table-column/base/models/column-internals.js.map +1 -1
- package/dist/esm/table-column/base/models/column-validator.js.map +1 -1
- package/dist/esm/table-column/date-text/cell-view/index.js.map +1 -1
- package/dist/esm/table-column/date-text/group-header-view/index.js.map +1 -1
- package/dist/esm/table-column/date-text/index.js.map +1 -1
- package/dist/esm/table-column/date-text/models/format-helper.js.map +1 -1
- package/dist/esm/table-column/date-text/testing/table-column-date-text.pageobject.js.map +1 -1
- package/dist/esm/table-column/duration-text/group-header-view/index.js.map +1 -1
- package/dist/esm/table-column/duration-text/models/duration-formatter.js.map +1 -1
- package/dist/esm/table-column/duration-text/testing/table-column-duration-text.pageobject.js.map +1 -1
- package/dist/esm/table-column/enum-base/index.js.map +1 -1
- package/dist/esm/table-column/enum-base/models/mapping-key-resolver.js.map +1 -1
- package/dist/esm/table-column/mapping/cell-view/index.js.map +1 -1
- package/dist/esm/table-column/mapping/group-header-view/index.js.map +1 -1
- package/dist/esm/table-column/mapping/index.js.map +1 -1
- package/dist/esm/table-column/mapping/testing/table-column-mapping.pageobject.js.map +1 -1
- package/dist/esm/table-column/menu-button/cell-view/index.js.map +1 -1
- package/dist/esm/table-column/menu-button/index.js.map +1 -1
- package/dist/esm/table-column/mixins/custom-sort-order.js.map +1 -1
- package/dist/esm/table-column/mixins/sortable-column.js.map +1 -1
- package/dist/esm/table-column/number-text/index.js.map +1 -1
- package/dist/esm/table-column/number-text/models/number-text-unit-format.js.map +1 -1
- package/dist/esm/table-column/text-base/cell-view/index.js.map +1 -1
- package/dist/esm/table-column/text-base/group-header-view/index.js.map +1 -1
- package/dist/esm/text-area/index.js.map +1 -1
- package/dist/esm/theme-provider/design-tokens.js.map +1 -1
- package/dist/esm/theme-provider/index.js.map +1 -1
- package/dist/esm/tree-view/index.js.map +1 -1
- package/dist/esm/utilities/models/converter.js.map +1 -1
- package/dist/esm/utilities/models/document-element-lang.js.map +1 -1
- package/dist/esm/utilities/models/tracker.js.map +1 -1
- package/dist/esm/utilities/style/direction.js.map +1 -1
- package/dist/esm/utilities/style/multivalue-property-stylesheet-behavior.js.map +1 -1
- package/dist/esm/utilities/style/theme.js +1 -0
- package/dist/esm/utilities/style/theme.js.map +1 -1
- package/dist/esm/utilities/testing/component.js.map +1 -1
- package/dist/esm/utilities/unit-format/decimal-unit-format.js.map +1 -1
- package/dist/esm/utilities/unit-format/default-unit-format.js.map +1 -1
- package/dist/esm/utilities/unit-format/scaled-unit-format/manually-translated-scaled-unit-format.js +1 -0
- package/dist/esm/utilities/unit-format/scaled-unit-format/manually-translated-scaled-unit-format.js.map +1 -1
- package/dist/esm/utilities/unit-format/unit-format.js.map +1 -1
- package/dist/esm/utilities/unit-format/unit-scale/unit-scale.js.map +1 -1
- package/dist/esm/wafer-map/experimental/computations.js.map +1 -1
- package/dist/esm/wafer-map/experimental/hover-handler.js.map +1 -1
- package/dist/esm/wafer-map/experimental/worker-renderer.js.map +1 -1
- package/dist/esm/wafer-map/index.js.map +1 -1
- package/dist/esm/wafer-map/modules/computations.js.map +1 -1
- package/dist/esm/wafer-map/modules/create-matrix-renderer.js.map +1 -1
- package/dist/esm/wafer-map/modules/hover-handler.js.map +1 -1
- package/dist/esm/wafer-map/modules/prerendering.js.map +1 -1
- package/dist/esm/wafer-map/modules/rendering.js.map +1 -1
- package/dist/esm/wafer-map/modules/wafer-map-update-tracker.js.map +1 -1
- package/dist/esm/wafer-map/modules/wafer-map-validator.js.map +1 -1
- package/dist/esm/wafer-map/modules/zoom-handler.js.map +1 -1
- package/package.json +4 -4
|
@@ -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 volatile\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 @observable\n public canHaveCollapsibleRows = false;\n\n /**\n * @internal\n */\n @volatile\n public get collapseButtonVisibility(): string {\n if (!this.canHaveCollapsibleRows) {\n return 'hidden-size-reduced';\n }\n if (this.showCollapseAll) {\n return 'visible';\n }\n return '';\n }\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 (\n this.tableUpdateTracker.updateRowParentIds\n || this.tableUpdateTracker.updateGroupRows\n ) {\n const hierarchyEnabled = this.isHierarchyEnabled();\n const hasGroupableColumns = this.columns.some(\n x => !x.columnInternals.groupingDisabled\n );\n this.canHaveCollapsibleRows = hierarchyEnabled || hasGroupableColumns;\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"]}
|
|
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 volatile\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 @observable\n public canHaveCollapsibleRows = false;\n\n /**\n * @internal\n */\n @volatile\n public get collapseButtonVisibility(): string {\n if (!this.canHaveCollapsibleRows) {\n return 'hidden-size-reduced';\n }\n if (this.showCollapseAll) {\n return 'visible';\n }\n return '';\n }\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 (\n this.tableUpdateTracker.updateRowParentIds\n || this.tableUpdateTracker.updateGroupRows\n ) {\n const hierarchyEnabled = this.isHierarchyEnabled();\n const hasGroupableColumns = this.columns.some(\n x => !x.columnInternals.groupingDisabled\n );\n this.canHaveCollapsibleRows = hierarchyEnabled || hasGroupableColumns;\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"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"array-to-tree.js","sourceRoot":"","sources":["../../../../src/table/models/array-to-tree.ts"],"names":[],"mappings":"AAAA,6GAA6G;AAC7G,sCAAsC;AACtC,+BAA+B;AAW/B;;GAEG;AACH,MAAM,UAAU,WAAW,CACvB,KAAuB,EACvB,MAAqB;IAErB,MAAM,IAAI,GAAG,MAAM,CAAC;IAEpB,iCAAiC;IACjC,MAAM,SAAS,GAAuB,EAAE,CAAC;IAEzC,yFAAyF;IACzF,MAAM,MAAM,GAAuC,EAAE,CAAC;IAEtD,qFAAqF;IACrF,qEAAqE;IACrE,MAAM,SAAS,GAAgC,IAAI,GAAG,EAAE,CAAC;IAEzD,qBAAqB;IACrB,+GAA+G;IAC/G,qEAAqE;IACrE,oEAAoE;IACpE,4EAA4E;IAC5E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"array-to-tree.js","sourceRoot":"","sources":["../../../../src/table/models/array-to-tree.ts"],"names":[],"mappings":"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","sourcesContent":["// Modified from https://github.com/philipstanislaus/performant-array-to-tree/blob/v1.11.0/src/arrayToTree.ts\n// Copyright (c) 2022 philipstanislaus\n// SPDX-License-Identifier: MIT\n\nimport type { TableNode, TableRecord } from '../types';\n\nexport interface Config<Item> {\n id: keyof Item;\n parentId: keyof Item;\n}\n\ntype TableNodePartial = Partial<TableNode>;\n\n/**\n * Unflattens an array to a tree with runtime O(n)\n */\nexport function arrayToTree<TData extends TableRecord>(\n items: readonly TData[],\n config: Config<TData>\n): TableNode<TData>[] {\n const conf = config;\n\n // the resulting unflattened tree\n const rootItems: TableNodePartial[] = [];\n\n // stores all already processed items with their ids as key so we can easily look them up\n const lookup: { [id: string]: TableNodePartial } = {};\n\n // stores all item ids that have not been added to the resulting unflattened tree yet\n // this is an opt-in property, since it has a slight runtime overhead\n const orphanIds: null | Set<string | number> = new Set();\n\n // idea of this loop:\n // whenever an item has a parent, but the parent is not yet in the lookup object, we store a preliminary parent\n // in the lookup object and fill it with the data of the parent later\n // if an item has no parentId, add it as a root element to rootItems\n // Convert to a for-loop to have access to the item's index in the flat list\n for (let i = 0; i < items.length; i++) {\n const item = items[i]!;\n const itemId = item[conf.id] as string;\n const parentId = item[conf.parentId] as string | undefined | null;\n\n // look whether item already exists in the lookup table\n if (!Object.prototype.hasOwnProperty.call(lookup, itemId)) {\n // item is not yet there, so add a preliminary item (its data will be added later)\n lookup[itemId] = {\n subRows: [],\n clientRecord: undefined,\n originalIndex: undefined\n };\n }\n\n // if we track orphans, delete this item from the orphan set if it is in it\n if (orphanIds) {\n orphanIds.delete(itemId);\n }\n\n // add the current item's data to the item in the lookup table\n lookup[itemId]!.clientRecord = item;\n const treeItem = lookup[itemId]!;\n\n // Add the index to the item\n treeItem.originalIndex = i;\n\n if (parentId === null || parentId === undefined) {\n // is a root item\n rootItems.push(treeItem);\n } else {\n // has a parent\n\n // look whether the parent already exists in the lookup table\n if (!Object.prototype.hasOwnProperty.call(lookup, parentId)) {\n // parent is not yet there, so add a preliminary parent (its data will be added later)\n lookup[parentId] = {\n subRows: [],\n clientRecord: undefined,\n originalIndex: undefined\n };\n\n // if we track orphans, add the generated parent to the orphan list\n if (orphanIds) {\n orphanIds.add(parentId);\n }\n }\n\n // add the current item to the parent\n lookup[parentId]!.subRows!.push(treeItem as TableNode<TData>);\n }\n }\n\n if (orphanIds?.size) {\n const orphans = Array.from(orphanIds.values()).join(',');\n throw new Error(\n `The items array contains orphans that point to the following parentIds: [${orphans}]. These parentIds do not exist in the items array.`\n );\n }\n\n if (countNodes(rootItems) < Object.keys(lookup).length) {\n throw new Error(\n 'The items array contains nodes with a circular parent/child relationship.'\n );\n }\n\n return rootItems as TableNode<TData>[];\n}\n\n/**\n * Returns the number of nodes in a tree in a recursive way\n * @param tree An array of nodes (tree items), each having a field `childrenField` that contains an array of nodes\n * @returns Number of nodes in the tree\n */\nexport function countNodes(tree: TableNodePartial[]): number {\n return tree.reduce(\n (sum, n) => sum + 1 + (n.subRows! && countNodes(n.subRows)),\n 0\n );\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-hierarchy-manager.js","sourceRoot":"","sources":["../../../../src/table/models/data-hierarchy-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAG9C;;;GAGG;AACH,MAAM,OAAO,oBAAoB;IAK7B,YACI,OAAyB,EACzB,WAA+B,EAC/B,iBAAqC;QAPxB,eAAU,GAAY,KAAK,CAAC;QASzC,IACI,OAAO,WAAW,KAAK,QAAQ;eAC5B,OAAO,iBAAiB,KAAK,QAAQ,EAC1C;
|
|
1
|
+
{"version":3,"file":"data-hierarchy-manager.js","sourceRoot":"","sources":["../../../../src/table/models/data-hierarchy-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAG9C;;;GAGG;AACH,MAAM,OAAO,oBAAoB;IAK7B,YACI,OAAyB,EACzB,WAA+B,EAC/B,iBAAqC;QAPxB,eAAU,GAAY,KAAK,CAAC;QASzC,IACI,OAAO,WAAW,KAAK,QAAQ;eAC5B,OAAO,iBAAiB,KAAK,QAAQ,EAC1C,CAAC;YACC,IAAI,CAAC;gBACD,IAAI,CAAC,iBAAiB,GAAG,WAAW,CAAQ,OAAO,EAAE;oBACjD,EAAE,EAAE,WAAW;oBACf,QAAQ,EAAE,iBAAiB;iBAC9B,CAAC,CAAC;gBACH,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;gBACxB,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC;YAC5C,CAAC;YAAC,MAAM,CAAC;gBACL,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;gBACvB,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;oBACrD,YAAY,EAAE,EAAE,GAAG,MAAM,EAAE;oBAC3B,aAAa,EAAE,KAAK;iBACvB,CAAC,CAAC,CAAC;gBACJ,IAAI,CAAC,2BAA2B,GAAG,KAAK,CAAC;YAC7C,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YACvB,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;gBACrD,YAAY,EAAE,EAAE,GAAG,MAAM,EAAE;gBAC3B,aAAa,EAAE,KAAK;aACvB,CAAC,CAAC,CAAC;YACJ,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC;QAC5C,CAAC;IACL,CAAC;IAED,IAAW,gBAAgB;QACvB,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAClC,CAAC;IAED,IAAW,0BAA0B;QACjC,OAAO,IAAI,CAAC,2BAA2B,CAAC;IAC5C,CAAC;IAEM,aAAa,CAAC,IAAI,GAAG,KAAK;QAC7B,MAAM,QAAQ,GAAuB,EAAE,CAAC;QACxC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;QAEnD,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,EAAE,CAAC;YAC3B,yEAAyE;YACzE,iDAAiD;YACjD,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QAC7C,CAAC;QAED,OAAO,QAAQ;aACV,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,aAAa,CAAC;aACjD,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IAClC,CAAC;IAEO,WAAW,CACf,WAAwC,EACxC,QAA4B;QAE5B,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACnC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC1B,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;gBACrB,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YACnD,CAAC;QACL,CAAC;IACL,CAAC;CACJ","sourcesContent":["import { arrayToTree } from './array-to-tree';\nimport type { TableNode, TableRecord } from '../types';\n\n/**\n * Manages data hierarchy within the table, including converting between a flat list of\n * data and hierarchical data.\n */\nexport class DataHierarchyManager<TData extends TableRecord> {\n private readonly isDataFlat: boolean = false;\n private readonly _hierarchicalData: TableNode<TData>[];\n private readonly _parentIdConfigurationValid: boolean;\n\n public constructor(\n records: readonly TData[],\n idFieldName: string | undefined,\n parentIdFieldName: string | undefined\n ) {\n if (\n typeof idFieldName === 'string'\n && typeof parentIdFieldName === 'string'\n ) {\n try {\n this._hierarchicalData = arrayToTree<TData>(records, {\n id: idFieldName,\n parentId: parentIdFieldName\n });\n this.isDataFlat = false;\n this._parentIdConfigurationValid = true;\n } catch {\n this.isDataFlat = true;\n this._hierarchicalData = records.map((record, index) => ({\n clientRecord: { ...record },\n originalIndex: index\n }));\n this._parentIdConfigurationValid = false;\n }\n } else {\n this.isDataFlat = true;\n this._hierarchicalData = records.map((record, index) => ({\n clientRecord: { ...record },\n originalIndex: index\n }));\n this._parentIdConfigurationValid = true;\n }\n }\n\n public get hierarchicalData(): TableNode<TData>[] {\n return this._hierarchicalData;\n }\n\n public get parentIdConfigurationValid(): boolean {\n return this._parentIdConfigurationValid;\n }\n\n public getAllRecords(sort = false): TData[] {\n const allNodes: TableNode<TData>[] = [];\n this.getAllNodes(this._hierarchicalData, allNodes);\n\n if (this.isDataFlat || !sort) {\n // If the data is flat, then it was never reordered to support hierarchy.\n // Therefore, there is no need to sort the nodes.\n return allNodes.map(x => x.clientRecord);\n }\n\n return allNodes\n .sort((a, b) => a.originalIndex - b.originalIndex)\n .map(x => x.clientRecord);\n }\n\n private getAllNodes(\n parentNodes: readonly TableNode<TData>[],\n allNodes: TableNode<TData>[]\n ): void {\n for (const parentNode of parentNodes) {\n allNodes.push(parentNode);\n if (parentNode.subRows) {\n this.getAllNodes(parentNode.subRows, allNodes);\n }\n }\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expansion-manager.js","sourceRoot":"","sources":["../../../../src/table/models/expansion-manager.ts"],"names":[],"mappings":"AAIA,OAAO,EAKH,gCAAgC,EACnC,MAAM,UAAU,CAAC;AAElB;;;;;;;;;;GAUG;AACH,MAAM,OAAO,gBAAgB;IAMzB,YACqB,aAA8C;QAA9C,kBAAa,GAAb,aAAa,CAAiC;QAN3D,4BAAuB,GAAG,IAAI,GAAG,EAAmB,CAAC;QACrD,qBAAgB,GAAG,IAAI,GAAG,EAAuC,CAAC;QAClE,uBAAkB,GAAG,KAAK,CAAC;QAC3B,2BAAsB,GAAG,IAAI,GAAG,EAAU,CAAC;IAIhD,CAAC;IAEG,aAAa,CAAC,GAAkC;QACnD,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE;YAC5B,OAAO,KAAK,CAAC;SAChB;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChE,OAAO,cAAc,IAAI,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAC;IAChE,CAAC;IAEM,kBAAkB,CAAC,GAAkC;QACxD,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE;YAC5B,OAAO;SACV;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QAC5C,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC;QAEvD,GAAG,CAAC,cAAc,EAAE,CAAC;IACzB,CAAC;IAEM,WAAW;QACd,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAE3B,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC;QACvD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;YACpB,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE;gBAC3B,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;aACnD;SACJ;QACD,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;IACpD,CAAC;IAEM,mBAAmB;QACtB,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,CAAC;IACzC,CAAC;IAEM,qBAAqB;QACxB,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;IAClC,CAAC;IAEM,iBAAiB,CAAC,IAAqC;QAC1D,IACI,IAAI,CAAC,uBAAuB,CAAC,IAAI,KAAK,CAAC;eACpC,IAAI,CAAC,gBAAgB,CAAC,IAAI,KAAK,CAAC,EACrC;YACE,OAAO;SACV;QAED,MAAM,8BAA8B,GAAG,IAAI,GAAG,EAAmB,CAAC;QAClE,MAAM,uBAAuB,GAAG,IAAI,GAAG,EAGpC,CAAC;QACJ,MAAM,6BAA6B,GAAG,IAAI,GAAG,EAAU,CAAC;QACxD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;YACpB,MAAM,KAAK,GAAG,GAAG,CAAC,EAAE,CAAC;YACrB,MAAM,UAAU,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC;YACtC,MAAM,mBAAmB,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC7D,IAAI,CAAC,UAAU,IAAI,mBAAmB,EAAE;gBACpC,uBAAuB,CAAC,GAAG,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;aAC3D;YAED,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE;gBAC3B,MAAM,cAAc,GAAG,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAC/D,IAAI,cAAc,KAAK,SAAS,EAAE;oBAC9B,8BAA8B,CAAC,GAAG,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;iBAC7D;gBAED,IAAI,CAAC,UAAU,EAAE;oBACb,MAAM,YAAY,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC;oBAC9C,IAAI,YAAY,EAAE;wBACd,6BAA6B,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;qBAC5C;yBAAM,IAAI,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;wBAC/C,iEAAiE;wBACjE,oBAAoB;wBACpB,8BAA8B,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;qBACpD;iBACJ;aACJ;SACJ;QAED,IAAI,CAAC,uBAAuB,GAAG,8BAA8B,CAAC;QAC9D,IAAI,CAAC,gBAAgB,GAAG,uBAAuB,CAAC;QAChD,IAAI,CAAC,sBAAsB,GAAG,6BAA6B,CAAC;IAChE,CAAC;IAEM,mBAAmB,CACtB,gBAAkD;QAElD,MAAM,uBAAuB,GAAG,IAAI,GAAG,EAGpC,CAAC;QACJ,KAAK,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,gBAAgB,EAAE;YAClD,uBAAuB,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAE/C,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,qBAAqB,CAAC;YAC5E,MAAM,QAAQ,GAAG,OAAO,CAAC,qBAAqB,CAAC;YAC/C,IACI,QAAQ,KAAK,gCAAgC,CAAC,eAAe;mBAC1D,QAAQ,KAAK,gCAAgC,CAAC,eAAe;mBAC7D,CAAC,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAC/C;gBACE,iFAAiF;gBACjF,iDAAiD;gBACjD,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;aACjD;SACJ;QACD,IAAI,CAAC,gBAAgB,GAAG,uBAAuB,CAAC;IACpD,CAAC;IAEM,eAAe,CAAC,GAAkC;QACrD,OAAO,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACzE,CAAC;IAEM,mBAAmB,CAAC,kBAA2B;QAClD,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;IACjD,CAAC;IAEM,iBAAiB,CAAC,EAAU;QAC/B,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;YAC1B,OAAO,KAAK,CAAC;SAChB;QAED,OAAO,CACH,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,qBAAqB;gBAC5C,gCAAgC,CAAC,eAAe,IAAI,KAAK,CACpE,CAAC;IACN,CAAC;IAEO,sBAAsB,CAAC,EAAU;QACrC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;YAC1B,OAAO,KAAK,CAAC;SAChB;QAED,MAAM,qBAAqB,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,qBAAqB,CAAC;QACnF,OAAO,qBAAqB,KAAK,gCAAgC,CAAC,IAAI,CAAC;IAC3E,CAAC;IAEO,wBAAwB,CAC5B,GAAkC;QAElC,0EAA0E;QAC1E,0EAA0E;QAC1E,wBAAwB;QACxB,OAAO,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC;IACpC,CAAC;CACJ","sourcesContent":["import type {\n Row as TanStackRow,\n Table as TanStackTable\n} from '@tanstack/table-core';\nimport {\n type TableNode,\n type TableRecord,\n type TableSetRecordHierarchyOptions,\n type TableRecordHierarchyOptions,\n TableRecordDelayedHierarchyState\n} from '../types';\n\n/**\n * Manages the expanded/collapsed state of rows in the table.\n *\n * We must track the expansion state separately from TanStack because:\n * 1. TanStack does not support having a different initial expansion state per row unless explicitly\n * specified for each row by ID. This causes problems in the nimble-table because we could have\n * a different initial expansion state for group rows, parent rows, and parent rows with delay-loaded\n * children.\n * 2. TanStack does not remove entries from its expanded state when those rows are no longer present\n * in the data. This is not ideal because the object maintaining the expansion state can grow unbounded.\n */\nexport class ExpansionManager<TData extends TableRecord> {\n private explicitExpansionStates = new Map<string, boolean>();\n private hierarchyOptions = new Map<string, TableRecordHierarchyOptions>();\n private isHierarchyEnabled = false;\n private parentRowsWithChildren = new Set<string>();\n\n public constructor(\n private readonly tanStackTable: TanStackTable<TableNode<TData>>\n ) {}\n\n public isRowExpanded(row: TanStackRow<TableNode<TData>>): boolean {\n if (!this.isRowExpandable(row)) {\n return false;\n }\n\n const expansionState = this.explicitExpansionStates.get(row.id);\n return expansionState ?? this.getDefaultExpansionState(row);\n }\n\n public toggleRowExpansion(row: TanStackRow<TableNode<TData>>): void {\n if (!this.isRowExpandable(row)) {\n return;\n }\n\n const wasExpanded = this.isRowExpanded(row);\n this.explicitExpansionStates.set(row.id, !wasExpanded);\n\n row.toggleExpanded();\n }\n\n public collapseAll(): void {\n this.resetExpansionState();\n\n const rows = this.tanStackTable.getRowModel().flatRows;\n for (const row of rows) {\n if (this.isRowExpandable(row)) {\n this.explicitExpansionStates.set(row.id, false);\n }\n }\n this.tanStackTable.toggleAllRowsExpanded(false);\n }\n\n public resetExpansionState(): void {\n this.explicitExpansionStates.clear();\n }\n\n public resetHierarchyOptions(): void {\n this.hierarchyOptions.clear();\n }\n\n public processDataUpdate(rows: TanStackRow<TableNode<TData>>[]): void {\n if (\n this.explicitExpansionStates.size === 0\n && this.hierarchyOptions.size === 0\n ) {\n return;\n }\n\n const updatedExplicitExpansionStates = new Map<string, boolean>();\n const updatedHierarchyOptions = new Map<\n string,\n TableRecordHierarchyOptions\n >();\n const updatedParentRowsWithChildren = new Set<string>();\n for (const row of rows) {\n const rowId = row.id;\n const isGroupRow = row.getIsGrouped();\n const rowHierarchyOptions = this.hierarchyOptions.get(rowId);\n if (!isGroupRow && rowHierarchyOptions) {\n updatedHierarchyOptions.set(rowId, rowHierarchyOptions);\n }\n\n if (this.isRowExpandable(row)) {\n const expansionState = this.explicitExpansionStates.get(rowId);\n if (expansionState !== undefined) {\n updatedExplicitExpansionStates.set(rowId, expansionState);\n }\n\n if (!isGroupRow) {\n const hasChildRows = row.subRows.length !== 0;\n if (hasChildRows) {\n updatedParentRowsWithChildren.add(rowId);\n } else if (this.parentRowsWithChildren.has(rowId)) {\n // The row used to have children, but now it does not. Therefore,\n // collapse the row.\n updatedExplicitExpansionStates.set(rowId, false);\n }\n }\n }\n }\n\n this.explicitExpansionStates = updatedExplicitExpansionStates;\n this.hierarchyOptions = updatedHierarchyOptions;\n this.parentRowsWithChildren = updatedParentRowsWithChildren;\n }\n\n public setHierarchyOptions(\n hierarchyOptions: TableSetRecordHierarchyOptions[]\n ): void {\n const updatedHierarchyOptions = new Map<\n string,\n TableRecordHierarchyOptions\n >();\n for (const { recordId, options } of hierarchyOptions) {\n updatedHierarchyOptions.set(recordId, options);\n\n const oldState = this.hierarchyOptions.get(recordId)?.delayedHierarchyState;\n const newState = options.delayedHierarchyState;\n if (\n oldState === TableRecordDelayedHierarchyState.loadingChildren\n && newState === TableRecordDelayedHierarchyState.canLoadChildren\n && !this.parentRowsWithChildren.has(recordId)\n ) {\n // If a row without children transitions from loadingChildren to canLoadChildren,\n // put it back in its default state of collapsed.\n this.explicitExpansionStates.delete(recordId);\n }\n }\n this.hierarchyOptions = updatedHierarchyOptions;\n }\n\n public isRowExpandable(row: TanStackRow<TableNode<TData>>): boolean {\n return row.subRows.length > 0 || this.canLoadDelayedChildren(row.id);\n }\n\n public setHierarchyEnabled(isHierarchyEnabled: boolean): void {\n this.isHierarchyEnabled = isHierarchyEnabled;\n }\n\n public isLoadingChildren(id: string): boolean {\n if (!this.isHierarchyEnabled) {\n return false;\n }\n\n return (\n this.hierarchyOptions.get(id)?.delayedHierarchyState\n === TableRecordDelayedHierarchyState.loadingChildren ?? false\n );\n }\n\n private canLoadDelayedChildren(id: string): boolean {\n if (!this.isHierarchyEnabled) {\n return false;\n }\n\n const delayedHierarchyState = this.hierarchyOptions.get(id)?.delayedHierarchyState;\n return delayedHierarchyState !== TableRecordDelayedHierarchyState.none;\n }\n\n private getDefaultExpansionState(\n row: TanStackRow<TableNode<TData>>\n ): boolean {\n // Rows with children (group rows and parent rows with populated children)\n // default to expanded. Other rows (parent rows with lazy-loaded children)\n // default to collapsed.\n return row.subRows.length !== 0;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"expansion-manager.js","sourceRoot":"","sources":["../../../../src/table/models/expansion-manager.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n Row as TanStackRow,\n Table as TanStackTable\n} from '@tanstack/table-core';\nimport {\n type TableNode,\n type TableRecord,\n type TableSetRecordHierarchyOptions,\n type TableRecordHierarchyOptions,\n TableRecordDelayedHierarchyState\n} from '../types';\n\n/**\n * Manages the expanded/collapsed state of rows in the table.\n *\n * We must track the expansion state separately from TanStack because:\n * 1. TanStack does not support having a different initial expansion state per row unless explicitly\n * specified for each row by ID. This causes problems in the nimble-table because we could have\n * a different initial expansion state for group rows, parent rows, and parent rows with delay-loaded\n * children.\n * 2. TanStack does not remove entries from its expanded state when those rows are no longer present\n * in the data. This is not ideal because the object maintaining the expansion state can grow unbounded.\n */\nexport class ExpansionManager<TData extends TableRecord> {\n private explicitExpansionStates = new Map<string, boolean>();\n private hierarchyOptions = new Map<string, TableRecordHierarchyOptions>();\n private isHierarchyEnabled = false;\n private parentRowsWithChildren = new Set<string>();\n\n public constructor(\n private readonly tanStackTable: TanStackTable<TableNode<TData>>\n ) {}\n\n public isRowExpanded(row: TanStackRow<TableNode<TData>>): boolean {\n if (!this.isRowExpandable(row)) {\n return false;\n }\n\n const expansionState = this.explicitExpansionStates.get(row.id);\n return expansionState ?? this.getDefaultExpansionState(row);\n }\n\n public toggleRowExpansion(row: TanStackRow<TableNode<TData>>): void {\n if (!this.isRowExpandable(row)) {\n return;\n }\n\n const wasExpanded = this.isRowExpanded(row);\n this.explicitExpansionStates.set(row.id, !wasExpanded);\n\n row.toggleExpanded();\n }\n\n public collapseAll(): void {\n this.resetExpansionState();\n\n const rows = this.tanStackTable.getRowModel().flatRows;\n for (const row of rows) {\n if (this.isRowExpandable(row)) {\n this.explicitExpansionStates.set(row.id, false);\n }\n }\n this.tanStackTable.toggleAllRowsExpanded(false);\n }\n\n public resetExpansionState(): void {\n this.explicitExpansionStates.clear();\n }\n\n public resetHierarchyOptions(): void {\n this.hierarchyOptions.clear();\n }\n\n public processDataUpdate(rows: TanStackRow<TableNode<TData>>[]): void {\n if (\n this.explicitExpansionStates.size === 0\n && this.hierarchyOptions.size === 0\n ) {\n return;\n }\n\n const updatedExplicitExpansionStates = new Map<string, boolean>();\n const updatedHierarchyOptions = new Map<\n string,\n TableRecordHierarchyOptions\n >();\n const updatedParentRowsWithChildren = new Set<string>();\n for (const row of rows) {\n const rowId = row.id;\n const isGroupRow = row.getIsGrouped();\n const rowHierarchyOptions = this.hierarchyOptions.get(rowId);\n if (!isGroupRow && rowHierarchyOptions) {\n updatedHierarchyOptions.set(rowId, rowHierarchyOptions);\n }\n\n if (this.isRowExpandable(row)) {\n const expansionState = this.explicitExpansionStates.get(rowId);\n if (expansionState !== undefined) {\n updatedExplicitExpansionStates.set(rowId, expansionState);\n }\n\n if (!isGroupRow) {\n const hasChildRows = row.subRows.length !== 0;\n if (hasChildRows) {\n updatedParentRowsWithChildren.add(rowId);\n } else if (this.parentRowsWithChildren.has(rowId)) {\n // The row used to have children, but now it does not. Therefore,\n // collapse the row.\n updatedExplicitExpansionStates.set(rowId, false);\n }\n }\n }\n }\n\n this.explicitExpansionStates = updatedExplicitExpansionStates;\n this.hierarchyOptions = updatedHierarchyOptions;\n this.parentRowsWithChildren = updatedParentRowsWithChildren;\n }\n\n public setHierarchyOptions(\n hierarchyOptions: TableSetRecordHierarchyOptions[]\n ): void {\n const updatedHierarchyOptions = new Map<\n string,\n TableRecordHierarchyOptions\n >();\n for (const { recordId, options } of hierarchyOptions) {\n updatedHierarchyOptions.set(recordId, options);\n\n const oldState = this.hierarchyOptions.get(recordId)?.delayedHierarchyState;\n const newState = options.delayedHierarchyState;\n if (\n oldState === TableRecordDelayedHierarchyState.loadingChildren\n && newState === TableRecordDelayedHierarchyState.canLoadChildren\n && !this.parentRowsWithChildren.has(recordId)\n ) {\n // If a row without children transitions from loadingChildren to canLoadChildren,\n // put it back in its default state of collapsed.\n this.explicitExpansionStates.delete(recordId);\n }\n }\n this.hierarchyOptions = updatedHierarchyOptions;\n }\n\n public isRowExpandable(row: TanStackRow<TableNode<TData>>): boolean {\n return row.subRows.length > 0 || this.canLoadDelayedChildren(row.id);\n }\n\n public setHierarchyEnabled(isHierarchyEnabled: boolean): void {\n this.isHierarchyEnabled = isHierarchyEnabled;\n }\n\n public isLoadingChildren(id: string): boolean {\n if (!this.isHierarchyEnabled) {\n return false;\n }\n\n return (\n this.hierarchyOptions.get(id)?.delayedHierarchyState\n === TableRecordDelayedHierarchyState.loadingChildren ?? false\n );\n }\n\n private canLoadDelayedChildren(id: string): boolean {\n if (!this.isHierarchyEnabled) {\n return false;\n }\n\n const delayedHierarchyState = this.hierarchyOptions.get(id)?.delayedHierarchyState;\n return delayedHierarchyState !== TableRecordDelayedHierarchyState.none;\n }\n\n private getDefaultExpansionState(\n row: TanStackRow<TableNode<TData>>\n ): boolean {\n // Rows with children (group rows and parent rows with populated children)\n // default to expanded. Other rows (parent rows with lazy-loaded children)\n // default to collapsed.\n return row.subRows.length !== 0;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactive-selection-manager.js","sourceRoot":"","sources":["../../../../src/table/models/interactive-selection-manager.ts"],"names":[],"mappings":"AACA,OAAO,EAGH,qBAAqB,EAExB,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,wBAAwB,EAAE,MAAM,iDAAiD,CAAC;AAC3F,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,sBAAsB,EAAE,MAAM,+CAA+C,CAAC;AAEvF;;;GAGG;AACH,MAAM,OAAO,2BAA2B;IAIpC,YACI,aAA8C,EAC9C,aAAoC;QAEpC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAAC;IACvE,CAAC;IAEM,wBAAwB,CAC3B,QAAmC,EACnC,WAAoB,EACpB,QAAiB;QAEjB,IAAI,CAAC,QAAQ,EAAE;
|
|
1
|
+
{"version":3,"file":"interactive-selection-manager.js","sourceRoot":"","sources":["../../../../src/table/models/interactive-selection-manager.ts"],"names":[],"mappings":"AACA,OAAO,EAGH,qBAAqB,EAExB,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,wBAAwB,EAAE,MAAM,iDAAiD,CAAC;AAC3F,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,sBAAsB,EAAE,MAAM,+CAA+C,CAAC;AAEvF;;;GAGG;AACH,MAAM,OAAO,2BAA2B;IAIpC,YACI,aAA8C,EAC9C,aAAoC;QAEpC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAAC;IACvE,CAAC;IAEM,wBAAwB,CAC3B,QAAmC,EACnC,WAAoB,EACpB,QAAiB;QAEjB,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,OAAO,IAAI,CAAC,gBAAgB,CAAC,wBAAwB,CACjD,QAAQ,EACR,WAAW,EACX,QAAQ,CACX,CAAC;IACN,CAAC;IAEM,cAAc,CACjB,QAAmC,EACnC,QAAiB,EACjB,OAAgB;QAEhB,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,OAAO,IAAI,CAAC,gBAAgB,CAAC,cAAc,CACvC,QAAQ,EACR,QAAQ,EACR,OAAO,CACV,CAAC;IACN,CAAC;IAEM,uBAAuB,CAC1B,QAAmC;QAEnC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,OAAO,IAAI,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IACnE,CAAC;IAEM,0BAA0B,CAC7B,aAAoC;QAEpC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAAC;IACvE,CAAC;IAEM,oBAAoB;QACvB,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;IAClC,CAAC;IAEM,2BAA2B;QAC9B,MAAM,sBAAsB,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC;QAC7E,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAC1B,OAAO,EAAE,CAAC;QACd,CAAC;QAED,MAAM,iBAAiB,GAAa,EAAE,CAAC;QACvC,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC,OAAO,CAC1C,CAAC,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,EAAE;YACvB,IAAI,UAAU,EAAE,CAAC;gBACb,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACrC,CAAC;QACL,CAAC,CACJ,CAAC;QACF,OAAO,iBAAiB,CAAC;IAC7B,CAAC;IAEO,sBAAsB,CAC1B,aAAoC;QAEpC,QAAQ,aAAa,EAAE,CAAC;YACpB,KAAK,qBAAqB,CAAC,QAAQ;gBAC/B,OAAO,IAAI,qBAAqB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACzD,KAAK,qBAAqB,CAAC,MAAM;gBAC7B,OAAO,IAAI,sBAAsB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC1D,KAAK,qBAAqB,CAAC,IAAI;gBAC3B,OAAO,IAAI,wBAAwB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC5D;gBACI,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QACxD,CAAC;IACL,CAAC;CACJ","sourcesContent":["import type { Table as TanStackTable } from '@tanstack/table-core';\nimport {\n TableRecord,\n TableRowState,\n TableRowSelectionMode,\n TableNode\n} from '../types';\nimport type { SelectionManagerBase } from './selection-managers/selection-manager-base';\nimport { DisabledSelectionManager } from './selection-managers/disabled-selection-manager';\nimport { MultiSelectionManager } from './selection-managers/multi-selection-manager';\nimport { SingleSelectionManager } from './selection-managers/single-selection-manager';\n\n/**\n * Manages the behavior associated with interactive row selection for the table, including\n * handling when the selection mode of the table is changed.\n */\nexport class InteractiveSelectionManager<TData extends TableRecord> {\n private readonly tanStackTable: TanStackTable<TableNode<TData>>;\n private selectionManager: SelectionManagerBase<TData>;\n\n public constructor(\n tanStackTable: TanStackTable<TableNode<TData>>,\n selectionMode: TableRowSelectionMode\n ) {\n this.tanStackTable = tanStackTable;\n this.selectionManager = this.createSelectionManager(selectionMode);\n }\n\n public handleRowSelectionToggle(\n rowState: TableRowState | undefined,\n isSelecting: boolean,\n shiftKey: boolean\n ): boolean {\n if (!rowState) {\n return false;\n }\n\n return this.selectionManager.handleRowSelectionToggle(\n rowState,\n isSelecting,\n shiftKey\n );\n }\n\n public handleRowClick(\n rowState: TableRowState | undefined,\n shiftKey: boolean,\n ctrlKey: boolean\n ): boolean {\n if (!rowState) {\n return false;\n }\n\n return this.selectionManager.handleRowClick(\n rowState,\n shiftKey,\n ctrlKey\n );\n }\n\n public handleActionMenuOpening(\n rowState: TableRowState | undefined\n ): boolean {\n if (!rowState) {\n return false;\n }\n\n return this.selectionManager.handleActionMenuOpening(rowState);\n }\n\n public handleSelectionModeChanged(\n selectionMode: TableRowSelectionMode\n ): void {\n this.selectionManager = this.createSelectionManager(selectionMode);\n }\n\n public handleSelectionReset(): void {\n this.selectionManager.reset();\n }\n\n public getCurrentSelectedRecordIds(): string[] {\n const tanStackSelectionState = this.tanStackTable.options.state.rowSelection;\n if (!tanStackSelectionState) {\n return [];\n }\n\n const selectedRecordIds: string[] = [];\n Object.entries(tanStackSelectionState).forEach(\n ([recordId, isSelected]) => {\n if (isSelected) {\n selectedRecordIds.push(recordId);\n }\n }\n );\n return selectedRecordIds;\n }\n\n private createSelectionManager(\n selectionMode: TableRowSelectionMode\n ): SelectionManagerBase<TData> {\n switch (selectionMode) {\n case TableRowSelectionMode.multiple:\n return new MultiSelectionManager(this.tanStackTable);\n case TableRowSelectionMode.single:\n return new SingleSelectionManager(this.tanStackTable);\n case TableRowSelectionMode.none:\n return new DisabledSelectionManager(this.tanStackTable);\n default:\n throw new Error('unknown selection mode found');\n }\n }\n}\n"]}
|