@rowsncolumns/spreadsheet 10.5.5 → 10.5.7
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/components/canvas-grid/index.d.ts.map +1 -1
- package/dist/cjs/components/canvas-grid/index.js +119 -64
- package/dist/cjs/components/canvas-grid/typings.d.ts +24 -1
- package/dist/cjs/components/canvas-grid/typings.d.ts.map +1 -1
- package/dist/cjs/components/cell/index.d.ts.map +1 -1
- package/dist/cjs/components/cell/index.js +15 -6
- package/dist/cjs/components/cell/line-height.d.ts +10 -10
- package/dist/cjs/components/cell/line-height.d.ts.map +1 -1
- package/dist/cjs/components/cell/line-height.js +17 -19
- package/dist/cjs/components/cell/typings.d.ts +3 -1
- package/dist/cjs/components/cell/typings.d.ts.map +1 -1
- package/dist/cjs/components/cell-editor/index.d.ts +1 -1
- package/dist/cjs/components/cell-editor/index.d.ts.map +1 -1
- package/dist/cjs/components/cell-editor/index.js +24 -8
- package/dist/cjs/components/cell-input/formula-bar-cell-input.d.ts.map +1 -1
- package/dist/cjs/components/cell-input/formula-bar-cell-input.js +49 -6
- package/dist/cjs/helpers.d.ts.map +1 -1
- package/dist/cjs/helpers.js +2 -1
- package/dist/cjs/hooks/use-context-setter.d.ts.map +1 -1
- package/dist/cjs/hooks/use-context-setter.js +3 -1
- package/dist/cjs/hooks/use-editable.d.ts +29 -1
- package/dist/cjs/hooks/use-editable.d.ts.map +1 -1
- package/dist/cjs/hooks/use-editable.js +70 -13
- package/dist/cjs/hooks/use-editor-change.d.ts.map +1 -1
- package/dist/cjs/hooks/use-editor-change.js +9 -3
- package/dist/cjs/hooks/use-editor-keydown.d.ts +2 -1
- package/dist/cjs/hooks/use-editor-keydown.d.ts.map +1 -1
- package/dist/cjs/hooks/use-editor-keydown.js +5 -3
- package/dist/cjs/hooks/use-filter.d.ts +1 -1
- package/dist/cjs/hooks/use-filter.d.ts.map +1 -1
- package/dist/cjs/hooks/use-filter.js +4 -2
- package/dist/cjs/hooks/use-keyboard-handler.d.ts +9 -1
- package/dist/cjs/hooks/use-keyboard-handler.d.ts.map +1 -1
- package/dist/cjs/hooks/use-keyboard-handler.js +88 -39
- package/dist/cjs/hooks/use-sizer.d.ts +3 -1
- package/dist/cjs/hooks/use-sizer.d.ts.map +1 -1
- package/dist/cjs/hooks/use-sizer.js +7 -4
- package/dist/cjs/platform.d.ts +9 -0
- package/dist/cjs/platform.d.ts.map +1 -0
- package/dist/cjs/platform.js +21 -0
- package/dist/cjs/release-date.js +1 -1
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/esm/components/canvas-grid/index.d.ts.map +1 -1
- package/dist/esm/components/canvas-grid/index.js +57 -5
- package/dist/esm/components/canvas-grid/typings.d.ts +24 -1
- package/dist/esm/components/canvas-grid/typings.d.ts.map +1 -1
- package/dist/esm/components/cell/index.d.ts.map +1 -1
- package/dist/esm/components/cell/index.js +17 -8
- package/dist/esm/components/cell/line-height.d.ts +10 -10
- package/dist/esm/components/cell/line-height.d.ts.map +1 -1
- package/dist/esm/components/cell/line-height.js +15 -15
- package/dist/esm/components/cell/typings.d.ts +3 -1
- package/dist/esm/components/cell/typings.d.ts.map +1 -1
- package/dist/esm/components/cell-editor/index.d.ts +1 -1
- package/dist/esm/components/cell-editor/index.d.ts.map +1 -1
- package/dist/esm/components/cell-editor/index.js +20 -4
- package/dist/esm/components/cell-input/formula-bar-cell-input.d.ts.map +1 -1
- package/dist/esm/components/cell-input/formula-bar-cell-input.js +49 -7
- package/dist/esm/helpers.d.ts.map +1 -1
- package/dist/esm/helpers.js +2 -1
- package/dist/esm/hooks/use-context-setter.d.ts.map +1 -1
- package/dist/esm/hooks/use-context-setter.js +3 -1
- package/dist/esm/hooks/use-editable.d.ts +29 -1
- package/dist/esm/hooks/use-editable.d.ts.map +1 -1
- package/dist/esm/hooks/use-editable.js +67 -7
- package/dist/esm/hooks/use-editor-change.d.ts.map +1 -1
- package/dist/esm/hooks/use-editor-change.js +10 -4
- package/dist/esm/hooks/use-editor-keydown.d.ts +2 -1
- package/dist/esm/hooks/use-editor-keydown.d.ts.map +1 -1
- package/dist/esm/hooks/use-editor-keydown.js +5 -3
- package/dist/esm/hooks/use-filter.d.ts +1 -1
- package/dist/esm/hooks/use-filter.d.ts.map +1 -1
- package/dist/esm/hooks/use-filter.js +4 -2
- package/dist/esm/hooks/use-keyboard-handler.d.ts +9 -1
- package/dist/esm/hooks/use-keyboard-handler.d.ts.map +1 -1
- package/dist/esm/hooks/use-keyboard-handler.js +88 -39
- package/dist/esm/hooks/use-sizer.d.ts +3 -1
- package/dist/esm/hooks/use-sizer.d.ts.map +1 -1
- package/dist/esm/hooks/use-sizer.js +8 -5
- package/dist/esm/platform.d.ts +9 -0
- package/dist/esm/platform.d.ts.map +1 -0
- package/dist/esm/platform.js +16 -0
- package/dist/esm/release-date.js +1 -1
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/package.json +2 -2
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { cn } from "@rowsncolumns/ui";
|
|
2
2
|
import React, { memo, useCallback, useMemo, useRef } from "react";
|
|
3
|
+
import { useSetActiveEditor } from "../../atoms/active-editor.atom";
|
|
3
4
|
import { useCellInputContext } from "../../atoms/cell-input-context.atom";
|
|
4
5
|
import { useEditingCellCoordinate } from "../../atoms/editing-cell.atom";
|
|
5
6
|
import { useFormulaLocale } from "../../atoms/sheet-context.atom";
|
|
6
|
-
import { useFormulabarEditorValue, useFormulaBarTextFormatRuns, useSetFormulaBarEditorInstance, } from "../../atoms/formula-bar-editor-value.atom";
|
|
7
|
+
import { useCellEditorInstance, useFormulabarEditorValue, useFormulaBarTextFormatRuns, useSetFormulaBarEditorInstance, } from "../../atoms/formula-bar-editor-value.atom";
|
|
7
8
|
import { useMergeRefs } from "../../hooks/use-merge.refs";
|
|
8
9
|
import { CellInput } from "./cell-input";
|
|
9
10
|
export const FormulaBarInput = memo(({ activeCell, functionDescriptions, onKeyDown, sheetId, SuggestionsDropdown, editorClassName, ...props }) => {
|
|
@@ -12,6 +13,8 @@ export const FormulaBarInput = memo(({ activeCell, functionDescriptions, onKeyDo
|
|
|
12
13
|
const [textFormatRuns] = useFormulaBarTextFormatRuns();
|
|
13
14
|
const setFormulaBarEditorInstance = useSetFormulaBarEditorInstance();
|
|
14
15
|
const mergedEditorRef = useMergeRefs(editorRef, setFormulaBarEditorInstance);
|
|
16
|
+
const cellEditorInstance = useCellEditorInstance();
|
|
17
|
+
const setActiveEditor = useSetActiveEditor();
|
|
15
18
|
const editingCellCoordinate = useEditingCellCoordinate();
|
|
16
19
|
const formulaLocale = useFormulaLocale();
|
|
17
20
|
const isEditInProgress = Boolean(editingCellCoordinate);
|
|
@@ -25,11 +28,38 @@ export const FormulaBarInput = memo(({ activeCell, functionDescriptions, onKeyDo
|
|
|
25
28
|
return !canEdit;
|
|
26
29
|
}, [editingCell, editingSheetId, canEditCell]);
|
|
27
30
|
const handleChange = useCallback((value, textFormatRuns) => {
|
|
28
|
-
if (editingCell) {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
+
if (!editingCell) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
if (!isEditInProgress) {
|
|
35
|
+
// The bar kept the focus after the host ended the edit (a sheet
|
|
36
|
+
// switch or an outside click commits without refocusing the grid):
|
|
37
|
+
// the keystroke starts an edit, as the click into the bar did, so
|
|
38
|
+
// the text is never typed into nothing. The bar stays the active
|
|
39
|
+
// editor, as after that click.
|
|
40
|
+
makeEditable?.(sheetId, editingCell, value, { autoFocus: false });
|
|
41
|
+
setActiveEditor(editorRef.current ?? undefined);
|
|
31
42
|
}
|
|
32
|
-
|
|
43
|
+
// This will update formula bar editor value too
|
|
44
|
+
setEditorValue?.(value, textFormatRuns, editingSheetId, editingCell);
|
|
45
|
+
}, [
|
|
46
|
+
setEditorValue,
|
|
47
|
+
makeEditable,
|
|
48
|
+
setActiveEditor,
|
|
49
|
+
sheetId,
|
|
50
|
+
editingSheetId,
|
|
51
|
+
editingCell,
|
|
52
|
+
isEditInProgress,
|
|
53
|
+
]);
|
|
54
|
+
// Excel: Esc cancels the entry, Enter / Tab commit it, and each hands the
|
|
55
|
+
// keyboard focus back to the worksheet, so the arrow keys move the active
|
|
56
|
+
// cell and the next printable key starts a new entry. The grid's own
|
|
57
|
+
// refocus (`focusSheet`) declines while the focus sits outside the grid
|
|
58
|
+
// container, which the bar does, so the bar gives the focus to the
|
|
59
|
+
// grid's key sink — its sticky cell editor — itself.
|
|
60
|
+
const returnFocusToSheet = useCallback(() => {
|
|
61
|
+
cellEditorInstance?.focus();
|
|
62
|
+
}, [cellEditorInstance]);
|
|
33
63
|
// Focus, show cell editor
|
|
34
64
|
const handleFocus = useCallback(() => {
|
|
35
65
|
if (editingCell && !isEditInProgress) {
|
|
@@ -41,14 +71,26 @@ export const FormulaBarInput = memo(({ activeCell, functionDescriptions, onKeyDo
|
|
|
41
71
|
if (editingCell) {
|
|
42
72
|
submitEditor?.(value, textFormatRuns, editingSheetId, editingCell, getNextFocusableCell?.(editingSheetId, editingCell, direction));
|
|
43
73
|
}
|
|
44
|
-
|
|
74
|
+
returnFocusToSheet();
|
|
75
|
+
}, [
|
|
76
|
+
getNextFocusableCell,
|
|
77
|
+
submitEditor,
|
|
78
|
+
editingSheetId,
|
|
79
|
+
editingCell,
|
|
80
|
+
returnFocusToSheet,
|
|
81
|
+
]);
|
|
82
|
+
// User cancels the entry
|
|
83
|
+
const handleCancel = useCallback((e) => {
|
|
84
|
+
cancelEditor?.(e);
|
|
85
|
+
returnFocusToSheet();
|
|
86
|
+
}, [cancelEditor, returnFocusToSheet]);
|
|
45
87
|
// Keydown event
|
|
46
88
|
const handleKeyDown = useCallback((e) => {
|
|
47
89
|
// Pass it on to main editor, for cell navigation
|
|
48
90
|
onEditorKeyDown?.(e);
|
|
49
91
|
onKeyDown?.(e);
|
|
50
92
|
}, [onEditorKeyDown, onKeyDown]);
|
|
51
|
-
return (React.createElement(CellInput, { ref: mergedEditorRef, value: value, onChange: handleChange, onFocus: handleFocus, onSubmit: handleSubmit, onCancel:
|
|
93
|
+
return (React.createElement(CellInput, { ref: mergedEditorRef, value: value, onChange: handleChange, onFocus: handleFocus, onSubmit: handleSubmit, onCancel: handleCancel, onKeyDown: handleKeyDown, disabled: isProtected, functionDescriptions: functionDescriptions, getNamedRanges: getNamedRanges, getTableNames: getTableNames, getTableColumnNames: getTableColumnNames, SuggestionsDropdown: SuggestionsDropdown, formulaLocale: formulaLocale,
|
|
52
94
|
// Excel parity: the formula bar always renders plain-colored text —
|
|
53
95
|
// run color marks stay in the doc (and the in-cell editor) but must
|
|
54
96
|
// not paint here, where a light run color on the light bar background
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAMnE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../helpers.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/helpers.js
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { canUseDOM, cellIdentifier, isCellWithinBounds, } from "@rowsncolumns/grid";
|
|
2
2
|
import { isNil, number2Alpha, stripDataValidationTextPrefix, } from "@rowsncolumns/utils";
|
|
3
3
|
import { CHIP_HEIGHT, CHIP_SPACING, CONDITION_NONE } from "./config";
|
|
4
|
+
import { isMacPlatform } from "./platform";
|
|
4
5
|
// Check if browser is Firefox
|
|
5
6
|
export const isFirefox = canUseDOM
|
|
6
7
|
? navigator.userAgent.indexOf("Firefox") !== -1
|
|
7
8
|
: false;
|
|
8
9
|
// Check if platform is macOS, where Ctrl+click is the context menu gesture
|
|
9
|
-
export const isMac =
|
|
10
|
+
export const isMac = isMacPlatform();
|
|
10
11
|
/* Converts point to pixel */
|
|
11
12
|
export const pointToPixel = (pt) => Math.round((13 / 10) * pt);
|
|
12
13
|
/* Convert pixel to point */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-context-setter.d.ts","sourceRoot":"","sources":["../../../hooks/use-context-setter.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAG3E,eAAO,MAAM,gBAAgB,GAC3B,cAAc,KAAK,CAAC,YAAY,CAAC,iBAAiB,CAAC,EACnD,cAAc,iBAAiB,
|
|
1
|
+
{"version":3,"file":"use-context-setter.d.ts","sourceRoot":"","sources":["../../../hooks/use-context-setter.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAG3E,eAAO,MAAM,gBAAgB,GAC3B,cAAc,KAAK,CAAC,YAAY,CAAC,iBAAiB,CAAC,EACnD,cAAc,iBAAiB,SAuMhC,CAAC"}
|
|
@@ -3,7 +3,7 @@ import { useSetSpreadsheetContext } from "../atoms/sheet-context.atom";
|
|
|
3
3
|
import { useIsomorphicLayoutEffect } from "./use-isomorphic-layout-effect";
|
|
4
4
|
export const useContextSetter = (forwardedRef, contextValue) => {
|
|
5
5
|
const setSpreadsheetContext = useSetSpreadsheetContext();
|
|
6
|
-
const { submitEditor, cancelEditor, commit, makeEditable, editCell, getNextFocusableCell, onEditorKeyDown, scrollToCell, scrollToChart, scrollToBottom, focusSheet, canEditCell, isSheetProtected, isWorkbookProtected, getSheetProtection, getSelectionsFromFormula, getAddressFromSelection, getR1C1AddressFromSelection, tokenizer, localeTokenizer, formulaLocale, setEditorValue, getCellBounds, getTableNames, getStructuredProperties, getNamedRanges, getTableColumnNames, updateSelectionStartEndReference, getCellDimensions, getRowHeight, getContentfulGridRangeAroundCell, getCellCoordsFromOffset, getCellOffsetFromCoords, getEffectiveValuesFromRange, getSheetDimensions, getFinalRowHeight, getColumnWidth, getSheetId, getSheetName, onInsertNote, onPinToolTip, onUnpinTooltip, showCellPopover, redrawGrid, flash, navigateToSheetRange, mark, unmark, exportRange, getViewPort, setActiveCell, getGridRef, getMentions, dispatchEvent, splitTextToColumns, copy, cut, paste, } = contextValue;
|
|
6
|
+
const { submitEditor, cancelEditor, commit, makeEditable, editCell, getNextFocusableCell, onEditorKeyDown, scrollToCell, scrollToChart, scrollToBottom, focusSheet, canEditCell, isSheetProtected, isWorkbookProtected, getSheetProtection, getSelectionsFromFormula, getAddressFromSelection, getR1C1AddressFromSelection, tokenizer, localeTokenizer, formulaLocale, setEditorValue, getCellBounds, getTableNames, getStructuredProperties, getNamedRanges, getTableColumnNames, updateSelectionStartEndReference, getCellDimensions, getRowHeight, getContentfulGridRangeAroundCell, getCellCoordsFromOffset, getCellOffsetFromCoords, getEffectiveValuesFromRange, getSheetDimensions, getFinalRowHeight, getColumnWidth, getSheetId, getSheetName, onInsertNote, onPinToolTip, onUnpinTooltip, showCellPopover, showFilterMenu, redrawGrid, flash, navigateToSheetRange, mark, unmark, exportRange, getViewPort, setActiveCell, getGridRef, getMentions, dispatchEvent, splitTextToColumns, copy, cut, paste, } = contextValue;
|
|
7
7
|
// Expose grid methods in context and ref
|
|
8
8
|
const imperativeHandleRefs = useMemo(() => ({
|
|
9
9
|
submitEditor,
|
|
@@ -49,6 +49,7 @@ export const useContextSetter = (forwardedRef, contextValue) => {
|
|
|
49
49
|
onPinToolTip,
|
|
50
50
|
onUnpinTooltip,
|
|
51
51
|
showCellPopover,
|
|
52
|
+
showFilterMenu,
|
|
52
53
|
redrawGrid,
|
|
53
54
|
flash,
|
|
54
55
|
navigateToSheetRange,
|
|
@@ -108,6 +109,7 @@ export const useContextSetter = (forwardedRef, contextValue) => {
|
|
|
108
109
|
onPinToolTip,
|
|
109
110
|
onUnpinTooltip,
|
|
110
111
|
showCellPopover,
|
|
112
|
+
showFilterMenu,
|
|
111
113
|
redrawGrid,
|
|
112
114
|
flash,
|
|
113
115
|
navigateToSheetRange,
|
|
@@ -136,6 +136,13 @@ export type UseEditableOptions<T extends CellData> = {
|
|
|
136
136
|
* Callback fired before editing. Can be used to prevent editing. Do not use it, Can be removed in next release.
|
|
137
137
|
*/
|
|
138
138
|
canEdit?: (sheetId: number, cell: CellInterface) => boolean;
|
|
139
|
+
/**
|
|
140
|
+
* Whether a cell `canEdit` refuses may still be opened read-only — F2 / Enter /
|
|
141
|
+
* double-click then show its full content in the cell editor with input disabled
|
|
142
|
+
* (Google Sheets' view-only cell), and nothing is ever committed from it. A
|
|
143
|
+
* keystroke never opens it. Defaults to no cell.
|
|
144
|
+
*/
|
|
145
|
+
canView?: (sheetId: number, cell: CellInterface) => boolean;
|
|
139
146
|
/**
|
|
140
147
|
* Number of frozen columns
|
|
141
148
|
*/
|
|
@@ -184,6 +191,22 @@ export type UseEditableOptions<T extends CellData> = {
|
|
|
184
191
|
* Can user press enter key to edit
|
|
185
192
|
*/
|
|
186
193
|
enableEditOnEnterKey?: boolean;
|
|
194
|
+
/**
|
|
195
|
+
* Which product's Delete / Backspace keys the grid follows
|
|
196
|
+
* (`CanvasGridProps["keymap"]`). Under `"excel"` Backspace clears the
|
|
197
|
+
* active cell alone and edits it, Shift+Backspace selects only the active
|
|
198
|
+
* cell and Shift+Delete cuts; Delete clears every selected cell in both.
|
|
199
|
+
*/
|
|
200
|
+
keymap?: CanvasGridProps["keymap"];
|
|
201
|
+
/**
|
|
202
|
+
* Drop the cell selections, keeping the active cell (Excel's
|
|
203
|
+
* Shift+Backspace)
|
|
204
|
+
*/
|
|
205
|
+
clearSelections?: () => void;
|
|
206
|
+
/**
|
|
207
|
+
* Cut the selection to the clipboard (Excel's Shift+Delete)
|
|
208
|
+
*/
|
|
209
|
+
onRequestCut?: () => void;
|
|
187
210
|
/**
|
|
188
211
|
* Return `false` to keep a key press from the grid's key handling
|
|
189
212
|
* (`CanvasGridProps["shouldHandleKeyDown"]`).
|
|
@@ -345,6 +368,11 @@ export type SharedEditorProps = {
|
|
|
345
368
|
editorBorderOutlineColor?: string;
|
|
346
369
|
isPointerDevice?: boolean;
|
|
347
370
|
navigationMode?: boolean;
|
|
371
|
+
/**
|
|
372
|
+
* The editor shows the cell's content with input disabled (`canView`): the text can be
|
|
373
|
+
* selected and copied, nothing typed changes it and no commit comes out of it.
|
|
374
|
+
*/
|
|
375
|
+
readOnly?: boolean;
|
|
348
376
|
onCopy?(event: ClipboardEvent): void;
|
|
349
377
|
onCut?(event: ClipboardEvent): void;
|
|
350
378
|
onPaste?(event: ClipboardEvent): void;
|
|
@@ -371,7 +399,7 @@ export declare const areTextFormatRunsEqual: (a: TextFormatRun[] | undefined | n
|
|
|
371
399
|
*
|
|
372
400
|
* Moves to incorrect cell
|
|
373
401
|
*/
|
|
374
|
-
export declare const useEditable: <T extends CellData>({ getEditor, getValue, getTextFormatRuns, onChange, onSubmit, onCancel, onBlur, onDelete, sheetId, selections, activeCell, canEdit, frozenRows, frozenColumns, hideOnBlur, isHiddenRow, isHiddenColumn, rowCount, columnCount, selectionTopBound, selectionBottomBound, selectionLeftBound, selectionRightBound, enableEditOnEnterKey, shouldHandleKeyDown, sticky, editorBorderColor, editorBorderOutlineColor, onBeforeEdit, onKeyDown, onEditorKeyDown, getCellOffsetFromCoords, getCellCoordsFromOffset, getCellBounds, focus, getActualCellCoords, scrollToCell, onChangeBatch, containerWidth, containerHeight, getScrollPosition, getColumnOffset, getEditorAlignment, getSheetRowCount, getSheetColumnCount, getBooleanValue, getDataValidation, setActiveCell, onCopy, onPaste, onCut, tables, onInsertTableRow, }: UseEditableOptions<T>) => {
|
|
402
|
+
export declare const useEditable: <T extends CellData>({ getEditor, getValue, getTextFormatRuns, onChange, onSubmit, onCancel, onBlur, onDelete, sheetId, selections, activeCell, canEdit, canView, frozenRows, frozenColumns, hideOnBlur, isHiddenRow, isHiddenColumn, rowCount, columnCount, selectionTopBound, selectionBottomBound, selectionLeftBound, selectionRightBound, enableEditOnEnterKey, keymap, clearSelections, onRequestCut, shouldHandleKeyDown, sticky, editorBorderColor, editorBorderOutlineColor, onBeforeEdit, onKeyDown, onEditorKeyDown, getCellOffsetFromCoords, getCellCoordsFromOffset, getCellBounds, focus, getActualCellCoords, scrollToCell, onChangeBatch, containerWidth, containerHeight, getScrollPosition, getColumnOffset, getEditorAlignment, getSheetRowCount, getSheetColumnCount, getBooleanValue, getDataValidation, setActiveCell, onCopy, onPaste, onCut, tables, onInsertTableRow, }: UseEditableOptions<T>) => {
|
|
375
403
|
editorComponent: React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | null;
|
|
376
404
|
onDoubleClick: (e: React.MouseEvent<HTMLElement>) => void;
|
|
377
405
|
getNextFocusableCell: (sheetId: number, currentCell: CellInterface, direction?: Direction, restrictWithinSelection?: boolean) => CellInterface | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-editable.d.ts","sourceRoot":"","sources":["../../../hooks/use-editable.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"use-editable.d.ts","sourceRoot":"","sources":["../../../hooks/use-editable.tsx"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,7 @@ import { useCallbackRef } from "./use-callback-ref";
|
|
|
12
12
|
import { useIsomorphicLayoutEffect } from "./use-isomorphic-layout-effect";
|
|
13
13
|
export const getDefaultEditor = () => null;
|
|
14
14
|
const defaultCanEdit = () => true;
|
|
15
|
+
const defaultCanView = () => false;
|
|
15
16
|
const defaultIsHidden = () => false;
|
|
16
17
|
/**
|
|
17
18
|
* Lightweight deep equality for `TextFormatRun[]`. Used by the
|
|
@@ -137,7 +138,7 @@ const MEDIA_KEYS = new Set([
|
|
|
137
138
|
*
|
|
138
139
|
* Moves to incorrect cell
|
|
139
140
|
*/
|
|
140
|
-
export const useEditable = ({ getEditor = getDefaultEditor, getValue, getTextFormatRuns, onChange, onSubmit, onCancel, onBlur, onDelete, sheetId, selections = DEFAULT_ARRAY, activeCell, canEdit = defaultCanEdit, frozenRows = 0, frozenColumns = 0, hideOnBlur = true, isHiddenRow = defaultIsHidden, isHiddenColumn = defaultIsHidden, rowCount, columnCount, selectionTopBound = 0, selectionBottomBound = rowCount, selectionLeftBound = 0, selectionRightBound = columnCount, enableEditOnEnterKey = true, shouldHandleKeyDown, sticky, editorBorderColor, editorBorderOutlineColor, onBeforeEdit, onKeyDown, onEditorKeyDown, getCellOffsetFromCoords, getCellCoordsFromOffset, getCellBounds, focus, getActualCellCoords, scrollToCell, onChangeBatch, containerWidth = 0, containerHeight = 0, getScrollPosition, getColumnOffset, getEditorAlignment, getSheetRowCount, getSheetColumnCount, getBooleanValue, getDataValidation, setActiveCell, onCopy, onPaste, onCut, tables, onInsertTableRow, }) => {
|
|
141
|
+
export const useEditable = ({ getEditor = getDefaultEditor, getValue, getTextFormatRuns, onChange, onSubmit, onCancel, onBlur, onDelete, sheetId, selections = DEFAULT_ARRAY, activeCell, canEdit = defaultCanEdit, canView = defaultCanView, frozenRows = 0, frozenColumns = 0, hideOnBlur = true, isHiddenRow = defaultIsHidden, isHiddenColumn = defaultIsHidden, rowCount, columnCount, selectionTopBound = 0, selectionBottomBound = rowCount, selectionLeftBound = 0, selectionRightBound = columnCount, enableEditOnEnterKey = true, keymap = "sheets", clearSelections, onRequestCut, shouldHandleKeyDown, sticky, editorBorderColor, editorBorderOutlineColor, onBeforeEdit, onKeyDown, onEditorKeyDown, getCellOffsetFromCoords, getCellCoordsFromOffset, getCellBounds, focus, getActualCellCoords, scrollToCell, onChangeBatch, containerWidth = 0, containerHeight = 0, getScrollPosition, getColumnOffset, getEditorAlignment, getSheetRowCount, getSheetColumnCount, getBooleanValue, getDataValidation, setActiveCell, onCopy, onPaste, onCut, tables, onInsertTableRow, }) => {
|
|
141
142
|
const editingCellCoordinate = useEditingCellCoordinate();
|
|
142
143
|
const [isEditorShown, setShowEditor] = useEditorVisibility();
|
|
143
144
|
const [value, setValue] = useCellEditorValue();
|
|
@@ -159,6 +160,9 @@ export const useEditable = ({ getEditor = getDefaultEditor, getValue, getTextFor
|
|
|
159
160
|
const isPointerDeviceRef = useRef(false);
|
|
160
161
|
const maxEditorDimensionsRef = useRef(undefined);
|
|
161
162
|
const isMounted = useRef(false);
|
|
163
|
+
// The open editor is a read-only view of the cell (`canView`): it never
|
|
164
|
+
// commits, and its keys only close it or move the active cell.
|
|
165
|
+
const isViewOnlyRef = useRef(false);
|
|
162
166
|
const showEditor = useCallback(() => setShowEditor(true), [setShowEditor]);
|
|
163
167
|
const setActiveEditor = useSetActiveEditor();
|
|
164
168
|
const cellEditorInstance = useCellEditorInstance();
|
|
@@ -166,6 +170,7 @@ export const useEditable = ({ getEditor = getDefaultEditor, getValue, getTextFor
|
|
|
166
170
|
const hideEditor = useCallback(() => {
|
|
167
171
|
setShowEditor(false);
|
|
168
172
|
currentActiveCellRef.current = null;
|
|
173
|
+
isViewOnlyRef.current = false;
|
|
169
174
|
// Clear value
|
|
170
175
|
setValue("");
|
|
171
176
|
setFormulaMode(false);
|
|
@@ -260,8 +265,14 @@ export const useEditable = ({ getEditor = getDefaultEditor, getValue, getTextFor
|
|
|
260
265
|
setActiveEditor(cellEditorInstance);
|
|
261
266
|
// Reset scroll position
|
|
262
267
|
setIsScrolling(false);
|
|
268
|
+
/* A cell the grid refuses to edit may still open read-only to show its
|
|
269
|
+
* full content — from F2 / Enter / double-click, never from a typed
|
|
270
|
+
* character (which would be the start of an entry). */
|
|
271
|
+
const isEditable = canEdit(sheetId, coords);
|
|
272
|
+
const isViewOnly = !isEditable && initialValue === void 0 && canView(sheetId, coords);
|
|
263
273
|
/* Call on before edit */
|
|
264
|
-
if (
|
|
274
|
+
if (isEditable || isViewOnly) {
|
|
275
|
+
isViewOnlyRef.current = isViewOnly;
|
|
265
276
|
/* Let user modify coords before edit */
|
|
266
277
|
onBeforeEdit?.(sheetId, coords);
|
|
267
278
|
/* Focus */
|
|
@@ -304,7 +315,7 @@ export const useEditable = ({ getEditor = getDefaultEditor, getValue, getTextFor
|
|
|
304
315
|
* So that during mousedown, onSubmit gets called
|
|
305
316
|
*/
|
|
306
317
|
isEnteringNewValue.current =
|
|
307
|
-
initialValue !== void 0 || cellValue === void 0;
|
|
318
|
+
!isViewOnly && (initialValue !== void 0 || cellValue === void 0);
|
|
308
319
|
isDirtyRef.current = !!initialValue;
|
|
309
320
|
// Todo
|
|
310
321
|
initialValueRef.current = cellValue;
|
|
@@ -328,12 +339,14 @@ export const useEditable = ({ getEditor = getDefaultEditor, getValue, getTextFor
|
|
|
328
339
|
*/
|
|
329
340
|
setValue(value);
|
|
330
341
|
setTextFormatRuns(textFormatRuns);
|
|
331
|
-
|
|
342
|
+
// A formula on view is text: no reference picking, no function help.
|
|
343
|
+
setFormulaMode(!isViewOnly && isAFormula(value));
|
|
332
344
|
}
|
|
333
345
|
}
|
|
334
346
|
}, [
|
|
335
347
|
onBeforeEdit,
|
|
336
348
|
canEdit,
|
|
349
|
+
canView,
|
|
337
350
|
getValue,
|
|
338
351
|
getTextFormatRuns,
|
|
339
352
|
getCellPosition,
|
|
@@ -510,10 +523,30 @@ export const useEditable = ({ getEditor = getDefaultEditor, getValue, getTextFor
|
|
|
510
523
|
e.preventDefault();
|
|
511
524
|
}
|
|
512
525
|
else if (key === "Delete" || key === "Backspace") {
|
|
526
|
+
const isExcelKeymap = keymap === "excel";
|
|
527
|
+
// Excel: Shift+Backspace selects only the active cell of a
|
|
528
|
+
// selection, Shift+Delete cuts the selection
|
|
529
|
+
if (isExcelKeymap && nativeEvent.shiftKey) {
|
|
530
|
+
if (key === "Backspace") {
|
|
531
|
+
if (selections.length) {
|
|
532
|
+
clearSelections?.();
|
|
533
|
+
}
|
|
534
|
+
e.preventDefault();
|
|
535
|
+
}
|
|
536
|
+
else if (onRequestCut) {
|
|
537
|
+
onRequestCut();
|
|
538
|
+
e.preventDefault();
|
|
539
|
+
}
|
|
540
|
+
return;
|
|
541
|
+
}
|
|
542
|
+
// Excel's Backspace clears the active cell alone and edits it;
|
|
543
|
+
// Delete (and Sheets' Backspace) clears every selected cell
|
|
544
|
+
const clearsActiveCellOnly = isExcelKeymap && key === "Backspace";
|
|
545
|
+
const targets = clearsActiveCellOnly ? DEFAULT_ARRAY : selections;
|
|
513
546
|
// Excel refuses Delete / Backspace when any selected cell is a locked cell of a
|
|
514
547
|
// protected sheet — the same `canEdit` gate typing goes through in `makeEditable`
|
|
515
548
|
// (rowsncolumns/spreadsheet#939 U-35). Nothing is cleared; Excel's dialog is shown.
|
|
516
|
-
if (!canEditSelection(sheetId, activeCell,
|
|
549
|
+
if (!canEditSelection(sheetId, activeCell, targets)) {
|
|
517
550
|
void showValidationAlert({
|
|
518
551
|
style: "stop",
|
|
519
552
|
title: SHEET_PROTECTION_ERROR_TITLE,
|
|
@@ -523,10 +556,13 @@ export const useEditable = ({ getEditor = getDefaultEditor, getValue, getTextFor
|
|
|
523
556
|
e.preventDefault();
|
|
524
557
|
return;
|
|
525
558
|
}
|
|
526
|
-
onDelete?.(sheetId, activeCell,
|
|
559
|
+
onDelete?.(sheetId, activeCell, targets);
|
|
527
560
|
// Delete value
|
|
528
561
|
setValue("");
|
|
529
562
|
setFormulaMode(false);
|
|
563
|
+
if (clearsActiveCellOnly) {
|
|
564
|
+
makeEditable(sheetId, { rowIndex, columnIndex }, "");
|
|
565
|
+
}
|
|
530
566
|
}
|
|
531
567
|
else {
|
|
532
568
|
const initialValue = isEnter || isF2 // Enter key
|
|
@@ -560,6 +596,9 @@ export const useEditable = ({ getEditor = getDefaultEditor, getValue, getTextFor
|
|
|
560
596
|
onEditorKeyDown,
|
|
561
597
|
onKeyDown,
|
|
562
598
|
enableEditOnEnterKey,
|
|
599
|
+
keymap,
|
|
600
|
+
clearSelections,
|
|
601
|
+
onRequestCut,
|
|
563
602
|
shouldHandleKeyDown,
|
|
564
603
|
setFormulaMode,
|
|
565
604
|
]);
|
|
@@ -663,6 +702,19 @@ export const useEditable = ({ getEditor = getDefaultEditor, getValue, getTextFor
|
|
|
663
702
|
]));
|
|
664
703
|
/* Save the value */
|
|
665
704
|
const handleSubmit = useCallbackRef(useCallback((newValue, textFormatRuns, sheetId, activeCell, nextActiveCell, shouldFocusGrid = true, options) => {
|
|
705
|
+
/* A read-only view commits nothing: the commit key closes it and
|
|
706
|
+
* moves the active cell where the commit would have. */
|
|
707
|
+
if (isViewOnlyRef.current) {
|
|
708
|
+
hideEditor();
|
|
709
|
+
setTextFormatRuns(undefined);
|
|
710
|
+
onCancel?.();
|
|
711
|
+
if (nextActiveCell) {
|
|
712
|
+
setActiveCell?.(sheetId, nextActiveCell);
|
|
713
|
+
}
|
|
714
|
+
if (shouldFocusGrid)
|
|
715
|
+
focusGrid();
|
|
716
|
+
return;
|
|
717
|
+
}
|
|
666
718
|
/**
|
|
667
719
|
* Hide the editor first, so that we can handle onBlur events
|
|
668
720
|
* 1. Editor hides -> Submit
|
|
@@ -680,6 +732,8 @@ export const useEditable = ({ getEditor = getDefaultEditor, getValue, getTextFor
|
|
|
680
732
|
focusGrid();
|
|
681
733
|
}, [
|
|
682
734
|
onSubmit,
|
|
735
|
+
onCancel,
|
|
736
|
+
setActiveCell,
|
|
683
737
|
setTextFormatRuns,
|
|
684
738
|
setValue,
|
|
685
739
|
hideEditor,
|
|
@@ -751,7 +805,8 @@ export const useEditable = ({ getEditor = getDefaultEditor, getValue, getTextFor
|
|
|
751
805
|
setInitialActiveCell,
|
|
752
806
|
]);
|
|
753
807
|
const handleChange = useCallbackRef(useCallback((newValue, textFormatRuns, sheetId, activeCell) => {
|
|
754
|
-
|
|
808
|
+
// A read-only view owns no entry: nothing it reports is state or a change.
|
|
809
|
+
if (!currentActiveCellRef.current || isViewOnlyRef.current) {
|
|
755
810
|
return;
|
|
756
811
|
}
|
|
757
812
|
// Update state
|
|
@@ -846,6 +901,7 @@ export const useEditable = ({ getEditor = getDefaultEditor, getValue, getTextFor
|
|
|
846
901
|
containerHeight,
|
|
847
902
|
isPointerDevice: isPointerDeviceRef.current,
|
|
848
903
|
navigationMode: !isEditInProgress,
|
|
904
|
+
readOnly: isEditInProgress && isViewOnlyRef.current,
|
|
849
905
|
onCopy: handleCopy,
|
|
850
906
|
onPaste: handlePaste,
|
|
851
907
|
onCut: handleCut,
|
|
@@ -860,6 +916,10 @@ export const useEditable = ({ getEditor = getDefaultEditor, getValue, getTextFor
|
|
|
860
916
|
*/
|
|
861
917
|
const editCell = useCallbackRef(useCallback((sheetId, cell, initialValue, options) => {
|
|
862
918
|
if (isEditInProgress && cellEditorInstance && initialValue != null) {
|
|
919
|
+
// A read-only view takes no text.
|
|
920
|
+
if (isViewOnlyRef.current) {
|
|
921
|
+
return;
|
|
922
|
+
}
|
|
863
923
|
// Already editing — insert at the cursor instead of reopening.
|
|
864
924
|
cellEditorInstance.update(initialValue);
|
|
865
925
|
cellEditorInstance.focus(true);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-editor-change.d.ts","sourceRoot":"","sources":["../../../hooks/use-editor-change.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,EAElB,KAAK,aAAa,EACnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAEL,KAAK,aAAa,EAEnB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"use-editor-change.d.ts","sourceRoot":"","sources":["../../../hooks/use-editor-change.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,EAElB,KAAK,aAAa,EACnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAEL,KAAK,aAAa,EAEnB,MAAM,qBAAqB,CAAC;AAgB7B,OAAO,KAAK,EACV,eAAe,EACf,mBAAmB,EACpB,MAAM,mCAAmC,CAAC;AAG3C,KAAK,oBAAoB,GAAG;IAC1B,UAAU,EAAE,aAAa,CAAC,mBAAmB,CAAC,EAAE,CAAC;IACjD,wBAAwB,CACtB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,aAAa,GAClB,aAAa,CAAC,mBAAmB,CAAC,EAAE,CAAC;IACxC,mBAAmB,EAAE,eAAe,CAAC,qBAAqB,CAAC,CAAC;IAC5D,kBAAkB,CAAC,EAAE,eAAe,CAAC,oBAAoB,CAAC,CAAC;IAC3D,kBAAkB,CAAC,EAAE,eAAe,CAAC,oBAAoB,CAAC,CAAC;IAC3D,uGAAuG;IACvG,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,uHAO7B,oBAAoB,aAUV,MAAM,kBACG,aAAa,EAAE,GAAG,SAAS,GAAG,IAAI,kBAClC,MAAM,cACV,aAAa,SAqE9B,CAAC"}
|
|
@@ -3,10 +3,11 @@ import { canonicalizeCellInput, isAFormula, } from "@rowsncolumns/utils";
|
|
|
3
3
|
import { useCallback } from "react";
|
|
4
4
|
import { useEditingCellCoordinate } from "../atoms";
|
|
5
5
|
import { useSetFormulabarEditorValue, useSetFormulaBarTextFormatRuns, } from "../atoms/formula-bar-editor-value.atom";
|
|
6
|
-
import { useSetFormulaMode } from "../atoms/formula-mode.atom";
|
|
6
|
+
import { useFormulaModeValue, useSetFormulaMode, } from "../atoms/formula-mode.atom";
|
|
7
7
|
import { useFormulaSelections, useSetFormulaSelections, } from "../atoms/formula-selections.atom";
|
|
8
8
|
import { DEFAULT_ARRAY } from "../config";
|
|
9
9
|
export const useEditorChange = ({ selections, getSelectionsFromFormula, onChangeEditorValue, onChangeSelections, onChangeActiveCell, formulaLocale, }) => {
|
|
10
|
+
const formulaMode = useFormulaModeValue();
|
|
10
11
|
const setFormulaMode = useSetFormulaMode();
|
|
11
12
|
const setFormulaSelections = useSetFormulaSelections();
|
|
12
13
|
const formulaSelections = useFormulaSelections();
|
|
@@ -34,14 +35,18 @@ export const useEditorChange = ({ selections, getSelectionsFromFormula, onChange
|
|
|
34
35
|
: editingCellCoordinate &&
|
|
35
36
|
isEqualCells(editingCellCoordinate, activeCell);
|
|
36
37
|
/**
|
|
37
|
-
*
|
|
38
|
+
* The ranges picked while the entry was a formula are appended to the
|
|
39
|
+
* sheet's selection (they are its reference highlights), so a formula
|
|
40
|
+
* deleted mid-edit would leave them behind: leaving formula mode drops
|
|
41
|
+
* them. A constant entry never picked any, and the selection the edit
|
|
42
|
+
* started with stays — Ctrl+Enter fills it and the Name Box keeps
|
|
43
|
+
* reading it, as in Excel (#1176).
|
|
38
44
|
*/
|
|
39
45
|
if (isFormula) {
|
|
40
46
|
const selections = getSelectionsFromFormula(value, activeCell);
|
|
41
47
|
setFormulaSelections?.(selections);
|
|
42
48
|
}
|
|
43
|
-
else if (selections.length) {
|
|
44
|
-
// Clear selections
|
|
49
|
+
else if (formulaMode && selections.length) {
|
|
45
50
|
onChangeSelections?.(editingSheetId, DEFAULT_ARRAY, true);
|
|
46
51
|
}
|
|
47
52
|
if (shouldResetActiveCell && editingCellCoordinate) {
|
|
@@ -54,6 +59,7 @@ export const useEditorChange = ({ selections, getSelectionsFromFormula, onChange
|
|
|
54
59
|
}, [
|
|
55
60
|
selections,
|
|
56
61
|
editingCellCoordinate,
|
|
62
|
+
formulaMode,
|
|
57
63
|
formulaSelections,
|
|
58
64
|
setFormulaMode,
|
|
59
65
|
getSelectionsFromFormula,
|
|
@@ -2,10 +2,11 @@ import type React from "react";
|
|
|
2
2
|
import type { CanvasGridProps } from "../components/canvas-grid/typings";
|
|
3
3
|
type UseEditorKeydownProps = {
|
|
4
4
|
sheetId: number;
|
|
5
|
+
keymap?: CanvasGridProps["keymap"];
|
|
5
6
|
onSelectPreviousSheet: CanvasGridProps["onSelectPreviousSheet"];
|
|
6
7
|
onSelectNextSheet: CanvasGridProps["onSelectNextSheet"];
|
|
7
8
|
onKeyDownSelection?(e: React.KeyboardEvent<HTMLElement>): void;
|
|
8
9
|
};
|
|
9
|
-
export declare const useEditorKeydown: ({ sheetId, onSelectPreviousSheet, onSelectNextSheet, onKeyDownSelection, }: UseEditorKeydownProps) => (e: React.KeyboardEvent<HTMLDivElement>) => void;
|
|
10
|
+
export declare const useEditorKeydown: ({ sheetId, keymap, onSelectPreviousSheet, onSelectNextSheet, onKeyDownSelection, }: UseEditorKeydownProps) => (e: React.KeyboardEvent<HTMLDivElement>) => void;
|
|
10
11
|
export {};
|
|
11
12
|
//# sourceMappingURL=use-editor-keydown.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-editor-keydown.d.ts","sourceRoot":"","sources":["../../../hooks/use-editor-keydown.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAGzE,KAAK,qBAAqB,GAAG;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,qBAAqB,EAAE,eAAe,CAAC,uBAAuB,CAAC,CAAC;IAChE,iBAAiB,EAAE,eAAe,CAAC,mBAAmB,CAAC,CAAC;IACxD,kBAAkB,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;CAChE,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,
|
|
1
|
+
{"version":3,"file":"use-editor-keydown.d.ts","sourceRoot":"","sources":["../../../hooks/use-editor-keydown.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAGzE,KAAK,qBAAqB,GAAG;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;IACnC,qBAAqB,EAAE,eAAe,CAAC,uBAAuB,CAAC,CAAC;IAChE,iBAAiB,EAAE,eAAe,CAAC,mBAAmB,CAAC,CAAC;IACxD,kBAAkB,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;CAChE,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,oFAM9B,qBAAqB,SAKd,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC,SAyC5C,CAAC"}
|
|
@@ -3,16 +3,17 @@ import { useCallback } from "react";
|
|
|
3
3
|
import { useFormulaModeValue } from "../atoms/formula-mode.atom";
|
|
4
4
|
import { useFormualSelectionState } from "../atoms/formula-selection-state.atom";
|
|
5
5
|
import { useCallbackRef } from "./use-callback-ref";
|
|
6
|
-
export const useEditorKeydown = ({ sheetId, onSelectPreviousSheet, onSelectNextSheet, onKeyDownSelection, }) => {
|
|
6
|
+
export const useEditorKeydown = ({ sheetId, keymap = "sheets", onSelectPreviousSheet, onSelectNextSheet, onKeyDownSelection, }) => {
|
|
7
7
|
const formulaMode = useFormulaModeValue();
|
|
8
8
|
const { canSelectCells } = useFormualSelectionState();
|
|
9
9
|
return useCallbackRef(useCallback((e) => {
|
|
10
10
|
const isAltKey = e.altKey;
|
|
11
11
|
const isArrowKey = isAnArrowKey(e.key);
|
|
12
12
|
/**
|
|
13
|
-
* User can navigate between sheets
|
|
13
|
+
* User can navigate between sheets (Sheets; Excel's ⌥↑ / ⌥↓ are
|
|
14
|
+
* not sheet keys, so the Excel keymap leaves them alone)
|
|
14
15
|
*/
|
|
15
|
-
if (isAltKey && isArrowKey) {
|
|
16
|
+
if (isAltKey && isArrowKey && keymap !== "excel") {
|
|
16
17
|
switch (e.key) {
|
|
17
18
|
case "ArrowUp":
|
|
18
19
|
onSelectPreviousSheet?.(sheetId, e);
|
|
@@ -33,6 +34,7 @@ export const useEditorKeydown = ({ sheetId, onSelectPreviousSheet, onSelectNextS
|
|
|
33
34
|
}
|
|
34
35
|
}, [
|
|
35
36
|
sheetId,
|
|
37
|
+
keymap,
|
|
36
38
|
onSelectPreviousSheet,
|
|
37
39
|
onSelectNextSheet,
|
|
38
40
|
formulaMode,
|
|
@@ -39,7 +39,7 @@ export type UseFilterProps = {
|
|
|
39
39
|
tables?: TableView[] | null;
|
|
40
40
|
};
|
|
41
41
|
export declare const useFilter: ({ scale, sheetId, theme, getActualCellCoords, getScrollPosition, getCellOffsetFromCoords, getFormattedValue, getEffectiveFormat, conditionalFormatByCell, getFilterComponent, isFrozenRow, isFrozenColumn, isHiddenRowByFilter, onSortTable, onFilterTable, onInsertTableColumn, onDeleteTableColumn, getFilterValues, getFilterColors, basicFilter, tables, }: UseFilterProps) => {
|
|
42
|
-
showFilter: (cell: CellInterface, filterOrTable: FilterView | TableView) =>
|
|
42
|
+
showFilter: (cell: CellInterface, filterOrTable: FilterView | TableView) => boolean;
|
|
43
43
|
hideFilter: () => void;
|
|
44
44
|
filterComponent: ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | null;
|
|
45
45
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-filter.d.ts","sourceRoot":"","sources":["../../../hooks/use-filter.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,YAAY,EAClB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAG1C,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EACjB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAEnE,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAGlE,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,gBAAgB,CAAC;IACxB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa,GAAG,SAAS,CAAC;IACtE,iBAAiB,IAAI,YAAY,GAAG,SAAS,CAAC;IAC9C,uBAAuB,CAAC,MAAM,EAAE,aAAa,GAAG,YAAY,GAAG,SAAS,CAAC;IACzE,iBAAiB,CACf,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,MAAM,GAAG,SAAS,CAAC;IACtB;;;;;OAKG;IACH,kBAAkB,CAAC,CACjB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,UAAU,GAAG,SAAS,GAAG,IAAI,CAAC;IACjC;;;;;OAKG;IACH,uBAAuB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,CAAC,CAAC;IAC9D,kBAAkB,CAAC,KAAK,EAAE,kBAAkB,GAAG,YAAY,GAAG,IAAI,CAAC;IACnE,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IACvC,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;IAC7C,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IAC/C,WAAW,EAAE,eAAe,CAAC,aAAa,CAAC,CAAC;IAC5C,aAAa,EAAE,eAAe,CAAC,eAAe,CAAC,CAAC;IAChD,mBAAmB,EAAE,eAAe,CAAC,qBAAqB,CAAC,CAAC;IAC5D,mBAAmB,EAAE,eAAe,CAAC,qBAAqB,CAAC,CAAC;IAG5D,eAAe,CAAC,EAAE,eAAe,CAAC,iBAAiB,CAAC,CAAC;IAIrD,eAAe,CAAC,EAAE,eAAe,CAAC,iBAAiB,CAAC,CAAC;IAIrD,WAAW,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAChC,MAAM,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;CAC7B,CAAC;AAQF,eAAO,MAAM,SAAS,GAAI,gWAsBvB,cAAc;
|
|
1
|
+
{"version":3,"file":"use-filter.d.ts","sourceRoot":"","sources":["../../../hooks/use-filter.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,YAAY,EAClB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAG1C,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EACjB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAEnE,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAGlE,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,gBAAgB,CAAC;IACxB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa,GAAG,SAAS,CAAC;IACtE,iBAAiB,IAAI,YAAY,GAAG,SAAS,CAAC;IAC9C,uBAAuB,CAAC,MAAM,EAAE,aAAa,GAAG,YAAY,GAAG,SAAS,CAAC;IACzE,iBAAiB,CACf,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,MAAM,GAAG,SAAS,CAAC;IACtB;;;;;OAKG;IACH,kBAAkB,CAAC,CACjB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,UAAU,GAAG,SAAS,GAAG,IAAI,CAAC;IACjC;;;;;OAKG;IACH,uBAAuB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,CAAC,CAAC;IAC9D,kBAAkB,CAAC,KAAK,EAAE,kBAAkB,GAAG,YAAY,GAAG,IAAI,CAAC;IACnE,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IACvC,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;IAC7C,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IAC/C,WAAW,EAAE,eAAe,CAAC,aAAa,CAAC,CAAC;IAC5C,aAAa,EAAE,eAAe,CAAC,eAAe,CAAC,CAAC;IAChD,mBAAmB,EAAE,eAAe,CAAC,qBAAqB,CAAC,CAAC;IAC5D,mBAAmB,EAAE,eAAe,CAAC,qBAAqB,CAAC,CAAC;IAG5D,eAAe,CAAC,EAAE,eAAe,CAAC,iBAAiB,CAAC,CAAC;IAIrD,eAAe,CAAC,EAAE,eAAe,CAAC,iBAAiB,CAAC,CAAC;IAIrD,WAAW,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAChC,MAAM,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;CAC7B,CAAC;AAQF,eAAO,MAAM,SAAS,GAAI,gWAsBvB,cAAc;uBA0BN,aAAa,iBAAiB,UAAU,GAAG,SAAS,KAAG,OAAO;;;CAiNxE,CAAC"}
|
|
@@ -27,14 +27,15 @@ export const useFilter = ({ scale = 1, sheetId, theme, getActualCellCoords, getS
|
|
|
27
27
|
}
|
|
28
28
|
return (tables?.find((table) => table.id === activeFilter.id) ?? activeFilter);
|
|
29
29
|
}, [activeFilter, basicFilter, tables]);
|
|
30
|
-
// Show filter
|
|
30
|
+
// Show filter. Returns whether the popup opened — a cell the grid cannot
|
|
31
|
+
// position (not laid out yet) opens nothing.
|
|
31
32
|
const showFilter = useCallback((cell, filterOrTable) => {
|
|
32
33
|
const coords = getActualCellCoords(cell) ?? cell;
|
|
33
34
|
const scrollPosition = getScrollPosition();
|
|
34
35
|
const cellPosition = getCellOffsetFromCoords(coords);
|
|
35
36
|
// Stop if cell is not available
|
|
36
37
|
if (isNil(cellPosition) || isNil(scrollPosition)) {
|
|
37
|
-
return;
|
|
38
|
+
return false;
|
|
38
39
|
}
|
|
39
40
|
// Set filter cell
|
|
40
41
|
setFilterCell(coords);
|
|
@@ -52,6 +53,7 @@ export const useFilter = ({ scale = 1, sheetId, theme, getActualCellCoords, getS
|
|
|
52
53
|
});
|
|
53
54
|
// Show filter
|
|
54
55
|
setIsOpen(true);
|
|
56
|
+
return true;
|
|
55
57
|
}, [
|
|
56
58
|
getActualCellCoords,
|
|
57
59
|
getScrollPosition,
|
|
@@ -63,11 +63,19 @@ type FormattingKeyboardProps = {
|
|
|
63
63
|
onRequestGoTo?: CanvasGridProps["onRequestGoTo"];
|
|
64
64
|
/** Ctrl+Alt+V — Paste Special dialog (Excel). */
|
|
65
65
|
onRequestPasteSpecial?: () => void;
|
|
66
|
+
/** ⌃U on a Mac under the Excel keymap: edit the active cell, as F2. */
|
|
67
|
+
onRequestEditCell?(sheetId: number, cell: CellInterface): void;
|
|
68
|
+
/**
|
|
69
|
+
* Alt+↓ under the Excel keymap: open the active cell's list — a filter
|
|
70
|
+
* header's menu or a list validation's dropdown. Returns whether one
|
|
71
|
+
* opened; the key is left alone otherwise.
|
|
72
|
+
*/
|
|
73
|
+
onShowCellList?(sheetId: number, cell: CellInterface): boolean;
|
|
66
74
|
/** Ctrl+' / Ctrl+Shift+" write the cell above into the active cell */
|
|
67
75
|
onChangeBatch?: CanvasGridProps["onChangeBatch"];
|
|
68
76
|
getUserEnteredValue?(sheetId: number, rowIndex: number, columnIndex: number): string | undefined | null;
|
|
69
77
|
getEffectiveValue?(sheetId: number, rowIndex: number, columnIndex: number): Maybe<ExtendedValue>;
|
|
70
78
|
};
|
|
71
|
-
export declare const useKeyboardHandler: ({ sheetId, locale, selectedRows, selectedColumns, selectedRowHeadersIds, selectedColumnHeadersIds, showFormulas, keymap, defaultFontSizePoint, onShowFormulas, onChangeFormatting, onRepeatFormatting, onClearFormatting, onSelectNextSheet, onSelectPreviousSheet, onCreateNewSheet, onFillRange, disableFillRightShortcut, onInsertTime, onInsertDate, onInsertDateTime, onInsertNote, onInsertAutoSum, onRedo, onUndo, onRequestSearch, onRequestReplace, onRequestFormatCells, onRequestInsertComment, onRequestInsertLink, onCreateTable, onRequestCreateTable, onCreateBasicFilter, clearCopiedSelections, getCellFormat, onShowContextMenu, onHideColumn, onShowColumn, onGroupColumns, onUngroupColumns, onHideRow, onShowRow, onGroupRows, onUngroupRows, onDeleteRow, onInsertRow, onAddQuickEdit, onCalculateNow, onRequestGoTo, onRequestPasteSpecial, onChangeBatch, getUserEnteredValue, getEffectiveValue, canEditCell, isSheetFocused, activeCell, selections, }: FormattingKeyboardProps) => (e: React.KeyboardEvent<HTMLDivElement>) => void;
|
|
79
|
+
export declare const useKeyboardHandler: ({ sheetId, locale, selectedRows, selectedColumns, selectedRowHeadersIds, selectedColumnHeadersIds, showFormulas, keymap, defaultFontSizePoint, onShowFormulas, onChangeFormatting, onRepeatFormatting, onClearFormatting, onSelectNextSheet, onSelectPreviousSheet, onCreateNewSheet, onFillRange, disableFillRightShortcut, onInsertTime, onInsertDate, onInsertDateTime, onInsertNote, onInsertAutoSum, onRedo, onUndo, onRequestSearch, onRequestReplace, onRequestFormatCells, onRequestInsertComment, onRequestInsertLink, onCreateTable, onRequestCreateTable, onCreateBasicFilter, clearCopiedSelections, getCellFormat, onShowContextMenu, onHideColumn, onShowColumn, onGroupColumns, onUngroupColumns, onHideRow, onShowRow, onGroupRows, onUngroupRows, onDeleteRow, onInsertRow, onAddQuickEdit, onCalculateNow, onRequestGoTo, onRequestPasteSpecial, onRequestEditCell, onShowCellList, onChangeBatch, getUserEnteredValue, getEffectiveValue, canEditCell, isSheetFocused, activeCell, selections, }: FormattingKeyboardProps) => (e: React.KeyboardEvent<HTMLDivElement>) => void;
|
|
72
80
|
export {};
|
|
73
81
|
//# sourceMappingURL=use-keyboard-handler.d.ts.map
|