@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.
@@ -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
- datejs.customDayjs.locale(lang);
63
- isValidMonth = datejs.customDayjs("01 ".concat(fullMonthName, " 1970"), 'DD MMMM YYYY', true).isValid();
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 | Дни месяца, 2 цифры |
43
- | D | 1-31 | Дни месяца |
44
- | MM | 01-12 | Месяц года, 2 цифры |
45
- | M | 1-12 | Месяц года |
46
- | YYYY | 2024 | Год из 4 цифр |
47
- | YY | 24 | Год из 2 цифр |
48
- | Q | 1-4 | Квартал |
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
- _datejs.customDayjs.locale(lang);
64
- isValidMonth = (0, _datejs.customDayjs)("01 ".concat(fullMonthName, " 1970"), 'DD MMMM YYYY', true).isValid();
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 | Дни месяца, 2 цифры |
43
- | D | 1-31 | Дни месяца |
44
- | MM | 01-12 | Месяц года, 2 цифры |
45
- | M | 1-12 | Месяц года |
46
- | YYYY | 2024 | Год из 4 цифр |
47
- | YY | 24 | Год из 2 цифр |
48
- | Q | 1-4 | Квартал |
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
- customDayjs.locale(lang);
58
- isValidMonth = customDayjs("01 ".concat(fullMonthName, " 1970"), 'DD MMMM YYYY', true).isValid();
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
- customDayjs.locale(lang);
59
- isValidMonth = customDayjs("01 ".concat(fullMonthName, " 1970"), 'DD MMMM YYYY', true).isValid();
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.10898537587.0",
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": "0173a08e9d251164968a909952aa4fc6e67d94e8"
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 | Дни месяца, 2 цифры |
43
- | D | 1-31 | Дни месяца |
44
- | MM | 01-12 | Месяц года, 2 цифры |
45
- | M | 1-12 | Месяц года |
46
- | YYYY | 2024 | Год из 4 цифр |
47
- | YY | 24 | Год из 2 цифр |
48
- | Q | 1-4 | Квартал |
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
- _datejs.customDayjs.locale(lang);
64
- isValidMonth = (0, _datejs.customDayjs)("01 ".concat(fullMonthName, " 1970"), 'DD MMMM YYYY', true).isValid();
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 | Дни месяца, 2 цифры |
43
- | D | 1-31 | Дни месяца |
44
- | MM | 01-12 | Месяц года, 2 цифры |
45
- | M | 1-12 | Месяц года |
46
- | YYYY | 2024 | Год из 4 цифр |
47
- | YY | 24 | Год из 2 цифр |
48
- | Q | 1-4 | Квартал |
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
- customDayjs.locale(lang);
58
- isValidMonth = customDayjs("01 ".concat(fullMonthName, " 1970"), 'DD MMMM YYYY', true).isValid();
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;;CAwFlE,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"}