@widergy/energy-ui 3.155.0 → 3.157.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 +26 -6
- package/dist/components/UTAttachmentList/UTAttachmentList.stories.js +29 -1
- package/dist/components/UTAttachmentList/index.js +3 -0
- package/dist/components/UTAttachmentList/layout.js +8 -6
- package/dist/components/UTAttachmentList/theme.js +4 -1
- package/dist/components/UTAttachmentList/utils.js +10 -1
- 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,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} />
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = exports.WithTitleRequired = exports.WithTitleAndError = exports.WithTitle = exports.WithRange = exports.WithHelpText = exports.TestSite = exports.Selected = exports.ReadOnlyEmpty = exports.ReadOnly = exports.Playground = exports.Focus = exports.Error = exports.Disabled = exports.Default = void 0;
|
|
7
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
8
|
+
var _propTypes = require("prop-types");
|
|
9
|
+
var _ = _interopRequireDefault(require("../../.."));
|
|
10
|
+
var _storiesConstants = require("./storiesConstants");
|
|
11
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
12
|
+
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); }
|
|
13
|
+
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); }
|
|
14
|
+
var _default = exports.default = {
|
|
15
|
+
title: 'Energy-UI/UTDatePicker/V1',
|
|
16
|
+
component: _.default,
|
|
17
|
+
args: {
|
|
18
|
+
version: 'V1'
|
|
19
|
+
},
|
|
20
|
+
decorators: [Story => /*#__PURE__*/_react.default.createElement("div", {
|
|
21
|
+
style: {
|
|
22
|
+
maxWidth: 350
|
|
23
|
+
}
|
|
24
|
+
}, /*#__PURE__*/_react.default.createElement(Story, null))]
|
|
25
|
+
};
|
|
26
|
+
const ControlledWrapper = _ref => {
|
|
27
|
+
let {
|
|
28
|
+
error = '',
|
|
29
|
+
helpText = '',
|
|
30
|
+
initialValue = '',
|
|
31
|
+
readOnly = false,
|
|
32
|
+
...props
|
|
33
|
+
} = _ref;
|
|
34
|
+
const [value, setValue] = (0, _react.useState)(initialValue);
|
|
35
|
+
return /*#__PURE__*/_react.default.createElement(_.default, _extends({
|
|
36
|
+
error: error,
|
|
37
|
+
helpText: helpText,
|
|
38
|
+
onChange: setValue,
|
|
39
|
+
readOnly: readOnly,
|
|
40
|
+
value: value,
|
|
41
|
+
version: "V1"
|
|
42
|
+
}, props));
|
|
43
|
+
};
|
|
44
|
+
ControlledWrapper.propTypes = {
|
|
45
|
+
error: _propTypes.string,
|
|
46
|
+
helpText: _propTypes.string,
|
|
47
|
+
initialValue: _propTypes.string,
|
|
48
|
+
readOnly: _propTypes.bool
|
|
49
|
+
};
|
|
50
|
+
const FocusStory = () => {
|
|
51
|
+
const [value, setValue] = (0, _react.useState)('');
|
|
52
|
+
const wrapperRef = (0, _react.useRef)(null);
|
|
53
|
+
(0, _react.useEffect)(() => {
|
|
54
|
+
var _wrapperRef$current;
|
|
55
|
+
const input = (_wrapperRef$current = wrapperRef.current) === null || _wrapperRef$current === void 0 ? void 0 : _wrapperRef$current.querySelector('[data-testid="UTDatePickerV1.input"]');
|
|
56
|
+
if (input) input.focus();
|
|
57
|
+
}, []);
|
|
58
|
+
return /*#__PURE__*/_react.default.createElement("div", {
|
|
59
|
+
ref: wrapperRef
|
|
60
|
+
}, /*#__PURE__*/_react.default.createElement(_.default, {
|
|
61
|
+
onChange: setValue,
|
|
62
|
+
value: value,
|
|
63
|
+
version: "V1"
|
|
64
|
+
}));
|
|
65
|
+
};
|
|
66
|
+
const TestSiteStory = () => {
|
|
67
|
+
const [value, setValue] = (0, _react.useState)('');
|
|
68
|
+
const [errorValue, setErrorValue] = (0, _react.useState)('');
|
|
69
|
+
return /*#__PURE__*/_react.default.createElement("div", {
|
|
70
|
+
style: {
|
|
71
|
+
display: 'flex',
|
|
72
|
+
flexDirection: 'column',
|
|
73
|
+
gap: '24px',
|
|
74
|
+
padding: '16px'
|
|
75
|
+
}
|
|
76
|
+
}, /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("p", {
|
|
77
|
+
style: {
|
|
78
|
+
marginBottom: 8
|
|
79
|
+
}
|
|
80
|
+
}, "Default"), /*#__PURE__*/_react.default.createElement(_.default, {
|
|
81
|
+
onChange: setValue,
|
|
82
|
+
value: value,
|
|
83
|
+
version: "V1"
|
|
84
|
+
})), /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("p", {
|
|
85
|
+
style: {
|
|
86
|
+
marginBottom: 8
|
|
87
|
+
}
|
|
88
|
+
}, "Selected (15/06/2024)"), /*#__PURE__*/_react.default.createElement(_.default, {
|
|
89
|
+
onChange: () => {},
|
|
90
|
+
value: "15/06/2024",
|
|
91
|
+
version: "V1"
|
|
92
|
+
})), /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("p", {
|
|
93
|
+
style: {
|
|
94
|
+
marginBottom: 8
|
|
95
|
+
}
|
|
96
|
+
}, "Error"), /*#__PURE__*/_react.default.createElement(_.default, {
|
|
97
|
+
error: _storiesConstants.ERROR_MOCK,
|
|
98
|
+
onChange: setErrorValue,
|
|
99
|
+
value: errorValue,
|
|
100
|
+
version: "V1"
|
|
101
|
+
})), /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("p", {
|
|
102
|
+
style: {
|
|
103
|
+
marginBottom: 8
|
|
104
|
+
}
|
|
105
|
+
}, "Error con valor"), /*#__PURE__*/_react.default.createElement(_.default, {
|
|
106
|
+
error: _storiesConstants.ERROR_MOCK,
|
|
107
|
+
onChange: () => {},
|
|
108
|
+
value: "15/06/2024",
|
|
109
|
+
version: "V1"
|
|
110
|
+
})), /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("p", {
|
|
111
|
+
style: {
|
|
112
|
+
marginBottom: 8
|
|
113
|
+
}
|
|
114
|
+
}, "ReadOnly con valor"), /*#__PURE__*/_react.default.createElement(_.default, {
|
|
115
|
+
onChange: () => {},
|
|
116
|
+
readOnly: true,
|
|
117
|
+
value: "20/03/2024",
|
|
118
|
+
version: "V1"
|
|
119
|
+
})), /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("p", {
|
|
120
|
+
style: {
|
|
121
|
+
marginBottom: 8
|
|
122
|
+
}
|
|
123
|
+
}, "Disabled"), /*#__PURE__*/_react.default.createElement(_.default, {
|
|
124
|
+
disabled: true,
|
|
125
|
+
onChange: () => {},
|
|
126
|
+
value: "",
|
|
127
|
+
version: "V1"
|
|
128
|
+
})));
|
|
129
|
+
};
|
|
130
|
+
const Playground = exports.Playground = {
|
|
131
|
+
render: args => /*#__PURE__*/_react.default.createElement(ControlledWrapper, args),
|
|
132
|
+
argTypes: {
|
|
133
|
+
variant: {
|
|
134
|
+
control: 'select',
|
|
135
|
+
options: ['select', 'picker']
|
|
136
|
+
},
|
|
137
|
+
disabled: {
|
|
138
|
+
control: 'boolean'
|
|
139
|
+
},
|
|
140
|
+
error: {
|
|
141
|
+
control: 'text'
|
|
142
|
+
},
|
|
143
|
+
helpText: {
|
|
144
|
+
control: 'text'
|
|
145
|
+
},
|
|
146
|
+
placeholder: {
|
|
147
|
+
control: 'text'
|
|
148
|
+
},
|
|
149
|
+
readOnly: {
|
|
150
|
+
control: 'boolean'
|
|
151
|
+
},
|
|
152
|
+
required: {
|
|
153
|
+
control: 'boolean'
|
|
154
|
+
},
|
|
155
|
+
title: {
|
|
156
|
+
control: 'text'
|
|
157
|
+
}
|
|
158
|
+
},
|
|
159
|
+
args: {
|
|
160
|
+
variant: 'select',
|
|
161
|
+
disabled: false,
|
|
162
|
+
error: '',
|
|
163
|
+
helpText: '',
|
|
164
|
+
placeholder: '',
|
|
165
|
+
readOnly: false,
|
|
166
|
+
required: false,
|
|
167
|
+
title: ''
|
|
168
|
+
}
|
|
169
|
+
};
|
|
170
|
+
const Default = exports.Default = {
|
|
171
|
+
render: () => /*#__PURE__*/_react.default.createElement(ControlledWrapper, null)
|
|
172
|
+
};
|
|
173
|
+
const Selected = exports.Selected = {
|
|
174
|
+
render: () => /*#__PURE__*/_react.default.createElement(ControlledWrapper, {
|
|
175
|
+
initialValue: "15/06/2024"
|
|
176
|
+
})
|
|
177
|
+
};
|
|
178
|
+
const Focus = exports.Focus = {
|
|
179
|
+
render: () => /*#__PURE__*/_react.default.createElement(FocusStory, null),
|
|
180
|
+
parameters: {
|
|
181
|
+
docs: {
|
|
182
|
+
description: {
|
|
183
|
+
story: 'Hacer clic en el input para ver el estado focus con el calendario abierto.'
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
};
|
|
188
|
+
const Error = exports.Error = {
|
|
189
|
+
render: () => /*#__PURE__*/_react.default.createElement(ControlledWrapper, {
|
|
190
|
+
error: _storiesConstants.ERROR_MOCK
|
|
191
|
+
})
|
|
192
|
+
};
|
|
193
|
+
const ReadOnly = exports.ReadOnly = {
|
|
194
|
+
render: () => /*#__PURE__*/_react.default.createElement(ControlledWrapper, {
|
|
195
|
+
initialValue: "15/06/2024",
|
|
196
|
+
readOnly: true
|
|
197
|
+
})
|
|
198
|
+
};
|
|
199
|
+
const ReadOnlyEmpty = exports.ReadOnlyEmpty = {
|
|
200
|
+
render: () => /*#__PURE__*/_react.default.createElement(ControlledWrapper, {
|
|
201
|
+
readOnly: true
|
|
202
|
+
})
|
|
203
|
+
};
|
|
204
|
+
const pad = n => String(n).padStart(2, '0');
|
|
205
|
+
const formatDate = d => "".concat(pad(d.getDate()), "/").concat(pad(d.getMonth() + 1), "/").concat(d.getFullYear());
|
|
206
|
+
const addDays = (d, n) => {
|
|
207
|
+
const r = new Date(d);
|
|
208
|
+
r.setDate(r.getDate() + n);
|
|
209
|
+
return r;
|
|
210
|
+
};
|
|
211
|
+
const today = new Date();
|
|
212
|
+
const WithRange = exports.WithRange = {
|
|
213
|
+
render: () => /*#__PURE__*/_react.default.createElement(ControlledWrapper, {
|
|
214
|
+
range: {
|
|
215
|
+
minDate: formatDate(addDays(today, -30)),
|
|
216
|
+
maxDate: formatDate(addDays(today, 30))
|
|
217
|
+
}
|
|
218
|
+
})
|
|
219
|
+
};
|
|
220
|
+
const Disabled = exports.Disabled = {
|
|
221
|
+
render: () => /*#__PURE__*/_react.default.createElement(ControlledWrapper, {
|
|
222
|
+
disabled: true
|
|
223
|
+
})
|
|
224
|
+
};
|
|
225
|
+
const WithHelpText = exports.WithHelpText = {
|
|
226
|
+
render: () => /*#__PURE__*/_react.default.createElement(ControlledWrapper, {
|
|
227
|
+
helpText: "Seleccion\xE1 una fecha dentro del rango permitido."
|
|
228
|
+
})
|
|
229
|
+
};
|
|
230
|
+
const WithTitle = exports.WithTitle = {
|
|
231
|
+
render: () => /*#__PURE__*/_react.default.createElement(ControlledWrapper, {
|
|
232
|
+
title: "Fecha de nacimiento"
|
|
233
|
+
})
|
|
234
|
+
};
|
|
235
|
+
const WithTitleRequired = exports.WithTitleRequired = {
|
|
236
|
+
render: () => /*#__PURE__*/_react.default.createElement(ControlledWrapper, {
|
|
237
|
+
required: true,
|
|
238
|
+
title: "Fecha de nacimiento"
|
|
239
|
+
})
|
|
240
|
+
};
|
|
241
|
+
const WithTitleAndError = exports.WithTitleAndError = {
|
|
242
|
+
render: () => /*#__PURE__*/_react.default.createElement(ControlledWrapper, {
|
|
243
|
+
error: _storiesConstants.ERROR_MOCK,
|
|
244
|
+
title: "Fecha de nacimiento"
|
|
245
|
+
})
|
|
246
|
+
};
|
|
247
|
+
const TestSite = exports.TestSite = {
|
|
248
|
+
render: () => /*#__PURE__*/_react.default.createElement(TestSiteStory, null)
|
|
249
|
+
};
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
.root {
|
|
2
|
+
display: flex;
|
|
3
|
+
flex-direction: column;
|
|
4
|
+
grid-gap: var(--UT-datepicker-root-gap);
|
|
5
|
+
position: relative;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
.endAdornments {
|
|
9
|
+
align-items: center;
|
|
10
|
+
display: flex;
|
|
11
|
+
flex-shrink: 0;
|
|
12
|
+
grid-gap: var(--UT-datepicker-adornments-gap);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.calendarContainer {
|
|
16
|
+
box-sizing: border-box;
|
|
17
|
+
display: flex;
|
|
18
|
+
flex-direction: column;
|
|
19
|
+
grid-gap: var(--UT-datepicker-calendar-gap);
|
|
20
|
+
padding: var(--UT-datepicker-calendar-padding);
|
|
21
|
+
width: var(--UT-datepicker-calendar-width);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.nav {
|
|
25
|
+
align-items: center;
|
|
26
|
+
display: flex;
|
|
27
|
+
width: 100%;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.navLabel {
|
|
31
|
+
flex: 1;
|
|
32
|
+
text-transform: capitalize;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.month {
|
|
36
|
+
display: flex;
|
|
37
|
+
flex: 1;
|
|
38
|
+
flex-direction: column;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.week {
|
|
42
|
+
display: flex;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.dayCell {
|
|
46
|
+
box-sizing: border-box;
|
|
47
|
+
flex: 1;
|
|
48
|
+
min-width: 0;
|
|
49
|
+
padding: var(--UT-datepicker-day-padding-y) var(--UT-datepicker-day-padding-x) !important;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.dayHeader {
|
|
53
|
+
color: var(--UT-datepicker-header-day-color);
|
|
54
|
+
cursor: default;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.otherMonthDay {
|
|
58
|
+
visibility: hidden;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.daySelected {
|
|
62
|
+
background-color: var(--UT-datepicker-day-selected-bg, var(--actionAccent04));
|
|
63
|
+
|
|
64
|
+
&:hover {
|
|
65
|
+
background-color: var(--UT-datepicker-day-selected-bg, var(--actionAccent04)) !important;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.isSelected = exports.getWeeks = exports.getFinalDate = exports.dateMatchesFormat = void 0;
|
|
7
|
+
var _dayjs = _interopRequireDefault(require("dayjs"));
|
|
8
|
+
var _constants = require("./constants");
|
|
9
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
10
|
+
const isSelected = (date, selectedDate) => selectedDate && date.isSame(selectedDate, 'day');
|
|
11
|
+
exports.isSelected = isSelected;
|
|
12
|
+
const dateMatchesFormat = (date, targetFormat) => (0, _dayjs.default)(date, targetFormat).format(targetFormat) === date;
|
|
13
|
+
exports.dateMatchesFormat = dateMatchesFormat;
|
|
14
|
+
const getFinalDate = _ref => {
|
|
15
|
+
let {
|
|
16
|
+
date,
|
|
17
|
+
maxDate,
|
|
18
|
+
minDate
|
|
19
|
+
} = _ref;
|
|
20
|
+
const formattedDate = (0, _dayjs.default)(date);
|
|
21
|
+
if (maxDate && formattedDate !== null && formattedDate !== void 0 && formattedDate.isAfter((0, _dayjs.default)(maxDate, _constants.OUTPUT_LABEL_MASK))) return (0, _dayjs.default)(maxDate, _constants.OUTPUT_LABEL_MASK);
|
|
22
|
+
if (minDate && formattedDate !== null && formattedDate !== void 0 && formattedDate.isBefore((0, _dayjs.default)(minDate, _constants.OUTPUT_LABEL_MASK))) return (0, _dayjs.default)(minDate, _constants.OUTPUT_LABEL_MASK);
|
|
23
|
+
return formattedDate;
|
|
24
|
+
};
|
|
25
|
+
exports.getFinalDate = getFinalDate;
|
|
26
|
+
const getWeeks = month => {
|
|
27
|
+
const firstDay = month.startOf('month');
|
|
28
|
+
const lastDay = month.endOf('month');
|
|
29
|
+
const startDate = firstDay.subtract(firstDay.day(), 'day');
|
|
30
|
+
const weeks = [];
|
|
31
|
+
let current = startDate;
|
|
32
|
+
do {
|
|
33
|
+
const weekStart = current;
|
|
34
|
+
weeks.push(Array.from({
|
|
35
|
+
length: 7
|
|
36
|
+
}, (_, i) => weekStart.add(i, 'day')));
|
|
37
|
+
current = current.add(7, 'day');
|
|
38
|
+
} while (current.isBefore(lastDay) || current.isSame(lastDay, 'day'));
|
|
39
|
+
return weeks;
|
|
40
|
+
};
|
|
41
|
+
exports.getWeeks = getWeeks;
|
|
@@ -165,6 +165,15 @@ const TEST_IDS = exports.TEST_IDS = {
|
|
|
165
165
|
wrapperObservation: {
|
|
166
166
|
actionIcon: 'wrapperObservation.actionIcon.'
|
|
167
167
|
},
|
|
168
|
+
UTDatePickerV1TestID: {
|
|
169
|
+
root: 'UTDatePickerV1.root',
|
|
170
|
+
input: 'UTDatePickerV1.input',
|
|
171
|
+
calendar: 'UTDatePickerV1.calendar',
|
|
172
|
+
calendarPrevBtn: 'UTDatePickerV1.calendarPrevBtn',
|
|
173
|
+
calendarNextBtn: 'UTDatePickerV1.calendarNextBtn',
|
|
174
|
+
calendarMonthYear: 'UTDatePickerV1.calendarMonthYear',
|
|
175
|
+
errorMessage: 'UTDatePickerV1.errorMessage'
|
|
176
|
+
},
|
|
168
177
|
workflowContainer: {
|
|
169
178
|
bottomNav: {
|
|
170
179
|
backButton: "".concat(ID_CONSTANTS.WORKFLOW_CONTAINER, ".").concat(ID_CONSTANTS.BOTTOM_NAV, ".backButton"),
|