@tanstack/table-core 8.2.1 → 8.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cjs/features/Sorting.js +33 -26
- package/build/cjs/features/Sorting.js.map +1 -1
- package/build/cjs/sortingFns.js +6 -1
- package/build/cjs/sortingFns.js.map +1 -1
- package/build/esm/index.js +39 -27
- package/build/esm/index.js.map +1 -1
- package/build/stats-html.html +1 -1
- package/build/stats-react.json +303 -303
- package/build/types/index.d.ts +1 -0
- package/build/umd/index.development.js +39 -27
- package/build/umd/index.development.js.map +1 -1
- package/build/umd/index.production.js +1 -1
- package/build/umd/index.production.js.map +1 -1
- package/package.json +1 -1
- package/src/features/Sorting.ts +38 -27
- package/src/sortingFns.ts +7 -4
|
@@ -92,18 +92,17 @@ const Sorting = {
|
|
|
92
92
|
// }
|
|
93
93
|
// this needs to be outside of table.setSorting to be in sync with rerender
|
|
94
94
|
const nextSortingOrder = column.getNextSortingOrder();
|
|
95
|
+
const hasManualValue = typeof desc !== 'undefined' && desc !== null;
|
|
95
96
|
table.setSorting(old => {
|
|
96
|
-
var _table$options$enable, _table$options$enable2;
|
|
97
|
-
|
|
98
97
|
// Find any existing sorting for this column
|
|
99
98
|
const existingSorting = old == null ? void 0 : old.find(d => d.id === column.id);
|
|
100
99
|
const existingIndex = old == null ? void 0 : old.findIndex(d => d.id === column.id);
|
|
101
|
-
const hasDescDefined = typeof desc !== 'undefined' && desc !== null;
|
|
102
100
|
let newSorting = []; // What should we do with this sort action?
|
|
103
101
|
|
|
104
102
|
let sortAction;
|
|
103
|
+
let nextDesc = hasManualValue ? desc : nextSortingOrder === 'desc'; // Multi-mode
|
|
105
104
|
|
|
106
|
-
if (column.getCanMultiSort() && multi) {
|
|
105
|
+
if (old != null && old.length && column.getCanMultiSort() && multi) {
|
|
107
106
|
if (existingSorting) {
|
|
108
107
|
sortAction = 'toggle';
|
|
109
108
|
} else {
|
|
@@ -121,63 +120,71 @@ const Sorting = {
|
|
|
121
120
|
} // Handle toggle states that will remove the sorting
|
|
122
121
|
|
|
123
122
|
|
|
124
|
-
if (sortAction === 'toggle'
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
123
|
+
if (sortAction === 'toggle') {
|
|
124
|
+
// If we are "actually" toggling (not a manual set value), should we remove the sorting?
|
|
125
|
+
if (!hasManualValue) {
|
|
126
|
+
// Is our intention to remove?
|
|
127
|
+
if (!nextSortingOrder) {
|
|
128
|
+
sortAction = 'remove';
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
131
|
}
|
|
132
132
|
|
|
133
|
-
if (sortAction === '
|
|
134
|
-
newSorting = [{
|
|
135
|
-
id: column.id,
|
|
136
|
-
desc: hasDescDefined ? desc : nextSortingOrder === 'desc'
|
|
137
|
-
}];
|
|
138
|
-
} else if (sortAction === 'add' && old != null && old.length) {
|
|
133
|
+
if (sortAction === 'add') {
|
|
139
134
|
var _table$options$maxMul;
|
|
140
135
|
|
|
141
136
|
newSorting = [...old, {
|
|
142
137
|
id: column.id,
|
|
143
|
-
desc:
|
|
138
|
+
desc: nextDesc
|
|
144
139
|
}]; // Take latest n columns
|
|
145
140
|
|
|
146
141
|
newSorting.splice(0, newSorting.length - ((_table$options$maxMul = table.options.maxMultiSortColCount) != null ? _table$options$maxMul : Number.MAX_SAFE_INTEGER));
|
|
147
|
-
} else if (sortAction === 'toggle'
|
|
142
|
+
} else if (sortAction === 'toggle') {
|
|
148
143
|
// This flips (or sets) the
|
|
149
144
|
newSorting = old.map(d => {
|
|
150
145
|
if (d.id === column.id) {
|
|
151
146
|
return { ...d,
|
|
152
|
-
desc:
|
|
147
|
+
desc: nextDesc
|
|
153
148
|
};
|
|
154
149
|
}
|
|
155
150
|
|
|
156
151
|
return d;
|
|
157
152
|
});
|
|
158
|
-
} else if (sortAction === 'remove'
|
|
153
|
+
} else if (sortAction === 'remove') {
|
|
159
154
|
newSorting = old.filter(d => d.id !== column.id);
|
|
155
|
+
} else {
|
|
156
|
+
newSorting = [{
|
|
157
|
+
id: column.id,
|
|
158
|
+
desc: nextDesc
|
|
159
|
+
}];
|
|
160
160
|
}
|
|
161
161
|
|
|
162
162
|
return newSorting;
|
|
163
163
|
});
|
|
164
164
|
},
|
|
165
|
-
|
|
165
|
+
getFirstSortDir: () => {
|
|
166
166
|
var _ref, _column$columnDef$sor;
|
|
167
167
|
|
|
168
168
|
const sortDescFirst = (_ref = (_column$columnDef$sor = column.columnDef.sortDescFirst) != null ? _column$columnDef$sor : table.options.sortDescFirst) != null ? _ref : column.getAutoSortDir() === 'desc';
|
|
169
|
-
|
|
169
|
+
return sortDescFirst ? 'desc' : 'asc';
|
|
170
|
+
},
|
|
171
|
+
getNextSortingOrder: multi => {
|
|
172
|
+
var _table$options$enable, _table$options$enable2;
|
|
173
|
+
|
|
174
|
+
const firstSortDirection = column.getFirstSortDir();
|
|
170
175
|
const isSorted = column.getIsSorted();
|
|
171
176
|
|
|
172
177
|
if (!isSorted) {
|
|
173
178
|
return firstSortDirection;
|
|
174
179
|
}
|
|
175
180
|
|
|
176
|
-
if (isSorted
|
|
177
|
-
|
|
178
|
-
|
|
181
|
+
if (isSorted !== firstSortDirection && ((_table$options$enable = table.options.enableSortingRemoval) != null ? _table$options$enable : true) && ( // If enableSortRemove, enable in general
|
|
182
|
+
multi ? (_table$options$enable2 = table.options.enableMultiRemove) != null ? _table$options$enable2 : true : true) // If multi, don't allow if enableMultiRemove))
|
|
183
|
+
) {
|
|
179
184
|
return false;
|
|
180
185
|
}
|
|
186
|
+
|
|
187
|
+
return isSorted === 'desc' ? 'asc' : 'desc';
|
|
181
188
|
},
|
|
182
189
|
getCanSort: () => {
|
|
183
190
|
var _column$columnDef$ena, _table$options$enable3;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Sorting.js","sources":["../../../src/features/Sorting.ts"],"sourcesContent":["import { RowModel } from '..'\nimport { TableFeature } from '../core/table'\nimport {\n BuiltInSortingFn,\n reSplitAlphaNumeric,\n sortingFns,\n} from '../sortingFns'\n\nimport {\n Column,\n OnChangeFn,\n TableGenerics,\n Table,\n Row,\n Updater,\n RowData,\n} from '../types'\n\nimport { isFunction, makeStateUpdater, Overwrite } from '../utils'\n\nexport type SortDirection = 'asc' | 'desc'\n\nexport type ColumnSort = {\n id: string\n desc: boolean\n}\n\nexport type SortingState = ColumnSort[]\n\nexport type SortingTableState = {\n sorting: SortingState\n}\n\nexport type SortingFn<TData extends RowData> = {\n (rowA: Row<TData>, rowB: Row<TData>, columnId: string): number\n}\n\nexport type CustomSortingFns<TData extends RowData> = Record<\n string,\n SortingFn<TData>\n>\n\nexport type SortingFnOption<TData extends RowData> =\n | 'auto'\n | BuiltInSortingFn\n | SortingFn<TData>\n\nexport type SortingColumnDef<TData extends RowData> = {\n sortingFn?: SortingFnOption<TData>\n sortDescFirst?: boolean\n enableSorting?: boolean\n enableMultiSort?: boolean\n invertSorting?: boolean\n sortUndefined?: false | -1 | 1\n}\n\nexport type SortingColumn<TData extends RowData> = {\n getAutoSortingFn: () => SortingFn<TData>\n getAutoSortDir: () => SortDirection\n getSortingFn: () => SortingFn<TData>\n getNextSortingOrder: () => SortDirection | false\n getCanSort: () => boolean\n getCanMultiSort: () => boolean\n getSortIndex: () => number\n getIsSorted: () => false | SortDirection\n clearSorting: () => void\n toggleSorting: (desc?: boolean, isMulti?: boolean) => void\n getToggleSortingHandler: () => undefined | ((event: unknown) => void)\n}\n\nexport type SortingOptions<TData extends RowData> = {\n manualSorting?: boolean\n onSortingChange?: OnChangeFn<SortingState>\n enableSorting?: boolean\n enableSortingRemoval?: boolean\n enableMultiRemove?: boolean\n enableMultiSort?: boolean\n sortDescFirst?: boolean\n getSortedRowModel?: (table: Table<any>) => () => RowModel<any>\n maxMultiSortColCount?: number\n isMultiSortEvent?: (e: unknown) => boolean\n}\n\nexport type SortingInstance<TData extends RowData> = {\n setSorting: (updater: Updater<SortingState>) => void\n resetSorting: (defaultState?: boolean) => void\n getPreSortedRowModel: () => RowModel<TData>\n getSortedRowModel: () => RowModel<TData>\n _getSortedRowModel?: () => RowModel<TData>\n}\n\n//\n\nexport const Sorting: TableFeature = {\n getInitialState: (state): SortingTableState => {\n return {\n sorting: [],\n ...state,\n }\n },\n\n getDefaultColumnDef: <TData extends RowData>(): SortingColumnDef<TData> => {\n return {\n sortingFn: 'auto',\n }\n },\n\n getDefaultOptions: <TData extends RowData>(\n table: Table<TData>\n ): SortingOptions<TData> => {\n return {\n onSortingChange: makeStateUpdater('sorting', table),\n isMultiSortEvent: (e: unknown) => {\n return (e as MouseEvent).shiftKey\n },\n }\n },\n\n createColumn: <TData extends RowData, TValue>(\n column: Column<TData, TValue>,\n table: Table<TData>\n ): SortingColumn<TData> => {\n return {\n getAutoSortingFn: () => {\n const firstRows = table.getFilteredRowModel().flatRows.slice(10)\n\n let isString = false\n\n for (const row of firstRows) {\n const value = row?.getValue(column.id)\n\n if (Object.prototype.toString.call(value) === '[object Date]') {\n return sortingFns.datetime\n }\n\n if (typeof value === 'string') {\n isString = true\n\n if (value.split(reSplitAlphaNumeric).length > 1) {\n return sortingFns.alphanumeric\n }\n }\n }\n\n if (isString) {\n return sortingFns.text\n }\n\n return sortingFns.basic\n },\n getAutoSortDir: () => {\n const firstRow = table.getFilteredRowModel().flatRows[0]\n\n const value = firstRow?.getValue(column.id)\n\n if (typeof value === 'string') {\n return 'asc'\n }\n\n return 'desc'\n },\n getSortingFn: () => {\n if (!column) {\n throw new Error()\n }\n\n return isFunction(column.columnDef.sortingFn)\n ? column.columnDef.sortingFn\n : column.columnDef.sortingFn === 'auto'\n ? column.getAutoSortingFn()\n : (sortingFns[\n column.columnDef.sortingFn as BuiltInSortingFn\n ] as SortingFn<TData>)\n },\n toggleSorting: (desc, multi) => {\n // if (column.columns.length) {\n // column.columns.forEach((c, i) => {\n // if (c.id) {\n // table.toggleColumnSorting(c.id, undefined, multi || !!i)\n // }\n // })\n // return\n // }\n\n // this needs to be outside of table.setSorting to be in sync with rerender\n const nextSortingOrder = column.getNextSortingOrder()\n\n table.setSorting(old => {\n // Find any existing sorting for this column\n const existingSorting = old?.find(d => d.id === column.id)\n const existingIndex = old?.findIndex(d => d.id === column.id)\n const hasDescDefined = typeof desc !== 'undefined' && desc !== null\n\n let newSorting: SortingState = []\n\n // What should we do with this sort action?\n let sortAction: 'add' | 'remove' | 'toggle' | 'replace'\n\n if (column.getCanMultiSort() && multi) {\n if (existingSorting) {\n sortAction = 'toggle'\n } else {\n sortAction = 'add'\n }\n } else {\n // Normal mode\n if (old?.length && existingIndex !== old.length - 1) {\n sortAction = 'replace'\n } else if (existingSorting) {\n sortAction = 'toggle'\n } else {\n sortAction = 'replace'\n }\n }\n\n // Handle toggle states that will remove the sorting\n if (\n sortAction === 'toggle' && // Must be toggling\n (table.options.enableSortingRemoval ?? true) && // If enableSortRemove, enable in general\n !hasDescDefined && // Must not be setting desc\n (multi ? table.options.enableMultiRemove ?? true : true) && // If multi, don't allow if enableMultiRemove\n !nextSortingOrder // Finally, detect if it should indeed be removed\n ) {\n sortAction = 'remove'\n }\n\n if (sortAction === 'replace') {\n newSorting = [\n {\n id: column.id,\n desc: hasDescDefined ? desc! : nextSortingOrder! === 'desc',\n },\n ]\n } else if (sortAction === 'add' && old?.length) {\n newSorting = [\n ...old,\n {\n id: column.id,\n desc: hasDescDefined ? desc! : nextSortingOrder! === 'desc',\n },\n ]\n // Take latest n columns\n newSorting.splice(\n 0,\n newSorting.length -\n (table.options.maxMultiSortColCount ?? Number.MAX_SAFE_INTEGER)\n )\n } else if (sortAction === 'toggle' && old?.length) {\n // This flips (or sets) the\n newSorting = old.map(d => {\n if (d.id === column.id) {\n return {\n ...d,\n desc: hasDescDefined ? desc! : nextSortingOrder! === 'desc',\n }\n }\n return d\n })\n } else if (sortAction === 'remove' && old?.length) {\n newSorting = old.filter(d => d.id !== column.id)\n }\n\n return newSorting\n })\n },\n\n getNextSortingOrder: () => {\n const sortDescFirst =\n column.columnDef.sortDescFirst ??\n table.options.sortDescFirst ??\n column.getAutoSortDir() === 'desc'\n const firstSortDirection = sortDescFirst ? 'desc' : 'asc'\n\n const isSorted = column.getIsSorted()\n if (!isSorted) {\n return firstSortDirection\n }\n if (isSorted === firstSortDirection) {\n return isSorted === 'desc' ? 'asc' : 'desc'\n } else {\n return false\n }\n },\n\n getCanSort: () => {\n return (\n (column.columnDef.enableSorting ?? true) &&\n (table.options.enableSorting ?? true) &&\n !!column.accessorFn\n )\n },\n\n getCanMultiSort: () => {\n return (\n column.columnDef.enableMultiSort ??\n table.options.enableMultiSort ??\n !!column.accessorFn\n )\n },\n\n getIsSorted: () => {\n const columnSort = table\n .getState()\n .sorting?.find(d => d.id === column.id)\n\n return !columnSort ? false : columnSort.desc ? 'desc' : 'asc'\n },\n\n getSortIndex: () =>\n table.getState().sorting?.findIndex(d => d.id === column.id) ?? -1,\n\n clearSorting: () => {\n //clear sorting for just 1 column\n table.setSorting(old =>\n old?.length ? old.filter(d => d.id !== column.id) : []\n )\n },\n\n getToggleSortingHandler: () => {\n const canSort = column.getCanSort()\n\n return (e: unknown) => {\n if (!canSort) return\n ;(e as any).persist?.()\n column.toggleSorting?.(\n undefined,\n column.getCanMultiSort()\n ? table.options.isMultiSortEvent?.(e)\n : false\n )\n }\n },\n }\n },\n\n createTable: <TData extends RowData>(\n table: Table<TData>\n ): SortingInstance<TData> => {\n return {\n setSorting: updater => table.options.onSortingChange?.(updater),\n resetSorting: defaultState => {\n table.setSorting(defaultState ? [] : table.initialState?.sorting ?? [])\n },\n getPreSortedRowModel: () => table.getGroupedRowModel(),\n getSortedRowModel: () => {\n if (!table._getSortedRowModel && table.options.getSortedRowModel) {\n table._getSortedRowModel = table.options.getSortedRowModel(table)\n }\n\n if (table.options.manualSorting || !table._getSortedRowModel) {\n return table.getPreSortedRowModel()\n }\n\n return table._getSortedRowModel()\n },\n }\n },\n}\n"],"names":["Sorting","getInitialState","state","sorting","getDefaultColumnDef","sortingFn","getDefaultOptions","table","onSortingChange","makeStateUpdater","isMultiSortEvent","e","shiftKey","createColumn","column","getAutoSortingFn","firstRows","getFilteredRowModel","flatRows","slice","isString","row","value","getValue","id","Object","prototype","toString","call","sortingFns","datetime","split","reSplitAlphaNumeric","length","alphanumeric","text","basic","getAutoSortDir","firstRow","getSortingFn","Error","isFunction","columnDef","toggleSorting","desc","multi","nextSortingOrder","getNextSortingOrder","setSorting","old","existingSorting","find","d","existingIndex","findIndex","hasDescDefined","newSorting","sortAction","getCanMultiSort","options","enableSortingRemoval","enableMultiRemove","splice","maxMultiSortColCount","Number","MAX_SAFE_INTEGER","map","filter","sortDescFirst","firstSortDirection","isSorted","getIsSorted","getCanSort","enableSorting","accessorFn","enableMultiSort","columnSort","getState","getSortIndex","clearSorting","getToggleSortingHandler","canSort","persist","undefined","createTable","updater","resetSorting","defaultState","initialState","getPreSortedRowModel","getGroupedRowModel","getSortedRowModel","_getSortedRowModel","manualSorting"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Sorting.js","sources":["../../../src/features/Sorting.ts"],"sourcesContent":["import { RowModel } from '..'\nimport { TableFeature } from '../core/table'\nimport {\n BuiltInSortingFn,\n reSplitAlphaNumeric,\n sortingFns,\n} from '../sortingFns'\n\nimport {\n Column,\n OnChangeFn,\n TableGenerics,\n Table,\n Row,\n Updater,\n RowData,\n} from '../types'\n\nimport { isFunction, makeStateUpdater, Overwrite } from '../utils'\n\nexport type SortDirection = 'asc' | 'desc'\n\nexport type ColumnSort = {\n id: string\n desc: boolean\n}\n\nexport type SortingState = ColumnSort[]\n\nexport type SortingTableState = {\n sorting: SortingState\n}\n\nexport type SortingFn<TData extends RowData> = {\n (rowA: Row<TData>, rowB: Row<TData>, columnId: string): number\n}\n\nexport type CustomSortingFns<TData extends RowData> = Record<\n string,\n SortingFn<TData>\n>\n\nexport type SortingFnOption<TData extends RowData> =\n | 'auto'\n | BuiltInSortingFn\n | SortingFn<TData>\n\nexport type SortingColumnDef<TData extends RowData> = {\n sortingFn?: SortingFnOption<TData>\n sortDescFirst?: boolean\n enableSorting?: boolean\n enableMultiSort?: boolean\n invertSorting?: boolean\n sortUndefined?: false | -1 | 1\n}\n\nexport type SortingColumn<TData extends RowData> = {\n getAutoSortingFn: () => SortingFn<TData>\n getAutoSortDir: () => SortDirection\n getSortingFn: () => SortingFn<TData>\n getFirstSortDir: () => SortDirection\n getNextSortingOrder: () => SortDirection | false\n getCanSort: () => boolean\n getCanMultiSort: () => boolean\n getSortIndex: () => number\n getIsSorted: () => false | SortDirection\n clearSorting: () => void\n toggleSorting: (desc?: boolean, isMulti?: boolean) => void\n getToggleSortingHandler: () => undefined | ((event: unknown) => void)\n}\n\nexport type SortingOptions<TData extends RowData> = {\n manualSorting?: boolean\n onSortingChange?: OnChangeFn<SortingState>\n enableSorting?: boolean\n enableSortingRemoval?: boolean\n enableMultiRemove?: boolean\n enableMultiSort?: boolean\n sortDescFirst?: boolean\n getSortedRowModel?: (table: Table<any>) => () => RowModel<any>\n maxMultiSortColCount?: number\n isMultiSortEvent?: (e: unknown) => boolean\n}\n\nexport type SortingInstance<TData extends RowData> = {\n setSorting: (updater: Updater<SortingState>) => void\n resetSorting: (defaultState?: boolean) => void\n getPreSortedRowModel: () => RowModel<TData>\n getSortedRowModel: () => RowModel<TData>\n _getSortedRowModel?: () => RowModel<TData>\n}\n\n//\n\nexport const Sorting: TableFeature = {\n getInitialState: (state): SortingTableState => {\n return {\n sorting: [],\n ...state,\n }\n },\n\n getDefaultColumnDef: <TData extends RowData>(): SortingColumnDef<TData> => {\n return {\n sortingFn: 'auto',\n }\n },\n\n getDefaultOptions: <TData extends RowData>(\n table: Table<TData>\n ): SortingOptions<TData> => {\n return {\n onSortingChange: makeStateUpdater('sorting', table),\n isMultiSortEvent: (e: unknown) => {\n return (e as MouseEvent).shiftKey\n },\n }\n },\n\n createColumn: <TData extends RowData, TValue>(\n column: Column<TData, TValue>,\n table: Table<TData>\n ): SortingColumn<TData> => {\n return {\n getAutoSortingFn: () => {\n const firstRows = table.getFilteredRowModel().flatRows.slice(10)\n\n let isString = false\n\n for (const row of firstRows) {\n const value = row?.getValue(column.id)\n\n if (Object.prototype.toString.call(value) === '[object Date]') {\n return sortingFns.datetime\n }\n\n if (typeof value === 'string') {\n isString = true\n\n if (value.split(reSplitAlphaNumeric).length > 1) {\n return sortingFns.alphanumeric\n }\n }\n }\n\n if (isString) {\n return sortingFns.text\n }\n\n return sortingFns.basic\n },\n getAutoSortDir: () => {\n const firstRow = table.getFilteredRowModel().flatRows[0]\n\n const value = firstRow?.getValue(column.id)\n\n if (typeof value === 'string') {\n return 'asc'\n }\n\n return 'desc'\n },\n getSortingFn: () => {\n if (!column) {\n throw new Error()\n }\n\n return isFunction(column.columnDef.sortingFn)\n ? column.columnDef.sortingFn\n : column.columnDef.sortingFn === 'auto'\n ? column.getAutoSortingFn()\n : (sortingFns[\n column.columnDef.sortingFn as BuiltInSortingFn\n ] as SortingFn<TData>)\n },\n toggleSorting: (desc, multi) => {\n // if (column.columns.length) {\n // column.columns.forEach((c, i) => {\n // if (c.id) {\n // table.toggleColumnSorting(c.id, undefined, multi || !!i)\n // }\n // })\n // return\n // }\n\n // this needs to be outside of table.setSorting to be in sync with rerender\n const nextSortingOrder = column.getNextSortingOrder()\n const hasManualValue = typeof desc !== 'undefined' && desc !== null\n\n table.setSorting(old => {\n // Find any existing sorting for this column\n const existingSorting = old?.find(d => d.id === column.id)\n const existingIndex = old?.findIndex(d => d.id === column.id)\n\n let newSorting: SortingState = []\n\n // What should we do with this sort action?\n let sortAction: 'add' | 'remove' | 'toggle' | 'replace'\n let nextDesc = hasManualValue ? desc : nextSortingOrder === 'desc'\n\n // Multi-mode\n if (old?.length && column.getCanMultiSort() && multi) {\n if (existingSorting) {\n sortAction = 'toggle'\n } else {\n sortAction = 'add'\n }\n } else {\n // Normal mode\n if (old?.length && existingIndex !== old.length - 1) {\n sortAction = 'replace'\n } else if (existingSorting) {\n sortAction = 'toggle'\n } else {\n sortAction = 'replace'\n }\n }\n\n // Handle toggle states that will remove the sorting\n if (sortAction === 'toggle') {\n // If we are \"actually\" toggling (not a manual set value), should we remove the sorting?\n if (!hasManualValue) {\n // Is our intention to remove?\n if (!nextSortingOrder) {\n sortAction = 'remove'\n }\n }\n }\n\n if (sortAction === 'add') {\n newSorting = [\n ...old,\n {\n id: column.id,\n desc: nextDesc,\n },\n ]\n // Take latest n columns\n newSorting.splice(\n 0,\n newSorting.length -\n (table.options.maxMultiSortColCount ?? Number.MAX_SAFE_INTEGER)\n )\n } else if (sortAction === 'toggle') {\n // This flips (or sets) the\n newSorting = old.map(d => {\n if (d.id === column.id) {\n return {\n ...d,\n desc: nextDesc,\n }\n }\n return d\n })\n } else if (sortAction === 'remove') {\n newSorting = old.filter(d => d.id !== column.id)\n } else {\n newSorting = [\n {\n id: column.id,\n desc: nextDesc,\n },\n ]\n }\n\n return newSorting\n })\n },\n\n getFirstSortDir: () => {\n const sortDescFirst =\n column.columnDef.sortDescFirst ??\n table.options.sortDescFirst ??\n column.getAutoSortDir() === 'desc'\n return sortDescFirst ? 'desc' : 'asc'\n },\n\n getNextSortingOrder: (multi?: boolean) => {\n const firstSortDirection = column.getFirstSortDir()\n const isSorted = column.getIsSorted()\n\n if (!isSorted) {\n return firstSortDirection\n }\n\n if (\n isSorted !== firstSortDirection &&\n (table.options.enableSortingRemoval ?? true) && // If enableSortRemove, enable in general\n (multi ? table.options.enableMultiRemove ?? true : true) // If multi, don't allow if enableMultiRemove))\n ) {\n return false\n }\n return isSorted === 'desc' ? 'asc' : 'desc'\n },\n\n getCanSort: () => {\n return (\n (column.columnDef.enableSorting ?? true) &&\n (table.options.enableSorting ?? true) &&\n !!column.accessorFn\n )\n },\n\n getCanMultiSort: () => {\n return (\n column.columnDef.enableMultiSort ??\n table.options.enableMultiSort ??\n !!column.accessorFn\n )\n },\n\n getIsSorted: () => {\n const columnSort = table\n .getState()\n .sorting?.find(d => d.id === column.id)\n\n return !columnSort ? false : columnSort.desc ? 'desc' : 'asc'\n },\n\n getSortIndex: () =>\n table.getState().sorting?.findIndex(d => d.id === column.id) ?? -1,\n\n clearSorting: () => {\n //clear sorting for just 1 column\n table.setSorting(old =>\n old?.length ? old.filter(d => d.id !== column.id) : []\n )\n },\n\n getToggleSortingHandler: () => {\n const canSort = column.getCanSort()\n\n return (e: unknown) => {\n if (!canSort) return\n ;(e as any).persist?.()\n column.toggleSorting?.(\n undefined,\n column.getCanMultiSort()\n ? table.options.isMultiSortEvent?.(e)\n : false\n )\n }\n },\n }\n },\n\n createTable: <TData extends RowData>(\n table: Table<TData>\n ): SortingInstance<TData> => {\n return {\n setSorting: updater => table.options.onSortingChange?.(updater),\n resetSorting: defaultState => {\n table.setSorting(defaultState ? [] : table.initialState?.sorting ?? [])\n },\n getPreSortedRowModel: () => table.getGroupedRowModel(),\n getSortedRowModel: () => {\n if (!table._getSortedRowModel && table.options.getSortedRowModel) {\n table._getSortedRowModel = table.options.getSortedRowModel(table)\n }\n\n if (table.options.manualSorting || !table._getSortedRowModel) {\n return table.getPreSortedRowModel()\n }\n\n return table._getSortedRowModel()\n },\n }\n },\n}\n"],"names":["Sorting","getInitialState","state","sorting","getDefaultColumnDef","sortingFn","getDefaultOptions","table","onSortingChange","makeStateUpdater","isMultiSortEvent","e","shiftKey","createColumn","column","getAutoSortingFn","firstRows","getFilteredRowModel","flatRows","slice","isString","row","value","getValue","id","Object","prototype","toString","call","sortingFns","datetime","split","reSplitAlphaNumeric","length","alphanumeric","text","basic","getAutoSortDir","firstRow","getSortingFn","Error","isFunction","columnDef","toggleSorting","desc","multi","nextSortingOrder","getNextSortingOrder","hasManualValue","setSorting","old","existingSorting","find","d","existingIndex","findIndex","newSorting","sortAction","nextDesc","getCanMultiSort","splice","options","maxMultiSortColCount","Number","MAX_SAFE_INTEGER","map","filter","getFirstSortDir","sortDescFirst","firstSortDirection","isSorted","getIsSorted","enableSortingRemoval","enableMultiRemove","getCanSort","enableSorting","accessorFn","enableMultiSort","columnSort","getState","getSortIndex","clearSorting","getToggleSortingHandler","canSort","persist","undefined","createTable","updater","resetSorting","defaultState","initialState","getPreSortedRowModel","getGroupedRowModel","getSortedRowModel","_getSortedRowModel","manualSorting"],"mappings":"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"}
|
package/build/cjs/sortingFns.js
CHANGED
|
@@ -35,7 +35,12 @@ const textCaseSensitive = (rowA, rowB, columnId) => {
|
|
|
35
35
|
};
|
|
36
36
|
|
|
37
37
|
const datetime = (rowA, rowB, columnId) => {
|
|
38
|
-
|
|
38
|
+
const a = rowA.getValue(columnId);
|
|
39
|
+
const b = rowB.getValue(columnId); // Can handle nullish values
|
|
40
|
+
// Use > and < because == (and ===) doesn't work with
|
|
41
|
+
// Date objects (would require calling getTime()).
|
|
42
|
+
|
|
43
|
+
return a > b ? 1 : a < b ? -1 : 0;
|
|
39
44
|
};
|
|
40
45
|
|
|
41
46
|
const basic = (rowA, rowB, columnId) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sortingFns.js","sources":["../../src/sortingFns.ts"],"sourcesContent":["import { SortingFn } from './features/Sorting'\n\nexport const reSplitAlphaNumeric = /([0-9]+)/gm\n\nconst alphanumeric: SortingFn<any> = (rowA, rowB, columnId) => {\n return compareAlphanumeric(\n toString(rowA.getValue(columnId)).toLowerCase(),\n toString(rowB.getValue(columnId)).toLowerCase()\n )\n}\n\nconst alphanumericCaseSensitive: SortingFn<any> = (rowA, rowB, columnId) => {\n return compareAlphanumeric(\n toString(rowA.getValue(columnId)),\n toString(rowB.getValue(columnId))\n )\n}\n\n// The text filter is more basic (less numeric support)\n// but is much faster\nconst text: SortingFn<any> = (rowA, rowB, columnId) => {\n return compareBasic(\n toString(rowA.getValue(columnId)).toLowerCase(),\n toString(rowB.getValue(columnId)).toLowerCase()\n )\n}\n\n// The text filter is more basic (less numeric support)\n// but is much faster\nconst textCaseSensitive: SortingFn<any> = (rowA, rowB, columnId) => {\n return compareBasic(\n toString(rowA.getValue(columnId)),\n toString(rowB.getValue(columnId))\n )\n}\n\nconst datetime: SortingFn<any> = (rowA, rowB, columnId) => {\n
|
|
1
|
+
{"version":3,"file":"sortingFns.js","sources":["../../src/sortingFns.ts"],"sourcesContent":["import { SortingFn } from './features/Sorting'\n\nexport const reSplitAlphaNumeric = /([0-9]+)/gm\n\nconst alphanumeric: SortingFn<any> = (rowA, rowB, columnId) => {\n return compareAlphanumeric(\n toString(rowA.getValue(columnId)).toLowerCase(),\n toString(rowB.getValue(columnId)).toLowerCase()\n )\n}\n\nconst alphanumericCaseSensitive: SortingFn<any> = (rowA, rowB, columnId) => {\n return compareAlphanumeric(\n toString(rowA.getValue(columnId)),\n toString(rowB.getValue(columnId))\n )\n}\n\n// The text filter is more basic (less numeric support)\n// but is much faster\nconst text: SortingFn<any> = (rowA, rowB, columnId) => {\n return compareBasic(\n toString(rowA.getValue(columnId)).toLowerCase(),\n toString(rowB.getValue(columnId)).toLowerCase()\n )\n}\n\n// The text filter is more basic (less numeric support)\n// but is much faster\nconst textCaseSensitive: SortingFn<any> = (rowA, rowB, columnId) => {\n return compareBasic(\n toString(rowA.getValue(columnId)),\n toString(rowB.getValue(columnId))\n )\n}\n\nconst datetime: SortingFn<any> = (rowA, rowB, columnId) => {\n const a = rowA.getValue<Date>(columnId)\n const b = rowB.getValue<Date>(columnId)\n\n // Can handle nullish values\n // Use > and < because == (and ===) doesn't work with\n // Date objects (would require calling getTime()).\n return a > b ? 1 : a < b ? -1 : 0\n}\n\nconst basic: SortingFn<any> = (rowA, rowB, columnId) => {\n return compareBasic(rowA.getValue(columnId), rowB.getValue(columnId))\n}\n\n// Utils\n\nfunction compareBasic(a: any, b: any) {\n return a === b ? 0 : a > b ? 1 : -1\n}\n\nfunction toString(a: any) {\n if (typeof a === 'number') {\n if (isNaN(a) || a === Infinity || a === -Infinity) {\n return ''\n }\n return String(a)\n }\n if (typeof a === 'string') {\n return a\n }\n return ''\n}\n\n// Mixed sorting is slow, but very inclusive of many edge cases.\n// It handles numbers, mixed alphanumeric combinations, and even\n// null, undefined, and Infinity\nfunction compareAlphanumeric(aStr: string, bStr: string) {\n // Split on number groups, but keep the delimiter\n // Then remove falsey split values\n const a = aStr.split(reSplitAlphaNumeric).filter(Boolean)\n const b = bStr.split(reSplitAlphaNumeric).filter(Boolean)\n\n // While\n while (a.length && b.length) {\n const aa = a.shift()!\n const bb = b.shift()!\n\n const an = parseInt(aa, 10)\n const bn = parseInt(bb, 10)\n\n const combo = [an, bn].sort()\n\n // Both are string\n if (isNaN(combo[0]!)) {\n if (aa > bb) {\n return 1\n }\n if (bb > aa) {\n return -1\n }\n continue\n }\n\n // One is a string, one is a number\n if (isNaN(combo[1]!)) {\n return isNaN(an) ? -1 : 1\n }\n\n // Both are numbers\n if (an > bn) {\n return 1\n }\n if (bn > an) {\n return -1\n }\n }\n\n return a.length - b.length\n}\n\n// Exports\n\nexport const sortingFns = {\n alphanumeric,\n alphanumericCaseSensitive,\n text,\n textCaseSensitive,\n datetime,\n basic,\n}\n\nexport type BuiltInSortingFn = keyof typeof sortingFns\n"],"names":["reSplitAlphaNumeric","alphanumeric","rowA","rowB","columnId","compareAlphanumeric","toString","getValue","toLowerCase","alphanumericCaseSensitive","text","compareBasic","textCaseSensitive","datetime","a","b","basic","isNaN","Infinity","String","aStr","bStr","split","filter","Boolean","length","aa","shift","bb","an","parseInt","bn","combo","sort","sortingFns"],"mappings":"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"}
|
package/build/esm/index.js
CHANGED
|
@@ -2349,7 +2349,12 @@ const textCaseSensitive = (rowA, rowB, columnId) => {
|
|
|
2349
2349
|
};
|
|
2350
2350
|
|
|
2351
2351
|
const datetime = (rowA, rowB, columnId) => {
|
|
2352
|
-
|
|
2352
|
+
const a = rowA.getValue(columnId);
|
|
2353
|
+
const b = rowB.getValue(columnId); // Can handle nullish values
|
|
2354
|
+
// Use > and < because == (and ===) doesn't work with
|
|
2355
|
+
// Date objects (would require calling getTime()).
|
|
2356
|
+
|
|
2357
|
+
return a > b ? 1 : a < b ? -1 : 0;
|
|
2353
2358
|
};
|
|
2354
2359
|
|
|
2355
2360
|
const basic = (rowA, rowB, columnId) => {
|
|
@@ -2510,18 +2515,17 @@ const Sorting = {
|
|
|
2510
2515
|
// }
|
|
2511
2516
|
// this needs to be outside of table.setSorting to be in sync with rerender
|
|
2512
2517
|
const nextSortingOrder = column.getNextSortingOrder();
|
|
2518
|
+
const hasManualValue = typeof desc !== 'undefined' && desc !== null;
|
|
2513
2519
|
table.setSorting(old => {
|
|
2514
|
-
var _table$options$enable, _table$options$enable2;
|
|
2515
|
-
|
|
2516
2520
|
// Find any existing sorting for this column
|
|
2517
2521
|
const existingSorting = old == null ? void 0 : old.find(d => d.id === column.id);
|
|
2518
2522
|
const existingIndex = old == null ? void 0 : old.findIndex(d => d.id === column.id);
|
|
2519
|
-
const hasDescDefined = typeof desc !== 'undefined' && desc !== null;
|
|
2520
2523
|
let newSorting = []; // What should we do with this sort action?
|
|
2521
2524
|
|
|
2522
2525
|
let sortAction;
|
|
2526
|
+
let nextDesc = hasManualValue ? desc : nextSortingOrder === 'desc'; // Multi-mode
|
|
2523
2527
|
|
|
2524
|
-
if (column.getCanMultiSort() && multi) {
|
|
2528
|
+
if (old != null && old.length && column.getCanMultiSort() && multi) {
|
|
2525
2529
|
if (existingSorting) {
|
|
2526
2530
|
sortAction = 'toggle';
|
|
2527
2531
|
} else {
|
|
@@ -2539,63 +2543,71 @@ const Sorting = {
|
|
|
2539
2543
|
} // Handle toggle states that will remove the sorting
|
|
2540
2544
|
|
|
2541
2545
|
|
|
2542
|
-
if (sortAction === 'toggle'
|
|
2543
|
-
|
|
2544
|
-
|
|
2545
|
-
|
|
2546
|
-
|
|
2547
|
-
|
|
2548
|
-
|
|
2546
|
+
if (sortAction === 'toggle') {
|
|
2547
|
+
// If we are "actually" toggling (not a manual set value), should we remove the sorting?
|
|
2548
|
+
if (!hasManualValue) {
|
|
2549
|
+
// Is our intention to remove?
|
|
2550
|
+
if (!nextSortingOrder) {
|
|
2551
|
+
sortAction = 'remove';
|
|
2552
|
+
}
|
|
2553
|
+
}
|
|
2549
2554
|
}
|
|
2550
2555
|
|
|
2551
|
-
if (sortAction === '
|
|
2552
|
-
newSorting = [{
|
|
2553
|
-
id: column.id,
|
|
2554
|
-
desc: hasDescDefined ? desc : nextSortingOrder === 'desc'
|
|
2555
|
-
}];
|
|
2556
|
-
} else if (sortAction === 'add' && old != null && old.length) {
|
|
2556
|
+
if (sortAction === 'add') {
|
|
2557
2557
|
var _table$options$maxMul;
|
|
2558
2558
|
|
|
2559
2559
|
newSorting = [...old, {
|
|
2560
2560
|
id: column.id,
|
|
2561
|
-
desc:
|
|
2561
|
+
desc: nextDesc
|
|
2562
2562
|
}]; // Take latest n columns
|
|
2563
2563
|
|
|
2564
2564
|
newSorting.splice(0, newSorting.length - ((_table$options$maxMul = table.options.maxMultiSortColCount) != null ? _table$options$maxMul : Number.MAX_SAFE_INTEGER));
|
|
2565
|
-
} else if (sortAction === 'toggle'
|
|
2565
|
+
} else if (sortAction === 'toggle') {
|
|
2566
2566
|
// This flips (or sets) the
|
|
2567
2567
|
newSorting = old.map(d => {
|
|
2568
2568
|
if (d.id === column.id) {
|
|
2569
2569
|
return { ...d,
|
|
2570
|
-
desc:
|
|
2570
|
+
desc: nextDesc
|
|
2571
2571
|
};
|
|
2572
2572
|
}
|
|
2573
2573
|
|
|
2574
2574
|
return d;
|
|
2575
2575
|
});
|
|
2576
|
-
} else if (sortAction === 'remove'
|
|
2576
|
+
} else if (sortAction === 'remove') {
|
|
2577
2577
|
newSorting = old.filter(d => d.id !== column.id);
|
|
2578
|
+
} else {
|
|
2579
|
+
newSorting = [{
|
|
2580
|
+
id: column.id,
|
|
2581
|
+
desc: nextDesc
|
|
2582
|
+
}];
|
|
2578
2583
|
}
|
|
2579
2584
|
|
|
2580
2585
|
return newSorting;
|
|
2581
2586
|
});
|
|
2582
2587
|
},
|
|
2583
|
-
|
|
2588
|
+
getFirstSortDir: () => {
|
|
2584
2589
|
var _ref, _column$columnDef$sor;
|
|
2585
2590
|
|
|
2586
2591
|
const sortDescFirst = (_ref = (_column$columnDef$sor = column.columnDef.sortDescFirst) != null ? _column$columnDef$sor : table.options.sortDescFirst) != null ? _ref : column.getAutoSortDir() === 'desc';
|
|
2587
|
-
|
|
2592
|
+
return sortDescFirst ? 'desc' : 'asc';
|
|
2593
|
+
},
|
|
2594
|
+
getNextSortingOrder: multi => {
|
|
2595
|
+
var _table$options$enable, _table$options$enable2;
|
|
2596
|
+
|
|
2597
|
+
const firstSortDirection = column.getFirstSortDir();
|
|
2588
2598
|
const isSorted = column.getIsSorted();
|
|
2589
2599
|
|
|
2590
2600
|
if (!isSorted) {
|
|
2591
2601
|
return firstSortDirection;
|
|
2592
2602
|
}
|
|
2593
2603
|
|
|
2594
|
-
if (isSorted
|
|
2595
|
-
|
|
2596
|
-
|
|
2604
|
+
if (isSorted !== firstSortDirection && ((_table$options$enable = table.options.enableSortingRemoval) != null ? _table$options$enable : true) && ( // If enableSortRemove, enable in general
|
|
2605
|
+
multi ? (_table$options$enable2 = table.options.enableMultiRemove) != null ? _table$options$enable2 : true : true) // If multi, don't allow if enableMultiRemove))
|
|
2606
|
+
) {
|
|
2597
2607
|
return false;
|
|
2598
2608
|
}
|
|
2609
|
+
|
|
2610
|
+
return isSorted === 'desc' ? 'asc' : 'desc';
|
|
2599
2611
|
},
|
|
2600
2612
|
getCanSort: () => {
|
|
2601
2613
|
var _column$columnDef$ena, _table$options$enable3;
|