@dxc-technology/halstack-react 8.0.0 → 9.0.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/HalstackContext.js +94 -45
- package/accordion/Accordion.js +7 -13
- package/accordion/Accordion.stories.tsx +102 -13
- package/alert/Alert.stories.tsx +28 -0
- package/box/Box.js +1 -3
- package/box/Box.stories.tsx +15 -0
- package/button/Button.js +11 -13
- package/button/Button.stories.tsx +150 -8
- package/checkbox/Checkbox.stories.tsx +52 -0
- package/chip/Chip.js +16 -22
- package/chip/Chip.stories.tsx +96 -9
- package/common/variables.js +280 -288
- package/date-input/Calendar.d.ts +1 -1
- package/date-input/Calendar.js +43 -43
- package/date-input/DateInput.js +74 -32
- package/date-input/DateInput.stories.tsx +183 -30
- package/date-input/DateInput.test.js +120 -37
- package/date-input/DatePicker.js +38 -52
- package/date-input/Icons.d.ts +6 -0
- package/date-input/Icons.js +75 -0
- package/date-input/YearPicker.d.ts +1 -1
- package/date-input/YearPicker.js +23 -12
- package/date-input/types.d.ts +6 -8
- package/dialog/Dialog.js +60 -73
- package/dialog/Dialog.stories.tsx +211 -159
- package/dialog/Dialog.test.js +301 -2
- package/dropdown/Dropdown.js +3 -6
- package/dropdown/Dropdown.stories.tsx +210 -84
- package/dropdown/DropdownMenu.js +8 -18
- package/dropdown/DropdownMenuItem.js +4 -15
- package/file-input/FileInput.js +3 -6
- package/file-input/FileInput.stories.tsx +85 -2
- package/file-input/FileInput.test.js +0 -41
- package/file-input/FileItem.js +1 -0
- package/footer/Footer.stories.tsx +91 -0
- package/header/Header.js +18 -20
- package/header/Header.stories.tsx +149 -6
- package/link/Link.stories.tsx +60 -0
- package/main.d.ts +1 -1
- package/main.js +1 -1
- package/{tabs-nav → nav-tabs}/NavTabs.js +1 -1
- package/{tabs-nav → nav-tabs}/NavTabs.stories.tsx +96 -6
- package/{tabs-nav → nav-tabs}/Tab.js +35 -15
- package/package.json +1 -1
- package/paginator/Icons.d.ts +5 -0
- package/paginator/Icons.js +16 -28
- package/paginator/Paginator.js +5 -11
- package/paginator/Paginator.stories.tsx +24 -0
- package/paginator/Paginator.test.js +17 -10
- package/progress-bar/ProgressBar.js +4 -4
- package/progress-bar/ProgressBar.stories.jsx +35 -2
- package/quick-nav/QuickNav.stories.tsx +14 -0
- package/radio-group/RadioGroup.stories.tsx +131 -18
- package/resultsetTable/ResultsetTable.test.js +17 -22
- package/select/Listbox.d.ts +1 -1
- package/select/Listbox.js +5 -34
- package/select/Option.js +11 -24
- package/select/Select.js +43 -24
- package/select/Select.stories.tsx +492 -145
- package/select/Select.test.js +17 -22
- package/select/types.d.ts +2 -2
- package/sidenav/Sidenav.js +8 -10
- package/sidenav/Sidenav.stories.tsx +148 -46
- package/slider/Slider.js +4 -4
- package/slider/Slider.stories.tsx +57 -0
- package/spinner/Spinner.js +2 -2
- package/spinner/Spinner.stories.jsx +27 -1
- package/switch/Switch.js +1 -1
- package/switch/Switch.stories.tsx +33 -0
- package/table/Table.stories.jsx +80 -1
- package/tabs/Tab.js +3 -5
- package/tabs/Tabs.js +3 -3
- package/tabs/Tabs.stories.tsx +45 -5
- package/tag/Tag.stories.tsx +14 -1
- package/text-input/Suggestion.js +32 -5
- package/text-input/TextInput.js +7 -11
- package/text-input/TextInput.stories.tsx +92 -4
- package/text-input/TextInput.test.js +125 -25
- package/textarea/Textarea.stories.jsx +60 -1
- package/toggle-group/ToggleGroup.stories.tsx +42 -0
- package/utils/FocusLock.d.ts +13 -0
- package/utils/FocusLock.js +139 -0
- package/wizard/Wizard.stories.tsx +20 -0
- /package/{tabs-nav → nav-tabs}/NavTabs.d.ts +0 -0
- /package/{tabs-nav → nav-tabs}/NavTabs.test.js +0 -0
- /package/{tabs-nav → nav-tabs}/Tab.d.ts +0 -0
- /package/{tabs-nav → nav-tabs}/types.d.ts +0 -0
- /package/{tabs-nav → nav-tabs}/types.js +0 -0
package/date-input/Calendar.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { CalendarPropsType } from "./types";
|
|
3
|
-
declare const _default: React.MemoExoticComponent<({ selectedDate, innerDate, onInnerDateChange, onDaySelect }: CalendarPropsType) => JSX.Element>;
|
|
3
|
+
declare const _default: React.MemoExoticComponent<({ selectedDate, innerDate, onInnerDateChange, onDaySelect, today, }: CalendarPropsType) => JSX.Element>;
|
|
4
4
|
export default _default;
|
package/date-input/Calendar.js
CHANGED
|
@@ -13,8 +13,6 @@ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/hel
|
|
|
13
13
|
|
|
14
14
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
15
15
|
|
|
16
|
-
var _dayjs = _interopRequireDefault(require("dayjs"));
|
|
17
|
-
|
|
18
16
|
var _react = _interopRequireWildcard(require("react"));
|
|
19
17
|
|
|
20
18
|
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
@@ -23,7 +21,7 @@ var _useTranslatedLabels = _interopRequireDefault(require("../useTranslatedLabel
|
|
|
23
21
|
|
|
24
22
|
var _main = require("../main");
|
|
25
23
|
|
|
26
|
-
var _templateObject, _templateObject2, _templateObject3, _templateObject4
|
|
24
|
+
var _templateObject, _templateObject2, _templateObject3, _templateObject4;
|
|
27
25
|
|
|
28
26
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
29
27
|
|
|
@@ -60,6 +58,10 @@ var getDays = function getDays(innerDate) {
|
|
|
60
58
|
return monthDayCells;
|
|
61
59
|
};
|
|
62
60
|
|
|
61
|
+
var getDateToFocus = function getDateToFocus(selectedDate, innerDate, today) {
|
|
62
|
+
return (selectedDate === null || selectedDate === void 0 ? void 0 : selectedDate.get("month")) === innerDate.get("month") && (selectedDate === null || selectedDate === void 0 ? void 0 : selectedDate.get("year")) === innerDate.get("year") ? selectedDate : today.get("month") === innerDate.get("month") && today.get("year") === innerDate.get("year") ? today : innerDate.set("date", 1);
|
|
63
|
+
};
|
|
64
|
+
|
|
63
65
|
var isDaySelected = function isDaySelected(date, selectedDate) {
|
|
64
66
|
return (selectedDate === null || selectedDate === void 0 ? void 0 : selectedDate.get("month")) === date.month && (selectedDate === null || selectedDate === void 0 ? void 0 : selectedDate.get("year")) === date.year && (selectedDate === null || selectedDate === void 0 ? void 0 : selectedDate.get("date")) === date.day;
|
|
65
67
|
};
|
|
@@ -68,19 +70,19 @@ var Calendar = function Calendar(_ref) {
|
|
|
68
70
|
var selectedDate = _ref.selectedDate,
|
|
69
71
|
innerDate = _ref.innerDate,
|
|
70
72
|
onInnerDateChange = _ref.onInnerDateChange,
|
|
71
|
-
onDaySelect = _ref.onDaySelect
|
|
73
|
+
onDaySelect = _ref.onDaySelect,
|
|
74
|
+
today = _ref.today;
|
|
72
75
|
|
|
73
|
-
var _useState = (0, _react.useState)((selectedDate
|
|
76
|
+
var _useState = (0, _react.useState)(getDateToFocus(selectedDate, innerDate, today)),
|
|
74
77
|
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
75
78
|
dateToFocus = _useState2[0],
|
|
76
79
|
setDateToFocus = _useState2[1];
|
|
77
80
|
|
|
78
81
|
var _useState3 = (0, _react.useState)(false),
|
|
79
82
|
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
|
|
80
|
-
|
|
81
|
-
|
|
83
|
+
isFocusable = _useState4[0],
|
|
84
|
+
setIsFocusable = _useState4[1];
|
|
82
85
|
|
|
83
|
-
var today = (0, _dayjs["default"])();
|
|
84
86
|
var dayCells = (0, _react.useMemo)(function () {
|
|
85
87
|
return getDays(innerDate);
|
|
86
88
|
}, [innerDate]);
|
|
@@ -95,17 +97,7 @@ var Calendar = function Calendar(_ref) {
|
|
|
95
97
|
|
|
96
98
|
var handleOnBlur = function handleOnBlur(event) {
|
|
97
99
|
if (!(event !== null && event !== void 0 && event.currentTarget.contains(event.relatedTarget))) {
|
|
98
|
-
|
|
99
|
-
}
|
|
100
|
-
};
|
|
101
|
-
|
|
102
|
-
var updateDateToFocus = function updateDateToFocus() {
|
|
103
|
-
if ((selectedDate === null || selectedDate === void 0 ? void 0 : selectedDate.get("month")) === innerDate.get("month") && (selectedDate === null || selectedDate === void 0 ? void 0 : selectedDate.get("year")) === innerDate.get("year")) {
|
|
104
|
-
setDateToFocus(selectedDate);
|
|
105
|
-
} else if (today.get("month") === innerDate.get("month") && today.get("year") === innerDate.get("year")) {
|
|
106
|
-
setDateToFocus(today);
|
|
107
|
-
} else {
|
|
108
|
-
setDateToFocus(innerDate.set("date", 1));
|
|
100
|
+
setDateToFocus(getDateToFocus(selectedDate, innerDate, today));
|
|
109
101
|
}
|
|
110
102
|
};
|
|
111
103
|
|
|
@@ -115,22 +107,22 @@ var Calendar = function Calendar(_ref) {
|
|
|
115
107
|
}
|
|
116
108
|
|
|
117
109
|
setDateToFocus(date);
|
|
118
|
-
|
|
110
|
+
setIsFocusable(true);
|
|
119
111
|
};
|
|
120
112
|
|
|
121
113
|
(0, _react.useEffect)(function () {
|
|
122
|
-
if (
|
|
114
|
+
if (isFocusable) {
|
|
123
115
|
var _document$getElementB;
|
|
124
116
|
|
|
125
117
|
(_document$getElementB = document.getElementById("day_".concat(dateToFocus.get("date"), "_month").concat(dateToFocus.get("month")))) === null || _document$getElementB === void 0 ? void 0 : _document$getElementB.focus();
|
|
126
|
-
|
|
118
|
+
setIsFocusable(false);
|
|
127
119
|
}
|
|
128
|
-
}, [dateToFocus,
|
|
120
|
+
}, [dateToFocus, isFocusable]);
|
|
129
121
|
(0, _react.useEffect)(function () {
|
|
130
122
|
if (dateToFocus.get("month") !== innerDate.get("month") || dateToFocus.get("year") !== innerDate.get("year")) {
|
|
131
|
-
|
|
123
|
+
setDateToFocus(getDateToFocus(selectedDate, innerDate, today));
|
|
132
124
|
}
|
|
133
|
-
}, [innerDate, dateToFocus, selectedDate]);
|
|
125
|
+
}, [innerDate, dateToFocus, selectedDate, today]);
|
|
134
126
|
|
|
135
127
|
var handleDayKeyboardEvent = function handleDayKeyboardEvent(event, date) {
|
|
136
128
|
var dateToFocusTemp = date.month === innerDate.get("month") ? innerDate.set("date", date.day) : innerDate.set("date", date.day).set("month", date.month);
|
|
@@ -201,7 +193,7 @@ var Calendar = function Calendar(_ref) {
|
|
|
201
193
|
})), /*#__PURE__*/_react["default"].createElement(DayCellsContainer, {
|
|
202
194
|
onBlur: handleOnBlur
|
|
203
195
|
}, dayCells.map(function (date, index) {
|
|
204
|
-
return
|
|
196
|
+
return /*#__PURE__*/_react["default"].createElement(DayCell, {
|
|
205
197
|
onKeyDown: function onKeyDown(event) {
|
|
206
198
|
return handleDayKeyboardEvent(event, date);
|
|
207
199
|
},
|
|
@@ -217,42 +209,50 @@ var Calendar = function Calendar(_ref) {
|
|
|
217
209
|
"aria-selected": isDaySelected(date, selectedDate),
|
|
218
210
|
tabIndex: date.day === dateToFocus.get("date") && date.month === dateToFocus.get("month") ? 0 : -1,
|
|
219
211
|
isCurrentDay: today.get("date") === date.day && today.get("month") === innerDate.get("month") && today.get("month") === date.month && today.get("year") === innerDate.get("year")
|
|
220
|
-
}, date.day)
|
|
221
|
-
key: "empty_".concat(index)
|
|
222
|
-
});
|
|
212
|
+
}, date.day);
|
|
223
213
|
})));
|
|
224
214
|
};
|
|
225
215
|
|
|
226
|
-
var CalendarContainer = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n justify-content: center;\n padding: 0px 8px 8px 8px;\n width: ", ";\n"])), function (props) {
|
|
227
|
-
return props.theme.dateInput.pickerWidth;
|
|
228
|
-
});
|
|
229
|
-
|
|
230
|
-
var WeekHeaderCell = _styledComponents["default"].span(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n font-family: ", ";\n font-size: 14px;\n line-height: 19px;\n color: ", ";\n"])), function (props) {
|
|
216
|
+
var CalendarContainer = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n justify-content: center;\n padding: 0px 8px 8px 8px;\n width: 292px;\n font-family: ", ";\n font-size: ", ";\n color: ", ";\n font-weight: ", ";\n"])), function (props) {
|
|
231
217
|
return props.theme.dateInput.pickerFontFamily;
|
|
232
218
|
}, function (props) {
|
|
233
|
-
return props.theme.dateInput.
|
|
219
|
+
return props.theme.dateInput.pickerFontSize;
|
|
220
|
+
}, function (props) {
|
|
221
|
+
return props.theme.dateInput.pickerFontColor;
|
|
222
|
+
}, function (props) {
|
|
223
|
+
return props.theme.dateInput.pickerFontWeight;
|
|
234
224
|
});
|
|
235
225
|
|
|
226
|
+
var WeekHeaderCell = _styledComponents["default"].span(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n"])));
|
|
227
|
+
|
|
236
228
|
var DayCellsContainer = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n box-sizing: border-box;\n display: flex;\n gap: 4px;\n flex-wrap: wrap;\n justify-content: space-between;\n"])));
|
|
237
229
|
|
|
238
|
-
var DayCell = _styledComponents["default"].button(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n display: inline-flex;\n justify-content: center;\n align-items: center;\n width: 36px;\n height: 36px;\n padding: 0;\n
|
|
230
|
+
var DayCell = _styledComponents["default"].button(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n display: inline-flex;\n justify-content: center;\n align-items: center;\n width: 36px;\n height: 36px;\n padding: 0;\n border: none;\n border-radius: 50%;\n cursor: pointer;\n font-family: ", ";\n font-size: ", ";\n color: ", ";\n font-weight: ", ";\n\n &:focus {\n outline: ", " solid 2px;\n }\n &:hover {\n background-color: ", ";\n color: ", ";\n }\n &:active {\n background-color: ", ";\n color: ", ";\n }\n\n ", "\n background-color: ", ";\n color: ", ";\n"])), function (props) {
|
|
239
231
|
return props.theme.dateInput.pickerFontFamily;
|
|
232
|
+
}, function (props) {
|
|
233
|
+
return props.theme.dateInput.pickerFontSize;
|
|
234
|
+
}, function (props) {
|
|
235
|
+
return props.theme.dateInput.pickerFontColor;
|
|
236
|
+
}, function (props) {
|
|
237
|
+
return props.theme.dateInput.pickerFontWeight;
|
|
240
238
|
}, function (props) {
|
|
241
239
|
return props.theme.dateInput.pickerFocusColor;
|
|
242
240
|
}, function (props) {
|
|
243
|
-
return props.selected ? props.theme.dateInput.
|
|
241
|
+
return props.selected ? props.theme.dateInput.pickerSelectedBackgroundColor : props.theme.dateInput.pickerHoverBackgroundColor;
|
|
242
|
+
}, function (props) {
|
|
243
|
+
return props.selected ? props.theme.dateInput.pickerSelectedFontColor : props.theme.dateInput.pickerHoverFontColor;
|
|
244
244
|
}, function (props) {
|
|
245
|
-
return props.
|
|
245
|
+
return props.theme.dateInput.pickerActiveBackgroundColor;
|
|
246
246
|
}, function (props) {
|
|
247
|
-
return props.
|
|
247
|
+
return props.theme.dateInput.pickerActiveFontColor;
|
|
248
248
|
}, function (props) {
|
|
249
|
-
return props.selected
|
|
249
|
+
return props.isCurrentDay && !props.selected && "border: ".concat(props.theme.dateInput.pickerCurrentDateBorderWidth, " solid ").concat(props.theme.dateInput.pickerCurrentDateBorderColor, ";");
|
|
250
250
|
}, function (props) {
|
|
251
|
-
return props.selected ? props.theme.dateInput.
|
|
251
|
+
return props.selected ? props.theme.dateInput.pickerSelectedBackgroundColor : "transparent";
|
|
252
|
+
}, function (props) {
|
|
253
|
+
return props.selected ? props.theme.dateInput.pickerSelectedFontColor : props.isCurrentDay ? props.theme.dateInput.pickerCurrentDateFontColor : !props.actualMonth ? props.theme.dateInput.pickerNonCurrentMonthFontColor : props.theme.dateInput.pickerFontColor;
|
|
252
254
|
});
|
|
253
255
|
|
|
254
|
-
var EmptyDayCell = _styledComponents["default"].div(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n display: inline-block;\n width: 40px;\n height: 36px;\n"])));
|
|
255
|
-
|
|
256
256
|
var _default = /*#__PURE__*/_react["default"].memo(Calendar);
|
|
257
257
|
|
|
258
258
|
exports["default"] = _default;
|
package/date-input/DateInput.js
CHANGED
|
@@ -35,6 +35,8 @@ var _customParseFormat = _interopRequireDefault(require("dayjs/plugin/customPars
|
|
|
35
35
|
|
|
36
36
|
var _uuid = require("uuid");
|
|
37
37
|
|
|
38
|
+
var _Icons = require("./Icons");
|
|
39
|
+
|
|
38
40
|
var _templateObject;
|
|
39
41
|
|
|
40
42
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
@@ -47,24 +49,33 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
|
|
|
47
49
|
|
|
48
50
|
_dayjs["default"].extend(_customParseFormat["default"]);
|
|
49
51
|
|
|
50
|
-
var calendarIcon = /*#__PURE__*/_react["default"].createElement("svg", {
|
|
51
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
52
|
-
height: "24",
|
|
53
|
-
viewBox: "0 0 24 24",
|
|
54
|
-
width: "24",
|
|
55
|
-
fill: "currentColor"
|
|
56
|
-
}, /*#__PURE__*/_react["default"].createElement("path", {
|
|
57
|
-
d: "M0 0h24v24H0z",
|
|
58
|
-
fill: "none"
|
|
59
|
-
}), /*#__PURE__*/_react["default"].createElement("path", {
|
|
60
|
-
d: "M20 3h-1V1h-2v2H7V1H5v2H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 18H4V8h16v13z"
|
|
61
|
-
}));
|
|
62
|
-
|
|
63
52
|
var getValueForPicker = function getValueForPicker(value, format) {
|
|
64
53
|
return (0, _dayjs["default"])(value, format.toUpperCase(), true);
|
|
65
54
|
};
|
|
66
55
|
|
|
56
|
+
var getDate = function getDate(value, format, lastValidYear, setLastValidYear) {
|
|
57
|
+
if ((value || value === "") && format.toUpperCase().includes("YYYY")) return getValueForPicker(value, format);else {
|
|
58
|
+
var newDate = getValueForPicker(value, format);
|
|
59
|
+
|
|
60
|
+
if (!lastValidYear) {
|
|
61
|
+
if (+newDate.format("YY") < 68) {
|
|
62
|
+
setLastValidYear(2000 + +newDate.format("YY"));
|
|
63
|
+
newDate = newDate.set("year", 2000 + +newDate.format("YY"));
|
|
64
|
+
} else {
|
|
65
|
+
setLastValidYear(1900 + +newDate.format("YY"));
|
|
66
|
+
newDate = newDate.set("year", 1900 + +newDate.format("YY"));
|
|
67
|
+
}
|
|
68
|
+
} else {
|
|
69
|
+
newDate = newDate.set("year", (lastValidYear <= 1999 ? 1900 : 2000) + +newDate.format("YY"));
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
return newDate;
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
|
|
67
76
|
var DxcDateInput = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref) {
|
|
77
|
+
var _ref2;
|
|
78
|
+
|
|
68
79
|
var label = _ref.label,
|
|
69
80
|
name = _ref.name,
|
|
70
81
|
_ref$defaultValue = _ref.defaultValue,
|
|
@@ -100,9 +111,22 @@ var DxcDateInput = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref
|
|
|
100
111
|
_useState6 = (0, _slicedToArray2["default"])(_useState5, 1),
|
|
101
112
|
calendarId = _useState6[0];
|
|
102
113
|
|
|
114
|
+
var _useState7 = (0, _react.useState)(getValueForPicker((_ref2 = value !== null && value !== void 0 ? value : defaultValue) !== null && _ref2 !== void 0 ? _ref2 : "", format)),
|
|
115
|
+
_useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
|
|
116
|
+
dayjsDate = _useState8[0],
|
|
117
|
+
setDayjsDate = _useState8[1];
|
|
118
|
+
|
|
119
|
+
var _useState9 = (0, _react.useState)(innerValue || value ? !format.toUpperCase().includes("YYYY") && +getValueForPicker(value !== null && value !== void 0 ? value : innerValue, format).format("YY") < 68 ? 2000 : 1900 : undefined),
|
|
120
|
+
_useState10 = (0, _slicedToArray2["default"])(_useState9, 2),
|
|
121
|
+
lastValidYear = _useState10[0],
|
|
122
|
+
setLastValidYear = _useState10[1];
|
|
123
|
+
|
|
103
124
|
var colorsTheme = (0, _useTheme["default"])();
|
|
104
125
|
var translatedLabels = (0, _useTranslatedLabels["default"])();
|
|
105
126
|
var dateRef = (0, _react.useRef)(null);
|
|
127
|
+
(0, _react.useEffect)(function () {
|
|
128
|
+
if (value || value === "") setDayjsDate(getDate(value, format, lastValidYear, setLastValidYear));
|
|
129
|
+
}, [value, format, lastValidYear]);
|
|
106
130
|
(0, _react.useLayoutEffect)(function () {
|
|
107
131
|
if (!disabled) {
|
|
108
132
|
var actionButtonRef = dateRef === null || dateRef === void 0 ? void 0 : dateRef.current.querySelector("[title='Open calendar']");
|
|
@@ -116,45 +140,63 @@ var DxcDateInput = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref
|
|
|
116
140
|
|
|
117
141
|
var handleCalendarOnClick = function handleCalendarOnClick(newDate) {
|
|
118
142
|
var newValue = newDate.format(format.toUpperCase());
|
|
119
|
-
|
|
143
|
+
|
|
144
|
+
if (!value) {
|
|
145
|
+
setDayjsDate(newDate);
|
|
146
|
+
setInnerValue(newValue);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
setLastValidYear(newDate.get("year"));
|
|
120
150
|
newDate !== null && newDate !== void 0 && newDate.set("day", newDate.get("date")).toJSON() ? onChange === null || onChange === void 0 ? void 0 : onChange({
|
|
121
151
|
value: newValue,
|
|
122
|
-
date: newDate
|
|
152
|
+
date: newDate.toDate()
|
|
123
153
|
}) : onChange === null || onChange === void 0 ? void 0 : onChange({
|
|
124
154
|
value: newValue
|
|
125
155
|
});
|
|
126
156
|
};
|
|
127
157
|
|
|
128
|
-
var handleIOnChange = function handleIOnChange(
|
|
129
|
-
var newValue =
|
|
130
|
-
inputError =
|
|
158
|
+
var handleIOnChange = function handleIOnChange(_ref3) {
|
|
159
|
+
var newValue = _ref3.value,
|
|
160
|
+
inputError = _ref3.error;
|
|
131
161
|
value !== null && value !== void 0 ? value : setInnerValue(newValue);
|
|
132
|
-
var
|
|
133
|
-
var invalidDateMessage = newValue !== "" && !
|
|
162
|
+
var newDate = getDate(newValue, format, lastValidYear, setLastValidYear);
|
|
163
|
+
var invalidDateMessage = newValue !== "" && !newDate.isValid() && translatedLabels.dateInput.invalidDateErrorMessage;
|
|
134
164
|
var callbackParams = inputError || invalidDateMessage ? {
|
|
135
165
|
value: newValue,
|
|
136
166
|
error: inputError || invalidDateMessage
|
|
137
167
|
} : {
|
|
138
168
|
value: newValue
|
|
139
169
|
};
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
170
|
+
|
|
171
|
+
if (newDate.isValid()) {
|
|
172
|
+
setDayjsDate(newDate);
|
|
173
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(_objectSpread(_objectSpread({}, callbackParams), {}, {
|
|
174
|
+
date: newDate.toDate()
|
|
175
|
+
}));
|
|
176
|
+
} else {
|
|
177
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(callbackParams);
|
|
178
|
+
setLastValidYear(function (validYear) {
|
|
179
|
+
var _dayjsDate$get;
|
|
180
|
+
|
|
181
|
+
return (_dayjsDate$get = dayjsDate === null || dayjsDate === void 0 ? void 0 : dayjsDate.get("year")) !== null && _dayjsDate$get !== void 0 ? _dayjsDate$get : validYear;
|
|
182
|
+
});
|
|
183
|
+
setDayjsDate(null);
|
|
184
|
+
}
|
|
143
185
|
};
|
|
144
186
|
|
|
145
|
-
var handleIOnBlur = function handleIOnBlur(
|
|
146
|
-
var value =
|
|
147
|
-
inputError =
|
|
148
|
-
var
|
|
149
|
-
var invalidDateMessage = value !== "" && !
|
|
187
|
+
var handleIOnBlur = function handleIOnBlur(_ref4) {
|
|
188
|
+
var value = _ref4.value,
|
|
189
|
+
inputError = _ref4.error;
|
|
190
|
+
var date = getDate(value, format, lastValidYear, setLastValidYear);
|
|
191
|
+
var invalidDateMessage = value !== "" && !date.isValid() && translatedLabels.dateInput.invalidDateErrorMessage;
|
|
150
192
|
var callbackParams = inputError || invalidDateMessage ? {
|
|
151
193
|
value: value,
|
|
152
194
|
error: inputError || invalidDateMessage
|
|
153
195
|
} : {
|
|
154
196
|
value: value
|
|
155
197
|
};
|
|
156
|
-
|
|
157
|
-
date:
|
|
198
|
+
date.isValid() ? onBlur === null || onBlur === void 0 ? void 0 : onBlur(_objectSpread(_objectSpread({}, callbackParams), {}, {
|
|
199
|
+
date: date.toDate()
|
|
158
200
|
})) : onBlur === null || onBlur === void 0 ? void 0 : onBlur(callbackParams);
|
|
159
201
|
};
|
|
160
202
|
|
|
@@ -194,7 +236,7 @@ var DxcDateInput = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref
|
|
|
194
236
|
placeholder: placeholder ? format.toUpperCase() : null,
|
|
195
237
|
action: {
|
|
196
238
|
onClick: openCalendar,
|
|
197
|
-
icon: calendarIcon,
|
|
239
|
+
icon: _Icons.calendarIcon,
|
|
198
240
|
title: "Open calendar"
|
|
199
241
|
},
|
|
200
242
|
clearable: clearable,
|
|
@@ -218,7 +260,7 @@ var DxcDateInput = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref
|
|
|
218
260
|
}, /*#__PURE__*/_react["default"].createElement(_DatePicker["default"], {
|
|
219
261
|
id: calendarId,
|
|
220
262
|
onDateSelect: handleCalendarOnClick,
|
|
221
|
-
date:
|
|
263
|
+
date: dayjsDate
|
|
222
264
|
})))));
|
|
223
265
|
});
|
|
224
266
|
|
|
@@ -1,17 +1,31 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { userEvent, within, fireEvent, screen } from "@storybook/testing-library";
|
|
3
3
|
import DxcDateInput from "./DateInput";
|
|
4
|
+
import DxcDatePicker from "./DatePicker";
|
|
5
|
+
import YearPicker from "./YearPicker";
|
|
6
|
+
import Calendar from "./Calendar";
|
|
4
7
|
import Title from "../../.storybook/components/Title";
|
|
5
8
|
import ExampleContainer from "../../.storybook/components/ExampleContainer";
|
|
6
9
|
import { BackgroundColorProvider } from "../BackgroundColorContext";
|
|
7
10
|
import DarkContainer from "../../.storybook/components/DarkSection";
|
|
11
|
+
import dayjs from "dayjs";
|
|
12
|
+
import useTheme from "../useTheme";
|
|
13
|
+
import { ThemeProvider } from "styled-components";
|
|
14
|
+
import { HalstackProvider } from "../HalstackContext";
|
|
8
15
|
|
|
9
16
|
export default {
|
|
10
17
|
title: "Date input",
|
|
11
18
|
component: DxcDateInput,
|
|
12
19
|
};
|
|
13
20
|
|
|
14
|
-
|
|
21
|
+
const opinionatedTheme = {
|
|
22
|
+
dateInput: {
|
|
23
|
+
baseColor: "#5f249f",
|
|
24
|
+
selectedFontColor: "#ffffff",
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
const DateInputChromatic = () => (
|
|
15
29
|
<>
|
|
16
30
|
<ExampleContainer>
|
|
17
31
|
<Title title="Complete date input" theme="light" level={4} />
|
|
@@ -22,7 +36,7 @@ export const Chromatic = () => (
|
|
|
22
36
|
<DxcDateInput
|
|
23
37
|
label="Disabled date input"
|
|
24
38
|
helperText="Help message"
|
|
25
|
-
defaultValue="06-04-
|
|
39
|
+
defaultValue="06-04-2007"
|
|
26
40
|
clearable
|
|
27
41
|
disabled
|
|
28
42
|
/>
|
|
@@ -33,7 +47,7 @@ export const Chromatic = () => (
|
|
|
33
47
|
</ExampleContainer>
|
|
34
48
|
<ExampleContainer>
|
|
35
49
|
<Title title="Relation between icons" theme="light" level={4} />
|
|
36
|
-
<DxcDateInput label="Error date input" error="Error message." defaultValue="06-04-
|
|
50
|
+
<DxcDateInput label="Error date input" error="Error message." defaultValue="06-04-2007" clearable />
|
|
37
51
|
</ExampleContainer>
|
|
38
52
|
<BackgroundColorProvider color="#333333">
|
|
39
53
|
<DarkContainer>
|
|
@@ -58,7 +72,7 @@ export const Chromatic = () => (
|
|
|
58
72
|
</ExampleContainer>
|
|
59
73
|
<ExampleContainer>
|
|
60
74
|
<Title title="Relation between icons" theme="dark" level={4} />
|
|
61
|
-
<DxcDateInput label="Error date input" defaultValue="06-04-
|
|
75
|
+
<DxcDateInput label="Error date input" defaultValue="06-04-2007" error="Error message." clearable />
|
|
62
76
|
</ExampleContainer>
|
|
63
77
|
</DarkContainer>
|
|
64
78
|
</BackgroundColorProvider>
|
|
@@ -104,48 +118,187 @@ export const Chromatic = () => (
|
|
|
104
118
|
<Title title="FillParent size" theme="light" level={4} />
|
|
105
119
|
<DxcDateInput label="FillParent" size="fillParent" />
|
|
106
120
|
</ExampleContainer>
|
|
121
|
+
<ExampleContainer expanded>
|
|
122
|
+
<Title title="Year picker" theme="light" level={4} />
|
|
123
|
+
<DxcDateInput label="Date input" defaultValue="06-04-1905" />
|
|
124
|
+
</ExampleContainer>
|
|
107
125
|
</>
|
|
108
126
|
);
|
|
109
127
|
|
|
110
|
-
const
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
128
|
+
export const Chromatic = DateInputChromatic.bind({});
|
|
129
|
+
Chromatic.play = async ({ canvasElement }) => {
|
|
130
|
+
const canvas = within(canvasElement);
|
|
131
|
+
await userEvent.click(canvas.getAllByRole("combobox")[canvas.getAllByRole("combobox").length - 1]);
|
|
132
|
+
await fireEvent.click(screen.getByText("April 1905"));
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
const DateInputOpinionatedTheme = () => (
|
|
136
|
+
<>
|
|
137
|
+
<Title title="Opinionated theme" theme="light" level={2} />
|
|
138
|
+
<ExampleContainer>
|
|
139
|
+
<Title title="Enabled" theme="light" level={4} />
|
|
140
|
+
<HalstackProvider theme={opinionatedTheme}>
|
|
141
|
+
<DxcDateInput
|
|
142
|
+
label="Date input"
|
|
143
|
+
helperText="Help message"
|
|
144
|
+
format="dd/mm/yy"
|
|
145
|
+
placeholder
|
|
146
|
+
optional
|
|
147
|
+
defaultValue="10-10-2022"
|
|
148
|
+
/>
|
|
149
|
+
</HalstackProvider>
|
|
150
|
+
</ExampleContainer>
|
|
151
|
+
<ExampleContainer>
|
|
152
|
+
<Title title="Disabled" theme="light" level={4} />
|
|
153
|
+
<HalstackProvider theme={opinionatedTheme}>
|
|
154
|
+
<DxcDateInput label="Date input" helperText="Help message" format="dd/mm/yy" placeholder optional />
|
|
155
|
+
</HalstackProvider>
|
|
156
|
+
</ExampleContainer>
|
|
157
|
+
<ExampleContainer>
|
|
158
|
+
<Title title="Invalid" theme="light" level={4} />
|
|
159
|
+
<HalstackProvider theme={opinionatedTheme}>
|
|
160
|
+
<DxcDateInput label="Error date input" error="Error message." placeholder />
|
|
161
|
+
</HalstackProvider>
|
|
162
|
+
</ExampleContainer>
|
|
163
|
+
<ExampleContainer expanded>
|
|
164
|
+
<Title title="Date picker" theme="light" level={4} />
|
|
165
|
+
<HalstackProvider theme={opinionatedTheme}>
|
|
166
|
+
<DxcDateInput label="Date input" defaultValue="06-04-1905" />
|
|
167
|
+
</HalstackProvider>
|
|
168
|
+
</ExampleContainer>
|
|
169
|
+
</>
|
|
115
170
|
);
|
|
116
171
|
|
|
117
|
-
export const
|
|
118
|
-
|
|
172
|
+
export const DateInputOpinionated = DateInputOpinionatedTheme.bind({});
|
|
173
|
+
DateInputOpinionated.play = async ({ canvasElement }) => {
|
|
119
174
|
const canvas = within(canvasElement);
|
|
120
|
-
|
|
121
|
-
await userEvent.click(dateBtn);
|
|
175
|
+
await userEvent.click(canvas.getAllByRole("combobox")[canvas.getAllByRole("combobox").length - 1]);
|
|
122
176
|
};
|
|
123
177
|
|
|
124
|
-
const
|
|
178
|
+
const YearPickerOpinionatedTheme = () => (
|
|
125
179
|
<ExampleContainer expanded>
|
|
126
|
-
<Title title="
|
|
127
|
-
<
|
|
180
|
+
<Title title="Year picker" theme="light" level={4} />
|
|
181
|
+
<HalstackProvider theme={opinionatedTheme}>
|
|
182
|
+
<DxcDateInput label="Date input" defaultValue="06-04-1905" />
|
|
183
|
+
</HalstackProvider>
|
|
128
184
|
</ExampleContainer>
|
|
129
185
|
);
|
|
130
186
|
|
|
131
|
-
export const
|
|
132
|
-
|
|
187
|
+
export const YearPickerOpinionated = YearPickerOpinionatedTheme.bind({});
|
|
188
|
+
YearPickerOpinionated.play = async ({ canvasElement }) => {
|
|
133
189
|
const canvas = within(canvasElement);
|
|
134
190
|
await userEvent.click(canvas.getByRole("combobox"));
|
|
135
|
-
await fireEvent.click(screen.getByText("April
|
|
191
|
+
await fireEvent.click(screen.getByText("April 1905"));
|
|
136
192
|
};
|
|
137
193
|
|
|
138
|
-
const
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
194
|
+
const DatePickerButtonStates = () => {
|
|
195
|
+
const colorsTheme: any = useTheme();
|
|
196
|
+
return (
|
|
197
|
+
<>
|
|
198
|
+
<ExampleContainer>
|
|
199
|
+
<Title title="Show date picker over another element with z-index 0" theme="light" level={4} />
|
|
200
|
+
<div
|
|
201
|
+
style={{
|
|
202
|
+
display: "flex",
|
|
203
|
+
flexDirection: "column",
|
|
204
|
+
gap: "20px",
|
|
205
|
+
height: "200px",
|
|
206
|
+
width: "500px",
|
|
207
|
+
marginBottom: "250px",
|
|
208
|
+
padding: "20px",
|
|
209
|
+
border: "1px solid black",
|
|
210
|
+
borderRadius: "4px",
|
|
211
|
+
overflow: "auto",
|
|
212
|
+
zIndex: "1300",
|
|
213
|
+
position: "relative",
|
|
214
|
+
}}
|
|
215
|
+
>
|
|
216
|
+
<DxcDateInput label="From" defaultValue="01-12-1995" />
|
|
217
|
+
<DxcDateInput label="To" />
|
|
218
|
+
<button style={{ zIndex: "1", width: "100px" }}>Submit</button>
|
|
219
|
+
</div>
|
|
220
|
+
</ExampleContainer>
|
|
221
|
+
<ThemeProvider theme={colorsTheme}>
|
|
222
|
+
<ExampleContainer pseudoState="pseudo-focus">
|
|
223
|
+
<Title title="Isolated calendar focused" theme="light" level={4} />
|
|
224
|
+
<DxcDatePicker date={dayjs("06-04-1950", "DD-MM-YYYY")} onDateSelect={() => {}} id="test-calendar" />
|
|
225
|
+
</ExampleContainer>
|
|
226
|
+
<ExampleContainer pseudoState="pseudo-hover">
|
|
227
|
+
<Title title="Isolated calendar hovered" theme="light" level={4} />
|
|
228
|
+
<DxcDatePicker date={dayjs("06-04-1950", "DD-MM-YYYY")} onDateSelect={() => {}} id="test-calendar" />
|
|
229
|
+
</ExampleContainer>
|
|
230
|
+
<ExampleContainer pseudoState="pseudo-active">
|
|
231
|
+
<Title title="Isolated calendar actived" theme="light" level={4} />
|
|
232
|
+
<DxcDatePicker date={dayjs("06-04-1950", "DD-MM-YYYY")} onDateSelect={() => {}} id="test-calendar" />
|
|
233
|
+
</ExampleContainer>
|
|
234
|
+
</ThemeProvider>
|
|
235
|
+
</>
|
|
236
|
+
);
|
|
237
|
+
};
|
|
144
238
|
|
|
145
|
-
export const
|
|
146
|
-
|
|
239
|
+
export const DatePickerStates = DatePickerButtonStates.bind({});
|
|
240
|
+
DatePickerStates.play = async ({ canvasElement }) => {
|
|
147
241
|
const canvas = within(canvasElement);
|
|
148
|
-
|
|
149
|
-
await
|
|
150
|
-
|
|
242
|
+
const dateBtn = canvas.getAllByTitle("Open calendar")[0];
|
|
243
|
+
await userEvent.click(dateBtn);
|
|
244
|
+
};
|
|
245
|
+
|
|
246
|
+
export const YearPickerStates = () => {
|
|
247
|
+
const colorsTheme: any = useTheme();
|
|
248
|
+
return (
|
|
249
|
+
<>
|
|
250
|
+
<ThemeProvider theme={colorsTheme}>
|
|
251
|
+
<ExampleContainer pseudoState="pseudo-focus">
|
|
252
|
+
<Title title="Isolated year picker focused" theme="light" level={4} />
|
|
253
|
+
<YearPicker
|
|
254
|
+
selectedDate={dayjs("06-04-1905", "DD-MM-YYYY")}
|
|
255
|
+
onYearSelect={() => {}}
|
|
256
|
+
today={dayjs("1904-04-03", "YYYY-MM-DD")}
|
|
257
|
+
/>
|
|
258
|
+
</ExampleContainer>
|
|
259
|
+
<ExampleContainer pseudoState="pseudo-hover">
|
|
260
|
+
<Title title="Isolated year picker hovered" theme="light" level={4} />
|
|
261
|
+
<YearPicker
|
|
262
|
+
selectedDate={dayjs("06-04-1905", "DD-MM-YYYY")}
|
|
263
|
+
onYearSelect={() => {}}
|
|
264
|
+
today={dayjs("1904-04-03", "YYYY-MM-DD")}
|
|
265
|
+
/>
|
|
266
|
+
</ExampleContainer>
|
|
267
|
+
<ExampleContainer pseudoState="pseudo-active">
|
|
268
|
+
<Title title="Isolated year picker actived" theme="light" level={4} />
|
|
269
|
+
<YearPicker
|
|
270
|
+
selectedDate={dayjs("06-04-1905", "DD-MM-YYYY")}
|
|
271
|
+
onYearSelect={() => {}}
|
|
272
|
+
today={dayjs("1904-04-03", "YYYY-MM-DD")}
|
|
273
|
+
/>
|
|
274
|
+
</ExampleContainer>
|
|
275
|
+
</ThemeProvider>
|
|
276
|
+
</>
|
|
277
|
+
);
|
|
278
|
+
};
|
|
279
|
+
|
|
280
|
+
export const DatePickerWithToday = () => {
|
|
281
|
+
const colorsTheme: any = useTheme();
|
|
282
|
+
return (
|
|
283
|
+
<ThemeProvider theme={colorsTheme}>
|
|
284
|
+
<ExampleContainer>
|
|
285
|
+
<Title title="Isolated calendar with today" theme="light" level={4} />
|
|
286
|
+
<Calendar
|
|
287
|
+
selectedDate={dayjs("06-04-1904", "DD-MM-YYYY")}
|
|
288
|
+
today={dayjs("1904-04-03", "YYYY-MM-DD")}
|
|
289
|
+
onInnerDateChange={() => {}}
|
|
290
|
+
onDaySelect={() => {}}
|
|
291
|
+
innerDate={dayjs("06-04-1904", "DD-MM-YYYY")}
|
|
292
|
+
/>
|
|
293
|
+
</ExampleContainer>
|
|
294
|
+
<ExampleContainer>
|
|
295
|
+
<Title title="Isolated year picker with today" theme="light" level={4} />
|
|
296
|
+
<YearPicker
|
|
297
|
+
selectedDate={dayjs("06-04-1905", "DD-MM-YYYY")}
|
|
298
|
+
onYearSelect={() => {}}
|
|
299
|
+
today={dayjs("1904-04-03", "YYYY-MM-DD")}
|
|
300
|
+
/>
|
|
301
|
+
</ExampleContainer>
|
|
302
|
+
</ThemeProvider>
|
|
303
|
+
);
|
|
151
304
|
};
|