@pingux/astro 2.214.0 → 2.215.0-alpha.0
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/lib/cjs/components/OverlayPanel/OverlayPanel.js +6 -0
- package/lib/cjs/components/OverlayPanel/OverlayPanel.test.js +64 -0
- package/lib/cjs/components/TableBase/TableBase.js +119 -20
- package/lib/cjs/components/TableBase/TableBase.stories.js +74 -1
- package/lib/cjs/components/TableBase/TableBase.styles.d.ts +3 -0
- package/lib/cjs/components/TableBase/TableBase.styles.js +3 -0
- package/lib/cjs/components/TableBase/TableBase.test.js +462 -66
- package/lib/cjs/components/TableBase/tableBaseAttributes.d.ts +1 -0
- package/lib/cjs/components/TableBase/tableBaseAttributes.js +3 -0
- package/lib/cjs/types/tableBase.d.ts +6 -0
- package/lib/components/OverlayPanel/OverlayPanel.js +7 -1
- package/lib/components/OverlayPanel/OverlayPanel.test.js +64 -0
- package/lib/components/TableBase/TableBase.js +116 -17
- package/lib/components/TableBase/TableBase.stories.js +76 -3
- package/lib/components/TableBase/TableBase.styles.js +3 -0
- package/lib/components/TableBase/TableBase.test.js +462 -66
- package/lib/components/TableBase/tableBaseAttributes.js +3 -0
- package/package.json +1 -1
|
@@ -14,6 +14,7 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/he
|
|
|
14
14
|
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/objectWithoutProperties"));
|
|
15
15
|
var _react = _interopRequireWildcard(require("react"));
|
|
16
16
|
var _reactAria = require("react-aria");
|
|
17
|
+
var _interactions = require("@react-aria/interactions");
|
|
17
18
|
var _ = require("../..");
|
|
18
19
|
var _hooks = require("../../hooks");
|
|
19
20
|
var _react2 = require("@emotion/react");
|
|
@@ -33,6 +34,11 @@ var OverlayPanel = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
|
33
34
|
var _useOverlayPanelState = (0, _hooks.useOverlayPanelState)(),
|
|
34
35
|
onClose = _useOverlayPanelState.onClose;
|
|
35
36
|
var overlayPanelRef = (0, _hooks.useLocalOrForwardRef)(ref);
|
|
37
|
+
(0, _react.useEffect)(function () {
|
|
38
|
+
if (isOpen) {
|
|
39
|
+
(0, _interactions.setInteractionModality)('keyboard');
|
|
40
|
+
}
|
|
41
|
+
}, [isOpen]);
|
|
36
42
|
|
|
37
43
|
// this is code to avoid regressions -- implementations that do not use the
|
|
38
44
|
// useMountTransition hook will not break, because this className gives the
|
|
@@ -1,12 +1,29 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var _Object$keys = require("@babel/runtime-corejs3/core-js-stable/object/keys");
|
|
4
|
+
var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols");
|
|
5
|
+
var _filterInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/filter");
|
|
6
|
+
var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor");
|
|
7
|
+
var _forEachInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/for-each");
|
|
8
|
+
var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors");
|
|
9
|
+
var _Object$defineProperties = require("@babel/runtime-corejs3/core-js-stable/object/define-properties");
|
|
10
|
+
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
|
|
3
11
|
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
|
|
4
12
|
var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
|
|
13
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
|
|
5
14
|
var _react = _interopRequireDefault(require("react"));
|
|
15
|
+
var _interactions = require("@react-aria/interactions");
|
|
6
16
|
var _testWrapper = require("../../utils/testUtils/testWrapper");
|
|
7
17
|
var _universalComponentTest = require("../../utils/testUtils/universalComponentTest");
|
|
8
18
|
var _OverlayPanel = _interopRequireDefault(require("./OverlayPanel"));
|
|
9
19
|
var _react2 = require("@emotion/react");
|
|
20
|
+
function ownKeys(e, r) { var t = _Object$keys(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = _filterInstanceProperty(o).call(o, function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
21
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var _context, _context2; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty(_context = ownKeys(Object(t), !0)).call(_context, function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : _forEachInstanceProperty(_context2 = ownKeys(Object(t))).call(_context2, function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
22
|
+
jest.mock('@react-aria/interactions', function () {
|
|
23
|
+
return _objectSpread(_objectSpread({}, jest.requireActual('@react-aria/interactions')), {}, {
|
|
24
|
+
setInteractionModality: jest.fn()
|
|
25
|
+
});
|
|
26
|
+
});
|
|
10
27
|
var testId = 'test-overlayPanel';
|
|
11
28
|
var defaultProps = {
|
|
12
29
|
'data-testid': testId
|
|
@@ -154,4 +171,51 @@ test('triggerRef.current.focus() does not fire when key other than esc is presse
|
|
|
154
171
|
charCode: 65
|
|
155
172
|
});
|
|
156
173
|
expect(focusFunction).not.toHaveBeenCalled();
|
|
174
|
+
});
|
|
175
|
+
test('sets interaction modality to keyboard when panel opens', function () {
|
|
176
|
+
getComponent({
|
|
177
|
+
isOpen: true,
|
|
178
|
+
children: (0, _react2.jsx)("div", null, "Test")
|
|
179
|
+
});
|
|
180
|
+
expect(_interactions.setInteractionModality).toHaveBeenCalledWith('keyboard');
|
|
181
|
+
});
|
|
182
|
+
test('does not set interaction modality to keyboard when panel is closed', function () {
|
|
183
|
+
_interactions.setInteractionModality.mockClear();
|
|
184
|
+
getComponent({
|
|
185
|
+
isOpen: false,
|
|
186
|
+
children: (0, _react2.jsx)("div", null, "Test")
|
|
187
|
+
});
|
|
188
|
+
expect(_interactions.setInteractionModality).not.toHaveBeenCalledWith('keyboard');
|
|
189
|
+
});
|
|
190
|
+
test('sets interaction modality to keyboard when panel transitions from closed to open', function () {
|
|
191
|
+
var _getComponent = getComponent({
|
|
192
|
+
isOpen: false,
|
|
193
|
+
children: (0, _react2.jsx)("div", null, "Test")
|
|
194
|
+
}),
|
|
195
|
+
rerender = _getComponent.rerender;
|
|
196
|
+
_interactions.setInteractionModality.mockClear();
|
|
197
|
+
rerender((0, _react2.jsx)(_OverlayPanel["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
198
|
+
isOpen: true
|
|
199
|
+
}), (0, _react2.jsx)("div", null, "Test")));
|
|
200
|
+
expect(_interactions.setInteractionModality).toHaveBeenCalledWith('keyboard');
|
|
201
|
+
});
|
|
202
|
+
test('sets interaction modality to keyboard on re-open after close', function () {
|
|
203
|
+
var _getComponent2 = getComponent({
|
|
204
|
+
isOpen: true,
|
|
205
|
+
children: (0, _react2.jsx)("div", null, "Test")
|
|
206
|
+
}),
|
|
207
|
+
rerender = _getComponent2.rerender;
|
|
208
|
+
_interactions.setInteractionModality.mockClear();
|
|
209
|
+
|
|
210
|
+
// Close the panel
|
|
211
|
+
rerender((0, _react2.jsx)(_OverlayPanel["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
212
|
+
isOpen: false
|
|
213
|
+
}), (0, _react2.jsx)("div", null, "Test")));
|
|
214
|
+
expect(_interactions.setInteractionModality).not.toHaveBeenCalledWith('keyboard');
|
|
215
|
+
|
|
216
|
+
// Re-open — modality must be forced to keyboard again
|
|
217
|
+
rerender((0, _react2.jsx)(_OverlayPanel["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
218
|
+
isOpen: true
|
|
219
|
+
}), (0, _react2.jsx)("div", null, "Test")));
|
|
220
|
+
expect(_interactions.setInteractionModality).toHaveBeenCalledWith('keyboard');
|
|
157
221
|
});
|
|
@@ -15,7 +15,9 @@ _Object$defineProperty(exports, "__esModule", {
|
|
|
15
15
|
value: true
|
|
16
16
|
});
|
|
17
17
|
exports["default"] = void 0;
|
|
18
|
-
var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/
|
|
18
|
+
var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/map"));
|
|
19
|
+
var _setTimeout2 = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/set-timeout"));
|
|
20
|
+
var _map2 = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
|
|
19
21
|
var _from = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/array/from"));
|
|
20
22
|
var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
|
|
21
23
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
|
|
@@ -31,7 +33,7 @@ var _table2 = require("@react-stately/table");
|
|
|
31
33
|
var _ = require("../..");
|
|
32
34
|
var _hooks = require("../../hooks");
|
|
33
35
|
var _react2 = require("@emotion/react");
|
|
34
|
-
var _excluded = ["caption", "selectionMode", "selectionBehavior", "hasSelectionCheckboxes", "isStickyHeader", "className", "isLastColumnSticky", "onResizeStart", "onResize", "onResizeEnd"],
|
|
36
|
+
var _excluded = ["caption", "selectionMode", "selectionBehavior", "hasSelectionCheckboxes", "isStickyHeader", "className", "isLastColumnSticky", "onResizeStart", "onResize", "onResizeEnd", "onRowAction"],
|
|
35
37
|
_excluded2 = ["caption"],
|
|
36
38
|
_excluded3 = ["type", "children", "className", "isSticky"];
|
|
37
39
|
function _interopRequireWildcard(e, t) { if ("function" == typeof _WeakMap) var r = new _WeakMap(), n = new _WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = _Object$defineProperty) && _Object$getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
@@ -69,21 +71,91 @@ var TableBase = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
|
69
71
|
onResizeStart = props.onResizeStart,
|
|
70
72
|
onResize = props.onResize,
|
|
71
73
|
onResizeEnd = props.onResizeEnd,
|
|
74
|
+
onRowAction = props.onRowAction,
|
|
72
75
|
others = (0, _objectWithoutProperties2["default"])(props, _excluded);
|
|
73
76
|
var tableRef = (0, _hooks.useLocalOrForwardRef)(ref);
|
|
74
77
|
var headerRef = (0, _react.useRef)(null);
|
|
75
78
|
var scrollRef = (0, _react.useRef)(null);
|
|
76
79
|
var bodyRef = (0, _react.useRef)(null);
|
|
80
|
+
// Map of row key -> <tr> DOM element, used to focus the clicked row after onRowAction fires.
|
|
81
|
+
var rowRefMap = (0, _react.useRef)(new _map["default"]());
|
|
82
|
+
// Guard flag: set to true just before onRowAction fires so the subsequent blur
|
|
83
|
+
// event (caused by an OverlayPanel FocusScope stealing focus) does not clear
|
|
84
|
+
// activeRowKey prematurely. Resets to false after the blur handler runs.
|
|
85
|
+
var actionJustFired = (0, _react.useRef)(false);
|
|
77
86
|
var _useState = (0, _react.useState)(0),
|
|
78
87
|
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
79
88
|
tableWidth = _useState2[0],
|
|
80
89
|
setTableWidth = _useState2[1];
|
|
90
|
+
var _useState3 = (0, _react.useState)(null),
|
|
91
|
+
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
|
|
92
|
+
activeRowKey = _useState4[0],
|
|
93
|
+
setActiveRowKey = _useState4[1];
|
|
94
|
+
var registerRowRef = (0, _react.useCallback)(function (key, el) {
|
|
95
|
+
if (el) {
|
|
96
|
+
rowRefMap.current.set(key, el);
|
|
97
|
+
} else {
|
|
98
|
+
rowRefMap.current["delete"](key);
|
|
99
|
+
}
|
|
100
|
+
}, []);
|
|
101
|
+
var wrappedOnRowAction = (0, _react.useCallback)(function (key) {
|
|
102
|
+
// Toggle off if clicking the already-active row
|
|
103
|
+
setActiveRowKey(function (prev) {
|
|
104
|
+
return prev === key ? null : key;
|
|
105
|
+
});
|
|
106
|
+
// Signal that a row action just fired so handleTableBlur skips the clear.
|
|
107
|
+
// This prevents OverlayPanel's FocusScope autoFocus from triggering a false
|
|
108
|
+
// positive blur that would remove the active-row highlight.
|
|
109
|
+
actionJustFired.current = true;
|
|
110
|
+
onRowAction === null || onRowAction === void 0 || onRowAction(key);
|
|
111
|
+
// Move DOM focus to the clicked row's <tr> so React Aria can handle arrow-key
|
|
112
|
+
// navigation from that row after a mouse click.
|
|
113
|
+
var rowEl = rowRefMap.current.get(key);
|
|
114
|
+
if (rowEl) {
|
|
115
|
+
rowEl.focus();
|
|
116
|
+
}
|
|
117
|
+
// Reset the guard after the current event loop tick so any FocusScope
|
|
118
|
+
// autoFocus steal (which fires synchronously) is absorbed, but subsequent
|
|
119
|
+
// genuine blur events (Tab away, click outside) are not.
|
|
120
|
+
(0, _setTimeout2["default"])(function () {
|
|
121
|
+
actionJustFired.current = false;
|
|
122
|
+
}, 0);
|
|
123
|
+
}, [onRowAction]);
|
|
124
|
+
|
|
125
|
+
// Called when any row receives focus. If the newly focused row is different
|
|
126
|
+
// from the active row (set by a click), clear activeRowKey so arrow-key
|
|
127
|
+
// navigation does not leave stale active-row highlights on multiple rows.
|
|
128
|
+
// Skip when actionJustFired is true — that focus event is the programmatic
|
|
129
|
+
// rowEl.focus() inside wrappedOnRowAction, not user navigation.
|
|
130
|
+
var handleRowFocus = (0, _react.useCallback)(function (key) {
|
|
131
|
+
if (actionJustFired.current) return;
|
|
132
|
+
setActiveRowKey(function (prev) {
|
|
133
|
+
return prev !== null && prev !== key ? null : prev;
|
|
134
|
+
});
|
|
135
|
+
}, []);
|
|
136
|
+
|
|
137
|
+
// Clear activeRowKey when focus leaves the table entirely.
|
|
138
|
+
// Skip the clear if a row action just fired (e.g. OverlayPanel FocusScope
|
|
139
|
+
// autoFocus stealing focus) — that is not a genuine focus-out.
|
|
140
|
+
var handleTableBlur = (0, _react.useCallback)(function (e) {
|
|
141
|
+
if (actionJustFired.current) {
|
|
142
|
+
actionJustFired.current = false;
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
var relatedTarget = e.relatedTarget;
|
|
146
|
+
var scrollEl = scrollRef.current;
|
|
147
|
+
var focusMovedOutside = !relatedTarget || !scrollEl || !scrollEl.contains(relatedTarget);
|
|
148
|
+
if (focusMovedOutside) {
|
|
149
|
+
setActiveRowKey(null);
|
|
150
|
+
}
|
|
151
|
+
}, []);
|
|
81
152
|
var state = (0, _table2.useTableState)(_objectSpread(_objectSpread({}, props), {}, {
|
|
82
153
|
showSelectionCheckboxes: hasSelectionCheckboxes || selectionMode === 'multiple' && selectionBehavior !== 'replace'
|
|
83
154
|
}));
|
|
84
155
|
var collection = state.collection;
|
|
85
156
|
var _useTable = (0, _table.useTable)(_objectSpread(_objectSpread({}, props), {}, {
|
|
86
|
-
scrollRef: scrollRef
|
|
157
|
+
scrollRef: scrollRef,
|
|
158
|
+
onRowAction: onRowAction ? wrappedOnRowAction : undefined
|
|
87
159
|
}), state, tableRef),
|
|
88
160
|
gridProps = _useTable.gridProps;
|
|
89
161
|
var getDefaultWidth = (0, _react.useCallback)(function (node) {
|
|
@@ -120,7 +192,8 @@ var TableBase = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
|
120
192
|
}),
|
|
121
193
|
classNames = _useStatusClasses.classNames;
|
|
122
194
|
return (0, _react2.jsx)(_.Box, {
|
|
123
|
-
ref: scrollRef
|
|
195
|
+
ref: scrollRef,
|
|
196
|
+
onBlur: handleTableBlur
|
|
124
197
|
}, (0, _react2.jsx)(_.Box, (0, _extends2["default"])({
|
|
125
198
|
as: "table",
|
|
126
199
|
display: "table",
|
|
@@ -133,13 +206,13 @@ var TableBase = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
|
133
206
|
ref: headerRef,
|
|
134
207
|
type: "thead",
|
|
135
208
|
isSticky: isStickyHeader
|
|
136
|
-
}, (0,
|
|
209
|
+
}, (0, _map2["default"])(_context = collection.headerRows).call(_context, function (headerRow) {
|
|
137
210
|
var _context2;
|
|
138
211
|
return (0, _react2.jsx)(TableHeaderRow, {
|
|
139
212
|
key: headerRow.key,
|
|
140
213
|
item: headerRow,
|
|
141
214
|
state: state
|
|
142
|
-
}, (0,
|
|
215
|
+
}, (0, _map2["default"])(_context2 = (0, _from["default"])(headerRow.childNodes)).call(_context2, function (column) {
|
|
143
216
|
return column.props.isSelectionCell ? (0, _react2.jsx)(TableSelectAllCell, {
|
|
144
217
|
key: column.key,
|
|
145
218
|
column: column,
|
|
@@ -169,14 +242,18 @@ var TableBase = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
|
169
242
|
py: "md"
|
|
170
243
|
}, (0, _react2.jsx)(_.Loader, {
|
|
171
244
|
variant: "loader.withinDataTable"
|
|
172
|
-
})), (0,
|
|
245
|
+
})), (0, _map2["default"])(_context3 = (0, _from["default"])(collection.body.childNodes)).call(_context3, function (row) {
|
|
173
246
|
var _context4, _collection$getChildr, _collection$getChildr2;
|
|
174
247
|
return (0, _react2.jsx)(TableRow, {
|
|
175
248
|
key: row.key,
|
|
176
249
|
item: row,
|
|
177
250
|
state: state,
|
|
178
|
-
hasSelectionCheckboxes: hasSelectionCheckboxes
|
|
179
|
-
|
|
251
|
+
hasSelectionCheckboxes: hasSelectionCheckboxes,
|
|
252
|
+
hasActions: !!onRowAction,
|
|
253
|
+
isActiveRow: row.key === activeRowKey,
|
|
254
|
+
registerRef: registerRowRef,
|
|
255
|
+
onRowFocus: handleRowFocus
|
|
256
|
+
}, (0, _map2["default"])(_context4 = (0, _from["default"])((_collection$getChildr = (_collection$getChildr2 = collection.getChildren) === null || _collection$getChildr2 === void 0 ? void 0 : _collection$getChildr2.call(collection, row.key)) !== null && _collection$getChildr !== void 0 ? _collection$getChildr : [])).call(_context4, function (cell) {
|
|
180
257
|
return cell.props.isSelectionCell ? (0, _react2.jsx)(TableCheckboxCell, {
|
|
181
258
|
key: cell.key,
|
|
182
259
|
cell: cell,
|
|
@@ -186,7 +263,8 @@ var TableBase = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
|
186
263
|
key: cell.key,
|
|
187
264
|
cell: cell,
|
|
188
265
|
state: state,
|
|
189
|
-
layoutState: layoutState
|
|
266
|
+
layoutState: layoutState,
|
|
267
|
+
hasActions: !!onRowAction
|
|
190
268
|
});
|
|
191
269
|
}));
|
|
192
270
|
}))));
|
|
@@ -354,8 +432,18 @@ function TableRow(props) {
|
|
|
354
432
|
state = props.state,
|
|
355
433
|
children = props.children,
|
|
356
434
|
className = props.className,
|
|
357
|
-
hasSelectionCheckboxes = props.hasSelectionCheckboxes
|
|
435
|
+
hasSelectionCheckboxes = props.hasSelectionCheckboxes,
|
|
436
|
+
hasActions = props.hasActions,
|
|
437
|
+
isActiveRow = props.isActiveRow,
|
|
438
|
+
registerRef = props.registerRef,
|
|
439
|
+
onRowFocus = props.onRowFocus;
|
|
358
440
|
var ref = (0, _react.useRef)(null);
|
|
441
|
+
|
|
442
|
+
// Register this row's DOM element so wrappedOnRowAction can focus it programmatically.
|
|
443
|
+
var setRef = (0, _react.useCallback)(function (el) {
|
|
444
|
+
ref.current = el;
|
|
445
|
+
registerRef === null || registerRef === void 0 || registerRef(item.key, el);
|
|
446
|
+
}, [item.key, registerRef]);
|
|
359
447
|
var _useTableRow = (0, _table.useTableRow)({
|
|
360
448
|
node: item
|
|
361
449
|
}, state, ref),
|
|
@@ -390,12 +478,18 @@ function TableRow(props) {
|
|
|
390
478
|
e.preventDefault();
|
|
391
479
|
state.selectionManager.toggleSelection(item.key);
|
|
392
480
|
}, [isDisabled, item.key, state.selectionManager]);
|
|
481
|
+
var rowFocusProps = (0, _react.useCallback)(function (e) {
|
|
482
|
+
if (e.currentTarget === e.target) {
|
|
483
|
+
onRowFocus === null || onRowFocus === void 0 || onRowFocus(item.key);
|
|
484
|
+
}
|
|
485
|
+
}, [item.key, onRowFocus]);
|
|
393
486
|
var _useStatusClasses5 = (0, _hooks.useStatusClasses)(className, {
|
|
394
487
|
isSelected: isSelected,
|
|
395
488
|
isHovered: isHovered,
|
|
396
489
|
isPressed: isPressed,
|
|
397
|
-
isFocused: isFocusVisible,
|
|
398
|
-
isDisabled: isDisabled
|
|
490
|
+
isFocused: isFocusVisible || !!isActiveRow,
|
|
491
|
+
isDisabled: isDisabled,
|
|
492
|
+
'has-actions': hasActions
|
|
399
493
|
}),
|
|
400
494
|
classNames = _useStatusClasses5.classNames;
|
|
401
495
|
return (0, _react2.jsx)(_.Box, (0, _extends2["default"])({
|
|
@@ -404,16 +498,18 @@ function TableRow(props) {
|
|
|
404
498
|
className: classNames,
|
|
405
499
|
variant: "tableBase.row"
|
|
406
500
|
}, (0, _utils.mergeProps)(rowProps, focusProps, hoverProps, pressProps, {
|
|
407
|
-
onKeyDown: enterKeyProps
|
|
501
|
+
onKeyDown: enterKeyProps,
|
|
502
|
+
onFocus: rowFocusProps
|
|
408
503
|
}), {
|
|
409
|
-
ref:
|
|
504
|
+
ref: setRef
|
|
410
505
|
}), children);
|
|
411
506
|
}
|
|
412
507
|
function TableCell(props) {
|
|
413
508
|
var cell = props.cell,
|
|
414
509
|
state = props.state,
|
|
415
510
|
className = props.className,
|
|
416
|
-
layoutState = props.layoutState
|
|
511
|
+
layoutState = props.layoutState,
|
|
512
|
+
hasActions = props.hasActions;
|
|
417
513
|
var ref = (0, _react.useRef)(null);
|
|
418
514
|
var _useTableCell = (0, _table.useTableCell)({
|
|
419
515
|
node: cell
|
|
@@ -429,9 +525,15 @@ function TableCell(props) {
|
|
|
429
525
|
useHandleFocusRef(ref);
|
|
430
526
|
|
|
431
527
|
// Prevents pointer events reaching the row's press handler, allowing native text-selection drags.
|
|
528
|
+
// Skipped when the table has row actions so that clicks on cells bubble up
|
|
529
|
+
// and trigger onRowAction.
|
|
432
530
|
var stopPointerPropagation = (0, _react.useCallback)(function (e) {
|
|
433
531
|
e.stopPropagation();
|
|
434
532
|
}, []);
|
|
533
|
+
var pointerBlockers = hasActions ? {} : {
|
|
534
|
+
onPointerDown: stopPointerPropagation,
|
|
535
|
+
onMouseDown: stopPointerPropagation
|
|
536
|
+
};
|
|
435
537
|
return (0, _react2.jsx)(_.Box, (0, _extends2["default"])({
|
|
436
538
|
as: "td",
|
|
437
539
|
display: "table-cell",
|
|
@@ -441,10 +543,7 @@ function TableCell(props) {
|
|
|
441
543
|
sx: _objectSpread({
|
|
442
544
|
width: layoutState === null || layoutState === void 0 ? void 0 : layoutState.getColumnWidth(cell.column.key)
|
|
443
545
|
}, cell.props.sx)
|
|
444
|
-
}, (0, _utils.mergeProps)(
|
|
445
|
-
onPointerDown: stopPointerPropagation,
|
|
446
|
-
onMouseDown: stopPointerPropagation
|
|
447
|
-
}, gridCellProps, focusProps, cell.props)), cell.rendered);
|
|
546
|
+
}, (0, _utils.mergeProps)(pointerBlockers, gridCellProps, focusProps, cell.props)), cell.rendered);
|
|
448
547
|
}
|
|
449
548
|
|
|
450
549
|
// Native checkboxes only toggle on Space, not Enter. This handler makes Enter
|
|
@@ -17,13 +17,14 @@ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequ
|
|
|
17
17
|
_Object$defineProperty(exports, "__esModule", {
|
|
18
18
|
value: true
|
|
19
19
|
});
|
|
20
|
-
exports["default"] = exports.WithStickyHeader = exports.WithResizableColumns = exports.WithPagination = exports.WithMinMaxColumnWidth = exports.WithLastColumnSticky = exports.MultiSelection = exports.DynamicWithSorting = exports.Default = void 0;
|
|
20
|
+
exports["default"] = exports.WithStickyHeader = exports.WithResizableColumns = exports.WithPagination = exports.WithMinMaxColumnWidth = exports.WithLastColumnSticky = exports.RowActions = exports.MultiSelection = exports.DynamicWithSorting = exports.Default = void 0;
|
|
21
21
|
var _set = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/set"));
|
|
22
22
|
var _concat = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/concat"));
|
|
23
23
|
var _slice = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/slice"));
|
|
24
24
|
var _isNan = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/number/is-nan"));
|
|
25
25
|
var _parseFloat2 = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/parse-float"));
|
|
26
26
|
var _sort = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/sort"));
|
|
27
|
+
var _find = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/find"));
|
|
27
28
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/asyncToGenerator"));
|
|
28
29
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/slicedToArray"));
|
|
29
30
|
var _react = _interopRequireWildcard(require("react"));
|
|
@@ -469,4 +470,76 @@ var WithLastColumnSticky = exports.WithLastColumnSticky = function WithLastColum
|
|
|
469
470
|
return (0, _react2.jsx)(_.Cell, null, item[columnKey]);
|
|
470
471
|
});
|
|
471
472
|
})));
|
|
473
|
+
};
|
|
474
|
+
var RowActions = exports.RowActions = function RowActions() {
|
|
475
|
+
var _useState3 = (0, _react.useState)(null),
|
|
476
|
+
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
|
|
477
|
+
selectedKey = _useState4[0],
|
|
478
|
+
setSelectedKey = _useState4[1];
|
|
479
|
+
var _useOverlayPanelState = (0, _hooks.useOverlayPanelState)(),
|
|
480
|
+
panelState = _useOverlayPanelState.state,
|
|
481
|
+
onClose = _useOverlayPanelState.onClose;
|
|
482
|
+
var panelTriggerRef = (0, _react.useRef)(null);
|
|
483
|
+
var triggerRefAsButton = panelTriggerRef;
|
|
484
|
+
var selectedObject = (0, _find["default"])(objects).call(objects, function (obj) {
|
|
485
|
+
return String(obj.id) === String(selectedKey);
|
|
486
|
+
});
|
|
487
|
+
var handleClose = function handleClose() {
|
|
488
|
+
onClose(panelState, triggerRefAsButton);
|
|
489
|
+
};
|
|
490
|
+
return (0, _react2.jsx)(_.OverlayProvider, null, (0, _react2.jsx)(_.Card, {
|
|
491
|
+
variant: "cards.tableWrapper"
|
|
492
|
+
}, (0, _react2.jsx)(_.TableBase, {
|
|
493
|
+
"aria-label": "Row actions table",
|
|
494
|
+
selectionMode: "none",
|
|
495
|
+
onRowAction: function onRowAction(key) {
|
|
496
|
+
setSelectedKey(key);
|
|
497
|
+
panelState.open();
|
|
498
|
+
},
|
|
499
|
+
ref: panelTriggerRef
|
|
500
|
+
}, (0, _react2.jsx)(_.THead, {
|
|
501
|
+
columns: headers
|
|
502
|
+
}, function (column) {
|
|
503
|
+
return (0, _react2.jsx)(_.Column, {
|
|
504
|
+
key: column.key,
|
|
505
|
+
minWidth: 200
|
|
506
|
+
}, column.name);
|
|
507
|
+
}), (0, _react2.jsx)(_.TBody, {
|
|
508
|
+
items: objects
|
|
509
|
+
}, function (item) {
|
|
510
|
+
return (0, _react2.jsx)(_.Row, {
|
|
511
|
+
key: item.id
|
|
512
|
+
}, function (columnKey) {
|
|
513
|
+
return (0, _react2.jsx)(_.Cell, null, item[columnKey]);
|
|
514
|
+
});
|
|
515
|
+
}))), (panelState.isOpen || panelState.isTransitioning) && (0, _react2.jsx)(_.OverlayPanel, {
|
|
516
|
+
isOpen: panelState.isOpen,
|
|
517
|
+
isTransitioning: panelState.isTransitioning,
|
|
518
|
+
state: panelState,
|
|
519
|
+
triggerRef: triggerRefAsButton,
|
|
520
|
+
sx: {
|
|
521
|
+
p: 0
|
|
522
|
+
}
|
|
523
|
+
}, (0, _react2.jsx)(_.PanelHeader, {
|
|
524
|
+
data: {
|
|
525
|
+
text: selectedObject ? selectedObject.type : '',
|
|
526
|
+
subtext: selectedObject ? selectedObject.date : ''
|
|
527
|
+
}
|
|
528
|
+
}, (0, _react2.jsx)(_.PanelHeaderCloseButton, {
|
|
529
|
+
onPress: handleClose
|
|
530
|
+
})), selectedObject && (0, _react2.jsx)(_.Box, {
|
|
531
|
+
sx: {
|
|
532
|
+
p: 'lg'
|
|
533
|
+
}
|
|
534
|
+
}, (0, _react2.jsx)(_.Text, null, "Type: ".concat(selectedObject.type)), (0, _react2.jsx)(_.Text, null, "Date: ".concat(selectedObject.date)), (0, _react2.jsx)(_.Text, null, "Additional Grant: ".concat(selectedObject.additional_grant)), (0, _react2.jsx)(_.Text, null, "Total Grant: ".concat(selectedObject.total_grant)))));
|
|
535
|
+
};
|
|
536
|
+
RowActions.parameters = {
|
|
537
|
+
a11y: {
|
|
538
|
+
config: {
|
|
539
|
+
rules: [{
|
|
540
|
+
id: 'color-contrast',
|
|
541
|
+
enabled: false
|
|
542
|
+
}]
|
|
543
|
+
}
|
|
544
|
+
}
|
|
472
545
|
};
|