@planningcenter/tapestry-react 2.7.0 → 2.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/Button/Button.js +10 -13
- package/dist/cjs/Button/Button.test.js +53 -21
- package/dist/cjs/Calendar/Calendar.js +30 -25
- package/dist/cjs/Combobox/ComboboxInput.js +41 -37
- package/dist/cjs/DateField/DateField.js +78 -47
- package/dist/cjs/DateField/parse.js +106 -0
- package/dist/cjs/DateField/parse.test.js +46 -0
- package/dist/cjs/DateField/useArrowKeysToNavigateCalendar.js +44 -0
- package/dist/cjs/DateField/useEditableDate.js +72 -0
- package/dist/cjs/Select/Select.test.js +74 -0
- package/dist/esm/Button/Button.js +10 -13
- package/dist/esm/Button/Button.test.js +58 -26
- package/dist/esm/Calendar/Calendar.js +30 -25
- package/dist/esm/Combobox/ComboboxInput.js +40 -37
- package/dist/esm/DateField/DateField.js +79 -48
- package/dist/esm/DateField/parse.js +93 -0
- package/dist/esm/DateField/parse.test.js +42 -0
- package/dist/esm/DateField/useArrowKeysToNavigateCalendar.js +36 -0
- package/dist/esm/DateField/useEditableDate.js +62 -0
- package/dist/esm/Select/Select.test.js +59 -0
- package/dist/types/Button/Button.d.ts +1 -1
- package/dist/types/DateField/DateField.d.ts +48 -0
- package/dist/types/DateField/parse.d.ts +17 -0
- package/dist/types/DateField/parse.test.d.ts +1 -0
- package/dist/types/DateField/useArrowKeysToNavigateCalendar.d.ts +8 -0
- package/dist/types/DateField/useEditableDate.d.ts +25 -0
- package/dist/types/Select/Select.test.d.ts +1 -0
- package/package.json +3 -3
- package/src/Button/Button.test.tsx +32 -8
- package/src/Button/Button.tsx +8 -9
- package/src/Calendar/Calendar.js +22 -17
- package/src/Combobox/ComboboxInput.js +76 -62
- package/src/DateField/DateField.mdx +15 -0
- package/src/DateField/{DateField.js → DateField.tsx} +104 -52
- package/src/DateField/parse.test.ts +76 -0
- package/src/DateField/parse.ts +92 -0
- package/src/DateField/useArrowKeysToNavigateCalendar.ts +54 -0
- package/src/DateField/useEditableDate.ts +81 -0
- package/src/Select/Select.test.tsx +58 -0
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _dateFns = require("date-fns");
|
|
4
|
+
|
|
5
|
+
var _parse = require("./parse");
|
|
6
|
+
|
|
7
|
+
describe('isValidDate', function () {
|
|
8
|
+
var validDates = ['jun 6, 2022', 'June-06-2022', '6-6-2022', '6/6/2022', '06-06-2022', '2022-06-26', // year, month, day
|
|
9
|
+
'2022/6/1' // year, month, day
|
|
10
|
+
];
|
|
11
|
+
validDates.forEach(function (date) {
|
|
12
|
+
it("returns true for \"" + date + "\"", function () {
|
|
13
|
+
expect((0, _parse.isValidDate)(date)).toBe(true);
|
|
14
|
+
});
|
|
15
|
+
});
|
|
16
|
+
var invalidDates = ['June-06-22', '13-6-2022', 'June 6 2022', '2022/6/1/1', '2022-15-06'];
|
|
17
|
+
invalidDates.forEach(function (date) {
|
|
18
|
+
it("returns false for \"" + date + "\"", function () {
|
|
19
|
+
expect((0, _parse.isValidDate)(date)).toBe(false);
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
describe('parseDate', function () {
|
|
24
|
+
var dates = [['January 31, 2022', 'January 31, 2022'], ['jun 9, 2022', 'June 09, 2022'], ['June-09-2022', 'June 09, 2022'], ['6-9-2022', 'June 09, 2022'], ['6/9/2022', 'June 09, 2022'], ['06-09-2022', 'June 09, 2022'], ['2022-06-26', 'June 26, 2022'], ['2022/6/1', 'June 01, 2022', 'MMMM dd, yyyy'], ['15/6/2022', 'June 15, 2022', 'dd/MM/YYYY'], ['1/6/2022', 'June 01, 2022', 'dd MMMM, yyyy'], ['15-aug-2023', 'August 15, 2023', 'dd MMMM, yyyy'], ['15 August, 2023', 'August 15, 2023', 'dd MMMM, yyyy']];
|
|
25
|
+
dates.forEach(function (_ref) {
|
|
26
|
+
var date = _ref[0],
|
|
27
|
+
expected = _ref[1],
|
|
28
|
+
dateFormat = _ref[2];
|
|
29
|
+
it("returns " + expected + " for \"" + date + "\"", function () {
|
|
30
|
+
expect((0, _dateFns.format)((0, _parse.parseDate)({
|
|
31
|
+
date: date,
|
|
32
|
+
format: dateFormat
|
|
33
|
+
}), 'MMMM dd, yyyy')).toEqual(expected);
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
describe('parseMonth', function () {
|
|
38
|
+
var months = [['jan', 1], ['feb', 2], ['December', 12], ['2', 2], ['12', 12], ['05', 5]];
|
|
39
|
+
months.forEach(function (_ref2) {
|
|
40
|
+
var month = _ref2[0],
|
|
41
|
+
expected = _ref2[1];
|
|
42
|
+
it("returns " + expected + " for \"" + month + "\"", function () {
|
|
43
|
+
expect((0, _parse.parseMonth)(month)).toBe(expected);
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
});
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
exports.useArrowKeysToNavigateCalendar = void 0;
|
|
5
|
+
|
|
6
|
+
var _react = require("react");
|
|
7
|
+
|
|
8
|
+
var useArrowKeysToNavigateCalendar = function useArrowKeysToNavigateCalendar(_ref) {
|
|
9
|
+
var date = _ref.date,
|
|
10
|
+
calendarIsOpen = _ref.calendarIsOpen,
|
|
11
|
+
openCalendar = _ref.openCalendar,
|
|
12
|
+
onChange = _ref.onChange;
|
|
13
|
+
var incrementDate = (0, _react.useCallback)(function (by) {
|
|
14
|
+
if (!date) return;
|
|
15
|
+
var newDate = new Date(date);
|
|
16
|
+
newDate.setDate(newDate.getDate() + by);
|
|
17
|
+
onChange(newDate);
|
|
18
|
+
}, [date, onChange]);
|
|
19
|
+
var handleInputKeyDown = (0, _react.useCallback)(function (event) {
|
|
20
|
+
if (calendarIsOpen) {
|
|
21
|
+
if (event.key === 'ArrowUp') {
|
|
22
|
+
event.preventDefault();
|
|
23
|
+
incrementDate(-7);
|
|
24
|
+
} else if (event.key === 'ArrowDown') {
|
|
25
|
+
event.preventDefault();
|
|
26
|
+
incrementDate(7);
|
|
27
|
+
} else if (event.key === 'ArrowLeft') {
|
|
28
|
+
event.preventDefault();
|
|
29
|
+
incrementDate(-1);
|
|
30
|
+
} else if (event.key === 'ArrowRight') {
|
|
31
|
+
event.preventDefault();
|
|
32
|
+
incrementDate(1);
|
|
33
|
+
}
|
|
34
|
+
} else {
|
|
35
|
+
if (event.key === 'ArrowDown') {
|
|
36
|
+
event.preventDefault();
|
|
37
|
+
openCalendar();
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}, [calendarIsOpen, openCalendar, incrementDate]);
|
|
41
|
+
return handleInputKeyDown;
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
exports.useArrowKeysToNavigateCalendar = useArrowKeysToNavigateCalendar;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
exports.useEditableDate = void 0;
|
|
5
|
+
|
|
6
|
+
var _react = require("react");
|
|
7
|
+
|
|
8
|
+
var _dateFns = require("date-fns");
|
|
9
|
+
|
|
10
|
+
var _parse = require("./parse");
|
|
11
|
+
|
|
12
|
+
var useEditableDate = function useEditableDate(_ref) {
|
|
13
|
+
var date = _ref.date,
|
|
14
|
+
dateFormat = _ref.dateFormat,
|
|
15
|
+
dateValidator = _ref.dateValidator,
|
|
16
|
+
onChange = _ref.onChange;
|
|
17
|
+
|
|
18
|
+
var _useState = (0, _react.useState)(),
|
|
19
|
+
keyBuffer = _useState[0],
|
|
20
|
+
setKeyBuffer = _useState[1];
|
|
21
|
+
|
|
22
|
+
var _useState2 = (0, _react.useState)(false),
|
|
23
|
+
invalidKeyBuffer = _useState2[0],
|
|
24
|
+
setInvalidKeyBuffer = _useState2[1];
|
|
25
|
+
|
|
26
|
+
var formattedDate = (0, _react.useMemo)(function () {
|
|
27
|
+
if (keyBuffer !== undefined) {
|
|
28
|
+
return keyBuffer;
|
|
29
|
+
} else {
|
|
30
|
+
return date ? (0, _dateFns.format)(date, dateFormat) : '';
|
|
31
|
+
}
|
|
32
|
+
}, [date, dateFormat, keyBuffer]);
|
|
33
|
+
var setKeyBufferAndValidate = (0, _react.useCallback)(function (value) {
|
|
34
|
+
setKeyBuffer(value);
|
|
35
|
+
|
|
36
|
+
if (value && !dateValidator((0, _parse.parseDate)({
|
|
37
|
+
date: value,
|
|
38
|
+
format: dateFormat
|
|
39
|
+
}))) {
|
|
40
|
+
setInvalidKeyBuffer(true);
|
|
41
|
+
} else {
|
|
42
|
+
setInvalidKeyBuffer(false);
|
|
43
|
+
}
|
|
44
|
+
}, [dateFormat, dateValidator]);
|
|
45
|
+
var setDate = (0, _react.useCallback)(function (date) {
|
|
46
|
+
var newDate;
|
|
47
|
+
|
|
48
|
+
if (typeof date === 'string') {
|
|
49
|
+
setKeyBufferAndValidate(date);
|
|
50
|
+
newDate = (0, _parse.parseDate)({
|
|
51
|
+
date: date,
|
|
52
|
+
format: dateFormat
|
|
53
|
+
});
|
|
54
|
+
} else {
|
|
55
|
+
setKeyBufferAndValidate(undefined);
|
|
56
|
+
newDate = date;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
if (dateValidator(newDate) && onChange) onChange(newDate);
|
|
60
|
+
}, [onChange, setKeyBufferAndValidate, dateValidator, dateFormat]);
|
|
61
|
+
var clearKeyBuffer = (0, _react.useCallback)(function () {
|
|
62
|
+
setKeyBufferAndValidate(undefined);
|
|
63
|
+
}, []);
|
|
64
|
+
return {
|
|
65
|
+
formattedDate: formattedDate,
|
|
66
|
+
setDate: setDate,
|
|
67
|
+
clearKeyBuffer: clearKeyBuffer,
|
|
68
|
+
invalidKeyBuffer: invalidKeyBuffer
|
|
69
|
+
};
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
exports.useEditableDate = useEditableDate;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
6
|
+
|
|
7
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
8
|
+
|
|
9
|
+
var _react = _interopRequireDefault(require("react"));
|
|
10
|
+
|
|
11
|
+
var _react2 = require("@testing-library/react");
|
|
12
|
+
|
|
13
|
+
var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
|
|
14
|
+
|
|
15
|
+
var _ = _interopRequireDefault(require("."));
|
|
16
|
+
|
|
17
|
+
var _ThemeProvider = require("../ThemeProvider/ThemeProvider");
|
|
18
|
+
|
|
19
|
+
var people = [{
|
|
20
|
+
first: 'Charlie',
|
|
21
|
+
last: 'Brown',
|
|
22
|
+
twitter: 'dancounsell',
|
|
23
|
+
active: true
|
|
24
|
+
}, {
|
|
25
|
+
first: 'Charlotte',
|
|
26
|
+
last: 'White',
|
|
27
|
+
twitter: 'mtnmissy',
|
|
28
|
+
active: true
|
|
29
|
+
}, {
|
|
30
|
+
first: 'John',
|
|
31
|
+
last: 'James',
|
|
32
|
+
twitter: 'miller',
|
|
33
|
+
active: false
|
|
34
|
+
}, {
|
|
35
|
+
first: 'Travis',
|
|
36
|
+
last: 'Arnold',
|
|
37
|
+
twitter: 'souporserious',
|
|
38
|
+
active: true
|
|
39
|
+
}];
|
|
40
|
+
var selectMock = jest.fn();
|
|
41
|
+
test('can click to select item from list', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
|
|
42
|
+
return _regenerator["default"].wrap(function _callee$(_context) {
|
|
43
|
+
while (1) {
|
|
44
|
+
switch (_context.prev = _context.next) {
|
|
45
|
+
case 0:
|
|
46
|
+
jest.useFakeTimers();
|
|
47
|
+
(0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ThemeProvider.ThemeProvider, null, /*#__PURE__*/_react["default"].createElement(_["default"], {
|
|
48
|
+
onChange: selectMock
|
|
49
|
+
}, people.map(function (p) {
|
|
50
|
+
return /*#__PURE__*/_react["default"].createElement(_["default"].Option, {
|
|
51
|
+
value: p.twitter,
|
|
52
|
+
key: p.twitter
|
|
53
|
+
}, p.first, " ", p.last);
|
|
54
|
+
}))));
|
|
55
|
+
|
|
56
|
+
_userEvent["default"].click(_react2.screen.getByRole('button'));
|
|
57
|
+
|
|
58
|
+
jest.runAllTimers();
|
|
59
|
+
|
|
60
|
+
_userEvent["default"].click(_react2.screen.getByText('Travis Arnold'));
|
|
61
|
+
|
|
62
|
+
expect(selectMock).toHaveBeenCalledWith({
|
|
63
|
+
selectedValue: 'souporserious',
|
|
64
|
+
value: 'souporserious'
|
|
65
|
+
});
|
|
66
|
+
jest.useRealTimers();
|
|
67
|
+
|
|
68
|
+
case 7:
|
|
69
|
+
case "end":
|
|
70
|
+
return _context.stop();
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}, _callee);
|
|
74
|
+
})));
|
|
@@ -172,21 +172,18 @@ export function Button(_ref) {
|
|
|
172
172
|
|
|
173
173
|
if (disabled) {
|
|
174
174
|
buttonProps.opacity = 0.65;
|
|
175
|
+
buttonProps['aria-disabled'] = true;
|
|
176
|
+
buttonProps.cursor = 'not-allowed';
|
|
175
177
|
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
}
|
|
179
|
-
buttonProps['aria-disabled'] = true;
|
|
180
|
-
buttonProps.cursor = 'not-allowed';
|
|
181
|
-
|
|
182
|
-
buttonProps.onClick = function (event) {
|
|
183
|
-
return event.preventDefault();
|
|
184
|
-
};
|
|
178
|
+
buttonProps.onClick = function (event) {
|
|
179
|
+
return event.preventDefault();
|
|
180
|
+
};
|
|
185
181
|
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
182
|
+
buttonProps.onKeyDown = function (event) {
|
|
183
|
+
if (event.key === 'Enter' || event.key === ' ') {
|
|
184
|
+
event.preventDefault();
|
|
185
|
+
}
|
|
186
|
+
};
|
|
190
187
|
} // don't apply hover/active styles or events when disabled or spinner is present
|
|
191
188
|
|
|
192
189
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { render, fireEvent } from '@testing-library/react';
|
|
2
|
+
import { render, fireEvent, createEvent } from '@testing-library/react';
|
|
3
3
|
import { Button } from './Button';
|
|
4
4
|
|
|
5
5
|
var _ref = /*#__PURE__*/React.createElement(Button, null);
|
|
@@ -28,70 +28,102 @@ var _ref3 = /*#__PURE__*/React.createElement(Button, {
|
|
|
28
28
|
disabled: true
|
|
29
29
|
});
|
|
30
30
|
|
|
31
|
-
it("
|
|
31
|
+
it("if \"disabled\" prop is provided, set \"aria-disabled\" attribute", function () {
|
|
32
32
|
var _render3 = render(_ref3),
|
|
33
33
|
container = _render3.container;
|
|
34
34
|
|
|
35
35
|
var button = container.querySelector('button');
|
|
36
|
-
expect(button.getAttribute("aria-disabled")).toEqual(
|
|
37
|
-
expect(button.disabled).toBe(
|
|
36
|
+
expect(button.getAttribute("aria-disabled")).toEqual("true");
|
|
37
|
+
expect(button.disabled).toBe(false);
|
|
38
38
|
});
|
|
39
39
|
|
|
40
40
|
var _ref4 = /*#__PURE__*/React.createElement(Button, {
|
|
41
|
-
type: "submit",
|
|
42
41
|
disabled: true
|
|
43
42
|
});
|
|
44
43
|
|
|
45
|
-
it("
|
|
44
|
+
it("if \"disabled\" prop is provided, prevent \"Click\" event from firing", function () {
|
|
46
45
|
var _render4 = render(_ref4),
|
|
47
46
|
container = _render4.container;
|
|
48
47
|
|
|
49
48
|
var button = container.querySelector('button');
|
|
50
|
-
|
|
51
|
-
|
|
49
|
+
var clickEvent = createEvent.click(button);
|
|
50
|
+
fireEvent(button, clickEvent);
|
|
51
|
+
expect(clickEvent.defaultPrevented).toBe(true);
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
var _ref5 = /*#__PURE__*/React.createElement(Button, {
|
|
55
|
+
disabled: true
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
it("if \"disabled\" prop is provided, prevent keyDown \"Enter\" event from firing", function () {
|
|
59
|
+
var _render5 = render(_ref5),
|
|
60
|
+
container = _render5.container;
|
|
61
|
+
|
|
62
|
+
var button = container.querySelector('button');
|
|
63
|
+
var keyDownEvent = createEvent.keyDown(button, {
|
|
64
|
+
key: 'Enter'
|
|
65
|
+
});
|
|
66
|
+
fireEvent(button, keyDownEvent);
|
|
67
|
+
expect(keyDownEvent.defaultPrevented).toBe(true);
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
var _ref6 = /*#__PURE__*/React.createElement(Button, {
|
|
71
|
+
disabled: true
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
it("if \"disabled\" prop is provided, prevent keyDown \"Space\" event from firing", function () {
|
|
75
|
+
var _render6 = render(_ref6),
|
|
76
|
+
container = _render6.container;
|
|
77
|
+
|
|
78
|
+
var button = container.querySelector('button');
|
|
79
|
+
var keyDownEvent = createEvent.keyDown(button, {
|
|
80
|
+
key: ' '
|
|
81
|
+
});
|
|
82
|
+
fireEvent(button, keyDownEvent);
|
|
83
|
+
expect(keyDownEvent.defaultPrevented).toBe(true);
|
|
52
84
|
});
|
|
53
85
|
it("should render title", function () {
|
|
54
86
|
var title = 'Hello';
|
|
55
87
|
|
|
56
|
-
var
|
|
88
|
+
var _render7 = render( /*#__PURE__*/React.createElement(Button, {
|
|
57
89
|
title: title
|
|
58
90
|
})),
|
|
59
|
-
getByText =
|
|
91
|
+
getByText = _render7.getByText;
|
|
60
92
|
|
|
61
93
|
getByText(title);
|
|
62
94
|
});
|
|
63
95
|
|
|
64
|
-
var
|
|
96
|
+
var _ref7 = /*#__PURE__*/React.createElement(Button, {
|
|
65
97
|
to: "#"
|
|
66
98
|
});
|
|
67
99
|
|
|
68
100
|
it("should render <a> without a type if \"to\" is provided", function () {
|
|
69
|
-
var
|
|
70
|
-
container =
|
|
101
|
+
var _render8 = render(_ref7),
|
|
102
|
+
container = _render8.container;
|
|
71
103
|
|
|
72
104
|
var button = container.querySelector('a');
|
|
73
105
|
expect(button.getAttribute('type')).toBeNull();
|
|
74
106
|
});
|
|
75
107
|
|
|
76
|
-
var
|
|
108
|
+
var _ref8 = /*#__PURE__*/React.createElement(Button, {
|
|
77
109
|
href: "#"
|
|
78
110
|
});
|
|
79
111
|
|
|
80
112
|
it("should render <a> without a type if \"href\" is provided", function () {
|
|
81
|
-
var
|
|
82
|
-
container =
|
|
113
|
+
var _render9 = render(_ref8),
|
|
114
|
+
container = _render9.container;
|
|
83
115
|
|
|
84
116
|
var button = container.querySelector('a');
|
|
85
117
|
expect(button.getAttribute('type')).toBeNull();
|
|
86
118
|
});
|
|
87
119
|
|
|
88
|
-
var
|
|
120
|
+
var _ref9 = /*#__PURE__*/React.createElement(Button, {
|
|
89
121
|
to: "#"
|
|
90
122
|
});
|
|
91
123
|
|
|
92
124
|
it("should render <a> with \"href\" if \"to\" is specifed", function () {
|
|
93
|
-
var
|
|
94
|
-
container =
|
|
125
|
+
var _render10 = render(_ref9),
|
|
126
|
+
container = _render10.container;
|
|
95
127
|
|
|
96
128
|
var button = container.querySelector('a');
|
|
97
129
|
expect(button.getAttribute('href')).toEqual('#');
|
|
@@ -99,12 +131,12 @@ it("should render <a> with \"href\" if \"to\" is specifed", function () {
|
|
|
99
131
|
it("should render href and external link values", function () {
|
|
100
132
|
var title = 'Hello';
|
|
101
133
|
|
|
102
|
-
var
|
|
134
|
+
var _render11 = render( /*#__PURE__*/React.createElement(Button, {
|
|
103
135
|
external: true,
|
|
104
136
|
title: title,
|
|
105
137
|
to: "https://www.planningcenter.com"
|
|
106
138
|
})),
|
|
107
|
-
getByText =
|
|
139
|
+
getByText = _render11.getByText;
|
|
108
140
|
|
|
109
141
|
var button = getByText(title);
|
|
110
142
|
expect(button.getAttribute('href')).toEqual('https://www.planningcenter.com');
|
|
@@ -114,20 +146,20 @@ it("should render href and external link values", function () {
|
|
|
114
146
|
it("should call onClick when clicked or Enter or Space key is pressed", function () {
|
|
115
147
|
var onClick = jest.fn();
|
|
116
148
|
|
|
117
|
-
var
|
|
149
|
+
var _render12 = render( /*#__PURE__*/React.createElement(Button, {
|
|
118
150
|
onClick: onClick
|
|
119
151
|
})),
|
|
120
|
-
container =
|
|
152
|
+
container = _render12.container;
|
|
121
153
|
|
|
122
154
|
fireEvent.click(container.firstChild);
|
|
123
155
|
expect(onClick).toHaveBeenCalledTimes(1);
|
|
124
156
|
});
|
|
125
157
|
|
|
126
|
-
var
|
|
158
|
+
var _ref10 = /*#__PURE__*/React.createElement(Button, null);
|
|
127
159
|
|
|
128
160
|
it("should not call onClick when Enter or Space key is pressed and onClick isn't present", function () {
|
|
129
|
-
var
|
|
130
|
-
container =
|
|
161
|
+
var _render13 = render(_ref10),
|
|
162
|
+
container = _render13.container;
|
|
131
163
|
|
|
132
164
|
fireEvent.keyDown(container.firstChild, {
|
|
133
165
|
key: 'Enter'
|
|
@@ -141,35 +141,37 @@ var Calendar = /*#__PURE__*/forwardRef(function (_ref, calendarRef) {
|
|
|
141
141
|
axis: "horizontal",
|
|
142
142
|
spacing: 0.5
|
|
143
143
|
}, /*#__PURE__*/React.createElement(Box, {
|
|
144
|
-
as: "button",
|
|
145
144
|
"aria-label": isMonthsView ? 'Choose dates' : 'Choose month',
|
|
146
|
-
|
|
147
|
-
fontSize: headerFontSize,
|
|
148
|
-
lineHeight: 3,
|
|
149
|
-
radius: 3,
|
|
150
|
-
cursor: "pointer",
|
|
145
|
+
as: "button",
|
|
151
146
|
backgroundColor: hover ? 'highlight' : 'transparent',
|
|
147
|
+
cursor: "pointer",
|
|
148
|
+
fontSize: headerFontSize,
|
|
152
149
|
hover: {
|
|
153
150
|
backgroundColor: 'highlightSecondary'
|
|
154
151
|
},
|
|
152
|
+
lineHeight: 3,
|
|
155
153
|
onClick: function onClick() {
|
|
156
154
|
setCurrentView(isMonthsView ? 'calendar' : 'months');
|
|
157
|
-
}
|
|
158
|
-
}, format(currentDate, 'MMMM')), /*#__PURE__*/React.createElement(Box, {
|
|
159
|
-
as: "button",
|
|
160
|
-
"aria-label": isYearsView ? 'Choose dates' : 'Choose year',
|
|
155
|
+
},
|
|
161
156
|
padding: 0.25,
|
|
162
|
-
fontSize: headerFontSize,
|
|
163
|
-
lineHeight: 3,
|
|
164
157
|
radius: 3,
|
|
165
|
-
|
|
158
|
+
tabIndex: -1
|
|
159
|
+
}, format(currentDate, 'MMMM')), /*#__PURE__*/React.createElement(Box, {
|
|
160
|
+
"aria-label": isYearsView ? 'Choose dates' : 'Choose year',
|
|
161
|
+
as: "button",
|
|
166
162
|
backgroundColor: hover ? 'highlight' : 'transparent',
|
|
163
|
+
cursor: "pointer",
|
|
164
|
+
fontSize: headerFontSize,
|
|
167
165
|
hover: {
|
|
168
166
|
backgroundColor: 'highlightSecondary'
|
|
169
167
|
},
|
|
168
|
+
lineHeight: 3,
|
|
170
169
|
onClick: function onClick() {
|
|
171
170
|
setCurrentView(isYearsView ? 'calendar' : 'years');
|
|
172
|
-
}
|
|
171
|
+
},
|
|
172
|
+
padding: 0.25,
|
|
173
|
+
radius: 3,
|
|
174
|
+
tabIndex: -1
|
|
173
175
|
}, currentYear)), /*#__PURE__*/React.createElement(Group, {
|
|
174
176
|
marginRight: 0.5,
|
|
175
177
|
childProps: {
|
|
@@ -177,35 +179,38 @@ var Calendar = /*#__PURE__*/forwardRef(function (_ref, calendarRef) {
|
|
|
177
179
|
size: buttonSize
|
|
178
180
|
}
|
|
179
181
|
}, /*#__PURE__*/React.createElement(Button, {
|
|
180
|
-
|
|
182
|
+
disabled: isYearsView ? currentYear <= minYear : isSameMonth(currentDate, minDate),
|
|
181
183
|
icon: {
|
|
182
184
|
name: 'general.leftChevron',
|
|
183
|
-
size:
|
|
185
|
+
size: 'xxs'
|
|
184
186
|
},
|
|
185
|
-
disabled: isYearsView ? currentYear <= minYear : isSameMonth(currentDate, minDate),
|
|
186
187
|
onClick: function onClick() {
|
|
187
188
|
return navigateCalendar(-1);
|
|
188
|
-
}
|
|
189
|
-
}), /*#__PURE__*/React.createElement(Button, {
|
|
190
|
-
tooltip: {
|
|
191
|
-
title: 'Today'
|
|
192
189
|
},
|
|
190
|
+
tabIndex: -1,
|
|
191
|
+
title: "Previous month"
|
|
192
|
+
}), /*#__PURE__*/React.createElement(Button, {
|
|
193
193
|
icon: {
|
|
194
194
|
name: 'tapestry.radio1'
|
|
195
195
|
},
|
|
196
196
|
onClick: function onClick() {
|
|
197
197
|
return setDate(TODAY, true);
|
|
198
|
+
},
|
|
199
|
+
tabIndex: -1,
|
|
200
|
+
tooltip: {
|
|
201
|
+
title: 'Today'
|
|
198
202
|
}
|
|
199
203
|
}), /*#__PURE__*/React.createElement(Button, {
|
|
200
|
-
|
|
204
|
+
disabled: isYearsView ? currentYear >= maxYear : isSameMonth(currentDate, maxDate),
|
|
201
205
|
icon: {
|
|
202
206
|
name: 'general.rightChevron',
|
|
203
|
-
size:
|
|
207
|
+
size: 'xxs'
|
|
204
208
|
},
|
|
205
|
-
disabled: isYearsView ? currentYear >= maxYear : isSameMonth(currentDate, maxDate),
|
|
206
209
|
onClick: function onClick() {
|
|
207
210
|
return navigateCalendar(1);
|
|
208
|
-
}
|
|
211
|
+
},
|
|
212
|
+
tabIndex: -1,
|
|
213
|
+
title: "Next month"
|
|
209
214
|
}))), isMonthsView && /*#__PURE__*/React.createElement(StackView, {
|
|
210
215
|
axis: "horizontal",
|
|
211
216
|
width: cellSize * 7,
|
|
@@ -3,6 +3,7 @@ import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWith
|
|
|
3
3
|
import React, { forwardRef, useCallback, useImperativeHandle, useRef, useContext, useEffect } from 'react';
|
|
4
4
|
import Input from '../Input';
|
|
5
5
|
import ItemListContext from '../ItemList/ItemListContext';
|
|
6
|
+
import { ItemListController } from '../ItemList';
|
|
6
7
|
import { useThemeProps } from '../system';
|
|
7
8
|
|
|
8
9
|
function ComboboxInput(props, ref) {
|
|
@@ -42,13 +43,11 @@ function ComboboxInput(props, ref) {
|
|
|
42
43
|
};
|
|
43
44
|
});
|
|
44
45
|
var itemList = useContext(ItemListContext);
|
|
45
|
-
var highlightedItemId = itemList.highlightedItemId,
|
|
46
|
-
id = itemList.id;
|
|
47
46
|
useEffect(function () {
|
|
48
47
|
setTimeout(function () {
|
|
49
48
|
itemList.setHighlightedIndex(0);
|
|
50
49
|
});
|
|
51
|
-
}, [itemList
|
|
50
|
+
}, [itemList]);
|
|
52
51
|
var handleKeyDown = useCallback(function (e) {
|
|
53
52
|
if (e.key === 'ArrowUp') {
|
|
54
53
|
e.preventDefault();
|
|
@@ -76,45 +75,49 @@ function ComboboxInput(props, ref) {
|
|
|
76
75
|
if (onClose && e.key === 'Tab') {
|
|
77
76
|
onClose();
|
|
78
77
|
}
|
|
79
|
-
});
|
|
78
|
+
}, [itemList, onClose, onKeyDown]);
|
|
80
79
|
var handleDocumentKeyDown = useCallback(function (e) {
|
|
81
80
|
if (onClear && e.key === 'Escape') {
|
|
82
81
|
onClear();
|
|
83
82
|
}
|
|
83
|
+
}, [onClear]);
|
|
84
|
+
return /*#__PURE__*/React.createElement(ItemListController, null, function (itemList) {
|
|
85
|
+
var highlightedItemId = itemList.highlightedItemId,
|
|
86
|
+
id = itemList.id;
|
|
87
|
+
return /*#__PURE__*/React.createElement(Input.InputBox, _extends({
|
|
88
|
+
innerRef: innerRef,
|
|
89
|
+
size: size,
|
|
90
|
+
disabled: disabled,
|
|
91
|
+
isLoading: isLoading,
|
|
92
|
+
onClear: onClear
|
|
93
|
+
}, restProps, {
|
|
94
|
+
grow: 1
|
|
95
|
+
}), /*#__PURE__*/React.createElement(Input.InputField, {
|
|
96
|
+
innerRef: function innerRef(node) {
|
|
97
|
+
inputNode.current = node;
|
|
98
|
+
},
|
|
99
|
+
grow: 1,
|
|
100
|
+
role: "combobox",
|
|
101
|
+
autoComplete: "off",
|
|
102
|
+
"aria-autocomplete": "list",
|
|
103
|
+
"aria-controls": id,
|
|
104
|
+
"aria-expanded": isOpen,
|
|
105
|
+
"aria-activedescendant": highlightedItemId,
|
|
106
|
+
autoFocus: autoFocus,
|
|
107
|
+
type: type,
|
|
108
|
+
name: name,
|
|
109
|
+
disabled: disabled,
|
|
110
|
+
readOnly: readOnly,
|
|
111
|
+
placeholder: placeholder,
|
|
112
|
+
defaultValue: defaultValue,
|
|
113
|
+
value: value,
|
|
114
|
+
onChange: onChange,
|
|
115
|
+
onFocus: onFocus,
|
|
116
|
+
onBlur: onBlur,
|
|
117
|
+
onKeyDown: handleKeyDown,
|
|
118
|
+
onKeyUp: onKeyUp
|
|
119
|
+
}));
|
|
84
120
|
});
|
|
85
|
-
return /*#__PURE__*/React.createElement(Input.InputBox, _extends({
|
|
86
|
-
innerRef: innerRef,
|
|
87
|
-
size: size,
|
|
88
|
-
disabled: disabled,
|
|
89
|
-
isLoading: isLoading,
|
|
90
|
-
onClear: onClear
|
|
91
|
-
}, restProps, {
|
|
92
|
-
grow: 1
|
|
93
|
-
}), /*#__PURE__*/React.createElement(Input.InputField, {
|
|
94
|
-
innerRef: function innerRef(node) {
|
|
95
|
-
inputNode.current = node;
|
|
96
|
-
},
|
|
97
|
-
grow: 1,
|
|
98
|
-
role: "combobox",
|
|
99
|
-
autoComplete: "off",
|
|
100
|
-
"aria-autocomplete": "list",
|
|
101
|
-
"aria-controls": id,
|
|
102
|
-
"aria-expanded": isOpen,
|
|
103
|
-
"aria-activedescendant": highlightedItemId,
|
|
104
|
-
autoFocus: autoFocus,
|
|
105
|
-
type: type,
|
|
106
|
-
name: name,
|
|
107
|
-
disabled: disabled,
|
|
108
|
-
readOnly: readOnly,
|
|
109
|
-
placeholder: placeholder,
|
|
110
|
-
defaultValue: defaultValue,
|
|
111
|
-
value: value,
|
|
112
|
-
onChange: onChange,
|
|
113
|
-
onFocus: onFocus,
|
|
114
|
-
onBlur: onBlur,
|
|
115
|
-
onKeyDown: handleKeyDown,
|
|
116
|
-
onKeyUp: onKeyUp
|
|
117
|
-
}));
|
|
118
121
|
}
|
|
119
122
|
|
|
120
123
|
ComboboxInput = /*#__PURE__*/forwardRef(ComboboxInput);
|