@pingux/astro 2.32.0-alpha.9 → 2.32.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/TreeView/TreeView.js +99 -11
- package/lib/cjs/components/TreeView/TreeView.stories.js +23 -10
- package/lib/cjs/components/TreeView/TreeView.styles.js +22 -2
- package/lib/cjs/components/TreeView/TreeView.test.js +91 -11
- package/lib/cjs/components/TreeView/TreeViewItem.js +112 -14
- package/lib/cjs/components/TreeView/TreeViewKeyboardDelegate.js +200 -0
- package/lib/cjs/components/TreeView/TreeViewKeyboardDelegate.test.js +511 -0
- package/lib/cjs/components/TreeView/TreeViewRow.js +20 -5
- package/lib/cjs/components/TreeView/TreeViewSection.js +164 -16
- package/lib/cjs/components/TreeView/TreeViewWrapper.js +40 -0
- package/lib/cjs/hooks/useField/index.d.ts +1 -0
- package/lib/cjs/hooks/useField/useField.d.ts +1686 -0
- package/lib/cjs/hooks/useField/useField.js +7 -16
- package/lib/cjs/hooks/useField/useField.test.d.ts +1 -0
- package/lib/cjs/hooks/useField/useField.test.js +6 -6
- package/lib/cjs/hooks/useMountTransition/index.d.ts +1 -0
- package/lib/cjs/hooks/useMountTransition/useMountTransition.d.ts +14 -0
- package/lib/cjs/hooks/useMountTransition/useMountTransition.js +0 -9
- package/lib/cjs/hooks/useMountTransition/useMountTransition.test.d.ts +1 -0
- package/lib/cjs/hooks/useMountTransition/useMountTransition.test.js +2 -2
- package/lib/cjs/hooks/useStatusClasses/index.d.ts +1 -0
- package/lib/cjs/hooks/useStatusClasses/useStatusClasses.d.ts +18 -0
- package/lib/cjs/hooks/useStatusClasses/useStatusClasses.js +0 -9
- package/lib/cjs/hooks/useStatusClasses/useStatusClasses.test.d.ts +1 -0
- package/lib/components/TreeView/TreeView.js +100 -12
- package/lib/components/TreeView/TreeView.stories.js +23 -10
- package/lib/components/TreeView/TreeView.styles.js +22 -2
- package/lib/components/TreeView/TreeView.test.js +92 -12
- package/lib/components/TreeView/TreeViewItem.js +111 -14
- package/lib/components/TreeView/TreeViewKeyboardDelegate.js +176 -0
- package/lib/components/TreeView/TreeViewKeyboardDelegate.test.js +496 -0
- package/lib/components/TreeView/TreeViewRow.js +20 -5
- package/lib/components/TreeView/TreeViewSection.js +161 -16
- package/lib/components/TreeView/TreeViewWrapper.js +31 -0
- package/lib/hooks/useField/useField.js +7 -16
- package/lib/hooks/useField/useField.test.js +6 -6
- package/lib/hooks/useMountTransition/useMountTransition.js +0 -10
- package/lib/hooks/useMountTransition/useMountTransition.test.js +2 -2
- package/lib/hooks/useStatusClasses/useStatusClasses.js +0 -10
- package/package.json +1 -1
@@ -0,0 +1,496 @@
|
|
1
|
+
import _extends from "@babel/runtime-corejs3/helpers/esm/extends";
|
2
|
+
import _concatInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/concat";
|
3
|
+
import React, { useRef } from 'react';
|
4
|
+
import PropTypes from 'prop-types';
|
5
|
+
import { isIterableProp } from '../../utils/devUtils/props/isIterable';
|
6
|
+
import { fireEvent, render, screen } from '../../utils/testUtils/testWrapper';
|
7
|
+
import { onKeyDownItem } from './TreeViewItem';
|
8
|
+
import { onLeftPress } from './TreeViewKeyboardDelegate';
|
9
|
+
import { onKeyDownSection } from './TreeViewSection';
|
10
|
+
import { jsx as ___EmotionJSX } from "@emotion/react";
|
11
|
+
var testId = 'test-keyboard-tree';
|
12
|
+
var toggleKey = jest.fn();
|
13
|
+
var setSelectedKeys = jest.fn();
|
14
|
+
var focusPrevious = jest.fn();
|
15
|
+
var focusNext = jest.fn();
|
16
|
+
var refFocus = jest.fn();
|
17
|
+
var state = {
|
18
|
+
toggleKey: toggleKey
|
19
|
+
};
|
20
|
+
var tree = {
|
21
|
+
setSelectedKeys: setSelectedKeys
|
22
|
+
};
|
23
|
+
var focusManager = {
|
24
|
+
focusPrevious: focusPrevious,
|
25
|
+
focusNext: focusNext
|
26
|
+
};
|
27
|
+
export var refArray = [{
|
28
|
+
key: 'testprior',
|
29
|
+
thisRef: {
|
30
|
+
current: {
|
31
|
+
focus: refFocus
|
32
|
+
}
|
33
|
+
}
|
34
|
+
}, {
|
35
|
+
key: 'test',
|
36
|
+
thisRef: {
|
37
|
+
current: {
|
38
|
+
focus: refFocus
|
39
|
+
}
|
40
|
+
}
|
41
|
+
}, {
|
42
|
+
key: 'testsecond',
|
43
|
+
thisRef: {
|
44
|
+
current: {
|
45
|
+
focus: refFocus
|
46
|
+
}
|
47
|
+
}
|
48
|
+
}];
|
49
|
+
export var flatKeyArray = [{
|
50
|
+
key: 'testprior'
|
51
|
+
}, {
|
52
|
+
key: 'test'
|
53
|
+
}, {
|
54
|
+
key: 'testsecond'
|
55
|
+
}];
|
56
|
+
var defaultProps = {
|
57
|
+
'data-testid': testId,
|
58
|
+
focusManager: focusManager,
|
59
|
+
state: state,
|
60
|
+
tree: tree,
|
61
|
+
key: 'test',
|
62
|
+
flatKeyArray: flatKeyArray,
|
63
|
+
refArray: refArray
|
64
|
+
};
|
65
|
+
var TestComponent = function TestComponent(props) {
|
66
|
+
var focusManagerProp = props.focusManager,
|
67
|
+
stateProp = props.state,
|
68
|
+
treeProp = props.tree,
|
69
|
+
isSelected = props.isSelected,
|
70
|
+
isExpanded = props.isExpanded,
|
71
|
+
_props$isInRefArray = props.isInRefArray,
|
72
|
+
isInRefArray = _props$isInRefArray === void 0 ? true : _props$isInRefArray,
|
73
|
+
flatKeyArrayProp = props.flatKeyArray,
|
74
|
+
refArrayProp = props.refArray;
|
75
|
+
var thisRef = useRef(null);
|
76
|
+
var testOnKeyDown = function testOnKeyDown(e) {
|
77
|
+
props.onKeyDown(e, stateProp, 'test', treeProp, isSelected, isExpanded, focusManagerProp, flatKeyArrayProp, refArrayProp, 5, true);
|
78
|
+
};
|
79
|
+
var testOnKeyDownAddRef = function testOnKeyDownAddRef(e) {
|
80
|
+
var _context;
|
81
|
+
props.onKeyDown(e, stateProp, 'test', treeProp, isSelected, isExpanded, focusManagerProp, flatKeyArrayProp, _concatInstanceProperty(_context = []).call(_context, refArrayProp, [{
|
82
|
+
key: 'button',
|
83
|
+
thisRef: thisRef
|
84
|
+
}]), 5, true);
|
85
|
+
};
|
86
|
+
return ___EmotionJSX("div", null, ___EmotionJSX("button", {
|
87
|
+
ref: thisRef,
|
88
|
+
onKeyDown: function onKeyDown(e) {
|
89
|
+
return isInRefArray ? testOnKeyDownAddRef(e) : testOnKeyDown(e);
|
90
|
+
}
|
91
|
+
}, "let us test keypresses"));
|
92
|
+
};
|
93
|
+
TestComponent.propTypes = {
|
94
|
+
isInRefArray: PropTypes.bool,
|
95
|
+
isEventTargetAKey: PropTypes.bool,
|
96
|
+
state: PropTypes.shape({
|
97
|
+
toggleKey: PropTypes.func
|
98
|
+
}),
|
99
|
+
tree: PropTypes.shape({
|
100
|
+
setSelectedKeys: PropTypes.func
|
101
|
+
}),
|
102
|
+
focusManager: PropTypes.shape({
|
103
|
+
focusPrevious: PropTypes.func,
|
104
|
+
focusNext: PropTypes.func
|
105
|
+
}),
|
106
|
+
isExpanded: PropTypes.bool,
|
107
|
+
isSelected: PropTypes.bool,
|
108
|
+
onKeyDown: PropTypes.func,
|
109
|
+
flatKeyArray: isIterableProp,
|
110
|
+
refArray: isIterableProp
|
111
|
+
};
|
112
|
+
var getComponent = function getComponent() {
|
113
|
+
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
114
|
+
return render(___EmotionJSX(TestComponent, _extends({}, defaultProps, props)));
|
115
|
+
};
|
116
|
+
afterEach(function () {
|
117
|
+
jest.clearAllMocks();
|
118
|
+
});
|
119
|
+
afterAll(function () {
|
120
|
+
jest.restoreAllMocks();
|
121
|
+
});
|
122
|
+
test('OnEnterPress calls when enter is pressed', function () {
|
123
|
+
getComponent({
|
124
|
+
onKeyDown: onKeyDownSection
|
125
|
+
});
|
126
|
+
var button = screen.getByRole('button');
|
127
|
+
fireEvent.keyDown(button, {
|
128
|
+
key: 'Enter',
|
129
|
+
keyCode: 13
|
130
|
+
});
|
131
|
+
fireEvent.keyUp(button, {
|
132
|
+
key: 'Enter',
|
133
|
+
keyCode: 13
|
134
|
+
});
|
135
|
+
expect(toggleKey).toHaveBeenCalled();
|
136
|
+
});
|
137
|
+
test('onSpacePress calls when space is pressed', function () {
|
138
|
+
getComponent({
|
139
|
+
onKeyDown: onKeyDownSection
|
140
|
+
});
|
141
|
+
var button = screen.getByRole('button');
|
142
|
+
fireEvent.keyDown(button, {
|
143
|
+
key: 'Space',
|
144
|
+
keyCode: 32
|
145
|
+
});
|
146
|
+
fireEvent.keyUp(button, {
|
147
|
+
key: 'Space',
|
148
|
+
keyCode: 32
|
149
|
+
});
|
150
|
+
expect(setSelectedKeys).toHaveBeenCalled();
|
151
|
+
});
|
152
|
+
test('onSpacePress calls when space is pressed, and selected', function () {
|
153
|
+
getComponent({
|
154
|
+
onKeyDown: onKeyDownSection,
|
155
|
+
isSelected: true
|
156
|
+
});
|
157
|
+
var button = screen.getByRole('button');
|
158
|
+
fireEvent.keyDown(button, {
|
159
|
+
key: 'Space',
|
160
|
+
keyCode: 32
|
161
|
+
});
|
162
|
+
fireEvent.keyUp(button, {
|
163
|
+
key: 'Space',
|
164
|
+
keyCode: 32
|
165
|
+
});
|
166
|
+
expect(setSelectedKeys).toHaveBeenCalled();
|
167
|
+
});
|
168
|
+
test('onSpacePress calls when space is pressed, item', function () {
|
169
|
+
getComponent({
|
170
|
+
onKeyDown: onKeyDownItem,
|
171
|
+
isInRefArray: false
|
172
|
+
});
|
173
|
+
var button = screen.getByRole('button');
|
174
|
+
fireEvent.keyDown(button, {
|
175
|
+
key: 'Space',
|
176
|
+
keyCode: 32
|
177
|
+
});
|
178
|
+
fireEvent.keyUp(button, {
|
179
|
+
key: 'Space',
|
180
|
+
keyCode: 32
|
181
|
+
});
|
182
|
+
expect(setSelectedKeys).toHaveBeenCalled();
|
183
|
+
});
|
184
|
+
test('onLeftPress calls when Left Arrow is pressed and expanded', function () {
|
185
|
+
getComponent({
|
186
|
+
isExpanded: true,
|
187
|
+
onKeyDown: onKeyDownSection,
|
188
|
+
isInRefArray: false
|
189
|
+
});
|
190
|
+
var button = screen.getByRole('button');
|
191
|
+
fireEvent.keyDown(button, {
|
192
|
+
key: 'ArrowLeft',
|
193
|
+
keyCode: 37
|
194
|
+
});
|
195
|
+
fireEvent.keyUp(button, {
|
196
|
+
key: 'ArrowLeft',
|
197
|
+
keyCode: 37
|
198
|
+
});
|
199
|
+
expect(toggleKey).not.toHaveBeenCalled();
|
200
|
+
expect(focusPrevious).toHaveBeenCalled();
|
201
|
+
});
|
202
|
+
test('onLeftPress does not call when Left Arrow is pressed and NOT expanded', function () {
|
203
|
+
getComponent({
|
204
|
+
onKeyDown: onKeyDownSection
|
205
|
+
});
|
206
|
+
var button = screen.getByRole('button');
|
207
|
+
fireEvent.keyDown(button, {
|
208
|
+
key: 'ArrowLeft',
|
209
|
+
keyCode: 37
|
210
|
+
});
|
211
|
+
fireEvent.keyUp(button, {
|
212
|
+
key: 'ArrowLeft',
|
213
|
+
keyCode: 37
|
214
|
+
});
|
215
|
+
expect(toggleKey).not.toHaveBeenCalled();
|
216
|
+
expect(focusPrevious).not.toHaveBeenCalled();
|
217
|
+
});
|
218
|
+
test('onRightPress calls when Right Arrow is pressed and NOT expanded', function () {
|
219
|
+
getComponent({
|
220
|
+
onKeyDown: onKeyDownSection,
|
221
|
+
isInRefArray: false
|
222
|
+
});
|
223
|
+
var button = screen.getByRole('button');
|
224
|
+
fireEvent.keyDown(button, {
|
225
|
+
key: 'ArrowRight',
|
226
|
+
keyCode: 39
|
227
|
+
});
|
228
|
+
fireEvent.keyUp(button, {
|
229
|
+
key: 'ArrowRight',
|
230
|
+
keyCode: 39
|
231
|
+
});
|
232
|
+
expect(toggleKey).toHaveBeenCalled();
|
233
|
+
expect(focusNext).not.toHaveBeenCalled();
|
234
|
+
});
|
235
|
+
test('onRightPress calls correct callback when Right Arrow is pressed and expanded', function () {
|
236
|
+
getComponent({
|
237
|
+
onKeyDown: onKeyDownSection,
|
238
|
+
isExpanded: true,
|
239
|
+
isInRefArray: false
|
240
|
+
});
|
241
|
+
var button = screen.getByRole('button');
|
242
|
+
fireEvent.keyDown(button, {
|
243
|
+
key: 'ArrowRight',
|
244
|
+
keyCode: 39
|
245
|
+
});
|
246
|
+
fireEvent.keyUp(button, {
|
247
|
+
key: 'ArrowRight',
|
248
|
+
keyCode: 39
|
249
|
+
});
|
250
|
+
expect(toggleKey).not.toHaveBeenCalled();
|
251
|
+
expect(focusNext).not.toHaveBeenCalled();
|
252
|
+
});
|
253
|
+
test('onLeftPress calls when Left Arrow is pressed and expanded', function () {
|
254
|
+
getComponent({
|
255
|
+
isExpanded: true,
|
256
|
+
onKeyDown: onKeyDownSection
|
257
|
+
});
|
258
|
+
var button = screen.getByRole('button');
|
259
|
+
fireEvent.keyDown(button, {
|
260
|
+
key: 'ArrowRight',
|
261
|
+
keyCode: 39
|
262
|
+
});
|
263
|
+
fireEvent.keyUp(button, {
|
264
|
+
key: 'ArrowRight',
|
265
|
+
keyCode: 39
|
266
|
+
});
|
267
|
+
expect(toggleKey).not.toHaveBeenCalled();
|
268
|
+
});
|
269
|
+
test('onDownPress calls when down Arrow is pressed and expanded', function () {
|
270
|
+
getComponent({
|
271
|
+
onKeyDown: onKeyDownSection
|
272
|
+
});
|
273
|
+
var button = screen.getByRole('button');
|
274
|
+
fireEvent.keyDown(button, {
|
275
|
+
key: 'ArrowDown',
|
276
|
+
keyCode: 40
|
277
|
+
});
|
278
|
+
fireEvent.keyUp(button, {
|
279
|
+
key: 'ArrowDown',
|
280
|
+
keyCode: 40
|
281
|
+
});
|
282
|
+
expect(refFocus).toHaveBeenCalled();
|
283
|
+
});
|
284
|
+
test('onUpPress calls when down Arrow is pressed and expanded', function () {
|
285
|
+
getComponent({
|
286
|
+
onKeyDown: onKeyDownSection
|
287
|
+
});
|
288
|
+
var button = screen.getByRole('button');
|
289
|
+
fireEvent.keyDown(button, {
|
290
|
+
key: 'ArrowUp',
|
291
|
+
keyCode: 38
|
292
|
+
});
|
293
|
+
fireEvent.keyUp(button, {
|
294
|
+
key: 'ArrowUp',
|
295
|
+
keyCode: 38
|
296
|
+
});
|
297
|
+
expect(refFocus).toHaveBeenCalled();
|
298
|
+
});
|
299
|
+
test('onUpPress calls when down Arrow is pressed and expanded for items', function () {
|
300
|
+
getComponent({
|
301
|
+
onKeyDown: onKeyDownItem
|
302
|
+
});
|
303
|
+
var button = screen.getByRole('button');
|
304
|
+
fireEvent.keyDown(button, {
|
305
|
+
key: 'ArrowUp',
|
306
|
+
keyCode: 38
|
307
|
+
});
|
308
|
+
fireEvent.keyUp(button, {
|
309
|
+
key: 'ArrowUp',
|
310
|
+
keyCode: 38
|
311
|
+
});
|
312
|
+
expect(refFocus).toHaveBeenCalled();
|
313
|
+
});
|
314
|
+
test('onPageUpPress calls when page up is pressed', function () {
|
315
|
+
getComponent({
|
316
|
+
onKeyDown: onKeyDownItem
|
317
|
+
});
|
318
|
+
var button = screen.getByRole('button');
|
319
|
+
fireEvent.keyDown(button, {
|
320
|
+
key: 'PageUp',
|
321
|
+
keyCode: 33
|
322
|
+
});
|
323
|
+
fireEvent.keyUp(button, {
|
324
|
+
key: 'PageUp',
|
325
|
+
keyCode: 33
|
326
|
+
});
|
327
|
+
expect(refFocus).toHaveBeenCalled();
|
328
|
+
});
|
329
|
+
test('onPageUpPress calls when page up is pressed, on section', function () {
|
330
|
+
getComponent({
|
331
|
+
onKeyDown: onKeyDownSection
|
332
|
+
});
|
333
|
+
var button = screen.getByRole('button');
|
334
|
+
fireEvent.keyDown(button, {
|
335
|
+
key: 'PageUp',
|
336
|
+
keyCode: 33
|
337
|
+
});
|
338
|
+
fireEvent.keyUp(button, {
|
339
|
+
key: 'PageUp',
|
340
|
+
keyCode: 33
|
341
|
+
});
|
342
|
+
expect(refFocus).toHaveBeenCalled();
|
343
|
+
});
|
344
|
+
test('onPageDownPress calls when page up is pressed', function () {
|
345
|
+
getComponent({
|
346
|
+
onKeyDown: onKeyDownItem
|
347
|
+
});
|
348
|
+
var button = screen.getByRole('button');
|
349
|
+
fireEvent.keyDown(button, {
|
350
|
+
key: 'PageDown',
|
351
|
+
keyCode: 34
|
352
|
+
});
|
353
|
+
fireEvent.keyUp(button, {
|
354
|
+
key: 'PageDown',
|
355
|
+
keyCode: 34
|
356
|
+
});
|
357
|
+
expect(refFocus).toHaveBeenCalled();
|
358
|
+
});
|
359
|
+
test('onPageDownPress calls when page up is pressed, on section', function () {
|
360
|
+
getComponent({
|
361
|
+
onKeyDown: onKeyDownSection
|
362
|
+
});
|
363
|
+
var button = screen.getByRole('button');
|
364
|
+
fireEvent.keyDown(button, {
|
365
|
+
key: 'PageDown',
|
366
|
+
keyCode: 34
|
367
|
+
});
|
368
|
+
fireEvent.keyUp(button, {
|
369
|
+
key: 'PageDown',
|
370
|
+
keyCode: 34
|
371
|
+
});
|
372
|
+
expect(refFocus).toHaveBeenCalled();
|
373
|
+
});
|
374
|
+
test('onDownPress calls when down Arrow is pressed and expanded, for items', function () {
|
375
|
+
getComponent({
|
376
|
+
onKeyDown: onKeyDownItem
|
377
|
+
});
|
378
|
+
var button = screen.getByRole('button');
|
379
|
+
fireEvent.keyDown(button, {
|
380
|
+
key: 'ArrowDown',
|
381
|
+
keyCode: 40
|
382
|
+
});
|
383
|
+
fireEvent.keyUp(button, {
|
384
|
+
key: 'ArrowDown',
|
385
|
+
keyCode: 40
|
386
|
+
});
|
387
|
+
expect(refFocus).toHaveBeenCalled();
|
388
|
+
});
|
389
|
+
test('onTabPress calls correct callbacks', function () {
|
390
|
+
getComponent({
|
391
|
+
onKeyDown: onKeyDownItem
|
392
|
+
});
|
393
|
+
var button = screen.getByRole('button');
|
394
|
+
fireEvent.keyDown(button, {
|
395
|
+
key: 'Tab',
|
396
|
+
keyCode: 9
|
397
|
+
});
|
398
|
+
fireEvent.keyUp(button, {
|
399
|
+
key: 'Tab',
|
400
|
+
keyCode: 9
|
401
|
+
});
|
402
|
+
expect(focusNext).not.toHaveBeenCalled();
|
403
|
+
});
|
404
|
+
test('onTabPress calls correct callbacks', function () {
|
405
|
+
getComponent({
|
406
|
+
onKeyDown: onKeyDownSection
|
407
|
+
});
|
408
|
+
var button = screen.getByRole('button');
|
409
|
+
fireEvent.keyDown(button, {
|
410
|
+
key: 'Tab',
|
411
|
+
keyCode: 9
|
412
|
+
});
|
413
|
+
fireEvent.keyUp(button, {
|
414
|
+
key: 'Tab',
|
415
|
+
keyCode: 9
|
416
|
+
});
|
417
|
+
expect(focusNext).toHaveBeenCalled();
|
418
|
+
});
|
419
|
+
test('onEndPress calls correct callbacks', function () {
|
420
|
+
getComponent({
|
421
|
+
onKeyDown: onKeyDownSection
|
422
|
+
});
|
423
|
+
var button = screen.getByRole('button');
|
424
|
+
fireEvent.keyDown(button, {
|
425
|
+
key: 'End',
|
426
|
+
keyCode: 35
|
427
|
+
});
|
428
|
+
fireEvent.keyUp(button, {
|
429
|
+
key: 'End',
|
430
|
+
keyCode: 35
|
431
|
+
});
|
432
|
+
expect(refFocus).toHaveBeenCalled();
|
433
|
+
});
|
434
|
+
test('onEndPress calls correct callbacks', function () {
|
435
|
+
getComponent({
|
436
|
+
onKeyDown: onKeyDownItem
|
437
|
+
});
|
438
|
+
var button = screen.getByRole('button');
|
439
|
+
fireEvent.keyDown(button, {
|
440
|
+
key: 'End',
|
441
|
+
keyCode: 35
|
442
|
+
});
|
443
|
+
fireEvent.keyUp(button, {
|
444
|
+
key: 'End',
|
445
|
+
keyCode: 35
|
446
|
+
});
|
447
|
+
expect(refFocus).toHaveBeenCalled();
|
448
|
+
});
|
449
|
+
test('onHomePress calls correct callbacks', function () {
|
450
|
+
getComponent({
|
451
|
+
onKeyDown: onKeyDownSection
|
452
|
+
});
|
453
|
+
var button = screen.getByRole('button');
|
454
|
+
fireEvent.keyDown(button, {
|
455
|
+
key: 'Home',
|
456
|
+
keyCode: 36
|
457
|
+
});
|
458
|
+
fireEvent.keyUp(button, {
|
459
|
+
key: 'Home',
|
460
|
+
keyCode: 36
|
461
|
+
});
|
462
|
+
expect(refFocus).toHaveBeenCalled();
|
463
|
+
});
|
464
|
+
test('onHomePress calls correct callbacks', function () {
|
465
|
+
getComponent({
|
466
|
+
onKeyDown: onKeyDownItem
|
467
|
+
});
|
468
|
+
var button = screen.getByRole('button');
|
469
|
+
fireEvent.keyDown(button, {
|
470
|
+
key: 'Home',
|
471
|
+
keyCode: 36
|
472
|
+
});
|
473
|
+
fireEvent.keyUp(button, {
|
474
|
+
key: 'Home',
|
475
|
+
keyCode: 36
|
476
|
+
});
|
477
|
+
expect(refFocus).toHaveBeenCalled();
|
478
|
+
});
|
479
|
+
test('onLeftPress calls correct callbacks, when correct props are provided', function () {
|
480
|
+
var thisRefArray = [{
|
481
|
+
thisRef: {
|
482
|
+
current: 'test target'
|
483
|
+
}
|
484
|
+
}];
|
485
|
+
var thisEvent = {
|
486
|
+
target: 'test target',
|
487
|
+
preventDefault: function preventDefault() {
|
488
|
+
return jest.fn();
|
489
|
+
},
|
490
|
+
stopPropagation: function stopPropagation() {
|
491
|
+
return jest.fn();
|
492
|
+
}
|
493
|
+
};
|
494
|
+
onLeftPress(thisEvent, focusManager, state, 'test', true, thisRefArray);
|
495
|
+
expect(toggleKey).toHaveBeenCalled();
|
496
|
+
});
|
@@ -9,7 +9,7 @@ import _Object$defineProperty from "@babel/runtime-corejs3/core-js-stable/object
|
|
9
9
|
import _extends from "@babel/runtime-corejs3/helpers/esm/extends";
|
10
10
|
import _defineProperty from "@babel/runtime-corejs3/helpers/esm/defineProperty";
|
11
11
|
import _objectWithoutProperties from "@babel/runtime-corejs3/helpers/esm/objectWithoutProperties";
|
12
|
-
var _excluded = ["title", "mainIcon", "lastIcon", "item", "items", "isExpanded", "isSelected", "isDisabled", "iconButtonProps"];
|
12
|
+
var _excluded = ["title", "mainIcon", "lastIcon", "item", "items", "isExpanded", "isSelected", "isDisabled", "isParentFocused", "iconButtonProps"];
|
13
13
|
function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = _filterInstanceProperty(symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
14
14
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var _context, _context2; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty(_context = ownKeys(Object(source), !0)).call(_context, function (key) { _defineProperty(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : _forEachInstanceProperty(_context2 = ownKeys(Object(source))).call(_context2, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
|
15
15
|
import React, { forwardRef, useImperativeHandle, useRef } from 'react';
|
@@ -35,6 +35,7 @@ var TreeViewRow = /*#__PURE__*/forwardRef(function (props, ref) {
|
|
35
35
|
isExpanded = props.isExpanded,
|
36
36
|
isSelected = props.isSelected,
|
37
37
|
isDisabled = props.isDisabled,
|
38
|
+
isParentFocused = props.isParentFocused,
|
38
39
|
iconButtonProps = props.iconButtonProps,
|
39
40
|
others = _objectWithoutProperties(props, _excluded);
|
40
41
|
var treeRowRef = useRef();
|
@@ -73,13 +74,19 @@ var TreeViewRow = /*#__PURE__*/forwardRef(function (props, ref) {
|
|
73
74
|
}),
|
74
75
|
classNames = _useStatusClasses.classNames;
|
75
76
|
var mergedProps = mergeProps(hoverProps, pressProps, others);
|
77
|
+
|
78
|
+
// console.log(`ROW: ${key} has parent focus: ${isParentFocused}`)
|
79
|
+
|
76
80
|
return ___EmotionJSX(Box, _extends({
|
77
81
|
ref: treeRowRef,
|
78
82
|
isRow: true,
|
79
83
|
alignItems: "center",
|
80
84
|
gap: "xs",
|
81
85
|
sx: {
|
82
|
-
flexGrow: 1
|
86
|
+
flexGrow: 1,
|
87
|
+
'& :focus': {
|
88
|
+
border: 'none'
|
89
|
+
}
|
83
90
|
},
|
84
91
|
className: classNames,
|
85
92
|
key: "".concat(key, " box")
|
@@ -92,15 +99,22 @@ var TreeViewRow = /*#__PURE__*/forwardRef(function (props, ref) {
|
|
92
99
|
size: 25,
|
93
100
|
title: "".concat(title, " expand or collapse button")
|
94
101
|
},
|
95
|
-
buttonProps: {
|
102
|
+
buttonProps: _objectSpread(_objectSpread({
|
96
103
|
'aria-label': "".concat(title, " expand or collapse button")
|
97
|
-
}
|
104
|
+
}, isParentFocused && {
|
105
|
+
tabIndex: 0
|
106
|
+
}), !isParentFocused && {
|
107
|
+
tabIndex: -1
|
108
|
+
})
|
98
109
|
}), ___EmotionJSX(Box, {
|
99
110
|
isRow: true,
|
100
111
|
className: classNames,
|
101
112
|
alignItems: "center",
|
102
113
|
gap: "xs",
|
103
|
-
variant: "treeView.treeRow"
|
114
|
+
variant: "treeView.treeRow",
|
115
|
+
sx: !items && {
|
116
|
+
ml: '36px'
|
117
|
+
}
|
104
118
|
}, ___EmotionJSX(Icon, {
|
105
119
|
color: "focus",
|
106
120
|
icon: mainIcon,
|
@@ -121,6 +135,7 @@ TreeViewRow.propTypes = {
|
|
121
135
|
isSelected: PropTypes.bool,
|
122
136
|
isDisabled: PropTypes.bool,
|
123
137
|
isExpanded: PropTypes.bool,
|
138
|
+
isParentFocused: PropTypes.bool,
|
124
139
|
title: PropTypes.string,
|
125
140
|
items: PropTypes.arrayOf(PropTypes.shape({})),
|
126
141
|
iconButtonProps: PropTypes.shape({
|