es-grid-template 1.9.98 → 1.9.99

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.
@@ -6,7 +6,7 @@ export declare function getRowFocusHandlers<T>(rowData: T, rowFocus?: RowFocus<T
6
6
  onClickCapture: (event: MouseEvent<HTMLElement>) => void;
7
7
  onContextMenuCapture: (event: MouseEvent<HTMLElement>) => void;
8
8
  };
9
- /** Report the last focused row after the arrow key is released. */
9
+ /** Report the last focused row after a pause in arrow navigation. */
10
10
  export declare function notifyArrowRowFocus<T>(event: ReactKeyboardEvent, rowData: T, method: 'arrowUp' | 'arrowDown', useArrow?: boolean, rowFocus?: RowFocus<T>): void;
11
11
  export declare function focusArrowRow(event: ReactKeyboardEvent, rowId: string, columnId: string, scrollToRow: () => void): void;
12
12
  export {};
@@ -1,3 +1,4 @@
1
+ const arrowFocusDelay = 700;
1
2
  const gridViewportSelector = '[data-grid-scroll], [data-virtuoso-scroller]';
2
3
  const pendingArrowFocus = new WeakMap();
3
4
 
@@ -19,7 +20,7 @@ export function getRowFocusHandlers(rowData, rowFocus) {
19
20
  };
20
21
  }
21
22
 
22
- /** Report the last focused row after the arrow key is released. */
23
+ /** Report the last focused row after a pause in arrow navigation. */
23
24
  export function notifyArrowRowFocus(event, rowData, method, useArrow, rowFocus) {
24
25
  if (useArrow !== true || !rowFocus) return;
25
26
  const viewport = event.currentTarget.closest(gridViewportSelector);
@@ -31,6 +32,10 @@ export function notifyArrowRowFocus(event, rowData, method, useArrow, rowFocus)
31
32
  });
32
33
  const pending = pendingArrowFocus.get(viewport);
33
34
  if (pending) {
35
+ if (pending.timer !== undefined) {
36
+ view.clearTimeout(pending.timer);
37
+ pending.timer = undefined;
38
+ }
34
39
  pending.key = event.key;
35
40
  pending.notify = notify;
36
41
  return;
@@ -41,17 +46,18 @@ export function notifyArrowRowFocus(event, rowData, method, useArrow, rowFocus)
41
46
  };
42
47
  pendingArrowFocus.set(viewport, focus);
43
48
  const cancel = () => {
49
+ if (focus.timer !== undefined) view.clearTimeout(focus.timer);
44
50
  pendingArrowFocus.delete(viewport);
45
51
  view.removeEventListener('keyup', release, true);
46
52
  view.removeEventListener('blur', cancel);
47
53
  view.removeEventListener('pointerdown', cancel, true);
48
54
  };
49
55
  const release = keyEvent => {
50
- if (keyEvent.key !== focus.key) return;
51
- cancel();
52
- view.setTimeout(() => {
56
+ if (keyEvent.key !== focus.key || focus.timer !== undefined) return;
57
+ focus.timer = view.setTimeout(() => {
58
+ cancel();
53
59
  if (viewport.isConnected) focus.notify();
54
- }, 0);
60
+ }, arrowFocusDelay);
55
61
  };
56
62
 
57
63
  // A virtualized row can unmount before keyup reaches its original cell.
@@ -791,7 +791,7 @@ export type IWrapSettings = {
791
791
  wrapMode?: IWrapMode;
792
792
  };
793
793
  export type SelectionSettings<T = AnyObject> = {
794
- /** Invoke rowFocus for the final row after releasing ArrowUp or ArrowDown. Defaults to false. */
794
+ /** Invoke rowFocus for the final row 700 ms after releasing ArrowUp or ArrowDown. Defaults to false. */
795
795
  useArrow?: boolean;
796
796
  mode?: 'checkbox' | 'radio';
797
797
  type?: 'single' | 'multiple';
@@ -6,7 +6,7 @@ export declare function getRowFocusHandlers<T>(rowData: T, rowFocus?: RowFocus<T
6
6
  onClickCapture: (event: MouseEvent<HTMLElement>) => void;
7
7
  onContextMenuCapture: (event: MouseEvent<HTMLElement>) => void;
8
8
  };
9
- /** Report the last focused row after the arrow key is released. */
9
+ /** Report the last focused row after a pause in arrow navigation. */
10
10
  export declare function notifyArrowRowFocus<T>(event: ReactKeyboardEvent, rowData: T, method: 'arrowUp' | 'arrowDown', useArrow?: boolean, rowFocus?: RowFocus<T>): void;
11
11
  export declare function focusArrowRow(event: ReactKeyboardEvent, rowId: string, columnId: string, scrollToRow: () => void): void;
12
12
  export {};
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.focusArrowRow = focusArrowRow;
7
7
  exports.getRowFocusHandlers = getRowFocusHandlers;
8
8
  exports.notifyArrowRowFocus = notifyArrowRowFocus;
9
+ const arrowFocusDelay = 700;
9
10
  const gridViewportSelector = '[data-grid-scroll], [data-virtuoso-scroller]';
10
11
  const pendingArrowFocus = new WeakMap();
11
12
 
@@ -27,7 +28,7 @@ function getRowFocusHandlers(rowData, rowFocus) {
27
28
  };
28
29
  }
29
30
 
30
- /** Report the last focused row after the arrow key is released. */
31
+ /** Report the last focused row after a pause in arrow navigation. */
31
32
  function notifyArrowRowFocus(event, rowData, method, useArrow, rowFocus) {
32
33
  if (useArrow !== true || !rowFocus) return;
33
34
  const viewport = event.currentTarget.closest(gridViewportSelector);
@@ -39,6 +40,10 @@ function notifyArrowRowFocus(event, rowData, method, useArrow, rowFocus) {
39
40
  });
40
41
  const pending = pendingArrowFocus.get(viewport);
41
42
  if (pending) {
43
+ if (pending.timer !== undefined) {
44
+ view.clearTimeout(pending.timer);
45
+ pending.timer = undefined;
46
+ }
42
47
  pending.key = event.key;
43
48
  pending.notify = notify;
44
49
  return;
@@ -49,17 +54,18 @@ function notifyArrowRowFocus(event, rowData, method, useArrow, rowFocus) {
49
54
  };
50
55
  pendingArrowFocus.set(viewport, focus);
51
56
  const cancel = () => {
57
+ if (focus.timer !== undefined) view.clearTimeout(focus.timer);
52
58
  pendingArrowFocus.delete(viewport);
53
59
  view.removeEventListener('keyup', release, true);
54
60
  view.removeEventListener('blur', cancel);
55
61
  view.removeEventListener('pointerdown', cancel, true);
56
62
  };
57
63
  const release = keyEvent => {
58
- if (keyEvent.key !== focus.key) return;
59
- cancel();
60
- view.setTimeout(() => {
64
+ if (keyEvent.key !== focus.key || focus.timer !== undefined) return;
65
+ focus.timer = view.setTimeout(() => {
66
+ cancel();
61
67
  if (viewport.isConnected) focus.notify();
62
- }, 0);
68
+ }, arrowFocusDelay);
63
69
  };
64
70
 
65
71
  // A virtualized row can unmount before keyup reaches its original cell.
@@ -791,7 +791,7 @@ export type IWrapSettings = {
791
791
  wrapMode?: IWrapMode;
792
792
  };
793
793
  export type SelectionSettings<T = AnyObject> = {
794
- /** Invoke rowFocus for the final row after releasing ArrowUp or ArrowDown. Defaults to false. */
794
+ /** Invoke rowFocus for the final row 700 ms after releasing ArrowUp or ArrowDown. Defaults to false. */
795
795
  useArrow?: boolean;
796
796
  mode?: 'checkbox' | 'radio';
797
797
  type?: 'single' | 'multiple';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "es-grid-template",
3
- "version": "1.9.98",
3
+ "version": "1.9.99",
4
4
  "description": "es-grid-template",
5
5
  "keywords": [
6
6
  "react",