@servicetitan/table 41.1.0 → 41.3.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/demo/column-hiding/products.d.ts +1 -1
- package/dist/demo/column-hiding/products.d.ts.map +1 -1
- package/dist/demo/column-hiding/products.js.map +1 -1
- package/dist/demo/column-hiding/table.d.ts +1 -1
- package/dist/demo/column-hiding/table.d.ts.map +1 -1
- package/dist/demo/column-hiding/table.js.map +1 -1
- package/dist/demo/column-hiding/table.store.d.ts +3 -2
- package/dist/demo/column-hiding/table.store.d.ts.map +1 -1
- package/dist/demo/column-hiding/table.store.js.map +1 -1
- package/dist/demo/filters/async-select-filter.d.ts +1 -1
- package/dist/demo/filters/async-select-filter.d.ts.map +1 -1
- package/dist/demo/filters/async-select-filter.js.map +1 -1
- package/dist/demo/filters/categories.d.ts +2 -2
- package/dist/demo/filters/categories.d.ts.map +1 -1
- package/dist/demo/filters/categories.js.map +1 -1
- package/dist/demo/filters/multiselect-filter.d.ts +1 -1
- package/dist/demo/filters/multiselect-filter.d.ts.map +1 -1
- package/dist/demo/filters/multiselect-filter.js.map +1 -1
- package/dist/demo/filters/range-filter.d.ts +1 -1
- package/dist/demo/filters/range-filter.d.ts.map +1 -1
- package/dist/demo/filters/range-filter.js.map +1 -1
- package/dist/demo/filters/select-filter.d.ts +2 -2
- package/dist/demo/filters/select-filter.d.ts.map +1 -1
- package/dist/demo/filters/select-filter.js.map +1 -1
- package/dist/demo/filters/single-select-filter.d.ts +1 -1
- package/dist/demo/filters/single-select-filter.d.ts.map +1 -1
- package/dist/demo/filters/single-select-filter.js.map +1 -1
- package/dist/demo/filters/table.store.d.ts +3 -2
- package/dist/demo/filters/table.store.d.ts.map +1 -1
- package/dist/demo/filters/table.store.js.map +1 -1
- package/dist/demo/footer-page-size/table.d.ts +1 -1
- package/dist/demo/footer-page-size/table.d.ts.map +1 -1
- package/dist/demo/footer-page-size/table.js.map +1 -1
- package/dist/demo/master-detail/detail-table.d.ts +2 -2
- package/dist/demo/master-detail/detail-table.d.ts.map +1 -1
- package/dist/demo/master-detail/detail-table.js.map +1 -1
- package/dist/demo/master-detail/detail-table.store.d.ts.map +1 -1
- package/dist/demo/master-detail/detail-table.store.js.map +1 -1
- package/dist/demo/master-detail/master-table.store.d.ts +2 -2
- package/dist/demo/master-detail/master-table.store.d.ts.map +1 -1
- package/dist/demo/master-detail/master-table.store.js.map +1 -1
- package/dist/demo/master-detail/product-details.d.ts +1 -1
- package/dist/demo/master-detail/product-details.d.ts.map +1 -1
- package/dist/demo/master-detail/product-details.js.map +1 -1
- package/dist/demo/master-detail/products.d.ts +1 -1
- package/dist/demo/master-detail/products.d.ts.map +1 -1
- package/dist/demo/master-detail/products.js.map +1 -1
- package/dist/demo/master-detail/table-master-detail.d.ts +1 -1
- package/dist/demo/master-detail/table-master-detail.d.ts.map +1 -1
- package/dist/demo/master-detail/table-master-detail.js.map +1 -1
- package/dist/demo/overview/actions-cell.d.ts +2 -2
- package/dist/demo/overview/actions-cell.d.ts.map +1 -1
- package/dist/demo/overview/actions-cell.js.map +1 -1
- package/dist/demo/overview/products.d.ts +1 -1
- package/dist/demo/overview/products.d.ts.map +1 -1
- package/dist/demo/overview/products.js.map +1 -1
- package/dist/demo/overview/table.d.ts +2 -2
- package/dist/demo/overview/table.d.ts.map +1 -1
- package/dist/demo/overview/table.js.map +1 -1
- package/dist/demo/overview/table.store.d.ts +1 -1
- package/dist/demo/overview/table.store.d.ts.map +1 -1
- package/dist/demo/overview/table.store.js.map +1 -1
- package/dist/demo/row-details/row-details-table.d.ts +1 -1
- package/dist/demo/row-details/row-details-table.d.ts.map +1 -1
- package/dist/demo/row-details/row-details-table.js.map +1 -1
- package/dist/demo/row-details/row-details-table.store.d.ts +1 -1
- package/dist/demo/row-details/row-details-table.store.d.ts.map +1 -1
- package/dist/demo/row-details/row-details-table.store.js.map +1 -1
- package/dist/demo/state-caching/beverages.d.ts +1 -1
- package/dist/demo/state-caching/beverages.d.ts.map +1 -1
- package/dist/demo/state-caching/beverages.js.map +1 -1
- package/dist/demo/state-caching/products.d.ts +1 -1
- package/dist/demo/state-caching/products.d.ts.map +1 -1
- package/dist/demo/state-caching/products.js.map +1 -1
- package/dist/demo/state-caching/state-caching-table.d.ts +1 -1
- package/dist/demo/state-caching/state-caching-table.d.ts.map +1 -1
- package/dist/demo/state-caching/state-caching-table.js.map +1 -1
- package/dist/demo/state-caching/state-caching-table.store.d.ts +2 -2
- package/dist/demo/state-caching/state-caching-table.store.d.ts.map +1 -1
- package/dist/demo/state-caching/state-caching-table.store.js.map +1 -1
- package/dist/details/expand-column.d.ts +2 -2
- package/dist/details/expand-column.d.ts.map +1 -1
- package/dist/details/expand-column.js.map +1 -1
- package/dist/editable-cell/boolean-editable-cell.d.ts.map +1 -1
- package/dist/editable-cell/boolean-editable-cell.js.map +1 -1
- package/dist/editable-cell/get-action-cell.d.ts +3 -3
- package/dist/editable-cell/get-action-cell.d.ts.map +1 -1
- package/dist/editable-cell/get-action-cell.js.map +1 -1
- package/dist/editable-cell/get-editable-cell.d.ts +4 -4
- package/dist/editable-cell/get-editable-cell.d.ts.map +1 -1
- package/dist/editable-cell/get-editable-cell.js.map +1 -1
- package/dist/editable-cell/get-select-editable-cell.d.ts +3 -3
- package/dist/editable-cell/get-select-editable-cell.d.ts.map +1 -1
- package/dist/editable-cell/get-select-editable-cell.js.map +1 -1
- package/dist/editable-cell/text-editable-cell.d.ts.map +1 -1
- package/dist/editable-cell/text-editable-cell.js.map +1 -1
- package/dist/export/export.d.ts +1 -1
- package/dist/export/export.d.ts.map +1 -1
- package/dist/export/export.js.map +1 -1
- package/dist/filters/async-select/async-select-filter.d.ts +3 -3
- package/dist/filters/async-select/async-select-filter.d.ts.map +1 -1
- package/dist/filters/async-select/async-select-filter.js.map +1 -1
- package/dist/filters/column-menu-filters.d.ts +2 -2
- package/dist/filters/column-menu-filters.d.ts.map +1 -1
- package/dist/filters/column-menu-filters.js.map +1 -1
- package/dist/filters/datetime-filter/datetime-filter.js.map +1 -1
- package/dist/filters/field-values-filter.d.ts +1 -1
- package/dist/filters/field-values-filter.d.ts.map +1 -1
- package/dist/filters/field-values-filter.js.map +1 -1
- package/dist/filters/multiselect-filter/multiselect-filter.d.ts +2 -2
- package/dist/filters/multiselect-filter/multiselect-filter.d.ts.map +1 -1
- package/dist/filters/multiselect-filter/multiselect-filter.js.map +1 -1
- package/dist/filters/numeric-filter-extended/numeric-filter-extended.d.ts.map +1 -1
- package/dist/filters/numeric-filter-extended/numeric-filter-extended.js.map +1 -1
- package/dist/filters/range-filter/range-filter.d.ts.map +1 -1
- package/dist/filters/range-filter/range-filter.js.map +1 -1
- package/dist/filters/select-filter/operators.d.ts +1 -1
- package/dist/filters/select-filter/operators.d.ts.map +1 -1
- package/dist/filters/select-filter/operators.js.map +1 -1
- package/dist/filters/select-filter/select-filter.d.ts +3 -3
- package/dist/filters/select-filter/select-filter.d.ts.map +1 -1
- package/dist/filters/select-filter/select-filter.js.map +1 -1
- package/dist/filters/select-filter/value-getter.d.ts +1 -1
- package/dist/filters/select-filter/value-getter.d.ts.map +1 -1
- package/dist/filters/select-filter/value-getter.js.map +1 -1
- package/dist/filters/single-select/single-select-filter.d.ts +3 -3
- package/dist/filters/single-select/single-select-filter.d.ts.map +1 -1
- package/dist/filters/single-select/single-select-filter.js.map +1 -1
- package/dist/filters/standard-filter-with-multiselect/filter-cell-ext.d.ts +3 -3
- package/dist/filters/standard-filter-with-multiselect/filter-cell-ext.d.ts.map +1 -1
- package/dist/filters/standard-filter-with-multiselect/filter-cell-ext.js.map +1 -1
- package/dist/filters/standard-filter-with-multiselect/standard-filter-with-multiselect.d.ts +4 -4
- package/dist/filters/standard-filter-with-multiselect/standard-filter-with-multiselect.d.ts.map +1 -1
- package/dist/filters/standard-filter-with-multiselect/standard-filter-with-multiselect.js.map +1 -1
- package/dist/filters/standard-filter-with-multiselect/table-column-menu-filter-ext.d.ts +1 -1
- package/dist/filters/standard-filter-with-multiselect/table-column-menu-filter-ext.d.ts.map +1 -1
- package/dist/filters/standard-filter-with-multiselect/table-column-menu-filter-ext.js.map +1 -1
- package/dist/filters/time-filter/time-filter.d.ts.map +1 -1
- package/dist/filters/time-filter/time-filter.js.map +1 -1
- package/dist/select-cell/select-cell.d.ts +2 -2
- package/dist/select-cell/select-cell.d.ts.map +1 -1
- package/dist/select-cell/select-cell.js.map +1 -1
- package/dist/table-state.d.ts +6 -5
- package/dist/table-state.d.ts.map +1 -1
- package/dist/table-state.js.map +1 -1
- package/dist/table.d.ts +5 -4
- package/dist/table.d.ts.map +1 -1
- package/dist/table.js.map +1 -1
- package/dist/use-observing-table-state/demo/components/use-observing-table-state-demo.d.ts +2 -2
- package/dist/use-observing-table-state/demo/components/use-observing-table-state-demo.d.ts.map +1 -1
- package/dist/use-observing-table-state/demo/components/use-observing-table-state-demo.js.map +1 -1
- package/dist/use-observing-table-state/use-observing-table-state.d.ts +3 -2
- package/dist/use-observing-table-state/use-observing-table-state.d.ts.map +1 -1
- package/dist/use-observing-table-state/use-observing-table-state.js.map +1 -1
- package/dist/use-observing-table-state/use-observing-table-state.stories.d.ts +1 -1
- package/dist/use-observing-table-state/use-observing-table-state.stories.d.ts.map +1 -1
- package/dist/utils/filters.d.ts +1 -1
- package/dist/utils/filters.d.ts.map +1 -1
- package/dist/utils/filters.js.map +1 -1
- package/dist/utils/use-td-props.d.ts +2 -2
- package/dist/utils/use-td-props.d.ts.map +1 -1
- package/dist/utils/use-td-props.js.map +1 -1
- package/package.json +8 -8
- package/src/demo/column-hiding/products.ts +2 -1
- package/src/demo/column-hiding/table.store.ts +4 -2
- package/src/demo/column-hiding/table.tsx +4 -2
- package/src/demo/filters/async-select-filter.tsx +2 -1
- package/src/demo/filters/categories.tsx +2 -2
- package/src/demo/filters/multiselect-filter.tsx +2 -1
- package/src/demo/filters/range-filter.tsx +2 -1
- package/src/demo/filters/select-filter.tsx +5 -3
- package/src/demo/filters/single-select-filter.tsx +2 -1
- package/src/demo/filters/table.store.ts +4 -7
- package/src/demo/footer-page-size/table.tsx +2 -1
- package/src/demo/master-detail/detail-table.store.ts +2 -1
- package/src/demo/master-detail/detail-table.tsx +6 -3
- package/src/demo/master-detail/master-table.store.ts +4 -3
- package/src/demo/master-detail/product-details.ts +1 -1
- package/src/demo/master-detail/products.ts +2 -1
- package/src/demo/master-detail/table-master-detail.tsx +4 -2
- package/src/demo/overview/actions-cell.tsx +4 -3
- package/src/demo/overview/products.ts +2 -1
- package/src/demo/overview/table.store.ts +2 -1
- package/src/demo/overview/table.tsx +5 -4
- package/src/demo/row-details/row-details-table.store.ts +1 -1
- package/src/demo/row-details/row-details-table.tsx +4 -3
- package/src/demo/state-caching/beverages.ts +1 -1
- package/src/demo/state-caching/products.ts +1 -1
- package/src/demo/state-caching/state-caching-table.store.ts +2 -2
- package/src/demo/state-caching/state-caching-table.tsx +2 -1
- package/src/details/expand-column.tsx +4 -2
- package/src/editable-cell/boolean-editable-cell.tsx +3 -2
- package/src/editable-cell/get-action-cell.tsx +3 -3
- package/src/editable-cell/get-editable-cell.tsx +4 -4
- package/src/editable-cell/get-select-editable-cell.tsx +7 -5
- package/src/editable-cell/text-editable-cell.tsx +5 -3
- package/src/export/export.tsx +1 -1
- package/src/filters/async-select/async-select-filter.tsx +7 -14
- package/src/filters/column-menu-filters.tsx +4 -7
- package/src/filters/datetime-filter/datetime-filter.tsx +4 -4
- package/src/filters/field-values-filter.tsx +5 -3
- package/src/filters/multiselect-filter/multiselect-filter.tsx +6 -6
- package/src/filters/numeric-filter-extended/numeric-filter-extended.tsx +6 -4
- package/src/filters/range-filter/range-filter.tsx +5 -3
- package/src/filters/select-filter/operators.ts +1 -1
- package/src/filters/select-filter/select-filter.tsx +9 -16
- package/src/filters/select-filter/value-getter.ts +1 -1
- package/src/filters/single-select/single-select-filter.tsx +7 -7
- package/src/filters/standard-filter-with-multiselect/filter-cell-ext.tsx +4 -5
- package/src/filters/standard-filter-with-multiselect/standard-filter-with-multiselect.tsx +7 -6
- package/src/filters/standard-filter-with-multiselect/table-column-menu-filter-ext.tsx +1 -1
- package/src/filters/time-filter/time-filter.tsx +4 -2
- package/src/select-cell/select-cell.tsx +3 -3
- package/src/table-state.ts +6 -9
- package/src/table.tsx +10 -24
- package/src/use-observing-table-state/demo/components/use-observing-table-state-demo.tsx +4 -2
- package/src/use-observing-table-state/use-observing-table-state.stories.tsx +1 -1
- package/src/use-observing-table-state/use-observing-table-state.ts +4 -2
- package/src/utils/__tests__/filters.test.ts +1 -1
- package/src/utils/filters.ts +2 -6
- package/src/utils/use-td-props.ts +2 -2
package/dist/table-state.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/table-state.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/member-ordering */\nimport { ReactElement } from 'react';\nimport { action, computed, observable, runInAction, makeObservable } from 'mobx';\nimport { fromPromise } from 'mobx-utils';\nimport {\n AggregateDescriptor,\n CompositeFilterDescriptor,\n GroupDescriptor,\n SortDescriptor,\n DataResult,\n GroupResult,\n DataSource,\n IdType,\n} from '@servicetitan/data-query';\nimport {\n ExcelExport,\n ExcelExportData,\n ExcelExportColumnProps,\n} from '@progress/kendo-react-excel-export';\nimport {\n TableExpandChangeEvent,\n TableFilterChangeEvent,\n TableGroupChangeEvent,\n TablePageChangeEvent,\n TableSortChangeEvent,\n} from '@servicetitan/design-system';\nimport { GridPDFExport as TablePDFExport } from '@progress/kendo-react-pdf';\nimport { WorkbookOptions } from '@progress/kendo-ooxml';\nimport { FormState, FieldState } from 'formstate';\nimport { formStateToJS } from '@servicetitan/form';\n\nexport type Selectable<T> = { readonly selected: boolean | undefined } & T;\nexport type Editable<T> = { readonly inEdit: boolean | undefined } & T;\nexport type Expandable<T> = { readonly expanded: boolean | undefined } & T;\nexport type Materialized<T> = { readonly materializedPath: string } & T;\n\ntype Data<T> = DataResult<T>['data'];\n\nexport function isGroupItem<T>(\n item: T | GroupResult<T>,\n groups: GroupDescriptor[]\n): item is GroupResult<T> {\n const field: string | undefined = (item as GroupResult<T>).field;\n\n return !!field && groups.some(g => g.field === field);\n}\n\nfunction addAggregatesToGroups(groups: GroupDescriptor[], aggregates: AggregateDescriptor[]) {\n return groups.map(group => ({\n ...group,\n aggregates,\n }));\n}\n\nexport type PossibleFormState<T> = FormState<{\n [P in keyof T]-?: FieldState<T[P]>;\n}>;\n\nexport interface TableStateModel<TId extends IdType = never> {\n skip: number;\n selectedIds: TId[];\n expandedIds: TId[];\n collapsedGroups: string[];\n sort: SortDescriptor[];\n filter?: CompositeFilterDescriptor;\n aggregates: AggregateDescriptor[];\n group: GroupDescriptor[];\n}\n\nexport interface TableStateConstructorParams<\n T,\n TId extends IdType = never,\n P = never,\n PId extends IdType = never,\n> {\n dataSource?: DataSource<T, TId> | null;\n pageSize?: number;\n /** For use with tables that enable selection only. Specifies if the item is selectable in the checkbox */\n isRowUnselectable?: (row: T) => boolean;\n\n /**\n * Initial expand state for row details\n * collapsed - row details are collapsed by default\n * expanded - row details are expanded until it will be collapsed\n */\n rowDetailsExpandState?: 'collapsed' | 'expanded';\n selectionLimit?: number;\n getFormState?(row: T): PossibleFormState<T>;\n parent?: {\n row: P;\n tableState: TableState<P, PId>;\n };\n getDetailTableState?: (row: T) => TableState<any, any, any, any> | undefined;\n initialState?: TableStateModel<TId>;\n alwaysEditable?: boolean;\n rowIdKey?: string;\n}\n\ninterface FetchDataParams {\n newSkip?: number;\n newSort?: SortDescriptor[];\n newFilter?: CompositeFilterDescriptor | null;\n newAggregates?: AggregateDescriptor[];\n newGroup?: GroupDescriptor[];\n}\n\ninterface SelectionOptions {\n ignoreUnselectable?: boolean;\n recursive?: boolean;\n}\n\ninterface SetDataSourceParams<TId extends IdType = never> {\n reset?: boolean;\n initialState?: TableStateModel<TId>;\n}\n\ninterface EditingForm<T> {\n form: PossibleFormState<T>;\n field?: keyof T;\n}\n\n/** Interface for unit testing purposes.*/\nexport interface ITableState<T, TId extends IdType = never> {\n totalCount?: number;\n selectedCount?: number;\n addToDataSource?: (row: T, select?: boolean) => Promise<void>;\n removeFromDataSource?: (id: TId) => Promise<T | undefined>;\n selectAll?: () => Promise<void>;\n deselectAll?: () => void;\n setDataSource?: (\n dataSource: DataSource<T, TId> | null,\n setDataSourceParams?: boolean | SetDataSourceParams<TId>\n ) => Promise<void>;\n isRowUnselectable?: (row: T) => boolean;\n}\n\nexport class TableState<T, TId extends IdType = never, P = never, PId extends IdType = never> {\n @observable private innerDataSource: DataSource<T, TId> | null;\n\n @computed get dataSource() {\n return this.innerDataSource;\n }\n\n private traverse(\n items: Data<Selectable<T>>,\n itemCallback: (item: Selectable<T>) => void,\n groupCallback?: (group: GroupResult<T>, materializedPath: string) => void,\n materializedPath = ''\n ) {\n if (!items) {\n return;\n }\n\n for (const item of items) {\n if (isGroupItem(item, this.group)) {\n const groupMaterializedPath = materializedPath + `/${item.value}`;\n\n if (groupCallback) {\n groupCallback(item, groupMaterializedPath);\n }\n\n this.traverse(item.items, itemCallback, groupCallback, groupMaterializedPath);\n } else {\n itemCallback(item);\n }\n }\n }\n\n @computed\n private get originalData() {\n const result: Selectable<T>[] = [];\n\n this.traverse(this.data, item => {\n result.push(item);\n });\n\n return result;\n }\n\n parent?: {\n row: P;\n tableState: TableState<P, PId>;\n };\n getDetailTableState?: (row: T) => TableState<any, any, any, any> | undefined;\n\n @observable selectedIds = new Set<TId>();\n @observable inEdit = new Map<TId, EditingForm<T>>();\n @observable expandedIds = new Set<TId>();\n @observable collapsedIds = new Set<TId>();\n @observable collapsedGroups = new Set<string>();\n\n isRowUnselectable: (row: T) => boolean; // TODO: think about a better name\n selectionLimit: number;\n\n getFormState?(row: T): PossibleFormState<T>;\n\n @observable data: Data<Selectable<T>> = [];\n @observable totalCount = 0;\n @observable filteredCount = 0;\n @observable selectedCount = 0;\n @observable unselectableCount = 0;\n\n @computed get unselectedCount() {\n return this.totalCount - this.selectedCount;\n }\n\n @computed get selectableCount() {\n return this.totalCount - this.unselectableCount;\n }\n\n @computed get filteredUnselectableCount() {\n return this.originalData.filter(this.isRowUnselectable).length;\n }\n\n @computed get filteredSelectableCount() {\n return this.originalData.length - this.filteredUnselectableCount;\n }\n\n @computed\n private get totalFilteredSelectableCountPromise() {\n return fromPromise(\n new Promise<number>((resolve, reject) => {\n if (!this.dataSource) {\n return reject();\n }\n\n this.dataSource\n .getData({\n filter: this.filter,\n })\n .then(filteredData => {\n resolve(\n (filteredData.data as T[]).filter(row => !this.isRowUnselectable(row))\n .length\n );\n })\n .catch(reject);\n })\n );\n }\n\n @computed get totalFilteredSelectableCount(): number {\n return (this.totalFilteredSelectableCountPromise.value as number) || 0;\n }\n\n @observable sort: SortDescriptor[] = [];\n @observable filter: CompositeFilterDescriptor | undefined;\n\n @observable aggregates: AggregateDescriptor[] = [];\n\n @observable innerGroup: GroupDescriptor[] = [];\n\n @computed\n get group(): GroupDescriptor[] {\n return addAggregatesToGroups(this.innerGroup, this.aggregates);\n }\n\n set group(value: GroupDescriptor[]) {\n this.innerGroup = value;\n }\n\n @observable skip = 0;\n @observable pageSize?: number;\n\n private tablePdfExport: TablePDFExport | null = null;\n private tableExcelExport: ExcelExport | null = null;\n private readonly rowDetailsExpandState: 'collapsed' | 'expanded';\n\n rowIdKey?: string;\n alwaysEditable: boolean;\n\n constructor({\n dataSource = null,\n rowIdKey,\n pageSize,\n isRowUnselectable = () => false,\n rowDetailsExpandState = 'collapsed',\n selectionLimit = Infinity,\n getFormState,\n parent,\n getDetailTableState,\n initialState,\n alwaysEditable = false,\n }: TableStateConstructorParams<T, TId, P, PId> = {}) {\n makeObservable(this);\n\n this.innerDataSource = dataSource;\n this.pageSize = pageSize;\n this.isRowUnselectable = isRowUnselectable;\n this.rowDetailsExpandState = rowDetailsExpandState;\n this.selectionLimit = selectionLimit;\n this.rowIdKey = rowIdKey;\n\n this.getFormState = getFormState;\n\n this.parent = parent;\n this.getDetailTableState = getDetailTableState;\n\n if (initialState) {\n this.importState(initialState);\n }\n\n this.alwaysEditable = alwaysEditable;\n\n this.fetchInitialData();\n\n if (this.alwaysEditable) {\n this.editAll();\n }\n }\n\n async addToDataSource(row: T, select?: boolean, index?: number) {\n if (!this.dataSource) {\n return;\n }\n\n if (!this.dataSource.addData) {\n throw 'missing addData in the data source';\n }\n\n await this.dataSource.addData(row, index);\n runInAction(() => {\n this.totalCount += 1;\n\n if (select) {\n if (!this.dataSource!.idSelector) {\n throw 'missing idSelector in the data source';\n }\n\n this.selectedIds.add(this.dataSource!.idSelector(row));\n this.selectedCount += 1;\n }\n\n if (this.alwaysEditable) {\n this.edit(row);\n }\n });\n\n await this.fetchData();\n }\n\n async removeFromDataSource(id: TId): Promise<T | undefined> {\n if (!this.dataSource) {\n return;\n }\n\n if (!this.dataSource.removeData) {\n throw 'missing removeData in the data source';\n }\n\n const row = (await this.dataSource.removeData(id)) as Selectable<T> | undefined;\n if (!row) {\n return;\n }\n\n runInAction(() => {\n this.totalCount -= 1;\n // Updating filteredCount here to force Table rerender after this action\n this.filteredCount -= 1;\n\n if (this.selectedIds.has(id)) {\n this.selectedIds.delete(id);\n this.selectedCount -= 1;\n }\n\n if (this.inEdit.has(id)) {\n this.inEdit.delete(id);\n }\n\n if (this.expandedIds.has(id)) {\n this.expandedIds.delete(id);\n }\n });\n\n // If the current page has only one row and it's removed, fetch the previous page if it exists\n if (this.data.length === 1 && this.pageSize && this.skip >= this.pageSize) {\n await this.fetchData({ newSkip: this.skip - this.pageSize });\n } else {\n await this.fetchData();\n }\n\n return row;\n }\n\n @action\n async setRowsSelection(\n rows: T[],\n value: boolean,\n { ignoreUnselectable = true, recursive = true }: SelectionOptions = {}\n ) {\n if (!this.dataSource) {\n return;\n }\n\n if (!this.dataSource.idSelector) {\n throw 'missing idSelector in the data source';\n }\n\n for (const row of rows) {\n if (ignoreUnselectable && this.isRowUnselectable(row)) {\n continue;\n }\n\n runInAction(() => {\n if (!value) {\n this.selectedIds.delete(this.dataSource!.idSelector!(row));\n } else if (this.selectedCount < this.selectionLimit) {\n this.selectedIds.add(this.dataSource!.idSelector!(row));\n }\n });\n\n // update children selection\n if (recursive && this.getDetailTableState) {\n const detail = this.getDetailTableState(row);\n\n if (detail?.selectableCount) {\n // eslint-disable-next-line no-await-in-loop\n await detail.setAllSelection(value);\n }\n }\n }\n\n // update parent selection\n if (this.parent) {\n if (this.isAllPageRowsSelected) {\n await this.parent.tableState.setRowsSelection([this.parent.row], true, {\n recursive: false,\n });\n } else {\n await this.parent.tableState.setRowsSelection([this.parent.row], false, {\n recursive: false,\n });\n }\n }\n\n runInAction(() => {\n this.selectedCount = this.selectedIds.size;\n this.data = this.data.slice();\n });\n }\n\n async selectPage(options?: SelectionOptions) {\n await this.setRowsSelection(this.originalData, true, options);\n }\n\n async deselectPage(options?: SelectionOptions) {\n await this.setRowsSelection(this.originalData, false, options);\n }\n\n private async setAllSelection(value: boolean, options?: SelectionOptions) {\n if (!this.dataSource) {\n return;\n }\n\n const filteredData = await this.dataSource.getData({\n filter: this.filter,\n });\n\n await this.setRowsSelection(filteredData.data as T[], value, options);\n }\n\n async selectAll(options?: SelectionOptions) {\n if (this.selectionLimit !== Infinity) {\n throw \"selectAll isn't supported for limited selection\";\n }\n\n await this.setAllSelection(true, options);\n }\n\n async deselectAll(options?: SelectionOptions) {\n await this.setAllSelection(false, options);\n }\n\n @action\n edit(row: T, field?: keyof T) {\n if (!this.dataSource) {\n return;\n }\n\n if (!this.dataSource.idSelector) {\n throw 'missing idSelector in the data source';\n }\n\n if (!this.getFormState) {\n throw 'missing getFormState';\n }\n\n this.inEdit.set(this.dataSource.idSelector(row), {\n form: this.getFormState(row),\n field,\n });\n\n this.data = this.data.slice();\n }\n\n @action\n async saveEdit(row: T, beforeSave?: (changed: T, field?: keyof T) => Promise<void>) {\n if (!this.dataSource) {\n return;\n }\n\n if (!this.dataSource.idSelector) {\n throw 'missing idSelector in the data source';\n }\n\n if (!this.dataSource.updateData) {\n throw 'missing updateData in the data source';\n }\n\n const id = this.dataSource.idSelector(row);\n const editingForm = this.inEdit.get(id);\n\n if (!editingForm) {\n return;\n }\n\n const { form, field } = editingForm;\n const changed = formStateToJS(form) as unknown as T; // FIXME: incompatible types\n if (beforeSave) {\n await beforeSave(changed, field);\n }\n\n await this.dataSource.updateData(id, changed);\n\n if (!this.alwaysEditable) {\n runInAction(() => {\n this.inEdit.delete(id);\n });\n }\n\n await this.fetchData();\n }\n\n @action\n cancelEdit(row: T) {\n if (!this.dataSource) {\n return;\n }\n\n if (!this.dataSource.idSelector) {\n throw 'missing idSelector in the data source';\n }\n\n if (this.alwaysEditable) {\n return;\n }\n\n this.inEdit.delete(this.dataSource.idSelector(row));\n\n this.data = this.data.slice();\n }\n\n async editAll() {\n if (!this.dataSource) {\n return;\n }\n\n if (!this.dataSource.idSelector) {\n throw 'missing idSelector in the data source';\n }\n\n if (!this.getFormState) {\n throw 'missing getFormState';\n }\n\n const rows = (\n await this.dataSource.getData({\n filter: this.filter,\n })\n ).data as T[];\n\n runInAction(() => {\n this.inEdit = new Map(\n rows.map<[TId, EditingForm<T>]>(row => [\n this.dataSource!.idSelector!(row),\n { form: this.getFormState!(row) },\n ])\n );\n\n this.data = this.data.slice();\n });\n }\n\n async saveEditAll(beforeSave?: (changed: T[]) => Promise<void>) {\n if (!this.dataSource) {\n return;\n }\n\n if (!this.dataSource.updateData) {\n throw 'missing updateData in the data source';\n }\n\n const changes = Array.from(this.inEdit).map(([id, { form }]) => ({\n id,\n changed: formStateToJS(form) as unknown as T, // FIXME: incompatible types\n }));\n\n if (beforeSave) {\n await beforeSave(changes.map(change => change.changed));\n }\n\n for (const { id, changed } of changes) {\n // eslint-disable-next-line no-await-in-loop\n await this.dataSource.updateData(id, changed);\n }\n\n if (!this.alwaysEditable) {\n runInAction(() => {\n this.inEdit = new Map();\n });\n }\n\n await this.fetchData();\n }\n\n @action\n cancelEditAll() {\n if (!this.dataSource) {\n return;\n }\n\n if (this.alwaysEditable) {\n return;\n }\n\n this.inEdit = new Map();\n\n this.data = this.data.slice();\n }\n\n @action reset() {\n this.totalCount = 0;\n this.filteredCount = 0;\n this.data = [];\n this.selectedCount = 0;\n this.selectedIds = new Set();\n this.inEdit = new Map();\n this.expandedIds = new Set();\n this.collapsedIds = new Set();\n this.collapsedGroups = new Set();\n this.sort = [];\n this.filter = undefined;\n this.aggregates = [];\n this.innerGroup = [];\n }\n\n @action\n async setDataSource(\n dataSource: DataSource<T, TId> | null,\n setDataSourceParams?: SetDataSourceParams<TId> | boolean\n ) {\n this.innerDataSource = dataSource;\n this.skip = 0;\n\n const reset =\n typeof setDataSourceParams === 'boolean'\n ? setDataSourceParams\n : setDataSourceParams?.reset;\n const config = setDataSourceParams as SetDataSourceParams<TId>;\n\n if (reset) {\n this.reset();\n }\n if (config?.initialState) {\n this.importState(config.initialState);\n }\n await this.fetchInitialData();\n\n if (this.alwaysEditable) {\n await this.editAll();\n }\n }\n\n @action\n private fetchInitialData = async () => {\n if (!this.dataSource) {\n return;\n }\n\n const initial = (await this.dataSource.getData({\n skip: this.skip,\n take: this.pageSize,\n filter: this.filter,\n sort: [...this.sort],\n group: [...this.group],\n })) as DataResult<Selectable<T>>;\n\n runInAction(() => {\n this.totalCount = initial.total;\n this.filteredCount = initial.total;\n this.updateExpandState(initial.data);\n this.data = initial.data;\n this.unselectableCount = this.originalData.filter(this.isRowUnselectable).length;\n\n this.addPropertiesToRows(this.data);\n });\n };\n\n private addPropertiesToRows(data: Data<Selectable<T>>) {\n this.traverse(\n data,\n item => {\n if (!this.dataSource) {\n return;\n }\n\n if (!this.dataSource.idSelector) {\n return;\n }\n\n if (!('selected' in item)) {\n Object.defineProperty(item, 'selected', {\n get: () => this.selectedIds.has(this.dataSource!.idSelector!(item)),\n });\n }\n\n if (!('indeterminate' in item)) {\n Object.defineProperty(item, 'indeterminate', {\n get: () => {\n const detail = this.getDetailTableState?.(item);\n\n if (!detail) {\n return false;\n }\n\n return detail.isSomePageRowsSelected;\n },\n });\n }\n\n if (!('inEdit' in item)) {\n Object.defineProperty(item, 'inEdit', {\n get: () => this.inEdit.has(this.dataSource!.idSelector!(item)),\n });\n }\n\n if (!('expanded' in item)) {\n Object.defineProperty(item, 'expanded', {\n get: () => this.expandedIds.has(this.dataSource!.idSelector!(item)),\n });\n }\n },\n (group, materializedPath) => {\n if (!('materializedPath' in group)) {\n Object.defineProperty(group, 'materializedPath', {\n get: () => materializedPath,\n });\n }\n\n if (!('expanded' in group)) {\n Object.defineProperty(group, 'expanded', {\n get: () =>\n !this.collapsedGroups.has(\n (group as Materialized<GroupResult<T>>).materializedPath\n ),\n });\n }\n }\n );\n }\n\n @action\n handleFilterChange = (ev: TableFilterChangeEvent) => {\n this.fetchData({\n newFilter: ev.filter,\n });\n };\n\n @action\n handleGroupChange = (ev: TableGroupChangeEvent) => {\n this.collapsedGroups = new Set();\n\n this.fetchData({\n newGroup: ev.group,\n });\n };\n\n @action\n handleExpandChange = ({ dataItem, value }: TableExpandChangeEvent) => {\n if (isGroupItem(dataItem, this.group)) {\n const { materializedPath } = dataItem as Materialized<GroupResult<T>>;\n if (value) {\n this.collapsedGroups.delete(materializedPath);\n } else {\n this.collapsedGroups.add(materializedPath);\n }\n } else {\n if (!this.dataSource) {\n return;\n }\n\n if (!this.dataSource.idSelector) {\n throw 'missing idSelector in the data source';\n }\n\n const id = this.dataSource.idSelector(dataItem);\n if (value) {\n this.expandedIds.add(id);\n this.collapsedIds.delete(id);\n } else {\n this.expandedIds.delete(id);\n this.collapsedIds.add(id);\n }\n }\n\n this.data = this.data.slice();\n };\n\n @action\n handleSortChange = (ev: TableSortChangeEvent) => {\n this.fetchData({\n newSort: ev.sort,\n });\n };\n\n @action\n handlePageChange = (ev: TablePageChangeEvent) => {\n if (this.pageSize !== ev.page.take) {\n this.pageSize = ev.page.take;\n this.skip = 0;\n } else if (this.skip === ev.page.skip) {\n return;\n }\n\n this.fetchData({\n newSkip: ev.page.skip,\n });\n };\n\n /** Call without params if unchanged */\n fetchData = async ({\n newSkip,\n newSort,\n newFilter,\n newAggregates,\n newGroup,\n }: FetchDataParams = {}) => {\n const sort = newSort ?? [...this.sort];\n const filter = newFilter === null ? undefined : (newFilter ?? this.filter);\n const aggregates = newAggregates ?? this.aggregates;\n const group = addAggregatesToGroups(newGroup ?? this.group, aggregates);\n const skip =\n newSort || newFilter !== undefined || newGroup\n ? 0\n : newSkip !== undefined\n ? newSkip\n : this.skip;\n\n if (!this.dataSource) {\n runInAction(() => {\n this.sort = sort;\n this.filter = filter;\n this.aggregates = aggregates;\n this.innerGroup = group;\n });\n\n return;\n }\n\n const newData = (await this.dataSource.getData({\n skip,\n sort,\n filter,\n group: [...group],\n take: this.pageSize,\n })) as DataResult<Selectable<T>>;\n\n runInAction(() => {\n if (!this.dataSource) {\n return;\n }\n\n if (newFilter !== undefined) {\n // When a new filter is applied, deselect items that don't match the filter\n if (this.dataSource.getFilteredPersistentItems) {\n // For persistent items, deselect everything in the persistent array that's been filtered out\n if (newFilter !== null && this.dataSource.idSelector) {\n let delta = 0;\n const filteredData = this.dataSource.getFilteredPersistentItems(\n newFilter\n ) as Expandable<Editable<Selectable<T>>>[];\n filteredData.forEach(dataItem => {\n const id = this.dataSource!.idSelector!(dataItem);\n if (this.selectedIds.delete(id)) {\n delta += 1;\n }\n\n if (!this.alwaysEditable) {\n this.inEdit.delete(id);\n }\n\n this.expandedIds.delete(id);\n });\n this.selectedCount -= delta;\n }\n } else {\n // For non-peristent items, everything is deselected by default\n this.selectedCount = 0;\n }\n }\n\n this.updateExpandState(newData.data);\n this.data = newData.data;\n this.filteredCount = newData.total;\n this.sort = sort;\n this.filter = filter;\n this.aggregates = aggregates;\n this.innerGroup = group;\n this.skip = skip;\n\n this.addPropertiesToRows(this.data);\n });\n };\n\n isRowSelectable = (row: Selectable<T>) =>\n !this.isRowUnselectable(row) &&\n (this.selectionLimit === Infinity ||\n row.selected ||\n this.selectedCount < this.selectionLimit);\n\n @action\n async toggleRowSelection(row: T, options?: SelectionOptions) {\n if (!this.dataSource) {\n return;\n }\n\n if (!this.dataSource.idSelector) {\n throw 'missing idSelector in the data source';\n }\n\n await this.setRowsSelection(\n [row],\n !this.selectedIds.has(this.dataSource.idSelector(row)),\n options\n );\n }\n\n @computed get isAllPageRowsSelected() {\n return (\n this.originalData.some(row => row.selected) &&\n this.originalData.every(row => this.isRowUnselectable(row) || row.selected)\n );\n }\n\n @computed get isSomePageRowsSelected() {\n return this.originalData.some(row => row.selected) && !this.isAllPageRowsSelected;\n }\n\n @computed get isAllRowsSelected() {\n if (!this.selectedIds.size) {\n return false;\n }\n\n return this.selectedIds.size === this.totalFilteredSelectableCount;\n }\n\n @computed get isSomeRowsSelected() {\n if (!this.selectedIds.size) {\n return false;\n }\n\n return !this.isAllRowsSelected;\n }\n\n setTablePdfExportRef = (el: TablePDFExport | null) => (this.tablePdfExport = el);\n setTableExcelExportRef = (el: ExcelExport | null) => (this.tableExcelExport = el);\n\n exportPdf = async () => {\n if (this.dataSource && this.tablePdfExport) {\n const { data } = await this.dataSource.getData({}); // fetch all data\n this.tablePdfExport.save(data);\n }\n };\n\n exportExcel = async (\n data?: any[] | ExcelExportData | WorkbookOptions,\n columns?: ExcelExportColumnProps[] | ReactElement<ExcelExportColumnProps>[]\n ) => {\n if (this.tableExcelExport) {\n this.tableExcelExport.save(\n data ?? (await this.filteredSortedUnpaginatedData()).data,\n columns\n );\n }\n };\n\n filteredSortedUnpaginatedData = () => {\n if (!this.dataSource) {\n throw 'missing dataSource';\n }\n return this.dataSource.getData({\n filter: this.filter,\n sort: [...this.sort],\n group: [...this.group],\n });\n };\n\n getRowsBetween = (start: Selectable<T>, end: Selectable<T>) => {\n const idSelector = this.dataSource?.idSelector;\n\n if (!idSelector) {\n return [];\n }\n\n let from: number | undefined, to: number | undefined;\n\n const startId = idSelector(start);\n const endId = idSelector(end);\n\n for (const [index, row] of this.originalData.entries()) {\n const id = idSelector(row);\n\n if (startId === id) {\n from = index;\n }\n\n if (endId === id) {\n to = index;\n }\n }\n\n if (from === undefined || to === undefined) {\n return [];\n }\n\n return this.originalData.slice(Math.min(from, to), Math.max(from, to) + 1);\n };\n\n exportState(): TableStateModel<TId> {\n return {\n skip: this.skip,\n selectedIds: Array.from(this.selectedIds),\n expandedIds: Array.from(this.expandedIds),\n collapsedGroups: Array.from(this.collapsedGroups),\n sort: this.sort,\n filter: this.filter,\n aggregates: this.aggregates,\n group: this.innerGroup,\n };\n }\n\n @action\n importState(data: TableStateModel<TId>) {\n this.skip = data.skip;\n this.selectedIds = new Set(data.selectedIds);\n this.expandedIds = new Set(data.expandedIds);\n this.collapsedGroups = new Set(data.collapsedGroups);\n this.sort = data.sort;\n this.filter = data.filter;\n this.aggregates = data.aggregates;\n this.innerGroup = data.group;\n }\n\n @action private updateExpandState(data: TableState<T, TId>['data']) {\n if (this.rowDetailsExpandState === 'expanded') {\n this.traverse(data, item => {\n const id = this.dataSource?.idSelector?.(item);\n\n if (id !== undefined && !this.collapsedIds.has(id)) {\n this.expandedIds.add(id);\n }\n });\n }\n }\n}\n"],"names":["action","computed","observable","runInAction","makeObservable","fromPromise","formStateToJS","isGroupItem","item","groups","field","some","g","addAggregatesToGroups","aggregates","map","group","TableState","dataSource","innerDataSource","traverse","items","itemCallback","groupCallback","materializedPath","groupMaterializedPath","value","originalData","result","data","push","unselectedCount","totalCount","selectedCount","selectableCount","unselectableCount","filteredUnselectableCount","filter","isRowUnselectable","length","filteredSelectableCount","totalFilteredSelectableCountPromise","Promise","resolve","reject","getData","then","filteredData","row","catch","totalFilteredSelectableCount","innerGroup","addToDataSource","select","index","addData","idSelector","selectedIds","add","alwaysEditable","edit","fetchData","removeFromDataSource","id","removeData","filteredCount","has","delete","inEdit","expandedIds","pageSize","skip","newSkip","setRowsSelection","rows","ignoreUnselectable","recursive","selectionLimit","getDetailTableState","detail","setAllSelection","parent","isAllPageRowsSelected","tableState","size","slice","selectPage","options","deselectPage","selectAll","Infinity","deselectAll","getFormState","set","form","saveEdit","beforeSave","updateData","editingForm","get","changed","cancelEdit","editAll","Map","saveEditAll","changes","Array","from","change","cancelEditAll","reset","Set","collapsedIds","collapsedGroups","sort","undefined","setDataSource","setDataSourceParams","config","initialState","importState","fetchInitialData","addPropertiesToRows","Object","defineProperty","isSomePageRowsSelected","toggleRowSelection","selected","every","isAllRowsSelected","isSomeRowsSelected","exportState","updateExpandState","rowDetailsExpandState","rowIdKey","tablePdfExport","tableExcelExport","initial","take","total","handleFilterChange","ev","newFilter","handleGroupChange","newGroup","handleExpandChange","dataItem","handleSortChange","newSort","handlePageChange","page","newAggregates","newData","getFilteredPersistentItems","delta","forEach","isRowSelectable","setTablePdfExportRef","el","setTableExcelExportRef","exportPdf","save","exportExcel","columns","filteredSortedUnpaginatedData","getRowsBetween","start","end","to","startId","endId","entries","Math","min","max"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../src/table-state.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/member-ordering */\nimport type { ReactElement } from 'react';\nimport { action, computed, observable, runInAction, makeObservable } from 'mobx';\nimport { fromPromise } from 'mobx-utils';\nimport type {\n AggregateDescriptor,\n CompositeFilterDescriptor,\n GroupDescriptor,\n SortDescriptor,\n DataResult,\n GroupResult,\n DataSource,\n IdType,\n} from '@servicetitan/data-query';\nimport type { ExcelExportData, ExcelExportColumnProps } from '@progress/kendo-react-excel-export';\nimport { ExcelExport } from '@progress/kendo-react-excel-export';\nimport type {\n TableExpandChangeEvent,\n TableFilterChangeEvent,\n TableGroupChangeEvent,\n TablePageChangeEvent,\n TableSortChangeEvent,\n} from '@servicetitan/design-system';\nimport { GridPDFExport as TablePDFExport } from '@progress/kendo-react-pdf';\nimport type { WorkbookOptions } from '@progress/kendo-ooxml';\nimport { FormState, FieldState } from 'formstate';\nimport { formStateToJS } from '@servicetitan/form';\n\nexport type Selectable<T> = { readonly selected: boolean | undefined } & T;\nexport type Editable<T> = { readonly inEdit: boolean | undefined } & T;\nexport type Expandable<T> = { readonly expanded: boolean | undefined } & T;\nexport type Materialized<T> = { readonly materializedPath: string } & T;\n\ntype Data<T> = DataResult<T>['data'];\n\nexport function isGroupItem<T>(\n item: T | GroupResult<T>,\n groups: GroupDescriptor[]\n): item is GroupResult<T> {\n const field: string | undefined = (item as GroupResult<T>).field;\n\n return !!field && groups.some(g => g.field === field);\n}\n\nfunction addAggregatesToGroups(groups: GroupDescriptor[], aggregates: AggregateDescriptor[]) {\n return groups.map(group => ({\n ...group,\n aggregates,\n }));\n}\n\nexport type PossibleFormState<T> = FormState<{\n [P in keyof T]-?: FieldState<T[P]>;\n}>;\n\nexport interface TableStateModel<TId extends IdType = never> {\n skip: number;\n selectedIds: TId[];\n expandedIds: TId[];\n collapsedGroups: string[];\n sort: SortDescriptor[];\n filter?: CompositeFilterDescriptor;\n aggregates: AggregateDescriptor[];\n group: GroupDescriptor[];\n}\n\nexport interface TableStateConstructorParams<\n T,\n TId extends IdType = never,\n P = never,\n PId extends IdType = never,\n> {\n dataSource?: DataSource<T, TId> | null;\n pageSize?: number;\n /** For use with tables that enable selection only. Specifies if the item is selectable in the checkbox */\n isRowUnselectable?: (row: T) => boolean;\n\n /**\n * Initial expand state for row details\n * collapsed - row details are collapsed by default\n * expanded - row details are expanded until it will be collapsed\n */\n rowDetailsExpandState?: 'collapsed' | 'expanded';\n selectionLimit?: number;\n getFormState?(row: T): PossibleFormState<T>;\n parent?: {\n row: P;\n tableState: TableState<P, PId>;\n };\n getDetailTableState?: (row: T) => TableState<any, any, any, any> | undefined;\n initialState?: TableStateModel<TId>;\n alwaysEditable?: boolean;\n rowIdKey?: string;\n}\n\ninterface FetchDataParams {\n newSkip?: number;\n newSort?: SortDescriptor[];\n newFilter?: CompositeFilterDescriptor | null;\n newAggregates?: AggregateDescriptor[];\n newGroup?: GroupDescriptor[];\n}\n\ninterface SelectionOptions {\n ignoreUnselectable?: boolean;\n recursive?: boolean;\n}\n\ninterface SetDataSourceParams<TId extends IdType = never> {\n reset?: boolean;\n initialState?: TableStateModel<TId>;\n}\n\ninterface EditingForm<T> {\n form: PossibleFormState<T>;\n field?: keyof T;\n}\n\n/** Interface for unit testing purposes.*/\nexport interface ITableState<T, TId extends IdType = never> {\n totalCount?: number;\n selectedCount?: number;\n addToDataSource?: (row: T, select?: boolean) => Promise<void>;\n removeFromDataSource?: (id: TId) => Promise<T | undefined>;\n selectAll?: () => Promise<void>;\n deselectAll?: () => void;\n setDataSource?: (\n dataSource: DataSource<T, TId> | null,\n setDataSourceParams?: boolean | SetDataSourceParams<TId>\n ) => Promise<void>;\n isRowUnselectable?: (row: T) => boolean;\n}\n\nexport class TableState<T, TId extends IdType = never, P = never, PId extends IdType = never> {\n @observable private innerDataSource: DataSource<T, TId> | null;\n\n @computed get dataSource() {\n return this.innerDataSource;\n }\n\n private traverse(\n items: Data<Selectable<T>>,\n itemCallback: (item: Selectable<T>) => void,\n groupCallback?: (group: GroupResult<T>, materializedPath: string) => void,\n materializedPath = ''\n ) {\n if (!items) {\n return;\n }\n\n for (const item of items) {\n if (isGroupItem(item, this.group)) {\n const groupMaterializedPath = materializedPath + `/${item.value}`;\n\n if (groupCallback) {\n groupCallback(item, groupMaterializedPath);\n }\n\n this.traverse(item.items, itemCallback, groupCallback, groupMaterializedPath);\n } else {\n itemCallback(item);\n }\n }\n }\n\n @computed\n private get originalData() {\n const result: Selectable<T>[] = [];\n\n this.traverse(this.data, item => {\n result.push(item);\n });\n\n return result;\n }\n\n parent?: {\n row: P;\n tableState: TableState<P, PId>;\n };\n getDetailTableState?: (row: T) => TableState<any, any, any, any> | undefined;\n\n @observable selectedIds = new Set<TId>();\n @observable inEdit = new Map<TId, EditingForm<T>>();\n @observable expandedIds = new Set<TId>();\n @observable collapsedIds = new Set<TId>();\n @observable collapsedGroups = new Set<string>();\n\n isRowUnselectable: (row: T) => boolean; // TODO: think about a better name\n selectionLimit: number;\n\n getFormState?(row: T): PossibleFormState<T>;\n\n @observable data: Data<Selectable<T>> = [];\n @observable totalCount = 0;\n @observable filteredCount = 0;\n @observable selectedCount = 0;\n @observable unselectableCount = 0;\n\n @computed get unselectedCount() {\n return this.totalCount - this.selectedCount;\n }\n\n @computed get selectableCount() {\n return this.totalCount - this.unselectableCount;\n }\n\n @computed get filteredUnselectableCount() {\n return this.originalData.filter(this.isRowUnselectable).length;\n }\n\n @computed get filteredSelectableCount() {\n return this.originalData.length - this.filteredUnselectableCount;\n }\n\n @computed\n private get totalFilteredSelectableCountPromise() {\n return fromPromise(\n new Promise<number>((resolve, reject) => {\n if (!this.dataSource) {\n return reject();\n }\n\n this.dataSource\n .getData({\n filter: this.filter,\n })\n .then(filteredData => {\n resolve(\n (filteredData.data as T[]).filter(row => !this.isRowUnselectable(row))\n .length\n );\n })\n .catch(reject);\n })\n );\n }\n\n @computed get totalFilteredSelectableCount(): number {\n return (this.totalFilteredSelectableCountPromise.value as number) || 0;\n }\n\n @observable sort: SortDescriptor[] = [];\n @observable filter: CompositeFilterDescriptor | undefined;\n\n @observable aggregates: AggregateDescriptor[] = [];\n\n @observable innerGroup: GroupDescriptor[] = [];\n\n @computed\n get group(): GroupDescriptor[] {\n return addAggregatesToGroups(this.innerGroup, this.aggregates);\n }\n\n set group(value: GroupDescriptor[]) {\n this.innerGroup = value;\n }\n\n @observable skip = 0;\n @observable pageSize?: number;\n\n private tablePdfExport: TablePDFExport | null = null;\n private tableExcelExport: ExcelExport | null = null;\n private readonly rowDetailsExpandState: 'collapsed' | 'expanded';\n\n rowIdKey?: string;\n alwaysEditable: boolean;\n\n constructor({\n dataSource = null,\n rowIdKey,\n pageSize,\n isRowUnselectable = () => false,\n rowDetailsExpandState = 'collapsed',\n selectionLimit = Infinity,\n getFormState,\n parent,\n getDetailTableState,\n initialState,\n alwaysEditable = false,\n }: TableStateConstructorParams<T, TId, P, PId> = {}) {\n makeObservable(this);\n\n this.innerDataSource = dataSource;\n this.pageSize = pageSize;\n this.isRowUnselectable = isRowUnselectable;\n this.rowDetailsExpandState = rowDetailsExpandState;\n this.selectionLimit = selectionLimit;\n this.rowIdKey = rowIdKey;\n\n this.getFormState = getFormState;\n\n this.parent = parent;\n this.getDetailTableState = getDetailTableState;\n\n if (initialState) {\n this.importState(initialState);\n }\n\n this.alwaysEditable = alwaysEditable;\n\n this.fetchInitialData();\n\n if (this.alwaysEditable) {\n this.editAll();\n }\n }\n\n async addToDataSource(row: T, select?: boolean, index?: number) {\n if (!this.dataSource) {\n return;\n }\n\n if (!this.dataSource.addData) {\n throw 'missing addData in the data source';\n }\n\n await this.dataSource.addData(row, index);\n runInAction(() => {\n this.totalCount += 1;\n\n if (select) {\n if (!this.dataSource!.idSelector) {\n throw 'missing idSelector in the data source';\n }\n\n this.selectedIds.add(this.dataSource!.idSelector(row));\n this.selectedCount += 1;\n }\n\n if (this.alwaysEditable) {\n this.edit(row);\n }\n });\n\n await this.fetchData();\n }\n\n async removeFromDataSource(id: TId): Promise<T | undefined> {\n if (!this.dataSource) {\n return;\n }\n\n if (!this.dataSource.removeData) {\n throw 'missing removeData in the data source';\n }\n\n const row = (await this.dataSource.removeData(id)) as Selectable<T> | undefined;\n if (!row) {\n return;\n }\n\n runInAction(() => {\n this.totalCount -= 1;\n // Updating filteredCount here to force Table rerender after this action\n this.filteredCount -= 1;\n\n if (this.selectedIds.has(id)) {\n this.selectedIds.delete(id);\n this.selectedCount -= 1;\n }\n\n if (this.inEdit.has(id)) {\n this.inEdit.delete(id);\n }\n\n if (this.expandedIds.has(id)) {\n this.expandedIds.delete(id);\n }\n });\n\n // If the current page has only one row and it's removed, fetch the previous page if it exists\n if (this.data.length === 1 && this.pageSize && this.skip >= this.pageSize) {\n await this.fetchData({ newSkip: this.skip - this.pageSize });\n } else {\n await this.fetchData();\n }\n\n return row;\n }\n\n @action\n async setRowsSelection(\n rows: T[],\n value: boolean,\n { ignoreUnselectable = true, recursive = true }: SelectionOptions = {}\n ) {\n if (!this.dataSource) {\n return;\n }\n\n if (!this.dataSource.idSelector) {\n throw 'missing idSelector in the data source';\n }\n\n for (const row of rows) {\n if (ignoreUnselectable && this.isRowUnselectable(row)) {\n continue;\n }\n\n runInAction(() => {\n if (!value) {\n this.selectedIds.delete(this.dataSource!.idSelector!(row));\n } else if (this.selectedCount < this.selectionLimit) {\n this.selectedIds.add(this.dataSource!.idSelector!(row));\n }\n });\n\n // update children selection\n if (recursive && this.getDetailTableState) {\n const detail = this.getDetailTableState(row);\n\n if (detail?.selectableCount) {\n // eslint-disable-next-line no-await-in-loop\n await detail.setAllSelection(value);\n }\n }\n }\n\n // update parent selection\n if (this.parent) {\n if (this.isAllPageRowsSelected) {\n await this.parent.tableState.setRowsSelection([this.parent.row], true, {\n recursive: false,\n });\n } else {\n await this.parent.tableState.setRowsSelection([this.parent.row], false, {\n recursive: false,\n });\n }\n }\n\n runInAction(() => {\n this.selectedCount = this.selectedIds.size;\n this.data = this.data.slice();\n });\n }\n\n async selectPage(options?: SelectionOptions) {\n await this.setRowsSelection(this.originalData, true, options);\n }\n\n async deselectPage(options?: SelectionOptions) {\n await this.setRowsSelection(this.originalData, false, options);\n }\n\n private async setAllSelection(value: boolean, options?: SelectionOptions) {\n if (!this.dataSource) {\n return;\n }\n\n const filteredData = await this.dataSource.getData({\n filter: this.filter,\n });\n\n await this.setRowsSelection(filteredData.data as T[], value, options);\n }\n\n async selectAll(options?: SelectionOptions) {\n if (this.selectionLimit !== Infinity) {\n throw \"selectAll isn't supported for limited selection\";\n }\n\n await this.setAllSelection(true, options);\n }\n\n async deselectAll(options?: SelectionOptions) {\n await this.setAllSelection(false, options);\n }\n\n @action\n edit(row: T, field?: keyof T) {\n if (!this.dataSource) {\n return;\n }\n\n if (!this.dataSource.idSelector) {\n throw 'missing idSelector in the data source';\n }\n\n if (!this.getFormState) {\n throw 'missing getFormState';\n }\n\n this.inEdit.set(this.dataSource.idSelector(row), {\n form: this.getFormState(row),\n field,\n });\n\n this.data = this.data.slice();\n }\n\n @action\n async saveEdit(row: T, beforeSave?: (changed: T, field?: keyof T) => Promise<void>) {\n if (!this.dataSource) {\n return;\n }\n\n if (!this.dataSource.idSelector) {\n throw 'missing idSelector in the data source';\n }\n\n if (!this.dataSource.updateData) {\n throw 'missing updateData in the data source';\n }\n\n const id = this.dataSource.idSelector(row);\n const editingForm = this.inEdit.get(id);\n\n if (!editingForm) {\n return;\n }\n\n const { form, field } = editingForm;\n const changed = formStateToJS(form) as unknown as T; // FIXME: incompatible types\n if (beforeSave) {\n await beforeSave(changed, field);\n }\n\n await this.dataSource.updateData(id, changed);\n\n if (!this.alwaysEditable) {\n runInAction(() => {\n this.inEdit.delete(id);\n });\n }\n\n await this.fetchData();\n }\n\n @action\n cancelEdit(row: T) {\n if (!this.dataSource) {\n return;\n }\n\n if (!this.dataSource.idSelector) {\n throw 'missing idSelector in the data source';\n }\n\n if (this.alwaysEditable) {\n return;\n }\n\n this.inEdit.delete(this.dataSource.idSelector(row));\n\n this.data = this.data.slice();\n }\n\n async editAll() {\n if (!this.dataSource) {\n return;\n }\n\n if (!this.dataSource.idSelector) {\n throw 'missing idSelector in the data source';\n }\n\n if (!this.getFormState) {\n throw 'missing getFormState';\n }\n\n const rows = (\n await this.dataSource.getData({\n filter: this.filter,\n })\n ).data as T[];\n\n runInAction(() => {\n this.inEdit = new Map(\n rows.map<[TId, EditingForm<T>]>(row => [\n this.dataSource!.idSelector!(row),\n { form: this.getFormState!(row) },\n ])\n );\n\n this.data = this.data.slice();\n });\n }\n\n async saveEditAll(beforeSave?: (changed: T[]) => Promise<void>) {\n if (!this.dataSource) {\n return;\n }\n\n if (!this.dataSource.updateData) {\n throw 'missing updateData in the data source';\n }\n\n const changes = Array.from(this.inEdit).map(([id, { form }]) => ({\n id,\n changed: formStateToJS(form) as unknown as T, // FIXME: incompatible types\n }));\n\n if (beforeSave) {\n await beforeSave(changes.map(change => change.changed));\n }\n\n for (const { id, changed } of changes) {\n // eslint-disable-next-line no-await-in-loop\n await this.dataSource.updateData(id, changed);\n }\n\n if (!this.alwaysEditable) {\n runInAction(() => {\n this.inEdit = new Map();\n });\n }\n\n await this.fetchData();\n }\n\n @action\n cancelEditAll() {\n if (!this.dataSource) {\n return;\n }\n\n if (this.alwaysEditable) {\n return;\n }\n\n this.inEdit = new Map();\n\n this.data = this.data.slice();\n }\n\n @action reset() {\n this.totalCount = 0;\n this.filteredCount = 0;\n this.data = [];\n this.selectedCount = 0;\n this.selectedIds = new Set();\n this.inEdit = new Map();\n this.expandedIds = new Set();\n this.collapsedIds = new Set();\n this.collapsedGroups = new Set();\n this.sort = [];\n this.filter = undefined;\n this.aggregates = [];\n this.innerGroup = [];\n }\n\n @action\n async setDataSource(\n dataSource: DataSource<T, TId> | null,\n setDataSourceParams?: SetDataSourceParams<TId> | boolean\n ) {\n this.innerDataSource = dataSource;\n this.skip = 0;\n\n const reset =\n typeof setDataSourceParams === 'boolean'\n ? setDataSourceParams\n : setDataSourceParams?.reset;\n const config = setDataSourceParams as SetDataSourceParams<TId>;\n\n if (reset) {\n this.reset();\n }\n if (config?.initialState) {\n this.importState(config.initialState);\n }\n await this.fetchInitialData();\n\n if (this.alwaysEditable) {\n await this.editAll();\n }\n }\n\n @action\n private fetchInitialData = async () => {\n if (!this.dataSource) {\n return;\n }\n\n const initial = (await this.dataSource.getData({\n skip: this.skip,\n take: this.pageSize,\n filter: this.filter,\n sort: [...this.sort],\n group: [...this.group],\n })) as DataResult<Selectable<T>>;\n\n runInAction(() => {\n this.totalCount = initial.total;\n this.filteredCount = initial.total;\n this.updateExpandState(initial.data);\n this.data = initial.data;\n this.unselectableCount = this.originalData.filter(this.isRowUnselectable).length;\n\n this.addPropertiesToRows(this.data);\n });\n };\n\n private addPropertiesToRows(data: Data<Selectable<T>>) {\n this.traverse(\n data,\n item => {\n if (!this.dataSource) {\n return;\n }\n\n if (!this.dataSource.idSelector) {\n return;\n }\n\n if (!('selected' in item)) {\n Object.defineProperty(item, 'selected', {\n get: () => this.selectedIds.has(this.dataSource!.idSelector!(item)),\n });\n }\n\n if (!('indeterminate' in item)) {\n Object.defineProperty(item, 'indeterminate', {\n get: () => {\n const detail = this.getDetailTableState?.(item);\n\n if (!detail) {\n return false;\n }\n\n return detail.isSomePageRowsSelected;\n },\n });\n }\n\n if (!('inEdit' in item)) {\n Object.defineProperty(item, 'inEdit', {\n get: () => this.inEdit.has(this.dataSource!.idSelector!(item)),\n });\n }\n\n if (!('expanded' in item)) {\n Object.defineProperty(item, 'expanded', {\n get: () => this.expandedIds.has(this.dataSource!.idSelector!(item)),\n });\n }\n },\n (group, materializedPath) => {\n if (!('materializedPath' in group)) {\n Object.defineProperty(group, 'materializedPath', {\n get: () => materializedPath,\n });\n }\n\n if (!('expanded' in group)) {\n Object.defineProperty(group, 'expanded', {\n get: () =>\n !this.collapsedGroups.has(\n (group as Materialized<GroupResult<T>>).materializedPath\n ),\n });\n }\n }\n );\n }\n\n @action\n handleFilterChange = (ev: TableFilterChangeEvent) => {\n this.fetchData({\n newFilter: ev.filter,\n });\n };\n\n @action\n handleGroupChange = (ev: TableGroupChangeEvent) => {\n this.collapsedGroups = new Set();\n\n this.fetchData({\n newGroup: ev.group,\n });\n };\n\n @action\n handleExpandChange = ({ dataItem, value }: TableExpandChangeEvent) => {\n if (isGroupItem(dataItem, this.group)) {\n const { materializedPath } = dataItem as Materialized<GroupResult<T>>;\n if (value) {\n this.collapsedGroups.delete(materializedPath);\n } else {\n this.collapsedGroups.add(materializedPath);\n }\n } else {\n if (!this.dataSource) {\n return;\n }\n\n if (!this.dataSource.idSelector) {\n throw 'missing idSelector in the data source';\n }\n\n const id = this.dataSource.idSelector(dataItem);\n if (value) {\n this.expandedIds.add(id);\n this.collapsedIds.delete(id);\n } else {\n this.expandedIds.delete(id);\n this.collapsedIds.add(id);\n }\n }\n\n this.data = this.data.slice();\n };\n\n @action\n handleSortChange = (ev: TableSortChangeEvent) => {\n this.fetchData({\n newSort: ev.sort,\n });\n };\n\n @action\n handlePageChange = (ev: TablePageChangeEvent) => {\n if (this.pageSize !== ev.page.take) {\n this.pageSize = ev.page.take;\n this.skip = 0;\n } else if (this.skip === ev.page.skip) {\n return;\n }\n\n this.fetchData({\n newSkip: ev.page.skip,\n });\n };\n\n /** Call without params if unchanged */\n fetchData = async ({\n newSkip,\n newSort,\n newFilter,\n newAggregates,\n newGroup,\n }: FetchDataParams = {}) => {\n const sort = newSort ?? [...this.sort];\n const filter = newFilter === null ? undefined : (newFilter ?? this.filter);\n const aggregates = newAggregates ?? this.aggregates;\n const group = addAggregatesToGroups(newGroup ?? this.group, aggregates);\n const skip =\n newSort || newFilter !== undefined || newGroup\n ? 0\n : newSkip !== undefined\n ? newSkip\n : this.skip;\n\n if (!this.dataSource) {\n runInAction(() => {\n this.sort = sort;\n this.filter = filter;\n this.aggregates = aggregates;\n this.innerGroup = group;\n });\n\n return;\n }\n\n const newData = (await this.dataSource.getData({\n skip,\n sort,\n filter,\n group: [...group],\n take: this.pageSize,\n })) as DataResult<Selectable<T>>;\n\n runInAction(() => {\n if (!this.dataSource) {\n return;\n }\n\n if (newFilter !== undefined) {\n // When a new filter is applied, deselect items that don't match the filter\n if (this.dataSource.getFilteredPersistentItems) {\n // For persistent items, deselect everything in the persistent array that's been filtered out\n if (newFilter !== null && this.dataSource.idSelector) {\n let delta = 0;\n const filteredData = this.dataSource.getFilteredPersistentItems(\n newFilter\n ) as Expandable<Editable<Selectable<T>>>[];\n filteredData.forEach(dataItem => {\n const id = this.dataSource!.idSelector!(dataItem);\n if (this.selectedIds.delete(id)) {\n delta += 1;\n }\n\n if (!this.alwaysEditable) {\n this.inEdit.delete(id);\n }\n\n this.expandedIds.delete(id);\n });\n this.selectedCount -= delta;\n }\n } else {\n // For non-peristent items, everything is deselected by default\n this.selectedCount = 0;\n }\n }\n\n this.updateExpandState(newData.data);\n this.data = newData.data;\n this.filteredCount = newData.total;\n this.sort = sort;\n this.filter = filter;\n this.aggregates = aggregates;\n this.innerGroup = group;\n this.skip = skip;\n\n this.addPropertiesToRows(this.data);\n });\n };\n\n isRowSelectable = (row: Selectable<T>) =>\n !this.isRowUnselectable(row) &&\n (this.selectionLimit === Infinity ||\n row.selected ||\n this.selectedCount < this.selectionLimit);\n\n @action\n async toggleRowSelection(row: T, options?: SelectionOptions) {\n if (!this.dataSource) {\n return;\n }\n\n if (!this.dataSource.idSelector) {\n throw 'missing idSelector in the data source';\n }\n\n await this.setRowsSelection(\n [row],\n !this.selectedIds.has(this.dataSource.idSelector(row)),\n options\n );\n }\n\n @computed get isAllPageRowsSelected() {\n return (\n this.originalData.some(row => row.selected) &&\n this.originalData.every(row => this.isRowUnselectable(row) || row.selected)\n );\n }\n\n @computed get isSomePageRowsSelected() {\n return this.originalData.some(row => row.selected) && !this.isAllPageRowsSelected;\n }\n\n @computed get isAllRowsSelected() {\n if (!this.selectedIds.size) {\n return false;\n }\n\n return this.selectedIds.size === this.totalFilteredSelectableCount;\n }\n\n @computed get isSomeRowsSelected() {\n if (!this.selectedIds.size) {\n return false;\n }\n\n return !this.isAllRowsSelected;\n }\n\n setTablePdfExportRef = (el: TablePDFExport | null) => (this.tablePdfExport = el);\n setTableExcelExportRef = (el: ExcelExport | null) => (this.tableExcelExport = el);\n\n exportPdf = async () => {\n if (this.dataSource && this.tablePdfExport) {\n const { data } = await this.dataSource.getData({}); // fetch all data\n this.tablePdfExport.save(data);\n }\n };\n\n exportExcel = async (\n data?: any[] | ExcelExportData | WorkbookOptions,\n columns?: ExcelExportColumnProps[] | ReactElement<ExcelExportColumnProps>[]\n ) => {\n if (this.tableExcelExport) {\n this.tableExcelExport.save(\n data ?? (await this.filteredSortedUnpaginatedData()).data,\n columns\n );\n }\n };\n\n filteredSortedUnpaginatedData = () => {\n if (!this.dataSource) {\n throw 'missing dataSource';\n }\n return this.dataSource.getData({\n filter: this.filter,\n sort: [...this.sort],\n group: [...this.group],\n });\n };\n\n getRowsBetween = (start: Selectable<T>, end: Selectable<T>) => {\n const idSelector = this.dataSource?.idSelector;\n\n if (!idSelector) {\n return [];\n }\n\n let from: number | undefined, to: number | undefined;\n\n const startId = idSelector(start);\n const endId = idSelector(end);\n\n for (const [index, row] of this.originalData.entries()) {\n const id = idSelector(row);\n\n if (startId === id) {\n from = index;\n }\n\n if (endId === id) {\n to = index;\n }\n }\n\n if (from === undefined || to === undefined) {\n return [];\n }\n\n return this.originalData.slice(Math.min(from, to), Math.max(from, to) + 1);\n };\n\n exportState(): TableStateModel<TId> {\n return {\n skip: this.skip,\n selectedIds: Array.from(this.selectedIds),\n expandedIds: Array.from(this.expandedIds),\n collapsedGroups: Array.from(this.collapsedGroups),\n sort: this.sort,\n filter: this.filter,\n aggregates: this.aggregates,\n group: this.innerGroup,\n };\n }\n\n @action\n importState(data: TableStateModel<TId>) {\n this.skip = data.skip;\n this.selectedIds = new Set(data.selectedIds);\n this.expandedIds = new Set(data.expandedIds);\n this.collapsedGroups = new Set(data.collapsedGroups);\n this.sort = data.sort;\n this.filter = data.filter;\n this.aggregates = data.aggregates;\n this.innerGroup = data.group;\n }\n\n @action private updateExpandState(data: TableState<T, TId>['data']) {\n if (this.rowDetailsExpandState === 'expanded') {\n this.traverse(data, item => {\n const id = this.dataSource?.idSelector?.(item);\n\n if (id !== undefined && !this.collapsedIds.has(id)) {\n this.expandedIds.add(id);\n }\n });\n }\n }\n}\n"],"names":["action","computed","observable","runInAction","makeObservable","fromPromise","formStateToJS","isGroupItem","item","groups","field","some","g","addAggregatesToGroups","aggregates","map","group","TableState","dataSource","innerDataSource","traverse","items","itemCallback","groupCallback","materializedPath","groupMaterializedPath","value","originalData","result","data","push","unselectedCount","totalCount","selectedCount","selectableCount","unselectableCount","filteredUnselectableCount","filter","isRowUnselectable","length","filteredSelectableCount","totalFilteredSelectableCountPromise","Promise","resolve","reject","getData","then","filteredData","row","catch","totalFilteredSelectableCount","innerGroup","addToDataSource","select","index","addData","idSelector","selectedIds","add","alwaysEditable","edit","fetchData","removeFromDataSource","id","removeData","filteredCount","has","delete","inEdit","expandedIds","pageSize","skip","newSkip","setRowsSelection","rows","ignoreUnselectable","recursive","selectionLimit","getDetailTableState","detail","setAllSelection","parent","isAllPageRowsSelected","tableState","size","slice","selectPage","options","deselectPage","selectAll","Infinity","deselectAll","getFormState","set","form","saveEdit","beforeSave","updateData","editingForm","get","changed","cancelEdit","editAll","Map","saveEditAll","changes","Array","from","change","cancelEditAll","reset","Set","collapsedIds","collapsedGroups","sort","undefined","setDataSource","setDataSourceParams","config","initialState","importState","fetchInitialData","addPropertiesToRows","Object","defineProperty","isSomePageRowsSelected","toggleRowSelection","selected","every","isAllRowsSelected","isSomeRowsSelected","exportState","updateExpandState","rowDetailsExpandState","rowIdKey","tablePdfExport","tableExcelExport","initial","take","total","handleFilterChange","ev","newFilter","handleGroupChange","newGroup","handleExpandChange","dataItem","handleSortChange","newSort","handlePageChange","page","newAggregates","newData","getFilteredPersistentItems","delta","forEach","isRowSelectable","setTablePdfExportRef","el","setTableExcelExportRef","exportPdf","save","exportExcel","columns","filteredSortedUnpaginatedData","getRowsBetween","start","end","to","startId","endId","entries","Math","min","max"],"mappings":"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"}
|
package/dist/table.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import type { ReactNode, ReactElement, ComponentType, ComponentProps } from 'react';
|
|
2
|
+
import { Component } from 'react';
|
|
3
|
+
import type { TableProps as AnvilTableProps, TableRowProps, TableColumnProps as AnvilTableColumnProps, TableCellProps as AnvilTableCellProps, TableHeaderSelectionChangeEvent, TableSelectionChangeEvent, TablePagerSettings } from '@servicetitan/design-system';
|
|
3
4
|
import { GRID_COL_INDEX_ATTRIBUTE } from '@progress/kendo-react-grid';
|
|
4
|
-
import { IdType } from '@servicetitan/data-query';
|
|
5
|
+
import type { IdType } from '@servicetitan/data-query';
|
|
5
6
|
import { TableState } from './table-state';
|
|
6
|
-
import { SelectionControlType } from './select-cell/select-cell';
|
|
7
|
+
import type { SelectionControlType } from './select-cell/select-cell';
|
|
7
8
|
export interface TableCellProps<T = never, TId extends IdType = any, P = never, PId extends IdType = never> extends AnvilTableCellProps {
|
|
8
9
|
tableState?: TableState<T, TId, P, PId>;
|
|
9
10
|
tdProps?: ComponentProps<'td'> & {
|
package/dist/table.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../src/table.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../src/table.tsx"],"names":[],"mappings":"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"}
|
package/dist/table.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/table.tsx"],"sourcesContent":["import {\n isValidElement,\n Component,\n createRef,\n cloneElement,\n Children,\n Fragment,\n ReactNode,\n ReactElement,\n ComponentType,\n FC,\n ComponentProps,\n} from 'react';\nimport {\n Announcement,\n Table as AnvilTable,\n TableProps as AnvilTableProps,\n TableRowProps,\n TableColumn,\n TableColumnProps as AnvilTableColumnProps,\n TableCellProps as AnvilTableCellProps,\n TableHeaderCellProps,\n TableHeaderSelectionChangeEvent,\n TableSelectionChangeEvent,\n TablePagerSettings,\n} from '@servicetitan/design-system';\nimport { operators as kendoOperators } from '@progress/kendo-react-grid/dist/npm/filterCommon';\nimport { GridPDFExport as TablePDFExport } from '@progress/kendo-react-pdf';\nimport { ExcelExport } from '@progress/kendo-react-excel-export';\nimport { observer } from 'mobx-react';\nimport { GRID_COL_INDEX_ATTRIBUTE } from '@progress/kendo-react-grid';\n\nimport { AsyncDataSource, IdType } from '@servicetitan/data-query';\nimport { TableState, Selectable } from './table-state';\nimport {\n SelectionControlType,\n SelectColumnCell,\n SelectHeaderCell,\n} from './select-cell/select-cell';\nimport memoizeOne from 'memoize-one';\n\nimport classNames from 'classnames';\nimport * as Styles from './table.module.css';\nimport { action, makeObservable, observable } from 'mobx';\nimport { useTdProps } from './utils/use-td-props';\n\nconst { text: textOperators, ...operators } = kendoOperators;\noperators.text = [\n ...textOperators.filter(o => o.operator !== 'isnull' && o.operator !== 'isnotnull'),\n];\n\nfunction isColumnElement<\n T = never,\n TId extends IdType = any,\n P = never,\n PId extends IdType = never,\n>(element: ReactNode): element is ReactElement<TableColumnProps<T, TId, P, PId>> {\n if (!isValidElement(element)) {\n return false;\n }\n\n const elementType = (element as ReactElement).type;\n\n return elementType === TableColumn || (elementType as any).originalType === TableColumn;\n}\n\nexport interface TableCellProps<\n T = never,\n TId extends IdType = any,\n P = never,\n PId extends IdType = never,\n> extends AnvilTableCellProps {\n tableState?: TableState<T, TId, P, PId>;\n tdProps?: ComponentProps<'td'> & {\n [GRID_COL_INDEX_ATTRIBUTE]?: number;\n };\n}\n\ninterface TableColumnProps<\n T = never,\n TId extends IdType = any,\n P = never,\n PId extends IdType = never,\n> extends AnvilTableColumnProps {\n cell?: ComponentType<TableCellProps<T, TId, P, PId>>;\n children?: ReactElement<TableColumnProps<T, TId, P, PId>>[];\n}\n\ntype ExcludedTableProps =\n | 'data'\n | 'dataItemKey'\n | 'editField'\n | 'filter'\n | 'onFilterChange'\n | 'group'\n | 'onGroupChange'\n | 'onExpandChange'\n | 'expandField'\n | 'sort'\n | 'onSortChange'\n | 'onHeaderSelectionChange'\n | 'onSelectionChange'\n | 'selectedField'\n | 'pageable'\n | 'pageSize'\n | 'skip'\n | 'onPageChange'\n | 'total'\n | 'selectable'\n | 'pager';\n\nexport interface TableProps<\n T,\n TId extends IdType = any,\n P = never,\n PId extends IdType = never,\n> extends Omit<AnvilTableProps, ExcludedTableProps> {\n selectable?: boolean;\n exportable?: boolean;\n hideSelectAll?: boolean;\n exportFileName?: string;\n tableState: TableState<T, TId, P, PId>;\n selectionControl?: SelectionControlType;\n pager?: TablePagerSettings;\n}\n\n@observer\nexport class Table<\n T,\n TId extends IdType = any,\n P = never,\n PId extends IdType = never,\n> extends Component<TableProps<T, TId, P, PId>> {\n @observable observableScrollable: TableProps<T, TId, P, PId>['scrollable'];\n @observable observableSelectionControl: TableProps<T, TId, P, PId>['selectionControl'];\n @observable observableHideSelectAll: TableProps<T, TId, P, PId>['hideSelectAll'];\n @observable observableSelectable: TableProps<T, TId, P, PId>['selectable'];\n\n private tableState = this.props.tableState;\n\n private ref = createRef<HTMLElement>();\n\n private lastSelection?: Selectable<T>;\n\n private selectColumnCell: FC<AnvilTableCellProps> = observer((props: AnvilTableCellProps) => (\n <SelectColumnCell\n {...props}\n isRowSelectable={this.tableState.isRowSelectable(props.dataItem)}\n control={this.observableSelectionControl}\n />\n ));\n\n private customCellMap = new Map<string, FC<TableCellProps<T, TId, P, PId>>>();\n\n private selectHeaderCell: FC<TableHeaderCellProps> = observer((props: TableHeaderCellProps) => {\n if (this.observableHideSelectAll || this.tableState.selectionLimit !== Infinity) {\n return null;\n }\n\n return (\n <SelectHeaderCell\n {...props}\n isSomeRowsSelected={\n this.observableScrollable !== 'virtual'\n ? this.tableState.isSomePageRowsSelected\n : this.tableState.isSomeRowsSelected\n }\n control={this.observableSelectionControl}\n />\n );\n });\n\n // TODO: rid of \"memoizeOne\" after migration on React.FC\n private withCellTableState = memoizeOne((children: ReactNode) =>\n this.applyToColumns(children, column => {\n const { cell: Cell, field } = column.props;\n\n return cloneElement(column, {\n cell: this.getOrCreateCellComponentWithTableState(Cell, field),\n });\n })\n );\n\n constructor(props: TableProps<T, TId, P, PId>) {\n super(props);\n\n makeObservable(this);\n\n this.observableScrollable = this.props.scrollable;\n this.observableSelectionControl = this.props.selectionControl;\n this.observableHideSelectAll = this.props.hideSelectAll;\n }\n\n @action\n componentDidUpdate() {\n this.observableScrollable = this.props.scrollable;\n this.observableSelectionControl = this.props.selectionControl;\n this.observableHideSelectAll = this.props.hideSelectAll;\n }\n\n rowRender = (row: ReactElement, rowProps: TableRowProps) => {\n const overrides: typeof row.props = {};\n\n if (\n this.props.selectable &&\n rowProps.rowType === 'data' &&\n !this.tableState.isRowSelectable(rowProps.dataItem)\n ) {\n overrides.className = classNames(row.props.className, Styles.disabled);\n }\n\n const result = Object.keys(overrides).length ? cloneElement(row, overrides) : row;\n\n return this.props.rowRender ? this.props.rowRender(result, rowProps) : result;\n };\n\n applyToColumns(\n children: ReactNode,\n transformer: (\n column: ReactElement<TableColumnProps<T, TId, P, PId>>\n ) => ReactElement<TableColumnProps<T, TId, P, PId>>\n ): ReactNode {\n return Children.map(children, child => {\n if (!isColumnElement<T, TId, P, PId>(child)) {\n return child;\n }\n\n return child.props.children\n ? cloneElement(transformer(child), {\n children: this.applyToColumns(\n child.props.children,\n transformer\n ) as typeof child.props.children,\n })\n : transformer(child);\n });\n }\n\n handleHeaderSelectionChange = (ev: TableHeaderSelectionChangeEvent) => {\n const checked = ev.syntheticEvent.currentTarget.checked;\n\n if (this.observableScrollable !== 'virtual') {\n if (checked) {\n this.tableState.selectPage();\n } else {\n this.tableState.deselectPage();\n }\n } else {\n if (checked) {\n this.tableState.selectAll();\n } else {\n this.tableState.deselectAll();\n }\n }\n };\n\n handleSelectionChange = (ev: TableSelectionChangeEvent) => {\n if (!ev.dataItem) {\n return;\n }\n if (ev.nativeEvent.shiftKey && this.lastSelection) {\n const rows = this.tableState\n .getRowsBetween(this.lastSelection, ev.dataItem)\n .filter(row => this.tableState.isRowSelectable(row));\n const isAsc =\n this.tableState.dataSource?.idSelector?.(this.lastSelection) ===\n this.tableState.dataSource?.idSelector?.(rows[0]);\n const selection = !ev.dataItem.selected;\n\n if (selection) {\n const toBeSelected: Selectable<T>[] = [];\n for (const row of isAsc ? rows : rows.reverse()) {\n if (\n this.tableState.selectedCount + toBeSelected.length >=\n this.tableState.selectionLimit\n ) {\n break;\n }\n\n if (row.selected) {\n continue;\n }\n\n toBeSelected.push(row);\n }\n\n this.tableState.setRowsSelection(toBeSelected, selection);\n } else {\n this.tableState.setRowsSelection(rows, selection);\n }\n } else {\n this.tableState.toggleRowSelection(ev.dataItem);\n }\n\n this.lastSelection = ev.dataItem;\n };\n\n scrollToBottom = () => {\n if (this.ref.current) {\n const container = this.ref.current.getElementsByClassName(\n 'k-grid-content'\n )[0] as HTMLDivElement;\n container.scrollTop = container.scrollHeight - container.clientHeight * 2;\n container.scroll({ top: container.scrollHeight, behavior: 'smooth' });\n }\n };\n\n render() {\n if (\n this.tableState.dataSource instanceof AsyncDataSource &&\n this.props.scrollable === 'virtual' &&\n this.props.selectable\n ) {\n return (\n <Announcement\n status=\"critical\"\n title=\"AsyncDataSource doesn't support virtual scroll with selection.\"\n />\n );\n }\n\n const table = this.table();\n return (\n <Fragment>\n {table}\n {this.props.exportable && (\n <Fragment>\n <TablePDFExport\n ref={this.tableState.setTablePdfExportRef}\n fileName={sanitizeExportFileName(this.props.exportFileName)}\n >\n {this.props.children}\n {table}\n </TablePDFExport>\n <ExcelExport\n ref={this.tableState.setTableExcelExportRef}\n fileName={sanitizeExportFileName(this.props.exportFileName)}\n >\n {this.props.children}\n </ExcelExport>\n </Fragment>\n )}\n </Fragment>\n );\n }\n\n private getPageable() {\n if (this.props.scrollable === 'virtual' || !this.tableState.pageSize) {\n return false;\n }\n\n return this.props.pager ?? true;\n }\n\n private table = () => {\n const { className, filterOperators, selectable, pager, ...props } = this.props;\n\n return (\n <AnvilTable\n ref={this.ref}\n {...props}\n dataItemKey={this.tableState.rowIdKey}\n data={[...this.tableState.data]}\n rowRender={this.rowRender}\n editField=\"inEdit\"\n filter={this.tableState.filter}\n filterOperators={filterOperators ?? operators}\n onFilterChange={this.tableState.handleFilterChange}\n group={[...this.tableState.group] as AnvilTableProps['group']}\n onGroupChange={this.tableState.handleGroupChange}\n onExpandChange={this.tableState.handleExpandChange}\n expandField=\"expanded\"\n sort={[...this.tableState.sort]}\n onSortChange={this.tableState.handleSortChange}\n onHeaderSelectionChange={this.handleHeaderSelectionChange}\n onSelectionChange={this.handleSelectionChange}\n selectedField=\"selected\"\n pageable={this.getPageable()}\n pageSize={this.tableState.pageSize}\n skip={this.tableState.skip}\n onPageChange={this.tableState.handlePageChange}\n total={this.tableState.filteredCount}\n className={classNames(Styles.table, className)}\n selectable={{ enabled: selectable, mode: 'multiple' }}\n >\n {selectable && (\n <TableColumn\n locked\n field=\"selected\"\n id=\"selected\"\n width=\"50px\"\n filterable={false}\n resizable={false}\n reorderable={false}\n headerSelectionValue={\n props.scrollable !== 'virtual'\n ? this.tableState.isAllPageRowsSelected\n : this.tableState.isAllRowsSelected\n }\n headerCell={this.selectHeaderCell}\n cell={this.selectColumnCell}\n headerClassName=\"lh-1-i ta-center-i\"\n className={classNames(Styles.unselectable, 'lh-1-i', 'ta-center-i')}\n />\n )}\n {this.withCellTableState(props.children)}\n </AnvilTable>\n );\n };\n\n private getOrCreateCellComponentWithTableState = (\n Cell: any,\n field?: string\n ): FC<TableCellProps<T, TId, P, PId>> | undefined => {\n if (!Cell) {\n return undefined;\n }\n\n const CellWithTableState: FC<TableCellProps<T, TId, P, PId>> = (\n props: TableCellProps<T, TId, P, PId>\n ) => {\n const tdProps = useTdProps(props);\n return <Cell {...props} tableState={this.tableState} tdProps={tdProps} />;\n };\n CellWithTableState.displayName = 'CellWithTableState';\n\n if (field) {\n if (this.customCellMap.has(field)) {\n return this.customCellMap.get(field)!;\n }\n this.customCellMap.set(field, CellWithTableState);\n }\n return CellWithTableState;\n };\n}\n\nconst sanitizeExportFileName = memoizeOne((fileName: string | undefined) =>\n fileName?.replace(/\\.+/g, '_')\n);\n"],"names":["isValidElement","Component","createRef","cloneElement","Children","Fragment","Announcement","Table","AnvilTable","TableColumn","operators","kendoOperators","GridPDFExport","TablePDFExport","ExcelExport","observer","AsyncDataSource","SelectColumnCell","SelectHeaderCell","memoizeOne","classNames","Styles","action","makeObservable","observable","useTdProps","text","textOperators","filter","o","operator","isColumnElement","element","elementType","type","originalType","componentDidUpdate","observableScrollable","props","scrollable","observableSelectionControl","selectionControl","observableHideSelectAll","hideSelectAll","applyToColumns","children","transformer","map","child","render","tableState","dataSource","selectable","status","title","table","exportable","ref","setTablePdfExportRef","fileName","sanitizeExportFileName","exportFileName","setTableExcelExportRef","getPageable","pageSize","pager","observableSelectable","lastSelection","selectColumnCell","isRowSelectable","dataItem","control","customCellMap","Map","selectHeaderCell","selectionLimit","Infinity","isSomeRowsSelected","isSomePageRowsSelected","withCellTableState","column","cell","Cell","field","getOrCreateCellComponentWithTableState","rowRender","row","rowProps","overrides","rowType","className","disabled","result","Object","keys","length","handleHeaderSelectionChange","ev","checked","syntheticEvent","currentTarget","selectPage","deselectPage","selectAll","deselectAll","handleSelectionChange","nativeEvent","shiftKey","rows","getRowsBetween","isAsc","idSelector","selection","selected","toBeSelected","reverse","selectedCount","push","setRowsSelection","toggleRowSelection","scrollToBottom","current","container","getElementsByClassName","scrollTop","scrollHeight","clientHeight","scroll","top","behavior","filterOperators","dataItemKey","rowIdKey","data","editField","onFilterChange","handleFilterChange","group","onGroupChange","handleGroupChange","onExpandChange","handleExpandChange","expandField","sort","onSortChange","handleSortChange","onHeaderSelectionChange","onSelectionChange","selectedField","pageable","skip","onPageChange","handlePageChange","total","filteredCount","enabled","mode","locked","id","width","filterable","resizable","reorderable","headerSelectionValue","isAllPageRowsSelected","isAllRowsSelected","headerCell","headerClassName","unselectable","undefined","CellWithTableState","tdProps","displayName","has","get","set","replace"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../src/table.tsx"],"sourcesContent":["import type { ReactNode, ReactElement, ComponentType, FC, ComponentProps } from 'react';\nimport { isValidElement, Component, createRef, cloneElement, Children, Fragment } from 'react';\nimport type {\n TableProps as AnvilTableProps,\n TableRowProps,\n TableColumnProps as AnvilTableColumnProps,\n TableCellProps as AnvilTableCellProps,\n TableHeaderCellProps,\n TableHeaderSelectionChangeEvent,\n TableSelectionChangeEvent,\n TablePagerSettings,\n} from '@servicetitan/design-system';\nimport { Announcement, Table as AnvilTable, TableColumn } from '@servicetitan/design-system';\nimport { operators as kendoOperators } from '@progress/kendo-react-grid/dist/npm/filterCommon';\nimport { GridPDFExport as TablePDFExport } from '@progress/kendo-react-pdf';\nimport { ExcelExport } from '@progress/kendo-react-excel-export';\nimport { observer } from 'mobx-react';\nimport { GRID_COL_INDEX_ATTRIBUTE } from '@progress/kendo-react-grid';\n\nimport type { IdType } from '@servicetitan/data-query';\nimport { AsyncDataSource } from '@servicetitan/data-query';\nimport type { Selectable } from './table-state';\nimport { TableState } from './table-state';\nimport type { SelectionControlType } from './select-cell/select-cell';\nimport { SelectColumnCell, SelectHeaderCell } from './select-cell/select-cell';\nimport memoizeOne from 'memoize-one';\n\nimport classNames from 'classnames';\nimport * as Styles from './table.module.css';\nimport { action, makeObservable, observable } from 'mobx';\nimport { useTdProps } from './utils/use-td-props';\n\nconst { text: textOperators, ...operators } = kendoOperators;\noperators.text = [\n ...textOperators.filter(o => o.operator !== 'isnull' && o.operator !== 'isnotnull'),\n];\n\nfunction isColumnElement<\n T = never,\n TId extends IdType = any,\n P = never,\n PId extends IdType = never,\n>(element: ReactNode): element is ReactElement<TableColumnProps<T, TId, P, PId>> {\n if (!isValidElement(element)) {\n return false;\n }\n\n const elementType = (element as ReactElement).type;\n\n return elementType === TableColumn || (elementType as any).originalType === TableColumn;\n}\n\nexport interface TableCellProps<\n T = never,\n TId extends IdType = any,\n P = never,\n PId extends IdType = never,\n> extends AnvilTableCellProps {\n tableState?: TableState<T, TId, P, PId>;\n tdProps?: ComponentProps<'td'> & {\n [GRID_COL_INDEX_ATTRIBUTE]?: number;\n };\n}\n\ninterface TableColumnProps<\n T = never,\n TId extends IdType = any,\n P = never,\n PId extends IdType = never,\n> extends AnvilTableColumnProps {\n cell?: ComponentType<TableCellProps<T, TId, P, PId>>;\n children?: ReactElement<TableColumnProps<T, TId, P, PId>>[];\n}\n\ntype ExcludedTableProps =\n | 'data'\n | 'dataItemKey'\n | 'editField'\n | 'filter'\n | 'onFilterChange'\n | 'group'\n | 'onGroupChange'\n | 'onExpandChange'\n | 'expandField'\n | 'sort'\n | 'onSortChange'\n | 'onHeaderSelectionChange'\n | 'onSelectionChange'\n | 'selectedField'\n | 'pageable'\n | 'pageSize'\n | 'skip'\n | 'onPageChange'\n | 'total'\n | 'selectable'\n | 'pager';\n\nexport interface TableProps<\n T,\n TId extends IdType = any,\n P = never,\n PId extends IdType = never,\n> extends Omit<AnvilTableProps, ExcludedTableProps> {\n selectable?: boolean;\n exportable?: boolean;\n hideSelectAll?: boolean;\n exportFileName?: string;\n tableState: TableState<T, TId, P, PId>;\n selectionControl?: SelectionControlType;\n pager?: TablePagerSettings;\n}\n\n@observer\nexport class Table<\n T,\n TId extends IdType = any,\n P = never,\n PId extends IdType = never,\n> extends Component<TableProps<T, TId, P, PId>> {\n @observable observableScrollable: TableProps<T, TId, P, PId>['scrollable'];\n @observable observableSelectionControl: TableProps<T, TId, P, PId>['selectionControl'];\n @observable observableHideSelectAll: TableProps<T, TId, P, PId>['hideSelectAll'];\n @observable observableSelectable: TableProps<T, TId, P, PId>['selectable'];\n\n private tableState = this.props.tableState;\n\n private ref = createRef<HTMLElement>();\n\n private lastSelection?: Selectable<T>;\n\n private selectColumnCell: FC<AnvilTableCellProps> = observer((props: AnvilTableCellProps) => (\n <SelectColumnCell\n {...props}\n isRowSelectable={this.tableState.isRowSelectable(props.dataItem)}\n control={this.observableSelectionControl}\n />\n ));\n\n private customCellMap = new Map<string, FC<TableCellProps<T, TId, P, PId>>>();\n\n private selectHeaderCell: FC<TableHeaderCellProps> = observer((props: TableHeaderCellProps) => {\n if (this.observableHideSelectAll || this.tableState.selectionLimit !== Infinity) {\n return null;\n }\n\n return (\n <SelectHeaderCell\n {...props}\n isSomeRowsSelected={\n this.observableScrollable !== 'virtual'\n ? this.tableState.isSomePageRowsSelected\n : this.tableState.isSomeRowsSelected\n }\n control={this.observableSelectionControl}\n />\n );\n });\n\n // TODO: rid of \"memoizeOne\" after migration on React.FC\n private withCellTableState = memoizeOne((children: ReactNode) =>\n this.applyToColumns(children, column => {\n const { cell: Cell, field } = column.props;\n\n return cloneElement(column, {\n cell: this.getOrCreateCellComponentWithTableState(Cell, field),\n });\n })\n );\n\n constructor(props: TableProps<T, TId, P, PId>) {\n super(props);\n\n makeObservable(this);\n\n this.observableScrollable = this.props.scrollable;\n this.observableSelectionControl = this.props.selectionControl;\n this.observableHideSelectAll = this.props.hideSelectAll;\n }\n\n @action\n componentDidUpdate() {\n this.observableScrollable = this.props.scrollable;\n this.observableSelectionControl = this.props.selectionControl;\n this.observableHideSelectAll = this.props.hideSelectAll;\n }\n\n rowRender = (row: ReactElement, rowProps: TableRowProps) => {\n const overrides: typeof row.props = {};\n\n if (\n this.props.selectable &&\n rowProps.rowType === 'data' &&\n !this.tableState.isRowSelectable(rowProps.dataItem)\n ) {\n overrides.className = classNames(row.props.className, Styles.disabled);\n }\n\n const result = Object.keys(overrides).length ? cloneElement(row, overrides) : row;\n\n return this.props.rowRender ? this.props.rowRender(result, rowProps) : result;\n };\n\n applyToColumns(\n children: ReactNode,\n transformer: (\n column: ReactElement<TableColumnProps<T, TId, P, PId>>\n ) => ReactElement<TableColumnProps<T, TId, P, PId>>\n ): ReactNode {\n return Children.map(children, child => {\n if (!isColumnElement<T, TId, P, PId>(child)) {\n return child;\n }\n\n return child.props.children\n ? cloneElement(transformer(child), {\n children: this.applyToColumns(\n child.props.children,\n transformer\n ) as typeof child.props.children,\n })\n : transformer(child);\n });\n }\n\n handleHeaderSelectionChange = (ev: TableHeaderSelectionChangeEvent) => {\n const checked = ev.syntheticEvent.currentTarget.checked;\n\n if (this.observableScrollable !== 'virtual') {\n if (checked) {\n this.tableState.selectPage();\n } else {\n this.tableState.deselectPage();\n }\n } else {\n if (checked) {\n this.tableState.selectAll();\n } else {\n this.tableState.deselectAll();\n }\n }\n };\n\n handleSelectionChange = (ev: TableSelectionChangeEvent) => {\n if (!ev.dataItem) {\n return;\n }\n if (ev.nativeEvent.shiftKey && this.lastSelection) {\n const rows = this.tableState\n .getRowsBetween(this.lastSelection, ev.dataItem)\n .filter(row => this.tableState.isRowSelectable(row));\n const isAsc =\n this.tableState.dataSource?.idSelector?.(this.lastSelection) ===\n this.tableState.dataSource?.idSelector?.(rows[0]);\n const selection = !ev.dataItem.selected;\n\n if (selection) {\n const toBeSelected: Selectable<T>[] = [];\n for (const row of isAsc ? rows : rows.reverse()) {\n if (\n this.tableState.selectedCount + toBeSelected.length >=\n this.tableState.selectionLimit\n ) {\n break;\n }\n\n if (row.selected) {\n continue;\n }\n\n toBeSelected.push(row);\n }\n\n this.tableState.setRowsSelection(toBeSelected, selection);\n } else {\n this.tableState.setRowsSelection(rows, selection);\n }\n } else {\n this.tableState.toggleRowSelection(ev.dataItem);\n }\n\n this.lastSelection = ev.dataItem;\n };\n\n scrollToBottom = () => {\n if (this.ref.current) {\n const container = this.ref.current.getElementsByClassName(\n 'k-grid-content'\n )[0] as HTMLDivElement;\n container.scrollTop = container.scrollHeight - container.clientHeight * 2;\n container.scroll({ top: container.scrollHeight, behavior: 'smooth' });\n }\n };\n\n render() {\n if (\n this.tableState.dataSource instanceof AsyncDataSource &&\n this.props.scrollable === 'virtual' &&\n this.props.selectable\n ) {\n return (\n <Announcement\n status=\"critical\"\n title=\"AsyncDataSource doesn't support virtual scroll with selection.\"\n />\n );\n }\n\n const table = this.table();\n return (\n <Fragment>\n {table}\n {this.props.exportable && (\n <Fragment>\n <TablePDFExport\n ref={this.tableState.setTablePdfExportRef}\n fileName={sanitizeExportFileName(this.props.exportFileName)}\n >\n {this.props.children}\n {table}\n </TablePDFExport>\n <ExcelExport\n ref={this.tableState.setTableExcelExportRef}\n fileName={sanitizeExportFileName(this.props.exportFileName)}\n >\n {this.props.children}\n </ExcelExport>\n </Fragment>\n )}\n </Fragment>\n );\n }\n\n private getPageable() {\n if (this.props.scrollable === 'virtual' || !this.tableState.pageSize) {\n return false;\n }\n\n return this.props.pager ?? true;\n }\n\n private table = () => {\n const { className, filterOperators, selectable, pager, ...props } = this.props;\n\n return (\n <AnvilTable\n ref={this.ref}\n {...props}\n dataItemKey={this.tableState.rowIdKey}\n data={[...this.tableState.data]}\n rowRender={this.rowRender}\n editField=\"inEdit\"\n filter={this.tableState.filter}\n filterOperators={filterOperators ?? operators}\n onFilterChange={this.tableState.handleFilterChange}\n group={[...this.tableState.group] as AnvilTableProps['group']}\n onGroupChange={this.tableState.handleGroupChange}\n onExpandChange={this.tableState.handleExpandChange}\n expandField=\"expanded\"\n sort={[...this.tableState.sort]}\n onSortChange={this.tableState.handleSortChange}\n onHeaderSelectionChange={this.handleHeaderSelectionChange}\n onSelectionChange={this.handleSelectionChange}\n selectedField=\"selected\"\n pageable={this.getPageable()}\n pageSize={this.tableState.pageSize}\n skip={this.tableState.skip}\n onPageChange={this.tableState.handlePageChange}\n total={this.tableState.filteredCount}\n className={classNames(Styles.table, className)}\n selectable={{ enabled: selectable, mode: 'multiple' }}\n >\n {selectable && (\n <TableColumn\n locked\n field=\"selected\"\n id=\"selected\"\n width=\"50px\"\n filterable={false}\n resizable={false}\n reorderable={false}\n headerSelectionValue={\n props.scrollable !== 'virtual'\n ? this.tableState.isAllPageRowsSelected\n : this.tableState.isAllRowsSelected\n }\n headerCell={this.selectHeaderCell}\n cell={this.selectColumnCell}\n headerClassName=\"lh-1-i ta-center-i\"\n className={classNames(Styles.unselectable, 'lh-1-i', 'ta-center-i')}\n />\n )}\n {this.withCellTableState(props.children)}\n </AnvilTable>\n );\n };\n\n private getOrCreateCellComponentWithTableState = (\n Cell: any,\n field?: string\n ): FC<TableCellProps<T, TId, P, PId>> | undefined => {\n if (!Cell) {\n return undefined;\n }\n\n const CellWithTableState: FC<TableCellProps<T, TId, P, PId>> = (\n props: TableCellProps<T, TId, P, PId>\n ) => {\n const tdProps = useTdProps(props);\n return <Cell {...props} tableState={this.tableState} tdProps={tdProps} />;\n };\n CellWithTableState.displayName = 'CellWithTableState';\n\n if (field) {\n if (this.customCellMap.has(field)) {\n return this.customCellMap.get(field)!;\n }\n this.customCellMap.set(field, CellWithTableState);\n }\n return CellWithTableState;\n };\n}\n\nconst sanitizeExportFileName = memoizeOne((fileName: string | undefined) =>\n fileName?.replace(/\\.+/g, '_')\n);\n"],"names":["isValidElement","Component","createRef","cloneElement","Children","Fragment","Announcement","Table","AnvilTable","TableColumn","operators","kendoOperators","GridPDFExport","TablePDFExport","ExcelExport","observer","AsyncDataSource","SelectColumnCell","SelectHeaderCell","memoizeOne","classNames","Styles","action","makeObservable","observable","useTdProps","text","textOperators","filter","o","operator","isColumnElement","element","elementType","type","originalType","componentDidUpdate","observableScrollable","props","scrollable","observableSelectionControl","selectionControl","observableHideSelectAll","hideSelectAll","applyToColumns","children","transformer","map","child","render","tableState","dataSource","selectable","status","title","table","exportable","ref","setTablePdfExportRef","fileName","sanitizeExportFileName","exportFileName","setTableExcelExportRef","getPageable","pageSize","pager","observableSelectable","lastSelection","selectColumnCell","isRowSelectable","dataItem","control","customCellMap","Map","selectHeaderCell","selectionLimit","Infinity","isSomeRowsSelected","isSomePageRowsSelected","withCellTableState","column","cell","Cell","field","getOrCreateCellComponentWithTableState","rowRender","row","rowProps","overrides","rowType","className","disabled","result","Object","keys","length","handleHeaderSelectionChange","ev","checked","syntheticEvent","currentTarget","selectPage","deselectPage","selectAll","deselectAll","handleSelectionChange","nativeEvent","shiftKey","rows","getRowsBetween","isAsc","idSelector","selection","selected","toBeSelected","reverse","selectedCount","push","setRowsSelection","toggleRowSelection","scrollToBottom","current","container","getElementsByClassName","scrollTop","scrollHeight","clientHeight","scroll","top","behavior","filterOperators","dataItemKey","rowIdKey","data","editField","onFilterChange","handleFilterChange","group","onGroupChange","handleGroupChange","onExpandChange","handleExpandChange","expandField","sort","onSortChange","handleSortChange","onHeaderSelectionChange","onSelectionChange","selectedField","pageable","skip","onPageChange","handlePageChange","total","filteredCount","enabled","mode","locked","id","width","filterable","resizable","reorderable","headerSelectionValue","isAllPageRowsSelected","isAllRowsSelected","headerCell","headerClassName","unselectable","undefined","CellWithTableState","tdProps","displayName","has","get","set","replace"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { FC } from 'react';
|
|
2
|
-
import { ResetPaginationMode } from '../../../';
|
|
1
|
+
import type { FC } from 'react';
|
|
2
|
+
import type { ResetPaginationMode } from '../../../';
|
|
3
3
|
export interface TableUseTableStateExampleProps {
|
|
4
4
|
resetPaginationMode: ResetPaginationMode;
|
|
5
5
|
}
|
package/dist/use-observing-table-state/demo/components/use-observing-table-state-demo.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-observing-table-state-demo.d.ts","sourceRoot":"","sources":["../../../../src/use-observing-table-state/demo/components/use-observing-table-state-demo.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"use-observing-table-state-demo.d.ts","sourceRoot":"","sources":["../../../../src/use-observing-table-state/demo/components/use-observing-table-state-demo.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAMhC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAKrD,MAAM,WAAW,8BAA8B;IAC3C,mBAAmB,EAAE,mBAAmB,CAAC;CAC5C;AACD,eAAO,MAAM,yBAAyB,EAAE,EAAE,CAAC,8BAA8B,CAqExE,CAAC"}
|
package/dist/use-observing-table-state/demo/components/use-observing-table-state-demo.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/use-observing-table-state/demo/components/use-observing-table-state-demo.tsx"],"sourcesContent":["import { FC
|
|
1
|
+
{"version":3,"sources":["../../../../src/use-observing-table-state/demo/components/use-observing-table-state-demo.tsx"],"sourcesContent":["import type { FC } from 'react';\nimport { Fragment } from 'react';\nimport { observer } from 'mobx-react';\nimport { provide, useDependencies } from '@servicetitan/react-ioc';\nimport { BodyText, Button, TableColumn } from '@servicetitan/design-system';\n\nimport type { ResetPaginationMode } from '../../../';\nimport { Table, useObservingTableState } from '../../../';\nimport { UseObservingTableStateDemoStore } from '../stores/use-observing-table-state-demo.store';\n//\n\nexport interface TableUseTableStateExampleProps {\n resetPaginationMode: ResetPaginationMode;\n}\nexport const TableUseTableStateExample: FC<TableUseTableStateExampleProps> = provide({\n singletons: [UseObservingTableStateDemoStore],\n})(\n observer(({ resetPaginationMode }) => {\n const [\n {\n data,\n updateDataKeepRoot,\n updateDataChangeRoot,\n add5RowsWithKeepDataRoot,\n remove5RowsWithKeepDataRoot,\n add5RowsWithUpdateDataRoot,\n remove5RowsWithUpdateDataRoot,\n },\n ] = useDependencies(UseObservingTableStateDemoStore);\n const tableState = useObservingTableState(\n data,\n { pageSize: 5 },\n { idSelector: p => p.ProductID },\n resetPaginationMode\n );\n\n return (\n <Fragment>\n <table className=\"m-b-2\" cellPadding={4}>\n <tr>\n <td>\n <BodyText>Keep data root:</BodyText>\n </td>\n <td>\n <Button onClick={updateDataKeepRoot}>Update prices</Button>\n </td>\n <td>\n <Button onClick={add5RowsWithKeepDataRoot}>Add 5 rows</Button>\n </td>\n <td>\n <Button onClick={remove5RowsWithKeepDataRoot}>Remove 5 rows</Button>\n </td>\n </tr>\n <tr>\n <td>\n <BodyText>Update data root:</BodyText>\n </td>\n <td>\n <Button onClick={updateDataChangeRoot}>Update prices</Button>\n </td>\n <td>\n <Button onClick={add5RowsWithUpdateDataRoot}>Add 5 rows</Button>\n </td>\n <td>\n <Button onClick={remove5RowsWithUpdateDataRoot}>Remove 5 rows</Button>\n </td>\n </tr>\n </table>\n <Table tableState={tableState} sortable groupable>\n <TableColumn field=\"ProductID\" title=\"ID\" width=\"100px\" />\n\n <TableColumn field=\"ProductName\" title=\"Product Name\" />\n\n <TableColumn\n field=\"UnitPrice\"\n title=\"Unit Price\"\n format=\"{0:c}\"\n width=\"125px\"\n />\n </Table>\n </Fragment>\n );\n })\n);\n"],"names":["Fragment","observer","provide","useDependencies","BodyText","Button","TableColumn","Table","useObservingTableState","UseObservingTableStateDemoStore","TableUseTableStateExample","singletons","resetPaginationMode","data","updateDataKeepRoot","updateDataChangeRoot","add5RowsWithKeepDataRoot","remove5RowsWithKeepDataRoot","add5RowsWithUpdateDataRoot","remove5RowsWithUpdateDataRoot","tableState","pageSize","idSelector","p","ProductID","table","className","cellPadding","tr","td","onClick","sortable","groupable","field","title","width","format"],"mappings":";AACA,SAASA,QAAQ,QAAQ,QAAQ;AACjC,SAASC,QAAQ,QAAQ,aAAa;AACtC,SAASC,OAAO,EAAEC,eAAe,QAAQ,0BAA0B;AACnE,SAASC,QAAQ,EAAEC,MAAM,EAAEC,WAAW,QAAQ,8BAA8B;AAG5E,SAASC,KAAK,EAAEC,sBAAsB,QAAQ,YAAY;AAC1D,SAASC,+BAA+B,QAAQ,iDAAiD;AAMjG,OAAO,MAAMC,4BAAgER,QAAQ;IACjFS,YAAY;QAACF;KAAgC;AACjD,GACIR,SAAS,CAAC,EAAEW,mBAAmB,EAAE;IAC7B,MAAM,CACF,EACIC,IAAI,EACJC,kBAAkB,EAClBC,oBAAoB,EACpBC,wBAAwB,EACxBC,2BAA2B,EAC3BC,0BAA0B,EAC1BC,6BAA6B,EAChC,CACJ,GAAGhB,gBAAgBM;IACpB,MAAMW,aAAaZ,uBACfK,MACA;QAAEQ,UAAU;IAAE,GACd;QAAEC,YAAYC,CAAAA,IAAKA,EAAEC,SAAS;IAAC,GAC/BZ;IAGJ,qBACI,MAACZ;;0BACG,MAACyB;gBAAMC,WAAU;gBAAQC,aAAa;;kCAClC,MAACC;;0CACG,KAACC;0CACG,cAAA,KAACzB;8CAAS;;;0CAEd,KAACyB;0CACG,cAAA,KAACxB;oCAAOyB,SAAShB;8CAAoB;;;0CAEzC,KAACe;0CACG,cAAA,KAACxB;oCAAOyB,SAASd;8CAA0B;;;0CAE/C,KAACa;0CACG,cAAA,KAACxB;oCAAOyB,SAASb;8CAA6B;;;;;kCAGtD,MAACW;;0CACG,KAACC;0CACG,cAAA,KAACzB;8CAAS;;;0CAEd,KAACyB;0CACG,cAAA,KAACxB;oCAAOyB,SAASf;8CAAsB;;;0CAE3C,KAACc;0CACG,cAAA,KAACxB;oCAAOyB,SAASZ;8CAA4B;;;0CAEjD,KAACW;0CACG,cAAA,KAACxB;oCAAOyB,SAASX;8CAA+B;;;;;;;0BAI5D,MAACZ;gBAAMa,YAAYA;gBAAYW,QAAQ;gBAACC,SAAS;;kCAC7C,KAAC1B;wBAAY2B,OAAM;wBAAYC,OAAM;wBAAKC,OAAM;;kCAEhD,KAAC7B;wBAAY2B,OAAM;wBAAcC,OAAM;;kCAEvC,KAAC5B;wBACG2B,OAAM;wBACNC,OAAM;wBACNE,QAAO;wBACPD,OAAM;;;;;;AAK1B,IACF"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { IdType, Preprocessors } from '@servicetitan/data-query';
|
|
2
|
-
import {
|
|
1
|
+
import type { IdType, Preprocessors } from '@servicetitan/data-query';
|
|
2
|
+
import type { TableStateConstructorParams } from '../table-state';
|
|
3
|
+
import { TableState } from '../table-state';
|
|
3
4
|
export declare enum ResetPaginationMode {
|
|
4
5
|
Never = 0,
|
|
5
6
|
OnUpdateDataRoot = 1,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-observing-table-state.d.ts","sourceRoot":"","sources":["../../src/use-observing-table-state/use-observing-table-state.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"use-observing-table-state.d.ts","sourceRoot":"","sources":["../../src/use-observing-table-state/use-observing-table-state.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAGtE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAG5C,oBAAY,mBAAmB;IAC3B,KAAK,IAAA;IACL,gBAAgB,IAAA;IAChB,MAAM,IAAA;CACT;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC,EAAE,GAAG,SAAS,MAAM,GAAG,GAAG;IAC1D,UAAU,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,CAAC;IAC5B,uBAAuB,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;CAC9C;AAED,eAAO,MAAM,sBAAsB,GAC/B,CAAC,EACD,GAAG,SAAS,MAAM,GAAG,GAAG,EACxB,CAAC,GAAG,KAAK,EACT,GAAG,SAAS,MAAM,GAAG,KAAK,EAE1B,MAAM,CAAC,EAAE,EACT,WAAW,2BAA2B,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,EACtD,mBAAmB,iBAAiB,CAAC,CAAC,EAAE,GAAG,CAAC,EAC5C,kBAAiB,mBAA0D,KAC5E,UAAU,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAuC3B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/use-observing-table-state/use-observing-table-state.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\nimport { autorun } from 'mobx';\n\nimport { IdType,
|
|
1
|
+
{"version":3,"sources":["../../src/use-observing-table-state/use-observing-table-state.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\nimport { autorun } from 'mobx';\n\nimport type { IdType, Preprocessors } from '@servicetitan/data-query';\nimport { InMemoryDataSource } from '@servicetitan/data-query';\nimport { useInitializedRef } from '@servicetitan/react-hooks';\nimport type { TableStateConstructorParams } from '../table-state';\nimport { TableState } from '../table-state';\n//\n\nexport enum ResetPaginationMode {\n Never,\n OnUpdateDataRoot,\n Always,\n}\n\nexport interface DatasourceOptions<T, TID extends IdType = any> {\n idSelector: (row: T) => TID;\n datasourcePreprocessors?: Preprocessors<T>;\n}\n\nexport const useObservingTableState = <\n T,\n TID extends IdType = any,\n P = never,\n PID extends IdType = never,\n>(\n data: T[],\n tableArgs: TableStateConstructorParams<T, TID, P, PID>,\n datasourceOptions: DatasourceOptions<T, TID>,\n resetPagination: ResetPaginationMode = ResetPaginationMode.OnUpdateDataRoot\n): TableState<T, TID, P, PID> => {\n const tableStateRef = useInitializedRef(() => new TableState<T, TID, P, PID>(tableArgs));\n const datasourceDataRef = useRef<T[]>();\n const tableStateDataRef = useRef<T[]>();\n const [dataSource, setDataSource] = useState<InMemoryDataSource<T, TID>>();\n\n useEffect(() => {\n const disposer = autorun(() => {\n setDataSource(\n new InMemoryDataSource(\n data,\n datasourceOptions.idSelector,\n datasourceOptions.datasourcePreprocessors\n )\n );\n datasourceDataRef.current = data;\n });\n return () => disposer();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [data]);\n\n useEffect(() => {\n if (dataSource) {\n if (\n tableStateRef.current.skip >= (datasourceDataRef.current?.length ?? 0) ||\n resetPagination === ResetPaginationMode.Always ||\n (resetPagination === ResetPaginationMode.OnUpdateDataRoot &&\n tableStateDataRef.current !== datasourceDataRef.current)\n ) {\n tableStateRef.current.setDataSource(dataSource);\n } else {\n const state = tableStateRef.current.exportState();\n tableStateRef.current.setDataSource(dataSource, { initialState: state });\n }\n tableStateDataRef.current = datasourceDataRef.current;\n }\n }, [dataSource, resetPagination, tableStateRef]);\n\n return tableStateRef.current;\n};\n"],"names":["useEffect","useRef","useState","autorun","InMemoryDataSource","useInitializedRef","TableState","ResetPaginationMode","useObservingTableState","data","tableArgs","datasourceOptions","resetPagination","tableStateRef","datasourceDataRef","tableStateDataRef","dataSource","setDataSource","disposer","idSelector","datasourcePreprocessors","current","skip","length","state","exportState","initialState"],"mappings":"AAAA,SAASA,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,QAAQ;AACpD,SAASC,OAAO,QAAQ,OAAO;AAG/B,SAASC,kBAAkB,QAAQ,2BAA2B;AAC9D,SAASC,iBAAiB,QAAQ,4BAA4B;AAE9D,SAASC,UAAU,QAAQ,iBAAiB;AAC5C,EAAE;AAEF,OAAO,IAAA,AAAKC,6CAAAA;;;;WAAAA;MAIX;AAOD,OAAO,MAAMC,yBAAyB,CAMlCC,MACAC,WACAC,mBACAC,mBAA2E;IAE3E,MAAMC,gBAAgBR,kBAAkB,IAAM,IAAIC,WAA2BI;IAC7E,MAAMI,oBAAoBb;IAC1B,MAAMc,oBAAoBd;IAC1B,MAAM,CAACe,YAAYC,cAAc,GAAGf;IAEpCF,UAAU;QACN,MAAMkB,WAAWf,QAAQ;YACrBc,cACI,IAAIb,mBACAK,MACAE,kBAAkBQ,UAAU,EAC5BR,kBAAkBS,uBAAuB;YAGjDN,kBAAkBO,OAAO,GAAGZ;QAChC;QACA,OAAO,IAAMS;IACb,uDAAuD;IAC3D,GAAG;QAACT;KAAK;IAETT,UAAU;QACN,IAAIgB,YAAY;;gBAEuBF;YADnC,IACID,cAAcQ,OAAO,CAACC,IAAI,cAAKR,6BAAAA,kBAAkBO,OAAO,cAAzBP,iDAAAA,2BAA2BS,MAAM,uCAAI,MACpEX,yBACCA,yBACGG,kBAAkBM,OAAO,KAAKP,kBAAkBO,OAAO,EAC7D;gBACER,cAAcQ,OAAO,CAACJ,aAAa,CAACD;YACxC,OAAO;gBACH,MAAMQ,QAAQX,cAAcQ,OAAO,CAACI,WAAW;gBAC/CZ,cAAcQ,OAAO,CAACJ,aAAa,CAACD,YAAY;oBAAEU,cAAcF;gBAAM;YAC1E;YACAT,kBAAkBM,OAAO,GAAGP,kBAAkBO,OAAO;QACzD;IACJ,GAAG;QAACL;QAAYJ;QAAiBC;KAAc;IAE/C,OAAOA,cAAcQ,OAAO;AAChC,EAAE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-observing-table-state.stories.d.ts","sourceRoot":"","sources":["../../src/use-observing-table-state/use-observing-table-state.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;;;;;
|
|
1
|
+
{"version":3,"file":"use-observing-table-state.stories.d.ts","sourceRoot":"","sources":["../../src/use-observing-table-state/use-observing-table-state.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;;;;;AAIhC,wBAGE;AAEF,eAAO,MAAM,+BAA+B,EAAE,EAE7C,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,EAElC,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,EAEnC,CAAC"}
|
package/dist/utils/filters.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { FilterDescriptor, State } from '@servicetitan/data-query';
|
|
1
|
+
import type { FilterDescriptor, State } from '@servicetitan/data-query';
|
|
2
2
|
export declare const getFiltersFlat: (filter: State["filter"]) => FilterDescriptor[];
|
|
3
3
|
export declare const getFiltersMap: (filter: State["filter"]) => Record<string, FilterDescriptor>;
|
|
4
4
|
//# sourceMappingURL=filters.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filters.d.ts","sourceRoot":"","sources":["../../src/utils/filters.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"filters.d.ts","sourceRoot":"","sources":["../../src/utils/filters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA6B,gBAAgB,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAiBnG,eAAO,MAAM,cAAc,GAAI,QAAQ,KAAK,CAAC,QAAQ,CAAC,KAAG,gBAAgB,EAExE,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,QAAQ,KAAK,CAAC,QAAQ,CAAC,KAAG,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAUtF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/filters.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"sources":["../../src/utils/filters.ts"],"sourcesContent":["import type { CompositeFilterDescriptor, FilterDescriptor, State } from '@servicetitan/data-query';\nimport { isCompositeFilterDescriptor } from '@servicetitan/data-query';\n\nconst getFiltersFlatInner = (\n filter?: FilterDescriptor | CompositeFilterDescriptor\n): FilterDescriptor[] => {\n if (!filter) {\n return [];\n } else if (isCompositeFilterDescriptor(filter)) {\n return filter.filters.reduce(\n (out, item) => [...out, ...getFiltersFlatInner(item)],\n [] as FilterDescriptor[]\n );\n }\n return [filter];\n};\n\nexport const getFiltersFlat = (filter: State['filter']): FilterDescriptor[] => {\n return getFiltersFlatInner(filter);\n};\n\nexport const getFiltersMap = (filter: State['filter']): Record<string, FilterDescriptor> => {\n return getFiltersFlatInner(filter).reduce(\n (out, filter) => {\n if (typeof filter.field === 'string') {\n out[filter.field] = filter;\n }\n return out;\n },\n {} as Record<string, FilterDescriptor>\n );\n};\n"],"names":["isCompositeFilterDescriptor","getFiltersFlatInner","filter","filters","reduce","out","item","getFiltersFlat","getFiltersMap","field"],"mappings":"AACA,SAASA,2BAA2B,QAAQ,2BAA2B;AAEvE,MAAMC,sBAAsB,CACxBC;IAEA,IAAI,CAACA,QAAQ;QACT,OAAO,EAAE;IACb,OAAO,IAAIF,4BAA4BE,SAAS;QAC5C,OAAOA,OAAOC,OAAO,CAACC,MAAM,CACxB,CAACC,KAAKC,OAAS;mBAAID;mBAAQJ,oBAAoBK;aAAM,EACrD,EAAE;IAEV;IACA,OAAO;QAACJ;KAAO;AACnB;AAEA,OAAO,MAAMK,iBAAiB,CAACL;IAC3B,OAAOD,oBAAoBC;AAC/B,EAAE;AAEF,OAAO,MAAMM,gBAAgB,CAACN;IAC1B,OAAOD,oBAAoBC,QAAQE,MAAM,CACrC,CAACC,KAAKH;QACF,IAAI,OAAOA,OAAOO,KAAK,KAAK,UAAU;YAClCJ,GAAG,CAACH,OAAOO,KAAK,CAAC,GAAGP;QACxB;QACA,OAAOG;IACX,GACA,CAAC;AAET,EAAE"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { TableCellProps } from '@servicetitan/design-system';
|
|
1
|
+
import type { TableCellProps } from '@servicetitan/design-system';
|
|
2
2
|
import { GRID_COL_INDEX_ATTRIBUTE } from '@progress/kendo-react-grid';
|
|
3
|
-
import { ComponentProps } from 'react';
|
|
3
|
+
import type { ComponentProps } from 'react';
|
|
4
4
|
declare const useTdProps: ({ id, colSpan, ariaColumnIndex, isSelected, columnIndex, }: TableCellProps) => ComponentProps<"td"> & {
|
|
5
5
|
[GRID_COL_INDEX_ATTRIBUTE]?: number;
|
|
6
6
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-td-props.d.ts","sourceRoot":"","sources":["../../src/utils/use-td-props.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"use-td-props.d.ts","sourceRoot":"","sources":["../../src/utils/use-td-props.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAElE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAE5C,QAAA,MAAM,UAAU,GAAI,4DAMjB,cAAc,KAAG,cAAc,CAAC,IAAI,CAAC,GAAG;IACvC,CAAC,wBAAwB,CAAC,CAAC,EAAE,MAAM,CAAC;CAWvC,CAAC;AAEF,OAAO,EAAE,UAAU,EAAE,CAAC"}
|