@toptal/picasso-lab 14.0.1-alpha-FX-2298-remove-fontSize-from-link.2604 → 14.0.1-alpha-SPT-2161-human-readable-dates-parsing-poc-1.2606
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.
@@ -34,6 +34,8 @@ export interface Props extends BaseProps, Omit<InputProps, 'value' | 'onSelect'
|
|
34
34
|
error?: boolean;
|
35
35
|
/** Function to override default markup to show Date */
|
36
36
|
renderDay?: (args: DayProps) => ReactNode;
|
37
|
+
/** Indicate if human-readable dates should be parsed inside `DatePicker`'s input */
|
38
|
+
parseHumanReadableDates?: boolean;
|
37
39
|
popperContainer?: HTMLElement;
|
38
40
|
/** Index of the first day of the week (0 - Sunday). Default is 1 - Monday */
|
39
41
|
weekStartsOn?: number;
|
package/DatePicker/DatePicker.js
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
8
|
+
});
|
9
|
+
};
|
1
10
|
var __rest = (this && this.__rest) || function (s, e) {
|
2
11
|
var t = {};
|
3
12
|
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
@@ -15,25 +24,30 @@ import { makeStyles } from '@material-ui/core/styles';
|
|
15
24
|
import { Container, Input, InputAdornment } from '@toptal/picasso';
|
16
25
|
import { Calendar16 } from '@toptal/picasso/Icon';
|
17
26
|
import Popper from '@toptal/picasso/Popper';
|
27
|
+
import Loader from '@toptal/picasso/Loader';
|
18
28
|
import { noop } from '@toptal/picasso/utils';
|
19
29
|
import formatDate from 'date-fns/format';
|
20
|
-
import React, { useCallback, useLayoutEffect, useRef, useState } from 'react';
|
30
|
+
import React, { useCallback, useLayoutEffect, useMemo, useRef, useState } from 'react';
|
21
31
|
import Calendar from '../Calendar';
|
22
32
|
import { DEFAULT_DATE_PICKER_DISPLAY_DATE_FORMAT, DEFAULT_DATE_PICKER_EDIT_DATE_FORMAT } from './constants';
|
23
33
|
import styles from './styles';
|
24
|
-
import { formatDateRange, datePickerParseDateString, timezoneConvert, timezoneFormat, isValidDateValue } from './utils';
|
34
|
+
import { formatDateRange, datePickerParseDateString, timezoneConvert, timezoneFormat, isValidDateValue, getStartOfTheDayDate, datePickerParseHumanReadableDateString, isDateValid } from './utils';
|
25
35
|
const EMPTY_INPUT_VALUE = '';
|
26
36
|
const useStyles = makeStyles(styles, {
|
27
37
|
name: 'PicassoDatePicker'
|
28
38
|
});
|
29
39
|
export const DatePicker = (props) => {
|
30
|
-
const { range, hideOnSelect, displayDateFormat = DEFAULT_DATE_PICKER_DISPLAY_DATE_FORMAT, editDateFormat = DEFAULT_DATE_PICKER_EDIT_DATE_FORMAT, onBlur = noop, onChange, value, width, icon, minDate, maxDate, disabledIntervals, popperContainer, renderDay, weekStartsOn, timezone, size, parseInputValue = datePickerParseDateString } = props, rest = __rest(props, ["range", "hideOnSelect", "displayDateFormat", "editDateFormat", "onBlur", "onChange", "value", "width", "icon", "minDate", "maxDate", "disabledIntervals", "popperContainer", "renderDay", "weekStartsOn", "timezone", "size", "parseInputValue"]);
|
40
|
+
const { range, hideOnSelect, displayDateFormat = DEFAULT_DATE_PICKER_DISPLAY_DATE_FORMAT, editDateFormat = DEFAULT_DATE_PICKER_EDIT_DATE_FORMAT, onBlur = noop, onChange, value, width, icon, minDate, maxDate, disabledIntervals, parseHumanReadableDates, popperContainer, renderDay, weekStartsOn, timezone, size, parseInputValue = datePickerParseDateString } = props, rest = __rest(props, ["range", "hideOnSelect", "displayDateFormat", "editDateFormat", "onBlur", "onChange", "value", "width", "icon", "minDate", "maxDate", "disabledIntervals", "parseHumanReadableDates", "popperContainer", "renderDay", "weekStartsOn", "timezone", "size", "parseInputValue"]);
|
31
41
|
const classes = useStyles();
|
32
42
|
const inputProps = rest;
|
33
43
|
const [calendarIsShown, setCalendarIsShown] = useState(false);
|
44
|
+
const [isInputLoading, setIsInputLoading] = useState(false);
|
34
45
|
const [isInputFocused, setIsInputFocused] = useState(false);
|
35
46
|
const [inputValue, setInputValue] = useState(EMPTY_INPUT_VALUE);
|
36
47
|
const [calendarValue, setCalendarValue] = useState(null);
|
48
|
+
const [normalizedMinDate, normalizedMaxDate] = useMemo(() => {
|
49
|
+
return [getStartOfTheDayDate(minDate), getStartOfTheDayDate(maxDate)];
|
50
|
+
}, [minDate, maxDate]);
|
37
51
|
const hideCalendar = () => setCalendarIsShown(false);
|
38
52
|
const showCalendar = () => setCalendarIsShown(true);
|
39
53
|
const inputRef = useRef(null);
|
@@ -84,6 +98,21 @@ export const DatePicker = (props) => {
|
|
84
98
|
onBlur();
|
85
99
|
setIsInputFocused(false);
|
86
100
|
};
|
101
|
+
const handleInputBlur = (event) => __awaiter(void 0, void 0, void 0, function* () {
|
102
|
+
event.persist();
|
103
|
+
const nextInputValue = event.currentTarget.value;
|
104
|
+
const isValidDate = isDateValid(nextInputValue, editDateFormat);
|
105
|
+
const shouldParseHumanReadableDate = parseHumanReadableDates && !range && nextInputValue && !isValidDate;
|
106
|
+
if (shouldParseHumanReadableDate) {
|
107
|
+
setIsInputLoading(true);
|
108
|
+
const parsedHumanReadableDate = yield datePickerParseHumanReadableDateString(nextInputValue, { timezone, minDate, maxDate });
|
109
|
+
setIsInputLoading(false);
|
110
|
+
if (parsedHumanReadableDate) {
|
111
|
+
onChange(parsedHumanReadableDate);
|
112
|
+
}
|
113
|
+
}
|
114
|
+
handleBlur(event);
|
115
|
+
});
|
87
116
|
const handleInputChange = (e) => {
|
88
117
|
// TODO: change this if manual entering of range is needed
|
89
118
|
if (range) {
|
@@ -99,8 +128,8 @@ export const DatePicker = (props) => {
|
|
99
128
|
const parsedInputValue = parseInputValue(nextValue, {
|
100
129
|
dateFormat: editDateFormat,
|
101
130
|
timezone,
|
102
|
-
minDate,
|
103
|
-
maxDate
|
131
|
+
minDate: normalizedMinDate,
|
132
|
+
maxDate: normalizedMaxDate
|
104
133
|
});
|
105
134
|
if (parsedInputValue) {
|
106
135
|
onChange(parsedInputValue);
|
@@ -160,11 +189,13 @@ export const DatePicker = (props) => {
|
|
160
189
|
setIsInputFocused(true);
|
161
190
|
};
|
162
191
|
const startAdornment = size !== 'small' ? (React.createElement(InputAdornment, { position: 'start', disablePointerEvents: true }, icon || React.createElement(Calendar16, null))) : undefined;
|
192
|
+
const loadingComponent = (React.createElement(InputAdornment, { "data-testid": 'loading-adornment', position: 'end', disablePointerEvents: true },
|
193
|
+
React.createElement(Loader, { size: 'small' })));
|
163
194
|
return (React.createElement(React.Fragment, null,
|
164
195
|
React.createElement(Container, { inline: width !== 'full', ref: inputWrapperRef },
|
165
|
-
React.createElement(Input, Object.assign({}, inputProps, { ref: inputRef, onKeyDown: handleInputKeydown, onClick: handleFocusOrClick, onFocus: handleFocusOrClick, onBlur:
|
196
|
+
React.createElement(Input, Object.assign({}, inputProps, { ref: inputRef, onKeyDown: handleInputKeydown, onClick: handleFocusOrClick, onFocus: handleFocusOrClick, onBlur: handleInputBlur, value: inputValue, onChange: handleInputChange, size: size, startAdornment: startAdornment, endAdornment: isInputLoading && loadingComponent, width: width }))),
|
166
197
|
inputWrapperRef.current && (React.createElement(Popper, { placement: 'bottom-start', open: calendarIsShown, anchorEl: inputWrapperRef.current, autoWidth: false, enableCompactMode: true, container: popperContainer, ref: popperRef },
|
167
|
-
React.createElement(Calendar, { "data-testid": 'calendar', ref: calendarRef, range: range, value: calendarValue !== null && calendarValue !== void 0 ? calendarValue : undefined, minDate:
|
198
|
+
React.createElement(Calendar, { "data-testid": 'calendar', ref: calendarRef, range: range, value: calendarValue !== null && calendarValue !== void 0 ? calendarValue : undefined, minDate: normalizedMinDate, maxDate: normalizedMaxDate, disabledIntervals: disabledIntervals, renderDay: renderDay, onChange: handleCalendarChange, onBlur: handleBlur, className: classes.calendar, weekStartsOn: weekStartsOn })))));
|
168
199
|
};
|
169
200
|
DatePicker.defaultProps = {
|
170
201
|
range: false,
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"DatePicker.js","sourceRoot":"","sources":["../../src/DatePicker/DatePicker.tsx"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"DatePicker.js","sourceRoot":"","sources":["../../src/DatePicker/DatePicker.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,sDAAsD;AACtD,+CAA+C,CAAC,mDAAmD;AACnG,OAAO,EAAE,UAAU,EAAS,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAEL,SAAS,EACT,KAAK,EACL,cAAc,EAEf,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,MAAM,MAAM,wBAAwB,CAAA;AAC3C,OAAO,MAAM,MAAM,wBAAwB,CAAA;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAA;AAC5C,OAAO,UAAU,MAAM,iBAAiB,CAAA;AAExC,OAAO,KAAK,EAAE,EAGZ,WAAW,EACX,eAAe,EACf,OAAO,EACP,MAAM,EACN,QAAQ,EACT,MAAM,OAAO,CAAA;AAEd,OAAO,QAIN,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,uCAAuC,EACvC,oCAAoC,EACrC,MAAM,aAAa,CAAA;AACpB,OAAO,MAAM,MAAM,UAAU,CAAA;AAE7B,OAAO,EACL,eAAe,EACf,yBAAyB,EACzB,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,oBAAoB,EACpB,sCAAsC,EACtC,WAAW,EACZ,MAAM,SAAS,CAAA;AAEhB,MAAM,iBAAiB,GAAG,EAAE,CAAA;AAE5B,MAAM,SAAS,GAAG,UAAU,CAAQ,MAAM,EAAE;IAC1C,IAAI,EAAE,mBAAmB;CAC1B,CAAC,CAAA;AAoDF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAY,EAAE,EAAE;IACzC,MAAM,EACJ,KAAK,EACL,YAAY,EACZ,iBAAiB,GAAG,uCAAuC,EAC3D,cAAc,GAAG,oCAAoC,EACrD,MAAM,GAAG,IAAI,EACb,QAAQ,EACR,KAAK,EACL,KAAK,EACL,IAAI,EACJ,OAAO,EACP,OAAO,EACP,iBAAiB,EACjB,uBAAuB,EACvB,eAAe,EACf,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,IAAI,EACJ,eAAe,GAAG,yBAAyB,KAEzC,KAAK,EADJ,IAAI,UACL,KAAK,EArBH,6QAqBL,CAAQ,CAAA;IACT,MAAM,OAAO,GAAG,SAAS,EAAE,CAAA;IAE3B,MAAM,UAAU,GAAG,IAAI,CAAA;IAEvB,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC7D,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC3D,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC3D,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,iBAAiB,CAAC,CAAA;IAC/D,MAAM,CACJ,aAAa,EACb,gBAAgB,CACjB,GAAG,QAAQ,CAA6B,IAAI,CAAC,CAAA;IAE9C,MAAM,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE;QAC1D,OAAO,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAA;IACvE,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA;IAEtB,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAA;IACpD,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAA;IAEnD,MAAM,QAAQ,GAAG,MAAM,CAAmB,IAAI,CAAC,CAAA;IAC/C,MAAM,SAAS,GAAG,MAAM,CAAW,IAAI,CAAC,CAAA;IACxC,MAAM,WAAW,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAA;IAChD,MAAM,eAAe,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAA;IAEpD,8CAA8C;IAC9C,MAAM,gBAAgB,GAAG,WAAW,CAClC,CAAC,aAA2C,EAAE,EAAE;QAC9C,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,EAAE;YACpC,OAAO,aAAa,CAAA;SACrB;QAED,OAAO,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC;YACjC,CAAC,CAAC,eAAe,CAAC,aAA8B,EAAE,iBAAiB,CAAC;YACpE,CAAC,CAAC,UAAU,CACR,aAAqB,EACrB,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,iBAAiB,CACpD,CAAA;IACP,CAAC,EACD,CAAC,cAAc,EAAE,cAAc,EAAE,iBAAiB,CAAC,CACpD,CAAA;IAED,uDAAuD;IACvD,eAAe,CAAC,GAAG,EAAE;QACnB,aAAa,CAAC,GAAG,EAAE;YACjB,IAAI,CAAC,KAAK,EAAE;gBACV,OAAO,iBAAiB,CAAA;aACzB;YAED,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE;gBAC5B,OAAO,KAAK,CAAA;aACb;YAED,OAAO,gBAAgB,CAAC,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAA;QAC3D,CAAC,CAAC,CAAA;IACJ,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAA;IAEvC,iDAAiD;IACjD,eAAe,CAAC,GAAG,EAAE;QACnB,gBAAgB,CAAC,GAAG,EAAE;YACpB,IAAI,CAAC,KAAK,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE;gBACtC,OAAO,IAAI,CAAA;aACZ;YAED,OAAO,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;QACzC,CAAC,CAAC,CAAA;IACJ,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAA;IAErB,MAAM,kBAAkB,GAAG,CAAC,IAAU,EAAE,EAAE;;QACxC,OAAO,CACL,CAAA,MAAA,SAAS,CAAC,OAAO,0CAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;aACxC,MAAA,eAAe,CAAC,OAAO,0CAAE,QAAQ,CAAC,IAAI,CAAC,CAAA,CACxC,CAAA;IACH,CAAC,CAAA;IAED,MAAM,UAAU,GAAG,CAAC,KAAuC,EAAE,EAAE;QAC7D,MAAM,yBAAyB,GAAG,kBAAkB,CAClD,CAAC,KAAK,CAAC,aAAa,IAAI,QAAQ,CAAC,aAAa,CAAS,CACxD,CAAA;QAED,IAAI,yBAAyB,EAAE;YAC7B,OAAM;SACP;QAED,YAAY,EAAE,CAAA;QACd,MAAM,EAAE,CAAA;QAER,iBAAiB,CAAC,KAAK,CAAC,CAAA;IAC1B,CAAC,CAAA;IAED,MAAM,eAAe,GAAG,CAAO,KAAyC,EAAE,EAAE;QAC1E,KAAK,CAAC,OAAO,EAAE,CAAA;QAEf,MAAM,cAAc,GAAG,KAAK,CAAC,aAAa,CAAC,KAAK,CAAA;QAEhD,MAAM,WAAW,GAAG,WAAW,CAAC,cAAc,EAAE,cAAc,CAAC,CAAA;QAC/D,MAAM,4BAA4B,GAChC,uBAAuB,IAAI,CAAC,KAAK,IAAI,cAAc,IAAI,CAAC,WAAW,CAAA;QAErE,IAAI,4BAA4B,EAAE;YAChC,iBAAiB,CAAC,IAAI,CAAC,CAAA;YAEvB,MAAM,uBAAuB,GAAG,MAAM,sCAAsC,CAC1E,cAAc,EACd,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,CAC/B,CAAA;YAED,iBAAiB,CAAC,KAAK,CAAC,CAAA;YAExB,IAAI,uBAAuB,EAAE;gBAC3B,QAAQ,CAAC,uBAAuB,CAAC,CAAA;aAClC;SACF;QAED,UAAU,CAAC,KAAK,CAAC,CAAA;IACnB,CAAC,CAAA,CAAA;IAED,MAAM,iBAAiB,GAAG,CACxB,CAEC,EACD,EAAE;QACF,0DAA0D;QAC1D,IAAI,KAAK,EAAE;YACT,OAAM;SACP;QAED,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAA;QAEhC,8DAA8D;QAC9D,aAAa,CAAC,SAAS,CAAC,CAAA;QACxB,IAAI,CAAC,SAAS,EAAE;YACd,QAAQ,CAAC,IAAI,CAAC,CAAA;SACf;aAAM;YACL,MAAM,gBAAgB,GAAG,eAAe,CAAC,SAAS,EAAE;gBAClD,UAAU,EAAE,cAAc;gBAC1B,QAAQ;gBACR,OAAO,EAAE,iBAAiB;gBAC1B,OAAO,EAAE,iBAAiB;aAC3B,CAAC,CAAA;YAEF,IAAI,gBAAgB,EAAE;gBACpB,QAAQ,CAAC,gBAAgB,CAAC,CAAA;aAC3B;SACF;IACH,CAAC,CAAA;IAED,MAAM,KAAK,GAAG,GAAG,EAAE;QACjB,IAAI,QAAQ,IAAI,QAAQ,CAAC,OAAO,EAAE;YAChC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;SACzB;IACH,CAAC,CAAA;IAED,MAAM,oBAAoB,GAAG,CAAC,SAA8B,EAAE,EAAE;QAC9D,MAAM,iBAAiB,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;YAChD,CAAC,CAAE,SAAS,CAAC,GAAG,CAAC,CAAC,IAAU,EAAE,EAAE,CAC5B,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CACb;YACrB,CAAC,CAAC,cAAc,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;QAEvC,QAAQ,CAAC,iBAAiB,CAAC,CAAA;QAC3B,gBAAgB,CAAC,iBAAiB,CAAC,CAAA;QAEnC,IAAI,YAAY,EAAE;YAChB,KAAK,EAAE,CAAA;YACP,YAAY,EAAE,CAAA;SACf;IACH,CAAC,CAAA;IAED,MAAM,kBAAkB,GAAG,CAAC,KAAsC,EAAE,EAAE;;QACpE,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAA;QAErB,IAAI,GAAG,KAAK,QAAQ,EAAE;YACpB,YAAY,EAAE,CAAA;YACd,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,CAAA;YAE1B,OAAM;SACP;QAED,IAAI,GAAG,KAAK,OAAO,EAAE;YACnB,IAAI,CAAC,eAAe,EAAE;gBACpB,YAAY,EAAE,CAAA;aACf;iBAAM;gBACL,YAAY,EAAE,CAAA;aACf;YAED,OAAM;SACP;QAED,IAAI,GAAG,KAAK,KAAK,IAAI,eAAe,EAAE;YACpC,KAAK,CAAC,cAAc,EAAE,CAAA;YACtB,KAAK,CAAC,eAAe,EAAE,CAAA;YAEvB,IAAI,CAAC,eAAe,EAAE;gBACpB,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,CAAA;aAC3B;iBAAM;gBACL,6DAA6D;gBAC7D,MAAM,WAAW,GAAG,MAAA,WAAW,CAAC,OAAO,0CAAE,aAAa,CACpD,6BAA6B,CAC9B,CAAA;gBAED,IAAI,WAAW,EAAE;oBACf,WAAW,CAAC,KAAK,EAAE,CAAA;iBACpB;aACF;SACF;IACH,CAAC,CAAA;IAED,MAAM,kBAAkB,GAAG,GAAG,EAAE;QAC9B,YAAY,EAAE,CAAA;QACd,iBAAiB,CAAC,IAAI,CAAC,CAAA;IACzB,CAAC,CAAA;IAED,MAAM,cAAc,GAClB,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CACjB,oBAAC,cAAc,IAAC,QAAQ,EAAC,OAAO,EAAC,oBAAoB,UAClD,IAAI,IAAI,oBAAC,UAAU,OAAG,CACR,CAClB,CAAC,CAAC,CAAC,SAAS,CAAA;IAEf,MAAM,gBAAgB,GAAG,CACvB,oBAAC,cAAc,mBACD,mBAAmB,EAC/B,QAAQ,EAAC,KAAK,EACd,oBAAoB;QAEpB,oBAAC,MAAM,IAAC,IAAI,EAAC,OAAO,GAAG,CACR,CAClB,CAAA;IAED,OAAO,CACL;QACE,oBAAC,SAAS,IAAC,MAAM,EAAE,KAAK,KAAK,MAAM,EAAE,GAAG,EAAE,eAAe;YACvD,oBAAC,KAAK,oBACA,UAAU,IACd,GAAG,EAAE,QAAQ,EACb,SAAS,EAAE,kBAAkB,EAC7B,OAAO,EAAE,kBAAkB,EAC3B,OAAO,EAAE,kBAAkB,EAC3B,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,iBAAiB,EAC3B,IAAI,EAAE,IAAI,EACV,cAAc,EAAE,cAAc,EAC9B,YAAY,EAAE,cAAc,IAAI,gBAAgB,EAChD,KAAK,EAAE,KAAK,IACZ,CACQ;QACX,eAAe,CAAC,OAAO,IAAI,CAC1B,oBAAC,MAAM,IACL,SAAS,EAAC,cAAc,EACxB,IAAI,EAAE,eAAe,EACrB,QAAQ,EAAE,eAAe,CAAC,OAAO,EACjC,SAAS,EAAE,KAAK,EAChB,iBAAiB,QACjB,SAAS,EAAE,eAAe,EAC1B,GAAG,EAAE,SAAS;YAEd,oBAAC,QAAQ,mBACK,UAAU,EACtB,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,aAAa,aAAb,aAAa,cAAb,aAAa,GAAI,SAAS,EACjC,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,iBAAiB,EAC1B,iBAAiB,EAAE,iBAAiB,EACpC,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,oBAAoB,EAC9B,MAAM,EAAE,UAAU,EAClB,SAAS,EAAE,OAAO,CAAC,QAAQ,EAC3B,YAAY,EAAE,YAAY,GAC1B,CACK,CACV,CACA,CACJ,CAAA;AACH,CAAC,CAAA;AAED,UAAU,CAAC,YAAY,GAAG;IACxB,KAAK,EAAE,KAAK;IACZ,YAAY,EAAE,IAAI;IAClB,MAAM,EAAE,IAAI;IACZ,cAAc,EAAE,YAAY;IAC5B,iBAAiB,EAAE,aAAa;IAChC,YAAY,EAAE,KAAK;CACpB,CAAA;AAED,UAAU,CAAC,WAAW,GAAG,YAAY,CAAA;AAErC,eAAe,UAAU,CAAA"}
|
package/DatePicker/utils.d.ts
CHANGED
@@ -8,4 +8,6 @@ export declare const isDateAfter: (date: Date, dateToCompare: Date) => boolean;
|
|
8
8
|
export declare const isDateBefore: (date: Date, dateToCompare: Date) => boolean;
|
9
9
|
export declare const isDateWithinInterval: (date: Date, minDate: Date | undefined, maxDate: Date | undefined) => boolean;
|
10
10
|
export declare const datePickerParseDateString: DatePickerStringParser;
|
11
|
+
export declare const datePickerParseHumanReadableDateString: (value: string, { timezone, minDate, maxDate }: Pick<Parameters<DatePickerStringParser>[1], 'timezone' | 'minDate' | 'maxDate'>) => Promise<Date | undefined>;
|
11
12
|
export declare const isValidDateValue: (dateValue: DateOrDateRangeType | string) => dateValue is DateOrDateRangeType;
|
13
|
+
export declare const getStartOfTheDayDate: (date?: Date | undefined) => Date | undefined;
|
package/DatePicker/utils.js
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
8
|
+
});
|
9
|
+
};
|
1
10
|
import parse from 'date-fns/parse';
|
2
11
|
import isValid from 'date-fns/isValid';
|
3
12
|
import formatDate from 'date-fns/format';
|
@@ -5,7 +14,7 @@ import isWithinInterval from 'date-fns/isWithinInterval';
|
|
5
14
|
import isEqual from 'date-fns/isEqual';
|
6
15
|
import isBefore from 'date-fns/isBefore';
|
7
16
|
import isAfter from 'date-fns/isAfter';
|
8
|
-
import { utcToZonedTime, format as tzFormat } from 'date-fns-tz';
|
17
|
+
import { utcToZonedTime, format as tzFormat, toDate } from 'date-fns-tz';
|
9
18
|
// Convert date to given timezone. If timezone is undefined, return given date as is.
|
10
19
|
export const timezoneConvert = (date, timeZone) => {
|
11
20
|
const convert = (dateToConvert) => {
|
@@ -83,5 +92,31 @@ export const datePickerParseDateString = (value, { dateFormat, timezone, minDate
|
|
83
92
|
}
|
84
93
|
return nextTimezoneValue;
|
85
94
|
};
|
95
|
+
export const datePickerParseHumanReadableDateString = (value, { timezone, minDate, maxDate }) => __awaiter(void 0, void 0, void 0, function* () {
|
96
|
+
const { parseDate } = yield import('chrono-node');
|
97
|
+
const parsedDate = parseDate(value, {
|
98
|
+
instant: new Date(),
|
99
|
+
timezone
|
100
|
+
}, {
|
101
|
+
forwardDate: true
|
102
|
+
});
|
103
|
+
if (!isValid(parsedDate)) {
|
104
|
+
return;
|
105
|
+
}
|
106
|
+
const nextTimezoneValue = timezoneFormat(parsedDate, timezone);
|
107
|
+
if (!isDateWithinInterval(nextTimezoneValue, minDate, maxDate)) {
|
108
|
+
return;
|
109
|
+
}
|
110
|
+
return nextTimezoneValue;
|
111
|
+
});
|
86
112
|
export const isValidDateValue = (dateValue) => typeof dateValue !== 'string';
|
113
|
+
export const getStartOfTheDayDate = (date) => {
|
114
|
+
if (!date) {
|
115
|
+
return date;
|
116
|
+
}
|
117
|
+
// to prevent mutation of the original date
|
118
|
+
const clonedDate = toDate(date);
|
119
|
+
clonedDate.setHours(0, 0, 0, 0);
|
120
|
+
return clonedDate;
|
121
|
+
};
|
87
122
|
//# sourceMappingURL=utils.js.map
|
package/DatePicker/utils.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/DatePicker/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,gBAAgB,CAAA;AAClC,OAAO,OAAO,MAAM,kBAAkB,CAAA;AACtC,OAAO,UAAU,MAAM,iBAAiB,CAAA;AACxC,OAAO,gBAAgB,MAAM,2BAA2B,CAAA;AACxD,OAAO,OAAO,MAAM,kBAAkB,CAAA;AACtC,OAAO,QAAQ,MAAM,mBAAmB,CAAA;AACxC,OAAO,OAAO,MAAM,kBAAkB,CAAA;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,IAAI,QAAQ,EAAE,MAAM,aAAa,CAAA;
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/DatePicker/utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@toptal/picasso-lab",
|
3
|
-
"version": "14.0.1-alpha-
|
3
|
+
"version": "14.0.1-alpha-SPT-2161-human-readable-dates-parsing-poc-1.2606+df88fbe0",
|
4
4
|
"description": "Lab components of Picasso",
|
5
5
|
"author": "Toptal",
|
6
6
|
"homepage": "https://github.com/toptal/picasso/tree/master/packages/picasso-lab#readme",
|
@@ -31,8 +31,9 @@
|
|
31
31
|
"react-dom": "^16.12.0"
|
32
32
|
},
|
33
33
|
"dependencies": {
|
34
|
-
"@toptal/picasso-provider": "0.4.1-alpha-
|
34
|
+
"@toptal/picasso-provider": "0.4.1-alpha-SPT-2161-human-readable-dates-parsing-poc-1.2606+df88fbe0",
|
35
35
|
"ap-style-title-case": "^1.1.2",
|
36
|
+
"chrono-node": "^2.3.3",
|
36
37
|
"classnames": "^2.3.1",
|
37
38
|
"date-fns": "^2.9.0",
|
38
39
|
"date-fns-tz": "^1.1.3",
|
@@ -51,5 +52,5 @@
|
|
51
52
|
"**/styles.ts",
|
52
53
|
"**/styles.js"
|
53
54
|
],
|
54
|
-
"gitHead": "
|
55
|
+
"gitHead": "df88fbe0f609c25c40476a155f39625de06490f4"
|
55
56
|
}
|