@rowsncolumns/spreadsheet-state 29.0.0 → 29.1.1
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/cjs/api/anchored-objects.d.ts +131 -7
- package/dist/cjs/api/anchored-objects.d.ts.map +1 -1
- package/dist/cjs/api/anchored-objects.js +488 -43
- package/dist/cjs/api/copy-paste.d.ts +1 -2
- package/dist/cjs/api/copy-paste.d.ts.map +1 -1
- package/dist/cjs/api/copy-paste.js +1 -3
- package/dist/cjs/api/filter.d.ts +15 -1
- package/dist/cjs/api/filter.d.ts.map +1 -1
- package/dist/cjs/api/filter.js +32 -2
- package/dist/cjs/api/formula.d.ts +63 -0
- package/dist/cjs/api/formula.d.ts.map +1 -1
- package/dist/cjs/api/formula.js +278 -8
- package/dist/cjs/api/paint-format.d.ts +22 -1
- package/dist/cjs/api/paint-format.d.ts.map +1 -1
- package/dist/cjs/api/paint-format.js +57 -1
- package/dist/cjs/api/sort.d.ts +23 -1
- package/dist/cjs/api/sort.d.ts.map +1 -1
- package/dist/cjs/api/sort.js +52 -6
- package/dist/cjs/api/structural-guards.d.ts +57 -0
- package/dist/cjs/api/structural-guards.d.ts.map +1 -1
- package/dist/cjs/api/structural-guards.js +93 -1
- package/dist/cjs/api/structural-table-refs.d.ts +58 -3
- package/dist/cjs/api/structural-table-refs.d.ts.map +1 -1
- package/dist/cjs/api/structural-table-refs.js +177 -16
- package/dist/cjs/api/table.d.ts +26 -2
- package/dist/cjs/api/table.d.ts.map +1 -1
- package/dist/cjs/api/table.js +93 -60
- package/dist/cjs/api/validation.d.ts.map +1 -1
- package/dist/cjs/api/validation.js +53 -8
- package/dist/cjs/atoms/creating-table.atom.d.ts +22 -0
- package/dist/cjs/atoms/creating-table.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/creating-table.atom.js +4 -0
- package/dist/cjs/atoms/dialog-state.atom.d.ts +8 -0
- package/dist/cjs/atoms/dialog-state.atom.d.ts.map +1 -1
- package/dist/cjs/atoms/dialog-state.atom.js +28 -0
- package/dist/cjs/atoms/editing-slicer.atom.d.ts +9 -0
- package/dist/cjs/atoms/editing-slicer.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/editing-slicer.atom.js +6 -0
- package/dist/cjs/atoms/index.d.ts +4 -0
- package/dist/cjs/atoms/index.d.ts.map +1 -1
- package/dist/cjs/atoms/index.js +4 -0
- package/dist/cjs/atoms/inserting-slicer.atom.d.ts +8 -0
- package/dist/cjs/atoms/inserting-slicer.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/inserting-slicer.atom.js +5 -0
- package/dist/cjs/atoms/resizing-table.atom.d.ts +8 -0
- package/dist/cjs/atoms/resizing-table.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/resizing-table.atom.js +5 -0
- package/dist/cjs/commands.d.ts +129 -2
- package/dist/cjs/commands.d.ts.map +1 -1
- package/dist/cjs/components/editors/embed-editor.d.ts +4 -2
- package/dist/cjs/components/editors/embed-editor.d.ts.map +1 -1
- package/dist/cjs/components/editors/embed-editor.js +38 -9
- package/dist/cjs/components/editors/slicer-editor.d.ts +15 -0
- package/dist/cjs/components/editors/slicer-editor.d.ts.map +1 -0
- package/dist/cjs/components/editors/slicer-editor.js +87 -0
- package/dist/cjs/components/editors/table-editor.d.ts +58 -2
- package/dist/cjs/components/editors/table-editor.d.ts.map +1 -1
- package/dist/cjs/components/editors/table-editor.js +261 -20
- package/dist/cjs/components/index.d.ts +1 -0
- package/dist/cjs/components/index.d.ts.map +1 -1
- package/dist/cjs/components/index.js +1 -0
- package/dist/cjs/constants.d.ts +9 -1
- package/dist/cjs/constants.d.ts.map +1 -1
- package/dist/cjs/constants.js +12 -0
- package/dist/cjs/generated-names.d.ts +13 -3
- package/dist/cjs/generated-names.d.ts.map +1 -1
- package/dist/cjs/generated-names.js +3 -1
- package/dist/cjs/helpers.d.ts +5 -0
- package/dist/cjs/helpers.d.ts.map +1 -1
- package/dist/cjs/helpers.js +10 -1
- package/dist/cjs/hooks/use-on-change-batch.d.ts +19 -2
- package/dist/cjs/hooks/use-on-change-batch.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-change-batch.js +43 -35
- package/dist/cjs/hooks/use-on-change-calculated-column.d.ts +10 -1
- package/dist/cjs/hooks/use-on-change-calculated-column.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-change-calculated-column.js +17 -5
- package/dist/cjs/hooks/use-on-change-table-column.d.ts +6 -1
- package/dist/cjs/hooks/use-on-change-table-column.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-change-table-column.js +17 -5
- package/dist/cjs/hooks/use-on-change.d.ts +36 -3
- package/dist/cjs/hooks/use-on-change.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-change.js +218 -136
- package/dist/cjs/hooks/use-on-create-custom-table-style.d.ts +17 -0
- package/dist/cjs/hooks/use-on-create-custom-table-style.d.ts.map +1 -0
- package/dist/cjs/hooks/use-on-create-custom-table-style.js +28 -0
- package/dist/cjs/hooks/use-on-create-named-range.d.ts +4 -2
- package/dist/cjs/hooks/use-on-create-named-range.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-create-named-range.js +11 -1
- package/dist/cjs/hooks/use-on-delete-cells-shift-left.d.ts +2 -1
- package/dist/cjs/hooks/use-on-delete-cells-shift-left.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-delete-cells-shift-left.js +3 -1
- package/dist/cjs/hooks/use-on-delete-cells-shift-up.d.ts +2 -1
- package/dist/cjs/hooks/use-on-delete-cells-shift-up.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-delete-cells-shift-up.js +3 -1
- package/dist/cjs/hooks/use-on-delete-column.d.ts +2 -1
- package/dist/cjs/hooks/use-on-delete-column.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-delete-column.js +3 -1
- package/dist/cjs/hooks/use-on-delete-row.d.ts +2 -1
- package/dist/cjs/hooks/use-on-delete-row.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-delete-row.js +3 -1
- package/dist/cjs/hooks/use-on-delete-sheet.d.ts +10 -1
- package/dist/cjs/hooks/use-on-delete-sheet.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-delete-sheet.js +19 -1
- package/dist/cjs/hooks/use-on-delete-table-row.d.ts +4 -1
- package/dist/cjs/hooks/use-on-delete-table-row.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-delete-table-row.js +19 -1
- package/dist/cjs/hooks/use-on-delete.d.ts +5 -2
- package/dist/cjs/hooks/use-on-delete.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-delete.js +5 -1
- package/dist/cjs/hooks/use-on-embeds.d.ts +7 -4
- package/dist/cjs/hooks/use-on-embeds.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-embeds.js +26 -24
- package/dist/cjs/hooks/use-on-fill.d.ts +17 -2
- package/dist/cjs/hooks/use-on-fill.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-fill.js +29 -15
- package/dist/cjs/hooks/use-on-filter-table.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-filter-table.js +209 -103
- package/dist/cjs/hooks/use-on-import-excel.d.ts +2 -1
- package/dist/cjs/hooks/use-on-import-excel.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-import-excel.js +22 -19
- package/dist/cjs/hooks/use-on-insert-cells-shift-down.d.ts +2 -1
- package/dist/cjs/hooks/use-on-insert-cells-shift-down.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-insert-cells-shift-down.js +3 -1
- package/dist/cjs/hooks/use-on-insert-cells-shift-right.d.ts +2 -1
- package/dist/cjs/hooks/use-on-insert-cells-shift-right.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-insert-cells-shift-right.js +3 -1
- package/dist/cjs/hooks/use-on-insert-column.d.ts +2 -1
- package/dist/cjs/hooks/use-on-insert-column.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-insert-column.js +3 -1
- package/dist/cjs/hooks/use-on-insert-row.d.ts +2 -1
- package/dist/cjs/hooks/use-on-insert-row.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-insert-row.js +3 -1
- package/dist/cjs/hooks/use-on-insert-table-row.d.ts +5 -2
- package/dist/cjs/hooks/use-on-insert-table-row.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-insert-table-row.js +19 -1
- package/dist/cjs/hooks/use-on-merge-unmerge-cells.d.ts +3 -2
- package/dist/cjs/hooks/use-on-merge-unmerge-cells.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-merge-unmerge-cells.js +14 -1
- package/dist/cjs/hooks/use-on-move-columns.d.ts +3 -1
- package/dist/cjs/hooks/use-on-move-columns.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-move-columns.js +14 -1
- package/dist/cjs/hooks/use-on-move-rows.d.ts +3 -1
- package/dist/cjs/hooks/use-on-move-rows.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-move-rows.js +14 -1
- package/dist/cjs/hooks/use-on-move-selection.d.ts +3 -1
- package/dist/cjs/hooks/use-on-move-selection.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-move-selection.js +88 -25
- package/dist/cjs/hooks/use-on-paste.d.ts +22 -1
- package/dist/cjs/hooks/use-on-paste.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-paste.js +993 -776
- package/dist/cjs/hooks/use-on-remove-duplicates.d.ts +5 -2
- package/dist/cjs/hooks/use-on-remove-duplicates.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-remove-duplicates.js +5 -1
- package/dist/cjs/hooks/use-on-request-create-table.d.ts +13 -0
- package/dist/cjs/hooks/use-on-request-create-table.d.ts.map +1 -0
- package/dist/cjs/hooks/use-on-request-create-table.js +44 -0
- package/dist/cjs/hooks/use-on-request-insert-slicer.d.ts +7 -0
- package/dist/cjs/hooks/use-on-request-insert-slicer.d.ts.map +1 -0
- package/dist/cjs/hooks/use-on-request-insert-slicer.js +15 -0
- package/dist/cjs/hooks/use-on-request-resize-table.d.ts +7 -0
- package/dist/cjs/hooks/use-on-request-resize-table.d.ts.map +1 -0
- package/dist/cjs/hooks/use-on-request-resize-table.js +15 -0
- package/dist/cjs/hooks/use-on-resize-table.d.ts +5 -1
- package/dist/cjs/hooks/use-on-resize-table.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-resize-table.js +110 -33
- package/dist/cjs/hooks/use-on-sort-column.d.ts +28 -3
- package/dist/cjs/hooks/use-on-sort-column.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-sort-column.js +136 -90
- package/dist/cjs/hooks/use-on-sort-range.d.ts +26 -3
- package/dist/cjs/hooks/use-on-sort-range.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-sort-range.js +113 -67
- package/dist/cjs/hooks/use-on-sort-table.d.ts +18 -1
- package/dist/cjs/hooks/use-on-sort-table.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-sort-table.js +128 -98
- package/dist/cjs/hooks/use-on-subtotal.d.ts +10 -3
- package/dist/cjs/hooks/use-on-subtotal.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-subtotal.js +13 -9
- package/dist/cjs/hooks/use-on-table.d.ts +39 -7
- package/dist/cjs/hooks/use-on-table.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-table.js +257 -49
- package/dist/cjs/hooks/use-on-undo-calculated-column.d.ts +23 -0
- package/dist/cjs/hooks/use-on-undo-calculated-column.d.ts.map +1 -0
- package/dist/cjs/hooks/use-on-undo-calculated-column.js +70 -0
- package/dist/cjs/hooks/use-on-undo-table-auto-expansion.d.ts +28 -0
- package/dist/cjs/hooks/use-on-undo-table-auto-expansion.d.ts.map +1 -0
- package/dist/cjs/hooks/use-on-undo-table-auto-expansion.js +96 -0
- package/dist/cjs/hooks/use-on-update-named-range.d.ts +4 -2
- package/dist/cjs/hooks/use-on-update-named-range.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-update-named-range.js +13 -1
- package/dist/cjs/hooks/use-sheet-properties.d.ts +1 -0
- package/dist/cjs/hooks/use-sheet-properties.d.ts.map +1 -1
- package/dist/cjs/hooks/use-sheet-properties.js +54 -34
- package/dist/cjs/hooks/use-slicers.d.ts +2 -2
- package/dist/cjs/hooks/use-slicers.d.ts.map +1 -1
- package/dist/cjs/hooks/use-slicers.js +17 -26
- package/dist/cjs/hooks/use-sparkline-groups.d.ts +50 -0
- package/dist/cjs/hooks/use-sparkline-groups.d.ts.map +1 -0
- package/dist/cjs/hooks/use-sparkline-groups.js +192 -0
- package/dist/cjs/hooks/use-spreadsheet-state.d.ts +56 -10
- package/dist/cjs/hooks/use-spreadsheet-state.d.ts.map +1 -1
- package/dist/cjs/hooks/use-spreadsheet-state.js +323 -100
- package/dist/cjs/hooks/use-structured-reference.d.ts.map +1 -1
- package/dist/cjs/hooks/use-structured-reference.js +17 -0
- package/dist/cjs/hooks/use-undo-redo-actions.d.ts +2 -1
- package/dist/cjs/hooks/use-undo-redo-actions.d.ts.map +1 -1
- package/dist/cjs/hooks/use-undo-redo-actions.js +10 -2
- package/dist/cjs/hooks/use-undo-redo.d.ts +12 -0
- package/dist/cjs/hooks/use-undo-redo.d.ts.map +1 -1
- package/dist/cjs/hooks/use-undo-redo.js +169 -10
- package/dist/cjs/hooks/utils/sort-rows.d.ts.map +1 -1
- package/dist/cjs/hooks/utils/sort-rows.js +4 -3
- package/dist/cjs/index.d.ts +7 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +8 -0
- package/dist/cjs/interface/apply-fill.d.ts +26 -3
- package/dist/cjs/interface/apply-fill.d.ts.map +1 -1
- package/dist/cjs/interface/apply-fill.js +207 -98
- package/dist/cjs/interface/change-batch.d.ts +1 -1
- package/dist/cjs/interface/change-batch.d.ts.map +1 -1
- package/dist/cjs/interface/change-batch.js +112 -15
- package/dist/cjs/interface/change-calculated-column.d.ts +6 -2
- package/dist/cjs/interface/change-calculated-column.d.ts.map +1 -1
- package/dist/cjs/interface/change-calculated-column.js +87 -17
- package/dist/cjs/interface/change-table-column.d.ts +81 -7
- package/dist/cjs/interface/change-table-column.d.ts.map +1 -1
- package/dist/cjs/interface/change-table-column.js +336 -76
- package/dist/cjs/interface/create-table.d.ts +15 -3
- package/dist/cjs/interface/create-table.d.ts.map +1 -1
- package/dist/cjs/interface/create-table.js +100 -25
- package/dist/cjs/interface/delete-cells-shift-left.d.ts +1 -1
- package/dist/cjs/interface/delete-cells-shift-left.d.ts.map +1 -1
- package/dist/cjs/interface/delete-cells-shift-left.js +17 -2
- package/dist/cjs/interface/delete-cells-shift-up.d.ts +1 -1
- package/dist/cjs/interface/delete-cells-shift-up.d.ts.map +1 -1
- package/dist/cjs/interface/delete-cells-shift-up.js +17 -2
- package/dist/cjs/interface/delete-cells.d.ts +1 -1
- package/dist/cjs/interface/delete-cells.d.ts.map +1 -1
- package/dist/cjs/interface/delete-cells.js +106 -44
- package/dist/cjs/interface/delete-column.d.ts +1 -1
- package/dist/cjs/interface/delete-column.d.ts.map +1 -1
- package/dist/cjs/interface/delete-column.js +16 -3
- package/dist/cjs/interface/delete-row.d.ts +1 -1
- package/dist/cjs/interface/delete-row.d.ts.map +1 -1
- package/dist/cjs/interface/delete-row.js +230 -19
- package/dist/cjs/interface/delete-sheet.d.ts +2 -2
- package/dist/cjs/interface/delete-sheet.d.ts.map +1 -1
- package/dist/cjs/interface/delete-sheet.js +149 -2
- package/dist/cjs/interface/delete-table-column.d.ts +1 -1
- package/dist/cjs/interface/delete-table-column.d.ts.map +1 -1
- package/dist/cjs/interface/delete-table-column.js +11 -1
- package/dist/cjs/interface/delete-table-row.d.ts +1 -1
- package/dist/cjs/interface/delete-table-row.d.ts.map +1 -1
- package/dist/cjs/interface/delete-table-row.js +361 -275
- package/dist/cjs/interface/duplicate-sheet.d.ts.map +1 -1
- package/dist/cjs/interface/duplicate-sheet.js +83 -31
- package/dist/cjs/interface/embeds.d.ts +10 -1
- package/dist/cjs/interface/embeds.d.ts.map +1 -1
- package/dist/cjs/interface/embeds.js +120 -6
- package/dist/cjs/interface/insert-cells-shift-down.d.ts +1 -1
- package/dist/cjs/interface/insert-cells-shift-down.d.ts.map +1 -1
- package/dist/cjs/interface/insert-cells-shift-down.js +11 -1
- package/dist/cjs/interface/insert-cells-shift-right.d.ts +1 -1
- package/dist/cjs/interface/insert-cells-shift-right.d.ts.map +1 -1
- package/dist/cjs/interface/insert-cells-shift-right.js +11 -1
- package/dist/cjs/interface/insert-column.d.ts +2 -2
- package/dist/cjs/interface/insert-column.d.ts.map +1 -1
- package/dist/cjs/interface/insert-column.js +68 -38
- package/dist/cjs/interface/insert-row.d.ts +1 -1
- package/dist/cjs/interface/insert-row.d.ts.map +1 -1
- package/dist/cjs/interface/insert-row.js +10 -2
- package/dist/cjs/interface/insert-table-row.d.ts +2 -1
- package/dist/cjs/interface/insert-table-row.d.ts.map +1 -1
- package/dist/cjs/interface/insert-table-row.js +70 -19
- package/dist/cjs/interface/remove-duplicates.d.ts +1 -1
- package/dist/cjs/interface/remove-duplicates.d.ts.map +1 -1
- package/dist/cjs/interface/remove-duplicates.js +46 -6
- package/dist/cjs/interface/remove-table.d.ts +1 -1
- package/dist/cjs/interface/remove-table.d.ts.map +1 -1
- package/dist/cjs/interface/remove-table.js +72 -16
- package/dist/cjs/interface/slicers.d.ts +12 -1
- package/dist/cjs/interface/slicers.d.ts.map +1 -1
- package/dist/cjs/interface/slicers.js +47 -2
- package/dist/cjs/interface/spreadsheet-interface.d.ts +1 -1
- package/dist/cjs/interface/spreadsheet-interface.d.ts.map +1 -1
- package/dist/cjs/interface/spreadsheet-interface.js +64 -1
- package/dist/cjs/interface/table-totalrow.d.ts +13 -1
- package/dist/cjs/interface/table-totalrow.d.ts.map +1 -1
- package/dist/cjs/interface/table-totalrow.js +107 -73
- package/dist/cjs/interface/table-utils.d.ts +59 -6
- package/dist/cjs/interface/table-utils.d.ts.map +1 -1
- package/dist/cjs/interface/table-utils.js +211 -15
- package/dist/cjs/interface/update-table.d.ts +16 -1
- package/dist/cjs/interface/update-table.d.ts.map +1 -1
- package/dist/cjs/interface/update-table.js +190 -44
- package/dist/cjs/sheet-cell.d.ts.map +1 -1
- package/dist/cjs/test-setup.d.ts.map +1 -1
- package/dist/cjs/test-setup.js +6 -0
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/cjs/validation-schema/table.schema.d.ts +11 -0
- package/dist/cjs/validation-schema/table.schema.d.ts.map +1 -1
- package/dist/cjs/validation-schema/table.schema.js +20 -3
- package/dist/esm/api/anchored-objects.d.ts +131 -7
- package/dist/esm/api/anchored-objects.d.ts.map +1 -1
- package/dist/esm/api/anchored-objects.js +399 -15
- package/dist/esm/api/copy-paste.d.ts +1 -2
- package/dist/esm/api/copy-paste.d.ts.map +1 -1
- package/dist/esm/api/copy-paste.js +1 -3
- package/dist/esm/api/filter.d.ts +15 -1
- package/dist/esm/api/filter.d.ts.map +1 -1
- package/dist/esm/api/filter.js +28 -0
- package/dist/esm/api/formula.d.ts +63 -0
- package/dist/esm/api/formula.d.ts.map +1 -1
- package/dist/esm/api/formula.js +235 -8
- package/dist/esm/api/paint-format.d.ts +22 -1
- package/dist/esm/api/paint-format.d.ts.map +1 -1
- package/dist/esm/api/paint-format.js +44 -1
- package/dist/esm/api/sort.d.ts +23 -1
- package/dist/esm/api/sort.d.ts.map +1 -1
- package/dist/esm/api/sort.js +45 -6
- package/dist/esm/api/structural-guards.d.ts +57 -0
- package/dist/esm/api/structural-guards.d.ts.map +1 -1
- package/dist/esm/api/structural-guards.js +85 -0
- package/dist/esm/api/structural-table-refs.d.ts +58 -3
- package/dist/esm/api/structural-table-refs.d.ts.map +1 -1
- package/dist/esm/api/structural-table-refs.js +126 -6
- package/dist/esm/api/table.d.ts +26 -2
- package/dist/esm/api/table.d.ts.map +1 -1
- package/dist/esm/api/table.js +70 -48
- package/dist/esm/api/validation.d.ts.map +1 -1
- package/dist/esm/api/validation.js +53 -8
- package/dist/esm/atoms/creating-table.atom.d.ts +22 -0
- package/dist/esm/atoms/creating-table.atom.d.ts.map +1 -0
- package/dist/esm/atoms/creating-table.atom.js +4 -0
- package/dist/esm/atoms/dialog-state.atom.d.ts +8 -0
- package/dist/esm/atoms/dialog-state.atom.d.ts.map +1 -1
- package/dist/esm/atoms/dialog-state.atom.js +12 -0
- package/dist/esm/atoms/editing-slicer.atom.d.ts +9 -0
- package/dist/esm/atoms/editing-slicer.atom.d.ts.map +1 -0
- package/dist/esm/atoms/editing-slicer.atom.js +6 -0
- package/dist/esm/atoms/index.d.ts +4 -0
- package/dist/esm/atoms/index.d.ts.map +1 -1
- package/dist/esm/atoms/index.js +4 -0
- package/dist/esm/atoms/inserting-slicer.atom.d.ts +8 -0
- package/dist/esm/atoms/inserting-slicer.atom.d.ts.map +1 -0
- package/dist/esm/atoms/inserting-slicer.atom.js +5 -0
- package/dist/esm/atoms/resizing-table.atom.d.ts +8 -0
- package/dist/esm/atoms/resizing-table.atom.d.ts.map +1 -0
- package/dist/esm/atoms/resizing-table.atom.js +5 -0
- package/dist/esm/commands.d.ts +129 -2
- package/dist/esm/commands.d.ts.map +1 -1
- package/dist/esm/components/editors/embed-editor.d.ts +4 -2
- package/dist/esm/components/editors/embed-editor.d.ts.map +1 -1
- package/dist/esm/components/editors/embed-editor.js +40 -6
- package/dist/esm/components/editors/slicer-editor.d.ts +15 -0
- package/dist/esm/components/editors/slicer-editor.d.ts.map +1 -0
- package/dist/esm/components/editors/slicer-editor.js +85 -0
- package/dist/esm/components/editors/table-editor.d.ts +58 -2
- package/dist/esm/components/editors/table-editor.d.ts.map +1 -1
- package/dist/esm/components/editors/table-editor.js +243 -19
- package/dist/esm/components/index.d.ts +1 -0
- package/dist/esm/components/index.d.ts.map +1 -1
- package/dist/esm/components/index.js +1 -0
- package/dist/esm/constants.d.ts +9 -1
- package/dist/esm/constants.d.ts.map +1 -1
- package/dist/esm/constants.js +12 -0
- package/dist/esm/generated-names.d.ts +13 -3
- package/dist/esm/generated-names.d.ts.map +1 -1
- package/dist/esm/generated-names.js +3 -1
- package/dist/esm/helpers.d.ts +5 -0
- package/dist/esm/helpers.d.ts.map +1 -1
- package/dist/esm/helpers.js +7 -1
- package/dist/esm/hooks/use-on-change-batch.d.ts +19 -2
- package/dist/esm/hooks/use-on-change-batch.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-change-batch.js +19 -3
- package/dist/esm/hooks/use-on-change-calculated-column.d.ts +10 -1
- package/dist/esm/hooks/use-on-change-calculated-column.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-change-calculated-column.js +17 -5
- package/dist/esm/hooks/use-on-change-table-column.d.ts +6 -1
- package/dist/esm/hooks/use-on-change-table-column.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-change-table-column.js +17 -5
- package/dist/esm/hooks/use-on-change.d.ts +36 -3
- package/dist/esm/hooks/use-on-change.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-change.js +214 -124
- package/dist/esm/hooks/use-on-create-custom-table-style.d.ts +17 -0
- package/dist/esm/hooks/use-on-create-custom-table-style.d.ts.map +1 -0
- package/dist/esm/hooks/use-on-create-custom-table-style.js +26 -0
- package/dist/esm/hooks/use-on-create-named-range.d.ts +4 -2
- package/dist/esm/hooks/use-on-create-named-range.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-create-named-range.js +11 -1
- package/dist/esm/hooks/use-on-delete-cells-shift-left.d.ts +2 -1
- package/dist/esm/hooks/use-on-delete-cells-shift-left.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-delete-cells-shift-left.js +3 -1
- package/dist/esm/hooks/use-on-delete-cells-shift-up.d.ts +2 -1
- package/dist/esm/hooks/use-on-delete-cells-shift-up.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-delete-cells-shift-up.js +3 -1
- package/dist/esm/hooks/use-on-delete-column.d.ts +2 -1
- package/dist/esm/hooks/use-on-delete-column.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-delete-column.js +3 -1
- package/dist/esm/hooks/use-on-delete-row.d.ts +2 -1
- package/dist/esm/hooks/use-on-delete-row.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-delete-row.js +3 -1
- package/dist/esm/hooks/use-on-delete-sheet.d.ts +10 -1
- package/dist/esm/hooks/use-on-delete-sheet.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-delete-sheet.js +19 -1
- package/dist/esm/hooks/use-on-delete-table-row.d.ts +4 -1
- package/dist/esm/hooks/use-on-delete-table-row.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-delete-table-row.js +19 -1
- package/dist/esm/hooks/use-on-delete.d.ts +5 -2
- package/dist/esm/hooks/use-on-delete.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-delete.js +5 -1
- package/dist/esm/hooks/use-on-embeds.d.ts +7 -4
- package/dist/esm/hooks/use-on-embeds.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-embeds.js +23 -6
- package/dist/esm/hooks/use-on-fill.d.ts +17 -2
- package/dist/esm/hooks/use-on-fill.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-fill.js +27 -1
- package/dist/esm/hooks/use-on-filter-table.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-filter-table.js +97 -26
- package/dist/esm/hooks/use-on-import-excel.d.ts +2 -1
- package/dist/esm/hooks/use-on-import-excel.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-import-excel.js +4 -1
- package/dist/esm/hooks/use-on-insert-cells-shift-down.d.ts +2 -1
- package/dist/esm/hooks/use-on-insert-cells-shift-down.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-insert-cells-shift-down.js +3 -1
- package/dist/esm/hooks/use-on-insert-cells-shift-right.d.ts +2 -1
- package/dist/esm/hooks/use-on-insert-cells-shift-right.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-insert-cells-shift-right.js +3 -1
- package/dist/esm/hooks/use-on-insert-column.d.ts +2 -1
- package/dist/esm/hooks/use-on-insert-column.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-insert-column.js +3 -1
- package/dist/esm/hooks/use-on-insert-row.d.ts +2 -1
- package/dist/esm/hooks/use-on-insert-row.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-insert-row.js +3 -1
- package/dist/esm/hooks/use-on-insert-table-row.d.ts +5 -2
- package/dist/esm/hooks/use-on-insert-table-row.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-insert-table-row.js +19 -1
- package/dist/esm/hooks/use-on-merge-unmerge-cells.d.ts +3 -2
- package/dist/esm/hooks/use-on-merge-unmerge-cells.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-merge-unmerge-cells.js +12 -1
- package/dist/esm/hooks/use-on-move-columns.d.ts +3 -1
- package/dist/esm/hooks/use-on-move-columns.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-move-columns.js +14 -1
- package/dist/esm/hooks/use-on-move-rows.d.ts +3 -1
- package/dist/esm/hooks/use-on-move-rows.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-move-rows.js +14 -1
- package/dist/esm/hooks/use-on-move-selection.d.ts +3 -1
- package/dist/esm/hooks/use-on-move-selection.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-move-selection.js +44 -1
- package/dist/esm/hooks/use-on-paste.d.ts +22 -1
- package/dist/esm/hooks/use-on-paste.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-paste.js +815 -672
- package/dist/esm/hooks/use-on-remove-duplicates.d.ts +5 -2
- package/dist/esm/hooks/use-on-remove-duplicates.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-remove-duplicates.js +5 -1
- package/dist/esm/hooks/use-on-request-create-table.d.ts +13 -0
- package/dist/esm/hooks/use-on-request-create-table.d.ts.map +1 -0
- package/dist/esm/hooks/use-on-request-create-table.js +43 -0
- package/dist/esm/hooks/use-on-request-insert-slicer.d.ts +7 -0
- package/dist/esm/hooks/use-on-request-insert-slicer.d.ts.map +1 -0
- package/dist/esm/hooks/use-on-request-insert-slicer.js +15 -0
- package/dist/esm/hooks/use-on-request-resize-table.d.ts +7 -0
- package/dist/esm/hooks/use-on-request-resize-table.d.ts.map +1 -0
- package/dist/esm/hooks/use-on-request-resize-table.js +15 -0
- package/dist/esm/hooks/use-on-resize-table.d.ts +5 -1
- package/dist/esm/hooks/use-on-resize-table.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-resize-table.js +107 -27
- package/dist/esm/hooks/use-on-sort-column.d.ts +28 -3
- package/dist/esm/hooks/use-on-sort-column.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-sort-column.js +105 -68
- package/dist/esm/hooks/use-on-sort-range.d.ts +26 -3
- package/dist/esm/hooks/use-on-sort-range.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-sort-range.js +100 -64
- package/dist/esm/hooks/use-on-sort-table.d.ts +18 -1
- package/dist/esm/hooks/use-on-sort-table.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-sort-table.js +107 -86
- package/dist/esm/hooks/use-on-subtotal.d.ts +10 -3
- package/dist/esm/hooks/use-on-subtotal.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-subtotal.js +7 -5
- package/dist/esm/hooks/use-on-table.d.ts +39 -7
- package/dist/esm/hooks/use-on-table.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-table.js +234 -26
- package/dist/esm/hooks/use-on-undo-calculated-column.d.ts +23 -0
- package/dist/esm/hooks/use-on-undo-calculated-column.d.ts.map +1 -0
- package/dist/esm/hooks/use-on-undo-calculated-column.js +62 -0
- package/dist/esm/hooks/use-on-undo-table-auto-expansion.d.ts +28 -0
- package/dist/esm/hooks/use-on-undo-table-auto-expansion.d.ts.map +1 -0
- package/dist/esm/hooks/use-on-undo-table-auto-expansion.js +75 -0
- package/dist/esm/hooks/use-on-update-named-range.d.ts +4 -2
- package/dist/esm/hooks/use-on-update-named-range.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-update-named-range.js +13 -1
- package/dist/esm/hooks/use-sheet-properties.d.ts +1 -0
- package/dist/esm/hooks/use-sheet-properties.d.ts.map +1 -1
- package/dist/esm/hooks/use-sheet-properties.js +38 -19
- package/dist/esm/hooks/use-slicers.d.ts +2 -2
- package/dist/esm/hooks/use-slicers.d.ts.map +1 -1
- package/dist/esm/hooks/use-slicers.js +16 -8
- package/dist/esm/hooks/use-sparkline-groups.d.ts +50 -0
- package/dist/esm/hooks/use-sparkline-groups.d.ts.map +1 -0
- package/dist/esm/hooks/use-sparkline-groups.js +146 -0
- package/dist/esm/hooks/use-spreadsheet-state.d.ts +56 -10
- package/dist/esm/hooks/use-spreadsheet-state.d.ts.map +1 -1
- package/dist/esm/hooks/use-spreadsheet-state.js +260 -30
- package/dist/esm/hooks/use-structured-reference.d.ts.map +1 -1
- package/dist/esm/hooks/use-structured-reference.js +17 -0
- package/dist/esm/hooks/use-undo-redo-actions.d.ts +2 -1
- package/dist/esm/hooks/use-undo-redo-actions.d.ts.map +1 -1
- package/dist/esm/hooks/use-undo-redo-actions.js +8 -2
- package/dist/esm/hooks/use-undo-redo.d.ts +12 -0
- package/dist/esm/hooks/use-undo-redo.d.ts.map +1 -1
- package/dist/esm/hooks/use-undo-redo.js +158 -7
- package/dist/esm/hooks/utils/sort-rows.d.ts.map +1 -1
- package/dist/esm/hooks/utils/sort-rows.js +4 -3
- package/dist/esm/index.d.ts +7 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +8 -0
- package/dist/esm/interface/apply-fill.d.ts +26 -3
- package/dist/esm/interface/apply-fill.d.ts.map +1 -1
- package/dist/esm/interface/apply-fill.js +188 -88
- package/dist/esm/interface/change-batch.d.ts +1 -1
- package/dist/esm/interface/change-batch.d.ts.map +1 -1
- package/dist/esm/interface/change-batch.js +89 -8
- package/dist/esm/interface/change-calculated-column.d.ts +6 -2
- package/dist/esm/interface/change-calculated-column.d.ts.map +1 -1
- package/dist/esm/interface/change-calculated-column.js +81 -16
- package/dist/esm/interface/change-table-column.d.ts +81 -7
- package/dist/esm/interface/change-table-column.d.ts.map +1 -1
- package/dist/esm/interface/change-table-column.js +295 -67
- package/dist/esm/interface/create-table.d.ts +15 -3
- package/dist/esm/interface/create-table.d.ts.map +1 -1
- package/dist/esm/interface/create-table.js +103 -27
- package/dist/esm/interface/delete-cells-shift-left.d.ts +1 -1
- package/dist/esm/interface/delete-cells-shift-left.d.ts.map +1 -1
- package/dist/esm/interface/delete-cells-shift-left.js +17 -2
- package/dist/esm/interface/delete-cells-shift-up.d.ts +1 -1
- package/dist/esm/interface/delete-cells-shift-up.d.ts.map +1 -1
- package/dist/esm/interface/delete-cells-shift-up.js +17 -2
- package/dist/esm/interface/delete-cells.d.ts +1 -1
- package/dist/esm/interface/delete-cells.d.ts.map +1 -1
- package/dist/esm/interface/delete-cells.js +69 -30
- package/dist/esm/interface/delete-column.d.ts +1 -1
- package/dist/esm/interface/delete-column.d.ts.map +1 -1
- package/dist/esm/interface/delete-column.js +16 -3
- package/dist/esm/interface/delete-row.d.ts +1 -1
- package/dist/esm/interface/delete-row.d.ts.map +1 -1
- package/dist/esm/interface/delete-row.js +180 -16
- package/dist/esm/interface/delete-sheet.d.ts +2 -2
- package/dist/esm/interface/delete-sheet.d.ts.map +1 -1
- package/dist/esm/interface/delete-sheet.js +132 -1
- package/dist/esm/interface/delete-table-column.d.ts +1 -1
- package/dist/esm/interface/delete-table-column.d.ts.map +1 -1
- package/dist/esm/interface/delete-table-column.js +11 -1
- package/dist/esm/interface/delete-table-row.d.ts +1 -1
- package/dist/esm/interface/delete-table-row.d.ts.map +1 -1
- package/dist/esm/interface/delete-table-row.js +312 -232
- package/dist/esm/interface/duplicate-sheet.d.ts.map +1 -1
- package/dist/esm/interface/duplicate-sheet.js +73 -26
- package/dist/esm/interface/embeds.d.ts +10 -1
- package/dist/esm/interface/embeds.d.ts.map +1 -1
- package/dist/esm/interface/embeds.js +84 -5
- package/dist/esm/interface/insert-cells-shift-down.d.ts +1 -1
- package/dist/esm/interface/insert-cells-shift-down.d.ts.map +1 -1
- package/dist/esm/interface/insert-cells-shift-down.js +11 -1
- package/dist/esm/interface/insert-cells-shift-right.d.ts +1 -1
- package/dist/esm/interface/insert-cells-shift-right.d.ts.map +1 -1
- package/dist/esm/interface/insert-cells-shift-right.js +11 -1
- package/dist/esm/interface/insert-column.d.ts +2 -2
- package/dist/esm/interface/insert-column.d.ts.map +1 -1
- package/dist/esm/interface/insert-column.js +49 -23
- package/dist/esm/interface/insert-row.d.ts +1 -1
- package/dist/esm/interface/insert-row.d.ts.map +1 -1
- package/dist/esm/interface/insert-row.js +10 -2
- package/dist/esm/interface/insert-table-row.d.ts +2 -1
- package/dist/esm/interface/insert-table-row.d.ts.map +1 -1
- package/dist/esm/interface/insert-table-row.js +67 -12
- package/dist/esm/interface/remove-duplicates.d.ts +1 -1
- package/dist/esm/interface/remove-duplicates.d.ts.map +1 -1
- package/dist/esm/interface/remove-duplicates.js +41 -6
- package/dist/esm/interface/remove-table.d.ts +1 -1
- package/dist/esm/interface/remove-table.d.ts.map +1 -1
- package/dist/esm/interface/remove-table.js +58 -10
- package/dist/esm/interface/slicers.d.ts +12 -1
- package/dist/esm/interface/slicers.d.ts.map +1 -1
- package/dist/esm/interface/slicers.js +44 -2
- package/dist/esm/interface/spreadsheet-interface.d.ts +1 -1
- package/dist/esm/interface/spreadsheet-interface.d.ts.map +1 -1
- package/dist/esm/interface/spreadsheet-interface.js +73 -1
- package/dist/esm/interface/table-totalrow.d.ts +13 -1
- package/dist/esm/interface/table-totalrow.d.ts.map +1 -1
- package/dist/esm/interface/table-totalrow.js +98 -68
- package/dist/esm/interface/table-utils.d.ts +59 -6
- package/dist/esm/interface/table-utils.d.ts.map +1 -1
- package/dist/esm/interface/table-utils.js +155 -14
- package/dist/esm/interface/update-table.d.ts +16 -1
- package/dist/esm/interface/update-table.d.ts.map +1 -1
- package/dist/esm/interface/update-table.js +203 -42
- package/dist/esm/sheet-cell.d.ts.map +1 -1
- package/dist/esm/test-setup.d.ts.map +1 -1
- package/dist/esm/test-setup.js +6 -0
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/esm/validation-schema/table.schema.d.ts +11 -0
- package/dist/esm/validation-schema/table.schema.d.ts.map +1 -1
- package/dist/esm/validation-schema/table.schema.js +15 -2
- package/package.json +19 -11
|
@@ -3,6 +3,7 @@ import { getCellUserEnteredValue, getExtendedValueFormula, getStringifiedColor,
|
|
|
3
3
|
import { produceWithPatches } from "immer";
|
|
4
4
|
import { useCallback } from "react";
|
|
5
5
|
import { createSheetCellIdentifier } from "../api/formula";
|
|
6
|
+
import { getCellSortValue } from "../api/sort";
|
|
6
7
|
import { createSheetDraft } from "../api/immer-utils";
|
|
7
8
|
import { SheetCell } from "../sheet-cell";
|
|
8
9
|
import { useShowError } from "../atoms/error-state.atom";
|
|
@@ -32,7 +33,7 @@ const buildSortValue = (options, fallbackValue, getEffectiveFormat, theme, sheet
|
|
|
32
33
|
* @param param0
|
|
33
34
|
* @returns
|
|
34
35
|
*/
|
|
35
|
-
export const useOnSortColumn = ({ rowCount, columnCount, locale, sharedStringRegistry, createHistory, enqueueCalculation, enqueueStructureChange, enqueueGraphOperation, onChangeSheetData, isHiddenRow, getDependents, getFrozenRowCount, getSheetName, getEffectiveFormat, theme, enableSortTimingLogs, onCommand, }) => {
|
|
36
|
+
export const useOnSortColumn = ({ rowCount, columnCount, locale, sharedStringRegistry, createHistory, enqueueCalculation, enqueueStructureChange, enqueueGraphOperation, onChangeSheetData, onChangeSheets, getCellData, getDataRowCount, isHiddenRow, isManuallyHiddenRow, getDependents, getFrozenRowCount, getSheetName, getEffectiveFormat, theme, enableSortTimingLogs, onCommand, }) => {
|
|
36
37
|
const canEditSheet = useCanEditSheet();
|
|
37
38
|
const canPerformSheetAction = useCanPerformSheetAction();
|
|
38
39
|
const showError = useShowError();
|
|
@@ -72,82 +73,114 @@ export const useOnSortColumn = ({ rowCount, columnCount, locale, sharedStringReg
|
|
|
72
73
|
startColumnIndex: 1,
|
|
73
74
|
endColumnIndex: columnCount,
|
|
74
75
|
});
|
|
76
|
+
const startRowIndex = 1;
|
|
77
|
+
const startColumnIndex = 1;
|
|
78
|
+
const isPinnedRow = (rowIndex) => isManuallyHiddenRow
|
|
79
|
+
? isManuallyHiddenRow(sheetId, rowIndex)
|
|
80
|
+
: isHiddenRow(sheetId, rowIndex);
|
|
81
|
+
const overallStart = now();
|
|
82
|
+
// Gather the sort keys from the committed cell data. Pinned rows
|
|
83
|
+
// contribute no entry and are never rewritten.
|
|
84
|
+
const buildStart = now();
|
|
85
|
+
const dataRowCount = getDataRowCount(sheetId) ?? 0;
|
|
86
|
+
const rowEntries = [];
|
|
87
|
+
for (let rowIndex = startRowIndex; rowIndex <= dataRowCount; rowIndex++) {
|
|
88
|
+
if (isPinnedRow(rowIndex)) {
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
// Build one sort value per level: the primary column first,
|
|
92
|
+
// then each "then by" column in order.
|
|
93
|
+
const buildLevelValue = (columnIndex, levelOptions) => {
|
|
94
|
+
const sortCell = new SheetCell(sheetId, { rowIndex, columnIndex }, getCellData(sheetId, rowIndex, columnIndex), { locale, sharedStringRegistry });
|
|
95
|
+
const fallbackValue = getCellSortValue(sortCell);
|
|
96
|
+
return buildSortValue(levelOptions, fallbackValue, getEffectiveFormat, theme, sheetId, rowIndex, columnIndex);
|
|
97
|
+
};
|
|
98
|
+
const sortValues = [
|
|
99
|
+
buildLevelValue(sortedColumnIndex, options),
|
|
100
|
+
];
|
|
101
|
+
for (const level of additionalLevels ?? []) {
|
|
102
|
+
sortValues.push(buildLevelValue(level.columnIndex, level));
|
|
103
|
+
}
|
|
104
|
+
rowEntries.push({ rowIndex, sortValues });
|
|
105
|
+
}
|
|
106
|
+
const buildMs = now() - buildStart;
|
|
107
|
+
// The slots the sorted rows land on, ascending (the sort reorders
|
|
108
|
+
// `rowEntries` in place).
|
|
109
|
+
const destRows = rowEntries.map((entry) => entry.rowIndex);
|
|
110
|
+
// Sort data
|
|
111
|
+
const sortStart = now();
|
|
112
|
+
// Primary spec, then one spec per "then by" level. The order
|
|
113
|
+
// matches the sortValues built above so the comparator pairs
|
|
114
|
+
// each value with its spec. `sortedEntries[i]` is the row that
|
|
115
|
+
// lands on `destRows[i]`.
|
|
116
|
+
const specs = [
|
|
117
|
+
{
|
|
118
|
+
sortOrder,
|
|
119
|
+
sortBy: options?.sortBy ?? "value",
|
|
120
|
+
// Pre-resolve the target color the same way the cell sort
|
|
121
|
+
// values are resolved, so sort-rows.ts can compare strings.
|
|
122
|
+
sortColor: getStringifiedColor(options?.sortColor, theme),
|
|
123
|
+
sortIcon: options?.sortIcon,
|
|
124
|
+
customList: options?.customList,
|
|
125
|
+
},
|
|
126
|
+
...(additionalLevels ?? []).map((level) => ({
|
|
127
|
+
sortOrder: level.sortOrder,
|
|
128
|
+
sortBy: level.sortBy ?? "value",
|
|
129
|
+
sortColor: getStringifiedColor(level.sortColor, theme),
|
|
130
|
+
sortIcon: level.sortIcon,
|
|
131
|
+
customList: level.customList,
|
|
132
|
+
})),
|
|
133
|
+
];
|
|
134
|
+
const sortedEntries = sortRowEntriesByFrozenState(rowEntries, frozenRowCount, specs);
|
|
135
|
+
const sortMs = now() - sortStart;
|
|
136
|
+
// Carry each row's `hiddenByFilter` flag to the row's destination: a
|
|
137
|
+
// sort does not re-evaluate the filter, so the hidden set follows the
|
|
138
|
+
// rows.
|
|
139
|
+
onChangeSheets?.((prevSheets) => {
|
|
140
|
+
const [nextState, patches, inversePatches] = produceWithPatches(prevSheets, (draft) => {
|
|
141
|
+
const sheet = draft.find((sheet) => sheet.sheetId === sheetId);
|
|
142
|
+
if (!sheet) {
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
const hiddenByFilterAt = (rowIndex) => Boolean(sheet.rowMetadata?.[rowIndex]?.hiddenByFilter);
|
|
146
|
+
// Read every source flag before writing any destination.
|
|
147
|
+
const carried = destRows.map((rowIndex, index) => hiddenByFilterAt(sortedEntries[index]?.rowIndex ?? rowIndex));
|
|
148
|
+
destRows.forEach((rowIndex, index) => {
|
|
149
|
+
const hiddenByFilter = carried[index];
|
|
150
|
+
if (hiddenByFilter === hiddenByFilterAt(rowIndex)) {
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
if (!sheet.rowMetadata) {
|
|
154
|
+
sheet.rowMetadata = [];
|
|
155
|
+
}
|
|
156
|
+
sheet.rowMetadata[rowIndex] = {
|
|
157
|
+
...sheet.rowMetadata[rowIndex],
|
|
158
|
+
hiddenByFilter,
|
|
159
|
+
};
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
if (!patches.length) {
|
|
163
|
+
return prevSheets;
|
|
164
|
+
}
|
|
165
|
+
saveHistory({ sheets: { patches, inversePatches } });
|
|
166
|
+
return nextState;
|
|
167
|
+
});
|
|
75
168
|
// Update sheet data
|
|
76
169
|
onChangeSheetData?.((prevSheetData) => {
|
|
77
|
-
const overallStart = now();
|
|
78
|
-
let buildMs = 0;
|
|
79
|
-
let sortMs = 0;
|
|
80
170
|
let applyMs = 0;
|
|
81
171
|
const [nextState, patches, inversePatches] = produceWithPatches(prevSheetData, (draft) => {
|
|
82
172
|
const sheet = createSheetDraft(draft, sheetId);
|
|
83
|
-
const startRowIndex = 1;
|
|
84
|
-
const startColumnIndex = 1;
|
|
85
|
-
const rowCount = sheet.length;
|
|
86
|
-
const rowEntries = [];
|
|
87
173
|
const rowSnapshots = new Map();
|
|
88
|
-
const buildStart = now();
|
|
89
174
|
let maxColumnCount = 0;
|
|
90
|
-
for (
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
}
|
|
95
|
-
const rowValue = sheet[rowIndex];
|
|
96
|
-
const columnCount = rowValue?.values?.length ?? 0;
|
|
97
|
-
maxColumnCount = Math.max(maxColumnCount, columnCount);
|
|
98
|
-
rowSnapshots.set(rowIndex, (rowValue?.values ?? []).slice());
|
|
99
|
-
// Build one sort value per level: the primary column first,
|
|
100
|
-
// then each "then by" column in order.
|
|
101
|
-
const buildLevelValue = (columnIndex, levelOptions) => {
|
|
102
|
-
const sortCellData = rowValue?.values?.[columnIndex];
|
|
103
|
-
const sortCell = new SheetCell(sheetId, { rowIndex, columnIndex }, sortCellData, { locale, sharedStringRegistry });
|
|
104
|
-
const fallbackValue = sortCell.getEffectiveValue() ?? sortCell.formattedValue;
|
|
105
|
-
return buildSortValue(levelOptions, fallbackValue, getEffectiveFormat, theme, sheetId, rowIndex, columnIndex);
|
|
106
|
-
};
|
|
107
|
-
const sortValues = [
|
|
108
|
-
buildLevelValue(sortedColumnIndex, options),
|
|
109
|
-
];
|
|
110
|
-
for (const level of additionalLevels ?? []) {
|
|
111
|
-
sortValues.push(buildLevelValue(level.columnIndex, level));
|
|
112
|
-
}
|
|
113
|
-
rowEntries.push({ rowIndex, sortValues });
|
|
175
|
+
for (const rowIndex of destRows) {
|
|
176
|
+
const rowValues = sheet[rowIndex]?.values ?? [];
|
|
177
|
+
maxColumnCount = Math.max(maxColumnCount, rowValues.length);
|
|
178
|
+
rowSnapshots.set(rowIndex, rowValues.slice());
|
|
114
179
|
}
|
|
115
|
-
buildMs = now() - buildStart;
|
|
116
|
-
// Sort data
|
|
117
|
-
const sortStart = now();
|
|
118
|
-
// Primary spec, then one spec per "then by" level. The order
|
|
119
|
-
// matches the sortValues built above so the comparator pairs
|
|
120
|
-
// each value with its spec.
|
|
121
|
-
const specs = [
|
|
122
|
-
{
|
|
123
|
-
sortOrder,
|
|
124
|
-
sortBy: options?.sortBy ?? "value",
|
|
125
|
-
// Pre-resolve the target color the same way the cell sort
|
|
126
|
-
// values are resolved, so sort-rows.ts can compare strings.
|
|
127
|
-
sortColor: getStringifiedColor(options?.sortColor, theme),
|
|
128
|
-
sortIcon: options?.sortIcon,
|
|
129
|
-
customList: options?.customList,
|
|
130
|
-
},
|
|
131
|
-
...(additionalLevels ?? []).map((level) => ({
|
|
132
|
-
sortOrder: level.sortOrder,
|
|
133
|
-
sortBy: level.sortBy ?? "value",
|
|
134
|
-
sortColor: getStringifiedColor(level.sortColor, theme),
|
|
135
|
-
sortIcon: level.sortIcon,
|
|
136
|
-
customList: level.customList,
|
|
137
|
-
})),
|
|
138
|
-
];
|
|
139
|
-
const sortedEntries = sortRowEntriesByFrozenState(rowEntries, frozenRowCount, specs);
|
|
140
|
-
sortMs = now() - sortStart;
|
|
141
|
-
// Counter for how many rows we have skipped
|
|
142
|
-
let skippedRow = 0;
|
|
143
180
|
const applyStart = now();
|
|
144
|
-
for (let
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
skippedRow++;
|
|
148
|
-
continue;
|
|
149
|
-
}
|
|
150
|
-
const sourceRow = sortedEntries[rowIndex - skippedRow - startRowIndex];
|
|
181
|
+
for (let index = 0; index < destRows.length; index++) {
|
|
182
|
+
const rowIndex = destRows[index];
|
|
183
|
+
const sourceRow = sortedEntries[index];
|
|
151
184
|
if (!sourceRow) {
|
|
152
185
|
continue;
|
|
153
186
|
}
|
|
@@ -254,7 +287,11 @@ export const useOnSortColumn = ({ rowCount, columnCount, locale, sharedStringReg
|
|
|
254
287
|
enqueueStructureChange,
|
|
255
288
|
enqueueGraphOperation,
|
|
256
289
|
onChangeSheetData,
|
|
290
|
+
onChangeSheets,
|
|
291
|
+
getCellData,
|
|
292
|
+
getDataRowCount,
|
|
257
293
|
isHiddenRow,
|
|
294
|
+
isManuallyHiddenRow,
|
|
258
295
|
getDependents,
|
|
259
296
|
getFrozenRowCount,
|
|
260
297
|
canEditSheet,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { SelectionArea } from "@rowsncolumns/common-types";
|
|
2
|
-
import { type CellData, type SelectionAttributes, type SortOrder, type SpreadsheetTheme } from "@rowsncolumns/spreadsheet";
|
|
2
|
+
import { type CellData, type Sheet, type SelectionAttributes, type SortOrder, type SpreadsheetTheme } from "@rowsncolumns/spreadsheet";
|
|
3
3
|
import type { OnCommand } from "../commands";
|
|
4
4
|
import type { useCalculation } from "./use-calculation";
|
|
5
5
|
import type { useSheetProperties } from "./use-sheet-properties";
|
|
@@ -7,7 +7,7 @@ import type { UseSpreadsheetProps } from "./use-spreadsheet-state";
|
|
|
7
7
|
import type { SharedStringRegistry } from "./use-ss-registry";
|
|
8
8
|
import type { SpreadsheetPatch } from "./use-undo-redo";
|
|
9
9
|
import { type DimensionSortSpec } from "./utils/sort-rows";
|
|
10
|
-
export type UseOnSortRangeProps<T extends CellData> = {
|
|
10
|
+
export type UseOnSortRangeProps<T extends CellData, S extends Sheet = Sheet> = {
|
|
11
11
|
locale?: string;
|
|
12
12
|
sharedStringRegistry?: SharedStringRegistry;
|
|
13
13
|
createHistory(): (patches: SpreadsheetPatch) => void;
|
|
@@ -15,7 +15,30 @@ export type UseOnSortRangeProps<T extends CellData> = {
|
|
|
15
15
|
enqueueGraphOperation: ReturnType<typeof useCalculation>["enqueueGraphOperation"];
|
|
16
16
|
enqueueCalculation: ReturnType<typeof useCalculation>["enqueueCalculation"];
|
|
17
17
|
onChangeSheetData: UseSpreadsheetProps<T>["onChangeSheetData"];
|
|
18
|
+
/**
|
|
19
|
+
* Receives each sorted row's `hiddenByFilter` flag at its destination,
|
|
20
|
+
* in the same undo step as the cell rewrite. Without it filter-hidden
|
|
21
|
+
* rows still sort, but the hidden set stays on the old row numbers.
|
|
22
|
+
*/
|
|
23
|
+
onChangeSheets?: UseSpreadsheetProps<T, S>["onChangeSheets"];
|
|
24
|
+
/**
|
|
25
|
+
* Committed cell data — the sort keys are gathered from it before the
|
|
26
|
+
* state updaters run, so one row permutation drives both the sheet data
|
|
27
|
+
* rewrite and the row-metadata carry-over.
|
|
28
|
+
*/
|
|
29
|
+
getCellData(sheetId: number, rowIndex: number, columnIndex: number): T | null | undefined;
|
|
30
|
+
/**
|
|
31
|
+
* Any hidden row (by the user, a filter, or a collapsed group). Used as
|
|
32
|
+
* the pin predicate only when `isManuallyHiddenRow` is not supplied.
|
|
33
|
+
*/
|
|
18
34
|
isHiddenRow(sheetId: number, rowIndex: number): boolean;
|
|
35
|
+
/**
|
|
36
|
+
* A row the user hid (`hiddenByUser` / a collapsed outline group). These
|
|
37
|
+
* rows are pinned in place; rows an AutoFilter hid sort along with the
|
|
38
|
+
* visible ones and keep their `hiddenByFilter` flag at their destination,
|
|
39
|
+
* like Excel.
|
|
40
|
+
*/
|
|
41
|
+
isManuallyHiddenRow?(sheetId: number, rowIndex: number): boolean;
|
|
19
42
|
getDependents: ReturnType<typeof useCalculation>["getDependents"];
|
|
20
43
|
getFrozenRowCount(sheetId: number): number;
|
|
21
44
|
getSheetName(sheetId: number): string;
|
|
@@ -38,5 +61,5 @@ export type UseOnSortRangeProps<T extends CellData> = {
|
|
|
38
61
|
* @param param0
|
|
39
62
|
* @returns
|
|
40
63
|
*/
|
|
41
|
-
export declare const useOnSortRange: <T extends CellData>({ locale, sharedStringRegistry, createHistory, enqueueStructureChange, enqueueGraphOperation, enqueueCalculation, onChangeSheetData, getDependents, isHiddenRow, getFrozenRowCount, getSheetName, getEffectiveFormat, theme, onCommand, }: UseOnSortRangeProps<T>) => (sheetId: number, selections: SelectionArea<SelectionAttributes>[], sortOrder: SortOrder, specs?: DimensionSortSpec[]) => void;
|
|
64
|
+
export declare const useOnSortRange: <T extends CellData, S extends Sheet = Sheet>({ locale, sharedStringRegistry, createHistory, enqueueStructureChange, enqueueGraphOperation, enqueueCalculation, onChangeSheetData, onChangeSheets, getCellData, getDependents, isHiddenRow, isManuallyHiddenRow, getFrozenRowCount, getSheetName, getEffectiveFormat, theme, onCommand, }: UseOnSortRangeProps<T, S>) => (sheetId: number, selections: SelectionArea<SelectionAttributes>[], sortOrder: SortOrder, specs?: DimensionSortSpec[]) => void;
|
|
42
65
|
//# sourceMappingURL=use-on-sort-range.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-on-sort-range.d.ts","sourceRoot":"","sources":["../../../hooks/use-on-sort-range.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAGhE,OAAO,EACL,KAAK,QAAQ,
|
|
1
|
+
{"version":3,"file":"use-on-sort-range.d.ts","sourceRoot":"","sources":["../../../hooks/use-on-sort-range.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAGhE,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,KAAK,EAIV,KAAK,mBAAmB,EACxB,KAAK,SAAS,EACd,KAAK,gBAAgB,EACtB,MAAM,2BAA2B,CAAC;AAQnC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAS7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EACL,KAAK,iBAAiB,EAEvB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,MAAM,mBAAmB,CAC7B,CAAC,SAAS,QAAQ,EAClB,CAAC,SAAS,KAAK,GAAG,KAAK,IACrB;IACF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,aAAa,IAAI,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACrD,sBAAsB,CAAC,EAAE,UAAU,CACjC,OAAO,cAAc,CACtB,CAAC,wBAAwB,CAAC,CAAC;IAC5B,qBAAqB,EAAE,UAAU,CAC/B,OAAO,cAAc,CACtB,CAAC,uBAAuB,CAAC,CAAC;IAC3B,kBAAkB,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,oBAAoB,CAAC,CAAC;IAC5E,iBAAiB,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;IAC/D;;;;OAIG;IACH,cAAc,CAAC,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAC7D;;;;OAIG;IACH,WAAW,CACT,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;IACxB;;;OAGG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IACxD;;;;;OAKG;IACH,mBAAmB,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IACjE,aAAa,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,eAAe,CAAC,CAAC;IAClE,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3C,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IACtC;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,UAAU,CAC7B,OAAO,kBAAkB,CAC1B,CAAC,oBAAoB,CAAC,CAAC;IACxB;;;OAGG;IACH,KAAK,EAAE,gBAAgB,CAAC;IACxB,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,GAAG,KAAK,EAAE,6RAkBzE,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,eAMb,MAAM,cACH,aAAa,CAAC,mBAAmB,CAAC,EAAE,aACrC,SAAS,UAQZ,iBAAiB,EAAE,SA2UhC,CAAC"}
|
|
@@ -4,6 +4,7 @@ import { getCellUserEnteredValue, getExtendedValueFormula, getStringifiedColor,
|
|
|
4
4
|
import { produceWithPatches } from "immer";
|
|
5
5
|
import { useCallback } from "react";
|
|
6
6
|
import { createSheetCellIdentifier } from "../api/formula";
|
|
7
|
+
import { getCellSortValue } from "../api/sort";
|
|
7
8
|
import { createSheetDraft } from "../api/immer-utils";
|
|
8
9
|
import { useShowError } from "../atoms/error-state.atom";
|
|
9
10
|
import { SHEET_PROTECTION_ERROR_TITLE, useCanEditCellRange, useCanPerformSheetAction, } from "./use-can-edit-cellrange";
|
|
@@ -15,7 +16,7 @@ import { sortRowEntriesByFrozenState, } from "./utils/sort-rows";
|
|
|
15
16
|
* @param param0
|
|
16
17
|
* @returns
|
|
17
18
|
*/
|
|
18
|
-
export const useOnSortRange = ({ locale, sharedStringRegistry, createHistory, enqueueStructureChange, enqueueGraphOperation, enqueueCalculation, onChangeSheetData, getDependents, isHiddenRow, getFrozenRowCount, getSheetName, getEffectiveFormat, theme, onCommand, }) => {
|
|
19
|
+
export const useOnSortRange = ({ locale, sharedStringRegistry, createHistory, enqueueStructureChange, enqueueGraphOperation, enqueueCalculation, onChangeSheetData, onChangeSheets, getCellData, getDependents, isHiddenRow, isManuallyHiddenRow, getFrozenRowCount, getSheetName, getEffectiveFormat, theme, onCommand, }) => {
|
|
19
20
|
const canEditCellRange = useCanEditCellRange();
|
|
20
21
|
const canPerformSheetAction = useCanPerformSheetAction();
|
|
21
22
|
const showError = useShowError();
|
|
@@ -60,75 +61,107 @@ export const useOnSortRange = ({ locale, sharedStringRegistry, createHistory, en
|
|
|
60
61
|
startColumnIndex: selection.range.startColumnIndex,
|
|
61
62
|
endColumnIndex: selection.range.endColumnIndex,
|
|
62
63
|
});
|
|
64
|
+
const startRowIndex = selection.range.startRowIndex;
|
|
65
|
+
const endRowIndex = selection.range.endRowIndex;
|
|
66
|
+
const startColumnIndex = selection.range.startColumnIndex;
|
|
67
|
+
const endColumnIndex = selection.range.endColumnIndex;
|
|
68
|
+
const frozenRowCount = getFrozenRowCount(sheetId);
|
|
69
|
+
const isPinnedRow = (rowIndex) => isManuallyHiddenRow
|
|
70
|
+
? isManuallyHiddenRow(sheetId, rowIndex)
|
|
71
|
+
: isHiddenRow(sheetId, rowIndex);
|
|
72
|
+
// Gather the sort keys from the committed cell data. Pinned rows
|
|
73
|
+
// contribute no entry and are never rewritten.
|
|
74
|
+
const rowEntries = [];
|
|
75
|
+
for (let rowIndex = startRowIndex; rowIndex <= endRowIndex; rowIndex++) {
|
|
76
|
+
if (isPinnedRow(rowIndex)) {
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
const sortValues = [];
|
|
80
|
+
for (let columnIndex = startColumnIndex; columnIndex <= endColumnIndex; columnIndex++) {
|
|
81
|
+
const sheetCell = new SheetCell(sheetId, { rowIndex, columnIndex }, getCellData(sheetId, rowIndex, columnIndex), { locale, sharedStringRegistry });
|
|
82
|
+
const fallbackValue = getCellSortValue(sheetCell);
|
|
83
|
+
// When the per-column spec sorts by color/icon, swap the
|
|
84
|
+
// value for the matching attribute from the cell's
|
|
85
|
+
// effective format so sort-rows.ts can compare it.
|
|
86
|
+
const spec = specs?.[columnIndex - startColumnIndex];
|
|
87
|
+
const sortBy = spec?.sortBy ?? "value";
|
|
88
|
+
const fmt = sortBy === "cellColor" || sortBy === "fontColor" || sortBy === "icon"
|
|
89
|
+
? getEffectiveFormat?.(sheetId, rowIndex, columnIndex)
|
|
90
|
+
: undefined;
|
|
91
|
+
const sortValue = sortBy === "cellColor"
|
|
92
|
+
? getStringifiedColor(fmt?.backgroundColor, theme)
|
|
93
|
+
: sortBy === "fontColor"
|
|
94
|
+
? getStringifiedColor(fmt?.textFormat?.color, theme)
|
|
95
|
+
: sortBy === "icon"
|
|
96
|
+
? fmt?.conditionalIcon
|
|
97
|
+
? {
|
|
98
|
+
iconSet: fmt.conditionalIcon.iconSet,
|
|
99
|
+
iconId: fmt.conditionalIcon.iconId,
|
|
100
|
+
}
|
|
101
|
+
: undefined
|
|
102
|
+
: fallbackValue;
|
|
103
|
+
sortValues.push(sortValue);
|
|
104
|
+
}
|
|
105
|
+
rowEntries.push({ rowIndex, sortValues });
|
|
106
|
+
}
|
|
107
|
+
// The slots the sorted rows land on, ascending (the sort reorders
|
|
108
|
+
// `rowEntries` in place).
|
|
109
|
+
const destRows = rowEntries.map((entry) => entry.rowIndex);
|
|
110
|
+
// Sort each column. When per-column specs are provided, use
|
|
111
|
+
// them as multi-level "then by" specs (pre-resolving any
|
|
112
|
+
// target colors so sort-rows.ts can compare strings). Otherwise
|
|
113
|
+
// fall back to the legacy uniform-direction behavior.
|
|
114
|
+
// `sortedEntries[i]` is the row that lands on `destRows[i]`.
|
|
115
|
+
const sortSpecs = specs
|
|
116
|
+
? specs.map((spec) => ({
|
|
117
|
+
...spec,
|
|
118
|
+
sortColor: getStringifiedColor(spec.sortColor, theme),
|
|
119
|
+
}))
|
|
120
|
+
: new Array(rowEntries[0]?.sortValues.length ?? 0).fill(sortOrder);
|
|
121
|
+
const sortedEntries = sortRowEntriesByFrozenState(rowEntries, frozenRowCount, sortSpecs);
|
|
122
|
+
// Carry each row's `hiddenByFilter` flag to the row's destination: a
|
|
123
|
+
// sort does not re-evaluate the filter, so the hidden set follows the
|
|
124
|
+
// rows.
|
|
125
|
+
onChangeSheets?.((prevSheets) => {
|
|
126
|
+
const [nextState, patches, inversePatches] = produceWithPatches(prevSheets, (draft) => {
|
|
127
|
+
const sheet = draft.find((sheet) => sheet.sheetId === sheetId);
|
|
128
|
+
if (!sheet) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
const hiddenByFilterAt = (rowIndex) => Boolean(sheet.rowMetadata?.[rowIndex]?.hiddenByFilter);
|
|
132
|
+
// Read every source flag before writing any destination.
|
|
133
|
+
const carried = destRows.map((rowIndex, index) => hiddenByFilterAt(sortedEntries[index]?.rowIndex ?? rowIndex));
|
|
134
|
+
destRows.forEach((rowIndex, index) => {
|
|
135
|
+
const hiddenByFilter = carried[index];
|
|
136
|
+
if (hiddenByFilter === hiddenByFilterAt(rowIndex)) {
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
if (!sheet.rowMetadata) {
|
|
140
|
+
sheet.rowMetadata = [];
|
|
141
|
+
}
|
|
142
|
+
sheet.rowMetadata[rowIndex] = {
|
|
143
|
+
...sheet.rowMetadata[rowIndex],
|
|
144
|
+
hiddenByFilter,
|
|
145
|
+
};
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
if (!patches.length) {
|
|
149
|
+
return prevSheets;
|
|
150
|
+
}
|
|
151
|
+
saveHistory({ sheets: { patches, inversePatches } });
|
|
152
|
+
return nextState;
|
|
153
|
+
});
|
|
63
154
|
// Update sheet data
|
|
64
155
|
onChangeSheetData?.((prevSheetData) => {
|
|
65
156
|
const [nextState, patches, inversePatches] = produceWithPatches(prevSheetData, (draft) => {
|
|
66
157
|
const sheet = createSheetDraft(draft, sheetId);
|
|
67
|
-
const startRowIndex = selection.range.startRowIndex;
|
|
68
|
-
const endRowIndex = selection.range.endRowIndex;
|
|
69
|
-
const startColumnIndex = selection.range.startColumnIndex;
|
|
70
|
-
const endColumnIndex = selection.range.endColumnIndex;
|
|
71
|
-
const rowEntries = [];
|
|
72
158
|
const rowSnapshots = new Map();
|
|
73
|
-
const
|
|
74
|
-
|
|
75
|
-
// Ignore hidden rows
|
|
76
|
-
if (isHiddenRow(sheetId, rowIndex)) {
|
|
77
|
-
continue;
|
|
78
|
-
}
|
|
79
|
-
const rowValue = sheet[rowIndex];
|
|
80
|
-
const sortValues = [];
|
|
81
|
-
for (let columnIndex = startColumnIndex; columnIndex <= endColumnIndex; columnIndex++) {
|
|
82
|
-
const cellData = rowValue?.values?.[columnIndex];
|
|
83
|
-
const sheetCell = new SheetCell(sheetId, { rowIndex, columnIndex }, cellData, { locale, sharedStringRegistry });
|
|
84
|
-
const fallbackValue = sheetCell.getEffectiveValue() ?? sheetCell.formattedValue;
|
|
85
|
-
// When the per-column spec sorts by color/icon, swap the
|
|
86
|
-
// value for the matching attribute from the cell's
|
|
87
|
-
// effective format so sort-rows.ts can compare it.
|
|
88
|
-
const spec = specs?.[columnIndex - startColumnIndex];
|
|
89
|
-
const sortBy = spec?.sortBy ?? "value";
|
|
90
|
-
const fmt = sortBy === "cellColor" ||
|
|
91
|
-
sortBy === "fontColor" ||
|
|
92
|
-
sortBy === "icon"
|
|
93
|
-
? getEffectiveFormat?.(sheetId, rowIndex, columnIndex)
|
|
94
|
-
: undefined;
|
|
95
|
-
const sortValue = sortBy === "cellColor"
|
|
96
|
-
? getStringifiedColor(fmt?.backgroundColor, theme)
|
|
97
|
-
: sortBy === "fontColor"
|
|
98
|
-
? getStringifiedColor(fmt?.textFormat?.color, theme)
|
|
99
|
-
: sortBy === "icon"
|
|
100
|
-
? fmt?.conditionalIcon
|
|
101
|
-
? {
|
|
102
|
-
iconSet: fmt.conditionalIcon.iconSet,
|
|
103
|
-
iconId: fmt.conditionalIcon.iconId,
|
|
104
|
-
}
|
|
105
|
-
: undefined
|
|
106
|
-
: fallbackValue;
|
|
107
|
-
sortValues.push(sortValue);
|
|
108
|
-
}
|
|
109
|
-
rowSnapshots.set(rowIndex, (rowValue?.values ?? []).slice());
|
|
110
|
-
rowEntries.push({ rowIndex, sortValues });
|
|
159
|
+
for (const rowIndex of destRows) {
|
|
160
|
+
rowSnapshots.set(rowIndex, (sheet[rowIndex]?.values ?? []).slice());
|
|
111
161
|
}
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
// fall back to the legacy uniform-direction behavior.
|
|
116
|
-
const sortSpecs = specs
|
|
117
|
-
? specs.map((spec) => ({
|
|
118
|
-
...spec,
|
|
119
|
-
sortColor: getStringifiedColor(spec.sortColor, theme),
|
|
120
|
-
}))
|
|
121
|
-
: new Array(rowEntries[0]?.sortValues.length ?? 0).fill(sortOrder);
|
|
122
|
-
const sortedEntries = sortRowEntriesByFrozenState(rowEntries, frozenRowCount, sortSpecs);
|
|
123
|
-
// Counter for how many rows we have skipped
|
|
124
|
-
let skippedRow = 0;
|
|
125
|
-
for (let rowIndex = startRowIndex; rowIndex <= endRowIndex; rowIndex++) {
|
|
126
|
-
// Ignore hidden rows
|
|
127
|
-
if (isHiddenRow(sheetId, rowIndex)) {
|
|
128
|
-
skippedRow++;
|
|
129
|
-
continue;
|
|
130
|
-
}
|
|
131
|
-
const sourceRow = sortedEntries[rowIndex - skippedRow - startRowIndex];
|
|
162
|
+
for (let index = 0; index < destRows.length; index++) {
|
|
163
|
+
const rowIndex = destRows[index];
|
|
164
|
+
const sourceRow = sortedEntries[index];
|
|
132
165
|
if (!sourceRow) {
|
|
133
166
|
continue;
|
|
134
167
|
}
|
|
@@ -234,7 +267,10 @@ export const useOnSortRange = ({ locale, sharedStringRegistry, createHistory, en
|
|
|
234
267
|
enqueueGraphOperation,
|
|
235
268
|
enqueueCalculation,
|
|
236
269
|
onChangeSheetData,
|
|
270
|
+
onChangeSheets,
|
|
271
|
+
getCellData,
|
|
237
272
|
isHiddenRow,
|
|
273
|
+
isManuallyHiddenRow,
|
|
238
274
|
getFrozenRowCount,
|
|
239
275
|
getSheetName,
|
|
240
276
|
getEffectiveFormat,
|
|
@@ -32,7 +32,24 @@ type UseOnSortTableProps<T extends CellData, S extends Sheet> = {
|
|
|
32
32
|
onChangeSheetData: UseSpreadsheetProps<T, S>["onChangeSheetData"];
|
|
33
33
|
onChangeTables: UseSpreadsheetProps<T, S>["onChangeTables"];
|
|
34
34
|
onChangeSheets: UseSpreadsheetProps<T, S>["onChangeSheets"];
|
|
35
|
+
/**
|
|
36
|
+
* Committed cell data — the sort keys are gathered from it before the
|
|
37
|
+
* state updaters run, so one row permutation drives both the sheet data
|
|
38
|
+
* rewrite and the row-metadata carry-over.
|
|
39
|
+
*/
|
|
40
|
+
getCellData(sheetId: number, rowIndex: number, columnIndex: number): T | null | undefined;
|
|
41
|
+
/**
|
|
42
|
+
* Any hidden row (by the user, a filter, or a collapsed group). Used as
|
|
43
|
+
* the pin predicate only when `isManuallyHiddenRow` is not supplied.
|
|
44
|
+
*/
|
|
35
45
|
isHiddenRow(sheetId: number, rowIndex: number): boolean;
|
|
46
|
+
/**
|
|
47
|
+
* A row the user hid (`hiddenByUser` / a collapsed outline group). These
|
|
48
|
+
* rows are pinned in place; rows an AutoFilter hid sort along with the
|
|
49
|
+
* visible ones and keep their `hiddenByFilter` flag at their destination,
|
|
50
|
+
* like Excel.
|
|
51
|
+
*/
|
|
52
|
+
isManuallyHiddenRow?(sheetId: number, rowIndex: number): boolean;
|
|
36
53
|
getDependents: ReturnType<typeof useCalculation>["getDependents"];
|
|
37
54
|
getActiveCell: () => CellInterface;
|
|
38
55
|
getFrozenRowCount(sheetId: number): number;
|
|
@@ -54,6 +71,6 @@ type UseOnSortTableProps<T extends CellData, S extends Sheet> = {
|
|
|
54
71
|
* @param param0
|
|
55
72
|
* @returns
|
|
56
73
|
*/
|
|
57
|
-
export declare const useOnSortTable: <T extends CellData, S extends Sheet>({ locale, sharedStringRegistry, createHistory, enqueueCalculation, enqueueStructureChange, enqueueGraphOperation, onChangeSheetData, onChangeTables, onChangeSheets, getDependents, isHiddenRow, getActiveCell, getFrozenRowCount, getSheetName, getEffectiveFormat, theme, enableSortTimingLogs, onCommand, }: UseOnSortTableProps<T, S>) => OnSortTable;
|
|
74
|
+
export declare const useOnSortTable: <T extends CellData, S extends Sheet>({ locale, sharedStringRegistry, createHistory, enqueueCalculation, enqueueStructureChange, enqueueGraphOperation, onChangeSheetData, onChangeTables, onChangeSheets, getCellData, getDependents, isHiddenRow, isManuallyHiddenRow, getActiveCell, getFrozenRowCount, getSheetName, getEffectiveFormat, theme, enableSortTimingLogs, onCommand, }: UseOnSortTableProps<T, S>) => OnSortTable;
|
|
58
75
|
export {};
|
|
59
76
|
//# sourceMappingURL=use-on-sort-table.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-on-sort-table.d.ts","sourceRoot":"","sources":["../../../hooks/use-on-sort-table.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAGhE,OAAO,KAAK,EACV,QAAQ,EACR,UAAU,EACV,KAAK,EACL,SAAS,EACT,SAAS,EACT,SAAS,EACV,MAAM,2BAA2B,CAAC;AAMnC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"use-on-sort-table.d.ts","sourceRoot":"","sources":["../../../hooks/use-on-sort-table.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAGhE,OAAO,KAAK,EACV,QAAQ,EACR,UAAU,EACV,KAAK,EACL,SAAS,EACT,SAAS,EACT,SAAS,EACV,MAAM,2BAA2B,CAAC;AAMnC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AASlE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAS7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EACL,KAAK,iBAAiB,EAEvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,MAAM,MAAM,gBAAgB,GAAG,IAAI,CACjC,iBAAiB,EACjB,QAAQ,GAAG,WAAW,GAAG,UAAU,GAAG,YAAY,CACnD,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,CACE,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,UAAU,GAAG,SAAS,EAC9B,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,SAAS,EACpB,OAAO,CAAC,EAAE,gBAAgB,GACzB,IAAI,CAAC;IACR,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;CAC7E,CAAC;AAEF,KAAK,mBAAmB,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,IAAI;IAC9D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,aAAa,IAAI,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACrD,kBAAkB,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,oBAAoB,CAAC,CAAC;IAC5E,sBAAsB,CAAC,EAAE,UAAU,CACjC,OAAO,cAAc,CACtB,CAAC,wBAAwB,CAAC,CAAC;IAC5B,qBAAqB,EAAE,UAAU,CAC/B,OAAO,cAAc,CACtB,CAAC,uBAAuB,CAAC,CAAC;IAC3B,iBAAiB,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;IAClE,cAAc,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAC5D,cAAc,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAC5D;;;;OAIG;IACH,WAAW,CACT,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;IACxB;;;OAGG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IACxD;;;;;OAKG;IACH,mBAAmB,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IACjE,aAAa,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,eAAe,CAAC,CAAC;IAClE,aAAa,EAAE,MAAM,aAAa,CAAC;IACnC,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3C,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IACtC;;OAEG;IACH,kBAAkB,CAAC,EAAE,UAAU,CAC7B,OAAO,kBAAkB,CAC1B,CAAC,oBAAoB,CAAC,CAAC;IACxB;;;OAGG;IACH,KAAK,EAAE,gBAAgB,CAAC;IACxB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,kVAqBjE,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,KAsbP,WACpB,CAAC"}
|