@economic/taco 2.49.0-server.2 → 2.49.0-server.3
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/esm/packages/taco/src/components/Table3/components/Editing/Alert.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/features/useTableEditing.js +5 -4
- package/dist/esm/packages/taco/src/components/Table3/features/useTableEditing.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Columns/Internal/Selection.js +2 -2
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Columns/Internal/Selection.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Footer/Summary.js +1 -2
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Footer/Summary.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Row/BuiltIns/SkeletonRow.js +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Row/BuiltIns/SkeletonRow.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Toolbar/components/Print/Print.js +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Toolbar/components/Print/Print.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Toolbar/components/Search/Search.js +2 -2
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Toolbar/components/Search/Search.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/features/useTableGlobalShortcuts.js +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/features/useTableGlobalShortcuts.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/types.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/useTableDataLoader.js +13 -10
- package/dist/esm/packages/taco/src/primitives/Table/useTableDataLoader.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/useTableDataLoader2.js +8 -8
- package/dist/esm/packages/taco/src/primitives/Table/useTableDataLoader2.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/listeners/useTableRowSelectionListener.js +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/listeners/useTableRowSelectionListener.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/listeners/useTableSearchListener.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/listeners/useTableServerLoadingListener.js +2 -2
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/listeners/useTableServerLoadingListener.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/util/setup.js +2 -1
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/util/setup.js.map +1 -1
- package/dist/primitives/Table/types.d.ts +2 -2
- package/dist/primitives/Table/useTableDataLoader.d.ts +2 -2
- package/dist/primitives/Table/useTableDataLoader2.d.ts +2 -2
- package/dist/taco.cjs.development.js +39 -35
- package/dist/taco.cjs.development.js.map +1 -1
- package/dist/taco.cjs.production.min.js +1 -1
- package/dist/taco.cjs.production.min.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sources":["../../../../../../../src/primitives/Table/types.ts"],"sourcesContent":["import {\n ColumnFilter as ReactTableColumnFilter,\n ColumnFiltersState as ReactTableColumnFilterState,\n ColumnOrderState as ReactTableColumnOrderState,\n ColumnPinningState as ReactTableColumnPinningState,\n ColumnSort as ReactTableColumnSort,\n ColumnSizingState as ReactTableColumnSizingState,\n VisibilityState as ReactTableColumnVisibilityState,\n SortingState as ReactTableSortingState,\n BuiltInAggregationFn as ReactTableBuiltInAggregationFn,\n BuiltInSortingFn as ReactTableBuiltInSortingFn,\n} from '@tanstack/react-table';\nimport { FontSize, FontSizes, StringWithAutocompleteOptions, ValueOf } from '../../types';\nimport { MenuItemProps } from '../../components/Menu/components/Item';\n\nexport type TableRef = HTMLTableElement & {\n instance: {\n resetFiltering: () => void;\n resetRowExpansion: () => void;\n resetRowSelection: () => void;\n resetSorting: () => void;\n };\n};\n\n// filtering\nexport enum TableFilterComparator {\n Contains,\n DoesNotContain,\n IsEqualTo,\n IsNotEqualTo,\n IsGreaterThan,\n IsLessThan,\n IsBetween,\n IsEmpty,\n IsNotEmpty,\n IsLessThanOrEqualTo,\n IsGreaterThanOrEqualTo,\n HasAnyOf,\n HasAllOf,\n HasNoneOf,\n}\nexport type TableFilterValue = {\n comparator: TableFilterComparator;\n value: any;\n};\nexport type TableFilter = {\n id: string;\n value: TableFilterValue;\n};\n\n// columns\nexport type TableColumnAlignment = 'left' | 'center' | 'right';\nexport type TableColumnClassNameHandler<TType = unknown> = string | ((row: TType) => string | undefined);\nexport type TableColumnDataType =\n // base\n | 'text'\n | 'number'\n | 'datetime'\n | 'boolean'\n // advanced\n | 'amount';\nexport type TableColumnFilter = ReactTableColumnFilter;\nexport type TableColumnMenu = ((columnId: string) => React.ReactNode | null)[];\nexport type TableColumnRenderer<TType, TValue> = (value: TValue, row: TType) => JSX.Element | string | number | null;\nexport type TableColumnRendererAggregate<TType, TValue> = (value: TValue, row: TType) => JSX.Element | string | number | null;\nexport type TableColumnRendererControl<TType = unknown> =\n | ((props: TableColumnRendererControlProps, row?: TType, filterState?: TableFilter[]) => JSX.Element)\n | 'datepicker'\n | 'input'\n | 'switch'\n | 'checkbox'\n | 'textarea';\nexport type TableColumnRendererControlProps = {\n className?: string;\n disabled?: boolean;\n fontSize?: FontSize;\n invalid?: boolean;\n onBlur?: (value: any) => void;\n onFocus?: React.FocusEventHandler;\n readOnly?: boolean;\n ref: React.RefObject<HTMLElement> | ((instance: HTMLElement | null | undefined) => void);\n setValue: (value: any) => void;\n value: any;\n};\nexport type TableColumnRendererHeader = string;\nexport type TableColumnRendererFooter<TType> = (rows: TType[]) => JSX.Element | string | number | null;\nexport type TableColumnSort = ReactTableColumnSort;\nexport type TableColumnSortDirection = 'asc' | 'desc';\nexport type TableColumnSortFn<TType = unknown> =\n | ((rowA: TType, rowB: TType, columnId: string) => -1 | 0 | 1)\n | ReactTableBuiltInSortingFn\n | 'auto';\nexport type TableColumnWidth = number | 'grow';\n\n// rows\nexport type TableRowActionRenderer<TType = unknown> = (row: TType, internalRowId: string) => JSX.Element | null;\nexport type TableRowActionGroupRenderer<TType = unknown> = (rows: TType[]) => JSX.Element | null;\nexport type TableRowClickHandler<TType = unknown> = (row: TType) => void;\nexport type TableRowDragHandler<TType = unknown> = (\n rows: TType[],\n showPlaceholder: (string) => void,\n setDataTransfer: (data: string) => void\n) => void;\nexport type TableRowDropHandler<TType = unknown> = (event: React.DragEvent, row: TType) => void;\nexport type TableRowGotoHandler = (\n column: string,\n query: string,\n sorting: TableColumnSort[],\n filters: TableColumnFilter[],\n search: string | undefined\n) => Promise<number>;\nexport type TableRowHeight = 'short' | 'medium' | 'tall' | 'extra-tall';\nexport type TableRowSelectHandler<TType = unknown> = (rows: TType[], ids: string[]) => void;\nexport type TableRowWithMetaData<TType = unknown> = TType & {\n _meta?: {\n layout?: 'heading' | 'summary' | 'item';\n };\n};\n\n// shortcuts\nexport type TableShortcutHandlerFn<TType = unknown> = (row: TType) => void;\nexport type TableShortcutHandlerObject<TType = unknown> = {\n handler: TableShortcutHandlerFn<TType>;\n meta?: boolean;\n shift?: boolean;\n};\n\n// table\nexport type TableSortHandler = (sorting: TableColumnSort[]) => Promise<void>;\nexport type TableFilterHandler = (filters: TableColumnFilter[], hiddenColumns: string[]) => Promise<void>;\nexport type TableSearchHandler = (search: string | undefined, hiddenColumns: string[]) => Promise<void>;\nexport type TableFontSize = keyof typeof FontSizes;\nexport type TablePreset = 'complex' | 'list' | 'simple';\nexport type TableRowExpansionRenderer<TType = unknown> = (row: TType) => (() => JSX.Element) | null;\nexport type TableScrollToIndexHandler = (index: number, options?: { align: 'start' | 'center' | 'end' | 'auto' }) => void;\nexport type TableServerLoadPageHandler = (\n pageIndex: number,\n sorting: TableColumnSort[],\n filters: TableColumnFilter[],\n search: string | undefined,\n hiddenColumns: string[]\n) => Promise<void>;\nexport type TableServerLoadAllHandler = (\n sorting: TableColumnSort[],\n filters: TableColumnFilter[],\n search: string | undefined,\n hiddenColumns: string[]\n) => Promise<void>;\nexport type TableSettingsHandler = (settings: TableSettings) => void | Promise<void>;\nexport type TableShortcuts<TType = unknown> = Record<string, TableShortcutHandlerFn<TType> | TableShortcutHandlerObject<TType>>;\nexport type TableCustomSettingsRenderer = (props: TableSettings) => React.ReactElement<MenuItemProps>[];\nexport type TableEmptyStateReason = 'empty' | 'filtering' | 'searching';\nexport type TableEmptyStateRenderer = (props: { reason: TableEmptyStateReason }) => JSX.Element | null;\n\n// settings\nexport type TableSettings = {\n columnFilters?: ReactTableColumnFilterState;\n columnOrder?: ReactTableColumnOrderState;\n columnPinning?: ReactTableColumnPinningState;\n columnSizing?: ReactTableColumnSizingState;\n columnVisibility?: ReactTableColumnVisibilityState;\n excludeUnmatchedRecordsInSearch?: boolean;\n fontSize?: TableFontSize;\n rowHeight?: TableRowHeight;\n searchQuery?: string;\n sorting?: ReactTableSortingState;\n};\nexport type TableEnableSettingsOptions = {\n columnOrder: boolean;\n columnPinning: boolean;\n columnSizing: boolean;\n columnVisibility: boolean;\n excludeUnmatchedRecordsInSearch: boolean;\n fontSize: boolean;\n grouping: boolean;\n rowHeight: boolean;\n sorting: boolean;\n};\n\n// props\nexport type TableConditionalRowProp<TType = unknown> = boolean | ((row: TType) => boolean);\nexport type TableFeatureProps<TType = unknown> = {\n // react-table built-in\n enableFiltering?: boolean;\n enableSearch?: boolean;\n enableSorting?: boolean;\n enableColumnFreezing?: boolean;\n enableColumnHiding?: boolean;\n enableColumnResizing?: boolean;\n enableRowExpansion?: boolean;\n enableRowExpansionAll?: boolean;\n enableRowSelection?: TableConditionalRowProp<TType>;\n\n // custom -- common between all table types\n enableColumnOrdering?: boolean;\n enableFontSize?: boolean;\n enableFooter?: boolean;\n enablePrinting?: boolean;\n enableRowActions?: boolean;\n enableRowActive?: boolean;\n enableRowClick?: TableConditionalRowProp<TType>;\n enableRowDrag?: boolean;\n enableRowDrop?: boolean;\n enableRowGoto?: boolean;\n enableRowHeight?: boolean;\n enableSaveSettings?: boolean | Partial<TableEnableSettingsOptions>;\n};\n\nexport type TableChild = JSX.Element | boolean | null | undefined;\n\nexport type TableCommonProps<TType = unknown> = TableFeatureProps<TType> & {\n children: TableChild | TableChild[];\n data: TType[];\n id: string;\n\n // misc\n customSettings?: TableCustomSettingsRenderer;\n defaultColumnFreezingIndex?: number;\n defaultRowActiveIndex?: number;\n defaultRowGroupColumnId?: keyof TType;\n defaultSettings?: TableSettings;\n emptyState?: TableEmptyStateRenderer;\n preset?: TablePreset;\n rowActions?: TableRowActionRenderer<TType>[];\n rowActionsForGroup?: TableRowActionGroupRenderer<TType>[];\n rowActionsLength?: number;\n rowExpansionRenderer?: TableRowExpansionRenderer<TType>;\n rowIdentityAccessor?: keyof TType;\n shortcuts?: TableShortcuts<TType>;\n toolbarLeft?: JSX.Element;\n toolbarRight?: JSX.Element;\n toolbarPanel?: JSX.Element;\n\n // handlers\n onRowClick?: TableRowClickHandler<TType>;\n onRowDrag?: TableRowDragHandler<TType>;\n onRowDrop?: TableRowDropHandler<TType>;\n onRowGoto?: TableRowGotoHandler;\n onRowSelect?: TableRowSelectHandler<TType>;\n\n // state change handlers\n onChangeFilter?: TableFilterHandler;\n onChangeSearch?: TableSearchHandler;\n onChangeSettings?: TableSettingsHandler;\n onChangeSort?: TableSortHandler;\n};\n\nexport interface TableClientProps<TType = unknown> extends TableCommonProps<TType> {\n length?: never;\n loadAll?: never;\n loadPage?: never;\n pageSize?: never;\n pages?: never;\n\n // experimental\n _experimentalDataLoader2?: never;\n}\n\nexport interface TableServerProps<TType = unknown> extends TableCommonProps<TType> {\n length: number | undefined;\n loadAll: TableServerLoadAllHandler;\n loadPage: TableServerLoadPageHandler;\n pageSize?: number;\n pages?: number[];\n\n // experimental\n _experimentalDataLoader2?: boolean;\n}\n\nexport type TableProps<TType = unknown> = TableClientProps<TType> | TableServerProps<TType>;\n\nexport type TableColumnProps<TType = unknown> = ValueOf<{\n [Key in keyof TType]: {\n accessor?: Key;\n id: StringWithAutocompleteOptions<Key>;\n // renderers\n renderer?: TableColumnRenderer<TType, TType[Key]>;\n /** Renderer to use if the cell is an aggregate cell and part of a grouped row */\n aggregate?: TableColumnRendererAggregate<TType, TType[Key]>;\n control?: TableColumnRendererControl<TType>;\n footer?: TableColumnRendererFooter<TType>;\n header: TableColumnRendererHeader;\n // options\n /** Aggregation function to be used when the column is part of a grouped row */\n aggregationFn?: 'auto' | ReactTableBuiltInAggregationFn;\n align?: TableColumnAlignment;\n className?: TableColumnClassNameHandler<TType>;\n dataType?: TableColumnDataType;\n defaultHidden?: boolean;\n defaultWidth?: TableColumnWidth;\n enableEditing?: boolean;\n enableFiltering?: boolean;\n enableGrouping?: boolean;\n enableHiding?: boolean;\n enableOrdering?: boolean;\n enablePrinting?: boolean;\n enableResizing?: boolean;\n enableSearch?: boolean;\n enableSorting?: boolean;\n enableTruncate?: boolean;\n filters?: TableFilterComparator[];\n headerClassName?: string;\n menu?: TableColumnMenu;\n minWidth?: number;\n sort?: TableColumnSortDirection;\n sortFn?: TableColumnSortFn<TType>;\n tooltip?: string;\n };\n}>;\n\nexport type TableGroupProps = {\n children: (JSX.Element | boolean | null | undefined)[];\n header: string;\n id: string;\n};\n\nexport type TableTexts = {\n columns: {\n actions: {\n tooltip: string;\n };\n drag: {\n tooltip: string;\n };\n expansion: {\n collapse: string;\n collapseAll: string;\n expand: string;\n expandAll: string;\n };\n menu: {\n editFilter: string;\n filter: string;\n freezeFirstColumn: string;\n freezeUptoColumn: string;\n gotoRow: string;\n hideColumn: string;\n unfreezeColumns: string;\n sorting: string;\n sortingOrder: {\n ascending: string;\n descending: string;\n unsorted: string;\n };\n };\n resize: {\n tooltip: string;\n };\n select: {\n deselect: string;\n deselectAll: string;\n select: string;\n selectAll: string;\n };\n };\n columnSettings: {\n button: string;\n noResults: string;\n search: string;\n tooltip: string;\n };\n filters: {\n button: string;\n buttons: {\n addFilter: string;\n clearFilters: string;\n cancel: string;\n clear: string;\n apply: string;\n };\n comparators: {\n contains: string;\n doesNotContain: string;\n isEqualTo: string;\n isNotEqualTo: string;\n isGreaterThan: string;\n isLessThan: string;\n isBetween: string;\n isEmpty: string;\n isNotEmpty: string;\n isBefore: string;\n isAfter: string;\n isLessThanOrEqualTo: string;\n isGreaterThanOrEqualTo: string;\n isOnOrBefore: string;\n isOnOrAfter: string;\n hasAnyOf: string;\n hasAllOf: string;\n hasNoneOf: string;\n };\n conditions: {\n and: string;\n where: string;\n };\n emptyFilter: {\n condition: string;\n value: string;\n };\n hiddenColumn: string;\n hiddenGroupedColumn: string;\n tooltip: string;\n total: string;\n };\n fontSize: {\n tooltip: string;\n sizes: {\n small: string;\n medium: string;\n large: string;\n };\n };\n footer: {\n summary: {\n count: string;\n records: string;\n selected: string;\n };\n };\n print: {\n error: string;\n loading: string;\n tooltip: string;\n warningDialog: {\n title: string;\n description: string;\n checkboxVisibilityLabel: string;\n cancelButtonText: string;\n printButtonText: string;\n };\n settingsDialog: {\n title: string;\n size: string;\n sizeA5: string;\n sizeA4: string;\n sizeA3: string;\n sizeLetter: string;\n sizeLegal: string;\n orientation: string;\n orientationLandscape: string;\n orientationPortrait: string;\n rows: string;\n rowsAll: string;\n rowsSelected: string;\n layout: string;\n layoutSplitGroups: string;\n };\n };\n rowHeight: {\n tooltip: string;\n sizes: {\n short: string;\n medium: string;\n tall: string;\n extraTall: string;\n };\n };\n search: {\n excludeUnmatchedResults: string;\n placeholder: string;\n };\n otherOptions: {\n tooltip: string;\n };\n};\n"],"names":["TableFilterComparator"],"mappings":"AAwBA;IACYA;AAAZ,WAAYA,qBAAqB;EAC7BA,yEAAQ;EACRA,qFAAc;EACdA,2EAAS;EACTA,iFAAY;EACZA,mFAAa;EACbA,6EAAU;EACVA,2EAAS;EACTA,uEAAO;EACPA,6EAAU;EACVA,+FAAmB;EACnBA,sGAAsB;EACtBA,0EAAQ;EACRA,0EAAQ;EACRA,4EAAS;AACb,CAAC,EAfWA,qBAAqB,KAArBA,qBAAqB;;;;"}
|
|
1
|
+
{"version":3,"file":"types.js","sources":["../../../../../../../src/primitives/Table/types.ts"],"sourcesContent":["import {\n ColumnFilter as ReactTableColumnFilter,\n ColumnFiltersState as ReactTableColumnFilterState,\n ColumnOrderState as ReactTableColumnOrderState,\n ColumnPinningState as ReactTableColumnPinningState,\n ColumnSort as ReactTableColumnSort,\n ColumnSizingState as ReactTableColumnSizingState,\n VisibilityState as ReactTableColumnVisibilityState,\n SortingState as ReactTableSortingState,\n BuiltInAggregationFn as ReactTableBuiltInAggregationFn,\n BuiltInSortingFn as ReactTableBuiltInSortingFn,\n} from '@tanstack/react-table';\nimport { FontSize, FontSizes, StringWithAutocompleteOptions, ValueOf } from '../../types';\nimport { MenuItemProps } from '../../components/Menu/components/Item';\n\nexport type TableRef = HTMLTableElement & {\n instance: {\n resetFiltering: () => void;\n resetRowExpansion: () => void;\n resetRowSelection: () => void;\n resetSorting: () => void;\n };\n};\n\n// filtering\nexport enum TableFilterComparator {\n Contains,\n DoesNotContain,\n IsEqualTo,\n IsNotEqualTo,\n IsGreaterThan,\n IsLessThan,\n IsBetween,\n IsEmpty,\n IsNotEmpty,\n IsLessThanOrEqualTo,\n IsGreaterThanOrEqualTo,\n HasAnyOf,\n HasAllOf,\n HasNoneOf,\n}\nexport type TableFilterValue = {\n comparator: TableFilterComparator;\n value: any;\n};\nexport type TableFilter = {\n id: string;\n value: TableFilterValue;\n};\n\n// columns\nexport type TableColumnAlignment = 'left' | 'center' | 'right';\nexport type TableColumnClassNameHandler<TType = unknown> = string | ((row: TType) => string | undefined);\nexport type TableColumnDataType =\n // base\n | 'text'\n | 'number'\n | 'datetime'\n | 'boolean'\n // advanced\n | 'amount';\nexport type TableColumnFilter = ReactTableColumnFilter;\nexport type TableColumnMenu = ((columnId: string) => React.ReactNode | null)[];\nexport type TableColumnRenderer<TType, TValue> = (value: TValue, row: TType) => JSX.Element | string | number | null;\nexport type TableColumnRendererAggregate<TType, TValue> = (value: TValue, row: TType) => JSX.Element | string | number | null;\nexport type TableColumnRendererControl<TType = unknown> =\n | ((props: TableColumnRendererControlProps, row?: TType, filterState?: TableFilter[]) => JSX.Element)\n | 'datepicker'\n | 'input'\n | 'switch'\n | 'checkbox'\n | 'textarea';\nexport type TableColumnRendererControlProps = {\n className?: string;\n disabled?: boolean;\n fontSize?: FontSize;\n invalid?: boolean;\n onBlur?: (value: any) => void;\n onFocus?: React.FocusEventHandler;\n readOnly?: boolean;\n ref: React.RefObject<HTMLElement> | ((instance: HTMLElement | null | undefined) => void);\n setValue: (value: any) => void;\n value: any;\n};\nexport type TableColumnRendererHeader = string;\nexport type TableColumnRendererFooter<TType> = (rows: TType[]) => JSX.Element | string | number | null;\nexport type TableColumnSort = ReactTableColumnSort;\nexport type TableColumnSortDirection = 'asc' | 'desc';\nexport type TableColumnSortFn<TType = unknown> =\n | ((rowA: TType, rowB: TType, columnId: string) => -1 | 0 | 1)\n | ReactTableBuiltInSortingFn\n | 'auto';\nexport type TableColumnWidth = number | 'grow';\n\n// rows\nexport type TableRowActionRenderer<TType = unknown> = (row: TType, internalRowId: string) => JSX.Element | null;\nexport type TableRowActionGroupRenderer<TType = unknown> = (rows: TType[]) => JSX.Element | null;\nexport type TableRowClickHandler<TType = unknown> = (row: TType) => void;\nexport type TableRowDragHandler<TType = unknown> = (\n rows: TType[],\n showPlaceholder: (string) => void,\n setDataTransfer: (data: string) => void\n) => void;\nexport type TableRowDropHandler<TType = unknown> = (event: React.DragEvent, row: TType) => void;\nexport type TableRowGotoHandler = (\n column: string,\n query: string,\n sorting: TableColumnSort[],\n filters: TableColumnFilter[],\n search: string | undefined\n) => Promise<number>;\nexport type TableRowHeight = 'short' | 'medium' | 'tall' | 'extra-tall';\nexport type TableRowSelectHandler<TType = unknown> = (rows: TType[], ids: string[]) => void;\nexport type TableRowWithMetaData<TType = unknown> = TType & {\n _meta?: {\n layout?: 'heading' | 'summary' | 'item';\n };\n};\n\n// shortcuts\nexport type TableShortcutHandlerFn<TType = unknown> = (row: TType) => void;\nexport type TableShortcutHandlerObject<TType = unknown> = {\n handler: TableShortcutHandlerFn<TType>;\n meta?: boolean;\n shift?: boolean;\n};\n\n// table\nexport type TableSortHandler = (sorting: TableColumnSort[]) => Promise<void>;\nexport type TableFilterHandler = (filters: TableColumnFilter[], hiddenColumns: string[]) => Promise<void>;\nexport type TableSearchHandler = (search: string | undefined, hiddenColumns: string[]) => Promise<void>;\nexport type TableFontSize = keyof typeof FontSizes;\nexport type TablePreset = 'complex' | 'list' | 'simple';\nexport type TableRowExpansionRenderer<TType = unknown> = (row: TType) => (() => JSX.Element) | null;\nexport type TableScrollToIndexHandler = (index: number, options?: { align: 'start' | 'center' | 'end' | 'auto' }) => void;\nexport type TableServerLoadPageHandler = (\n pageIndex: number,\n sorting: TableColumnSort[],\n filters: TableColumnFilter[],\n hiddenColumns: string[],\n search: string | undefined\n) => Promise<void>;\nexport type TableServerLoadAllHandler = (\n sorting: TableColumnSort[],\n filters: TableColumnFilter[],\n hiddenColumns: string[],\n search: string | undefined\n) => Promise<void>;\nexport type TableSettingsHandler = (settings: TableSettings) => void | Promise<void>;\nexport type TableShortcuts<TType = unknown> = Record<string, TableShortcutHandlerFn<TType> | TableShortcutHandlerObject<TType>>;\nexport type TableCustomSettingsRenderer = (props: TableSettings) => React.ReactElement<MenuItemProps>[];\nexport type TableEmptyStateReason = 'empty' | 'filtering' | 'searching';\nexport type TableEmptyStateRenderer = (props: { reason: TableEmptyStateReason }) => JSX.Element | null;\n\n// settings\nexport type TableSettings = {\n columnFilters?: ReactTableColumnFilterState;\n columnOrder?: ReactTableColumnOrderState;\n columnPinning?: ReactTableColumnPinningState;\n columnSizing?: ReactTableColumnSizingState;\n columnVisibility?: ReactTableColumnVisibilityState;\n excludeUnmatchedRecordsInSearch?: boolean;\n fontSize?: TableFontSize;\n rowHeight?: TableRowHeight;\n searchQuery?: string;\n sorting?: ReactTableSortingState;\n};\nexport type TableEnableSettingsOptions = {\n columnOrder: boolean;\n columnPinning: boolean;\n columnSizing: boolean;\n columnVisibility: boolean;\n excludeUnmatchedRecordsInSearch: boolean;\n fontSize: boolean;\n grouping: boolean;\n rowHeight: boolean;\n sorting: boolean;\n};\n\n// props\nexport type TableConditionalRowProp<TType = unknown> = boolean | ((row: TType) => boolean);\nexport type TableFeatureProps<TType = unknown> = {\n // react-table built-in\n enableFiltering?: boolean;\n enableSearch?: boolean;\n enableSorting?: boolean;\n enableColumnFreezing?: boolean;\n enableColumnHiding?: boolean;\n enableColumnResizing?: boolean;\n enableRowExpansion?: boolean;\n enableRowExpansionAll?: boolean;\n enableRowSelection?: TableConditionalRowProp<TType>;\n\n // custom -- common between all table types\n enableColumnOrdering?: boolean;\n enableFontSize?: boolean;\n enableFooter?: boolean;\n enablePrinting?: boolean;\n enableRowActions?: boolean;\n enableRowActive?: boolean;\n enableRowClick?: TableConditionalRowProp<TType>;\n enableRowDrag?: boolean;\n enableRowDrop?: boolean;\n enableRowGoto?: boolean;\n enableRowHeight?: boolean;\n enableSaveSettings?: boolean | Partial<TableEnableSettingsOptions>;\n};\n\nexport type TableChild = JSX.Element | boolean | null | undefined;\n\nexport type TableCommonProps<TType = unknown> = TableFeatureProps<TType> & {\n children: TableChild | TableChild[];\n data: TType[];\n id: string;\n\n // misc\n customSettings?: TableCustomSettingsRenderer;\n defaultColumnFreezingIndex?: number;\n defaultRowActiveIndex?: number;\n defaultRowGroupColumnId?: keyof TType;\n defaultSettings?: TableSettings;\n emptyState?: TableEmptyStateRenderer;\n preset?: TablePreset;\n rowActions?: TableRowActionRenderer<TType>[];\n rowActionsForGroup?: TableRowActionGroupRenderer<TType>[];\n rowActionsLength?: number;\n rowExpansionRenderer?: TableRowExpansionRenderer<TType>;\n rowIdentityAccessor?: keyof TType;\n shortcuts?: TableShortcuts<TType>;\n toolbarLeft?: JSX.Element;\n toolbarRight?: JSX.Element;\n toolbarPanel?: JSX.Element;\n\n // handlers\n onRowClick?: TableRowClickHandler<TType>;\n onRowDrag?: TableRowDragHandler<TType>;\n onRowDrop?: TableRowDropHandler<TType>;\n onRowGoto?: TableRowGotoHandler;\n onRowSelect?: TableRowSelectHandler<TType>;\n\n // state change handlers\n onChangeFilter?: TableFilterHandler;\n onChangeSearch?: TableSearchHandler;\n onChangeSettings?: TableSettingsHandler;\n onChangeSort?: TableSortHandler;\n};\n\nexport interface TableClientProps<TType = unknown> extends TableCommonProps<TType> {\n length?: never;\n loadAll?: never;\n loadPage?: never;\n pageSize?: never;\n pages?: never;\n\n // experimental\n _experimentalDataLoader2?: never;\n}\n\nexport interface TableServerProps<TType = unknown> extends TableCommonProps<TType> {\n length: number | undefined;\n loadAll: TableServerLoadAllHandler;\n loadPage: TableServerLoadPageHandler;\n pageSize?: number;\n pages?: number[];\n\n // experimental\n _experimentalDataLoader2?: boolean;\n}\n\nexport type TableProps<TType = unknown> = TableClientProps<TType> | TableServerProps<TType>;\n\nexport type TableColumnProps<TType = unknown> = ValueOf<{\n [Key in keyof TType]: {\n accessor?: Key;\n id: StringWithAutocompleteOptions<Key>;\n // renderers\n renderer?: TableColumnRenderer<TType, TType[Key]>;\n /** Renderer to use if the cell is an aggregate cell and part of a grouped row */\n aggregate?: TableColumnRendererAggregate<TType, TType[Key]>;\n control?: TableColumnRendererControl<TType>;\n footer?: TableColumnRendererFooter<TType>;\n header: TableColumnRendererHeader;\n // options\n /** Aggregation function to be used when the column is part of a grouped row */\n aggregationFn?: 'auto' | ReactTableBuiltInAggregationFn;\n align?: TableColumnAlignment;\n className?: TableColumnClassNameHandler<TType>;\n dataType?: TableColumnDataType;\n defaultHidden?: boolean;\n defaultWidth?: TableColumnWidth;\n enableEditing?: boolean;\n enableFiltering?: boolean;\n enableGrouping?: boolean;\n enableHiding?: boolean;\n enableOrdering?: boolean;\n enablePrinting?: boolean;\n enableResizing?: boolean;\n enableSearch?: boolean;\n enableSorting?: boolean;\n enableTruncate?: boolean;\n filters?: TableFilterComparator[];\n headerClassName?: string;\n menu?: TableColumnMenu;\n minWidth?: number;\n sort?: TableColumnSortDirection;\n sortFn?: TableColumnSortFn<TType>;\n tooltip?: string;\n };\n}>;\n\nexport type TableGroupProps = {\n children: (JSX.Element | boolean | null | undefined)[];\n header: string;\n id: string;\n};\n\nexport type TableTexts = {\n columns: {\n actions: {\n tooltip: string;\n };\n drag: {\n tooltip: string;\n };\n expansion: {\n collapse: string;\n collapseAll: string;\n expand: string;\n expandAll: string;\n };\n menu: {\n editFilter: string;\n filter: string;\n freezeFirstColumn: string;\n freezeUptoColumn: string;\n gotoRow: string;\n hideColumn: string;\n unfreezeColumns: string;\n sorting: string;\n sortingOrder: {\n ascending: string;\n descending: string;\n unsorted: string;\n };\n };\n resize: {\n tooltip: string;\n };\n select: {\n deselect: string;\n deselectAll: string;\n select: string;\n selectAll: string;\n };\n };\n columnSettings: {\n button: string;\n noResults: string;\n search: string;\n tooltip: string;\n };\n filters: {\n button: string;\n buttons: {\n addFilter: string;\n clearFilters: string;\n cancel: string;\n clear: string;\n apply: string;\n };\n comparators: {\n contains: string;\n doesNotContain: string;\n isEqualTo: string;\n isNotEqualTo: string;\n isGreaterThan: string;\n isLessThan: string;\n isBetween: string;\n isEmpty: string;\n isNotEmpty: string;\n isBefore: string;\n isAfter: string;\n isLessThanOrEqualTo: string;\n isGreaterThanOrEqualTo: string;\n isOnOrBefore: string;\n isOnOrAfter: string;\n hasAnyOf: string;\n hasAllOf: string;\n hasNoneOf: string;\n };\n conditions: {\n and: string;\n where: string;\n };\n emptyFilter: {\n condition: string;\n value: string;\n };\n hiddenColumn: string;\n hiddenGroupedColumn: string;\n tooltip: string;\n total: string;\n };\n fontSize: {\n tooltip: string;\n sizes: {\n small: string;\n medium: string;\n large: string;\n };\n };\n footer: {\n summary: {\n count: string;\n records: string;\n selected: string;\n };\n };\n print: {\n error: string;\n loading: string;\n tooltip: string;\n warningDialog: {\n title: string;\n description: string;\n checkboxVisibilityLabel: string;\n cancelButtonText: string;\n printButtonText: string;\n };\n settingsDialog: {\n title: string;\n size: string;\n sizeA5: string;\n sizeA4: string;\n sizeA3: string;\n sizeLetter: string;\n sizeLegal: string;\n orientation: string;\n orientationLandscape: string;\n orientationPortrait: string;\n rows: string;\n rowsAll: string;\n rowsSelected: string;\n layout: string;\n layoutSplitGroups: string;\n };\n };\n rowHeight: {\n tooltip: string;\n sizes: {\n short: string;\n medium: string;\n tall: string;\n extraTall: string;\n };\n };\n search: {\n excludeUnmatchedResults: string;\n placeholder: string;\n };\n otherOptions: {\n tooltip: string;\n };\n};\n"],"names":["TableFilterComparator"],"mappings":"AAwBA;IACYA;AAAZ,WAAYA,qBAAqB;EAC7BA,yEAAQ;EACRA,qFAAc;EACdA,2EAAS;EACTA,iFAAY;EACZA,mFAAa;EACbA,6EAAU;EACVA,2EAAS;EACTA,uEAAO;EACPA,6EAAU;EACVA,+FAAmB;EACnBA,sGAAsB;EACtBA,0EAAQ;EACRA,0EAAQ;EACRA,4EAAS;AACb,CAAC,EAfWA,qBAAqB,KAArBA,qBAAqB;;;;"}
|
|
@@ -21,9 +21,10 @@ function useTableDataLoader(fetchPage, fetchAll, options) {
|
|
|
21
21
|
var _lastUsedSorting = React__default.useRef([]);
|
|
22
22
|
var _lastUsedFilters = React__default.useRef([]);
|
|
23
23
|
var _lastUsedSearch = React__default.useRef();
|
|
24
|
+
var _lastUsedHiddenColumns = React__default.useRef([]);
|
|
24
25
|
var _lastUsedPageIndex = React__default.useRef();
|
|
25
26
|
var _forceReset = React__default.useRef(false);
|
|
26
|
-
var loadPage = function loadPage(pageIndex, sorting, filters) {
|
|
27
|
+
var loadPage = function loadPage(pageIndex, sorting, filters, hiddenColumns) {
|
|
27
28
|
try {
|
|
28
29
|
var reset = false;
|
|
29
30
|
// sorting or filters changed, reset everything
|
|
@@ -45,9 +46,10 @@ function useTableDataLoader(fetchPage, fetchAll, options) {
|
|
|
45
46
|
_lastUsedSorting.current = sorting;
|
|
46
47
|
// set the filters so we can track if it changed between loads
|
|
47
48
|
_lastUsedFilters.current = filters;
|
|
49
|
+
_lastUsedHiddenColumns.current = hiddenColumns;
|
|
48
50
|
var _temp = _finallyRethrows(function () {
|
|
49
51
|
return _catch(function () {
|
|
50
|
-
return Promise.resolve(fetchPage(pageIndex, pageSize, sorting, filters)).then(function (response) {
|
|
52
|
+
return Promise.resolve(fetchPage(pageIndex, pageSize, sorting, filters, hiddenColumns)).then(function (response) {
|
|
51
53
|
// update state, here we do some "magic" to support "load in place"
|
|
52
54
|
setData(function (currentData) {
|
|
53
55
|
var _nextData;
|
|
@@ -77,14 +79,15 @@ function useTableDataLoader(fetchPage, fetchAll, options) {
|
|
|
77
79
|
return Promise.reject(e);
|
|
78
80
|
}
|
|
79
81
|
};
|
|
80
|
-
var loadAll = function loadAll(sorting, filters) {
|
|
82
|
+
var loadAll = function loadAll(sorting, filters, hiddenColumns) {
|
|
81
83
|
try {
|
|
82
84
|
// set the sorting so we can track if it changed between loads
|
|
83
85
|
_lastUsedSorting.current = sorting;
|
|
84
86
|
// set the filters so we can track if it changed between loads
|
|
85
87
|
_lastUsedFilters.current = filters;
|
|
88
|
+
_lastUsedHiddenColumns.current = hiddenColumns;
|
|
86
89
|
var _temp2 = _catch(function () {
|
|
87
|
-
return Promise.resolve(fetchAll(sorting, filters)).then(function (response) {
|
|
90
|
+
return Promise.resolve(fetchAll(sorting, filters, hiddenColumns)).then(function (response) {
|
|
88
91
|
length.current = response.length;
|
|
89
92
|
setData(function () {
|
|
90
93
|
var nextData;
|
|
@@ -110,11 +113,11 @@ function useTableDataLoader(fetchPage, fetchAll, options) {
|
|
|
110
113
|
_forceReset.current = true;
|
|
111
114
|
if (_lastUsedSearch.current) {
|
|
112
115
|
// we're searching, which means we need to refetch all with the correct sorting applied
|
|
113
|
-
return loadAll(_lastUsedSorting.current, _lastUsedFilters.current);
|
|
116
|
+
return loadAll(_lastUsedSorting.current, _lastUsedFilters.current, _lastUsedHiddenColumns.current);
|
|
114
117
|
} else {
|
|
115
118
|
var _lastUsedPageIndex$cu;
|
|
116
119
|
// load the last page that we scrolled to
|
|
117
|
-
return loadPage((_lastUsedPageIndex$cu = _lastUsedPageIndex.current) !== null && _lastUsedPageIndex$cu !== void 0 ? _lastUsedPageIndex$cu : 0, _lastUsedSorting.current, _lastUsedFilters.current);
|
|
120
|
+
return loadPage((_lastUsedPageIndex$cu = _lastUsedPageIndex.current) !== null && _lastUsedPageIndex$cu !== void 0 ? _lastUsedPageIndex$cu : 0, _lastUsedSorting.current, _lastUsedFilters.current, _lastUsedHiddenColumns.current);
|
|
118
121
|
}
|
|
119
122
|
} catch (e) {
|
|
120
123
|
return Promise.reject(e);
|
|
@@ -126,11 +129,11 @@ function useTableDataLoader(fetchPage, fetchAll, options) {
|
|
|
126
129
|
try {
|
|
127
130
|
if (_lastUsedSearch.current) {
|
|
128
131
|
// we're searching, which means we need to refetch all with the correct sorting applied
|
|
129
|
-
return loadAll(sorting, _lastUsedFilters.current);
|
|
132
|
+
return loadAll(sorting, _lastUsedFilters.current, _lastUsedHiddenColumns.current);
|
|
130
133
|
} else {
|
|
131
134
|
var _lastUsedPageIndex$cu2;
|
|
132
135
|
// load the last page that we scrolled to
|
|
133
|
-
return loadPage((_lastUsedPageIndex$cu2 = _lastUsedPageIndex.current) !== null && _lastUsedPageIndex$cu2 !== void 0 ? _lastUsedPageIndex$cu2 : 0, sorting, _lastUsedFilters.current);
|
|
136
|
+
return loadPage((_lastUsedPageIndex$cu2 = _lastUsedPageIndex.current) !== null && _lastUsedPageIndex$cu2 !== void 0 ? _lastUsedPageIndex$cu2 : 0, sorting, _lastUsedFilters.current, _lastUsedHiddenColumns.current);
|
|
134
137
|
}
|
|
135
138
|
} catch (e) {
|
|
136
139
|
return Promise.reject(e);
|
|
@@ -140,11 +143,11 @@ function useTableDataLoader(fetchPage, fetchAll, options) {
|
|
|
140
143
|
try {
|
|
141
144
|
if (_lastUsedSearch.current) {
|
|
142
145
|
// we're searching, which means we need to refetch all with the correct sorting applied
|
|
143
|
-
return loadAll(_lastUsedSorting.current, filters);
|
|
146
|
+
return loadAll(_lastUsedSorting.current, filters, _lastUsedHiddenColumns.current);
|
|
144
147
|
} else {
|
|
145
148
|
var _lastUsedPageIndex$cu3;
|
|
146
149
|
// load the last page that we scrolled to
|
|
147
|
-
return loadPage((_lastUsedPageIndex$cu3 = _lastUsedPageIndex.current) !== null && _lastUsedPageIndex$cu3 !== void 0 ? _lastUsedPageIndex$cu3 : 0, _lastUsedSorting.current, filters);
|
|
150
|
+
return loadPage((_lastUsedPageIndex$cu3 = _lastUsedPageIndex.current) !== null && _lastUsedPageIndex$cu3 !== void 0 ? _lastUsedPageIndex$cu3 : 0, _lastUsedSorting.current, filters, _lastUsedHiddenColumns.current);
|
|
148
151
|
}
|
|
149
152
|
} catch (e) {
|
|
150
153
|
return Promise.reject(e);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTableDataLoader.js","sources":["../../../../../../../src/primitives/Table/useTableDataLoader.ts"],"sourcesContent":["import React from 'react';\nimport {\n TableColumnFilter,\n TableColumnSort,\n TableFilterHandler,\n TableServerLoadPageHandler,\n TableServerLoadAllHandler,\n TableSortHandler,\n TableSearchHandler,\n} from './types';\n\nexport const DEFAULT_PAGE_SIZE = 100;\n\nexport type useTableDataPageFetcher<TType = unknown> = (\n pageIndex: number,\n pageSize: number,\n sorting: TableColumnSort[],\n filters: TableColumnFilter[]\n) => Promise<{ data: TType[]; length: number }>;\n\nexport type useTableDataAllFetcher<TType = unknown> = (\n sorting: TableColumnSort[],\n filters: TableColumnFilter[]\n) => Promise<{ data: TType[]; length: number }>;\n\nexport type useTableDataLoaderOptions = { pageSize: number };\n\nexport type useTableDataLoaderValues<TType = unknown> = {\n data: TType[];\n length: number | undefined;\n loadAll: TableServerLoadAllHandler;\n loadPage: TableServerLoadPageHandler;\n onChangeFilter: TableFilterHandler;\n onChangeSearch: TableSearchHandler;\n onChangeSort: TableSortHandler;\n pageSize: number;\n};\n\nexport function useTableDataLoader<TType = unknown>(\n fetchPage: useTableDataPageFetcher<TType>,\n fetchAll: useTableDataAllFetcher<TType>,\n options: useTableDataLoaderOptions = { pageSize: DEFAULT_PAGE_SIZE }\n): [useTableDataLoaderValues<TType>, () => void] {\n const { pageSize } = options;\n\n // track the data length, we don't know it until the first request\n const length = React.useRef<number | undefined>(undefined);\n // data will be filled after the first request, then we'll update values in place\n const [data, setData] = React.useState<TType[]>([]);\n // track which pages have been loaded to dedupe requests\n const _pendingPageRequests = React.useRef({});\n const _lastUsedSorting = React.useRef<TableColumnSort[]>([]);\n const _lastUsedFilters = React.useRef<TableColumnFilter[]>([]);\n const _lastUsedSearch = React.useRef<string>();\n const _lastUsedPageIndex = React.useRef<number>();\n const _forceReset = React.useRef(false);\n\n const loadPage = async (pageIndex: number, sorting: TableColumnSort[], filters: TableColumnFilter[]) => {\n let reset = false;\n\n // sorting or filters changed, reset everything\n if (\n _forceReset.current ||\n JSON.stringify(sorting) !== JSON.stringify(_lastUsedSorting.current) ||\n JSON.stringify(filters) !== JSON.stringify(_lastUsedFilters.current)\n ) {\n _pendingPageRequests.current = {};\n // nuke the dataset so that we \"start again\" after sorting\n reset = true;\n }\n\n if (_pendingPageRequests.current[pageIndex]) {\n // if page is already loaded/loading, abort, otherwise mark it as loading\n return;\n } else {\n _pendingPageRequests.current[pageIndex] = true;\n }\n\n _forceReset.current = false;\n // set the last page loaded (or tried to load), so that we can load it back again after resets\n _lastUsedPageIndex.current = pageIndex;\n // set the sorting so we can track if it changed between loads\n _lastUsedSorting.current = sorting;\n // set the filters so we can track if it changed between loads\n _lastUsedFilters.current = filters;\n\n try {\n const response = await fetchPage(pageIndex, pageSize, sorting, filters);\n\n // update state, here we do some \"magic\" to support \"load in place\"\n setData(currentData => {\n let nextData;\n\n // reset table state if:\n // - the length isn't set at all (first load)\n // - the client length and server length are different (the data changed)\n if (reset || length.current !== response.length) {\n length.current = response.length;\n nextData = Array(length.current).fill(undefined);\n } else {\n nextData = ([] as TType[]).concat(currentData);\n }\n\n const startIndex = pageIndex * pageSize;\n nextData.splice(startIndex, pageSize, ...response.data);\n return nextData;\n });\n } catch {\n //\n } finally {\n _pendingPageRequests.current[pageIndex] = false;\n }\n };\n\n const loadAll = async (sorting: TableColumnSort[], filters: TableColumnFilter[]) => {\n // set the sorting so we can track if it changed between loads\n _lastUsedSorting.current = sorting;\n // set the filters so we can track if it changed between loads\n _lastUsedFilters.current = filters;\n\n try {\n const response = await fetchAll(sorting, filters);\n length.current = response.length;\n\n setData(() => {\n let nextData;\n\n if (response.data.length !== response.length) {\n nextData = Array(response.length).fill(undefined);\n nextData.splice(0, response.data.length, ...response.data);\n } else {\n nextData = [...response.data];\n }\n\n return nextData;\n });\n } catch {\n //\n }\n };\n\n const invalidate = async () => {\n // empties the entire data array\n _forceReset.current = true;\n\n if (_lastUsedSearch.current) {\n // we're searching, which means we need to refetch all with the correct sorting applied\n return loadAll(_lastUsedSorting.current, _lastUsedFilters.current);\n } else {\n // load the last page that we scrolled to\n return loadPage(_lastUsedPageIndex.current ?? 0, _lastUsedSorting.current, _lastUsedFilters.current);\n }\n };\n\n // search works client side - it fetches all then works client side - so these handlers are a little \"weird\"\n // if a search is currently \"active\", we need to re load all because\n const handleSort = async (sorting: TableColumnSort[]) => {\n if (_lastUsedSearch.current) {\n // we're searching, which means we need to refetch all with the correct sorting applied\n return loadAll(sorting, _lastUsedFilters.current);\n } else {\n // load the last page that we scrolled to\n return loadPage(_lastUsedPageIndex.current ?? 0, sorting, _lastUsedFilters.current);\n }\n };\n const handleFilter = async (filters: TableColumnFilter[]) => {\n if (_lastUsedSearch.current) {\n // we're searching, which means we need to refetch all with the correct sorting applied\n return loadAll(_lastUsedSorting.current, filters);\n } else {\n // load the last page that we scrolled to\n return loadPage(_lastUsedPageIndex.current ?? 0, _lastUsedSorting.current, filters);\n }\n };\n const handleSearch = async (search: string | undefined) => {\n // set the search so we can track if it changed between loads\n _lastUsedSearch.current = search || undefined;\n // search works client side, and focusing the search field triggers a load of all so we don't actually\n // want to load anything when search gets changed, we just store the value for other handlers\n };\n\n return [\n {\n data,\n length: length.current,\n loadAll,\n loadPage,\n onChangeFilter: handleFilter,\n onChangeSearch: handleSearch,\n onChangeSort: handleSort,\n pageSize,\n },\n invalidate,\n ];\n}\n"],"names":["DEFAULT_PAGE_SIZE","useTableDataLoader","fetchPage","fetchAll","options","pageSize","_options","length","React","useRef","undefined","_React$useState","useState","data","setData","_pendingPageRequests","_lastUsedSorting","_lastUsedFilters","_lastUsedSearch","_lastUsedPageIndex","_forceReset","loadPage","pageIndex","sorting","filters","reset","current","JSON","stringify","Promise","resolve","_temp","_finallyRethrows","_catch","then","response","currentData","nextData","Array","fill","concat","startIndex","_nextData","splice","apply","_wasThrown","_result","e","reject","loadAll","_temp2","_nextData2","invalidate","_lastUsedPageIndex$cu","handleSort","_lastUsedPageIndex$cu2","handleFilter","_lastUsedPageIndex$cu3","handleSearch","search","onChangeFilter","onChangeSearch","onChangeSort"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useTableDataLoader.js","sources":["../../../../../../../src/primitives/Table/useTableDataLoader.ts"],"sourcesContent":["import React from 'react';\nimport {\n TableColumnFilter,\n TableColumnSort,\n TableFilterHandler,\n TableServerLoadPageHandler,\n TableServerLoadAllHandler,\n TableSortHandler,\n TableSearchHandler,\n} from './types';\n\nexport const DEFAULT_PAGE_SIZE = 100;\n\nexport type useTableDataPageFetcher<TType = unknown> = (\n pageIndex: number,\n pageSize: number,\n sorting: TableColumnSort[],\n filters: TableColumnFilter[],\n hiddenColumns: string[]\n) => Promise<{ data: TType[]; length: number }>;\n\nexport type useTableDataAllFetcher<TType = unknown> = (\n sorting: TableColumnSort[],\n filters: TableColumnFilter[],\n hiddenColumns: string[]\n) => Promise<{ data: TType[]; length: number }>;\n\nexport type useTableDataLoaderOptions = { pageSize: number };\n\nexport type useTableDataLoaderValues<TType = unknown> = {\n data: TType[];\n length: number | undefined;\n loadAll: TableServerLoadAllHandler;\n loadPage: TableServerLoadPageHandler;\n onChangeFilter: TableFilterHandler;\n onChangeSearch: TableSearchHandler;\n onChangeSort: TableSortHandler;\n pageSize: number;\n};\n\nexport function useTableDataLoader<TType = unknown>(\n fetchPage: useTableDataPageFetcher<TType>,\n fetchAll: useTableDataAllFetcher<TType>,\n options: useTableDataLoaderOptions = { pageSize: DEFAULT_PAGE_SIZE }\n): [useTableDataLoaderValues<TType>, () => void] {\n const { pageSize } = options;\n\n // track the data length, we don't know it until the first request\n const length = React.useRef<number | undefined>(undefined);\n // data will be filled after the first request, then we'll update values in place\n const [data, setData] = React.useState<any[]>([]);\n // track which pages have been loaded to dedupe requests\n const _pendingPageRequests = React.useRef({});\n const _lastUsedSorting = React.useRef<TableColumnSort[]>([]);\n const _lastUsedFilters = React.useRef<TableColumnFilter[]>([]);\n const _lastUsedSearch = React.useRef<string>();\n const _lastUsedHiddenColumns = React.useRef<string[]>([]);\n const _lastUsedPageIndex = React.useRef<number>();\n const _forceReset = React.useRef(false);\n\n const loadPage = async (\n pageIndex: number,\n sorting: TableColumnSort[],\n filters: TableColumnFilter[],\n hiddenColumns: string[]\n ) => {\n let reset = false;\n\n // sorting or filters changed, reset everything\n if (\n _forceReset.current ||\n JSON.stringify(sorting) !== JSON.stringify(_lastUsedSorting.current) ||\n JSON.stringify(filters) !== JSON.stringify(_lastUsedFilters.current)\n ) {\n _pendingPageRequests.current = {};\n // nuke the dataset so that we \"start again\" after sorting\n reset = true;\n }\n\n if (_pendingPageRequests.current[pageIndex]) {\n // if page is already loaded/loading, abort, otherwise mark it as loading\n return;\n } else {\n _pendingPageRequests.current[pageIndex] = true;\n }\n\n _forceReset.current = false;\n // set the last page loaded (or tried to load), so that we can load it back again after resets\n _lastUsedPageIndex.current = pageIndex;\n // set the sorting so we can track if it changed between loads\n _lastUsedSorting.current = sorting;\n // set the filters so we can track if it changed between loads\n _lastUsedFilters.current = filters;\n _lastUsedHiddenColumns.current = hiddenColumns;\n\n try {\n const response = await fetchPage(pageIndex, pageSize, sorting, filters, hiddenColumns);\n\n // update state, here we do some \"magic\" to support \"load in place\"\n setData(currentData => {\n let nextData;\n\n // reset table state if:\n // - the length isn't set at all (first load)\n // - the client length and server length are different (the data changed)\n if (reset || length.current !== response.length) {\n length.current = response.length;\n nextData = Array(length.current).fill(undefined);\n } else {\n nextData = [...currentData];\n }\n\n const startIndex = pageIndex * pageSize;\n nextData.splice(startIndex, pageSize, ...response.data);\n return nextData;\n });\n } catch {\n //\n } finally {\n _pendingPageRequests.current[pageIndex] = false;\n }\n };\n\n const loadAll = async (sorting: TableColumnSort[], filters: TableColumnFilter[], hiddenColumns: string[]) => {\n // set the sorting so we can track if it changed between loads\n _lastUsedSorting.current = sorting;\n // set the filters so we can track if it changed between loads\n _lastUsedFilters.current = filters;\n _lastUsedHiddenColumns.current = hiddenColumns;\n\n try {\n const response = await fetchAll(sorting, filters, hiddenColumns);\n length.current = response.length;\n\n setData(() => {\n let nextData;\n\n if (response.data.length !== response.length) {\n nextData = Array(response.length).fill(undefined);\n nextData.splice(0, response.data.length, ...response.data);\n } else {\n nextData = [...response.data];\n }\n\n return nextData;\n });\n } catch {\n //\n }\n };\n\n const invalidate = async () => {\n // empties the entire data array\n _forceReset.current = true;\n\n if (_lastUsedSearch.current) {\n // we're searching, which means we need to refetch all with the correct sorting applied\n return loadAll(_lastUsedSorting.current, _lastUsedFilters.current, _lastUsedHiddenColumns.current);\n } else {\n // load the last page that we scrolled to\n return loadPage(\n _lastUsedPageIndex.current ?? 0,\n _lastUsedSorting.current,\n _lastUsedFilters.current,\n _lastUsedHiddenColumns.current\n );\n }\n };\n\n // search works client side - it fetches all then works client side - so these handlers are a little \"weird\"\n // if a search is currently \"active\", we need to re load all because\n const handleSort = async (sorting: TableColumnSort[]) => {\n if (_lastUsedSearch.current) {\n // we're searching, which means we need to refetch all with the correct sorting applied\n return loadAll(sorting, _lastUsedFilters.current, _lastUsedHiddenColumns.current);\n } else {\n // load the last page that we scrolled to\n return loadPage(_lastUsedPageIndex.current ?? 0, sorting, _lastUsedFilters.current, _lastUsedHiddenColumns.current);\n }\n };\n const handleFilter = async (filters: TableColumnFilter[]) => {\n if (_lastUsedSearch.current) {\n // we're searching, which means we need to refetch all with the correct sorting applied\n return loadAll(_lastUsedSorting.current, filters, _lastUsedHiddenColumns.current);\n } else {\n // load the last page that we scrolled to\n return loadPage(_lastUsedPageIndex.current ?? 0, _lastUsedSorting.current, filters, _lastUsedHiddenColumns.current);\n }\n };\n const handleSearch = async (search: string | undefined) => {\n // set the search so we can track if it changed between loads\n _lastUsedSearch.current = search || undefined;\n // search works client side, and focusing the search field triggers a load of all so we don't actually\n // want to load anything when search gets changed, we just store the value for other handlers\n };\n\n return [\n {\n data,\n length: length.current,\n loadAll,\n loadPage,\n onChangeFilter: handleFilter,\n onChangeSearch: handleSearch,\n onChangeSort: handleSort,\n pageSize,\n },\n invalidate,\n ];\n}\n"],"names":["DEFAULT_PAGE_SIZE","useTableDataLoader","fetchPage","fetchAll","options","pageSize","_options","length","React","useRef","undefined","_React$useState","useState","data","setData","_pendingPageRequests","_lastUsedSorting","_lastUsedFilters","_lastUsedSearch","_lastUsedHiddenColumns","_lastUsedPageIndex","_forceReset","loadPage","pageIndex","sorting","filters","hiddenColumns","reset","current","JSON","stringify","Promise","resolve","_temp","_finallyRethrows","_catch","then","response","currentData","nextData","Array","fill","concat","startIndex","_nextData","splice","apply","_wasThrown","_result","e","reject","loadAll","_temp2","_nextData2","invalidate","_lastUsedPageIndex$cu","handleSort","_lastUsedPageIndex$cu2","handleFilter","_lastUsedPageIndex$cu3","handleSearch","search","onChangeFilter","onChangeSearch","onChangeSort"],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@ import { DEFAULT_PAGE_SIZE } from './useTableDataLoader.js';
|
|
|
6
6
|
|
|
7
7
|
var DATASET_SIZE_MULTIPLIER = 15;
|
|
8
8
|
function useTableDataLoader2(fetchPage, fetchAll, options) {
|
|
9
|
-
var loadPage = function loadPage(pageIndex, sorting, filters,
|
|
9
|
+
var loadPage = function loadPage(pageIndex, sorting, filters, hiddenColumns, search, reset) {
|
|
10
10
|
if (reset === void 0) {
|
|
11
11
|
reset = false;
|
|
12
12
|
}
|
|
@@ -26,7 +26,7 @@ function useTableDataLoader2(fetchPage, fetchAll, options) {
|
|
|
26
26
|
_pendingPageRequests.current[pageIndex] = true;
|
|
27
27
|
var _temp2 = _catch(function () {
|
|
28
28
|
_lastRequestId.current = requestId;
|
|
29
|
-
return Promise.resolve(fetchPage(pageIndex, pageSize, sorting, filters,
|
|
29
|
+
return Promise.resolve(fetchPage(pageIndex, pageSize, sorting, filters, hiddenColumns, search)).then(function (response) {
|
|
30
30
|
length.current = response.length;
|
|
31
31
|
// update state, here we do some "magic" to support "load in place"
|
|
32
32
|
setData(function (currentData) {
|
|
@@ -106,7 +106,7 @@ function useTableDataLoader2(fetchPage, fetchAll, options) {
|
|
|
106
106
|
var _lastUsedFilters = React__default.useRef([]);
|
|
107
107
|
var _lastUsedSearch = React__default.useRef();
|
|
108
108
|
var _lastUsedHiddenColumns = React__default.useRef([]);
|
|
109
|
-
var loadAll = function loadAll(sorting, filters,
|
|
109
|
+
var loadAll = function loadAll(sorting, filters, hiddenColumns, search) {
|
|
110
110
|
try {
|
|
111
111
|
// set values so we can track if they changed between loads
|
|
112
112
|
_lastUsedSorting.current = sorting;
|
|
@@ -115,7 +115,7 @@ function useTableDataLoader2(fetchPage, fetchAll, options) {
|
|
|
115
115
|
_lastUsedHiddenColumns.current = hiddenColumns;
|
|
116
116
|
var _temp = _finallyRethrows(function () {
|
|
117
117
|
return _catch(function () {
|
|
118
|
-
return Promise.resolve(fetchAll(sorting, filters,
|
|
118
|
+
return Promise.resolve(fetchAll(sorting, filters, hiddenColumns, search)).then(function (response) {
|
|
119
119
|
length.current = response.length;
|
|
120
120
|
var pages = [];
|
|
121
121
|
var cache = {};
|
|
@@ -148,7 +148,7 @@ function useTableDataLoader2(fetchPage, fetchAll, options) {
|
|
|
148
148
|
// reset stuff
|
|
149
149
|
_pendingPageRequests.current = {};
|
|
150
150
|
// load the current page again
|
|
151
|
-
return loadPage(getCurrentPage(data.pages), _lastUsedSorting.current, _lastUsedFilters.current,
|
|
151
|
+
return loadPage(getCurrentPage(data.pages), _lastUsedSorting.current, _lastUsedFilters.current, _lastUsedHiddenColumns.current, _lastUsedSearch.current, true);
|
|
152
152
|
} catch (e) {
|
|
153
153
|
return Promise.reject(e);
|
|
154
154
|
}
|
|
@@ -157,7 +157,7 @@ function useTableDataLoader2(fetchPage, fetchAll, options) {
|
|
|
157
157
|
try {
|
|
158
158
|
// reset before loading the current page
|
|
159
159
|
_pendingPageRequests.current = {};
|
|
160
|
-
return loadPage(getCurrentPage(data.pages), sorting, _lastUsedFilters.current,
|
|
160
|
+
return loadPage(getCurrentPage(data.pages), sorting, _lastUsedFilters.current, _lastUsedHiddenColumns.current, _lastUsedSearch.current, true);
|
|
161
161
|
} catch (e) {
|
|
162
162
|
return Promise.reject(e);
|
|
163
163
|
}
|
|
@@ -166,7 +166,7 @@ function useTableDataLoader2(fetchPage, fetchAll, options) {
|
|
|
166
166
|
try {
|
|
167
167
|
// reset before loading the current page
|
|
168
168
|
_pendingPageRequests.current = {};
|
|
169
|
-
return loadPage(0, _lastUsedSorting.current, filters, _lastUsedSearch.current,
|
|
169
|
+
return loadPage(0, _lastUsedSorting.current, filters, hiddenColumns, _lastUsedSearch.current, true);
|
|
170
170
|
} catch (e) {
|
|
171
171
|
return Promise.reject(e);
|
|
172
172
|
}
|
|
@@ -175,7 +175,7 @@ function useTableDataLoader2(fetchPage, fetchAll, options) {
|
|
|
175
175
|
try {
|
|
176
176
|
// reset before loading the current page
|
|
177
177
|
_pendingPageRequests.current = {};
|
|
178
|
-
return loadPage(0, _lastUsedSorting.current, _lastUsedFilters.current,
|
|
178
|
+
return loadPage(0, _lastUsedSorting.current, _lastUsedFilters.current, hiddenColumns, search, true);
|
|
179
179
|
} catch (e) {
|
|
180
180
|
return Promise.reject(e);
|
|
181
181
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTableDataLoader2.js","sources":["../../../../../../../src/primitives/Table/useTableDataLoader2.ts"],"sourcesContent":["import React from 'react';\nimport { v4 as uuid } from 'uuid';\nimport {\n TableColumnFilter,\n TableColumnSort,\n TableFilterHandler,\n TableServerLoadPageHandler,\n TableServerLoadAllHandler,\n TableSortHandler,\n TableSearchHandler,\n} from './types';\nimport { DEFAULT_PAGE_SIZE, useTableDataLoaderOptions } from './useTableDataLoader';\n\nconst DATASET_SIZE_MULTIPLIER = 15;\n\nexport type useTableDataPageFetcher2<TType = unknown> = (\n pageIndex: number,\n pageSize: number,\n sorting: TableColumnSort[],\n filters: TableColumnFilter[],\n search: string | undefined,\n hiddenColumns: string[]\n) => Promise<{ data: TType[]; length: number }>;\n\nexport type useTableDataAllFetcher2<TType = unknown> = (\n sorting: TableColumnSort[],\n filters: TableColumnFilter[],\n search: string | undefined,\n hiddenColumns: string[]\n) => Promise<{ data: TType[]; length: number }>;\n\nexport type useTableDataLoaderValues2<TType = unknown> = {\n data: TType[];\n length: number | undefined;\n loadAll: TableServerLoadAllHandler;\n loadPage: TableServerLoadPageHandler;\n onChangeFilter: TableFilterHandler;\n onChangeSearch: TableSearchHandler;\n onChangeSort: TableSortHandler;\n pageSize: number;\n pages: number[];\n _experimentalDataLoader2: boolean;\n};\n\ntype Data<TType = unknown> = {\n rows: TType[];\n pages: number[];\n cache: Record<number, TType[]>;\n lastFetchedPage: number | undefined;\n};\ntype Direction = 'forward' | 'backward' | undefined;\n\nexport function useTableDataLoader2<TType = unknown>(\n fetchPage: useTableDataPageFetcher2<TType>,\n fetchAll: useTableDataAllFetcher2<TType>,\n options: useTableDataLoaderOptions = { pageSize: DEFAULT_PAGE_SIZE }\n): [useTableDataLoaderValues2<TType>, () => void] {\n const { pageSize } = options;\n const DATASET_SIZE = DATASET_SIZE_MULTIPLIER * pageSize;\n\n // track the data length, we don't know it until the first request\n const length = React.useRef<number>(0);\n // data will be filled after the first request\n const [data, setData] = React.useState<Data<TType>>({ rows: [], pages: [], cache: {}, lastFetchedPage: undefined });\n // track which pages have been loaded to dedupe requests\n const _pendingPageRequests = React.useRef({});\n // it's possible to spam updates, e.g. sort, so we don't set state if the last request wasn't the current oen\n const _lastRequestId = React.useRef<string | undefined>();\n // store last used properties\n const _lastUsedSorting = React.useRef<TableColumnSort[]>([]);\n const _lastUsedFilters = React.useRef<TableColumnFilter[]>([]);\n const _lastUsedSearch = React.useRef<string | undefined>();\n const _lastUsedHiddenColumns = React.useRef<string[]>([]);\n\n async function loadPage(\n pageIndex: number,\n sorting: TableColumnSort[],\n filters: TableColumnFilter[],\n search: string | undefined,\n hiddenColumns: string[],\n reset = false\n ) {\n // if a request is already pending for this page (and it's not a reset), skip it\n if (_pendingPageRequests.current[pageIndex] && !reset) {\n return;\n }\n\n const hasChangedData =\n JSON.stringify(sorting) !== JSON.stringify(_lastUsedSorting.current) ||\n JSON.stringify(filters) !== JSON.stringify(_lastUsedFilters.current) ||\n search !== _lastUsedSearch.current;\n\n // if the page is already loaded and has actual rows, abort\n if (data.cache[pageIndex] && data.cache[pageIndex][0] && !hasChangedData && !reset) {\n return;\n }\n\n // create an id to track the update\n const requestId = uuid();\n\n // set the page as loading, so that subsequent requests don't retrigger it\n _pendingPageRequests.current[pageIndex] = true;\n\n try {\n _lastRequestId.current = requestId;\n const response = await fetchPage(pageIndex, pageSize, sorting, filters, search, hiddenColumns);\n length.current = response.length;\n\n // update state, here we do some \"magic\" to support \"load in place\"\n setData(currentData => {\n // if this request wasn't the last one, just return the current state to prevent weird updates\n if (_lastRequestId.current !== requestId) {\n return currentData;\n }\n\n const direction = getDirection(pageIndex, currentData.pages);\n const nextPages = getPages(pageIndex, currentData.lastFetchedPage, reset ? [] : currentData.pages, direction);\n\n // set values so we can track if they changed between loads\n _lastUsedSorting.current = sorting;\n _lastUsedFilters.current = filters;\n _lastUsedSearch.current = search;\n _lastUsedHiddenColumns.current = hiddenColumns;\n\n // cache data as an object to prevent any duplicates for pages\n let nextCache: Record<number, TType[]>;\n\n if (reset || hasChangedData || !direction) {\n nextCache = nextPages.reduce((acc, p) => ({ ...acc, [p]: Array(pageSize).fill(undefined) }), {});\n } else {\n nextCache = { ...currentData.cache };\n }\n\n nextCache[pageIndex] = response.data;\n\n // cleanup \"unloaded\" pages\n if (direction === 'forward' && currentData.rows.length >= DATASET_SIZE) {\n delete nextCache[currentData.pages[0]];\n } else if (direction === 'backward' && currentData.rows.length >= DATASET_SIZE) {\n delete nextCache[currentData.pages[currentData.pages.length - 1]];\n }\n\n // remap rows from the cached data - do it here and not in render to save some performance\n const rows = Object.values(nextCache).reduce((acc, p) => acc.concat(p), []);\n\n return {\n cache: nextCache,\n pages: nextPages,\n rows: rows,\n lastFetchedPage: pageIndex,\n };\n });\n\n // reset pending requests\n delete _pendingPageRequests.current[pageIndex];\n } catch {\n //\n }\n }\n\n const loadAll = async (\n sorting: TableColumnSort[],\n filters: TableColumnFilter[],\n search: string | undefined,\n hiddenColumns: string[]\n ) => {\n // set values so we can track if they changed between loads\n _lastUsedSorting.current = sorting;\n _lastUsedFilters.current = filters;\n _lastUsedSearch.current = search;\n _lastUsedHiddenColumns.current = hiddenColumns;\n\n try {\n const response = await fetchAll(sorting, filters, search, hiddenColumns);\n length.current = response.length;\n\n const pages: number[] = [];\n const cache = {};\n\n Array.from(Array(response.length / pageSize).keys()).forEach(index => {\n pages.push(index);\n const startIndex = index * pageSize;\n cache[index] = response.data.slice(startIndex, startIndex + pageSize);\n });\n\n setData({\n cache,\n pages,\n rows: response.data,\n lastFetchedPage: undefined,\n });\n } catch {\n //\n } finally {\n // reset pending requests\n _pendingPageRequests.current = {};\n }\n };\n\n const invalidate = async () => {\n // reset stuff\n _pendingPageRequests.current = {};\n\n // load the current page again\n return loadPage(\n getCurrentPage(data.pages),\n _lastUsedSorting.current,\n _lastUsedFilters.current,\n _lastUsedSearch.current,\n _lastUsedHiddenColumns.current,\n true\n );\n };\n\n const handleSort = async (sorting: TableColumnSort[]) => {\n // reset before loading the current page\n _pendingPageRequests.current = {};\n\n return loadPage(\n getCurrentPage(data.pages),\n sorting,\n _lastUsedFilters.current,\n _lastUsedSearch.current,\n _lastUsedHiddenColumns.current,\n true\n );\n };\n const handleFilter = async (filters: TableColumnFilter[], hiddenColumns: string[]) => {\n // reset before loading the current page\n _pendingPageRequests.current = {};\n return loadPage(0, _lastUsedSorting.current, filters, _lastUsedSearch.current, hiddenColumns, true);\n };\n const handleSearch = async (search: string | undefined, hiddenColumns: string[]) => {\n // reset before loading the current page\n _pendingPageRequests.current = {};\n return loadPage(0, _lastUsedSorting.current, _lastUsedFilters.current, search, hiddenColumns, true);\n };\n\n return [\n {\n data: data.rows,\n pages: data.pages,\n length: length.current,\n loadAll,\n loadPage,\n onChangeFilter: handleFilter,\n onChangeSearch: handleSearch,\n onChangeSort: handleSort,\n pageSize,\n _experimentalDataLoader2: true,\n },\n invalidate,\n ];\n}\n\nfunction getCurrentPage(currentPages: number[]): number {\n if (currentPages.length <= 2) {\n return currentPages[0];\n }\n\n // for even page lengths we can't know which is the current visible page - it could even be both\n // so we load one of them and rely on the \"load next/previous page\" functionality in row\n const middle = Math.floor(currentPages.length / 2);\n return currentPages[middle];\n}\n\nfunction getDirection(pageIndex: number, currentPages: number[]): Direction {\n if (currentPages.length) {\n if (pageIndex === currentPages[currentPages.length - 1] + 1) {\n return 'forward';\n } else if (\n pageIndex === currentPages[0] - 1 ||\n (currentPages.length === 2 && currentPages[0] !== 0 && pageIndex === currentPages[0])\n ) {\n return 'backward';\n }\n }\n\n return undefined;\n}\n\nfunction getPages(pageIndex: number, lastUsedPageIndex: number | undefined, currentPages: number[], direction: Direction) {\n if (currentPages.length && (pageIndex === lastUsedPageIndex || currentPages.includes(pageIndex))) {\n return currentPages;\n }\n\n if (direction === 'forward') {\n const nextPages = currentPages.length === DATASET_SIZE_MULTIPLIER ? currentPages.slice(1) : currentPages;\n return nextPages.concat(pageIndex);\n }\n\n if (direction === 'backward') {\n const nextPages = currentPages.length === DATASET_SIZE_MULTIPLIER ? currentPages.slice(0, -1) : currentPages;\n return [pageIndex].concat(nextPages);\n }\n\n return [pageIndex];\n}\n"],"names":["DATASET_SIZE_MULTIPLIER","useTableDataLoader2","fetchPage","fetchAll","options","loadPage","pageIndex","sorting","filters","search","hiddenColumns","reset","_pendingPageRequests","current","Promise","resolve","hasChangedData","JSON","stringify","_lastUsedSorting","_lastUsedFilters","_lastUsedSearch","data","cache","requestId","uuid","_temp2","_catch","_lastRequestId","pageSize","then","response","length","setData","currentData","direction","getDirection","pages","nextPages","getPages","lastFetchedPage","_lastUsedHiddenColumns","nextCache","reduce","acc","p","_extends2","_extends","Array","fill","undefined","rows","DATASET_SIZE","Object","values","concat","e","reject","DEFAULT_PAGE_SIZE","_options","React","useRef","_React$useState","useState","loadAll","_temp","_finallyRethrows","from","keys","forEach","index","push","startIndex","slice","_wasThrown","_result","invalidate","getCurrentPage","handleSort","handleFilter","handleSearch","onChangeFilter","onChangeSearch","onChangeSort","_experimentalDataLoader2","currentPages","middle","Math","floor","lastUsedPageIndex","includes"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useTableDataLoader2.js","sources":["../../../../../../../src/primitives/Table/useTableDataLoader2.ts"],"sourcesContent":["import React from 'react';\nimport { v4 as uuid } from 'uuid';\nimport {\n TableColumnFilter,\n TableColumnSort,\n TableFilterHandler,\n TableServerLoadPageHandler,\n TableServerLoadAllHandler,\n TableSortHandler,\n TableSearchHandler,\n} from './types';\nimport { DEFAULT_PAGE_SIZE, useTableDataLoaderOptions } from './useTableDataLoader';\n\nconst DATASET_SIZE_MULTIPLIER = 15;\n\nexport type useTableDataPageFetcher2<TType = unknown> = (\n pageIndex: number,\n pageSize: number,\n sorting: TableColumnSort[],\n filters: TableColumnFilter[],\n hiddenColumns: string[],\n search: string | undefined\n) => Promise<{ data: TType[]; length: number }>;\n\nexport type useTableDataAllFetcher2<TType = unknown> = (\n sorting: TableColumnSort[],\n filters: TableColumnFilter[],\n hiddenColumns: string[],\n search: string | undefined\n) => Promise<{ data: TType[]; length: number }>;\n\nexport type useTableDataLoaderValues2<TType = unknown> = {\n data: TType[];\n length: number | undefined;\n loadAll: TableServerLoadAllHandler;\n loadPage: TableServerLoadPageHandler;\n onChangeFilter: TableFilterHandler;\n onChangeSearch: TableSearchHandler;\n onChangeSort: TableSortHandler;\n pageSize: number;\n pages: number[];\n _experimentalDataLoader2: boolean;\n};\n\ntype Data<TType = unknown> = {\n rows: TType[];\n pages: number[];\n cache: Record<number, TType[]>;\n lastFetchedPage: number | undefined;\n};\ntype Direction = 'forward' | 'backward' | undefined;\n\nexport function useTableDataLoader2<TType = unknown>(\n fetchPage: useTableDataPageFetcher2<TType>,\n fetchAll: useTableDataAllFetcher2<TType>,\n options: useTableDataLoaderOptions = { pageSize: DEFAULT_PAGE_SIZE }\n): [useTableDataLoaderValues2<TType>, () => void] {\n const { pageSize } = options;\n const DATASET_SIZE = DATASET_SIZE_MULTIPLIER * pageSize;\n\n // track the data length, we don't know it until the first request\n const length = React.useRef<number>(0);\n // data will be filled after the first request\n const [data, setData] = React.useState<Data<TType>>({ rows: [], pages: [], cache: {}, lastFetchedPage: undefined });\n // track which pages have been loaded to dedupe requests\n const _pendingPageRequests = React.useRef({});\n // it's possible to spam updates, e.g. sort, so we don't set state if the last request wasn't the current oen\n const _lastRequestId = React.useRef<string | undefined>();\n // store last used properties\n const _lastUsedSorting = React.useRef<TableColumnSort[]>([]);\n const _lastUsedFilters = React.useRef<TableColumnFilter[]>([]);\n const _lastUsedSearch = React.useRef<string | undefined>();\n const _lastUsedHiddenColumns = React.useRef<string[]>([]);\n\n async function loadPage(\n pageIndex: number,\n sorting: TableColumnSort[],\n filters: TableColumnFilter[],\n hiddenColumns: string[],\n search: string | undefined,\n reset = false\n ) {\n // if a request is already pending for this page (and it's not a reset), skip it\n if (_pendingPageRequests.current[pageIndex] && !reset) {\n return;\n }\n\n const hasChangedData =\n JSON.stringify(sorting) !== JSON.stringify(_lastUsedSorting.current) ||\n JSON.stringify(filters) !== JSON.stringify(_lastUsedFilters.current) ||\n search !== _lastUsedSearch.current;\n\n // if the page is already loaded and has actual rows, abort\n if (data.cache[pageIndex] && data.cache[pageIndex][0] && !hasChangedData && !reset) {\n return;\n }\n\n // create an id to track the update\n const requestId = uuid();\n\n // set the page as loading, so that subsequent requests don't retrigger it\n _pendingPageRequests.current[pageIndex] = true;\n\n try {\n _lastRequestId.current = requestId;\n const response = await fetchPage(pageIndex, pageSize, sorting, filters, hiddenColumns, search);\n length.current = response.length;\n\n // update state, here we do some \"magic\" to support \"load in place\"\n setData(currentData => {\n // if this request wasn't the last one, just return the current state to prevent weird updates\n if (_lastRequestId.current !== requestId) {\n return currentData;\n }\n\n const direction = getDirection(pageIndex, currentData.pages);\n const nextPages = getPages(pageIndex, currentData.lastFetchedPage, reset ? [] : currentData.pages, direction);\n\n // set values so we can track if they changed between loads\n _lastUsedSorting.current = sorting;\n _lastUsedFilters.current = filters;\n _lastUsedSearch.current = search;\n _lastUsedHiddenColumns.current = hiddenColumns;\n\n // cache data as an object to prevent any duplicates for pages\n let nextCache: Record<number, TType[]>;\n\n if (reset || hasChangedData || !direction) {\n nextCache = nextPages.reduce((acc, p) => ({ ...acc, [p]: Array(pageSize).fill(undefined) }), {});\n } else {\n nextCache = { ...currentData.cache };\n }\n\n nextCache[pageIndex] = response.data;\n\n // cleanup \"unloaded\" pages\n if (direction === 'forward' && currentData.rows.length >= DATASET_SIZE) {\n delete nextCache[currentData.pages[0]];\n } else if (direction === 'backward' && currentData.rows.length >= DATASET_SIZE) {\n delete nextCache[currentData.pages[currentData.pages.length - 1]];\n }\n\n // remap rows from the cached data - do it here and not in render to save some performance\n const rows = Object.values(nextCache).reduce((acc, p) => acc.concat(p), []);\n\n return {\n cache: nextCache,\n pages: nextPages,\n rows: rows,\n lastFetchedPage: pageIndex,\n };\n });\n\n // reset pending requests\n delete _pendingPageRequests.current[pageIndex];\n } catch {\n //\n }\n }\n\n const loadAll = async (\n sorting: TableColumnSort[],\n filters: TableColumnFilter[],\n hiddenColumns: string[],\n search: string | undefined\n ) => {\n // set values so we can track if they changed between loads\n _lastUsedSorting.current = sorting;\n _lastUsedFilters.current = filters;\n _lastUsedSearch.current = search;\n _lastUsedHiddenColumns.current = hiddenColumns;\n\n try {\n const response = await fetchAll(sorting, filters, hiddenColumns, search);\n length.current = response.length;\n\n const pages: number[] = [];\n const cache = {};\n\n Array.from(Array(response.length / pageSize).keys()).forEach(index => {\n pages.push(index);\n const startIndex = index * pageSize;\n cache[index] = response.data.slice(startIndex, startIndex + pageSize);\n });\n\n setData({\n cache,\n pages,\n rows: response.data,\n lastFetchedPage: undefined,\n });\n } catch {\n //\n } finally {\n // reset pending requests\n _pendingPageRequests.current = {};\n }\n };\n\n const invalidate = async () => {\n // reset stuff\n _pendingPageRequests.current = {};\n\n // load the current page again\n return loadPage(\n getCurrentPage(data.pages),\n _lastUsedSorting.current,\n _lastUsedFilters.current,\n _lastUsedHiddenColumns.current,\n _lastUsedSearch.current,\n true\n );\n };\n\n const handleSort = async (sorting: TableColumnSort[]) => {\n // reset before loading the current page\n _pendingPageRequests.current = {};\n\n return loadPage(\n getCurrentPage(data.pages),\n sorting,\n _lastUsedFilters.current,\n _lastUsedHiddenColumns.current,\n _lastUsedSearch.current,\n true\n );\n };\n const handleFilter = async (filters: TableColumnFilter[], hiddenColumns: string[]) => {\n // reset before loading the current page\n _pendingPageRequests.current = {};\n return loadPage(0, _lastUsedSorting.current, filters, hiddenColumns, _lastUsedSearch.current, true);\n };\n const handleSearch = async (search: string | undefined, hiddenColumns: string[]) => {\n // reset before loading the current page\n _pendingPageRequests.current = {};\n return loadPage(0, _lastUsedSorting.current, _lastUsedFilters.current, hiddenColumns, search, true);\n };\n\n return [\n {\n data: data.rows,\n pages: data.pages,\n length: length.current,\n loadAll,\n loadPage,\n onChangeFilter: handleFilter,\n onChangeSearch: handleSearch,\n onChangeSort: handleSort,\n pageSize,\n _experimentalDataLoader2: true,\n },\n invalidate,\n ];\n}\n\nfunction getCurrentPage(currentPages: number[]): number {\n if (currentPages.length <= 2) {\n return currentPages[0];\n }\n\n // for even page lengths we can't know which is the current visible page - it could even be both\n // so we load one of them and rely on the \"load next/previous page\" functionality in row\n const middle = Math.floor(currentPages.length / 2);\n return currentPages[middle];\n}\n\nfunction getDirection(pageIndex: number, currentPages: number[]): Direction {\n if (currentPages.length) {\n if (pageIndex === currentPages[currentPages.length - 1] + 1) {\n return 'forward';\n } else if (\n pageIndex === currentPages[0] - 1 ||\n (currentPages.length === 2 && currentPages[0] !== 0 && pageIndex === currentPages[0])\n ) {\n return 'backward';\n }\n }\n\n return undefined;\n}\n\nfunction getPages(pageIndex: number, lastUsedPageIndex: number | undefined, currentPages: number[], direction: Direction) {\n if (currentPages.length && (pageIndex === lastUsedPageIndex || currentPages.includes(pageIndex))) {\n return currentPages;\n }\n\n if (direction === 'forward') {\n const nextPages = currentPages.length === DATASET_SIZE_MULTIPLIER ? currentPages.slice(1) : currentPages;\n return nextPages.concat(pageIndex);\n }\n\n if (direction === 'backward') {\n const nextPages = currentPages.length === DATASET_SIZE_MULTIPLIER ? currentPages.slice(0, -1) : currentPages;\n return [pageIndex].concat(nextPages);\n }\n\n return [pageIndex];\n}\n"],"names":["DATASET_SIZE_MULTIPLIER","useTableDataLoader2","fetchPage","fetchAll","options","loadPage","pageIndex","sorting","filters","hiddenColumns","search","reset","_pendingPageRequests","current","Promise","resolve","hasChangedData","JSON","stringify","_lastUsedSorting","_lastUsedFilters","_lastUsedSearch","data","cache","requestId","uuid","_temp2","_catch","_lastRequestId","pageSize","then","response","length","setData","currentData","direction","getDirection","pages","nextPages","getPages","lastFetchedPage","_lastUsedHiddenColumns","nextCache","reduce","acc","p","_extends2","_extends","Array","fill","undefined","rows","DATASET_SIZE","Object","values","concat","e","reject","DEFAULT_PAGE_SIZE","_options","React","useRef","_React$useState","useState","loadAll","_temp","_finallyRethrows","from","keys","forEach","index","push","startIndex","slice","_wasThrown","_result","invalidate","getCurrentPage","handleSort","handleFilter","handleSearch","onChangeFilter","onChangeSearch","onChangeSort","_experimentalDataLoader2","currentPages","middle","Math","floor","lastUsedPageIndex","includes"],"mappings":"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"}
|
|
@@ -16,7 +16,7 @@ function useTableRowSelectionListener(table, onRowSelect) {
|
|
|
16
16
|
* we only need to know if selection was enabled or disabled, because enableRowSelection function
|
|
17
17
|
* will be applied directly to particular rows.
|
|
18
18
|
*/
|
|
19
|
-
}, [!!table.options.enableRowSelection, state]);
|
|
19
|
+
}, [!!table.options.enableRowSelection, JSON.stringify(state)]);
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
export { useTableRowSelectionListener };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTableRowSelectionListener.js","sources":["../../../../../../../../../src/primitives/Table/useTableManager/listeners/useTableRowSelectionListener.ts"],"sourcesContent":["import { Table as ReactTable } from '@tanstack/react-table';\nimport { useLazyEffect } from '../../../../hooks/useLazyEffect';\nimport { TableRowSelectHandler } from '../../types';\n\nexport function useTableRowSelectionListener<TType = unknown>(\n table: ReactTable<TType>,\n onRowSelect?: TableRowSelectHandler<TType>\n) {\n // note that the selected row model may not contain all rows in state when using server loading\n const rows = table.getSelectedRowModel().flatRows;\n const state = table.getState().rowSelection;\n\n useLazyEffect(() => {\n if (table.options.enableRowSelection && typeof onRowSelect === 'function') {\n onRowSelect(\n rows.map(row => row.original),\n Object.keys(state)\n );\n }\n /**\n * Casting to a boolean, since enableRowSelection can be a function,\n * and setting a function as depoendency will lead to infinity loop. And in case of row selection useEffect,\n * we only need to know if selection was enabled or disabled, because enableRowSelection function\n * will be applied directly to particular rows.\n */\n }, [!!table.options.enableRowSelection, state]);\n}\n"],"names":["useTableRowSelectionListener","table","onRowSelect","rows","getSelectedRowModel","flatRows","state","getState","rowSelection","useLazyEffect","options","enableRowSelection","map","row","original","Object","keys"],"mappings":";;SAIgBA,4BAA4BA,CACxCC,KAAwB,EACxBC,WAA0C;;EAG1C,IAAMC,IAAI,GAAGF,KAAK,CAACG,mBAAmB,EAAE,CAACC,QAAQ;EACjD,IAAMC,KAAK,GAAGL,KAAK,CAACM,QAAQ,EAAE,CAACC,YAAY;EAE3CC,aAAa,CAAC;IACV,IAAIR,KAAK,CAACS,OAAO,CAACC,kBAAkB,IAAI,OAAOT,WAAW,KAAK,UAAU,EAAE;MACvEA,WAAW,CACPC,IAAI,CAACS,GAAG,CAAC,UAAAC,GAAG;QAAA,OAAIA,GAAG,CAACC,QAAQ;QAAC,EAC7BC,MAAM,CAACC,IAAI,CAACV,KAAK,CAAC,CACrB;;;;;;;;GAQR,EAAE,CAAC,CAAC,CAACL,KAAK,CAACS,OAAO,CAACC,kBAAkB,
|
|
1
|
+
{"version":3,"file":"useTableRowSelectionListener.js","sources":["../../../../../../../../../src/primitives/Table/useTableManager/listeners/useTableRowSelectionListener.ts"],"sourcesContent":["import { Table as ReactTable } from '@tanstack/react-table';\nimport { useLazyEffect } from '../../../../hooks/useLazyEffect';\nimport { TableRowSelectHandler } from '../../types';\n\nexport function useTableRowSelectionListener<TType = unknown>(\n table: ReactTable<TType>,\n onRowSelect?: TableRowSelectHandler<TType>\n) {\n // note that the selected row model may not contain all rows in state when using server loading\n const rows = table.getSelectedRowModel().flatRows;\n const state = table.getState().rowSelection;\n\n useLazyEffect(() => {\n if (table.options.enableRowSelection && typeof onRowSelect === 'function') {\n onRowSelect(\n rows.map(row => row.original),\n Object.keys(state)\n );\n }\n /**\n * Casting to a boolean, since enableRowSelection can be a function,\n * and setting a function as depoendency will lead to infinity loop. And in case of row selection useEffect,\n * we only need to know if selection was enabled or disabled, because enableRowSelection function\n * will be applied directly to particular rows.\n */\n }, [!!table.options.enableRowSelection, JSON.stringify(state)]);\n}\n"],"names":["useTableRowSelectionListener","table","onRowSelect","rows","getSelectedRowModel","flatRows","state","getState","rowSelection","useLazyEffect","options","enableRowSelection","map","row","original","Object","keys","JSON","stringify"],"mappings":";;SAIgBA,4BAA4BA,CACxCC,KAAwB,EACxBC,WAA0C;;EAG1C,IAAMC,IAAI,GAAGF,KAAK,CAACG,mBAAmB,EAAE,CAACC,QAAQ;EACjD,IAAMC,KAAK,GAAGL,KAAK,CAACM,QAAQ,EAAE,CAACC,YAAY;EAE3CC,aAAa,CAAC;IACV,IAAIR,KAAK,CAACS,OAAO,CAACC,kBAAkB,IAAI,OAAOT,WAAW,KAAK,UAAU,EAAE;MACvEA,WAAW,CACPC,IAAI,CAACS,GAAG,CAAC,UAAAC,GAAG;QAAA,OAAIA,GAAG,CAACC,QAAQ;QAAC,EAC7BC,MAAM,CAACC,IAAI,CAACV,KAAK,CAAC,CACrB;;;;;;;;GAQR,EAAE,CAAC,CAAC,CAACL,KAAK,CAACS,OAAO,CAACC,kBAAkB,EAAEM,IAAI,CAACC,SAAS,CAACZ,KAAK,CAAC,CAAC,CAAC;AACnE;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTableSearchListener.js","sources":["../../../../../../../../../src/primitives/Table/useTableManager/listeners/useTableSearchListener.ts"],"sourcesContent":["import { Table as ReactTable, TableMeta as ReactTableMeta } from '@tanstack/react-table';\nimport { resetHighlightedColumnIndexes } from '../util/search';\nimport { useLocalization } from '../../../../components/Provider/Localization';\nimport { useLazyEffect } from '../../../../hooks/useLazyEffect';\nimport { getHiddenColumns } from '../util/columns';\n\nexport function useTableSearchListener<TType = unknown>(table: ReactTable<TType>) {\n const meta = table.options.meta as ReactTableMeta<TType>;\n const localization = useLocalization();\n const hiddenColumns = getHiddenColumns(table.getState().columnVisibility);\n const query = table.getState().globalFilter;\n\n // Need to re-run search when columns are getting shown/hidden.\n useLazyEffect(() => {\n if (meta.search.isEnabled) {\n const currentFilter = query;\n requestAnimationFrame(() => {\n table.resetGlobalFilter();\n table.setGlobalFilter(currentFilter);\n });\n\n if (meta.search.handleSearch && meta.search.enableGlobalFilter && query) {\n meta.search.handleSearch(query, hiddenColumns);\n }\n }\n }, [hiddenColumns.length]);\n\n // recalculates highlighted indexes whenever something important changes\n useLazyEffect(() => {\n if (meta.search.isEnabled) {\n resetHighlightedColumnIndexes(query, table, localization);\n }\n }, [\n meta.server.loading,\n meta.search.isEnabled,\n meta.search.enableGlobalFilter,\n table.getRowModel().rows.length,\n query,\n JSON.stringify(table.getState().sorting),\n ]);\n}\n"],"names":["useTableSearchListener","table","meta","options","localization","useLocalization","hiddenColumns","getHiddenColumns","getState","columnVisibility","query","globalFilter","useLazyEffect","search","isEnabled","currentFilter","requestAnimationFrame","resetGlobalFilter","setGlobalFilter","handleSearch","enableGlobalFilter","length","resetHighlightedColumnIndexes","server","loading","getRowModel","rows","JSON","stringify","sorting"],"mappings":";;;;;SAMgBA,sBAAsBA,CAAkBC,KAAwB;EAC5E,IAAMC,IAAI,GAAGD,KAAK,CAACE,OAAO,CAACD,IAA6B;EACxD,IAAME,YAAY,GAAGC,eAAe,EAAE;
|
|
1
|
+
{"version":3,"file":"useTableSearchListener.js","sources":["../../../../../../../../../src/primitives/Table/useTableManager/listeners/useTableSearchListener.ts"],"sourcesContent":["import { Table as ReactTable, TableMeta as ReactTableMeta } from '@tanstack/react-table';\nimport { resetHighlightedColumnIndexes } from '../util/search';\nimport { useLocalization } from '../../../../components/Provider/Localization';\nimport { useLazyEffect } from '../../../../hooks/useLazyEffect';\nimport { getHiddenColumns } from '../util/columns';\n\nexport function useTableSearchListener<TType = unknown>(table: ReactTable<TType>) {\n const meta = table.options.meta as ReactTableMeta<TType>;\n const localization = useLocalization();\n\n const hiddenColumns = getHiddenColumns(table.getState().columnVisibility);\n const query = table.getState().globalFilter;\n\n // Need to re-run search when columns are getting shown/hidden.\n useLazyEffect(() => {\n if (meta.search.isEnabled) {\n const currentFilter = query;\n requestAnimationFrame(() => {\n table.resetGlobalFilter();\n table.setGlobalFilter(currentFilter);\n });\n\n if (meta.search.handleSearch && meta.search.enableGlobalFilter && query) {\n meta.search.handleSearch(query, hiddenColumns);\n }\n }\n }, [hiddenColumns.length]);\n\n // recalculates highlighted indexes whenever something important changes\n useLazyEffect(() => {\n if (meta.search.isEnabled) {\n resetHighlightedColumnIndexes(query, table, localization);\n }\n }, [\n meta.server.loading,\n meta.search.isEnabled,\n meta.search.enableGlobalFilter,\n table.getRowModel().rows.length,\n query,\n JSON.stringify(table.getState().sorting),\n ]);\n}\n"],"names":["useTableSearchListener","table","meta","options","localization","useLocalization","hiddenColumns","getHiddenColumns","getState","columnVisibility","query","globalFilter","useLazyEffect","search","isEnabled","currentFilter","requestAnimationFrame","resetGlobalFilter","setGlobalFilter","handleSearch","enableGlobalFilter","length","resetHighlightedColumnIndexes","server","loading","getRowModel","rows","JSON","stringify","sorting"],"mappings":";;;;;SAMgBA,sBAAsBA,CAAkBC,KAAwB;EAC5E,IAAMC,IAAI,GAAGD,KAAK,CAACE,OAAO,CAACD,IAA6B;EACxD,IAAME,YAAY,GAAGC,eAAe,EAAE;EAEtC,IAAMC,aAAa,GAAGC,gBAAgB,CAACN,KAAK,CAACO,QAAQ,EAAE,CAACC,gBAAgB,CAAC;EACzE,IAAMC,KAAK,GAAGT,KAAK,CAACO,QAAQ,EAAE,CAACG,YAAY;;EAG3CC,aAAa,CAAC;IACV,IAAIV,IAAI,CAACW,MAAM,CAACC,SAAS,EAAE;MACvB,IAAMC,aAAa,GAAGL,KAAK;MAC3BM,qBAAqB,CAAC;QAClBf,KAAK,CAACgB,iBAAiB,EAAE;QACzBhB,KAAK,CAACiB,eAAe,CAACH,aAAa,CAAC;OACvC,CAAC;MAEF,IAAIb,IAAI,CAACW,MAAM,CAACM,YAAY,IAAIjB,IAAI,CAACW,MAAM,CAACO,kBAAkB,IAAIV,KAAK,EAAE;QACrER,IAAI,CAACW,MAAM,CAACM,YAAY,CAACT,KAAK,EAAEJ,aAAa,CAAC;;;GAGzD,EAAE,CAACA,aAAa,CAACe,MAAM,CAAC,CAAC;;EAG1BT,aAAa,CAAC;IACV,IAAIV,IAAI,CAACW,MAAM,CAACC,SAAS,EAAE;MACvBQ,6BAA6B,CAACZ,KAAK,EAAET,KAAK,EAAEG,YAAY,CAAC;;GAEhE,EAAE,CACCF,IAAI,CAACqB,MAAM,CAACC,OAAO,EACnBtB,IAAI,CAACW,MAAM,CAACC,SAAS,EACrBZ,IAAI,CAACW,MAAM,CAACO,kBAAkB,EAC9BnB,KAAK,CAACwB,WAAW,EAAE,CAACC,IAAI,CAACL,MAAM,EAC/BX,KAAK,EACLiB,IAAI,CAACC,SAAS,CAAC3B,KAAK,CAACO,QAAQ,EAAE,CAACqB,OAAO,CAAC,CAC3C,CAAC;AACN;;;;"}
|
|
@@ -8,9 +8,9 @@ function useTableServerLoadingListener(table, loadPage) {
|
|
|
8
8
|
if (loadPage) {
|
|
9
9
|
var sorting = table.getState().sorting;
|
|
10
10
|
var columnFilters = table.getState().columnFilters;
|
|
11
|
-
var search = meta.search.enableGlobalFilter ? table.getState().globalFilter : undefined;
|
|
12
11
|
var hiddenColumns = getHiddenColumns(table.getState().columnVisibility);
|
|
13
|
-
|
|
12
|
+
var search = meta.search.enableGlobalFilter ? table.getState().globalFilter : undefined;
|
|
13
|
+
loadPage(0, sorting, columnFilters, hiddenColumns, search);
|
|
14
14
|
}
|
|
15
15
|
}, []);
|
|
16
16
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTableServerLoadingListener.js","sources":["../../../../../../../../../src/primitives/Table/useTableManager/listeners/useTableServerLoadingListener.ts"],"sourcesContent":["import React from 'react';\nimport { Table as ReactTable, TableMeta as ReactTableMeta } from '@tanstack/react-table';\nimport { TableServerLoadPageHandler } from '../../types';\nimport { getHiddenColumns } from '../util/columns';\n\nexport function useTableServerLoadingListener<TType = unknown>(table: ReactTable<TType>, loadPage?: TableServerLoadPageHandler) {\n const meta = table.options.meta as ReactTableMeta<TType>;\n\n // trigger load of the first page on mount\n React.useEffect(() => {\n if (loadPage) {\n const sorting = table.getState().sorting;\n const columnFilters = table.getState().columnFilters;\n const search = meta.search.enableGlobalFilter ? table.getState().globalFilter : undefined;\n
|
|
1
|
+
{"version":3,"file":"useTableServerLoadingListener.js","sources":["../../../../../../../../../src/primitives/Table/useTableManager/listeners/useTableServerLoadingListener.ts"],"sourcesContent":["import React from 'react';\nimport { Table as ReactTable, TableMeta as ReactTableMeta } from '@tanstack/react-table';\nimport { TableServerLoadPageHandler } from '../../types';\nimport { getHiddenColumns } from '../util/columns';\n\nexport function useTableServerLoadingListener<TType = unknown>(table: ReactTable<TType>, loadPage?: TableServerLoadPageHandler) {\n const meta = table.options.meta as ReactTableMeta<TType>;\n\n // trigger load of the first page on mount\n React.useEffect(() => {\n if (loadPage) {\n const sorting = table.getState().sorting;\n const columnFilters = table.getState().columnFilters;\n const hiddenColumns = getHiddenColumns(table.getState().columnVisibility);\n const search = meta.search.enableGlobalFilter ? table.getState().globalFilter : undefined;\n\n loadPage(0, sorting, columnFilters, hiddenColumns, search);\n }\n }, []);\n}\n"],"names":["useTableServerLoadingListener","table","loadPage","meta","options","React","useEffect","sorting","getState","columnFilters","hiddenColumns","getHiddenColumns","columnVisibility","search","enableGlobalFilter","globalFilter","undefined"],"mappings":";;;SAKgBA,6BAA6BA,CAAkBC,KAAwB,EAAEC,QAAqC;EAC1H,IAAMC,IAAI,GAAGF,KAAK,CAACG,OAAO,CAACD,IAA6B;;EAGxDE,cAAK,CAACC,SAAS,CAAC;IACZ,IAAIJ,QAAQ,EAAE;MACV,IAAMK,OAAO,GAAGN,KAAK,CAACO,QAAQ,EAAE,CAACD,OAAO;MACxC,IAAME,aAAa,GAAGR,KAAK,CAACO,QAAQ,EAAE,CAACC,aAAa;MACpD,IAAMC,aAAa,GAAGC,gBAAgB,CAACV,KAAK,CAACO,QAAQ,EAAE,CAACI,gBAAgB,CAAC;MACzE,IAAMC,MAAM,GAAGV,IAAI,CAACU,MAAM,CAACC,kBAAkB,GAAGb,KAAK,CAACO,QAAQ,EAAE,CAACO,YAAY,GAAGC,SAAS;MAEzFd,QAAQ,CAAC,CAAC,EAAEK,OAAO,EAAEE,aAAa,EAAEC,aAAa,EAAEG,MAAM,CAAC;;GAEjE,EAAE,EAAE,CAAC;AACV;;;;"}
|
|
@@ -265,7 +265,8 @@ function configureReactTableOptions(options, props, localization) {
|
|
|
265
265
|
getExpandedRowModel: getExpandedRowModel(),
|
|
266
266
|
getGroupedRowModel: getGroupedRowModel(),
|
|
267
267
|
getRowId: getRowId,
|
|
268
|
-
groupedColumnMode: false
|
|
268
|
+
groupedColumnMode: false,
|
|
269
|
+
keepPinnedRows: false
|
|
269
270
|
};
|
|
270
271
|
if (tableOptions.enableColumnResizing) {
|
|
271
272
|
tableOptions.columnResizeMode = 'onChange';
|