@elliemae/ds-shared 1.57.0-rc.3 → 1.57.0-rc.4
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/cjs/CheckableGroup.js +4 -6
- package/cjs/CheckableGroup.js.map +1 -1
- package/cjs/FocusGroup/FocusGrid.js +13 -16
- package/cjs/FocusGroup/FocusGrid.js.map +1 -1
- package/cjs/FocusGroup/FocusGroup.js +4 -4
- package/cjs/FocusGroup/FocusGroup.js.map +1 -1
- package/cjs/FocusGroup/FocusGroupManager.js +3 -3
- package/cjs/FocusGroup/FocusGroupManager.js.map +1 -1
- package/cjs/FocusGroup/focusGroupManagerHoc.js +1 -1
- package/cjs/FocusGroup/index.js +1 -3
- package/cjs/FocusGroup/index.js.map +1 -1
- package/cjs/toolbar/ToolbarProvider.js +3 -3
- package/cjs/toolbar/ToolbarProvider.js.map +1 -1
- package/cjs/useDataGrid/VolatileRowsListener.js +2 -2
- package/cjs/useDataGrid/VolatileRowsListener.js.map +1 -1
- package/cjs/useDataGrid/index.js +1 -4
- package/cjs/useDataGrid/index.js.map +1 -1
- package/cjs/useDataGrid/initColumnDefinition.js +16 -16
- package/cjs/useDataGrid/initColumnDefinition.js.map +1 -1
- package/cjs/useDataGrid/useDataGrid.js +9 -14
- package/cjs/useDataGrid/useDataGrid.js.map +1 -1
- package/cjs/useDataList/index.js +1 -1
- package/cjs/useDataList/useDataList.js +2 -2
- package/cjs/useDataList/useDataList.js.map +1 -1
- package/cjs/virtualization/AutoHeightList.js +5 -8
- package/cjs/virtualization/AutoHeightList.js.map +1 -1
- package/cjs/virtualization/index.js +1 -3
- package/cjs/virtualization/index.js.map +1 -1
- package/esm/CheckableGroup.js +1 -2
- package/esm/CheckableGroup.js.map +1 -1
- package/esm/FocusGroup/FocusGrid.js +1 -3
- package/esm/FocusGroup/FocusGrid.js.map +1 -1
- package/esm/FocusGroup/FocusGroup.js +1 -1
- package/esm/FocusGroup/FocusGroup.js.map +1 -1
- package/esm/FocusGroup/FocusGroupManager.js +1 -1
- package/esm/FocusGroup/FocusGroupManager.js.map +1 -1
- package/esm/FocusGroup/focusGroupManagerHoc.js +1 -1
- package/esm/FocusGroup/index.js +1 -3
- package/esm/FocusGroup/index.js.map +1 -1
- package/esm/toolbar/ToolbarProvider.js +2 -2
- package/esm/toolbar/ToolbarProvider.js.map +1 -1
- package/esm/useDataGrid/VolatileRowsListener.js +1 -1
- package/esm/useDataGrid/VolatileRowsListener.js.map +1 -1
- package/esm/useDataGrid/index.js +1 -4
- package/esm/useDataGrid/index.js.map +1 -1
- package/esm/useDataGrid/initColumnDefinition.js +1 -1
- package/esm/useDataGrid/initColumnDefinition.js.map +1 -1
- package/esm/useDataGrid/useDataGrid.js +1 -4
- package/esm/useDataGrid/useDataGrid.js.map +1 -1
- package/esm/useDataList/index.js +1 -1
- package/esm/useDataList/useDataList.js +1 -1
- package/esm/useDataList/useDataList.js.map +1 -1
- package/esm/virtualization/AutoHeightList.js +1 -3
- package/esm/virtualization/AutoHeightList.js.map +1 -1
- package/esm/virtualization/index.js +1 -3
- package/esm/virtualization/index.js.map +1 -1
- package/package.json +3 -3
package/cjs/CheckableGroup.js
CHANGED
|
@@ -6,8 +6,7 @@ var _defineProperty = require('@babel/runtime/helpers/defineProperty');
|
|
|
6
6
|
var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
|
|
7
7
|
var React = require('react');
|
|
8
8
|
var PropTypes = require('prop-types');
|
|
9
|
-
var
|
|
10
|
-
var useDerivedStateFromProps = require('@elliemae/ds-utilities/hooks/useDerivedStateFromProps');
|
|
9
|
+
var dsUtilities = require('@elliemae/ds-utilities');
|
|
11
10
|
|
|
12
11
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
13
12
|
|
|
@@ -15,7 +14,6 @@ var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_definePropert
|
|
|
15
14
|
var _slicedToArray__default = /*#__PURE__*/_interopDefaultLegacy(_slicedToArray);
|
|
16
15
|
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
17
16
|
var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
|
|
18
|
-
var useDerivedStateFromProps__default = /*#__PURE__*/_interopDefaultLegacy(useDerivedStateFromProps);
|
|
19
17
|
|
|
20
18
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
|
21
19
|
|
|
@@ -29,7 +27,7 @@ function useCheckableGroup(_ref) {
|
|
|
29
27
|
return null;
|
|
30
28
|
} : _ref$onCheck;
|
|
31
29
|
|
|
32
|
-
var _useDerivedStateFromP =
|
|
30
|
+
var _useDerivedStateFromP = dsUtilities.useDerivedStateFromProps(activeProp),
|
|
33
31
|
_useDerivedStateFromP2 = _slicedToArray__default['default'](_useDerivedStateFromP, 2),
|
|
34
32
|
active = _useDerivedStateFromP2[0],
|
|
35
33
|
setActive = _useDerivedStateFromP2[1];
|
|
@@ -37,7 +35,7 @@ function useCheckableGroup(_ref) {
|
|
|
37
35
|
var handleCheck = function handleCheck(_ref2, item) {
|
|
38
36
|
var value = _ref2.target.value;
|
|
39
37
|
setActive(function (prevActive) {
|
|
40
|
-
var nextActive = multi ?
|
|
38
|
+
var nextActive = multi ? dsUtilities.addOrRemove(prevActive, value) : value;
|
|
41
39
|
onCheck(nextActive, item);
|
|
42
40
|
return nextActive;
|
|
43
41
|
});
|
|
@@ -48,7 +46,7 @@ function useCheckableGroup(_ref) {
|
|
|
48
46
|
var checked = Array.isArray(active) ? active.indexOf(props.name) !== -1 : active === props.name;
|
|
49
47
|
return /*#__PURE__*/React.cloneElement(child, _objectSpread(_objectSpread({}, props), {}, {
|
|
50
48
|
checked: checked,
|
|
51
|
-
onClick:
|
|
49
|
+
onClick: dsUtilities.runAll(handleCheck, props.onClick)
|
|
52
50
|
}));
|
|
53
51
|
});
|
|
54
52
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CheckableGroup.js","sources":["../../src/CheckableGroup.tsx"],"sourcesContent":["import React, { cloneElement
|
|
1
|
+
{"version":3,"file":"CheckableGroup.js","sources":["../../src/CheckableGroup.tsx"],"sourcesContent":["import React, { cloneElement } from 'react';\nimport PropTypes from 'prop-types';\nimport { addOrRemove, runAll, useDerivedStateFromProps } from '@elliemae/ds-utilities';\n\nexport function useCheckableGroup({\n children,\n active: activeProp,\n multi,\n onCheck = () => null,\n}) {\n const [active, setActive] = useDerivedStateFromProps(activeProp);\n\n const handleCheck = ({ target: { value } }, item) => {\n setActive(prevActive => {\n const nextActive = multi ? addOrRemove(prevActive, value) : value;\n onCheck(nextActive, item);\n return nextActive;\n });\n };\n\n return React.Children.map(children, child => {\n const { props } = child;\n const checked = Array.isArray(active)\n ? active.indexOf(props.name) !== -1\n : active === props.name;\n\n return cloneElement(child, {\n ...props,\n checked,\n onClick: runAll(handleCheck, props.onClick),\n });\n });\n}\n\nfunction CheckableGroup({\n active = [],\n multi = false, // checkbox or radio\n children,\n}) {\n return useCheckableGroup({ active, multi, children });\n}\n\nCheckableGroup.propTypes = {\n /* The item (if multi false) or items (if multi true) selected */\n active: PropTypes.arrayOf(PropTypes.string),\n /* Whether is multi select or not */\n multi: PropTypes.bool,\n /* Handler when a user checks an item */\n onCheck: PropTypes.func,\n};\n\nexport default CheckableGroup;\n"],"names":["useCheckableGroup","children","activeProp","active","multi","onCheck","useDerivedStateFromProps","setActive","handleCheck","item","value","target","prevActive","nextActive","addOrRemove","React","Children","map","child","props","checked","Array","isArray","indexOf","name","cloneElement","onClick","runAll","CheckableGroup","propTypes","PropTypes","arrayOf","string","bool","func"],"mappings":";;;;;;;;;;;;;;;;;;;;AAIO,SAASA,iBAAT,OAKJ;AAAA,MAJDC,QAIC,QAJDA,QAIC;AAAA,MAHOC,UAGP,QAHDC,MAGC;AAAA,MAFDC,KAEC,QAFDA,KAEC;AAAA,0BADDC,OACC;AAAA,MADDA,OACC,6BADS;AAAA,WAAM,IAAN;AAAA,GACT;;AACD,8BAA4BC,oCAAwB,CAACJ,UAAD,CAApD;AAAA;AAAA,MAAOC,MAAP;AAAA,MAAeI,SAAf;;AAEA,MAAMC,WAAW,GAAG,SAAdA,WAAc,QAAwBC,IAAxB,EAAiC;AAAA,QAApBC,KAAoB,SAA9BC,MAA8B,CAApBD,KAAoB;AACnDH,IAAAA,SAAS,CAAC,UAAAK,UAAU,EAAI;AACtB,UAAMC,UAAU,GAAGT,KAAK,GAAGU,uBAAW,CAACF,UAAD,EAAaF,KAAb,CAAd,GAAoCA,KAA5D;AACAL,MAAAA,OAAO,CAACQ,UAAD,EAAaJ,IAAb,CAAP;AACA,aAAOI,UAAP;AACD,KAJQ,CAAT;AAKD,GAND;;AAQA,SAAOE,yBAAK,CAACC,QAAN,CAAeC,GAAf,CAAmBhB,QAAnB,EAA6B,UAAAiB,KAAK,EAAI;AAC3C,QAAQC,KAAR,GAAkBD,KAAlB,CAAQC,KAAR;AACA,QAAMC,OAAO,GAAGC,KAAK,CAACC,OAAN,CAAcnB,MAAd,IACZA,MAAM,CAACoB,OAAP,CAAeJ,KAAK,CAACK,IAArB,MAA+B,CAAC,CADpB,GAEZrB,MAAM,KAAKgB,KAAK,CAACK,IAFrB;AAIA,wBAAOC,kBAAY,CAACP,KAAD,kCACdC,KADc;AAEjBC,MAAAA,OAAO,EAAPA,OAFiB;AAGjBM,MAAAA,OAAO,EAAEC,kBAAM,CAACnB,WAAD,EAAcW,KAAK,CAACO,OAApB;AAHE,OAAnB;AAKD,GAXM,CAAP;AAYD;;AAED,SAASE,cAAT,QAIG;AAAA,2BAHDzB,MAGC;AAAA,MAHDA,MAGC,6BAHQ,EAGR;AAAA,0BAFDC,KAEC;AAAA,MAFDA,KAEC,4BAFO,KAEP;AAAA,MADDH,QACC,SADDA,QACC;AACD,SAAOD,iBAAiB,CAAC;AAAEG,IAAAA,MAAM,EAANA,MAAF;AAAUC,IAAAA,KAAK,EAALA,KAAV;AAAiBH,IAAAA,QAAQ,EAARA;AAAjB,GAAD,CAAxB;AACD;;AAED2B,cAAc,CAACC,SAAf,GAA2B;AACzB;AACA1B,EAAAA,MAAM,EAAE2B,6BAAS,CAACC,OAAV,CAAkBD,6BAAS,CAACE,MAA5B,CAFiB;;AAGzB;AACA5B,EAAAA,KAAK,EAAE0B,6BAAS,CAACG,IAJQ;;AAKzB;AACA5B,EAAAA,OAAO,EAAEyB,6BAAS,CAACI;AANM,CAA3B;;;;;"}
|
|
@@ -4,16 +4,13 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
4
4
|
|
|
5
5
|
var _defineProperty = require('@babel/runtime/helpers/defineProperty');
|
|
6
6
|
var React = require('react');
|
|
7
|
-
var
|
|
8
|
-
var useHotkeys = require('@elliemae/ds-utilities/hooks/useHotkeys');
|
|
9
|
-
var system = require('@elliemae/ds-utilities/system');
|
|
7
|
+
var dsUtilities = require('@elliemae/ds-utilities');
|
|
10
8
|
var FocusGroup_utils_getNextCellPosition = require('./utils/getNextCellPosition.js');
|
|
11
9
|
|
|
12
10
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
13
11
|
|
|
14
12
|
var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty);
|
|
15
13
|
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
16
|
-
var useHotkeys__default = /*#__PURE__*/_interopDefaultLegacy(useHotkeys);
|
|
17
14
|
|
|
18
15
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
|
19
16
|
|
|
@@ -32,7 +29,7 @@ function registerHotKeysHooks(hotKeys, _ref) {
|
|
|
32
29
|
var _hotKeys$key = hotKeys[key],
|
|
33
30
|
_handler = _hotKeys$key.handler,
|
|
34
31
|
options = _hotKeys$key.options;
|
|
35
|
-
|
|
32
|
+
dsUtilities.useHotkeys({
|
|
36
33
|
keys: key,
|
|
37
34
|
handler: function handler(e) {
|
|
38
35
|
e.preventDefault();
|
|
@@ -64,13 +61,13 @@ function FocusGridProvider(_ref2) {
|
|
|
64
61
|
var containerRef = React.useRef(document);
|
|
65
62
|
var child = React__default['default'].Children.only(children);
|
|
66
63
|
var decoratedChild = /*#__PURE__*/React__default['default'].cloneElement(child, {
|
|
67
|
-
innerRef:
|
|
64
|
+
innerRef: dsUtilities.mergeRefs(child.props.innerRef, containerRef)
|
|
68
65
|
});
|
|
69
66
|
|
|
70
67
|
var getNode = function getNode(_ref3) {
|
|
71
68
|
var rowIndex = _ref3.rowIndex,
|
|
72
69
|
cellIndex = _ref3.cellIndex;
|
|
73
|
-
return
|
|
70
|
+
return dsUtilities.get(grid.current, [rowIndex, cellIndex]);
|
|
74
71
|
};
|
|
75
72
|
|
|
76
73
|
var register = function register(node, rowIndex, columnIndex) {
|
|
@@ -104,7 +101,7 @@ function FocusGridProvider(_ref2) {
|
|
|
104
101
|
if (shouldRefocus) {
|
|
105
102
|
var rowIndex = focusedRow.current;
|
|
106
103
|
var cellIndex = focusedCell.current;
|
|
107
|
-
var node =
|
|
104
|
+
var node = dsUtilities.get(grid.current, [rowIndex, cellIndex]);
|
|
108
105
|
if (node) node.focus();
|
|
109
106
|
}
|
|
110
107
|
});
|
|
@@ -140,19 +137,19 @@ function FocusGridProvider(_ref2) {
|
|
|
140
137
|
});
|
|
141
138
|
|
|
142
139
|
var defaultKeyBindings = _objectSpread({
|
|
143
|
-
ArrowUp:
|
|
140
|
+
ArrowUp: dsUtilities.runAll(preventDefault, function () {
|
|
144
141
|
return focusNextCell(-1, 0);
|
|
145
142
|
}),
|
|
146
|
-
ArrowRight:
|
|
143
|
+
ArrowRight: dsUtilities.runAll(preventDefault, function () {
|
|
147
144
|
return focusNextCell(0, 1);
|
|
148
145
|
}),
|
|
149
|
-
ArrowDown:
|
|
146
|
+
ArrowDown: dsUtilities.runAll(preventDefault, function () {
|
|
150
147
|
return focusNextCell(1, 0);
|
|
151
148
|
}),
|
|
152
|
-
ArrowLeft:
|
|
149
|
+
ArrowLeft: dsUtilities.runAll(preventDefault, function () {
|
|
153
150
|
return focusNextCell(0, -1);
|
|
154
151
|
}),
|
|
155
|
-
Home:
|
|
152
|
+
Home: dsUtilities.runAll(preventDefault, function (e) {
|
|
156
153
|
var rowIndex = focusedRow.current;
|
|
157
154
|
|
|
158
155
|
if (e.ctrlKey) {
|
|
@@ -164,7 +161,7 @@ function FocusGridProvider(_ref2) {
|
|
|
164
161
|
cellIndex: 0
|
|
165
162
|
});
|
|
166
163
|
}),
|
|
167
|
-
End:
|
|
164
|
+
End: dsUtilities.runAll(preventDefault, function (e) {
|
|
168
165
|
var rowIndex = focusedRow.current;
|
|
169
166
|
|
|
170
167
|
if (e.ctrlKey) {
|
|
@@ -178,7 +175,7 @@ function FocusGridProvider(_ref2) {
|
|
|
178
175
|
})
|
|
179
176
|
}, keyBindings);
|
|
180
177
|
|
|
181
|
-
var nextKeyBindings =
|
|
178
|
+
var nextKeyBindings = dsUtilities.isFunction(keyBindings) ? keyBindings({
|
|
182
179
|
defaultBindings: defaultKeyBindings,
|
|
183
180
|
rowIndex: focusedRow.current,
|
|
184
181
|
cellIndex: focusedCell.current
|
|
@@ -187,7 +184,7 @@ function FocusGridProvider(_ref2) {
|
|
|
187
184
|
var onKeyDown = function onKeyDown(e) {
|
|
188
185
|
if (e.target.tagName.toLowerCase() === 'input') return;
|
|
189
186
|
var action = nextKeyBindings[e.key];
|
|
190
|
-
if (
|
|
187
|
+
if (dsUtilities.isFunction(action)) action(e);
|
|
191
188
|
};
|
|
192
189
|
|
|
193
190
|
var activate = function activate(container) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FocusGrid.js","sources":["../../../src/FocusGroup/FocusGrid.tsx"],"sourcesContent":["import React, { createContext, useEffect, useMemo, useRef } from 'react';\nimport { isFunction, runAll, get } from '@elliemae/ds-utilities/utils';\nimport useHotkeys from '@elliemae/ds-utilities/hooks/useHotkeys';\nimport { mergeRefs } from '@elliemae/ds-utilities/system';\nimport getNextCellPosition from './utils/getNextCellPosition';\n\nexport const FocusGridContext = createContext();\nconst { Provider } = FocusGridContext;\n\nconst preventDefault = e => e.preventDefault();\n\nfunction registerHotKeysHooks(hotKeys, { focusedRow, focusedCell }) {\n Object.keys(hotKeys).forEach(key => {\n const { handler, options } = hotKeys[key];\n useHotkeys({\n keys: key,\n handler: e => {\n e.preventDefault();\n handler({\n rowIndex: focusedRow.current,\n cellIndex: focusedCell.current,\n });\n },\n options,\n });\n });\n}\n\n// eslint-disable-next-line max-statements\nexport default function FocusGridProvider({\n shouldWrapRows = false,\n shouldWrapCells = false,\n shouldRefocus = true,\n children,\n keyBindings,\n hotKeys,\n}) {\n const focusedRow = useRef();\n const focusedCell = useRef();\n const grid = useRef([]);\n const containerRef = useRef(document);\n const child = React.Children.only(children);\n const decoratedChild = React.cloneElement(child, {\n innerRef: mergeRefs(child.props.innerRef, containerRef),\n });\n\n const getNode = ({ rowIndex, cellIndex }) =>\n get(grid.current, [rowIndex, cellIndex]);\n\n const register = (node, rowIndex, columnIndex) => {\n if (!node) return;\n if (!Array.isArray(grid.current[rowIndex])) {\n grid.current[rowIndex] = [];\n }\n\n if (rowIndex === 0 && columnIndex === 0) {\n node.setAttribute('tabindex', 0);\n } else {\n node.setAttribute('tabindex', -1);\n }\n\n node.onfocus = () => {\n const prevNode = getNode({\n rowIndex: focusedRow.current,\n cellIndex: focusedCell.current,\n });\n\n if (prevNode) prevNode.setAttribute('tabindex', -1);\n\n node.setAttribute('tabindex', 0);\n focusedRow.current = rowIndex;\n focusedCell.current = columnIndex;\n };\n grid.current[rowIndex][columnIndex] = node;\n };\n\n useEffect(() => {\n if (shouldRefocus) {\n const rowIndex = focusedRow.current;\n const cellIndex = focusedCell.current;\n\n const node = get(grid.current, [rowIndex, cellIndex]);\n if (node) node.focus();\n }\n });\n\n const focusNextCell = (directionY, directionX, position) => {\n const { rowIndex, cellIndex } =\n position ||\n getNextCellPosition({\n grid: grid.current,\n currentCell: focusedCell.current,\n currentRow: focusedRow.current,\n directionX,\n directionY,\n shouldWrapCells,\n shouldWrapRows,\n });\n\n const node = getNode({ rowIndex, cellIndex });\n\n // can focus\n if (node) {\n node.focus();\n focusedRow.current = rowIndex;\n focusedCell.current = cellIndex;\n }\n };\n\n registerHotKeysHooks(hotKeys, { focusedCell, focusedRow });\n\n const defaultKeyBindings = {\n ArrowUp: runAll(preventDefault, () => focusNextCell(-1, 0)),\n ArrowRight: runAll(preventDefault, () => focusNextCell(0, 1)),\n ArrowDown: runAll(preventDefault, () => focusNextCell(1, 0)),\n ArrowLeft: runAll(preventDefault, () => focusNextCell(0, -1)),\n Home: runAll(preventDefault, e => {\n let rowIndex = focusedRow.current;\n if (e.ctrlKey) {\n rowIndex = 0;\n }\n focusNextCell(0, 0, { rowIndex, cellIndex: 0 });\n }),\n End: runAll(preventDefault, e => {\n let rowIndex = focusedRow.current;\n if (e.ctrlKey) {\n rowIndex = grid.current.length - 1;\n }\n focusNextCell(0, 0, { rowIndex, cellIndex: grid.current[0].length - 1 });\n }),\n ...keyBindings,\n };\n const nextKeyBindings = isFunction(keyBindings)\n ? keyBindings({\n defaultBindings: defaultKeyBindings,\n rowIndex: focusedRow.current,\n cellIndex: focusedCell.current,\n })\n : { ...defaultKeyBindings, ...keyBindings };\n\n const onKeyDown = e => {\n if (e.target.tagName.toLowerCase() === 'input') return;\n const action = nextKeyBindings[e.key];\n if (isFunction(action)) action(e);\n };\n\n const activate = container => {\n container.addEventListener('keydown', onKeyDown, true);\n };\n\n const deactivate = container => {\n container.removeEventListener('keydown', onKeyDown, true);\n };\n\n useEffect(() => {\n activate(containerRef.current);\n return () => {\n deactivate(containerRef.current);\n };\n }, []);\n\n const valueProvider = useMemo(\n () => ({\n register,\n }),\n [],\n );\n\n return <Provider value={valueProvider}>{decoratedChild}</Provider>;\n}\n"],"names":["FocusGridContext","createContext","Provider","preventDefault","e","registerHotKeysHooks","hotKeys","focusedRow","focusedCell","Object","keys","forEach","key","handler","options","useHotkeys","rowIndex","current","cellIndex","FocusGridProvider","shouldWrapRows","shouldWrapCells","shouldRefocus","children","keyBindings","useRef","grid","containerRef","document","child","React","Children","only","decoratedChild","cloneElement","innerRef","mergeRefs","props","getNode","get","register","node","columnIndex","Array","isArray","setAttribute","onfocus","prevNode","useEffect","focus","focusNextCell","directionY","directionX","position","getNextCellPosition","currentCell","currentRow","defaultKeyBindings","ArrowUp","runAll","ArrowRight","ArrowDown","ArrowLeft","Home","ctrlKey","End","length","nextKeyBindings","isFunction","defaultBindings","onKeyDown","target","tagName","toLowerCase","action","activate","container","addEventListener","deactivate","removeEventListener","valueProvider","useMemo"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FocusGrid.js","sources":["../../../src/FocusGroup/FocusGrid.tsx"],"sourcesContent":["import React, { createContext, useEffect, useMemo, useRef } from 'react';\nimport { isFunction, runAll, get, useHotkeys, mergeRefs } from '@elliemae/ds-utilities';\nimport getNextCellPosition from './utils/getNextCellPosition';\n\nexport const FocusGridContext = createContext();\nconst { Provider } = FocusGridContext;\n\nconst preventDefault = e => e.preventDefault();\n\nfunction registerHotKeysHooks(hotKeys, { focusedRow, focusedCell }) {\n Object.keys(hotKeys).forEach(key => {\n const { handler, options } = hotKeys[key];\n useHotkeys({\n keys: key,\n handler: e => {\n e.preventDefault();\n handler({\n rowIndex: focusedRow.current,\n cellIndex: focusedCell.current,\n });\n },\n options,\n });\n });\n}\n\n// eslint-disable-next-line max-statements\nexport default function FocusGridProvider({\n shouldWrapRows = false,\n shouldWrapCells = false,\n shouldRefocus = true,\n children,\n keyBindings,\n hotKeys,\n}) {\n const focusedRow = useRef();\n const focusedCell = useRef();\n const grid = useRef([]);\n const containerRef = useRef(document);\n const child = React.Children.only(children);\n const decoratedChild = React.cloneElement(child, {\n innerRef: mergeRefs(child.props.innerRef, containerRef),\n });\n\n const getNode = ({ rowIndex, cellIndex }) =>\n get(grid.current, [rowIndex, cellIndex]);\n\n const register = (node, rowIndex, columnIndex) => {\n if (!node) return;\n if (!Array.isArray(grid.current[rowIndex])) {\n grid.current[rowIndex] = [];\n }\n\n if (rowIndex === 0 && columnIndex === 0) {\n node.setAttribute('tabindex', 0);\n } else {\n node.setAttribute('tabindex', -1);\n }\n\n node.onfocus = () => {\n const prevNode = getNode({\n rowIndex: focusedRow.current,\n cellIndex: focusedCell.current,\n });\n\n if (prevNode) prevNode.setAttribute('tabindex', -1);\n\n node.setAttribute('tabindex', 0);\n focusedRow.current = rowIndex;\n focusedCell.current = columnIndex;\n };\n grid.current[rowIndex][columnIndex] = node;\n };\n\n useEffect(() => {\n if (shouldRefocus) {\n const rowIndex = focusedRow.current;\n const cellIndex = focusedCell.current;\n\n const node = get(grid.current, [rowIndex, cellIndex]);\n if (node) node.focus();\n }\n });\n\n const focusNextCell = (directionY, directionX, position) => {\n const { rowIndex, cellIndex } =\n position ||\n getNextCellPosition({\n grid: grid.current,\n currentCell: focusedCell.current,\n currentRow: focusedRow.current,\n directionX,\n directionY,\n shouldWrapCells,\n shouldWrapRows,\n });\n\n const node = getNode({ rowIndex, cellIndex });\n\n // can focus\n if (node) {\n node.focus();\n focusedRow.current = rowIndex;\n focusedCell.current = cellIndex;\n }\n };\n\n registerHotKeysHooks(hotKeys, { focusedCell, focusedRow });\n\n const defaultKeyBindings = {\n ArrowUp: runAll(preventDefault, () => focusNextCell(-1, 0)),\n ArrowRight: runAll(preventDefault, () => focusNextCell(0, 1)),\n ArrowDown: runAll(preventDefault, () => focusNextCell(1, 0)),\n ArrowLeft: runAll(preventDefault, () => focusNextCell(0, -1)),\n Home: runAll(preventDefault, e => {\n let rowIndex = focusedRow.current;\n if (e.ctrlKey) {\n rowIndex = 0;\n }\n focusNextCell(0, 0, { rowIndex, cellIndex: 0 });\n }),\n End: runAll(preventDefault, e => {\n let rowIndex = focusedRow.current;\n if (e.ctrlKey) {\n rowIndex = grid.current.length - 1;\n }\n focusNextCell(0, 0, { rowIndex, cellIndex: grid.current[0].length - 1 });\n }),\n ...keyBindings,\n };\n const nextKeyBindings = isFunction(keyBindings)\n ? keyBindings({\n defaultBindings: defaultKeyBindings,\n rowIndex: focusedRow.current,\n cellIndex: focusedCell.current,\n })\n : { ...defaultKeyBindings, ...keyBindings };\n\n const onKeyDown = e => {\n if (e.target.tagName.toLowerCase() === 'input') return;\n const action = nextKeyBindings[e.key];\n if (isFunction(action)) action(e);\n };\n\n const activate = container => {\n container.addEventListener('keydown', onKeyDown, true);\n };\n\n const deactivate = container => {\n container.removeEventListener('keydown', onKeyDown, true);\n };\n\n useEffect(() => {\n activate(containerRef.current);\n return () => {\n deactivate(containerRef.current);\n };\n }, []);\n\n const valueProvider = useMemo(\n () => ({\n register,\n }),\n [],\n );\n\n return <Provider value={valueProvider}>{decoratedChild}</Provider>;\n}\n"],"names":["FocusGridContext","createContext","Provider","preventDefault","e","registerHotKeysHooks","hotKeys","focusedRow","focusedCell","Object","keys","forEach","key","handler","options","useHotkeys","rowIndex","current","cellIndex","FocusGridProvider","shouldWrapRows","shouldWrapCells","shouldRefocus","children","keyBindings","useRef","grid","containerRef","document","child","React","Children","only","decoratedChild","cloneElement","innerRef","mergeRefs","props","getNode","get","register","node","columnIndex","Array","isArray","setAttribute","onfocus","prevNode","useEffect","focus","focusNextCell","directionY","directionX","position","getNextCellPosition","currentCell","currentRow","defaultKeyBindings","ArrowUp","runAll","ArrowRight","ArrowDown","ArrowLeft","Home","ctrlKey","End","length","nextKeyBindings","isFunction","defaultBindings","onKeyDown","target","tagName","toLowerCase","action","activate","container","addEventListener","deactivate","removeEventListener","valueProvider","useMemo"],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
var _classCallCheck = require('@babel/runtime/helpers/classCallCheck');
|
|
4
4
|
var _createClass = require('@babel/runtime/helpers/createClass');
|
|
5
5
|
var _defineProperty = require('@babel/runtime/helpers/defineProperty');
|
|
6
|
-
var
|
|
6
|
+
var dsUtilities = require('@elliemae/ds-utilities');
|
|
7
7
|
var hotkeys = require('hotkeys-js');
|
|
8
8
|
|
|
9
9
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
@@ -21,7 +21,7 @@ var defaultOptions = {
|
|
|
21
21
|
};
|
|
22
22
|
|
|
23
23
|
var safeCallAction = function safeCallAction(e, fun) {
|
|
24
|
-
if (
|
|
24
|
+
if (dsUtilities.isFunction(fun)) {
|
|
25
25
|
e.preventDefault();
|
|
26
26
|
|
|
27
27
|
for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
|
|
@@ -46,7 +46,7 @@ var registerHotkeys = function registerHotkeys() {
|
|
|
46
46
|
allowDocumentHandler = _hotKeys$hotkey$allow === void 0 ? false : _hotKeys$hotkey$allow;
|
|
47
47
|
|
|
48
48
|
var parameterizedHandler = function parameterizedHandler(e) {
|
|
49
|
-
var handlerParams =
|
|
49
|
+
var handlerParams = dsUtilities.isFunction(params) ? params() : params;
|
|
50
50
|
if (!allowDocumentHandler && handlerParams.item !== document.activeElement) return;
|
|
51
51
|
e.preventDefault();
|
|
52
52
|
handler(handlerParams);
|
|
@@ -119,7 +119,7 @@ var FocusGroup = /*#__PURE__*/function () {
|
|
|
119
119
|
value: function getHotKeysParams() {
|
|
120
120
|
var item = this.currentFocusedItem;
|
|
121
121
|
|
|
122
|
-
var _get =
|
|
122
|
+
var _get = dsUtilities.get(item, ['dataset'], {}),
|
|
123
123
|
index = _get.index;
|
|
124
124
|
|
|
125
125
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FocusGroup.js","sources":["../../../src/FocusGroup/FocusGroup.tsx"],"sourcesContent":["/* eslint-disable no-param-reassign */\n/* eslint-disable max-statements */\n/* eslint-disable max-lines */\nimport { isFunction, get } from '@elliemae/ds-utilities/utils';\nimport hotkeys from 'hotkeys-js';\n\nconst defaultOptions = {\n orientation: 'vertical',\n};\n\nconst safeCallAction = (e, fun, ...args) => {\n if (isFunction(fun)) {\n e.preventDefault();\n fun(...args);\n }\n};\n\nconst registerHotkeys = (\n hotKeys = {},\n params,\n getContainer = () => document,\n) => {\n Object.keys(hotKeys).forEach((hotkey) => {\n const { options, handler, allowDocumentHandler = false } = hotKeys[hotkey];\n const parameterizedHandler = (e) => {\n const handlerParams = isFunction(params) ? params() : params;\n if (\n !allowDocumentHandler &&\n handlerParams.item !== document.activeElement\n )\n return;\n e.preventDefault();\n handler(handlerParams);\n };\n hotkeys(\n hotkey,\n { element: getContainer(), ...options },\n parameterizedHandler,\n );\n });\n};\n\nconst unregisterHotKeys = (hotKeys = {}) => {\n Object.keys(hotKeys).forEach((hotkey) => {\n hotkeys.unbind(hotkey);\n });\n};\n\nconst noop = () => null;\n\nexport default class FocusGroup {\n items = [];\n\n constructor(options = {}) {\n this.options = { ...defaultOptions, ...options };\n\n const { orientation } = this.options;\n\n this.keyBindings = {\n ArrowUp: orientation !== 'horizontal' && 'previous',\n ArrowRight: orientation !== 'vertical' && 'next',\n ArrowDown: orientation !== 'horizontal' && 'next',\n ArrowLeft: orientation !== 'vertical' && 'previous',\n Home: 'first',\n End: 'last',\n PageUp: 'first',\n PageDown: 'last',\n Escape: 'exit',\n ...options.keyBindings,\n };\n\n this.currentFocusedItem = null;\n this.currIndex = null;\n\n this.mapActions = {\n previous: this.focusPrevious.bind(this),\n next: this.focusNext.bind(this),\n first: this.focusFirst.bind(this),\n last: this.focusLast.bind(this),\n exit: this.exit.bind(this),\n enter: () => null,\n };\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.register = this.register.bind(this);\n this.focusFirst = this.focusFirst.bind(this);\n this.focusLast = this.focusLast.bind(this);\n this.isGroupActive = this.isGroupActive.bind(this);\n this.focusNext = this.focusNext.bind(this);\n this.focusPrevious = this.focusPrevious.bind(this);\n this.focusItem = this.focusItem.bind(this);\n this.focusCurrent = this.focusCurrent.bind(this);\n this.getHotKeysParams = this.getHotKeysParams.bind(this);\n }\n\n getHotKeysParams() {\n const item = this.currentFocusedItem;\n const { index } = get(item, ['dataset'], {});\n return {\n item,\n index,\n };\n }\n\n activate() {\n const { getContainer } = this.options;\n document.addEventListener('keydown', this.handleKeyDown, true);\n registerHotkeys(this.options.hotKeys, this.getHotKeysParams, getContainer);\n }\n\n deactivate() {\n document.removeEventListener('keydown', this.handleKeyDown, true);\n unregisterHotKeys(this.options.hotKeys);\n }\n\n handleKeyDown(e) {\n if (!this.isGroupActive()) return;\n this.executeActionByEvent(e);\n }\n\n executeActionByEvent(e) {\n const actions = Array.isArray(this.keyBindings[e.key])\n ? this.keyBindings[e.key]\n : [this.keyBindings[e.key]];\n return actions.map((action) =>\n typeof action === 'string'\n ? safeCallAction(e, this.mapActions[action])\n : safeCallAction(e, action),\n );\n }\n\n register(node, props = {}) {\n const afterIndex = this.items.findIndex(\n (item) =>\n item.compareDocumentPosition(node) === Node.DOCUMENT_POSITION_PRECEDING,\n );\n node.specialOnFocus = props.onFocus || noop;\n node.specialOnBlur = props.onBlur || noop;\n node.onclick = () => this.focusItem(node);\n node.onfocus = () => {\n this.focusItem(node);\n };\n if (afterIndex === -1) {\n this.items.push(node);\n } else {\n this.items.splice(afterIndex, 0, node);\n }\n }\n\n unregister(node) {\n const index = this.getItemIndexByNode(node);\n if (index > -1) this.items.splice(index, 1);\n }\n\n exit() {\n const { onExitFocusGroup } = this.options;\n onExitFocusGroup();\n }\n\n focusItem(node) {\n if (this.currentFocusedItem && this.currentFocusedItem !== node) {\n this.currentFocusedItem.specialOnBlur();\n this.currentFocusedItem.setAttribute('tabindex', -1);\n }\n if (!node) return;\n this.currentFocusedItem = node;\n node.setAttribute('tabindex', 0);\n node.focus();\n node.specialOnFocus();\n }\n\n focusNext() {\n const item = this.getNextItem();\n this.focusItem(item);\n }\n\n focusByNode(node) {\n const index = this.getItemIndexByNode(node);\n this.focusByIndex(index);\n }\n\n focusByIndex(index) {\n const item = this.getItemByIndex(index);\n this.focusItem(item);\n }\n\n focusPrevious() {\n const prevItem = this.getPreviousItem();\n this.focusItem(prevItem);\n }\n\n focusFirst() {\n const item = this.getFirstItem();\n this.focusItem(item);\n }\n\n focusLast() {\n const item = this.getLastItem();\n this.focusItem(item);\n }\n\n focusCurrent() {\n this.focusItem(this.currentFocusedItem);\n }\n\n focusNextGroup() {\n const { onFocusNextGroup } = this.options;\n this.exit();\n onFocusNextGroup();\n }\n\n focusPreviousGroup() {\n const { onFocusPreviousGroup } = this.options;\n this.exit();\n onFocusPreviousGroup();\n }\n\n getNextItem() {\n const { loop } = this.options;\n const currentIndex = this.getFocusedIndex();\n const supposedNextIndex = currentIndex + 1;\n if (!this.checkCanFocusNext(supposedNextIndex)) {\n return loop ? this.getFirstItem() : this.focusNextGroup();\n }\n return this.getItemByIndex(supposedNextIndex);\n }\n\n getPreviousItem() {\n const { loop } = this.options;\n const currentIndex = this.getFocusedIndex();\n const supposedPrevIndex = currentIndex - 1;\n if (!this.checkCanFocusPrev(supposedPrevIndex)) {\n return loop ? this.getLastItem() : this.focusPreviousGroup();\n }\n return this.getItemByIndex(supposedPrevIndex);\n }\n\n checkCanFocusNext(index) {\n return this.items.length > index;\n }\n\n checkCanFocusPrev(index) {\n return index >= 0;\n }\n\n getItemByIndex(index) {\n return this.items[index];\n }\n\n getItemIndexByNode(node) {\n return this.items.findIndex((item) => item === node);\n }\n\n getFocusedIndex() {\n return this.getItemIndexByNode(document.activeElement);\n }\n\n getFocusedItem() {\n const index = this.getFocusedIndex();\n return index > -1 && this.items[index];\n }\n\n isGroupActive() {\n return this.getFocusedIndex() !== -1;\n }\n\n getFirstItem() {\n return !!this.items.length && this.items[0];\n }\n\n getLastItem() {\n return !!this.items.length && this.items[this.items.length - 1];\n }\n}\n"],"names":["defaultOptions","orientation","safeCallAction","e","fun","isFunction","preventDefault","args","registerHotkeys","hotKeys","params","getContainer","document","Object","keys","forEach","hotkey","options","handler","allowDocumentHandler","parameterizedHandler","handlerParams","item","activeElement","hotkeys","element","unregisterHotKeys","unbind","noop","FocusGroup","keyBindings","ArrowUp","ArrowRight","ArrowDown","ArrowLeft","Home","End","PageUp","PageDown","Escape","currentFocusedItem","currIndex","mapActions","previous","focusPrevious","bind","next","focusNext","first","focusFirst","last","focusLast","exit","enter","handleKeyDown","register","isGroupActive","focusItem","focusCurrent","getHotKeysParams","get","index","addEventListener","removeEventListener","executeActionByEvent","actions","Array","isArray","key","map","action","node","props","afterIndex","items","findIndex","compareDocumentPosition","Node","DOCUMENT_POSITION_PRECEDING","specialOnFocus","onFocus","specialOnBlur","onBlur","onclick","onfocus","push","splice","getItemIndexByNode","onExitFocusGroup","setAttribute","focus","getNextItem","focusByIndex","getItemByIndex","prevItem","getPreviousItem","getFirstItem","getLastItem","onFocusNextGroup","onFocusPreviousGroup","loop","currentIndex","getFocusedIndex","supposedNextIndex","checkCanFocusNext","focusNextGroup","supposedPrevIndex","checkCanFocusPrev","focusPreviousGroup","length"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FocusGroup.js","sources":["../../../src/FocusGroup/FocusGroup.tsx"],"sourcesContent":["/* eslint-disable no-param-reassign */\n/* eslint-disable max-statements */\n/* eslint-disable max-lines */\nimport { isFunction, get } from '@elliemae/ds-utilities';\nimport hotkeys from 'hotkeys-js';\n\nconst defaultOptions = {\n orientation: 'vertical',\n};\n\nconst safeCallAction = (e, fun, ...args) => {\n if (isFunction(fun)) {\n e.preventDefault();\n fun(...args);\n }\n};\n\nconst registerHotkeys = (\n hotKeys = {},\n params,\n getContainer = () => document,\n) => {\n Object.keys(hotKeys).forEach((hotkey) => {\n const { options, handler, allowDocumentHandler = false } = hotKeys[hotkey];\n const parameterizedHandler = (e) => {\n const handlerParams = isFunction(params) ? params() : params;\n if (\n !allowDocumentHandler &&\n handlerParams.item !== document.activeElement\n )\n return;\n e.preventDefault();\n handler(handlerParams);\n };\n hotkeys(\n hotkey,\n { element: getContainer(), ...options },\n parameterizedHandler,\n );\n });\n};\n\nconst unregisterHotKeys = (hotKeys = {}) => {\n Object.keys(hotKeys).forEach((hotkey) => {\n hotkeys.unbind(hotkey);\n });\n};\n\nconst noop = () => null;\n\nexport default class FocusGroup {\n items = [];\n\n constructor(options = {}) {\n this.options = { ...defaultOptions, ...options };\n\n const { orientation } = this.options;\n\n this.keyBindings = {\n ArrowUp: orientation !== 'horizontal' && 'previous',\n ArrowRight: orientation !== 'vertical' && 'next',\n ArrowDown: orientation !== 'horizontal' && 'next',\n ArrowLeft: orientation !== 'vertical' && 'previous',\n Home: 'first',\n End: 'last',\n PageUp: 'first',\n PageDown: 'last',\n Escape: 'exit',\n ...options.keyBindings,\n };\n\n this.currentFocusedItem = null;\n this.currIndex = null;\n\n this.mapActions = {\n previous: this.focusPrevious.bind(this),\n next: this.focusNext.bind(this),\n first: this.focusFirst.bind(this),\n last: this.focusLast.bind(this),\n exit: this.exit.bind(this),\n enter: () => null,\n };\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.register = this.register.bind(this);\n this.focusFirst = this.focusFirst.bind(this);\n this.focusLast = this.focusLast.bind(this);\n this.isGroupActive = this.isGroupActive.bind(this);\n this.focusNext = this.focusNext.bind(this);\n this.focusPrevious = this.focusPrevious.bind(this);\n this.focusItem = this.focusItem.bind(this);\n this.focusCurrent = this.focusCurrent.bind(this);\n this.getHotKeysParams = this.getHotKeysParams.bind(this);\n }\n\n getHotKeysParams() {\n const item = this.currentFocusedItem;\n const { index } = get(item, ['dataset'], {});\n return {\n item,\n index,\n };\n }\n\n activate() {\n const { getContainer } = this.options;\n document.addEventListener('keydown', this.handleKeyDown, true);\n registerHotkeys(this.options.hotKeys, this.getHotKeysParams, getContainer);\n }\n\n deactivate() {\n document.removeEventListener('keydown', this.handleKeyDown, true);\n unregisterHotKeys(this.options.hotKeys);\n }\n\n handleKeyDown(e) {\n if (!this.isGroupActive()) return;\n this.executeActionByEvent(e);\n }\n\n executeActionByEvent(e) {\n const actions = Array.isArray(this.keyBindings[e.key])\n ? this.keyBindings[e.key]\n : [this.keyBindings[e.key]];\n return actions.map((action) =>\n typeof action === 'string'\n ? safeCallAction(e, this.mapActions[action])\n : safeCallAction(e, action),\n );\n }\n\n register(node, props = {}) {\n const afterIndex = this.items.findIndex(\n (item) =>\n item.compareDocumentPosition(node) === Node.DOCUMENT_POSITION_PRECEDING,\n );\n node.specialOnFocus = props.onFocus || noop;\n node.specialOnBlur = props.onBlur || noop;\n node.onclick = () => this.focusItem(node);\n node.onfocus = () => {\n this.focusItem(node);\n };\n if (afterIndex === -1) {\n this.items.push(node);\n } else {\n this.items.splice(afterIndex, 0, node);\n }\n }\n\n unregister(node) {\n const index = this.getItemIndexByNode(node);\n if (index > -1) this.items.splice(index, 1);\n }\n\n exit() {\n const { onExitFocusGroup } = this.options;\n onExitFocusGroup();\n }\n\n focusItem(node) {\n if (this.currentFocusedItem && this.currentFocusedItem !== node) {\n this.currentFocusedItem.specialOnBlur();\n this.currentFocusedItem.setAttribute('tabindex', -1);\n }\n if (!node) return;\n this.currentFocusedItem = node;\n node.setAttribute('tabindex', 0);\n node.focus();\n node.specialOnFocus();\n }\n\n focusNext() {\n const item = this.getNextItem();\n this.focusItem(item);\n }\n\n focusByNode(node) {\n const index = this.getItemIndexByNode(node);\n this.focusByIndex(index);\n }\n\n focusByIndex(index) {\n const item = this.getItemByIndex(index);\n this.focusItem(item);\n }\n\n focusPrevious() {\n const prevItem = this.getPreviousItem();\n this.focusItem(prevItem);\n }\n\n focusFirst() {\n const item = this.getFirstItem();\n this.focusItem(item);\n }\n\n focusLast() {\n const item = this.getLastItem();\n this.focusItem(item);\n }\n\n focusCurrent() {\n this.focusItem(this.currentFocusedItem);\n }\n\n focusNextGroup() {\n const { onFocusNextGroup } = this.options;\n this.exit();\n onFocusNextGroup();\n }\n\n focusPreviousGroup() {\n const { onFocusPreviousGroup } = this.options;\n this.exit();\n onFocusPreviousGroup();\n }\n\n getNextItem() {\n const { loop } = this.options;\n const currentIndex = this.getFocusedIndex();\n const supposedNextIndex = currentIndex + 1;\n if (!this.checkCanFocusNext(supposedNextIndex)) {\n return loop ? this.getFirstItem() : this.focusNextGroup();\n }\n return this.getItemByIndex(supposedNextIndex);\n }\n\n getPreviousItem() {\n const { loop } = this.options;\n const currentIndex = this.getFocusedIndex();\n const supposedPrevIndex = currentIndex - 1;\n if (!this.checkCanFocusPrev(supposedPrevIndex)) {\n return loop ? this.getLastItem() : this.focusPreviousGroup();\n }\n return this.getItemByIndex(supposedPrevIndex);\n }\n\n checkCanFocusNext(index) {\n return this.items.length > index;\n }\n\n checkCanFocusPrev(index) {\n return index >= 0;\n }\n\n getItemByIndex(index) {\n return this.items[index];\n }\n\n getItemIndexByNode(node) {\n return this.items.findIndex((item) => item === node);\n }\n\n getFocusedIndex() {\n return this.getItemIndexByNode(document.activeElement);\n }\n\n getFocusedItem() {\n const index = this.getFocusedIndex();\n return index > -1 && this.items[index];\n }\n\n isGroupActive() {\n return this.getFocusedIndex() !== -1;\n }\n\n getFirstItem() {\n return !!this.items.length && this.items[0];\n }\n\n getLastItem() {\n return !!this.items.length && this.items[this.items.length - 1];\n }\n}\n"],"names":["defaultOptions","orientation","safeCallAction","e","fun","isFunction","preventDefault","args","registerHotkeys","hotKeys","params","getContainer","document","Object","keys","forEach","hotkey","options","handler","allowDocumentHandler","parameterizedHandler","handlerParams","item","activeElement","hotkeys","element","unregisterHotKeys","unbind","noop","FocusGroup","keyBindings","ArrowUp","ArrowRight","ArrowDown","ArrowLeft","Home","End","PageUp","PageDown","Escape","currentFocusedItem","currIndex","mapActions","previous","focusPrevious","bind","next","focusNext","first","focusFirst","last","focusLast","exit","enter","handleKeyDown","register","isGroupActive","focusItem","focusCurrent","getHotKeysParams","get","index","addEventListener","removeEventListener","executeActionByEvent","actions","Array","isArray","key","map","action","node","props","afterIndex","items","findIndex","compareDocumentPosition","Node","DOCUMENT_POSITION_PRECEDING","specialOnFocus","onFocus","specialOnBlur","onBlur","onclick","onfocus","push","splice","getItemIndexByNode","onExitFocusGroup","setAttribute","focus","getNextItem","focusByIndex","getItemByIndex","prevItem","getPreviousItem","getFirstItem","getLastItem","onFocusNextGroup","onFocusPreviousGroup","loop","currentIndex","getFocusedIndex","supposedNextIndex","checkCanFocusNext","focusNextGroup","supposedPrevIndex","checkCanFocusPrev","focusPreviousGroup","length"],"mappings":"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"}
|
|
@@ -8,7 +8,7 @@ var _possibleConstructorReturn = require('@babel/runtime/helpers/possibleConstru
|
|
|
8
8
|
var _getPrototypeOf = require('@babel/runtime/helpers/getPrototypeOf');
|
|
9
9
|
var _defineProperty = require('@babel/runtime/helpers/defineProperty');
|
|
10
10
|
var React = require('react');
|
|
11
|
-
var
|
|
11
|
+
var dsUtilities = require('@elliemae/ds-utilities');
|
|
12
12
|
var FocusGroup_FocusGroup = require('./FocusGroup.js');
|
|
13
13
|
var FocusGroup_FocusGroupContext = require('./FocusGroupContext.js');
|
|
14
14
|
require('hotkeys-js');
|
|
@@ -90,7 +90,7 @@ var FocusGroupProvider = /*#__PURE__*/function (_Component) {
|
|
|
90
90
|
var onActivate = this.props.onActivate;
|
|
91
91
|
this.focusGroup.activate();
|
|
92
92
|
this.activated = true;
|
|
93
|
-
if (
|
|
93
|
+
if (dsUtilities.isFunction(onActivate)) onActivate();
|
|
94
94
|
}
|
|
95
95
|
}, {
|
|
96
96
|
key: "deactivate",
|
|
@@ -99,7 +99,7 @@ var FocusGroupProvider = /*#__PURE__*/function (_Component) {
|
|
|
99
99
|
this.activated = false;
|
|
100
100
|
this.focusGroup.deactivate();
|
|
101
101
|
|
|
102
|
-
if (
|
|
102
|
+
if (dsUtilities.isFunction(onExitFocusGroup)) {
|
|
103
103
|
onExitFocusGroup();
|
|
104
104
|
}
|
|
105
105
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FocusGroupManager.js","sources":["../../../src/FocusGroup/FocusGroupManager.tsx"],"sourcesContent":["import React, { Component, useEffect } from 'react';\nimport { isFunction } from '@elliemae/ds-utilities
|
|
1
|
+
{"version":3,"file":"FocusGroupManager.js","sources":["../../../src/FocusGroup/FocusGroupManager.tsx"],"sourcesContent":["import React, { Component, useEffect } from 'react';\nimport { isFunction } from '@elliemae/ds-utilities';\nimport FocusGroup from './FocusGroup';\nimport FocusGroupContext from './FocusGroupContext';\n\nconst noop = () => null;\n\nexport default class FocusGroupProvider extends Component {\n activated = false;\n\n static defaultProps = {\n exitWhenNoPrevious: false,\n exitWhenNoNext: false,\n keyBindings: {},\n onFocus: noop,\n onExitFocusGroup: noop,\n onFocusPreviousGroup: noop,\n onFocusNextGroup: noop,\n onFocusGroupSet: noop,\n };\n\n constructor(props) {\n super(props);\n\n this.focusGroup = new FocusGroup(props);\n\n props.onFocusGroupSet(this);\n\n this.actions = {\n activate: this.activate.bind(this),\n deactivate: this.deactivate.bind(this),\n register: this.focusGroup.register,\n unregister: this.unregister.bind(this),\n focusFirst: this.focusGroup.focusFirst,\n focusLast: this.focusGroup.focusLast,\n focusItemByIndex: this.focusItemByIndex.bind(this),\n focusItemByNode: this.focusItemByNode.bind(this),\n focus: this.focusGroup.focusCurrent,\n isGroupActive: this.focusGroup.isGroupActive,\n focusNext: this.focusGroup.focusNext,\n focusPrevious: this.focusGroup.focusPrevious,\n };\n }\n\n componentDidMount() {\n const { autoFocusOnMount } = this.props;\n\n this.activate();\n\n if (autoFocusOnMount) {\n setTimeout(() => {\n this.actions.focusFirst();\n }, 0);\n }\n }\n\n componentWillUnmount() {\n this.deactivate();\n }\n\n activate() {\n const { onActivate } = this.props;\n this.focusGroup.activate();\n this.activated = true;\n if (isFunction(onActivate)) onActivate();\n }\n\n deactivate() {\n const { onExitFocusGroup } = this.props;\n this.activated = false;\n this.focusGroup.deactivate();\n if (isFunction(onExitFocusGroup)) {\n onExitFocusGroup();\n }\n }\n\n register(item) {\n this.focusGroup.register(item);\n }\n\n unregister(item) {\n this.focusGroup.unregister(item);\n }\n\n focusItemByIndex(index) {\n if (!this.activated) this.activate();\n setTimeout(() => {\n this.focusGroup.focusByIndex(index);\n }, 200);\n }\n\n focusItemByNode(node) {\n if (!this.activated) this.activate();\n const index = this.focusGroup.getItemIndexByNode(node);\n this.focusItemByIndex(index);\n }\n\n render() {\n const { children } = this.props;\n return (\n <FocusGroupContext.Provider value={this.actions}>\n {children}\n </FocusGroupContext.Provider>\n );\n }\n}\n"],"names":["noop","FocusGroupProvider","props","focusGroup","FocusGroup","onFocusGroupSet","actions","activate","bind","deactivate","register","unregister","focusFirst","focusLast","focusItemByIndex","focusItemByNode","focus","focusCurrent","isGroupActive","focusNext","focusPrevious","autoFocusOnMount","setTimeout","onActivate","activated","isFunction","onExitFocusGroup","item","index","focusByIndex","node","getItemIndexByNode","children","React","FocusGroupContext","Component","exitWhenNoPrevious","exitWhenNoNext","keyBindings","onFocus","onFocusPreviousGroup","onFocusNextGroup"],"mappings":"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"}
|
|
@@ -11,7 +11,7 @@ require('@babel/runtime/helpers/inherits');
|
|
|
11
11
|
require('@babel/runtime/helpers/possibleConstructorReturn');
|
|
12
12
|
require('@babel/runtime/helpers/getPrototypeOf');
|
|
13
13
|
require('@babel/runtime/helpers/defineProperty');
|
|
14
|
-
require('@elliemae/ds-utilities
|
|
14
|
+
require('@elliemae/ds-utilities');
|
|
15
15
|
require('./FocusGroup.js');
|
|
16
16
|
require('hotkeys-js');
|
|
17
17
|
require('./FocusGroupContext.js');
|
package/cjs/FocusGroup/index.js
CHANGED
|
@@ -11,7 +11,7 @@ var FocusGroup_FocusGrid = require('./FocusGrid.js');
|
|
|
11
11
|
require('@babel/runtime/helpers/classCallCheck');
|
|
12
12
|
require('@babel/runtime/helpers/createClass');
|
|
13
13
|
require('@babel/runtime/helpers/defineProperty');
|
|
14
|
-
require('@elliemae/ds-utilities
|
|
14
|
+
require('@elliemae/ds-utilities');
|
|
15
15
|
require('hotkeys-js');
|
|
16
16
|
require('react');
|
|
17
17
|
require('@babel/runtime/helpers/assertThisInitialized');
|
|
@@ -20,8 +20,6 @@ require('@babel/runtime/helpers/possibleConstructorReturn');
|
|
|
20
20
|
require('@babel/runtime/helpers/getPrototypeOf');
|
|
21
21
|
require('@babel/runtime/helpers/objectWithoutProperties');
|
|
22
22
|
require('@babel/runtime/helpers/extends');
|
|
23
|
-
require('@elliemae/ds-utilities/hooks/useHotkeys');
|
|
24
|
-
require('@elliemae/ds-utilities/system');
|
|
25
23
|
require('./utils/getNextCellPosition.js');
|
|
26
24
|
|
|
27
25
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -6,8 +6,8 @@ var _extends = require('@babel/runtime/helpers/extends');
|
|
|
6
6
|
var _defineProperty = require('@babel/runtime/helpers/defineProperty');
|
|
7
7
|
var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
|
|
8
8
|
var React = require('react');
|
|
9
|
-
var DSPopover = require('@elliemae/ds-
|
|
10
|
-
var
|
|
9
|
+
var DSPopover = require('@elliemae/ds-popper');
|
|
10
|
+
var dsUtilities = require('@elliemae/ds-utilities');
|
|
11
11
|
|
|
12
12
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
13
13
|
|
|
@@ -78,7 +78,7 @@ function ToolbarProvider(_ref) {
|
|
|
78
78
|
useScrollListener(function (e) {
|
|
79
79
|
return hide(e, true);
|
|
80
80
|
}, tooltipState.visible);
|
|
81
|
-
|
|
81
|
+
dsUtilities.useOnClickOutside(toolbarRef, function () {
|
|
82
82
|
return hide();
|
|
83
83
|
});
|
|
84
84
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolbarProvider.js","sources":["../../../src/toolbar/ToolbarProvider.tsx"],"sourcesContent":["import React, { useMemo, useRef, useState, useEffect } from 'react';\nimport DSPopover from '@elliemae/ds-
|
|
1
|
+
{"version":3,"file":"ToolbarProvider.js","sources":["../../../src/toolbar/ToolbarProvider.tsx"],"sourcesContent":["import React, { useMemo, useRef, useState, useEffect } from 'react';\nimport DSPopover from '@elliemae/ds-popper';\nimport { useOnClickOutside } from '@elliemae/ds-utilities';\n\nexport const ToolbarContext = React.createContext();\n\nconst { Provider } = ToolbarContext;\n\nconst useScrollListener = (callback, dependencies) => {\n useEffect(() => {\n window.addEventListener('scroll', callback, true);\n return () => {\n window.removeEventListener('scroll', callback, true);\n };\n }, [dependencies]);\n};\n\nconst noop = () => null;\nfunction ToolbarProvider({ delay = 200, children, onHide = noop, onShow = noop }) {\n const showTimer = useRef();\n const hideTimer = useRef();\n const toolbarRef = useRef();\n const [tooltipState, setTooltipState] = useState({});\n\n const show = (state) => {\n if (state.reference === tooltipState.reference) clearTimeout(hideTimer.current);\n showTimer.current = setTimeout(\n () =>\n setTooltipState({\n ...state,\n visible: true,\n }),\n delay,\n );\n onShow();\n };\n\n const hide = (e, force) => {\n if (!force) clearTimeout(showTimer.current);\n hideTimer.current = setTimeout(\n () =>\n setTooltipState((prevState) => ({\n ...prevState,\n visible: false,\n })),\n 100,\n );\n onHide(tooltipState, e);\n };\n\n useScrollListener((e) => hide(e, true), tooltipState.visible);\n useOnClickOutside(toolbarRef, () => hide());\n\n const keyDownHandler = (e) => {\n if (e.key === 'Escape') {\n hide(e);\n }\n };\n\n useEffect(() => {\n window.addEventListener('keydown', keyDownHandler);\n return () => {\n window.removeEventListener('keydown', keyDownHandler);\n };\n });\n\n const value = useMemo(\n () => ({\n state: tooltipState,\n show,\n hide,\n }),\n [tooltipState.reference],\n );\n\n return (\n <Provider value={value}>\n {children}\n <DSPopover\n boundaries=\"scrollParent\"\n {...(tooltipState.options || {})}\n content={tooltipState.renderer}\n placement=\"left\"\n referenceEl={tooltipState.reference}\n renderer={({ as: Component, style, children: Content }) => (\n <div ref={toolbarRef} onMouseEnter={(e) => show(tooltipState, e)} onMouseLeave={hide}>\n <Component style={style}>{Content}</Component>\n </div>\n )}\n style={tooltipState.style}\n visible={tooltipState.visible}\n />\n </Provider>\n );\n}\n\nexport default React.memo(ToolbarProvider);\n"],"names":["ToolbarContext","React","createContext","Provider","useScrollListener","callback","dependencies","useEffect","window","addEventListener","removeEventListener","noop","ToolbarProvider","delay","children","onHide","onShow","showTimer","useRef","hideTimer","toolbarRef","useState","tooltipState","setTooltipState","show","state","reference","clearTimeout","current","setTimeout","visible","hide","e","force","prevState","useOnClickOutside","keyDownHandler","key","value","useMemo","DSPopover","options","renderer","Component","as","style","Content","memo"],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
var _classCallCheck = require('@babel/runtime/helpers/classCallCheck');
|
|
4
4
|
var _createClass = require('@babel/runtime/helpers/createClass');
|
|
5
5
|
var _defineProperty = require('@babel/runtime/helpers/defineProperty');
|
|
6
|
-
var
|
|
6
|
+
var dsUtilities = require('@elliemae/ds-utilities');
|
|
7
7
|
|
|
8
8
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
9
9
|
|
|
@@ -27,7 +27,7 @@ var VolatileRowsListener = /*#__PURE__*/function () {
|
|
|
27
27
|
key: "notify",
|
|
28
28
|
value: function notify(nextRows) {
|
|
29
29
|
this.observers.forEach(function (observer) {
|
|
30
|
-
return
|
|
30
|
+
return dsUtilities.safeCall(observer, nextRows);
|
|
31
31
|
});
|
|
32
32
|
this.observers = [];
|
|
33
33
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VolatileRowsListener.js","sources":["../../../src/useDataGrid/VolatileRowsListener.tsx"],"sourcesContent":["import { safeCall } from '@elliemae/ds-utilities
|
|
1
|
+
{"version":3,"file":"VolatileRowsListener.js","sources":["../../../src/useDataGrid/VolatileRowsListener.tsx"],"sourcesContent":["import { safeCall } from '@elliemae/ds-utilities';\n\nexport default class VolatileRowsListener {\n observers = [];\n\n observe(listener) {\n this.observers.push(listener);\n }\n\n notify(nextRows) {\n this.observers.forEach(observer => safeCall(observer, nextRows));\n this.observers = [];\n }\n}\n"],"names":["VolatileRowsListener","listener","observers","push","nextRows","forEach","observer","safeCall"],"mappings":";;;;;;;;;;;;;IAEqBA;;;;2DACP;;;;;WAEZ,iBAAQC,QAAR,EAAkB;AAChB,WAAKC,SAAL,CAAeC,IAAf,CAAoBF,QAApB;AACD;;;WAED,gBAAOG,QAAP,EAAiB;AACf,WAAKF,SAAL,CAAeG,OAAf,CAAuB,UAAAC,QAAQ;AAAA,eAAIC,oBAAQ,CAACD,QAAD,EAAWF,QAAX,CAAZ;AAAA,OAA/B;AACA,WAAKF,SAAL,GAAiB,EAAjB;AACD;;;;;;;;"}
|
package/cjs/useDataGrid/index.js
CHANGED
|
@@ -4,13 +4,10 @@ var useDataGrid_useDataGrid = require('./useDataGrid.js');
|
|
|
4
4
|
require('@babel/runtime/helpers/defineProperty');
|
|
5
5
|
require('@babel/runtime/helpers/slicedToArray');
|
|
6
6
|
require('@babel/runtime/helpers/objectWithoutProperties');
|
|
7
|
-
require('@elliemae/ds-utilities
|
|
7
|
+
require('@elliemae/ds-utilities');
|
|
8
8
|
require('react');
|
|
9
9
|
require('uuid');
|
|
10
10
|
require('table-resolver');
|
|
11
|
-
require('@elliemae/ds-utilities/hooks/useDerivedStateFromProps');
|
|
12
|
-
require('@elliemae/ds-utilities/hooks/usePrevious');
|
|
13
|
-
require('@elliemae/ds-utilities/system');
|
|
14
11
|
require('./initColumnDefinition.js');
|
|
15
12
|
require('@babel/runtime/helpers/toConsumableArray');
|
|
16
13
|
require('../createDataInstance/utils.js');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;"}
|