@salutejs/plasma-new-hope 0.147.0-canary.1440.10898537587.0 → 0.147.0-canary.1440.10900331749.0
Sign up to get free protection for your applications and to get access to all the features.
- package/cjs/components/DatePicker/hooks/useDatePicker.js +9 -2
- package/cjs/components/DatePicker/hooks/useDatePicker.js.map +1 -1
- package/emotion/cjs/components/DatePicker/DatePicker.template-doc.mdx +12 -9
- package/emotion/cjs/components/DatePicker/hooks/useDatePicker.js +9 -2
- package/emotion/es/components/DatePicker/DatePicker.template-doc.mdx +12 -9
- package/emotion/es/components/DatePicker/hooks/useDatePicker.js +9 -2
- package/es/components/DatePicker/hooks/useDatePicker.js +9 -2
- package/es/components/DatePicker/hooks/useDatePicker.js.map +1 -1
- package/package.json +2 -2
- package/styled-components/cjs/components/DatePicker/DatePicker.template-doc.mdx +12 -9
- package/styled-components/cjs/components/DatePicker/hooks/useDatePicker.js +9 -2
- package/styled-components/es/components/DatePicker/DatePicker.template-doc.mdx +12 -9
- package/styled-components/es/components/DatePicker/hooks/useDatePicker.js +9 -2
- package/types/components/DatePicker/hooks/useDatePicker.d.ts.map +1 -1
@@ -52,15 +52,22 @@ var useDatePicker = function useDatePicker(_ref) {
|
|
52
52
|
onChangeValue === null || onChangeValue === void 0 || onChangeValue(event, newValue);
|
53
53
|
return;
|
54
54
|
}
|
55
|
+
|
56
|
+
/**
|
57
|
+
* NOTE: если в формате даты есть месяц в полном названии или сокращенном,
|
58
|
+
* нужно дополнительно проводить валидацию на полноту введенной даты.
|
59
|
+
* Иначе dayjs циклически будет пытаться отформатировать некорректную дату.
|
60
|
+
*/
|
55
61
|
var hasMonthFullName = /M{3,4}/g.test(format);
|
56
62
|
var isValidMonth;
|
57
63
|
var isLengthEqual;
|
58
64
|
if (hasMonthFullName) {
|
65
|
+
datejs.customDayjs.locale(lang);
|
59
66
|
var firstIndexOfMonth = format.indexOf('M');
|
60
67
|
var lastIndexOfMonth = newValue.indexOf(dateFormatDelimiter(), firstIndexOfMonth);
|
61
68
|
var fullMonthName = !lastIndexOfMonth ? newValue.slice(firstIndexOfMonth) : newValue.slice(firstIndexOfMonth, lastIndexOfMonth);
|
62
|
-
|
63
|
-
isValidMonth = datejs.customDayjs("01 ".concat(fullMonthName, " 1970"),
|
69
|
+
var monthFormatting = format.replace(/[^M]/g, '');
|
70
|
+
isValidMonth = datejs.customDayjs("01 ".concat(fullMonthName, " 1970"), "DD ".concat(monthFormatting, " YYYY"), true).isValid();
|
64
71
|
isLengthEqual = format.length - 4 === newValue.length - fullMonthName.length;
|
65
72
|
}
|
66
73
|
if (!hasMonthFullName && (newValue === null || newValue === void 0 ? void 0 : newValue.length) === (format === null || format === void 0 ? void 0 : format.length) || isValidMonth && isLengthEqual) {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"useDatePicker.js","sources":["../../../../src/components/DatePicker/hooks/useDatePicker.ts"],"sourcesContent":["import { ChangeEvent, SyntheticEvent } from 'react';\n\nimport { classes } from '../DatePicker.tokens';\nimport type { UseDatePickerProps } from '../DatePickerBase.types';\nimport { formatCalendarValue, formatInputValue, getDateFromFormat, getMaskedDateOnInput } from '../utils/dateHelper';\nimport type { DateInfo } from '../../Calendar/Calendar.types';\nimport { customDayjs } from '../../../utils/datejs';\n\nexport const useDatePicker = ({\n currentValue,\n setInputValue,\n setCalendarValue,\n setIsInnerOpen,\n dateFormatDelimiter,\n format,\n lang = 'ru',\n disabled,\n readOnly,\n maskWithFormat,\n valueError,\n valueSuccess,\n inputRef,\n onToggle,\n onChangeValue,\n onCommitDate,\n}: UseDatePickerProps) => {\n const datePickerErrorClass = valueError ? classes.datePickerError : undefined;\n const datePickerSuccessClass = valueSuccess ? classes.datePickerSuccess : undefined;\n\n const handleToggle = (opened: boolean, event: SyntheticEvent | Event) => {\n if (disabled || readOnly) {\n return;\n }\n\n const isCalendarOpen = event.target === inputRef?.current ? true : opened;\n\n if (onToggle) {\n return onToggle(isCalendarOpen, event);\n }\n\n setIsInnerOpen(isCalendarOpen);\n };\n\n const handleChangeValue = (event: ChangeEvent<HTMLInputElement>) => {\n if (disabled || readOnly) {\n return;\n }\n const { value } = event.target;\n\n const newValue = maskWithFormat\n ? getMaskedDateOnInput(value, format, dateFormatDelimiter(), currentValue)\n : value;\n\n if (!format) {\n setCalendarValue(formatCalendarValue(newValue));\n setInputValue(formatInputValue({ value: newValue, format, lang }));\n onChangeValue?.(event, newValue);\n\n return;\n }\n\n const hasMonthFullName = /M{3,4}/g.test(format);\n let isValidMonth;\n let isLengthEqual;\n\n if (hasMonthFullName) {\n const firstIndexOfMonth = format.indexOf('M');\n const lastIndexOfMonth = newValue.indexOf(dateFormatDelimiter(), firstIndexOfMonth);\n\n const fullMonthName = !lastIndexOfMonth\n ? newValue.slice(firstIndexOfMonth)\n : newValue.slice(firstIndexOfMonth, lastIndexOfMonth);\n customDayjs.locale(lang);\n\n isValidMonth = customDayjs(`01 ${fullMonthName} 1970`, 'DD MMMM YYYY', true).isValid();\n isLengthEqual = format.length - 4 === newValue.length - fullMonthName.length;\n }\n\n if ((!hasMonthFullName && newValue?.length === format?.length) || (isValidMonth && isLengthEqual)) {\n setCalendarValue(formatCalendarValue(newValue, format, lang));\n }\n\n setInputValue(\n formatInputValue({ value: newValue, format, lang, hasMonthFullName, isValidMonth, isLengthEqual }),\n );\n\n onChangeValue?.(event, newValue);\n };\n\n const handleCommitDate = (\n date?: Date | string,\n applyFormat?: boolean,\n isCalendarValue?: boolean,\n dateInfo?: DateInfo,\n ) => {\n if (disabled || readOnly) {\n return;\n }\n\n if (!date) {\n setCalendarValue(undefined);\n setInputValue('');\n\n return onCommitDate?.('', false, true);\n }\n\n if (isCalendarValue) {\n setCalendarValue(formatCalendarValue(date, format, lang));\n setInputValue(formatInputValue({ value: date, format, lang }));\n onCommitDate?.(date, false, true, dateInfo);\n\n return;\n }\n\n const formatString = applyFormat ? format : undefined;\n\n const { value: newDate, isError, isSuccess } = getDateFromFormat(date, formatString, lang);\n\n setCalendarValue(formatCalendarValue(newDate, format, lang));\n setInputValue(formatInputValue({ value: newDate, format, lang }));\n\n onCommitDate?.(newDate, isError, isSuccess);\n };\n\n return {\n datePickerErrorClass,\n datePickerSuccessClass,\n handleToggle,\n handleChangeValue,\n handleCommitDate,\n };\n};\n"],"names":["useDatePicker","_ref","currentValue","setInputValue","setCalendarValue","setIsInnerOpen","dateFormatDelimiter","format","_ref$lang","lang","disabled","readOnly","maskWithFormat","valueError","valueSuccess","inputRef","onToggle","onChangeValue","onCommitDate","datePickerErrorClass","classes","datePickerError","undefined","datePickerSuccessClass","datePickerSuccess","handleToggle","opened","event","isCalendarOpen","target","current","handleChangeValue","value","newValue","getMaskedDateOnInput","formatCalendarValue","formatInputValue","hasMonthFullName","test","isValidMonth","isLengthEqual","firstIndexOfMonth","indexOf","lastIndexOfMonth","fullMonthName","slice","customDayjs","locale","concat","isValid","length","handleCommitDate","date","applyFormat","isCalendarValue","dateInfo","formatString","_getDateFromFormat","getDateFromFormat","newDate","isError","isSuccess"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"useDatePicker.js","sources":["../../../../src/components/DatePicker/hooks/useDatePicker.ts"],"sourcesContent":["import { ChangeEvent, SyntheticEvent } from 'react';\n\nimport { classes } from '../DatePicker.tokens';\nimport type { UseDatePickerProps } from '../DatePickerBase.types';\nimport { formatCalendarValue, formatInputValue, getDateFromFormat, getMaskedDateOnInput } from '../utils/dateHelper';\nimport type { DateInfo } from '../../Calendar/Calendar.types';\nimport { customDayjs } from '../../../utils/datejs';\n\nexport const useDatePicker = ({\n currentValue,\n setInputValue,\n setCalendarValue,\n setIsInnerOpen,\n dateFormatDelimiter,\n format,\n lang = 'ru',\n disabled,\n readOnly,\n maskWithFormat,\n valueError,\n valueSuccess,\n inputRef,\n onToggle,\n onChangeValue,\n onCommitDate,\n}: UseDatePickerProps) => {\n const datePickerErrorClass = valueError ? classes.datePickerError : undefined;\n const datePickerSuccessClass = valueSuccess ? classes.datePickerSuccess : undefined;\n\n const handleToggle = (opened: boolean, event: SyntheticEvent | Event) => {\n if (disabled || readOnly) {\n return;\n }\n\n const isCalendarOpen = event.target === inputRef?.current ? true : opened;\n\n if (onToggle) {\n return onToggle(isCalendarOpen, event);\n }\n\n setIsInnerOpen(isCalendarOpen);\n };\n\n const handleChangeValue = (event: ChangeEvent<HTMLInputElement>) => {\n if (disabled || readOnly) {\n return;\n }\n const { value } = event.target;\n\n const newValue = maskWithFormat\n ? getMaskedDateOnInput(value, format, dateFormatDelimiter(), currentValue)\n : value;\n\n if (!format) {\n setCalendarValue(formatCalendarValue(newValue));\n setInputValue(formatInputValue({ value: newValue, format, lang }));\n onChangeValue?.(event, newValue);\n\n return;\n }\n\n /**\n * NOTE: если в формате даты есть месяц в полном названии или сокращенном,\n * нужно дополнительно проводить валидацию на полноту введенной даты.\n * Иначе dayjs циклически будет пытаться отформатировать некорректную дату.\n */\n const hasMonthFullName = /M{3,4}/g.test(format);\n let isValidMonth;\n let isLengthEqual;\n\n if (hasMonthFullName) {\n customDayjs.locale(lang);\n\n const firstIndexOfMonth = format.indexOf('M');\n const lastIndexOfMonth = newValue.indexOf(dateFormatDelimiter(), firstIndexOfMonth);\n\n const fullMonthName = !lastIndexOfMonth\n ? newValue.slice(firstIndexOfMonth)\n : newValue.slice(firstIndexOfMonth, lastIndexOfMonth);\n\n const monthFormatting = format.replace(/[^M]/g, '');\n\n isValidMonth = customDayjs(`01 ${fullMonthName} 1970`, `DD ${monthFormatting} YYYY`, true).isValid();\n isLengthEqual = format.length - 4 === newValue.length - fullMonthName.length;\n }\n\n if ((!hasMonthFullName && newValue?.length === format?.length) || (isValidMonth && isLengthEqual)) {\n setCalendarValue(formatCalendarValue(newValue, format, lang));\n }\n\n setInputValue(\n formatInputValue({ value: newValue, format, lang, hasMonthFullName, isValidMonth, isLengthEqual }),\n );\n\n onChangeValue?.(event, newValue);\n };\n\n const handleCommitDate = (\n date?: Date | string,\n applyFormat?: boolean,\n isCalendarValue?: boolean,\n dateInfo?: DateInfo,\n ) => {\n if (disabled || readOnly) {\n return;\n }\n\n if (!date) {\n setCalendarValue(undefined);\n setInputValue('');\n\n return onCommitDate?.('', false, true);\n }\n\n if (isCalendarValue) {\n setCalendarValue(formatCalendarValue(date, format, lang));\n setInputValue(formatInputValue({ value: date, format, lang }));\n onCommitDate?.(date, false, true, dateInfo);\n\n return;\n }\n\n const formatString = applyFormat ? format : undefined;\n\n const { value: newDate, isError, isSuccess } = getDateFromFormat(date, formatString, lang);\n\n setCalendarValue(formatCalendarValue(newDate, format, lang));\n setInputValue(formatInputValue({ value: newDate, format, lang }));\n\n onCommitDate?.(newDate, isError, isSuccess);\n };\n\n return {\n datePickerErrorClass,\n datePickerSuccessClass,\n handleToggle,\n handleChangeValue,\n handleCommitDate,\n };\n};\n"],"names":["useDatePicker","_ref","currentValue","setInputValue","setCalendarValue","setIsInnerOpen","dateFormatDelimiter","format","_ref$lang","lang","disabled","readOnly","maskWithFormat","valueError","valueSuccess","inputRef","onToggle","onChangeValue","onCommitDate","datePickerErrorClass","classes","datePickerError","undefined","datePickerSuccessClass","datePickerSuccess","handleToggle","opened","event","isCalendarOpen","target","current","handleChangeValue","value","newValue","getMaskedDateOnInput","formatCalendarValue","formatInputValue","hasMonthFullName","test","isValidMonth","isLengthEqual","customDayjs","locale","firstIndexOfMonth","indexOf","lastIndexOfMonth","fullMonthName","slice","monthFormatting","replace","concat","isValid","length","handleCommitDate","date","applyFormat","isCalendarValue","dateInfo","formatString","_getDateFromFormat","getDateFromFormat","newDate","isError","isSuccess"],"mappings":"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"}
|
@@ -37,15 +37,18 @@ export function App() {
|
|
37
37
|
|
38
38
|
### Формат даты
|
39
39
|
Формат даты задается с помощью свойства `format`.
|
40
|
-
| Обозначение | Отображение
|
41
|
-
|
42
|
-
| DD | 01-31
|
43
|
-
| D | 1-31
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
40
|
+
| Обозначение | Отображение | Описание |
|
41
|
+
|-------------|---------------------------------------|----------------------------------|
|
42
|
+
| DD | 01-31 | Дни месяца, 2 цифры |
|
43
|
+
| D | 1-31 | Дни месяца |
|
44
|
+
| MMMM | January...December / январь...декабрь | Месяц года, полное название |
|
45
|
+
| MMM | Jan...Dec / янв...дек | Месяц года, сокращенное название |
|
46
|
+
| MM | 01-12 | Месяц года, 2 цифры |
|
47
|
+
| M | 1-12 | Месяц года |
|
48
|
+
| YYYY | 2024 | Год из 4 цифр |
|
49
|
+
| YY | 24 | Год из 2 цифр |
|
50
|
+
| Q | 1-4 | Квартал |
|
51
|
+
|
49
52
|
При выборе даты в календаре или вводе даты через поле ввода, дата будет приводиться к заданному формату.
|
50
53
|
Свойство `maskWithFormat` позволяет маскировать ввод:
|
51
54
|
|
@@ -53,15 +53,22 @@ var useDatePicker = exports.useDatePicker = function useDatePicker(_ref) {
|
|
53
53
|
onChangeValue === null || onChangeValue === void 0 || onChangeValue(event, newValue);
|
54
54
|
return;
|
55
55
|
}
|
56
|
+
|
57
|
+
/**
|
58
|
+
* NOTE: если в формате даты есть месяц в полном названии или сокращенном,
|
59
|
+
* нужно дополнительно проводить валидацию на полноту введенной даты.
|
60
|
+
* Иначе dayjs циклически будет пытаться отформатировать некорректную дату.
|
61
|
+
*/
|
56
62
|
var hasMonthFullName = /M{3,4}/g.test(format);
|
57
63
|
var isValidMonth;
|
58
64
|
var isLengthEqual;
|
59
65
|
if (hasMonthFullName) {
|
66
|
+
_datejs.customDayjs.locale(lang);
|
60
67
|
var firstIndexOfMonth = format.indexOf('M');
|
61
68
|
var lastIndexOfMonth = newValue.indexOf(dateFormatDelimiter(), firstIndexOfMonth);
|
62
69
|
var fullMonthName = !lastIndexOfMonth ? newValue.slice(firstIndexOfMonth) : newValue.slice(firstIndexOfMonth, lastIndexOfMonth);
|
63
|
-
|
64
|
-
isValidMonth = (0, _datejs.customDayjs)("01 ".concat(fullMonthName, " 1970"),
|
70
|
+
var monthFormatting = format.replace(/[^M]/g, '');
|
71
|
+
isValidMonth = (0, _datejs.customDayjs)("01 ".concat(fullMonthName, " 1970"), "DD ".concat(monthFormatting, " YYYY"), true).isValid();
|
65
72
|
isLengthEqual = format.length - 4 === newValue.length - fullMonthName.length;
|
66
73
|
}
|
67
74
|
if (!hasMonthFullName && (newValue === null || newValue === void 0 ? void 0 : newValue.length) === (format === null || format === void 0 ? void 0 : format.length) || isValidMonth && isLengthEqual) {
|
@@ -37,15 +37,18 @@ export function App() {
|
|
37
37
|
|
38
38
|
### Формат даты
|
39
39
|
Формат даты задается с помощью свойства `format`.
|
40
|
-
| Обозначение | Отображение
|
41
|
-
|
42
|
-
| DD | 01-31
|
43
|
-
| D | 1-31
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
40
|
+
| Обозначение | Отображение | Описание |
|
41
|
+
|-------------|---------------------------------------|----------------------------------|
|
42
|
+
| DD | 01-31 | Дни месяца, 2 цифры |
|
43
|
+
| D | 1-31 | Дни месяца |
|
44
|
+
| MMMM | January...December / январь...декабрь | Месяц года, полное название |
|
45
|
+
| MMM | Jan...Dec / янв...дек | Месяц года, сокращенное название |
|
46
|
+
| MM | 01-12 | Месяц года, 2 цифры |
|
47
|
+
| M | 1-12 | Месяц года |
|
48
|
+
| YYYY | 2024 | Год из 4 цифр |
|
49
|
+
| YY | 24 | Год из 2 цифр |
|
50
|
+
| Q | 1-4 | Квартал |
|
51
|
+
|
49
52
|
При выборе даты в календаре или вводе даты через поле ввода, дата будет приводиться к заданному формату.
|
50
53
|
Свойство `maskWithFormat` позволяет маскировать ввод:
|
51
54
|
|
@@ -47,15 +47,22 @@ export var useDatePicker = function useDatePicker(_ref) {
|
|
47
47
|
onChangeValue === null || onChangeValue === void 0 || onChangeValue(event, newValue);
|
48
48
|
return;
|
49
49
|
}
|
50
|
+
|
51
|
+
/**
|
52
|
+
* NOTE: если в формате даты есть месяц в полном названии или сокращенном,
|
53
|
+
* нужно дополнительно проводить валидацию на полноту введенной даты.
|
54
|
+
* Иначе dayjs циклически будет пытаться отформатировать некорректную дату.
|
55
|
+
*/
|
50
56
|
var hasMonthFullName = /M{3,4}/g.test(format);
|
51
57
|
var isValidMonth;
|
52
58
|
var isLengthEqual;
|
53
59
|
if (hasMonthFullName) {
|
60
|
+
customDayjs.locale(lang);
|
54
61
|
var firstIndexOfMonth = format.indexOf('M');
|
55
62
|
var lastIndexOfMonth = newValue.indexOf(dateFormatDelimiter(), firstIndexOfMonth);
|
56
63
|
var fullMonthName = !lastIndexOfMonth ? newValue.slice(firstIndexOfMonth) : newValue.slice(firstIndexOfMonth, lastIndexOfMonth);
|
57
|
-
|
58
|
-
isValidMonth = customDayjs("01 ".concat(fullMonthName, " 1970"),
|
64
|
+
var monthFormatting = format.replace(/[^M]/g, '');
|
65
|
+
isValidMonth = customDayjs("01 ".concat(fullMonthName, " 1970"), "DD ".concat(monthFormatting, " YYYY"), true).isValid();
|
59
66
|
isLengthEqual = format.length - 4 === newValue.length - fullMonthName.length;
|
60
67
|
}
|
61
68
|
if (!hasMonthFullName && (newValue === null || newValue === void 0 ? void 0 : newValue.length) === (format === null || format === void 0 ? void 0 : format.length) || isValidMonth && isLengthEqual) {
|
@@ -48,15 +48,22 @@ var useDatePicker = function useDatePicker(_ref) {
|
|
48
48
|
onChangeValue === null || onChangeValue === void 0 || onChangeValue(event, newValue);
|
49
49
|
return;
|
50
50
|
}
|
51
|
+
|
52
|
+
/**
|
53
|
+
* NOTE: если в формате даты есть месяц в полном названии или сокращенном,
|
54
|
+
* нужно дополнительно проводить валидацию на полноту введенной даты.
|
55
|
+
* Иначе dayjs циклически будет пытаться отформатировать некорректную дату.
|
56
|
+
*/
|
51
57
|
var hasMonthFullName = /M{3,4}/g.test(format);
|
52
58
|
var isValidMonth;
|
53
59
|
var isLengthEqual;
|
54
60
|
if (hasMonthFullName) {
|
61
|
+
customDayjs.locale(lang);
|
55
62
|
var firstIndexOfMonth = format.indexOf('M');
|
56
63
|
var lastIndexOfMonth = newValue.indexOf(dateFormatDelimiter(), firstIndexOfMonth);
|
57
64
|
var fullMonthName = !lastIndexOfMonth ? newValue.slice(firstIndexOfMonth) : newValue.slice(firstIndexOfMonth, lastIndexOfMonth);
|
58
|
-
|
59
|
-
isValidMonth = customDayjs("01 ".concat(fullMonthName, " 1970"),
|
65
|
+
var monthFormatting = format.replace(/[^M]/g, '');
|
66
|
+
isValidMonth = customDayjs("01 ".concat(fullMonthName, " 1970"), "DD ".concat(monthFormatting, " YYYY"), true).isValid();
|
60
67
|
isLengthEqual = format.length - 4 === newValue.length - fullMonthName.length;
|
61
68
|
}
|
62
69
|
if (!hasMonthFullName && (newValue === null || newValue === void 0 ? void 0 : newValue.length) === (format === null || format === void 0 ? void 0 : format.length) || isValidMonth && isLengthEqual) {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"useDatePicker.js","sources":["../../../../src/components/DatePicker/hooks/useDatePicker.ts"],"sourcesContent":["import { ChangeEvent, SyntheticEvent } from 'react';\n\nimport { classes } from '../DatePicker.tokens';\nimport type { UseDatePickerProps } from '../DatePickerBase.types';\nimport { formatCalendarValue, formatInputValue, getDateFromFormat, getMaskedDateOnInput } from '../utils/dateHelper';\nimport type { DateInfo } from '../../Calendar/Calendar.types';\nimport { customDayjs } from '../../../utils/datejs';\n\nexport const useDatePicker = ({\n currentValue,\n setInputValue,\n setCalendarValue,\n setIsInnerOpen,\n dateFormatDelimiter,\n format,\n lang = 'ru',\n disabled,\n readOnly,\n maskWithFormat,\n valueError,\n valueSuccess,\n inputRef,\n onToggle,\n onChangeValue,\n onCommitDate,\n}: UseDatePickerProps) => {\n const datePickerErrorClass = valueError ? classes.datePickerError : undefined;\n const datePickerSuccessClass = valueSuccess ? classes.datePickerSuccess : undefined;\n\n const handleToggle = (opened: boolean, event: SyntheticEvent | Event) => {\n if (disabled || readOnly) {\n return;\n }\n\n const isCalendarOpen = event.target === inputRef?.current ? true : opened;\n\n if (onToggle) {\n return onToggle(isCalendarOpen, event);\n }\n\n setIsInnerOpen(isCalendarOpen);\n };\n\n const handleChangeValue = (event: ChangeEvent<HTMLInputElement>) => {\n if (disabled || readOnly) {\n return;\n }\n const { value } = event.target;\n\n const newValue = maskWithFormat\n ? getMaskedDateOnInput(value, format, dateFormatDelimiter(), currentValue)\n : value;\n\n if (!format) {\n setCalendarValue(formatCalendarValue(newValue));\n setInputValue(formatInputValue({ value: newValue, format, lang }));\n onChangeValue?.(event, newValue);\n\n return;\n }\n\n const hasMonthFullName = /M{3,4}/g.test(format);\n let isValidMonth;\n let isLengthEqual;\n\n if (hasMonthFullName) {\n const firstIndexOfMonth = format.indexOf('M');\n const lastIndexOfMonth = newValue.indexOf(dateFormatDelimiter(), firstIndexOfMonth);\n\n const fullMonthName = !lastIndexOfMonth\n ? newValue.slice(firstIndexOfMonth)\n : newValue.slice(firstIndexOfMonth, lastIndexOfMonth);\n customDayjs.locale(lang);\n\n isValidMonth = customDayjs(`01 ${fullMonthName} 1970`, 'DD MMMM YYYY', true).isValid();\n isLengthEqual = format.length - 4 === newValue.length - fullMonthName.length;\n }\n\n if ((!hasMonthFullName && newValue?.length === format?.length) || (isValidMonth && isLengthEqual)) {\n setCalendarValue(formatCalendarValue(newValue, format, lang));\n }\n\n setInputValue(\n formatInputValue({ value: newValue, format, lang, hasMonthFullName, isValidMonth, isLengthEqual }),\n );\n\n onChangeValue?.(event, newValue);\n };\n\n const handleCommitDate = (\n date?: Date | string,\n applyFormat?: boolean,\n isCalendarValue?: boolean,\n dateInfo?: DateInfo,\n ) => {\n if (disabled || readOnly) {\n return;\n }\n\n if (!date) {\n setCalendarValue(undefined);\n setInputValue('');\n\n return onCommitDate?.('', false, true);\n }\n\n if (isCalendarValue) {\n setCalendarValue(formatCalendarValue(date, format, lang));\n setInputValue(formatInputValue({ value: date, format, lang }));\n onCommitDate?.(date, false, true, dateInfo);\n\n return;\n }\n\n const formatString = applyFormat ? format : undefined;\n\n const { value: newDate, isError, isSuccess } = getDateFromFormat(date, formatString, lang);\n\n setCalendarValue(formatCalendarValue(newDate, format, lang));\n setInputValue(formatInputValue({ value: newDate, format, lang }));\n\n onCommitDate?.(newDate, isError, isSuccess);\n };\n\n return {\n datePickerErrorClass,\n datePickerSuccessClass,\n handleToggle,\n handleChangeValue,\n handleCommitDate,\n };\n};\n"],"names":["useDatePicker","_ref","currentValue","setInputValue","setCalendarValue","setIsInnerOpen","dateFormatDelimiter","format","_ref$lang","lang","disabled","readOnly","maskWithFormat","valueError","valueSuccess","inputRef","onToggle","onChangeValue","onCommitDate","datePickerErrorClass","classes","datePickerError","undefined","datePickerSuccessClass","datePickerSuccess","handleToggle","opened","event","isCalendarOpen","target","current","handleChangeValue","value","newValue","getMaskedDateOnInput","formatCalendarValue","formatInputValue","hasMonthFullName","test","isValidMonth","isLengthEqual","firstIndexOfMonth","indexOf","lastIndexOfMonth","fullMonthName","slice","customDayjs","locale","concat","isValid","length","handleCommitDate","date","applyFormat","isCalendarValue","dateInfo","formatString","_getDateFromFormat","getDateFromFormat","newDate","isError","isSuccess"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"useDatePicker.js","sources":["../../../../src/components/DatePicker/hooks/useDatePicker.ts"],"sourcesContent":["import { ChangeEvent, SyntheticEvent } from 'react';\n\nimport { classes } from '../DatePicker.tokens';\nimport type { UseDatePickerProps } from '../DatePickerBase.types';\nimport { formatCalendarValue, formatInputValue, getDateFromFormat, getMaskedDateOnInput } from '../utils/dateHelper';\nimport type { DateInfo } from '../../Calendar/Calendar.types';\nimport { customDayjs } from '../../../utils/datejs';\n\nexport const useDatePicker = ({\n currentValue,\n setInputValue,\n setCalendarValue,\n setIsInnerOpen,\n dateFormatDelimiter,\n format,\n lang = 'ru',\n disabled,\n readOnly,\n maskWithFormat,\n valueError,\n valueSuccess,\n inputRef,\n onToggle,\n onChangeValue,\n onCommitDate,\n}: UseDatePickerProps) => {\n const datePickerErrorClass = valueError ? classes.datePickerError : undefined;\n const datePickerSuccessClass = valueSuccess ? classes.datePickerSuccess : undefined;\n\n const handleToggle = (opened: boolean, event: SyntheticEvent | Event) => {\n if (disabled || readOnly) {\n return;\n }\n\n const isCalendarOpen = event.target === inputRef?.current ? true : opened;\n\n if (onToggle) {\n return onToggle(isCalendarOpen, event);\n }\n\n setIsInnerOpen(isCalendarOpen);\n };\n\n const handleChangeValue = (event: ChangeEvent<HTMLInputElement>) => {\n if (disabled || readOnly) {\n return;\n }\n const { value } = event.target;\n\n const newValue = maskWithFormat\n ? getMaskedDateOnInput(value, format, dateFormatDelimiter(), currentValue)\n : value;\n\n if (!format) {\n setCalendarValue(formatCalendarValue(newValue));\n setInputValue(formatInputValue({ value: newValue, format, lang }));\n onChangeValue?.(event, newValue);\n\n return;\n }\n\n /**\n * NOTE: если в формате даты есть месяц в полном названии или сокращенном,\n * нужно дополнительно проводить валидацию на полноту введенной даты.\n * Иначе dayjs циклически будет пытаться отформатировать некорректную дату.\n */\n const hasMonthFullName = /M{3,4}/g.test(format);\n let isValidMonth;\n let isLengthEqual;\n\n if (hasMonthFullName) {\n customDayjs.locale(lang);\n\n const firstIndexOfMonth = format.indexOf('M');\n const lastIndexOfMonth = newValue.indexOf(dateFormatDelimiter(), firstIndexOfMonth);\n\n const fullMonthName = !lastIndexOfMonth\n ? newValue.slice(firstIndexOfMonth)\n : newValue.slice(firstIndexOfMonth, lastIndexOfMonth);\n\n const monthFormatting = format.replace(/[^M]/g, '');\n\n isValidMonth = customDayjs(`01 ${fullMonthName} 1970`, `DD ${monthFormatting} YYYY`, true).isValid();\n isLengthEqual = format.length - 4 === newValue.length - fullMonthName.length;\n }\n\n if ((!hasMonthFullName && newValue?.length === format?.length) || (isValidMonth && isLengthEqual)) {\n setCalendarValue(formatCalendarValue(newValue, format, lang));\n }\n\n setInputValue(\n formatInputValue({ value: newValue, format, lang, hasMonthFullName, isValidMonth, isLengthEqual }),\n );\n\n onChangeValue?.(event, newValue);\n };\n\n const handleCommitDate = (\n date?: Date | string,\n applyFormat?: boolean,\n isCalendarValue?: boolean,\n dateInfo?: DateInfo,\n ) => {\n if (disabled || readOnly) {\n return;\n }\n\n if (!date) {\n setCalendarValue(undefined);\n setInputValue('');\n\n return onCommitDate?.('', false, true);\n }\n\n if (isCalendarValue) {\n setCalendarValue(formatCalendarValue(date, format, lang));\n setInputValue(formatInputValue({ value: date, format, lang }));\n onCommitDate?.(date, false, true, dateInfo);\n\n return;\n }\n\n const formatString = applyFormat ? format : undefined;\n\n const { value: newDate, isError, isSuccess } = getDateFromFormat(date, formatString, lang);\n\n setCalendarValue(formatCalendarValue(newDate, format, lang));\n setInputValue(formatInputValue({ value: newDate, format, lang }));\n\n onCommitDate?.(newDate, isError, isSuccess);\n };\n\n return {\n datePickerErrorClass,\n datePickerSuccessClass,\n handleToggle,\n handleChangeValue,\n handleCommitDate,\n };\n};\n"],"names":["useDatePicker","_ref","currentValue","setInputValue","setCalendarValue","setIsInnerOpen","dateFormatDelimiter","format","_ref$lang","lang","disabled","readOnly","maskWithFormat","valueError","valueSuccess","inputRef","onToggle","onChangeValue","onCommitDate","datePickerErrorClass","classes","datePickerError","undefined","datePickerSuccessClass","datePickerSuccess","handleToggle","opened","event","isCalendarOpen","target","current","handleChangeValue","value","newValue","getMaskedDateOnInput","formatCalendarValue","formatInputValue","hasMonthFullName","test","isValidMonth","isLengthEqual","customDayjs","locale","firstIndexOfMonth","indexOf","lastIndexOfMonth","fullMonthName","slice","monthFormatting","replace","concat","isValid","length","handleCommitDate","date","applyFormat","isCalendarValue","dateInfo","formatString","_getDateFromFormat","getDateFromFormat","newDate","isError","isSuccess"],"mappings":"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"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@salutejs/plasma-new-hope",
|
3
|
-
"version": "0.147.0-canary.1440.
|
3
|
+
"version": "0.147.0-canary.1440.10900331749.0",
|
4
4
|
"description": "Salute Design System blueprint",
|
5
5
|
"main": "cjs/index.js",
|
6
6
|
"module": "es/index.js",
|
@@ -121,5 +121,5 @@
|
|
121
121
|
"react-popper": "2.3.0",
|
122
122
|
"storeon": "3.1.5"
|
123
123
|
},
|
124
|
-
"gitHead": "
|
124
|
+
"gitHead": "7056080072d769214ca6d2aa5ccb73c7f3221574"
|
125
125
|
}
|
@@ -37,15 +37,18 @@ export function App() {
|
|
37
37
|
|
38
38
|
### Формат даты
|
39
39
|
Формат даты задается с помощью свойства `format`.
|
40
|
-
| Обозначение | Отображение
|
41
|
-
|
42
|
-
| DD | 01-31
|
43
|
-
| D | 1-31
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
40
|
+
| Обозначение | Отображение | Описание |
|
41
|
+
|-------------|---------------------------------------|----------------------------------|
|
42
|
+
| DD | 01-31 | Дни месяца, 2 цифры |
|
43
|
+
| D | 1-31 | Дни месяца |
|
44
|
+
| MMMM | January...December / январь...декабрь | Месяц года, полное название |
|
45
|
+
| MMM | Jan...Dec / янв...дек | Месяц года, сокращенное название |
|
46
|
+
| MM | 01-12 | Месяц года, 2 цифры |
|
47
|
+
| M | 1-12 | Месяц года |
|
48
|
+
| YYYY | 2024 | Год из 4 цифр |
|
49
|
+
| YY | 24 | Год из 2 цифр |
|
50
|
+
| Q | 1-4 | Квартал |
|
51
|
+
|
49
52
|
При выборе даты в календаре или вводе даты через поле ввода, дата будет приводиться к заданному формату.
|
50
53
|
Свойство `maskWithFormat` позволяет маскировать ввод:
|
51
54
|
|
@@ -53,15 +53,22 @@ var useDatePicker = exports.useDatePicker = function useDatePicker(_ref) {
|
|
53
53
|
onChangeValue === null || onChangeValue === void 0 || onChangeValue(event, newValue);
|
54
54
|
return;
|
55
55
|
}
|
56
|
+
|
57
|
+
/**
|
58
|
+
* NOTE: если в формате даты есть месяц в полном названии или сокращенном,
|
59
|
+
* нужно дополнительно проводить валидацию на полноту введенной даты.
|
60
|
+
* Иначе dayjs циклически будет пытаться отформатировать некорректную дату.
|
61
|
+
*/
|
56
62
|
var hasMonthFullName = /M{3,4}/g.test(format);
|
57
63
|
var isValidMonth;
|
58
64
|
var isLengthEqual;
|
59
65
|
if (hasMonthFullName) {
|
66
|
+
_datejs.customDayjs.locale(lang);
|
60
67
|
var firstIndexOfMonth = format.indexOf('M');
|
61
68
|
var lastIndexOfMonth = newValue.indexOf(dateFormatDelimiter(), firstIndexOfMonth);
|
62
69
|
var fullMonthName = !lastIndexOfMonth ? newValue.slice(firstIndexOfMonth) : newValue.slice(firstIndexOfMonth, lastIndexOfMonth);
|
63
|
-
|
64
|
-
isValidMonth = (0, _datejs.customDayjs)("01 ".concat(fullMonthName, " 1970"),
|
70
|
+
var monthFormatting = format.replace(/[^M]/g, '');
|
71
|
+
isValidMonth = (0, _datejs.customDayjs)("01 ".concat(fullMonthName, " 1970"), "DD ".concat(monthFormatting, " YYYY"), true).isValid();
|
65
72
|
isLengthEqual = format.length - 4 === newValue.length - fullMonthName.length;
|
66
73
|
}
|
67
74
|
if (!hasMonthFullName && (newValue === null || newValue === void 0 ? void 0 : newValue.length) === (format === null || format === void 0 ? void 0 : format.length) || isValidMonth && isLengthEqual) {
|
@@ -37,15 +37,18 @@ export function App() {
|
|
37
37
|
|
38
38
|
### Формат даты
|
39
39
|
Формат даты задается с помощью свойства `format`.
|
40
|
-
| Обозначение | Отображение
|
41
|
-
|
42
|
-
| DD | 01-31
|
43
|
-
| D | 1-31
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
40
|
+
| Обозначение | Отображение | Описание |
|
41
|
+
|-------------|---------------------------------------|----------------------------------|
|
42
|
+
| DD | 01-31 | Дни месяца, 2 цифры |
|
43
|
+
| D | 1-31 | Дни месяца |
|
44
|
+
| MMMM | January...December / январь...декабрь | Месяц года, полное название |
|
45
|
+
| MMM | Jan...Dec / янв...дек | Месяц года, сокращенное название |
|
46
|
+
| MM | 01-12 | Месяц года, 2 цифры |
|
47
|
+
| M | 1-12 | Месяц года |
|
48
|
+
| YYYY | 2024 | Год из 4 цифр |
|
49
|
+
| YY | 24 | Год из 2 цифр |
|
50
|
+
| Q | 1-4 | Квартал |
|
51
|
+
|
49
52
|
При выборе даты в календаре или вводе даты через поле ввода, дата будет приводиться к заданному формату.
|
50
53
|
Свойство `maskWithFormat` позволяет маскировать ввод:
|
51
54
|
|
@@ -47,15 +47,22 @@ export var useDatePicker = function useDatePicker(_ref) {
|
|
47
47
|
onChangeValue === null || onChangeValue === void 0 || onChangeValue(event, newValue);
|
48
48
|
return;
|
49
49
|
}
|
50
|
+
|
51
|
+
/**
|
52
|
+
* NOTE: если в формате даты есть месяц в полном названии или сокращенном,
|
53
|
+
* нужно дополнительно проводить валидацию на полноту введенной даты.
|
54
|
+
* Иначе dayjs циклически будет пытаться отформатировать некорректную дату.
|
55
|
+
*/
|
50
56
|
var hasMonthFullName = /M{3,4}/g.test(format);
|
51
57
|
var isValidMonth;
|
52
58
|
var isLengthEqual;
|
53
59
|
if (hasMonthFullName) {
|
60
|
+
customDayjs.locale(lang);
|
54
61
|
var firstIndexOfMonth = format.indexOf('M');
|
55
62
|
var lastIndexOfMonth = newValue.indexOf(dateFormatDelimiter(), firstIndexOfMonth);
|
56
63
|
var fullMonthName = !lastIndexOfMonth ? newValue.slice(firstIndexOfMonth) : newValue.slice(firstIndexOfMonth, lastIndexOfMonth);
|
57
|
-
|
58
|
-
isValidMonth = customDayjs("01 ".concat(fullMonthName, " 1970"),
|
64
|
+
var monthFormatting = format.replace(/[^M]/g, '');
|
65
|
+
isValidMonth = customDayjs("01 ".concat(fullMonthName, " 1970"), "DD ".concat(monthFormatting, " YYYY"), true).isValid();
|
59
66
|
isLengthEqual = format.length - 4 === newValue.length - fullMonthName.length;
|
60
67
|
}
|
61
68
|
if (!hasMonthFullName && (newValue === null || newValue === void 0 ? void 0 : newValue.length) === (format === null || format === void 0 ? void 0 : format.length) || isValidMonth && isLengthEqual) {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"useDatePicker.d.ts","sourceRoot":"","sources":["../../../../src/components/DatePicker/hooks/useDatePicker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAGpD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAElE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAG9D,eAAO,MAAM,aAAa,yNAiBvB,kBAAkB;;;2BAIa,OAAO,SAAS,cAAc,GAAG,KAAK;+BAclC,YAAY,gBAAgB,CAAC;;
|
1
|
+
{"version":3,"file":"useDatePicker.d.ts","sourceRoot":"","sources":["../../../../src/components/DatePicker/hooks/useDatePicker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAGpD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAElE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAG9D,eAAO,MAAM,aAAa,yNAiBvB,kBAAkB;;;2BAIa,OAAO,SAAS,cAAc,GAAG,KAAK;+BAclC,YAAY,gBAAgB,CAAC;;CAgGlE,CAAC"}
|