@tanstack/table-core 8.0.0-alpha.86 → 8.0.0-alpha.87
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.map +1 -1
- package/build/cjs/sortingFns.js +53 -51
- package/build/cjs/sortingFns.js.map +1 -1
- package/build/esm/index.js +53 -51
- package/build/esm/index.js.map +1 -1
- package/build/stats-html.html +1 -1
- package/build/stats-react.json +308 -308
- package/build/types/features/Sorting.d.ts +3 -3
- package/build/types/sortingFns.d.ts +7 -14
- package/build/umd/index.development.js +53 -51
- 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 +4 -4
- package/src/sortingFns.ts +59 -81
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Sorting.js","sources":["../../../src/features/Sorting.ts"],"sourcesContent":["import { RowModel } from '..'\nimport { TableFeature } from '../core/instance'\nimport {\n BuiltInSortingFn,\n reSplitAlphaNumeric,\n sortingFns,\n} from '../sortingFns'\n\nimport {\n Column,\n OnChangeFn,\n TableGenerics,\n TableInstance,\n Row,\n Updater,\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 SortingFn<TGenerics extends TableGenerics> = {\n (rowA: Row<TGenerics>, rowB: Row<TGenerics>, columnId: string): number\n}\n\nexport type CustomSortingFns<TGenerics extends TableGenerics> = Record<\n string,\n SortingFn<TGenerics>\n>\n\nexport type SortingTableState = {\n sorting: SortingState\n}\n\nexport type SortingFnOption<TGenerics extends TableGenerics> =\n | 'auto'\n | BuiltInSortingFn\n | keyof TGenerics['SortingFns']\n | SortingFn<TGenerics>\n\nexport type SortingColumnDef<TGenerics extends TableGenerics> = {\n sortingFn?: SortingFnOption<Overwrite<TGenerics, { Value: any }>>\n sortDescFirst?: boolean\n enableSorting?: boolean\n enableMultiSort?: boolean\n invertSorting?: boolean\n sortUndefined?: false | -1 | 1\n}\n\nexport type SortingColumn<TGenerics extends TableGenerics> = {\n getAutoSortingFn: () => SortingFn<TGenerics>\n getAutoSortDir: () => SortDirection\n getSortingFn: () => SortingFn<TGenerics>\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<TGenerics extends TableGenerics> = {\n manualSorting?: boolean\n sortingFns?: TGenerics['SortingFns']\n onSortingChange?: OnChangeFn<SortingState>\n enableSorting?: boolean\n enableSortingRemoval?: boolean\n enableMultiRemove?: boolean\n enableMultiSort?: boolean\n sortDescFirst?: boolean\n getSortedRowModel?: (\n instance: TableInstance<TGenerics>\n ) => () => RowModel<TGenerics>\n maxMultiSortColCount?: number\n isMultiSortEvent?: (e: unknown) => boolean\n}\n\nexport type SortingInstance<TGenerics extends TableGenerics> = {\n setSorting: (updater: Updater<SortingState>) => void\n resetSorting: (defaultState?: boolean) => void\n getPreSortedRowModel: () => RowModel<TGenerics>\n getSortedRowModel: () => RowModel<TGenerics>\n _getSortedRowModel?: () => RowModel<TGenerics>\n}\n\n//\n\nexport const Sorting: TableFeature = {\n getInitialState: (state): SortingTableState => {\n return {\n sorting: [],\n ...state,\n }\n },\n\n getDefaultColumnDef: <\n TGenerics extends TableGenerics\n >(): SortingColumnDef<TGenerics> => {\n return {\n sortingFn: 'auto',\n }\n },\n\n getDefaultOptions: <TGenerics extends TableGenerics>(\n instance: TableInstance<TGenerics>\n ): SortingOptions<TGenerics> => {\n return {\n onSortingChange: makeStateUpdater('sorting', instance),\n isMultiSortEvent: (e: unknown) => {\n return (e as MouseEvent).shiftKey\n },\n }\n },\n\n createColumn: <TGenerics extends TableGenerics>(\n column: Column<TGenerics>,\n instance: TableInstance<TGenerics>\n ): SortingColumn<TGenerics> => {\n return {\n getAutoSortingFn: () => {\n const firstRows = instance.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 = instance.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 const userSortingFn = instance.options.sortingFns\n\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 : (userSortingFn as Record<string, any>)?.[\n column.columnDef.sortingFn as string\n ] ??\n (sortingFns[\n column.columnDef.sortingFn as BuiltInSortingFn\n ] as SortingFn<TGenerics>)\n },\n toggleSorting: (desc, multi) => {\n // if (column.columns.length) {\n // column.columns.forEach((c, i) => {\n // if (c.id) {\n // instance.toggleColumnSorting(c.id, undefined, multi || !!i)\n // }\n // })\n // return\n // }\n\n instance.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\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 const sortDescFirst =\n column.columnDef.sortDescFirst ??\n instance.options.sortDescFirst ??\n column.getAutoSortDir() === 'desc'\n\n // Handle toggle states that will remove the sorting\n if (\n sortAction === 'toggle' && // Must be toggling\n (instance.options.enableSortingRemoval ?? true) && // If enableSortRemove, enable in general\n !hasDescDefined && // Must not be setting desc\n (multi ? instance.options.enableMultiRemove ?? true : true) && // If multi, don't allow if enableMultiRemove\n (existingSorting?.desc // Finally, detect if it should indeed be removed\n ? !sortDescFirst\n : sortDescFirst)\n ) {\n sortAction = 'remove'\n }\n\n if (sortAction === 'replace') {\n newSorting = [\n {\n id: column.id,\n desc: hasDescDefined ? desc! : !!sortDescFirst,\n },\n ]\n } else if (sortAction === 'add' && old?.length) {\n newSorting = [\n ...old,\n {\n id: column.id,\n desc: hasDescDefined ? desc! : !!sortDescFirst,\n },\n ]\n // Take latest n columns\n newSorting.splice(\n 0,\n newSorting.length -\n (instance.options.maxMultiSortColCount ??\n 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! : !existingSorting?.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 getCanSort: () => {\n return (\n (column.columnDef.enableSorting ?? true) &&\n (instance.options.enableSorting ?? true) &&\n !!column.accessorFn\n )\n },\n\n getCanMultiSort: () => {\n return (\n column.columnDef.enableMultiSort ??\n instance.options.enableMultiSort ??\n !!column.accessorFn\n )\n },\n\n getIsSorted: () => {\n const columnSort = instance\n .getState()\n .sorting?.find(d => d.id === column.id)\n\n return !columnSort ? false : columnSort.desc ? 'desc' : 'asc'\n },\n\n getSortIndex: () =>\n instance.getState().sorting?.findIndex(d => d.id === column.id) ?? -1,\n\n clearSorting: () => {\n //clear sorting for just 1 column\n instance.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 ? instance.options.isMultiSortEvent?.(e)\n : false\n )\n }\n },\n }\n },\n\n createInstance: <TGenerics extends TableGenerics>(\n instance: TableInstance<TGenerics>\n ): SortingInstance<TGenerics> => {\n let registered = false\n\n return {\n setSorting: updater => instance.options.onSortingChange?.(updater),\n resetSorting: defaultState => {\n instance.setSorting(\n defaultState ? [] : instance.initialState?.sorting ?? []\n )\n },\n getPreSortedRowModel: () => instance.getFilteredRowModel(),\n getSortedRowModel: () => {\n if (\n !instance._getSortedRowModel &&\n instance.options.getSortedRowModel\n ) {\n instance._getSortedRowModel =\n instance.options.getSortedRowModel(instance)\n }\n\n if (instance.options.manualSorting || !instance._getSortedRowModel) {\n return instance.getPreSortedRowModel()\n }\n\n return instance._getSortedRowModel()\n },\n }\n },\n}\n"],"names":["Sorting","getInitialState","state","sorting","getDefaultColumnDef","sortingFn","getDefaultOptions","instance","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","userSortingFn","options","Error","isFunction","columnDef","toggleSorting","desc","multi","setSorting","old","existingSorting","find","d","existingIndex","findIndex","hasDescDefined","newSorting","sortAction","getCanMultiSort","sortDescFirst","enableSortingRemoval","enableMultiRemove","splice","maxMultiSortColCount","Number","MAX_SAFE_INTEGER","map","filter","getCanSort","enableSorting","accessorFn","enableMultiSort","getIsSorted","columnSort","getState","getSortIndex","clearSorting","getToggleSortingHandler","canSort","persist","undefined","createInstance","updater","resetSorting","defaultState","initialState","getPreSortedRowModel","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/instance'\nimport {\n BuiltInSortingFn,\n reSplitAlphaNumeric,\n sortingFns,\n} from '../sortingFns'\n\nimport {\n Column,\n OnChangeFn,\n TableGenerics,\n TableInstance,\n Row,\n Updater,\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<TGenerics extends TableGenerics> = {\n (rowA: Row<TGenerics>, rowB: Row<TGenerics>, columnId: string): number\n}\n\nexport type CustomSortingFns<TGenerics extends TableGenerics> = Record<\n string,\n SortingFn<TGenerics>\n>\n\nexport type SortingFnOption<TGenerics extends TableGenerics> =\n | 'auto'\n | BuiltInSortingFn\n | keyof TGenerics['SortingFns']\n | SortingFn<TGenerics>\n\nexport type SortingColumnDef<TGenerics extends TableGenerics> = {\n sortingFn?: SortingFnOption<Overwrite<TGenerics, { Value: any }>>\n sortDescFirst?: boolean\n enableSorting?: boolean\n enableMultiSort?: boolean\n invertSorting?: boolean\n sortUndefined?: false | -1 | 1\n}\n\nexport type SortingColumn<TGenerics extends TableGenerics> = {\n getAutoSortingFn: () => SortingFn<TGenerics>\n getAutoSortDir: () => SortDirection\n getSortingFn: () => SortingFn<TGenerics>\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<TGenerics extends TableGenerics> = {\n manualSorting?: boolean\n sortingFns?: TGenerics['SortingFns']\n onSortingChange?: OnChangeFn<SortingState>\n enableSorting?: boolean\n enableSortingRemoval?: boolean\n enableMultiRemove?: boolean\n enableMultiSort?: boolean\n sortDescFirst?: boolean\n getSortedRowModel?: (\n instance: TableInstance<TGenerics>\n ) => () => RowModel<TGenerics>\n maxMultiSortColCount?: number\n isMultiSortEvent?: (e: unknown) => boolean\n}\n\nexport type SortingInstance<TGenerics extends TableGenerics> = {\n setSorting: (updater: Updater<SortingState>) => void\n resetSorting: (defaultState?: boolean) => void\n getPreSortedRowModel: () => RowModel<TGenerics>\n getSortedRowModel: () => RowModel<TGenerics>\n _getSortedRowModel?: () => RowModel<TGenerics>\n}\n\n//\n\nexport const Sorting: TableFeature = {\n getInitialState: (state): SortingTableState => {\n return {\n sorting: [],\n ...state,\n }\n },\n\n getDefaultColumnDef: <\n TGenerics extends TableGenerics\n >(): SortingColumnDef<TGenerics> => {\n return {\n sortingFn: 'auto',\n }\n },\n\n getDefaultOptions: <TGenerics extends TableGenerics>(\n instance: TableInstance<TGenerics>\n ): SortingOptions<TGenerics> => {\n return {\n onSortingChange: makeStateUpdater('sorting', instance),\n isMultiSortEvent: (e: unknown) => {\n return (e as MouseEvent).shiftKey\n },\n }\n },\n\n createColumn: <TGenerics extends TableGenerics>(\n column: Column<TGenerics>,\n instance: TableInstance<TGenerics>\n ): SortingColumn<TGenerics> => {\n return {\n getAutoSortingFn: () => {\n const firstRows = instance.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 = instance.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 const userSortingFn = instance.options.sortingFns\n\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 : (userSortingFn as Record<string, any>)?.[\n column.columnDef.sortingFn as string\n ] ??\n (sortingFns[\n column.columnDef.sortingFn as BuiltInSortingFn\n ] as SortingFn<TGenerics>)\n },\n toggleSorting: (desc, multi) => {\n // if (column.columns.length) {\n // column.columns.forEach((c, i) => {\n // if (c.id) {\n // instance.toggleColumnSorting(c.id, undefined, multi || !!i)\n // }\n // })\n // return\n // }\n\n instance.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\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 const sortDescFirst =\n column.columnDef.sortDescFirst ??\n instance.options.sortDescFirst ??\n column.getAutoSortDir() === 'desc'\n\n // Handle toggle states that will remove the sorting\n if (\n sortAction === 'toggle' && // Must be toggling\n (instance.options.enableSortingRemoval ?? true) && // If enableSortRemove, enable in general\n !hasDescDefined && // Must not be setting desc\n (multi ? instance.options.enableMultiRemove ?? true : true) && // If multi, don't allow if enableMultiRemove\n (existingSorting?.desc // Finally, detect if it should indeed be removed\n ? !sortDescFirst\n : sortDescFirst)\n ) {\n sortAction = 'remove'\n }\n\n if (sortAction === 'replace') {\n newSorting = [\n {\n id: column.id,\n desc: hasDescDefined ? desc! : !!sortDescFirst,\n },\n ]\n } else if (sortAction === 'add' && old?.length) {\n newSorting = [\n ...old,\n {\n id: column.id,\n desc: hasDescDefined ? desc! : !!sortDescFirst,\n },\n ]\n // Take latest n columns\n newSorting.splice(\n 0,\n newSorting.length -\n (instance.options.maxMultiSortColCount ??\n 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! : !existingSorting?.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 getCanSort: () => {\n return (\n (column.columnDef.enableSorting ?? true) &&\n (instance.options.enableSorting ?? true) &&\n !!column.accessorFn\n )\n },\n\n getCanMultiSort: () => {\n return (\n column.columnDef.enableMultiSort ??\n instance.options.enableMultiSort ??\n !!column.accessorFn\n )\n },\n\n getIsSorted: () => {\n const columnSort = instance\n .getState()\n .sorting?.find(d => d.id === column.id)\n\n return !columnSort ? false : columnSort.desc ? 'desc' : 'asc'\n },\n\n getSortIndex: () =>\n instance.getState().sorting?.findIndex(d => d.id === column.id) ?? -1,\n\n clearSorting: () => {\n //clear sorting for just 1 column\n instance.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 ? instance.options.isMultiSortEvent?.(e)\n : false\n )\n }\n },\n }\n },\n\n createInstance: <TGenerics extends TableGenerics>(\n instance: TableInstance<TGenerics>\n ): SortingInstance<TGenerics> => {\n let registered = false\n\n return {\n setSorting: updater => instance.options.onSortingChange?.(updater),\n resetSorting: defaultState => {\n instance.setSorting(\n defaultState ? [] : instance.initialState?.sorting ?? []\n )\n },\n getPreSortedRowModel: () => instance.getFilteredRowModel(),\n getSortedRowModel: () => {\n if (\n !instance._getSortedRowModel &&\n instance.options.getSortedRowModel\n ) {\n instance._getSortedRowModel =\n instance.options.getSortedRowModel(instance)\n }\n\n if (instance.options.manualSorting || !instance._getSortedRowModel) {\n return instance.getPreSortedRowModel()\n }\n\n return instance._getSortedRowModel()\n },\n }\n },\n}\n"],"names":["Sorting","getInitialState","state","sorting","getDefaultColumnDef","sortingFn","getDefaultOptions","instance","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","userSortingFn","options","Error","isFunction","columnDef","toggleSorting","desc","multi","setSorting","old","existingSorting","find","d","existingIndex","findIndex","hasDescDefined","newSorting","sortAction","getCanMultiSort","sortDescFirst","enableSortingRemoval","enableMultiRemove","splice","maxMultiSortColCount","Number","MAX_SAFE_INTEGER","map","filter","getCanSort","enableSorting","accessorFn","enableMultiSort","getIsSorted","columnSort","getState","getSortIndex","clearSorting","getToggleSortingHandler","canSort","persist","undefined","createInstance","updater","resetSorting","defaultState","initialState","getPreSortedRowModel","getSortedRowModel","_getSortedRowModel","manualSorting"],"mappings":"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"}
|
package/build/cjs/sortingFns.js
CHANGED
|
@@ -13,21 +13,54 @@
|
|
|
13
13
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
14
14
|
|
|
15
15
|
const reSplitAlphaNumeric = /([0-9]+)/gm;
|
|
16
|
-
const sortingFns = {
|
|
17
|
-
alphanumeric,
|
|
18
|
-
alphanumericCaseSensitive,
|
|
19
|
-
text,
|
|
20
|
-
textCaseSensitive,
|
|
21
|
-
datetime,
|
|
22
|
-
basic
|
|
23
|
-
};
|
|
24
16
|
|
|
25
|
-
|
|
17
|
+
const alphanumeric = (rowA, rowB, columnId) => {
|
|
26
18
|
return compareAlphanumeric(toString(rowA.getValue(columnId)).toLowerCase(), toString(rowB.getValue(columnId)).toLowerCase());
|
|
27
|
-
}
|
|
19
|
+
};
|
|
28
20
|
|
|
29
|
-
|
|
21
|
+
const alphanumericCaseSensitive = (rowA, rowB, columnId) => {
|
|
30
22
|
return compareAlphanumeric(toString(rowA.getValue(columnId)), toString(rowB.getValue(columnId)));
|
|
23
|
+
}; // The text filter is more basic (less numeric support)
|
|
24
|
+
// but is much faster
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
const text = (rowA, rowB, columnId) => {
|
|
28
|
+
return compareBasic(toString(rowA.getValue(columnId)).toLowerCase(), toString(rowB.getValue(columnId)).toLowerCase());
|
|
29
|
+
}; // The text filter is more basic (less numeric support)
|
|
30
|
+
// but is much faster
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
const textCaseSensitive = (rowA, rowB, columnId) => {
|
|
34
|
+
return compareBasic(toString(rowA.getValue(columnId)), toString(rowB.getValue(columnId)));
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
const datetime = (rowA, rowB, columnId) => {
|
|
38
|
+
return compareBasic(rowA.getValue(columnId).getTime(), rowB.getValue(columnId).getTime());
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
const basic = (rowA, rowB, columnId) => {
|
|
42
|
+
return compareBasic(rowA.getValue(columnId), rowB.getValue(columnId));
|
|
43
|
+
}; // Utils
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
function compareBasic(a, b) {
|
|
47
|
+
return a === b ? 0 : a > b ? 1 : -1;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function toString(a) {
|
|
51
|
+
if (typeof a === 'number') {
|
|
52
|
+
if (isNaN(a) || a === Infinity || a === -Infinity) {
|
|
53
|
+
return '';
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
return String(a);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
if (typeof a === 'string') {
|
|
60
|
+
return a;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
return '';
|
|
31
64
|
} // Mixed sorting is slow, but very inclusive of many edge cases.
|
|
32
65
|
// It handles numbers, mixed alphanumeric combinations, and even
|
|
33
66
|
// null, undefined, and Infinity
|
|
@@ -74,48 +107,17 @@ function compareAlphanumeric(aStr, bStr) {
|
|
|
74
107
|
}
|
|
75
108
|
|
|
76
109
|
return a.length - b.length;
|
|
77
|
-
} //
|
|
78
|
-
// but is much faster
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
function text(rowA, rowB, columnId) {
|
|
82
|
-
return compareBasic(toString(rowA.getValue(columnId)).toLowerCase(), toString(rowB.getValue(columnId)).toLowerCase());
|
|
83
|
-
} // The text filter is more basic (less numeric support)
|
|
84
|
-
// but is much faster
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
function textCaseSensitive(rowA, rowB, columnId) {
|
|
88
|
-
return compareBasic(toString(rowA.getValue(columnId)), toString(rowB.getValue(columnId)));
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
function datetime(rowA, rowB, columnId) {
|
|
92
|
-
return compareBasic(rowA.getValue(columnId).getTime(), rowB.getValue(columnId).getTime());
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
function basic(rowA, rowB, columnId) {
|
|
96
|
-
return compareBasic(rowA.getValue(columnId), rowB.getValue(columnId));
|
|
97
|
-
} // Utils
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
function compareBasic(a, b) {
|
|
101
|
-
return a === b ? 0 : a > b ? 1 : -1;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
function toString(a) {
|
|
105
|
-
if (typeof a === 'number') {
|
|
106
|
-
if (isNaN(a) || a === Infinity || a === -Infinity) {
|
|
107
|
-
return '';
|
|
108
|
-
}
|
|
110
|
+
} // Exports
|
|
109
111
|
|
|
110
|
-
return String(a);
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
if (typeof a === 'string') {
|
|
114
|
-
return a;
|
|
115
|
-
}
|
|
116
112
|
|
|
117
|
-
|
|
118
|
-
|
|
113
|
+
const sortingFns = {
|
|
114
|
+
alphanumeric,
|
|
115
|
+
alphanumericCaseSensitive,
|
|
116
|
+
text,
|
|
117
|
+
textCaseSensitive,
|
|
118
|
+
datetime,
|
|
119
|
+
basic
|
|
120
|
+
};
|
|
119
121
|
|
|
120
122
|
exports.reSplitAlphaNumeric = reSplitAlphaNumeric;
|
|
121
123
|
exports.sortingFns = sortingFns;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sortingFns.js","sources":["../../src/sortingFns.ts"],"sourcesContent":["import {
|
|
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 return compareBasic(\n (rowA.getValue(columnId) as Date).getTime(),\n (rowB.getValue(columnId) as Date).getTime()\n )\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","getTime","basic","a","b","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
|
@@ -2330,21 +2330,54 @@ function isRowSelected(row, selection, instance) {
|
|
|
2330
2330
|
}
|
|
2331
2331
|
|
|
2332
2332
|
const reSplitAlphaNumeric = /([0-9]+)/gm;
|
|
2333
|
-
const sortingFns = {
|
|
2334
|
-
alphanumeric,
|
|
2335
|
-
alphanumericCaseSensitive,
|
|
2336
|
-
text,
|
|
2337
|
-
textCaseSensitive,
|
|
2338
|
-
datetime,
|
|
2339
|
-
basic
|
|
2340
|
-
};
|
|
2341
2333
|
|
|
2342
|
-
|
|
2334
|
+
const alphanumeric = (rowA, rowB, columnId) => {
|
|
2343
2335
|
return compareAlphanumeric(toString(rowA.getValue(columnId)).toLowerCase(), toString(rowB.getValue(columnId)).toLowerCase());
|
|
2344
|
-
}
|
|
2336
|
+
};
|
|
2345
2337
|
|
|
2346
|
-
|
|
2338
|
+
const alphanumericCaseSensitive = (rowA, rowB, columnId) => {
|
|
2347
2339
|
return compareAlphanumeric(toString(rowA.getValue(columnId)), toString(rowB.getValue(columnId)));
|
|
2340
|
+
}; // The text filter is more basic (less numeric support)
|
|
2341
|
+
// but is much faster
|
|
2342
|
+
|
|
2343
|
+
|
|
2344
|
+
const text = (rowA, rowB, columnId) => {
|
|
2345
|
+
return compareBasic(toString(rowA.getValue(columnId)).toLowerCase(), toString(rowB.getValue(columnId)).toLowerCase());
|
|
2346
|
+
}; // The text filter is more basic (less numeric support)
|
|
2347
|
+
// but is much faster
|
|
2348
|
+
|
|
2349
|
+
|
|
2350
|
+
const textCaseSensitive = (rowA, rowB, columnId) => {
|
|
2351
|
+
return compareBasic(toString(rowA.getValue(columnId)), toString(rowB.getValue(columnId)));
|
|
2352
|
+
};
|
|
2353
|
+
|
|
2354
|
+
const datetime = (rowA, rowB, columnId) => {
|
|
2355
|
+
return compareBasic(rowA.getValue(columnId).getTime(), rowB.getValue(columnId).getTime());
|
|
2356
|
+
};
|
|
2357
|
+
|
|
2358
|
+
const basic = (rowA, rowB, columnId) => {
|
|
2359
|
+
return compareBasic(rowA.getValue(columnId), rowB.getValue(columnId));
|
|
2360
|
+
}; // Utils
|
|
2361
|
+
|
|
2362
|
+
|
|
2363
|
+
function compareBasic(a, b) {
|
|
2364
|
+
return a === b ? 0 : a > b ? 1 : -1;
|
|
2365
|
+
}
|
|
2366
|
+
|
|
2367
|
+
function toString(a) {
|
|
2368
|
+
if (typeof a === 'number') {
|
|
2369
|
+
if (isNaN(a) || a === Infinity || a === -Infinity) {
|
|
2370
|
+
return '';
|
|
2371
|
+
}
|
|
2372
|
+
|
|
2373
|
+
return String(a);
|
|
2374
|
+
}
|
|
2375
|
+
|
|
2376
|
+
if (typeof a === 'string') {
|
|
2377
|
+
return a;
|
|
2378
|
+
}
|
|
2379
|
+
|
|
2380
|
+
return '';
|
|
2348
2381
|
} // Mixed sorting is slow, but very inclusive of many edge cases.
|
|
2349
2382
|
// It handles numbers, mixed alphanumeric combinations, and even
|
|
2350
2383
|
// null, undefined, and Infinity
|
|
@@ -2391,48 +2424,17 @@ function compareAlphanumeric(aStr, bStr) {
|
|
|
2391
2424
|
}
|
|
2392
2425
|
|
|
2393
2426
|
return a.length - b.length;
|
|
2394
|
-
} //
|
|
2395
|
-
// but is much faster
|
|
2396
|
-
|
|
2397
|
-
|
|
2398
|
-
function text(rowA, rowB, columnId) {
|
|
2399
|
-
return compareBasic(toString(rowA.getValue(columnId)).toLowerCase(), toString(rowB.getValue(columnId)).toLowerCase());
|
|
2400
|
-
} // The text filter is more basic (less numeric support)
|
|
2401
|
-
// but is much faster
|
|
2402
|
-
|
|
2403
|
-
|
|
2404
|
-
function textCaseSensitive(rowA, rowB, columnId) {
|
|
2405
|
-
return compareBasic(toString(rowA.getValue(columnId)), toString(rowB.getValue(columnId)));
|
|
2406
|
-
}
|
|
2407
|
-
|
|
2408
|
-
function datetime(rowA, rowB, columnId) {
|
|
2409
|
-
return compareBasic(rowA.getValue(columnId).getTime(), rowB.getValue(columnId).getTime());
|
|
2410
|
-
}
|
|
2411
|
-
|
|
2412
|
-
function basic(rowA, rowB, columnId) {
|
|
2413
|
-
return compareBasic(rowA.getValue(columnId), rowB.getValue(columnId));
|
|
2414
|
-
} // Utils
|
|
2415
|
-
|
|
2416
|
-
|
|
2417
|
-
function compareBasic(a, b) {
|
|
2418
|
-
return a === b ? 0 : a > b ? 1 : -1;
|
|
2419
|
-
}
|
|
2420
|
-
|
|
2421
|
-
function toString(a) {
|
|
2422
|
-
if (typeof a === 'number') {
|
|
2423
|
-
if (isNaN(a) || a === Infinity || a === -Infinity) {
|
|
2424
|
-
return '';
|
|
2425
|
-
}
|
|
2427
|
+
} // Exports
|
|
2426
2428
|
|
|
2427
|
-
return String(a);
|
|
2428
|
-
}
|
|
2429
|
-
|
|
2430
|
-
if (typeof a === 'string') {
|
|
2431
|
-
return a;
|
|
2432
|
-
}
|
|
2433
2429
|
|
|
2434
|
-
|
|
2435
|
-
|
|
2430
|
+
const sortingFns = {
|
|
2431
|
+
alphanumeric,
|
|
2432
|
+
alphanumericCaseSensitive,
|
|
2433
|
+
text,
|
|
2434
|
+
textCaseSensitive,
|
|
2435
|
+
datetime,
|
|
2436
|
+
basic
|
|
2437
|
+
};
|
|
2436
2438
|
|
|
2437
2439
|
//
|
|
2438
2440
|
const Sorting = {
|