@widergy/energy-ui 3.155.0 → 3.156.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/CHANGELOG.md +11 -6
- package/dist/components/UTDatePicker/index.js +12 -198
- package/dist/components/UTDatePicker/versions/V0/assets/calendar.svg +14 -0
- package/dist/components/UTDatePicker/{components → versions/V0/components}/Day/index.js +1 -1
- package/dist/components/UTDatePicker/versions/V0/index.js +213 -0
- package/dist/components/UTDatePicker/{theme.js → versions/V0/theme.js} +2 -2
- package/dist/components/UTDatePicker/versions/V1/README.md +89 -0
- package/dist/components/UTDatePicker/versions/V1/components/Calendar/index.js +97 -0
- package/dist/components/UTDatePicker/versions/V1/components/Day/index.js +46 -0
- package/dist/components/UTDatePicker/versions/V1/constants.js +16 -0
- package/dist/components/UTDatePicker/versions/V1/index.js +273 -0
- package/dist/components/UTDatePicker/versions/V1/stories/UTDatePickerV1.mdx +24 -0
- package/dist/components/UTDatePicker/versions/V1/stories/UTDatePickerV1.stories.js +249 -0
- package/dist/components/UTDatePicker/versions/V1/stories/storiesConstants.js +7 -0
- package/dist/components/UTDatePicker/versions/V1/styles.module.scss +68 -0
- package/dist/components/UTDatePicker/versions/V1/utils.js +41 -0
- package/dist/constants/testIds.js +9 -0
- package/dist/utils/hooks/useCSSVariables/constants.js +17 -1
- package/package.json +1 -1
- /package/dist/components/UTDatePicker/{components → versions/V0/components}/Day/constants.js +0 -0
- /package/dist/components/UTDatePicker/{constants.js → versions/V0/constants.js} +0 -0
- /package/dist/components/UTDatePicker/{types.js → versions/V0/types.js} +0 -0
- /package/dist/components/UTDatePicker/{utils.js → versions/V0/utils.js} +0 -0
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
8
|
+
var _dayjs = _interopRequireDefault(require("dayjs"));
|
|
9
|
+
require("dayjs/locale/es");
|
|
10
|
+
var _propTypes = require("prop-types");
|
|
11
|
+
var _testIds = require("../../../../../../constants/testIds");
|
|
12
|
+
var _UTButton = _interopRequireDefault(require("../../../../../UTButton"));
|
|
13
|
+
var _UTLabel = _interopRequireDefault(require("../../../../../UTLabel"));
|
|
14
|
+
var _Day = _interopRequireDefault(require("../Day"));
|
|
15
|
+
var _constants = require("../../constants");
|
|
16
|
+
var _stylesModule = _interopRequireDefault(require("../../styles.module.scss"));
|
|
17
|
+
var _utils = require("../../utils");
|
|
18
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
19
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (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 (const 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); }
|
|
20
|
+
const {
|
|
21
|
+
UTDatePickerV1TestID
|
|
22
|
+
} = _testIds.TEST_IDS;
|
|
23
|
+
const Calendar = _ref => {
|
|
24
|
+
let {
|
|
25
|
+
maxDate,
|
|
26
|
+
minDate,
|
|
27
|
+
onDaySelect,
|
|
28
|
+
pickedDate
|
|
29
|
+
} = _ref;
|
|
30
|
+
const [currentMonth, setCurrentMonth] = (0, _react.useState)(pickedDate || (0, _dayjs.default)());
|
|
31
|
+
(0, _react.useEffect)(() => {
|
|
32
|
+
if (pickedDate !== null && pickedDate !== void 0 && pickedDate.isValid()) setCurrentMonth(pickedDate);
|
|
33
|
+
}, [pickedDate]);
|
|
34
|
+
const weeks = (0, _utils.getWeeks)(currentMonth);
|
|
35
|
+
const handlePrevMonth = () => setCurrentMonth(prev => prev.subtract(1, 'month'));
|
|
36
|
+
const handleNextMonth = () => setCurrentMonth(prev => prev.add(1, 'month'));
|
|
37
|
+
const isDisabled = date => {
|
|
38
|
+
if (minDate && date.isBefore((0, _dayjs.default)(minDate, _constants.OUTPUT_LABEL_MASK), 'day')) return true;
|
|
39
|
+
if (maxDate && date.isAfter((0, _dayjs.default)(maxDate, _constants.OUTPUT_LABEL_MASK), 'day')) return true;
|
|
40
|
+
return false;
|
|
41
|
+
};
|
|
42
|
+
return /*#__PURE__*/_react.default.createElement("div", {
|
|
43
|
+
className: _stylesModule.default.calendarContainer,
|
|
44
|
+
"data-testid": UTDatePickerV1TestID.calendar
|
|
45
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
46
|
+
className: _stylesModule.default.nav
|
|
47
|
+
}, /*#__PURE__*/_react.default.createElement(_UTButton.default, {
|
|
48
|
+
colorTheme: "secondary",
|
|
49
|
+
dataTestId: UTDatePickerV1TestID.calendarPrevBtn,
|
|
50
|
+
Icon: "IconChevronLeft",
|
|
51
|
+
onClick: handlePrevMonth,
|
|
52
|
+
size: "small",
|
|
53
|
+
variant: "text"
|
|
54
|
+
}), /*#__PURE__*/_react.default.createElement(_UTLabel.default, {
|
|
55
|
+
align: "center",
|
|
56
|
+
className: _stylesModule.default.navLabel,
|
|
57
|
+
dataTestId: UTDatePickerV1TestID.calendarMonthYear,
|
|
58
|
+
variant: "body",
|
|
59
|
+
weight: "medium"
|
|
60
|
+
}, currentMonth.locale('es').format(_constants.MONTH_YEAR_FORMAT)), /*#__PURE__*/_react.default.createElement(_UTButton.default, {
|
|
61
|
+
colorTheme: "secondary",
|
|
62
|
+
dataTestId: UTDatePickerV1TestID.calendarNextBtn,
|
|
63
|
+
Icon: "IconChevronRight",
|
|
64
|
+
onClick: handleNextMonth,
|
|
65
|
+
size: "small",
|
|
66
|
+
variant: "text"
|
|
67
|
+
})), /*#__PURE__*/_react.default.createElement("div", {
|
|
68
|
+
className: _stylesModule.default.month
|
|
69
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
70
|
+
className: _stylesModule.default.week
|
|
71
|
+
}, _constants.WEEKDAYS_LABELS.map(label => /*#__PURE__*/_react.default.createElement(_UTLabel.default, {
|
|
72
|
+
className: "".concat(_stylesModule.default.dayCell, " ").concat(_stylesModule.default.dayHeader),
|
|
73
|
+
key: label,
|
|
74
|
+
variant: "body",
|
|
75
|
+
weight: "medium"
|
|
76
|
+
}, label))), weeks.map(week => /*#__PURE__*/_react.default.createElement("div", {
|
|
77
|
+
className: _stylesModule.default.week,
|
|
78
|
+
key: week[0].format('YYYY-MM-DD')
|
|
79
|
+
}, week.map(date => {
|
|
80
|
+
const dayInCurrentMonth = date.month() === currentMonth.month();
|
|
81
|
+
return /*#__PURE__*/_react.default.createElement(_Day.default, {
|
|
82
|
+
date: date,
|
|
83
|
+
dayInCurrentMonth: dayInCurrentMonth,
|
|
84
|
+
isDisabled: isDisabled(date),
|
|
85
|
+
key: date.format('YYYY-MM-DD'),
|
|
86
|
+
onClick: onDaySelect,
|
|
87
|
+
pickedDate: pickedDate
|
|
88
|
+
});
|
|
89
|
+
})))));
|
|
90
|
+
};
|
|
91
|
+
Calendar.propTypes = {
|
|
92
|
+
maxDate: _propTypes.object,
|
|
93
|
+
minDate: _propTypes.object,
|
|
94
|
+
onDaySelect: _propTypes.func,
|
|
95
|
+
pickedDate: _propTypes.object
|
|
96
|
+
};
|
|
97
|
+
var _default = exports.default = Calendar;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
8
|
+
var _dayjs = _interopRequireDefault(require("dayjs"));
|
|
9
|
+
var _propTypes = require("prop-types");
|
|
10
|
+
var _UTButton = _interopRequireDefault(require("../../../../../UTButton"));
|
|
11
|
+
var _utils = require("../../utils");
|
|
12
|
+
var _constants = require("../../constants");
|
|
13
|
+
var _stylesModule = _interopRequireDefault(require("../../styles.module.scss"));
|
|
14
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
15
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (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 (const 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); }
|
|
16
|
+
const Day = _ref => {
|
|
17
|
+
let {
|
|
18
|
+
date,
|
|
19
|
+
dayInCurrentMonth,
|
|
20
|
+
isDisabled,
|
|
21
|
+
onClick,
|
|
22
|
+
pickedDate
|
|
23
|
+
} = _ref;
|
|
24
|
+
const selected = (0, _utils.isSelected)(date, pickedDate);
|
|
25
|
+
const rootClass = [_stylesModule.default.dayCell, selected && _stylesModule.default.daySelected, !dayInCurrentMonth && _stylesModule.default.otherMonthDay].filter(Boolean).join(' ');
|
|
26
|
+
return /*#__PURE__*/_react.default.createElement(_UTButton.default, {
|
|
27
|
+
classNames: {
|
|
28
|
+
root: rootClass
|
|
29
|
+
},
|
|
30
|
+
colorTheme: selected ? 'negative' : undefined,
|
|
31
|
+
disabled: isDisabled && dayInCurrentMonth,
|
|
32
|
+
onClick: () => {
|
|
33
|
+
if (!isDisabled) onClick(date);
|
|
34
|
+
},
|
|
35
|
+
size: "medium",
|
|
36
|
+
variant: "text"
|
|
37
|
+
}, (0, _dayjs.default)(date).format(_constants.DAY_NUMBER_FORMAT));
|
|
38
|
+
};
|
|
39
|
+
Day.propTypes = {
|
|
40
|
+
date: _propTypes.object,
|
|
41
|
+
dayInCurrentMonth: _propTypes.bool,
|
|
42
|
+
isDisabled: _propTypes.bool,
|
|
43
|
+
onClick: _propTypes.func,
|
|
44
|
+
pickedDate: _propTypes.object
|
|
45
|
+
};
|
|
46
|
+
var _default = exports.default = /*#__PURE__*/(0, _react.memo)(Day);
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.WEEKDAYS_LABELS = exports.TYPING_ERROR_MESSAGE = exports.OUTPUT_LABEL_MASK = exports.MONTH_YEAR_FORMAT = exports.DEFAULT_PROPS = exports.DEFAULT_PLACEHOLDER = exports.DAY_NUMBER_FORMAT = void 0;
|
|
7
|
+
const OUTPUT_LABEL_MASK = exports.OUTPUT_LABEL_MASK = 'DD/MM/YYYY';
|
|
8
|
+
const WEEKDAYS_LABELS = exports.WEEKDAYS_LABELS = ['Dom', 'Lun', 'Mar', 'Mie', 'Jue', 'Vie', 'Sab'];
|
|
9
|
+
const MONTH_YEAR_FORMAT = exports.MONTH_YEAR_FORMAT = 'MMMM YYYY';
|
|
10
|
+
const DAY_NUMBER_FORMAT = exports.DAY_NUMBER_FORMAT = 'DD';
|
|
11
|
+
const DEFAULT_PLACEHOLDER = exports.DEFAULT_PLACEHOLDER = 'DD/MM/AAAA';
|
|
12
|
+
const TYPING_ERROR_MESSAGE = exports.TYPING_ERROR_MESSAGE = 'Fecha inválida';
|
|
13
|
+
const DEFAULT_PROPS = exports.DEFAULT_PROPS = {
|
|
14
|
+
variant: 'select',
|
|
15
|
+
size: 'sm'
|
|
16
|
+
};
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
8
|
+
var _Popover = _interopRequireDefault(require("@material-ui/core/Popover"));
|
|
9
|
+
var _dayjs = _interopRequireDefault(require("dayjs"));
|
|
10
|
+
var _customParseFormat = _interopRequireDefault(require("dayjs/plugin/customParseFormat"));
|
|
11
|
+
var _propTypes = require("prop-types");
|
|
12
|
+
var _UTBaseInputField = _interopRequireDefault(require("../../../UTBaseInputField"));
|
|
13
|
+
var _UTButton = _interopRequireDefault(require("../../../UTButton"));
|
|
14
|
+
var _UTFieldLabel = _interopRequireDefault(require("../../../UTFieldLabel"));
|
|
15
|
+
var _UTLabel = _interopRequireDefault(require("../../../UTLabel"));
|
|
16
|
+
var _UTValidation = _interopRequireDefault(require("../../../UTValidation"));
|
|
17
|
+
var _constants = require("../../../UTBaseInputField/constants");
|
|
18
|
+
var _testIds = require("../../../../constants/testIds");
|
|
19
|
+
var _Calendar = _interopRequireDefault(require("./components/Calendar"));
|
|
20
|
+
var _stylesModule = _interopRequireDefault(require("./styles.module.scss"));
|
|
21
|
+
var _constants2 = require("./constants");
|
|
22
|
+
var _utils = require("./utils");
|
|
23
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
24
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (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 (const 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); }
|
|
25
|
+
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
26
|
+
_dayjs.default.extend(_customParseFormat.default);
|
|
27
|
+
const {
|
|
28
|
+
UTDatePickerV1TestID
|
|
29
|
+
} = _testIds.TEST_IDS;
|
|
30
|
+
const CALENDAR_PAPER_PROPS = {
|
|
31
|
+
onMouseDown: e => e.preventDefault()
|
|
32
|
+
};
|
|
33
|
+
const UTDatePicker = _ref => {
|
|
34
|
+
let {
|
|
35
|
+
classNames = {},
|
|
36
|
+
CustomIcon,
|
|
37
|
+
disabled,
|
|
38
|
+
error = '',
|
|
39
|
+
helpText,
|
|
40
|
+
onChange = () => {},
|
|
41
|
+
placeholder,
|
|
42
|
+
popoverProps,
|
|
43
|
+
range,
|
|
44
|
+
readOnly = false,
|
|
45
|
+
required,
|
|
46
|
+
size = _constants2.DEFAULT_PROPS.size,
|
|
47
|
+
title,
|
|
48
|
+
value = '',
|
|
49
|
+
variant = _constants2.DEFAULT_PROPS.variant
|
|
50
|
+
} = _ref;
|
|
51
|
+
const {
|
|
52
|
+
maxDate,
|
|
53
|
+
minDate
|
|
54
|
+
} = range || {};
|
|
55
|
+
const [pickedDate, setPickedDate] = (0, _react.useState)(null);
|
|
56
|
+
const [isTyping, setIsTyping] = (0, _react.useState)(false);
|
|
57
|
+
const [typedValue, setTypedValue] = (0, _react.useState)('');
|
|
58
|
+
const [isOpen, setIsOpen] = (0, _react.useState)(false);
|
|
59
|
+
const [typingError, setTypingError] = (0, _react.useState)(false);
|
|
60
|
+
const inputContainerRef = (0, _react.useRef)(null);
|
|
61
|
+
const inputRef = (0, _react.useRef)(null);
|
|
62
|
+
(0, _react.useEffect)(() => {
|
|
63
|
+
setIsTyping(false);
|
|
64
|
+
setTypedValue('');
|
|
65
|
+
setTypingError(false);
|
|
66
|
+
if (!value && pickedDate !== null && pickedDate !== void 0 && pickedDate.isValid()) setPickedDate(null);else if ((0, _utils.dateMatchesFormat)(value, _constants2.OUTPUT_LABEL_MASK)) setPickedDate((0, _dayjs.default)(value, _constants2.OUTPUT_LABEL_MASK));else setPickedDate(null);
|
|
67
|
+
}, [value]);
|
|
68
|
+
const autoFormatDate = val => {
|
|
69
|
+
const digits = val.replace(/\D/g, '').slice(0, 8);
|
|
70
|
+
if (digits.length <= 2) return digits;
|
|
71
|
+
if (digits.length <= 4) return "".concat(digits.slice(0, 2), "/").concat(digits.slice(2));
|
|
72
|
+
return "".concat(digits.slice(0, 2), "/").concat(digits.slice(2, 4), "/").concat(digits.slice(4));
|
|
73
|
+
};
|
|
74
|
+
const openCalendar = () => {
|
|
75
|
+
var _inputRef$current;
|
|
76
|
+
if (disabled || readOnly) return;
|
|
77
|
+
setIsOpen(true);
|
|
78
|
+
(_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 || _inputRef$current.focus();
|
|
79
|
+
};
|
|
80
|
+
const handleClose = () => {
|
|
81
|
+
setIsOpen(false);
|
|
82
|
+
setTypingError(false);
|
|
83
|
+
if (!isTyping) return;
|
|
84
|
+
setIsTyping(false);
|
|
85
|
+
setTypedValue('');
|
|
86
|
+
if (value && (0, _utils.dateMatchesFormat)(value, _constants2.OUTPUT_LABEL_MASK)) {
|
|
87
|
+
setPickedDate((0, _dayjs.default)(value, _constants2.OUTPUT_LABEL_MASK));
|
|
88
|
+
} else {
|
|
89
|
+
setPickedDate(null);
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
const handleDaySelect = date => {
|
|
93
|
+
const finalDate = (0, _utils.getFinalDate)({
|
|
94
|
+
date,
|
|
95
|
+
maxDate,
|
|
96
|
+
minDate
|
|
97
|
+
});
|
|
98
|
+
setPickedDate(finalDate);
|
|
99
|
+
setIsTyping(false);
|
|
100
|
+
setTypedValue('');
|
|
101
|
+
setTypingError(false);
|
|
102
|
+
if (finalDate.isValid()) onChange(finalDate.format(_constants2.OUTPUT_LABEL_MASK));else onChange('');
|
|
103
|
+
setIsOpen(false);
|
|
104
|
+
};
|
|
105
|
+
const handleClear = e => {
|
|
106
|
+
e.stopPropagation();
|
|
107
|
+
setPickedDate(null);
|
|
108
|
+
setIsTyping(false);
|
|
109
|
+
setTypedValue('');
|
|
110
|
+
setTypingError(false);
|
|
111
|
+
onChange('');
|
|
112
|
+
};
|
|
113
|
+
const handleTextChange = e => {
|
|
114
|
+
var _e$nativeEvent$data, _e$nativeEvent;
|
|
115
|
+
const raw = isTyping ? e.target.value : (_e$nativeEvent$data = (_e$nativeEvent = e.nativeEvent) === null || _e$nativeEvent === void 0 ? void 0 : _e$nativeEvent.data) !== null && _e$nativeEvent$data !== void 0 ? _e$nativeEvent$data : '';
|
|
116
|
+
const formatted = autoFormatDate(raw);
|
|
117
|
+
setTypedValue(formatted);
|
|
118
|
+
setIsTyping(true);
|
|
119
|
+
const allDigitsEntered = formatted.replace(/\D/g, '').length === 8;
|
|
120
|
+
if (allDigitsEntered) {
|
|
121
|
+
const isValid = (0, _utils.dateMatchesFormat)(formatted, _constants2.OUTPUT_LABEL_MASK) && (0, _dayjs.default)(formatted, _constants2.OUTPUT_LABEL_MASK).isValid();
|
|
122
|
+
setTypingError(!isValid);
|
|
123
|
+
if (isValid) setPickedDate((0, _dayjs.default)(formatted, _constants2.OUTPUT_LABEL_MASK));
|
|
124
|
+
} else {
|
|
125
|
+
setTypingError(false);
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
const handleTextBlur = e => {
|
|
129
|
+
var _inputContainerRef$cu;
|
|
130
|
+
if ((_inputContainerRef$cu = inputContainerRef.current) !== null && _inputContainerRef$cu !== void 0 && _inputContainerRef$cu.contains(e.relatedTarget)) return;
|
|
131
|
+
setIsOpen(false);
|
|
132
|
+
setTypingError(false);
|
|
133
|
+
if (!isTyping) return;
|
|
134
|
+
setIsTyping(false);
|
|
135
|
+
setTypedValue('');
|
|
136
|
+
if (!typedValue) {
|
|
137
|
+
setPickedDate(null);
|
|
138
|
+
onChange('');
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
if ((0, _utils.dateMatchesFormat)(typedValue, _constants2.OUTPUT_LABEL_MASK)) {
|
|
142
|
+
const parsed = (0, _dayjs.default)(typedValue, _constants2.OUTPUT_LABEL_MASK);
|
|
143
|
+
if (parsed.isValid()) {
|
|
144
|
+
const finalDate = (0, _utils.getFinalDate)({
|
|
145
|
+
date: parsed,
|
|
146
|
+
maxDate,
|
|
147
|
+
minDate
|
|
148
|
+
});
|
|
149
|
+
setPickedDate(finalDate);
|
|
150
|
+
onChange(finalDate.format(_constants2.OUTPUT_LABEL_MASK));
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
setPickedDate(null);
|
|
155
|
+
onChange('');
|
|
156
|
+
};
|
|
157
|
+
const displayValue = isTyping ? typedValue : pickedDate !== null && pickedDate !== void 0 && pickedDate.isValid() ? pickedDate.format(_constants2.OUTPUT_LABEL_MASK) : '';
|
|
158
|
+
const hasError = !!error || typingError;
|
|
159
|
+
const hasValue = pickedDate === null || pickedDate === void 0 ? void 0 : pickedDate.isValid();
|
|
160
|
+
const displayPlaceholder = placeholder || _constants2.DEFAULT_PLACEHOLDER;
|
|
161
|
+
const showLeftAlertIcon = hasError && !disabled;
|
|
162
|
+
const showClearButton = (hasValue || isTyping) && !disabled && !readOnly;
|
|
163
|
+
const showCalendarIcon = !readOnly && !disabled;
|
|
164
|
+
const errorMessage = error || (typingError ? _constants2.TYPING_ERROR_MESSAGE : '');
|
|
165
|
+
const isTransparent = variant === 'picker';
|
|
166
|
+
const leftAdornments = showLeftAlertIcon ? [{
|
|
167
|
+
name: _constants.COMPONENT_KEYS.ICON,
|
|
168
|
+
props: {
|
|
169
|
+
showOnlyOnError: true
|
|
170
|
+
}
|
|
171
|
+
}] : [];
|
|
172
|
+
const xIconProps = {
|
|
173
|
+
colorTheme: 'dark',
|
|
174
|
+
Icon: 'IconX'
|
|
175
|
+
};
|
|
176
|
+
const calendarIconProps = {
|
|
177
|
+
colorTheme: hasError ? 'error' : isOpen ? 'primary' : 'gray',
|
|
178
|
+
Icon: CustomIcon || 'IconCalendarEvent'
|
|
179
|
+
};
|
|
180
|
+
const endAdornment = showCalendarIcon ? /*#__PURE__*/_react.default.createElement("div", {
|
|
181
|
+
className: _stylesModule.default.endAdornments
|
|
182
|
+
}, /*#__PURE__*/_react.default.createElement(_UTButton.default, _extends({}, showClearButton ? xIconProps : calendarIconProps, {
|
|
183
|
+
onClick: showClearButton ? handleClear : openCalendar,
|
|
184
|
+
size: "small",
|
|
185
|
+
variant: "text"
|
|
186
|
+
}))) : undefined;
|
|
187
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
|
|
188
|
+
className: _stylesModule.default.root,
|
|
189
|
+
"data-testid": UTDatePickerV1TestID.root
|
|
190
|
+
}, title && /*#__PURE__*/_react.default.createElement(_UTFieldLabel.default, {
|
|
191
|
+
className: classNames === null || classNames === void 0 ? void 0 : classNames.upperTitle,
|
|
192
|
+
required: required,
|
|
193
|
+
withMarkdown: true
|
|
194
|
+
}, title), /*#__PURE__*/_react.default.createElement("div", {
|
|
195
|
+
ref: inputContainerRef
|
|
196
|
+
}, /*#__PURE__*/_react.default.createElement(_UTBaseInputField.default, {
|
|
197
|
+
alwaysShowPlaceholder: true,
|
|
198
|
+
classNames: classNames,
|
|
199
|
+
dataTestId: UTDatePickerV1TestID.input,
|
|
200
|
+
inputRef: inputRef,
|
|
201
|
+
disabled: disabled,
|
|
202
|
+
error: hasError,
|
|
203
|
+
readOnly: readOnly,
|
|
204
|
+
inputSize: size === 'sm' ? 'small' : undefined,
|
|
205
|
+
variant: isTransparent ? 'transparent' : undefined,
|
|
206
|
+
leftAdornments: leftAdornments,
|
|
207
|
+
maxLength: 10,
|
|
208
|
+
muiProps: {
|
|
209
|
+
InputProps: {
|
|
210
|
+
endAdornment
|
|
211
|
+
},
|
|
212
|
+
onChange: handleTextChange
|
|
213
|
+
},
|
|
214
|
+
onBlur: handleTextBlur,
|
|
215
|
+
onFocus: openCalendar,
|
|
216
|
+
placeholder: displayPlaceholder,
|
|
217
|
+
value: displayValue
|
|
218
|
+
})), helpText && /*#__PURE__*/_react.default.createElement(_UTLabel.default, {
|
|
219
|
+
colorTheme: "gray",
|
|
220
|
+
variant: "small",
|
|
221
|
+
withMarkdown: true
|
|
222
|
+
}, helpText), variant === 'select' && errorMessage && /*#__PURE__*/_react.default.createElement(_UTValidation.default, {
|
|
223
|
+
dataTestId: UTDatePickerV1TestID.errorMessage,
|
|
224
|
+
validationData: [{
|
|
225
|
+
items: [{
|
|
226
|
+
status: 'error',
|
|
227
|
+
text: errorMessage
|
|
228
|
+
}]
|
|
229
|
+
}]
|
|
230
|
+
})), /*#__PURE__*/_react.default.createElement(_Popover.default, _extends({
|
|
231
|
+
anchorEl: inputContainerRef.current,
|
|
232
|
+
anchorOrigin: {
|
|
233
|
+
horizontal: 'left',
|
|
234
|
+
vertical: 'bottom'
|
|
235
|
+
},
|
|
236
|
+
disableAutoFocus: true,
|
|
237
|
+
disableEnforceFocus: true,
|
|
238
|
+
disableRestoreFocus: true,
|
|
239
|
+
onClose: handleClose,
|
|
240
|
+
open: isOpen,
|
|
241
|
+
PaperProps: CALENDAR_PAPER_PROPS,
|
|
242
|
+
transformOrigin: {
|
|
243
|
+
horizontal: 'left',
|
|
244
|
+
vertical: 'top'
|
|
245
|
+
}
|
|
246
|
+
}, popoverProps), /*#__PURE__*/_react.default.createElement(_Calendar.default, {
|
|
247
|
+
maxDate: maxDate,
|
|
248
|
+
minDate: minDate,
|
|
249
|
+
onDaySelect: handleDaySelect,
|
|
250
|
+
pickedDate: pickedDate
|
|
251
|
+
})));
|
|
252
|
+
};
|
|
253
|
+
UTDatePicker.propTypes = {
|
|
254
|
+
classNames: _propTypes.object,
|
|
255
|
+
CustomIcon: _propTypes.elementType,
|
|
256
|
+
disabled: _propTypes.bool,
|
|
257
|
+
error: _propTypes.string,
|
|
258
|
+
helpText: _propTypes.string,
|
|
259
|
+
onChange: _propTypes.func,
|
|
260
|
+
placeholder: _propTypes.string,
|
|
261
|
+
popoverProps: _propTypes.object,
|
|
262
|
+
range: (0, _propTypes.shape)({
|
|
263
|
+
maxDate: _propTypes.string,
|
|
264
|
+
minDate: _propTypes.string
|
|
265
|
+
}),
|
|
266
|
+
readOnly: _propTypes.bool,
|
|
267
|
+
required: _propTypes.bool,
|
|
268
|
+
size: _propTypes.string,
|
|
269
|
+
title: _propTypes.string,
|
|
270
|
+
value: _propTypes.string,
|
|
271
|
+
variant: (0, _propTypes.oneOf)(['select', 'picker'])
|
|
272
|
+
};
|
|
273
|
+
var _default = exports.default = UTDatePicker;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Canvas, Meta, Story } from '@storybook/blocks';
|
|
2
|
+
import * as UTDatePickerV1Stories from './UTDatePickerV1.stories';
|
|
3
|
+
|
|
4
|
+
<Meta of={UTDatePickerV1Stories} />
|
|
5
|
+
|
|
6
|
+
# UTDatePicker V1
|
|
7
|
+
|
|
8
|
+
Selector de fecha con input custom y calendario popup. Implementa 5 estados visuales: **default**, **selected**, **focus**, **error** y **readOnly**.
|
|
9
|
+
|
|
10
|
+
## Estados visuales
|
|
11
|
+
|
|
12
|
+
<Canvas of={UTDatePickerV1Stories.Default} />
|
|
13
|
+
<Canvas of={UTDatePickerV1Stories.Selected} />
|
|
14
|
+
<Canvas of={UTDatePickerV1Stories.Error} />
|
|
15
|
+
<Canvas of={UTDatePickerV1Stories.ReadOnly} />
|
|
16
|
+
<Canvas of={UTDatePickerV1Stories.Disabled} />
|
|
17
|
+
|
|
18
|
+
## Con rango de fechas
|
|
19
|
+
|
|
20
|
+
<Canvas of={UTDatePickerV1Stories.WithRange} />
|
|
21
|
+
|
|
22
|
+
## Con texto de ayuda
|
|
23
|
+
|
|
24
|
+
<Canvas of={UTDatePickerV1Stories.WithHelpText} />
|