@consta/uikit 4.16.0 → 4.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/__internal__/src/components/DatePicker/DatePickerFieldTypeDate/helpers.js +1 -1
- package/__internal__/src/components/DatePicker/DatePickerFieldTypeDate/helpers.js.map +1 -1
- package/__internal__/src/components/DatePicker/DatePickerFieldTypeDateTime/helpers.js +1 -1
- package/__internal__/src/components/DatePicker/DatePickerFieldTypeDateTime/helpers.js.map +1 -1
- package/__internal__/src/components/DatePicker/DatePickerFieldTypeMonth/helpers.js +1 -1
- package/__internal__/src/components/DatePicker/DatePickerFieldTypeMonth/helpers.js.map +1 -1
- package/__internal__/src/components/DatePicker/DatePickerFieldTypeTime/helpers.js +1 -1
- package/__internal__/src/components/DatePicker/DatePickerFieldTypeTime/helpers.js.map +1 -1
- package/__internal__/src/components/DatePicker/DatePickerFieldTypeYear/helpers.js +1 -1
- package/__internal__/src/components/DatePicker/DatePickerFieldTypeYear/helpers.js.map +1 -1
- package/__internal__/src/components/DatePicker/helpers.d.ts +1 -0
- package/__internal__/src/components/DatePicker/helpers.js +1 -1
- package/__internal__/src/components/DatePicker/helpers.js.map +1 -1
- package/__internal__/src/hooks/useBreakpoints/addPrefix.d.ts +1 -0
- package/__internal__/src/hooks/useBreakpoints/addPrefix.js +2 -0
- package/__internal__/src/hooks/useBreakpoints/addPrefix.js.map +1 -0
- package/__internal__/src/hooks/useBreakpoints/index.d.ts +1 -0
- package/__internal__/src/hooks/useBreakpoints/index.js +1 -1
- package/__internal__/src/hooks/useBreakpoints/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import _slicedToArray from"@babel/runtime/helpers/slicedToArray";import{format as _format,isValid,isWithinInterval,parse as _parse}from"date-fns";import IMask from"imask";import{useCallback,useEffect,useMemo,useState}from"react";import{useIMask}from"../../TextField";import{useMutableRef}from"../../../hooks/useMutableRef/useMutableRef";import{
|
|
1
|
+
import _slicedToArray from"@babel/runtime/helpers/slicedToArray";import{format as _format,isValid,isWithinInterval,parse as _parse}from"date-fns";import IMask from"imask";import{useCallback,useEffect,useMemo,useState}from"react";import{useIMask}from"../../TextField";import{useMutableRef}from"../../../hooks/useMutableRef/useMutableRef";import{datePickerPropSeparatorDefault,getPartDate,getParts,getPartsDate}from"../helpers";import{datePickerErrorTypes}from"../types";export var usePicker=function(a){var b=a.value,c=a.onChange,d=a.onError,f=a.format,g=a.separator,h=a.maxDate,i=a.minDate,j=useMutableRef(c),k=useMutableRef(b),l=useMutableRef(d),m=useState(b&&isValid(b)?_format(b,f):null),n=_slicedToArray(m,2),o=n[0],p=n[1],q=useMutableRef(o),r=useCallback(function(a){var b=a.e,c=a.value;if(q.current!==c){p(c);var d=j.current,e=k.current;if(d){if(!c)return void(e&&d({e:b,value:null}));var m=getParts(f,g,!1),n=getParts(c,g,!1),o=m.map(function(a){return getPartDate(m,n,a)}).filter(function(a){return!!a});if(m.length===o.length){var x=_parse(n.join(datePickerPropSeparatorDefault),m.join(datePickerPropSeparatorDefault),new Date);if(!isWithinInterval(x,{start:i,end:h})){var r,s=getPartsDate(c,f,g,!1,["dd","MM","yyyy"]),t=_slicedToArray(s,3),u=t[0],v=t[1],w=t[2];return null===(r=l.current)||void 0===r?void 0:r.call(l,{type:datePickerErrorTypes[0],stringValue:c,dd:u,MM:v,yyyy:w,date:x}),void(e&&d({e:b,value:null}))}d({e:b,value:x})}else e&&d({e:b,value:null})}}},[null===i||void 0===i?void 0:i.getTime(),null===h||void 0===h?void 0:h.getTime(),f,g]),s=useMemo(function(){return{mask:Date,pattern:f,blocks:{yyyy:{mask:IMask.MaskedRange,from:1,to:9999},MM:{mask:IMask.MaskedRange,from:1,to:12},dd:{mask:IMask.MaskedRange,from:1,to:31}},lazy:!0,autofix:!0,format:function format(a){return _format(a,f)},parse:function parse(a){return _parse(a,f,new Date)},validate:function validate(a){var b=getParts(f,g,!1),c=getParts(a,g,!1),d=b.map(function(a){return getPartDate(b,c,a)}).filter(function(a){return!!a});if(b.length===d.length&&!isValid(_parse(c.join(datePickerPropSeparatorDefault),b.join(datePickerPropSeparatorDefault),new Date))){var e,h=getPartsDate(a,f,g,!1,["dd","MM","yyyy"]),i=_slicedToArray(h,3),j=i[0],k=i[1],m=i[2];return null===(e=l.current)||void 0===e?void 0:e.call(l,{type:datePickerErrorTypes[1],stringValue:a,dd:j,MM:k,yyyy:m}),!1}return!0}}},[f,g]),t=useIMask({value:o,onChange:function(a,b){return null===r||void 0===r?void 0:r(b)},maskOptions:s}),u=t.inputRef;return useEffect(function(){b&&isValid(b)?p(_format(b,f)):(null===o||void 0===o?void 0:o.length)===f.length&&p("")},[null===b||void 0===b?void 0:b.getTime()]),{stringValue:o,inputRef:u,clearValue:function clearValue(a){p(null),null===c||void 0===c?void 0:c({e:a,value:null})}}};
|
|
2
2
|
//# sourceMappingURL=helpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","names":["format","isValid","isWithinInterval","parse","IMask","useCallback","useEffect","useMemo","useState","useIMask","useMutableRef","leapYear","datePickerPropFormatTypeDate","datePickerPropSeparatorDefault","getPartsDate","datePickerErrorTypes","usePicker","props","value","onChange","onError","formatProp","separator","maxDate","minDate","onChangeRef","valueRef","onErrorRef","stringValue","setStringValue","stringValueRef","handleChange","e","current","dd","MM","yyyy","date","Date","start","end","type","getTime","options","mask","pattern","blocks","MaskedRange","from","to","lazy","autofix","string","validate","_val","params","maskOptions","inputRef","length","clearValue"],"sources":["../../../../../../src/components/DatePicker/DatePickerFieldTypeDate/helpers.ts"],"sourcesContent":["import { IconComponent, IconPropSize } from '@consta/icons/Icon';\nimport { format, isValid, isWithinInterval, parse } from 'date-fns';\nimport IMask from 'imask';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { useIMask } from '##/components/TextField';\n\nimport { useMutableRef } from '../../../hooks/useMutableRef/useMutableRef';\nimport { leapYear } from '../../../utils/date';\nimport { PropsWithHTMLAttributes } from '../../../utils/types/PropsWithHTMLAttributes';\nimport {\n TextFieldPropForm,\n TextFieldPropSize,\n TextFieldPropStatus,\n TextFieldPropView,\n TextFieldPropWidth,\n} from '../../TextField/TextField';\nimport {\n datePickerPropFormatTypeDate,\n datePickerPropSeparatorDefault,\n getPartsDate,\n} from '../helpers';\nimport { datePickerErrorTypes, DatePickerPropOnError } from '../types';\n\ntype DatePickerFieldTypeDatePropOnChange = (props: {\n e: Event;\n value: Date | null;\n}) => void;\n\nexport type DatePickerFieldTypeDateProps = PropsWithHTMLAttributes<\n {\n className?: string;\n value?: Date | null;\n onChange?: DatePickerFieldTypeDatePropOnChange;\n onError?: DatePickerPropOnError;\n id?: string;\n name?: string;\n disabled?: boolean;\n size?: TextFieldPropSize;\n view?: TextFieldPropView;\n form?: TextFieldPropForm;\n status?: TextFieldPropStatus;\n width?: TextFieldPropWidth;\n onFocus?: React.FocusEventHandler<HTMLElement>;\n onBlur?: React.FocusEventHandler<HTMLElement>;\n autoFocus?: boolean;\n placeholder?: string;\n leftSide?: string | IconComponent;\n rightSide?: string | IconComponent;\n readOnly?: boolean;\n required?: boolean;\n tabIndex?: number;\n inputRef?: React.Ref<HTMLTextAreaElement | HTMLInputElement>;\n ariaLabel?: string;\n iconSize?: IconPropSize;\n children?: never;\n format?: string;\n separator?: string;\n minDate?: Date;\n maxDate?: Date;\n focused?: boolean;\n label?: string;\n labelIcon?: IconComponent;\n caption?: string;\n labelPosition?: 'top' | 'left';\n withClearButton?: boolean;\n },\n HTMLDivElement\n>;\n\ntype UsePickerProps = {\n value?: Date | null;\n onChange?: DatePickerFieldTypeDatePropOnChange;\n onError?: DatePickerPropOnError;\n format: string;\n separator: string;\n minDate: Date;\n maxDate: Date;\n};\n\nexport const usePicker = (props: UsePickerProps) => {\n const {\n value,\n onChange,\n onError,\n format: formatProp,\n separator,\n maxDate,\n minDate,\n } = props;\n const onChangeRef = useMutableRef(onChange);\n const valueRef = useMutableRef(value);\n const onErrorRef = useMutableRef(onError);\n\n const [stringValue, setStringValue] = useState<string | null>(\n value && isValid(value) ? format(value, formatProp) : null,\n );\n const stringValueRef = useMutableRef(stringValue);\n\n const handleChange = useCallback(\n ({ e, value: stringValue }: { e: Event; value: string | null }) => {\n if (stringValueRef.current === stringValue) {\n return;\n }\n setStringValue(stringValue);\n const onChange = onChangeRef.current;\n const value = valueRef.current;\n if (onChange) {\n if (!stringValue) {\n if (value) {\n onChange({ e, value: null });\n }\n return;\n }\n const [dd, MM, yyyy] = getPartsDate(\n stringValue,\n formatProp,\n separator,\n false,\n ['dd', 'MM', 'yyyy'],\n );\n if (dd && MM && yyyy) {\n const date = parse(\n `${dd}${datePickerPropSeparatorDefault}${MM}${datePickerPropSeparatorDefault}${yyyy}`,\n datePickerPropFormatTypeDate,\n new Date(),\n );\n if (!isWithinInterval(date, { start: minDate, end: maxDate })) {\n onErrorRef.current?.({\n type: datePickerErrorTypes[0],\n stringValue,\n dd,\n MM,\n yyyy,\n date,\n });\n if (value) {\n onChange({ e, value: null });\n }\n\n return;\n }\n onChange({ e, value: date });\n } else if (value) {\n onChange({ e, value: null });\n }\n }\n },\n [minDate?.getTime(), maxDate?.getTime(), formatProp, separator],\n );\n\n const options: IMask.InputMask<IMask.MaskedDateOptions> = useMemo(\n () =>\n ({\n mask: Date,\n pattern: formatProp,\n blocks: {\n yyyy: {\n mask: IMask.MaskedRange,\n from: 1,\n to: 9999,\n },\n MM: {\n mask: IMask.MaskedRange,\n from: 1,\n to: 12,\n },\n dd: {\n mask: IMask.MaskedRange,\n from: 1,\n to: 31,\n },\n },\n lazy: true,\n autofix: true,\n format: (date: Date) => format(date, formatProp),\n parse: (string: string) => parse(string, formatProp, new Date()),\n validate: (string: string) => {\n const [dd, MM, yyyy] = getPartsDate(\n string,\n formatProp,\n separator,\n false,\n ['dd', 'MM', 'yyyy'],\n );\n if (\n dd &&\n MM &&\n !isValid(\n parse(\n `${dd}${datePickerPropSeparatorDefault}${MM}${datePickerPropSeparatorDefault}${leapYear}`,\n datePickerPropFormatTypeDate,\n new Date(),\n ),\n )\n ) {\n onErrorRef.current?.({\n type: datePickerErrorTypes[1],\n stringValue: string,\n dd,\n MM,\n yyyy,\n });\n return false;\n }\n if (\n dd &&\n MM &&\n yyyy &&\n !isValid(\n parse(\n `${dd}${datePickerPropSeparatorDefault}${MM}${datePickerPropSeparatorDefault}${yyyy}`,\n datePickerPropFormatTypeDate,\n new Date(),\n ),\n )\n ) {\n onErrorRef.current?.({\n type: datePickerErrorTypes[1],\n stringValue: string,\n dd,\n MM,\n yyyy,\n });\n return false;\n }\n return true;\n },\n // проблема в типах IMask\n } as unknown as IMask.InputMask<IMask.MaskedDateOptions>),\n [formatProp, separator],\n );\n\n const { inputRef } = useIMask({\n value: stringValue,\n onChange: (_val, params) => handleChange?.(params),\n maskOptions: options,\n });\n\n const clearValue = (e: Event) => {\n setStringValue(null);\n onChange?.({ e, value: null });\n };\n\n // при изменении value, нужно обновить stringValue\n useEffect(() => {\n if (value && isValid(value)) {\n setStringValue(format(value, formatProp));\n } else if (stringValue?.length === formatProp.length) {\n // если количество введенных символов меньше чем в формате маски\n // то не нужно мешать вводу с клавиатуры\n // если дата была введена полностью и value пришел null,\n // то можно считать что поле нуждается в очистке\n setStringValue('');\n }\n }, [value?.getTime()]);\n\n return {\n stringValue,\n inputRef,\n clearValue,\n };\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"helpers.js","names":["format","isValid","isWithinInterval","parse","IMask","useCallback","useEffect","useMemo","useState","useIMask","useMutableRef","datePickerPropSeparatorDefault","getPartDate","getParts","getPartsDate","datePickerErrorTypes","usePicker","props","value","onChange","onError","formatProp","separator","maxDate","minDate","onChangeRef","valueRef","onErrorRef","stringValue","setStringValue","stringValueRef","handleChange","e","current","formatArray","valueArray","validArray","map","marker","filter","item","length","date","join","Date","start","end","dd","MM","yyyy","type","getTime","options","mask","pattern","blocks","MaskedRange","from","to","lazy","autofix","string","validate","_val","params","maskOptions","inputRef","clearValue"],"sources":["../../../../../../src/components/DatePicker/DatePickerFieldTypeDate/helpers.ts"],"sourcesContent":["import { IconComponent, IconPropSize } from '@consta/icons/Icon';\nimport { format, isValid, isWithinInterval, parse } from 'date-fns';\nimport IMask from 'imask';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { useIMask } from '##/components/TextField';\n\nimport { useMutableRef } from '../../../hooks/useMutableRef/useMutableRef';\nimport { PropsWithHTMLAttributes } from '../../../utils/types/PropsWithHTMLAttributes';\nimport {\n TextFieldPropForm,\n TextFieldPropSize,\n TextFieldPropStatus,\n TextFieldPropView,\n TextFieldPropWidth,\n} from '../../TextField/TextField';\nimport {\n datePickerPropSeparatorDefault,\n getPartDate,\n getParts,\n getPartsDate,\n} from '../helpers';\nimport { datePickerErrorTypes, DatePickerPropOnError } from '../types';\n\ntype DatePickerFieldTypeDatePropOnChange = (props: {\n e: Event;\n value: Date | null;\n}) => void;\n\nexport type DatePickerFieldTypeDateProps = PropsWithHTMLAttributes<\n {\n className?: string;\n value?: Date | null;\n onChange?: DatePickerFieldTypeDatePropOnChange;\n onError?: DatePickerPropOnError;\n id?: string;\n name?: string;\n disabled?: boolean;\n size?: TextFieldPropSize;\n view?: TextFieldPropView;\n form?: TextFieldPropForm;\n status?: TextFieldPropStatus;\n width?: TextFieldPropWidth;\n onFocus?: React.FocusEventHandler<HTMLElement>;\n onBlur?: React.FocusEventHandler<HTMLElement>;\n autoFocus?: boolean;\n placeholder?: string;\n leftSide?: string | IconComponent;\n rightSide?: string | IconComponent;\n readOnly?: boolean;\n required?: boolean;\n tabIndex?: number;\n inputRef?: React.Ref<HTMLTextAreaElement | HTMLInputElement>;\n ariaLabel?: string;\n iconSize?: IconPropSize;\n children?: never;\n format?: string;\n separator?: string;\n minDate?: Date;\n maxDate?: Date;\n focused?: boolean;\n label?: string;\n labelIcon?: IconComponent;\n caption?: string;\n labelPosition?: 'top' | 'left';\n withClearButton?: boolean;\n },\n HTMLDivElement\n>;\n\ntype UsePickerProps = {\n value?: Date | null;\n onChange?: DatePickerFieldTypeDatePropOnChange;\n onError?: DatePickerPropOnError;\n format: string;\n separator: string;\n minDate: Date;\n maxDate: Date;\n};\n\nexport const usePicker = (props: UsePickerProps) => {\n const {\n value,\n onChange,\n onError,\n format: formatProp,\n separator,\n maxDate,\n minDate,\n } = props;\n const onChangeRef = useMutableRef(onChange);\n const valueRef = useMutableRef(value);\n const onErrorRef = useMutableRef(onError);\n\n const [stringValue, setStringValue] = useState<string | null>(\n value && isValid(value) ? format(value, formatProp) : null,\n );\n const stringValueRef = useMutableRef(stringValue);\n\n const handleChange = useCallback(\n ({ e, value: stringValue }: { e: Event; value: string | null }) => {\n if (stringValueRef.current === stringValue) {\n return;\n }\n setStringValue(stringValue);\n const onChange = onChangeRef.current;\n const value = valueRef.current;\n if (onChange) {\n if (!stringValue) {\n if (value) {\n onChange({ e, value: null });\n }\n return;\n }\n\n const formatArray = getParts(formatProp, separator, false);\n const valueArray = getParts(stringValue, separator, false);\n const validArray = formatArray\n .map((marker) => getPartDate(formatArray, valueArray, marker))\n .filter((item) => Boolean(item));\n\n if (formatArray.length === validArray.length) {\n const date = parse(\n valueArray.join(datePickerPropSeparatorDefault),\n formatArray.join(datePickerPropSeparatorDefault),\n new Date(),\n );\n\n if (!isWithinInterval(date, { start: minDate, end: maxDate })) {\n const [dd, MM, yyyy] = getPartsDate(\n stringValue,\n formatProp,\n separator,\n false,\n ['dd', 'MM', 'yyyy'],\n );\n\n onErrorRef.current?.({\n type: datePickerErrorTypes[0],\n stringValue,\n dd,\n MM,\n yyyy,\n date,\n });\n if (value) {\n onChange({ e, value: null });\n }\n\n return;\n }\n onChange({ e, value: date });\n } else if (value) {\n onChange({ e, value: null });\n }\n }\n },\n [minDate?.getTime(), maxDate?.getTime(), formatProp, separator],\n );\n\n const options: IMask.InputMask<IMask.MaskedDateOptions> = useMemo(\n () =>\n ({\n mask: Date,\n pattern: formatProp,\n blocks: {\n yyyy: {\n mask: IMask.MaskedRange,\n from: 1,\n to: 9999,\n },\n MM: {\n mask: IMask.MaskedRange,\n from: 1,\n to: 12,\n },\n dd: {\n mask: IMask.MaskedRange,\n from: 1,\n to: 31,\n },\n },\n lazy: true,\n autofix: true,\n format: (date: Date) => format(date, formatProp),\n parse: (string: string) => parse(string, formatProp, new Date()),\n validate: (string: string) => {\n const formatArray = getParts(formatProp, separator, false);\n const valueArray = getParts(string, separator, false);\n const validArray = formatArray\n .map((marker) => getPartDate(formatArray, valueArray, marker))\n .filter((item) => Boolean(item));\n\n if (\n formatArray.length === validArray.length &&\n !isValid(\n parse(\n valueArray.join(datePickerPropSeparatorDefault),\n formatArray.join(datePickerPropSeparatorDefault),\n new Date(),\n ),\n )\n ) {\n const [dd, MM, yyyy] = getPartsDate(\n string,\n formatProp,\n separator,\n false,\n ['dd', 'MM', 'yyyy'],\n );\n\n onErrorRef.current?.({\n type: datePickerErrorTypes[1],\n stringValue: string,\n dd,\n MM,\n yyyy,\n });\n return false;\n }\n\n return true;\n },\n // проблема в типах IMask\n } as unknown as IMask.InputMask<IMask.MaskedDateOptions>),\n [formatProp, separator],\n );\n\n const { inputRef } = useIMask({\n value: stringValue,\n onChange: (_val, params) => handleChange?.(params),\n maskOptions: options,\n });\n\n const clearValue = (e: Event) => {\n setStringValue(null);\n onChange?.({ e, value: null });\n };\n\n // при изменении value, нужно обновить stringValue\n useEffect(() => {\n if (value && isValid(value)) {\n setStringValue(format(value, formatProp));\n } else if (stringValue?.length === formatProp.length) {\n // если количество введенных символов меньше чем в формате маски\n // то не нужно мешать вводу с клавиатуры\n // если дата была введена полностью и value пришел null,\n // то можно считать что поле нуждается в очистке\n setStringValue('');\n }\n }, [value?.getTime()]);\n\n return {\n stringValue,\n inputRef,\n clearValue,\n };\n};\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import _slicedToArray from"@babel/runtime/helpers/slicedToArray";import{addHours,addMinutes,addSeconds,format as _format,isValid,isWithinInterval,parse as _parse,startOfDay,startOfHour,startOfMinute}from"date-fns";import IMask from"imask";import{useCallback,useEffect,useMemo,useState}from"react";import{useIMask}from"../../TextField";import{useMutableRef}from"../../../hooks/useMutableRef/useMutableRef";import{
|
|
1
|
+
import _slicedToArray from"@babel/runtime/helpers/slicedToArray";import{addHours,addMinutes,addSeconds,format as _format,isValid,isWithinInterval,parse as _parse,startOfDay,startOfHour,startOfMinute}from"date-fns";import IMask from"imask";import{useCallback,useEffect,useMemo,useState}from"react";import{useIMask}from"../../TextField";import{useMutableRef}from"../../../hooks/useMutableRef/useMutableRef";import{getLabelHours,getLabelMinutes,getLabelSeconds}from"../../DateTime/helpers";import{datePickerPropSeparatorDefault,getPartDate,getParts,getPartsDate,getTimeEnum}from"../helpers";import{datePickerErrorTypes}from"../types";export var usePicker=function(a){var b=a.value,c=a.onChange,d=a.onError,f=a.format,g=a.separator,h=a.maxDate,i=a.minDate,j=a.multiplicityHours,k=a.multiplicityMinutes,l=a.multiplicitySeconds,m=useMutableRef(c),n=useMutableRef(b),o=useMutableRef(d),p=useState(b&&isValid(b)?_format(b,f):null),q=_slicedToArray(p,2),r=q[0],s=q[1],t=useMutableRef(r),u=useCallback(function(a){var b=a.e,c=a.value;if(t.current!==c){s(c);var d=m.current,e=n.current;if(d){if(!c)return void(e&&d({e:b,value:null}));var j=getParts(f,g,!1),k=getParts(c,g,!1),l=j.map(function(a){return getPartDate(j,k,a)}).filter(function(a){return!!a});if(j.length===l.length){var A=_parse(k.join(datePickerPropSeparatorDefault),j.join(datePickerPropSeparatorDefault),new Date);if(!isWithinInterval(A,{start:i,end:h})){var p,q=getPartsDate(c,f,g,!0,["dd","MM","yyyy","HH","mm","ss"]),r=_slicedToArray(q,6),u=r[0],v=r[1],w=r[2],x=r[3],y=r[4],z=r[5];return null===(p=o.current)||void 0===p?void 0:p.call(o,{type:datePickerErrorTypes[0],stringValue:c,dd:u,MM:v,yyyy:w,date:A,HH:x,mm:y,ss:z}),void(e&&d({e:b,value:null}))}d({e:b,value:A})}else e&&d({e:b,value:null})}}},[null===i||void 0===i?void 0:i.getTime(),null===h||void 0===h?void 0:h.getTime(),f,g]),v=useMemo(function(){return{mask:Date,pattern:f,blocks:{yyyy:{mask:IMask.MaskedRange,from:1,to:9999},MM:{mask:IMask.MaskedRange,from:1,to:12},dd:{mask:IMask.MaskedRange,from:1,to:31},HH:j&&1<j?{mask:IMask.MaskedEnum,enum:getTimeEnum(24,j,startOfDay,addHours,getLabelHours)}:{mask:IMask.MaskedRange,from:0,to:23},mm:k&&1<k?{mask:IMask.MaskedEnum,enum:getTimeEnum(60,k,startOfHour,addMinutes,getLabelMinutes)}:{mask:IMask.MaskedRange,from:0,to:59},ss:l&&1<l?{mask:IMask.MaskedEnum,enum:getTimeEnum(60,l,startOfMinute,addSeconds,getLabelSeconds)}:{mask:IMask.MaskedRange,from:0,to:59}},lazy:!0,autofix:!0,format:function format(a){return _format(a,f)},parse:function parse(a){return _parse(a,f,new Date)},validate:function validate(a){var b=getParts(f,g,!1),c=getParts(a,g,!1),d=b.map(function(a){return getPartDate(b,c,a)}).filter(function(a){return!!a});if(b.length===d.length&&!isValid(_parse(c.join(datePickerPropSeparatorDefault),b.join(datePickerPropSeparatorDefault),new Date))){var e,h=getPartsDate(a,f,g,!0,["dd","MM","yyyy","HH","mm","ss"]),i=_slicedToArray(h,6),j=i[0],k=i[1],l=i[2],m=i[3],n=i[4],p=i[5];return null===(e=o.current)||void 0===e?void 0:e.call(o,{type:datePickerErrorTypes[1],stringValue:a,dd:j,MM:k,yyyy:l,HH:m,mm:n,ss:p}),!1}return!0}}},[f,g,j,l,k]),w=useIMask({value:r,onChange:function(a,b){return null===u||void 0===u?void 0:u(b)},maskOptions:v}),x=w.inputRef;return useEffect(function(){b&&isValid(b)?s(_format(b,f)):(null===r||void 0===r?void 0:r.length)===f.length&&s("")},[null===b||void 0===b?void 0:b.getTime()]),{stringValue:r,inputRef:x,clearValue:function clearValue(a){s(null),null===c||void 0===c?void 0:c({e:a,value:null})}}};
|
|
2
2
|
//# sourceMappingURL=helpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","names":["addHours","addMinutes","addSeconds","format","isValid","isWithinInterval","parse","startOfDay","startOfHour","startOfMinute","IMask","useCallback","useEffect","useMemo","useState","useIMask","useMutableRef","leapYear","getLabelHours","getLabelMinutes","getLabelSeconds","datePickerPropFormatTypeDate","datePickerPropFormatTypeDateTime","datePickerPropSeparatorDefault","getParts","getPartsDate","getTimeEnum","datePickerErrorTypes","usePicker","props","value","onChange","onError","formatProp","separator","maxDate","minDate","multiplicityHours","multiplicityMinutes","multiplicitySeconds","onChangeRef","valueRef","onErrorRef","stringValue","setStringValue","stringValueRef","formatParts","handleChange","e","current","partsDate","dd","MM","yyyy","HH","mm","ss","filter","item","length","date","Date","start","end","type","getTime","options","mask","pattern","blocks","MaskedRange","from","to","MaskedEnum","lazy","autofix","string","validate","_val","params","maskOptions","inputRef","clearValue"],"sources":["../../../../../../src/components/DatePicker/DatePickerFieldTypeDateTime/helpers.ts"],"sourcesContent":["import { IconComponent, IconPropSize } from '@consta/icons/Icon';\nimport {\n addHours,\n addMinutes,\n addSeconds,\n format,\n isValid,\n isWithinInterval,\n parse,\n startOfDay,\n startOfHour,\n startOfMinute,\n} from 'date-fns';\nimport IMask from 'imask';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { useIMask } from '##/components/TextField';\n\nimport { useMutableRef } from '../../../hooks/useMutableRef/useMutableRef';\nimport { leapYear } from '../../../utils/date';\nimport { PropsWithHTMLAttributes } from '../../../utils/types/PropsWithHTMLAttributes';\nimport {\n getLabelHours,\n getLabelMinutes,\n getLabelSeconds,\n} from '../../DateTime/helpers';\nimport {\n TextFieldPropForm,\n TextFieldPropSize,\n TextFieldPropStatus,\n TextFieldPropView,\n TextFieldPropWidth,\n} from '../../TextField/TextField';\nimport {\n datePickerPropFormatTypeDate,\n datePickerPropFormatTypeDateTime,\n datePickerPropSeparatorDefault,\n getParts,\n getPartsDate,\n getTimeEnum,\n} from '../helpers';\nimport { datePickerErrorTypes, DatePickerPropOnError } from '../types';\n\ntype DatePickerFieldTypeDateTimePropOnChange = (props: {\n e: Event;\n value: Date | null;\n}) => void;\n\nexport type DatePickerFieldTypeDateTimeProps = PropsWithHTMLAttributes<\n {\n className?: string;\n value?: Date | null;\n onChange?: DatePickerFieldTypeDateTimePropOnChange;\n onError?: DatePickerPropOnError;\n id?: string;\n name?: string;\n disabled?: boolean;\n size?: TextFieldPropSize;\n view?: TextFieldPropView;\n form?: TextFieldPropForm;\n status?: TextFieldPropStatus;\n width?: TextFieldPropWidth;\n onFocus?: React.FocusEventHandler<HTMLElement>;\n onBlur?: React.FocusEventHandler<HTMLElement>;\n autoFocus?: boolean;\n placeholder?: string;\n leftSide?: string | IconComponent;\n rightSide?: string | IconComponent;\n readOnly?: boolean;\n required?: boolean;\n tabIndex?: number;\n inputRef?: React.Ref<HTMLTextAreaElement | HTMLInputElement>;\n ariaLabel?: string;\n iconSize?: IconPropSize;\n children?: never;\n format?: string;\n separator?: string;\n minDate?: Date;\n maxDate?: Date;\n focused?: boolean;\n multiplicitySeconds?: number;\n multiplicityMinutes?: number;\n multiplicityHours?: number;\n label?: string;\n labelIcon?: IconComponent;\n caption?: string;\n labelPosition?: 'top' | 'left';\n withClearButton?: boolean;\n },\n HTMLDivElement\n>;\n\ntype UsePickerProps = {\n value?: Date | null;\n onChange?: DatePickerFieldTypeDateTimePropOnChange;\n onError?: DatePickerPropOnError;\n format: string;\n separator: string;\n minDate: Date;\n maxDate: Date;\n multiplicityHours: number | undefined;\n multiplicitySeconds: number | undefined;\n multiplicityMinutes: number | undefined;\n};\n\nexport const usePicker = (props: UsePickerProps) => {\n const {\n value,\n onChange,\n onError,\n format: formatProp,\n separator,\n maxDate,\n minDate,\n multiplicityHours,\n multiplicityMinutes,\n multiplicitySeconds,\n } = props;\n const onChangeRef = useMutableRef(onChange);\n const valueRef = useMutableRef(value);\n const onErrorRef = useMutableRef(onError);\n\n const [stringValue, setStringValue] = useState<string | null>(\n value && isValid(value) ? format(value, formatProp) : null,\n );\n const stringValueRef = useMutableRef(stringValue);\n\n const formatParts = useMemo(\n () => getParts(formatProp, separator, true),\n [formatProp, separator],\n );\n\n const handleChange = useCallback(\n ({ e, value: stringValue }: { e: Event; value: string | null }) => {\n if (stringValueRef.current === stringValue) {\n return;\n }\n\n setStringValue(stringValue);\n const onChange = onChangeRef.current;\n const value = valueRef.current;\n\n if (onChange) {\n if (!stringValue) {\n if (value) {\n onChange({ e, value: null });\n }\n return;\n }\n\n const partsDate = getPartsDate(\n stringValue,\n formatProp,\n separator,\n true,\n ['dd', 'MM', 'yyyy', 'HH', 'mm', 'ss'],\n );\n\n const [dd, MM, yyyy, HH, mm, ss] = partsDate;\n\n if (partsDate.filter((item) => !!item).length === formatParts.length) {\n const date = parse(\n `${dd}${datePickerPropSeparatorDefault}${MM}${datePickerPropSeparatorDefault}${yyyy} ${\n HH || '00'\n }:${mm || '00'}:${ss || '00'}`,\n datePickerPropFormatTypeDateTime,\n new Date(),\n );\n if (!isWithinInterval(date, { start: minDate, end: maxDate })) {\n onErrorRef.current?.({\n type: datePickerErrorTypes[0],\n stringValue,\n dd,\n MM,\n yyyy,\n date,\n HH,\n mm,\n ss,\n });\n\n if (value) {\n onChange({ e, value: null });\n }\n return;\n }\n onChange({ e, value: date });\n } else if (value) {\n onChange({ e, value: null });\n }\n }\n },\n [minDate?.getTime(), maxDate?.getTime(), formatProp, separator],\n );\n\n const options: IMask.InputMask<IMask.MaskedDateOptions> = useMemo(\n () =>\n ({\n mask: Date,\n pattern: formatProp,\n blocks: {\n yyyy: {\n mask: IMask.MaskedRange,\n from: 1,\n to: 9999,\n },\n MM: {\n mask: IMask.MaskedRange,\n from: 1,\n to: 12,\n },\n dd: {\n mask: IMask.MaskedRange,\n from: 1,\n to: 31,\n },\n HH:\n multiplicityHours && multiplicityHours > 1\n ? {\n mask: IMask.MaskedEnum,\n enum: getTimeEnum(\n 24,\n multiplicityHours,\n startOfDay,\n addHours,\n getLabelHours,\n ),\n }\n : {\n mask: IMask.MaskedRange,\n from: 0,\n to: 23,\n },\n mm:\n multiplicityMinutes && multiplicityMinutes > 1\n ? {\n mask: IMask.MaskedEnum,\n enum: getTimeEnum(\n 60,\n multiplicityMinutes,\n startOfHour,\n addMinutes,\n getLabelMinutes,\n ),\n }\n : {\n mask: IMask.MaskedRange,\n from: 0,\n to: 59,\n },\n ss:\n multiplicitySeconds && multiplicitySeconds > 1\n ? {\n mask: IMask.MaskedEnum,\n enum: getTimeEnum(\n 60,\n multiplicitySeconds,\n startOfMinute,\n addSeconds,\n getLabelSeconds,\n ),\n }\n : {\n mask: IMask.MaskedRange,\n from: 0,\n to: 59,\n },\n },\n lazy: true,\n autofix: true,\n format: (date: Date) => format(date, formatProp),\n parse: (string: string) => parse(string, formatProp, new Date()),\n validate: (string: string) => {\n const [dd, MM, yyyy, HH, mm, ss] = getPartsDate(\n string,\n formatProp,\n separator,\n true,\n ['dd', 'MM', 'yyyy', 'HH', 'mm', 'ss'],\n );\n if (\n dd &&\n MM &&\n !isValid(\n parse(\n `${dd}${datePickerPropSeparatorDefault}${MM}${datePickerPropSeparatorDefault}${leapYear}`,\n datePickerPropFormatTypeDate,\n new Date(),\n ),\n )\n ) {\n onErrorRef.current?.({\n type: datePickerErrorTypes[1],\n stringValue: string,\n dd,\n MM,\n yyyy,\n HH,\n mm,\n ss,\n });\n return false;\n }\n if (\n dd &&\n MM &&\n yyyy &&\n !isValid(\n parse(\n `${dd}${datePickerPropSeparatorDefault}${MM}${datePickerPropSeparatorDefault}${yyyy}`,\n datePickerPropFormatTypeDate,\n new Date(),\n ),\n )\n ) {\n onErrorRef.current?.({\n type: datePickerErrorTypes[1],\n stringValue: string,\n dd,\n MM,\n yyyy,\n HH,\n mm,\n ss,\n });\n return false;\n }\n return true;\n },\n // проблема в типах IMask\n } as unknown as IMask.InputMask<IMask.MaskedDateOptions>),\n [\n formatProp,\n separator,\n multiplicityHours,\n multiplicitySeconds,\n multiplicityMinutes,\n ],\n );\n\n const { inputRef } = useIMask({\n value: stringValue,\n onChange: (_val, params) => handleChange?.(params),\n maskOptions: options,\n });\n\n const clearValue = (e: Event) => {\n setStringValue(null);\n onChange?.({ e, value: null });\n };\n\n // при изменении value, нужно обновить stringValue\n useEffect(() => {\n if (value && isValid(value)) {\n setStringValue(format(value, formatProp));\n } else if (stringValue?.length === formatProp.length) {\n // если количество введенных символов меньше чем в формате маски\n // то не нужно мешать вводу с клавиатуры\n // если дата была введена полностью и value пришел null,\n // то можно считать что поле нуждается в очистке\n setStringValue('');\n }\n }, [value?.getTime()]);\n\n return {\n stringValue,\n inputRef,\n clearValue,\n };\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"helpers.js","names":["addHours","addMinutes","addSeconds","format","isValid","isWithinInterval","parse","startOfDay","startOfHour","startOfMinute","IMask","useCallback","useEffect","useMemo","useState","useIMask","useMutableRef","getLabelHours","getLabelMinutes","getLabelSeconds","datePickerPropSeparatorDefault","getPartDate","getParts","getPartsDate","getTimeEnum","datePickerErrorTypes","usePicker","props","value","onChange","onError","formatProp","separator","maxDate","minDate","multiplicityHours","multiplicityMinutes","multiplicitySeconds","onChangeRef","valueRef","onErrorRef","stringValue","setStringValue","stringValueRef","handleChange","e","current","formatArray","valueArray","validArray","map","marker","filter","item","length","date","join","Date","start","end","dd","MM","yyyy","HH","mm","ss","type","getTime","options","mask","pattern","blocks","MaskedRange","from","to","MaskedEnum","lazy","autofix","string","validate","_val","params","maskOptions","inputRef","clearValue"],"sources":["../../../../../../src/components/DatePicker/DatePickerFieldTypeDateTime/helpers.ts"],"sourcesContent":["import { IconComponent, IconPropSize } from '@consta/icons/Icon';\nimport {\n addHours,\n addMinutes,\n addSeconds,\n format,\n isValid,\n isWithinInterval,\n parse,\n startOfDay,\n startOfHour,\n startOfMinute,\n} from 'date-fns';\nimport IMask from 'imask';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { useIMask } from '##/components/TextField';\n\nimport { useMutableRef } from '../../../hooks/useMutableRef/useMutableRef';\nimport { PropsWithHTMLAttributes } from '../../../utils/types/PropsWithHTMLAttributes';\nimport {\n getLabelHours,\n getLabelMinutes,\n getLabelSeconds,\n} from '../../DateTime/helpers';\nimport {\n TextFieldPropForm,\n TextFieldPropSize,\n TextFieldPropStatus,\n TextFieldPropView,\n TextFieldPropWidth,\n} from '../../TextField/TextField';\nimport {\n datePickerPropSeparatorDefault,\n getPartDate,\n getParts,\n getPartsDate,\n getTimeEnum,\n} from '../helpers';\nimport { datePickerErrorTypes, DatePickerPropOnError } from '../types';\n\ntype DatePickerFieldTypeDateTimePropOnChange = (props: {\n e: Event;\n value: Date | null;\n}) => void;\n\nexport type DatePickerFieldTypeDateTimeProps = PropsWithHTMLAttributes<\n {\n className?: string;\n value?: Date | null;\n onChange?: DatePickerFieldTypeDateTimePropOnChange;\n onError?: DatePickerPropOnError;\n id?: string;\n name?: string;\n disabled?: boolean;\n size?: TextFieldPropSize;\n view?: TextFieldPropView;\n form?: TextFieldPropForm;\n status?: TextFieldPropStatus;\n width?: TextFieldPropWidth;\n onFocus?: React.FocusEventHandler<HTMLElement>;\n onBlur?: React.FocusEventHandler<HTMLElement>;\n autoFocus?: boolean;\n placeholder?: string;\n leftSide?: string | IconComponent;\n rightSide?: string | IconComponent;\n readOnly?: boolean;\n required?: boolean;\n tabIndex?: number;\n inputRef?: React.Ref<HTMLTextAreaElement | HTMLInputElement>;\n ariaLabel?: string;\n iconSize?: IconPropSize;\n children?: never;\n format?: string;\n separator?: string;\n minDate?: Date;\n maxDate?: Date;\n focused?: boolean;\n multiplicitySeconds?: number;\n multiplicityMinutes?: number;\n multiplicityHours?: number;\n label?: string;\n labelIcon?: IconComponent;\n caption?: string;\n labelPosition?: 'top' | 'left';\n withClearButton?: boolean;\n },\n HTMLDivElement\n>;\n\ntype UsePickerProps = {\n value?: Date | null;\n onChange?: DatePickerFieldTypeDateTimePropOnChange;\n onError?: DatePickerPropOnError;\n format: string;\n separator: string;\n minDate: Date;\n maxDate: Date;\n multiplicityHours: number | undefined;\n multiplicitySeconds: number | undefined;\n multiplicityMinutes: number | undefined;\n};\n\nexport const usePicker = (props: UsePickerProps) => {\n const {\n value,\n onChange,\n onError,\n format: formatProp,\n separator,\n maxDate,\n minDate,\n multiplicityHours,\n multiplicityMinutes,\n multiplicitySeconds,\n } = props;\n const onChangeRef = useMutableRef(onChange);\n const valueRef = useMutableRef(value);\n const onErrorRef = useMutableRef(onError);\n\n const [stringValue, setStringValue] = useState<string | null>(\n value && isValid(value) ? format(value, formatProp) : null,\n );\n const stringValueRef = useMutableRef(stringValue);\n\n const handleChange = useCallback(\n ({ e, value: stringValue }: { e: Event; value: string | null }) => {\n if (stringValueRef.current === stringValue) {\n return;\n }\n\n setStringValue(stringValue);\n const onChange = onChangeRef.current;\n const value = valueRef.current;\n\n if (onChange) {\n if (!stringValue) {\n if (value) {\n onChange({ e, value: null });\n }\n return;\n }\n\n const formatArray = getParts(formatProp, separator, false);\n const valueArray = getParts(stringValue, separator, false);\n const validArray = formatArray\n .map((marker) => getPartDate(formatArray, valueArray, marker))\n .filter((item) => Boolean(item));\n\n if (formatArray.length === validArray.length) {\n const date = parse(\n valueArray.join(datePickerPropSeparatorDefault),\n formatArray.join(datePickerPropSeparatorDefault),\n new Date(),\n );\n\n if (!isWithinInterval(date, { start: minDate, end: maxDate })) {\n const [dd, MM, yyyy, HH, mm, ss] = getPartsDate(\n stringValue,\n formatProp,\n separator,\n true,\n ['dd', 'MM', 'yyyy', 'HH', 'mm', 'ss'],\n );\n\n onErrorRef.current?.({\n type: datePickerErrorTypes[0],\n stringValue,\n dd,\n MM,\n yyyy,\n date,\n HH,\n mm,\n ss,\n });\n\n if (value) {\n onChange({ e, value: null });\n }\n return;\n }\n onChange({ e, value: date });\n } else if (value) {\n onChange({ e, value: null });\n }\n }\n },\n [minDate?.getTime(), maxDate?.getTime(), formatProp, separator],\n );\n\n const options: IMask.InputMask<IMask.MaskedDateOptions> = useMemo(\n () =>\n ({\n mask: Date,\n pattern: formatProp,\n blocks: {\n yyyy: {\n mask: IMask.MaskedRange,\n from: 1,\n to: 9999,\n },\n MM: {\n mask: IMask.MaskedRange,\n from: 1,\n to: 12,\n },\n dd: {\n mask: IMask.MaskedRange,\n from: 1,\n to: 31,\n },\n HH:\n multiplicityHours && multiplicityHours > 1\n ? {\n mask: IMask.MaskedEnum,\n enum: getTimeEnum(\n 24,\n multiplicityHours,\n startOfDay,\n addHours,\n getLabelHours,\n ),\n }\n : {\n mask: IMask.MaskedRange,\n from: 0,\n to: 23,\n },\n mm:\n multiplicityMinutes && multiplicityMinutes > 1\n ? {\n mask: IMask.MaskedEnum,\n enum: getTimeEnum(\n 60,\n multiplicityMinutes,\n startOfHour,\n addMinutes,\n getLabelMinutes,\n ),\n }\n : {\n mask: IMask.MaskedRange,\n from: 0,\n to: 59,\n },\n ss:\n multiplicitySeconds && multiplicitySeconds > 1\n ? {\n mask: IMask.MaskedEnum,\n enum: getTimeEnum(\n 60,\n multiplicitySeconds,\n startOfMinute,\n addSeconds,\n getLabelSeconds,\n ),\n }\n : {\n mask: IMask.MaskedRange,\n from: 0,\n to: 59,\n },\n },\n lazy: true,\n autofix: true,\n format: (date: Date) => format(date, formatProp),\n parse: (string: string) => parse(string, formatProp, new Date()),\n validate: (string: string) => {\n const formatArray = getParts(formatProp, separator, false);\n const valueArray = getParts(string, separator, false);\n const validArray = formatArray\n .map((marker) => getPartDate(formatArray, valueArray, marker))\n .filter((item) => Boolean(item));\n\n if (\n formatArray.length === validArray.length &&\n !isValid(\n parse(\n valueArray.join(datePickerPropSeparatorDefault),\n formatArray.join(datePickerPropSeparatorDefault),\n new Date(),\n ),\n )\n ) {\n const [dd, MM, yyyy, HH, mm, ss] = getPartsDate(\n string,\n formatProp,\n separator,\n true,\n ['dd', 'MM', 'yyyy', 'HH', 'mm', 'ss'],\n );\n\n onErrorRef.current?.({\n type: datePickerErrorTypes[1],\n stringValue: string,\n dd,\n MM,\n yyyy,\n HH,\n mm,\n ss,\n });\n return false;\n }\n\n return true;\n },\n // проблема в типах IMask\n } as unknown as IMask.InputMask<IMask.MaskedDateOptions>),\n [\n formatProp,\n separator,\n multiplicityHours,\n multiplicitySeconds,\n multiplicityMinutes,\n ],\n );\n\n const { inputRef } = useIMask({\n value: stringValue,\n onChange: (_val, params) => handleChange?.(params),\n maskOptions: options,\n });\n\n const clearValue = (e: Event) => {\n setStringValue(null);\n onChange?.({ e, value: null });\n };\n\n // при изменении value, нужно обновить stringValue\n useEffect(() => {\n if (value && isValid(value)) {\n setStringValue(format(value, formatProp));\n } else if (stringValue?.length === formatProp.length) {\n // если количество введенных символов меньше чем в формате маски\n // то не нужно мешать вводу с клавиатуры\n // если дата была введена полностью и value пришел null,\n // то можно считать что поле нуждается в очистке\n setStringValue('');\n }\n }, [value?.getTime()]);\n\n return {\n stringValue,\n inputRef,\n clearValue,\n };\n};\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import _slicedToArray from"@babel/runtime/helpers/slicedToArray";import{format as _format,isValid,isWithinInterval,parse as _parse}from"date-fns";import IMask from"imask";import{useCallback,useEffect,useMemo,useState}from"react";import{useIMask}from"../../TextField";import{useMutableRef}from"../../../hooks/useMutableRef/useMutableRef";import{
|
|
1
|
+
import _slicedToArray from"@babel/runtime/helpers/slicedToArray";import{format as _format,isValid,isWithinInterval,parse as _parse}from"date-fns";import IMask from"imask";import{useCallback,useEffect,useMemo,useState}from"react";import{useIMask}from"../../TextField";import{useMutableRef}from"../../../hooks/useMutableRef/useMutableRef";import{datePickerPropSeparatorDefault,getPartDate,getParts,getPartsDate}from"../helpers";import{datePickerErrorTypes}from"../types";export var usePicker=function(a){var b=a.value,c=a.onChange,d=a.onError,f=a.format,g=a.separator,h=a.maxDate,i=a.minDate,j=useMutableRef(c),k=useMutableRef(b),l=useMutableRef(d),m=useState(b&&isValid(b)?_format(b,f):null),n=_slicedToArray(m,2),o=n[0],p=n[1],q=useMutableRef(o),r=useCallback(function(a){var b=a.e,c=a.value;if(q.current!==c){p(c);var d=j.current,e=k.current;if(d){if(!c)return void(e&&d({e:b,value:null}));var m=getParts(f,g,!1),n=getParts(c,g,!1),o=m.map(function(a){return getPartDate(m,n,a)}).filter(function(a){return!!a});if(m.length===o.length){var w=_parse(n.join(datePickerPropSeparatorDefault),m.join(datePickerPropSeparatorDefault),new Date);if(!isWithinInterval(w,{start:i,end:h})){var r,s=getPartsDate(c,f,g,!1,["MM","yyyy"]),t=_slicedToArray(s,2),u=t[0],v=t[1];return null===(r=l.current)||void 0===r?void 0:r.call(l,{type:datePickerErrorTypes[0],stringValue:c,MM:u,yyyy:v,date:w}),void(e&&d({e:b,value:null}))}d({e:b,value:w})}else e&&d({e:b,value:null})}}},[null===i||void 0===i?void 0:i.getTime(),null===h||void 0===h?void 0:h.getTime(),f,g]),s=useMemo(function(){return{mask:Date,pattern:f,blocks:{yyyy:{mask:IMask.MaskedRange,from:1,to:9999},MM:{mask:IMask.MaskedRange,from:1,to:12}},lazy:!0,autofix:!0,format:function format(a){return _format(a,f)},parse:function parse(a){return _parse(a,f,new Date)},validate:function validate(a){var b=getParts(f,g,!1),c=getParts(a,g,!1),d=b.map(function(a){return getPartDate(b,c,a)}).filter(function(a){return!!a});if(b.length===d.length&&!isValid(_parse(c.join(datePickerPropSeparatorDefault),b.join(datePickerPropSeparatorDefault),new Date))){var e,h=getPartsDate(a,f,g,!1,["MM","yyyy"]),i=_slicedToArray(h,2),j=i[0],k=i[1];return null===(e=l.current)||void 0===e?void 0:e.call(l,{type:datePickerErrorTypes[1],stringValue:a,MM:j,yyyy:k}),!1}return!0}}},[f,g]),t=useIMask({value:o,onChange:function(a,b){return null===r||void 0===r?void 0:r(b)},maskOptions:s}),u=t.inputRef;return useEffect(function(){b&&isValid(b)?p(_format(b,f)):(null===o||void 0===o?void 0:o.length)===f.length&&p("")},[null===b||void 0===b?void 0:b.getTime()]),{stringValue:o,inputRef:u,clearValue:function clearValue(a){p(null),null===c||void 0===c?void 0:c({e:a,value:null})}}};
|
|
2
2
|
//# sourceMappingURL=helpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","names":["format","isValid","isWithinInterval","parse","IMask","useCallback","useEffect","useMemo","useState","useIMask","useMutableRef","datePickerPropFormatTypeMonth","datePickerPropSeparatorDefault","getPartsDate","datePickerErrorTypes","usePicker","props","value","onChange","onError","formatProp","separator","maxDate","minDate","onChangeRef","valueRef","onErrorRef","stringValue","setStringValue","stringValueRef","handleChange","e","current","MM","yyyy","date","Date","start","end","type","getTime","options","mask","pattern","blocks","MaskedRange","from","to","lazy","autofix","string","validate","_val","params","maskOptions","inputRef","length","clearValue"],"sources":["../../../../../../src/components/DatePicker/DatePickerFieldTypeMonth/helpers.ts"],"sourcesContent":["import { IconComponent, IconPropSize } from '@consta/icons/Icon';\nimport { format, isValid, isWithinInterval, parse } from 'date-fns';\nimport IMask from 'imask';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { useIMask } from '##/components/TextField';\n\nimport { useMutableRef } from '../../../hooks/useMutableRef/useMutableRef';\nimport { PropsWithHTMLAttributes } from '../../../utils/types/PropsWithHTMLAttributes';\nimport {\n TextFieldPropForm,\n TextFieldPropSize,\n TextFieldPropStatus,\n TextFieldPropView,\n TextFieldPropWidth,\n} from '../../TextField/TextField';\nimport {\n datePickerPropFormatTypeMonth,\n datePickerPropSeparatorDefault,\n getPartsDate,\n} from '../helpers';\nimport { datePickerErrorTypes, DatePickerPropOnError } from '../types';\n\ntype DatePickerFieldTypeMonthPropOnChange = (props: {\n e: Event;\n value: Date | null;\n}) => void;\n\nexport type DatePickerFieldTypeMonthProps = PropsWithHTMLAttributes<\n {\n className?: string;\n value?: Date | null;\n onChange?: DatePickerFieldTypeMonthPropOnChange;\n onError?: DatePickerPropOnError;\n id?: string;\n name?: string;\n disabled?: boolean;\n size?: TextFieldPropSize;\n view?: TextFieldPropView;\n form?: TextFieldPropForm;\n status?: TextFieldPropStatus;\n width?: TextFieldPropWidth;\n onFocus?: React.FocusEventHandler<HTMLElement>;\n onBlur?: React.FocusEventHandler<HTMLElement>;\n autoFocus?: boolean;\n placeholder?: string;\n leftSide?: string | IconComponent;\n rightSide?: string | IconComponent;\n readOnly?: boolean;\n required?: boolean;\n tabIndex?: number;\n inputRef?: React.Ref<HTMLTextAreaElement | HTMLInputElement>;\n ariaLabel?: string;\n iconSize?: IconPropSize;\n children?: never;\n format?: string;\n separator?: string;\n minDate?: Date;\n maxDate?: Date;\n focused?: boolean;\n label?: string;\n labelIcon?: IconComponent;\n caption?: string;\n labelPosition?: 'top' | 'left';\n withClearButton?: boolean;\n },\n HTMLDivElement\n>;\n\ntype UsePickerProps = {\n value?: Date | null;\n onChange?: DatePickerFieldTypeMonthPropOnChange;\n onError?: DatePickerPropOnError;\n format: string;\n separator: string;\n minDate: Date;\n maxDate: Date;\n};\n\nexport const usePicker = (props: UsePickerProps) => {\n const {\n value,\n onChange,\n onError,\n format: formatProp,\n separator,\n maxDate,\n minDate,\n } = props;\n const onChangeRef = useMutableRef(onChange);\n const valueRef = useMutableRef(value);\n const onErrorRef = useMutableRef(onError);\n\n const [stringValue, setStringValue] = useState<string | null>(\n value && isValid(value) ? format(value, formatProp) : null,\n );\n const stringValueRef = useMutableRef(stringValue);\n\n const handleChange = useCallback(\n ({ e, value: stringValue }: { e: Event; value: string | null }) => {\n if (stringValueRef.current === stringValue) {\n return;\n }\n setStringValue(stringValue);\n const onChange = onChangeRef.current;\n const value = valueRef.current;\n if (onChange) {\n if (!stringValue) {\n if (value) {\n onChange({ e, value: null });\n }\n return;\n }\n const [MM, yyyy] = getPartsDate(\n stringValue,\n formatProp,\n separator,\n false,\n ['MM', 'yyyy'],\n );\n if (MM && yyyy) {\n const date = parse(\n `${MM}${datePickerPropSeparatorDefault}${yyyy}`,\n datePickerPropFormatTypeMonth,\n new Date(),\n );\n if (!isWithinInterval(date, { start: minDate, end: maxDate })) {\n onErrorRef.current?.({\n type: datePickerErrorTypes[0],\n stringValue,\n MM,\n yyyy,\n date,\n });\n if (value) {\n onChange({ e, value: null });\n }\n return;\n }\n onChange({ e, value: date });\n } else if (value) {\n onChange({ e, value: null });\n }\n }\n },\n [minDate?.getTime(), maxDate?.getTime(), formatProp, separator],\n );\n\n const options: IMask.InputMask<IMask.MaskedDateOptions> = useMemo(\n () =>\n ({\n mask: Date,\n pattern: formatProp,\n blocks: {\n yyyy: {\n mask: IMask.MaskedRange,\n from: 1,\n to: 9999,\n },\n MM: {\n mask: IMask.MaskedRange,\n from: 1,\n to: 12,\n },\n },\n lazy: true,\n autofix: true,\n format: (date: Date) => format(date, formatProp),\n parse: (string: string) => parse(string, formatProp, new Date()),\n validate: (string: string) => {\n const [MM, yyyy] = getPartsDate(\n string,\n formatProp,\n separator,\n false,\n ['MM', 'yyyy'],\n );\n if (\n MM &&\n yyyy &&\n !isValid(\n parse(\n `${MM}${datePickerPropSeparatorDefault}${yyyy}`,\n datePickerPropFormatTypeMonth,\n new Date(),\n ),\n )\n ) {\n onError &&\n onErrorRef.current?.({\n type: datePickerErrorTypes[1],\n stringValue: string,\n MM,\n yyyy,\n });\n\n return false;\n }\n return true;\n },\n // проблема в типах IMask\n } as unknown as IMask.InputMask<IMask.MaskedDateOptions>),\n [formatProp, separator],\n );\n\n const { inputRef } = useIMask({\n value: stringValue,\n onChange: (_val, params) => handleChange?.(params),\n maskOptions: options,\n });\n\n const clearValue = (e: Event) => {\n setStringValue(null);\n onChange?.({ e, value: null });\n };\n\n // при изменении value, нужно обновить stringValue\n useEffect(() => {\n if (value && isValid(value)) {\n setStringValue(format(value, formatProp));\n } else if (stringValue?.length === formatProp.length) {\n // если количество введенных символов меньше чем в формате маски\n // то не нужно мешать вводу с клавиатуры\n // если дата была введена полностью и value пришел null,\n // то можно считать что поле нуждается в очистке\n setStringValue('');\n }\n }, [value?.getTime()]);\n\n return {\n stringValue,\n inputRef,\n clearValue,\n };\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"helpers.js","names":["format","isValid","isWithinInterval","parse","IMask","useCallback","useEffect","useMemo","useState","useIMask","useMutableRef","datePickerPropSeparatorDefault","getPartDate","getParts","getPartsDate","datePickerErrorTypes","usePicker","props","value","onChange","onError","formatProp","separator","maxDate","minDate","onChangeRef","valueRef","onErrorRef","stringValue","setStringValue","stringValueRef","handleChange","e","current","formatArray","valueArray","validArray","map","marker","filter","item","length","date","join","Date","start","end","MM","yyyy","type","getTime","options","mask","pattern","blocks","MaskedRange","from","to","lazy","autofix","string","validate","_val","params","maskOptions","inputRef","clearValue"],"sources":["../../../../../../src/components/DatePicker/DatePickerFieldTypeMonth/helpers.ts"],"sourcesContent":["import { IconComponent, IconPropSize } from '@consta/icons/Icon';\nimport { format, isValid, isWithinInterval, parse } from 'date-fns';\nimport IMask from 'imask';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { useIMask } from '##/components/TextField';\n\nimport { useMutableRef } from '../../../hooks/useMutableRef/useMutableRef';\nimport { PropsWithHTMLAttributes } from '../../../utils/types/PropsWithHTMLAttributes';\nimport {\n TextFieldPropForm,\n TextFieldPropSize,\n TextFieldPropStatus,\n TextFieldPropView,\n TextFieldPropWidth,\n} from '../../TextField/TextField';\nimport {\n datePickerPropSeparatorDefault,\n getPartDate,\n getParts,\n getPartsDate,\n} from '../helpers';\nimport { datePickerErrorTypes, DatePickerPropOnError } from '../types';\n\ntype DatePickerFieldTypeMonthPropOnChange = (props: {\n e: Event;\n value: Date | null;\n}) => void;\n\nexport type DatePickerFieldTypeMonthProps = PropsWithHTMLAttributes<\n {\n className?: string;\n value?: Date | null;\n onChange?: DatePickerFieldTypeMonthPropOnChange;\n onError?: DatePickerPropOnError;\n id?: string;\n name?: string;\n disabled?: boolean;\n size?: TextFieldPropSize;\n view?: TextFieldPropView;\n form?: TextFieldPropForm;\n status?: TextFieldPropStatus;\n width?: TextFieldPropWidth;\n onFocus?: React.FocusEventHandler<HTMLElement>;\n onBlur?: React.FocusEventHandler<HTMLElement>;\n autoFocus?: boolean;\n placeholder?: string;\n leftSide?: string | IconComponent;\n rightSide?: string | IconComponent;\n readOnly?: boolean;\n required?: boolean;\n tabIndex?: number;\n inputRef?: React.Ref<HTMLTextAreaElement | HTMLInputElement>;\n ariaLabel?: string;\n iconSize?: IconPropSize;\n children?: never;\n format?: string;\n separator?: string;\n minDate?: Date;\n maxDate?: Date;\n focused?: boolean;\n label?: string;\n labelIcon?: IconComponent;\n caption?: string;\n labelPosition?: 'top' | 'left';\n withClearButton?: boolean;\n },\n HTMLDivElement\n>;\n\ntype UsePickerProps = {\n value?: Date | null;\n onChange?: DatePickerFieldTypeMonthPropOnChange;\n onError?: DatePickerPropOnError;\n format: string;\n separator: string;\n minDate: Date;\n maxDate: Date;\n};\n\nexport const usePicker = (props: UsePickerProps) => {\n const {\n value,\n onChange,\n onError,\n format: formatProp,\n separator,\n maxDate,\n minDate,\n } = props;\n const onChangeRef = useMutableRef(onChange);\n const valueRef = useMutableRef(value);\n const onErrorRef = useMutableRef(onError);\n\n const [stringValue, setStringValue] = useState<string | null>(\n value && isValid(value) ? format(value, formatProp) : null,\n );\n const stringValueRef = useMutableRef(stringValue);\n\n const handleChange = useCallback(\n ({ e, value: stringValue }: { e: Event; value: string | null }) => {\n if (stringValueRef.current === stringValue) {\n return;\n }\n setStringValue(stringValue);\n const onChange = onChangeRef.current;\n const value = valueRef.current;\n if (onChange) {\n if (!stringValue) {\n if (value) {\n onChange({ e, value: null });\n }\n return;\n }\n\n const formatArray = getParts(formatProp, separator, false);\n const valueArray = getParts(stringValue, separator, false);\n const validArray = formatArray\n .map((marker) => getPartDate(formatArray, valueArray, marker))\n .filter((item) => Boolean(item));\n\n if (formatArray.length === validArray.length) {\n const date = parse(\n valueArray.join(datePickerPropSeparatorDefault),\n formatArray.join(datePickerPropSeparatorDefault),\n new Date(),\n );\n if (!isWithinInterval(date, { start: minDate, end: maxDate })) {\n const [MM, yyyy] = getPartsDate(\n stringValue,\n formatProp,\n separator,\n false,\n ['MM', 'yyyy'],\n );\n onErrorRef.current?.({\n type: datePickerErrorTypes[0],\n stringValue,\n MM,\n yyyy,\n date,\n });\n if (value) {\n onChange({ e, value: null });\n }\n return;\n }\n onChange({ e, value: date });\n } else if (value) {\n onChange({ e, value: null });\n }\n }\n },\n [minDate?.getTime(), maxDate?.getTime(), formatProp, separator],\n );\n\n const options: IMask.InputMask<IMask.MaskedDateOptions> = useMemo(\n () =>\n ({\n mask: Date,\n pattern: formatProp,\n blocks: {\n yyyy: {\n mask: IMask.MaskedRange,\n from: 1,\n to: 9999,\n },\n MM: {\n mask: IMask.MaskedRange,\n from: 1,\n to: 12,\n },\n },\n lazy: true,\n autofix: true,\n format: (date: Date) => format(date, formatProp),\n parse: (string: string) => parse(string, formatProp, new Date()),\n validate: (string: string) => {\n const formatArray = getParts(formatProp, separator, false);\n const valueArray = getParts(string, separator, false);\n const validArray = formatArray\n .map((marker) => getPartDate(formatArray, valueArray, marker))\n .filter((item) => Boolean(item));\n\n if (\n formatArray.length === validArray.length &&\n !isValid(\n parse(\n valueArray.join(datePickerPropSeparatorDefault),\n formatArray.join(datePickerPropSeparatorDefault),\n new Date(),\n ),\n )\n ) {\n const [MM, yyyy] = getPartsDate(\n string,\n formatProp,\n separator,\n false,\n ['MM', 'yyyy'],\n );\n\n onErrorRef.current?.({\n type: datePickerErrorTypes[1],\n stringValue: string,\n MM,\n yyyy,\n });\n return false;\n }\n\n return true;\n },\n // проблема в типах IMask\n } as unknown as IMask.InputMask<IMask.MaskedDateOptions>),\n [formatProp, separator],\n );\n\n const { inputRef } = useIMask({\n value: stringValue,\n onChange: (_val, params) => handleChange?.(params),\n maskOptions: options,\n });\n\n const clearValue = (e: Event) => {\n setStringValue(null);\n onChange?.({ e, value: null });\n };\n\n // при изменении value, нужно обновить stringValue\n useEffect(() => {\n if (value && isValid(value)) {\n setStringValue(format(value, formatProp));\n } else if (stringValue?.length === formatProp.length) {\n // если количество введенных символов меньше чем в формате маски\n // то не нужно мешать вводу с клавиатуры\n // если дата была введена полностью и value пришел null,\n // то можно считать что поле нуждается в очистке\n setStringValue('');\n }\n }, [value?.getTime()]);\n\n return {\n stringValue,\n inputRef,\n clearValue,\n };\n};\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import _slicedToArray from"@babel/runtime/helpers/slicedToArray";import{addHours,addMinutes,addSeconds,format as _format,isValid,isWithinInterval,parse as _parse,startOfDay,startOfHour,startOfMinute}from"date-fns";import IMask from"imask";import{useCallback,useEffect,useMemo,useState}from"react";import{useIMask}from"../../TextField";import{useMutableRef}from"../../../hooks/useMutableRef/useMutableRef";import{getLabelHours,getLabelMinutes,getLabelSeconds}from"../../DateTime/helpers";import{
|
|
1
|
+
import _slicedToArray from"@babel/runtime/helpers/slicedToArray";import{addHours,addMinutes,addSeconds,format as _format,isValid,isWithinInterval,parse as _parse,startOfDay,startOfHour,startOfMinute}from"date-fns";import IMask from"imask";import{useCallback,useEffect,useMemo,useState}from"react";import{useIMask}from"../../TextField";import{useMutableRef}from"../../../hooks/useMutableRef/useMutableRef";import{getLabelHours,getLabelMinutes,getLabelSeconds}from"../../DateTime/helpers";import{getPartDate,getParts,getPartsDate,getTimeEnum}from"../helpers";import{datePickerErrorTypes}from"../types";export var usePicker=function(a){var b=a.value,c=a.onChange,d=a.onError,e=a.multiplicityHours,f=a.multiplicityMinutes,g=a.multiplicitySeconds,h=a.format,i=a.separator,j=a.maxDate,k=a.minDate,l=useMutableRef(c),m=useMutableRef(b),n=useMutableRef(d),o=useState(b&&isValid(b)?_format(b,h):null),p=_slicedToArray(o,2),q=p[0],r=p[1],s=useMutableRef(q),t=useCallback(function(a){var b=a.e,c=a.value;if(s.current!==c){r(c);var d=l.current,e=m.current;if(d){if(!c)return void(e&&d({e:b,value:null}));var f=getParts(h,i,!1),g=getParts(c,i,!1),o=f.map(function(a){return getPartDate(f,g,a)}).filter(function(a){return!!a});if(f.length===o.length){var x=_parse(g.join(":"),f.join(":"),e||new Date);if(!isWithinInterval(x,{start:k,end:j})){var p,q=getPartsDate(c,h,":",!1,["HH","mm","ss"]),t=_slicedToArray(q,3),u=t[0],v=t[1],w=t[2];return null===(p=n.current)||void 0===p?void 0:p.call(n,{type:datePickerErrorTypes[0],stringValue:c,date:x,HH:u,mm:v,ss:w}),void(e&&d({e:b,value:null}))}d({e:b,value:x})}else e&&d({e:b,value:null})}}},[null===k||void 0===k?void 0:k.getTime(),null===j||void 0===j?void 0:j.getTime(),h,i]),u=useMemo(function(){return{mask:Date,pattern:h,blocks:{HH:e&&1<e?{mask:IMask.MaskedEnum,enum:getTimeEnum(24,e,startOfDay,addHours,getLabelHours)}:{mask:IMask.MaskedRange,from:0,to:23},mm:f&&1<f?{mask:IMask.MaskedEnum,enum:getTimeEnum(60,f,startOfHour,addMinutes,getLabelMinutes)}:{mask:IMask.MaskedRange,from:0,to:59},ss:g&&1<g?{mask:IMask.MaskedEnum,enum:getTimeEnum(60,g,startOfMinute,addSeconds,getLabelSeconds)}:{mask:IMask.MaskedRange,from:0,to:59}},lazy:!0,autofix:!0,format:function format(a){return _format(a,h)},parse:function parse(a){return _parse(a,h,new Date)},validate:function validate(a){var b=getParts(h,i,!1),c=getParts(a,i,!1),d=b.map(function(a){return getPartDate(b,c,a)}).filter(function(a){return!!a});if(b.length===d.length&&!isValid(_parse(c.join(":"),b.join(":"),new Date))){var e,f=getPartsDate(a,h,":",!1,["HH","mm","ss"]),g=_slicedToArray(f,3),j=g[0],k=g[1],l=g[2];return null===(e=n.current)||void 0===e?void 0:e.call(n,{type:datePickerErrorTypes[1],stringValue:a,HH:j,mm:k,ss:l}),!1}return!0}}},[h,i,e,f,g]),v=useIMask({value:q,onChange:function(a,b){return null===t||void 0===t?void 0:t(b)},maskOptions:u}),w=v.inputRef;return useEffect(function(){b&&isValid(b)?r(_format(b,h)):(null===q||void 0===q?void 0:q.length)===h.length&&r("")},[null===b||void 0===b?void 0:b.getTime()]),{stringValue:q,inputRef:w,clearValue:function clearValue(a){r(null),null===c||void 0===c?void 0:c({e:a,value:null})}}};
|
|
2
2
|
//# sourceMappingURL=helpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","names":["addHours","addMinutes","addSeconds","format","isValid","isWithinInterval","parse","startOfDay","startOfHour","startOfMinute","IMask","useCallback","useEffect","useMemo","useState","useIMask","useMutableRef","getLabelHours","getLabelMinutes","getLabelSeconds","datePickerPropFormatTypeTime","getParts","getPartsDate","getTimeEnum","datePickerErrorTypes","usePicker","props","value","onChange","onError","multiplicityHours","multiplicityMinutes","multiplicitySeconds","formatProp","separator","maxDate","minDate","onChangeRef","valueRef","onErrorRef","stringValue","setStringValue","stringValueRef","formatParts","handleChange","e","current","partsTime","HH","mm","ss","filter","item","length","date","Date","start","end","type","getTime","options","mask","pattern","blocks","MaskedEnum","MaskedRange","from","to","lazy","autofix","string","validate","_val","params","maskOptions","inputRef","clearValue"],"sources":["../../../../../../src/components/DatePicker/DatePickerFieldTypeTime/helpers.ts"],"sourcesContent":["import { IconComponent, IconPropSize } from '@consta/icons/Icon';\nimport {\n addHours,\n addMinutes,\n addSeconds,\n format,\n isValid,\n isWithinInterval,\n parse,\n startOfDay,\n startOfHour,\n startOfMinute,\n} from 'date-fns';\nimport IMask from 'imask';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { useIMask } from '##/components/TextField';\n\nimport { useMutableRef } from '../../../hooks/useMutableRef/useMutableRef';\nimport { PropsWithHTMLAttributes } from '../../../utils/types/PropsWithHTMLAttributes';\nimport {\n getLabelHours,\n getLabelMinutes,\n getLabelSeconds,\n} from '../../DateTime/helpers';\nimport {\n TextFieldPropForm,\n TextFieldPropSize,\n TextFieldPropStatus,\n TextFieldPropView,\n TextFieldPropWidth,\n} from '../../TextField/TextField';\nimport {\n datePickerPropFormatTypeTime,\n getParts,\n getPartsDate,\n getTimeEnum,\n} from '../helpers';\nimport { datePickerErrorTypes, DatePickerPropOnError } from '../types';\n\ntype DatePickerFieldTypeTimePropOnChange = (props: {\n e: Event;\n value: Date | null;\n}) => void;\n\nexport type DatePickerFieldTypeTimeProps = PropsWithHTMLAttributes<\n {\n className?: string;\n value?: Date | null;\n onChange?: DatePickerFieldTypeTimePropOnChange;\n onError?: DatePickerPropOnError;\n id?: string;\n name?: string;\n disabled?: boolean;\n size?: TextFieldPropSize;\n view?: TextFieldPropView;\n form?: TextFieldPropForm;\n status?: TextFieldPropStatus;\n width?: TextFieldPropWidth;\n onFocus?: React.FocusEventHandler<HTMLElement>;\n onBlur?: React.FocusEventHandler<HTMLElement>;\n autoFocus?: boolean;\n placeholder?: string;\n leftSide?: string | IconComponent;\n rightSide?: string | IconComponent;\n readOnly?: boolean;\n required?: boolean;\n tabIndex?: number;\n inputRef?: React.Ref<HTMLTextAreaElement | HTMLInputElement>;\n ariaLabel?: string;\n iconSize?: IconPropSize;\n children?: never;\n format?: string;\n separator?: string;\n minDate?: Date;\n maxDate?: Date;\n focused?: boolean;\n multiplicitySeconds?: number;\n multiplicityMinutes?: number;\n multiplicityHours?: number;\n label?: string;\n labelIcon?: IconComponent;\n caption?: string;\n labelPosition?: 'top' | 'left';\n withClearButton?: boolean;\n },\n HTMLDivElement\n>;\n\ntype UsePickerProps = {\n value?: Date | null;\n onChange?: DatePickerFieldTypeTimePropOnChange;\n onError?: DatePickerPropOnError;\n multiplicityHours: number | undefined;\n multiplicitySeconds: number | undefined;\n multiplicityMinutes: number | undefined;\n format: string;\n separator: string;\n minDate: Date;\n maxDate: Date;\n};\n\nexport const usePicker = (props: UsePickerProps) => {\n const {\n value,\n onChange,\n onError,\n multiplicityHours,\n multiplicityMinutes,\n multiplicitySeconds,\n format: formatProp,\n separator,\n maxDate,\n minDate,\n } = props;\n const onChangeRef = useMutableRef(onChange);\n const valueRef = useMutableRef(value);\n const onErrorRef = useMutableRef(onError);\n\n const [stringValue, setStringValue] = useState<string | null>(\n value && isValid(value) ? format(value, formatProp) : null,\n );\n const stringValueRef = useMutableRef(stringValue);\n\n const formatParts = useMemo(\n () => getParts(formatProp, ':'),\n [formatProp, separator],\n );\n\n const handleChange = useCallback(\n ({ e, value: stringValue }: { e: Event; value: string | null }) => {\n if (stringValueRef.current === stringValue) {\n return;\n }\n setStringValue(stringValue);\n const onChange = onChangeRef.current;\n const value = valueRef.current;\n if (onChange) {\n if (!stringValue) {\n if (value) {\n onChange({ e, value: null });\n }\n return;\n }\n const partsTime = getPartsDate(stringValue, formatProp, ':', false, [\n 'HH',\n 'mm',\n 'ss',\n ]);\n\n const [HH, mm, ss] = partsTime;\n if (partsTime.filter((item) => !!item).length === formatParts.length) {\n const date = parse(\n `${HH}:${mm}:${ss}`,\n datePickerPropFormatTypeTime,\n value || new Date(),\n );\n if (!isWithinInterval(date, { start: minDate, end: maxDate })) {\n onErrorRef.current?.({\n type: datePickerErrorTypes[0],\n stringValue,\n date,\n HH,\n mm,\n ss,\n });\n\n if (value) {\n onChange({ e, value: null });\n }\n return;\n }\n onChange({ e, value: date });\n } else if (value) {\n onChange({ e, value: null });\n }\n }\n },\n [minDate?.getTime(), maxDate?.getTime(), formatProp, separator],\n );\n\n const options: IMask.InputMask<IMask.MaskedDateOptions> = useMemo(\n () =>\n ({\n mask: Date,\n pattern: formatProp,\n blocks: {\n HH:\n multiplicityHours && multiplicityHours > 1\n ? {\n mask: IMask.MaskedEnum,\n enum: getTimeEnum(\n 24,\n multiplicityHours,\n startOfDay,\n addHours,\n getLabelHours,\n ),\n }\n : {\n mask: IMask.MaskedRange,\n from: 0,\n to: 23,\n },\n mm:\n multiplicityMinutes && multiplicityMinutes > 1\n ? {\n mask: IMask.MaskedEnum,\n enum: getTimeEnum(\n 60,\n multiplicityMinutes,\n startOfHour,\n addMinutes,\n getLabelMinutes,\n ),\n }\n : {\n mask: IMask.MaskedRange,\n from: 0,\n to: 59,\n },\n ss:\n multiplicitySeconds && multiplicitySeconds > 1\n ? {\n mask: IMask.MaskedEnum,\n enum: getTimeEnum(\n 60,\n multiplicitySeconds,\n startOfMinute,\n addSeconds,\n getLabelSeconds,\n ),\n }\n : {\n mask: IMask.MaskedRange,\n from: 0,\n to: 59,\n },\n },\n lazy: true,\n autofix: true,\n format: (date: Date) => format(date, formatProp),\n parse: (string: string) => parse(string, formatProp, new Date()),\n validate: (string: string) => {\n const [HH, mm, ss] = getPartsDate(string, formatProp, ':', false, [\n 'HH',\n 'mm',\n 'ss',\n ]);\n if (\n HH &&\n mm &&\n ss &&\n !isValid(\n parse(\n `${HH}:${mm}:${ss}`,\n datePickerPropFormatTypeTime,\n new Date(),\n ),\n )\n ) {\n onErrorRef.current?.({\n type: datePickerErrorTypes[1],\n stringValue: string,\n HH,\n mm,\n ss,\n });\n return false;\n }\n return true;\n },\n // проблема в типах IMask\n } as unknown as IMask.InputMask<IMask.MaskedDateOptions>),\n [\n formatProp,\n separator,\n multiplicityHours,\n multiplicityMinutes,\n multiplicitySeconds,\n ],\n );\n\n const { inputRef } = useIMask({\n value: stringValue,\n onChange: (_val, params) => handleChange?.(params),\n maskOptions: options,\n });\n\n const clearValue = (e: Event) => {\n setStringValue(null);\n onChange?.({ e, value: null });\n };\n\n // при изменении value, нужно обновить stringValue\n useEffect(() => {\n if (value && isValid(value)) {\n setStringValue(format(value, formatProp));\n } else if (stringValue?.length === formatProp.length) {\n // если количество введенных символов меньше чем в формате маски\n // то не нужно мешать вводу с клавиатуры\n // если дата была введена полностью и value пришел null,\n // то можно считать что поле нуждается в очистке\n setStringValue('');\n }\n }, [value?.getTime()]);\n\n return {\n stringValue,\n inputRef,\n clearValue,\n };\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"helpers.js","names":["addHours","addMinutes","addSeconds","format","isValid","isWithinInterval","parse","startOfDay","startOfHour","startOfMinute","IMask","useCallback","useEffect","useMemo","useState","useIMask","useMutableRef","getLabelHours","getLabelMinutes","getLabelSeconds","getPartDate","getParts","getPartsDate","getTimeEnum","datePickerErrorTypes","usePicker","props","value","onChange","onError","multiplicityHours","multiplicityMinutes","multiplicitySeconds","formatProp","separator","maxDate","minDate","onChangeRef","valueRef","onErrorRef","stringValue","setStringValue","stringValueRef","handleChange","e","current","formatArray","valueArray","validArray","map","marker","filter","item","length","date","join","Date","start","end","HH","mm","ss","type","getTime","options","mask","pattern","blocks","MaskedEnum","MaskedRange","from","to","lazy","autofix","string","validate","_val","params","maskOptions","inputRef","clearValue"],"sources":["../../../../../../src/components/DatePicker/DatePickerFieldTypeTime/helpers.ts"],"sourcesContent":["import { IconComponent, IconPropSize } from '@consta/icons/Icon';\nimport {\n addHours,\n addMinutes,\n addSeconds,\n format,\n isValid,\n isWithinInterval,\n parse,\n startOfDay,\n startOfHour,\n startOfMinute,\n} from 'date-fns';\nimport IMask from 'imask';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { useIMask } from '##/components/TextField';\n\nimport { useMutableRef } from '../../../hooks/useMutableRef/useMutableRef';\nimport { PropsWithHTMLAttributes } from '../../../utils/types/PropsWithHTMLAttributes';\nimport {\n getLabelHours,\n getLabelMinutes,\n getLabelSeconds,\n} from '../../DateTime/helpers';\nimport {\n TextFieldPropForm,\n TextFieldPropSize,\n TextFieldPropStatus,\n TextFieldPropView,\n TextFieldPropWidth,\n} from '../../TextField/TextField';\nimport { getPartDate, getParts, getPartsDate, getTimeEnum } from '../helpers';\nimport { datePickerErrorTypes, DatePickerPropOnError } from '../types';\n\ntype DatePickerFieldTypeTimePropOnChange = (props: {\n e: Event;\n value: Date | null;\n}) => void;\n\nexport type DatePickerFieldTypeTimeProps = PropsWithHTMLAttributes<\n {\n className?: string;\n value?: Date | null;\n onChange?: DatePickerFieldTypeTimePropOnChange;\n onError?: DatePickerPropOnError;\n id?: string;\n name?: string;\n disabled?: boolean;\n size?: TextFieldPropSize;\n view?: TextFieldPropView;\n form?: TextFieldPropForm;\n status?: TextFieldPropStatus;\n width?: TextFieldPropWidth;\n onFocus?: React.FocusEventHandler<HTMLElement>;\n onBlur?: React.FocusEventHandler<HTMLElement>;\n autoFocus?: boolean;\n placeholder?: string;\n leftSide?: string | IconComponent;\n rightSide?: string | IconComponent;\n readOnly?: boolean;\n required?: boolean;\n tabIndex?: number;\n inputRef?: React.Ref<HTMLTextAreaElement | HTMLInputElement>;\n ariaLabel?: string;\n iconSize?: IconPropSize;\n children?: never;\n format?: string;\n separator?: string;\n minDate?: Date;\n maxDate?: Date;\n focused?: boolean;\n multiplicitySeconds?: number;\n multiplicityMinutes?: number;\n multiplicityHours?: number;\n label?: string;\n labelIcon?: IconComponent;\n caption?: string;\n labelPosition?: 'top' | 'left';\n withClearButton?: boolean;\n },\n HTMLDivElement\n>;\n\ntype UsePickerProps = {\n value?: Date | null;\n onChange?: DatePickerFieldTypeTimePropOnChange;\n onError?: DatePickerPropOnError;\n multiplicityHours: number | undefined;\n multiplicitySeconds: number | undefined;\n multiplicityMinutes: number | undefined;\n format: string;\n separator: string;\n minDate: Date;\n maxDate: Date;\n};\n\nexport const usePicker = (props: UsePickerProps) => {\n const {\n value,\n onChange,\n onError,\n multiplicityHours,\n multiplicityMinutes,\n multiplicitySeconds,\n format: formatProp,\n separator,\n maxDate,\n minDate,\n } = props;\n const onChangeRef = useMutableRef(onChange);\n const valueRef = useMutableRef(value);\n const onErrorRef = useMutableRef(onError);\n\n const [stringValue, setStringValue] = useState<string | null>(\n value && isValid(value) ? format(value, formatProp) : null,\n );\n const stringValueRef = useMutableRef(stringValue);\n\n const handleChange = useCallback(\n ({ e, value: stringValue }: { e: Event; value: string | null }) => {\n if (stringValueRef.current === stringValue) {\n return;\n }\n setStringValue(stringValue);\n const onChange = onChangeRef.current;\n const value = valueRef.current;\n if (onChange) {\n if (!stringValue) {\n if (value) {\n onChange({ e, value: null });\n }\n return;\n }\n\n const formatArray = getParts(formatProp, separator, false);\n const valueArray = getParts(stringValue, separator, false);\n const validArray = formatArray\n .map((marker) => getPartDate(formatArray, valueArray, marker))\n .filter((item) => Boolean(item));\n\n if (formatArray.length === validArray.length) {\n const date = parse(\n valueArray.join(':'),\n formatArray.join(':'),\n value || new Date(),\n );\n\n if (!isWithinInterval(date, { start: minDate, end: maxDate })) {\n const [HH, mm, ss] = getPartsDate(\n stringValue,\n formatProp,\n ':',\n false,\n ['HH', 'mm', 'ss'],\n );\n\n onErrorRef.current?.({\n type: datePickerErrorTypes[0],\n stringValue,\n date,\n HH,\n mm,\n ss,\n });\n\n if (value) {\n onChange({ e, value: null });\n }\n return;\n }\n onChange({ e, value: date });\n } else if (value) {\n onChange({ e, value: null });\n }\n }\n },\n [minDate?.getTime(), maxDate?.getTime(), formatProp, separator],\n );\n\n const options: IMask.InputMask<IMask.MaskedDateOptions> = useMemo(\n () =>\n ({\n mask: Date,\n pattern: formatProp,\n blocks: {\n HH:\n multiplicityHours && multiplicityHours > 1\n ? {\n mask: IMask.MaskedEnum,\n enum: getTimeEnum(\n 24,\n multiplicityHours,\n startOfDay,\n addHours,\n getLabelHours,\n ),\n }\n : {\n mask: IMask.MaskedRange,\n from: 0,\n to: 23,\n },\n mm:\n multiplicityMinutes && multiplicityMinutes > 1\n ? {\n mask: IMask.MaskedEnum,\n enum: getTimeEnum(\n 60,\n multiplicityMinutes,\n startOfHour,\n addMinutes,\n getLabelMinutes,\n ),\n }\n : {\n mask: IMask.MaskedRange,\n from: 0,\n to: 59,\n },\n ss:\n multiplicitySeconds && multiplicitySeconds > 1\n ? {\n mask: IMask.MaskedEnum,\n enum: getTimeEnum(\n 60,\n multiplicitySeconds,\n startOfMinute,\n addSeconds,\n getLabelSeconds,\n ),\n }\n : {\n mask: IMask.MaskedRange,\n from: 0,\n to: 59,\n },\n },\n lazy: true,\n autofix: true,\n format: (date: Date) => format(date, formatProp),\n parse: (string: string) => parse(string, formatProp, new Date()),\n validate: (string: string) => {\n const formatArray = getParts(formatProp, separator, false);\n const valueArray = getParts(string, separator, false);\n const validArray = formatArray\n .map((marker) => getPartDate(formatArray, valueArray, marker))\n .filter((item) => Boolean(item));\n\n if (\n formatArray.length === validArray.length &&\n !isValid(\n parse(valueArray.join(':'), formatArray.join(':'), new Date()),\n )\n ) {\n const [HH, mm, ss] = getPartsDate(string, formatProp, ':', false, [\n 'HH',\n 'mm',\n 'ss',\n ]);\n\n onErrorRef.current?.({\n type: datePickerErrorTypes[1],\n stringValue: string,\n HH,\n mm,\n ss,\n });\n return false;\n }\n\n return true;\n },\n // проблема в типах IMask\n } as unknown as IMask.InputMask<IMask.MaskedDateOptions>),\n [\n formatProp,\n separator,\n multiplicityHours,\n multiplicityMinutes,\n multiplicitySeconds,\n ],\n );\n\n const { inputRef } = useIMask({\n value: stringValue,\n onChange: (_val, params) => handleChange?.(params),\n maskOptions: options,\n });\n\n const clearValue = (e: Event) => {\n setStringValue(null);\n onChange?.({ e, value: null });\n };\n\n // при изменении value, нужно обновить stringValue\n useEffect(() => {\n if (value && isValid(value)) {\n setStringValue(format(value, formatProp));\n } else if (stringValue?.length === formatProp.length) {\n // если количество введенных символов меньше чем в формате маски\n // то не нужно мешать вводу с клавиатуры\n // если дата была введена полностью и value пришел null,\n // то можно считать что поле нуждается в очистке\n setStringValue('');\n }\n }, [value?.getTime()]);\n\n return {\n stringValue,\n inputRef,\n clearValue,\n };\n};\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import _slicedToArray from"@babel/runtime/helpers/slicedToArray";import{format as _format,isValid,isWithinInterval,parse as _parse}from"date-fns";import IMask from"imask";import{useCallback,useEffect,useMemo,useState}from"react";import{useIMask}from"../../TextField";import{useMutableRef}from"../../../hooks/useMutableRef";import{
|
|
1
|
+
import _slicedToArray from"@babel/runtime/helpers/slicedToArray";import{format as _format,isValid,isWithinInterval,parse as _parse}from"date-fns";import IMask from"imask";import{useCallback,useEffect,useMemo,useState}from"react";import{useIMask}from"../../TextField";import{useMutableRef}from"../../../hooks/useMutableRef";import{datePickerPropSeparatorDefault,getPartDate,getParts,getPartsDate}from"../helpers";import{datePickerErrorTypes}from"../types";export var usePicker=function(a){var b=a.value,c=a.onChange,d=a.onError,f=a.format,g=a.separator,h=a.maxDate,i=a.minDate,j=useMutableRef(c),k=useMutableRef(b),l=useMutableRef(d),m=useState(b&&isValid(b)?_format(b,f):null),n=_slicedToArray(m,2),o=n[0],p=n[1],q=useMutableRef(o),r=useCallback(function(a){var b=a.e,c=a.value;if(q.current!==c){p(c);var d=j.current,e=k.current;if(d){if(!c)return void(e&&d({e:b,value:null}));var m=getParts(f,g,!1),n=getParts(c,g,!1),o=m.map(function(a){return getPartDate(m,n,a)}).filter(function(a){return!!a});if(m.length===o.length){var v=_parse(n.join(datePickerPropSeparatorDefault),m.join(datePickerPropSeparatorDefault),new Date);if(!isWithinInterval(v,{start:i,end:h})){var r,s=getPartsDate(c,f,g,!1,["yyyy"]),t=_slicedToArray(s,1),u=t[0];return null===(r=l.current)||void 0===r?void 0:r.call(l,{type:datePickerErrorTypes[0],stringValue:c,yyyy:u,date:v}),void(e&&d({e:b,value:null}))}d({e:b,value:v})}else e&&d({e:b,value:null})}}},[null===i||void 0===i?void 0:i.getTime(),null===h||void 0===h?void 0:h.getTime(),f,g]),s=useMemo(function(){return{mask:Date,pattern:f,blocks:{yyyy:{mask:IMask.MaskedRange,from:1,to:9999}},lazy:!0,autofix:!0,format:function format(a){return _format(a,f)},parse:function parse(a){return _parse(a,f,new Date)},validate:function validate(a){var b=getParts(f,g,!1),c=getParts(a,g,!1),d=b.map(function(a){return getPartDate(b,c,a)}).filter(function(a){return!!a});if(b.length===d.length&&!isValid(_parse(c.join(datePickerPropSeparatorDefault),b.join(datePickerPropSeparatorDefault),new Date))){var e,h=getPartsDate(a,f,g,!1,["yyyy"]),i=_slicedToArray(h,1),j=i[0];return null===(e=l.current)||void 0===e?void 0:e.call(l,{type:datePickerErrorTypes[1],stringValue:a,yyyy:j}),!1}return!0}}},[f,g]),t=useIMask({value:o,onChange:function(a,b){return null===r||void 0===r?void 0:r(b)},maskOptions:s}),u=t.inputRef;return useEffect(function(){b&&isValid(b)?p(_format(b,f)):(null===o||void 0===o?void 0:o.length)===f.length&&p("")},[null===b||void 0===b?void 0:b.getTime()]),{stringValue:o,inputRef:u,clearValue:function clearValue(a){p(null),null===c||void 0===c?void 0:c({e:a,value:null})}}};
|
|
2
2
|
//# sourceMappingURL=helpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","names":["format","isValid","isWithinInterval","parse","IMask","useCallback","useEffect","useMemo","useState","useIMask","useMutableRef","datePickerPropFormatTypeYear","getPartsDate","datePickerErrorTypes","usePicker","props","value","onChange","onError","formatProp","separator","maxDate","minDate","onChangeRef","valueRef","onErrorRef","stringValue","setStringValue","stringValueRef","handleChange","e","current","yyyy","date","Date","start","end","type","getTime","options","mask","pattern","blocks","MaskedRange","from","to","lazy","autofix","string","validate","_val","params","maskOptions","inputRef","length","clearValue"],"sources":["../../../../../../src/components/DatePicker/DatePickerFieldTypeYear/helpers.ts"],"sourcesContent":["import { IconComponent, IconPropSize } from '@consta/icons/Icon';\nimport { format, isValid, isWithinInterval, parse } from 'date-fns';\nimport IMask from 'imask';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { useIMask } from '##/components/TextField';\nimport { useMutableRef } from '##/hooks/useMutableRef';\n\nimport { PropsWithHTMLAttributes } from '../../../utils/types/PropsWithHTMLAttributes';\nimport {\n TextFieldPropForm,\n TextFieldPropSize,\n TextFieldPropStatus,\n TextFieldPropView,\n TextFieldPropWidth,\n} from '../../TextField/TextField';\nimport { datePickerPropFormatTypeYear, getPartsDate } from '../helpers';\nimport { datePickerErrorTypes, DatePickerPropOnError } from '../types';\n\ntype DatePickerFieldTypeYearPropOnChange = (props: {\n e: Event;\n value: Date | null;\n}) => void;\n\nexport type DatePickerFieldTypeYearProps = PropsWithHTMLAttributes<\n {\n className?: string;\n value?: Date | null;\n onChange?: DatePickerFieldTypeYearPropOnChange;\n onError?: DatePickerPropOnError;\n id?: string;\n name?: string;\n disabled?: boolean;\n size?: TextFieldPropSize;\n view?: TextFieldPropView;\n form?: TextFieldPropForm;\n status?: TextFieldPropStatus;\n width?: TextFieldPropWidth;\n onFocus?: React.FocusEventHandler<HTMLElement>;\n onBlur?: React.FocusEventHandler<HTMLElement>;\n autoFocus?: boolean;\n placeholder?: string;\n leftSide?: string | IconComponent;\n rightSide?: string | IconComponent;\n readOnly?: boolean;\n required?: boolean;\n tabIndex?: number;\n inputRef?: React.Ref<HTMLTextAreaElement | HTMLInputElement>;\n ariaLabel?: string;\n iconSize?: IconPropSize;\n children?: never;\n format?: string;\n separator?: string;\n minDate?: Date;\n maxDate?: Date;\n focused?: boolean;\n label?: string;\n labelIcon?: IconComponent;\n caption?: string;\n labelPosition?: 'top' | 'left';\n withClearButton?: boolean;\n },\n HTMLDivElement\n>;\n\ntype UsePickerProps = {\n value?: Date | null;\n onChange?: DatePickerFieldTypeYearPropOnChange;\n onError?: DatePickerPropOnError;\n format: string;\n separator: string;\n minDate: Date;\n maxDate: Date;\n};\n\nexport const usePicker = (props: UsePickerProps) => {\n const {\n value,\n onChange,\n onError,\n format: formatProp,\n separator,\n maxDate,\n minDate,\n } = props;\n const onChangeRef = useMutableRef(onChange);\n const valueRef = useMutableRef(value);\n const onErrorRef = useMutableRef(onError);\n\n const [stringValue, setStringValue] = useState<string | null>(\n value && isValid(value) ? format(value, formatProp) : null,\n );\n const stringValueRef = useMutableRef(stringValue);\n\n const handleChange = useCallback(\n ({ e, value: stringValue }: { e: Event; value: string | null }) => {\n if (stringValueRef.current === stringValue) {\n return;\n }\n\n setStringValue(stringValue);\n\n const onChange = onChangeRef.current;\n const value = valueRef.current;\n\n if (onChange) {\n if (!stringValue) {\n if (value) {\n onChange({ e, value: null });\n }\n return;\n }\n\n const [yyyy] = getPartsDate(stringValue, formatProp, separator, false, [\n 'yyyy',\n ]);\n\n if (yyyy) {\n const date = parse(\n `${yyyy}`,\n datePickerPropFormatTypeYear,\n new Date(),\n );\n if (!isWithinInterval(date, { start: minDate, end: maxDate })) {\n onErrorRef.current?.({\n type: datePickerErrorTypes[0],\n stringValue,\n yyyy,\n date,\n });\n\n if (value) {\n onChange({ e, value: null });\n }\n return;\n }\n onChange({ e, value: date });\n } else if (value) {\n onChange({ e, value: null });\n }\n }\n },\n [minDate?.getTime(), maxDate?.getTime(), formatProp, separator],\n );\n\n const options: IMask.InputMask<IMask.MaskedDateOptions> = useMemo(\n () =>\n ({\n mask: Date,\n pattern: formatProp,\n blocks: {\n yyyy: {\n mask: IMask.MaskedRange,\n from: 1,\n to: 9999,\n },\n },\n lazy: true,\n autofix: true,\n format: (date: Date) => format(date, formatProp),\n parse: (string: string) => parse(string, formatProp, new Date()),\n validate: (string: string) => {\n const [yyyy] = getPartsDate(string, formatProp, separator, false, [\n 'yyyy',\n ]);\n\n if (\n yyyy &&\n !isValid(parse(`${yyyy}`, datePickerPropFormatTypeYear, new Date()))\n ) {\n onError &&\n onError({\n type: datePickerErrorTypes[1],\n stringValue: string,\n yyyy,\n });\n\n return false;\n }\n\n return true;\n },\n // проблема в типах IMask\n } as unknown as IMask.InputMask<IMask.MaskedDateOptions>),\n [formatProp, separator],\n );\n\n const { inputRef } = useIMask({\n value: stringValue,\n onChange: (_val, params) => handleChange?.(params),\n maskOptions: options,\n });\n\n const clearValue = (e: Event) => {\n setStringValue(null);\n onChange?.({ e, value: null });\n };\n\n // при изменении value, нужно обновить stringValue\n useEffect(() => {\n if (value && isValid(value)) {\n setStringValue(format(value, formatProp));\n } else if (stringValue?.length === formatProp.length) {\n // если количество введенных символов меньше чем в формате маски\n // то не нужно мешать вводу с клавиатуры\n // если дата была введена полностью и value пришел null,\n // то можно считать что поле нуждается в очистке\n setStringValue('');\n }\n }, [value?.getTime()]);\n\n return {\n stringValue,\n inputRef,\n clearValue,\n };\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"helpers.js","names":["format","isValid","isWithinInterval","parse","IMask","useCallback","useEffect","useMemo","useState","useIMask","useMutableRef","datePickerPropSeparatorDefault","getPartDate","getParts","getPartsDate","datePickerErrorTypes","usePicker","props","value","onChange","onError","formatProp","separator","maxDate","minDate","onChangeRef","valueRef","onErrorRef","stringValue","setStringValue","stringValueRef","handleChange","e","current","formatArray","valueArray","validArray","map","marker","filter","item","length","date","join","Date","start","end","yyyy","type","getTime","options","mask","pattern","blocks","MaskedRange","from","to","lazy","autofix","string","validate","_val","params","maskOptions","inputRef","clearValue"],"sources":["../../../../../../src/components/DatePicker/DatePickerFieldTypeYear/helpers.ts"],"sourcesContent":["import { IconComponent, IconPropSize } from '@consta/icons/Icon';\nimport { format, isValid, isWithinInterval, parse } from 'date-fns';\nimport IMask from 'imask';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { useIMask } from '##/components/TextField';\nimport { useMutableRef } from '##/hooks/useMutableRef';\n\nimport { PropsWithHTMLAttributes } from '../../../utils/types/PropsWithHTMLAttributes';\nimport {\n TextFieldPropForm,\n TextFieldPropSize,\n TextFieldPropStatus,\n TextFieldPropView,\n TextFieldPropWidth,\n} from '../../TextField/TextField';\nimport {\n datePickerPropSeparatorDefault,\n getPartDate,\n getParts,\n getPartsDate,\n} from '../helpers';\nimport { datePickerErrorTypes, DatePickerPropOnError } from '../types';\n\ntype DatePickerFieldTypeYearPropOnChange = (props: {\n e: Event;\n value: Date | null;\n}) => void;\n\nexport type DatePickerFieldTypeYearProps = PropsWithHTMLAttributes<\n {\n className?: string;\n value?: Date | null;\n onChange?: DatePickerFieldTypeYearPropOnChange;\n onError?: DatePickerPropOnError;\n id?: string;\n name?: string;\n disabled?: boolean;\n size?: TextFieldPropSize;\n view?: TextFieldPropView;\n form?: TextFieldPropForm;\n status?: TextFieldPropStatus;\n width?: TextFieldPropWidth;\n onFocus?: React.FocusEventHandler<HTMLElement>;\n onBlur?: React.FocusEventHandler<HTMLElement>;\n autoFocus?: boolean;\n placeholder?: string;\n leftSide?: string | IconComponent;\n rightSide?: string | IconComponent;\n readOnly?: boolean;\n required?: boolean;\n tabIndex?: number;\n inputRef?: React.Ref<HTMLTextAreaElement | HTMLInputElement>;\n ariaLabel?: string;\n iconSize?: IconPropSize;\n children?: never;\n format?: string;\n separator?: string;\n minDate?: Date;\n maxDate?: Date;\n focused?: boolean;\n label?: string;\n labelIcon?: IconComponent;\n caption?: string;\n labelPosition?: 'top' | 'left';\n withClearButton?: boolean;\n },\n HTMLDivElement\n>;\n\ntype UsePickerProps = {\n value?: Date | null;\n onChange?: DatePickerFieldTypeYearPropOnChange;\n onError?: DatePickerPropOnError;\n format: string;\n separator: string;\n minDate: Date;\n maxDate: Date;\n};\n\nexport const usePicker = (props: UsePickerProps) => {\n const {\n value,\n onChange,\n onError,\n format: formatProp,\n separator,\n maxDate,\n minDate,\n } = props;\n const onChangeRef = useMutableRef(onChange);\n const valueRef = useMutableRef(value);\n const onErrorRef = useMutableRef(onError);\n\n const [stringValue, setStringValue] = useState<string | null>(\n value && isValid(value) ? format(value, formatProp) : null,\n );\n const stringValueRef = useMutableRef(stringValue);\n\n const handleChange = useCallback(\n ({ e, value: stringValue }: { e: Event; value: string | null }) => {\n if (stringValueRef.current === stringValue) {\n return;\n }\n\n setStringValue(stringValue);\n\n const onChange = onChangeRef.current;\n const value = valueRef.current;\n\n if (onChange) {\n if (!stringValue) {\n if (value) {\n onChange({ e, value: null });\n }\n return;\n }\n\n const formatArray = getParts(formatProp, separator, false);\n const valueArray = getParts(stringValue, separator, false);\n const validArray = formatArray\n .map((marker) => getPartDate(formatArray, valueArray, marker))\n .filter((item) => Boolean(item));\n\n if (formatArray.length === validArray.length) {\n const date = parse(\n valueArray.join(datePickerPropSeparatorDefault),\n formatArray.join(datePickerPropSeparatorDefault),\n new Date(),\n );\n if (!isWithinInterval(date, { start: minDate, end: maxDate })) {\n const [yyyy] = getPartsDate(\n stringValue,\n formatProp,\n separator,\n false,\n ['yyyy'],\n );\n\n onErrorRef.current?.({\n type: datePickerErrorTypes[0],\n stringValue,\n yyyy,\n date,\n });\n\n if (value) {\n onChange({ e, value: null });\n }\n return;\n }\n onChange({ e, value: date });\n } else if (value) {\n onChange({ e, value: null });\n }\n }\n },\n [minDate?.getTime(), maxDate?.getTime(), formatProp, separator],\n );\n\n const options: IMask.InputMask<IMask.MaskedDateOptions> = useMemo(\n () =>\n ({\n mask: Date,\n pattern: formatProp,\n blocks: {\n yyyy: {\n mask: IMask.MaskedRange,\n from: 1,\n to: 9999,\n },\n },\n lazy: true,\n autofix: true,\n format: (date: Date) => format(date, formatProp),\n parse: (string: string) => parse(string, formatProp, new Date()),\n validate: (string: string) => {\n const formatArray = getParts(formatProp, separator, false);\n const valueArray = getParts(string, separator, false);\n const validArray = formatArray\n .map((marker) => getPartDate(formatArray, valueArray, marker))\n .filter((item) => Boolean(item));\n\n if (\n formatArray.length === validArray.length &&\n !isValid(\n parse(\n valueArray.join(datePickerPropSeparatorDefault),\n formatArray.join(datePickerPropSeparatorDefault),\n new Date(),\n ),\n )\n ) {\n const [yyyy] = getPartsDate(string, formatProp, separator, false, [\n 'yyyy',\n ]);\n\n onErrorRef.current?.({\n type: datePickerErrorTypes[1],\n stringValue: string,\n\n yyyy,\n });\n return false;\n }\n\n return true;\n },\n // проблема в типах IMask\n } as unknown as IMask.InputMask<IMask.MaskedDateOptions>),\n [formatProp, separator],\n );\n\n const { inputRef } = useIMask({\n value: stringValue,\n onChange: (_val, params) => handleChange?.(params),\n maskOptions: options,\n });\n\n const clearValue = (e: Event) => {\n setStringValue(null);\n onChange?.({ e, value: null });\n };\n\n // при изменении value, нужно обновить stringValue\n useEffect(() => {\n if (value && isValid(value)) {\n setStringValue(format(value, formatProp));\n } else if (stringValue?.length === formatProp.length) {\n // если количество введенных символов меньше чем в формате маски\n // то не нужно мешать вводу с клавиатуры\n // если дата была введена полностью и value пришел null,\n // то можно считать что поле нуждается в очистке\n setStringValue('');\n }\n }, [value?.getTime()]);\n\n return {\n stringValue,\n inputRef,\n clearValue,\n };\n};\n"],"mappings":"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"}
|
|
@@ -17,6 +17,7 @@ export declare const getMultiplicityTime: (format: string, multiplicityHours: nu
|
|
|
17
17
|
export declare const getTimeEnum: (length: number, multiplicity: number | undefined, startOfUnits: (date: Date) => Date, addUnits: (date: Date, amount: number) => Date, getItemLabel: (date: Date) => string) => string[];
|
|
18
18
|
export declare const getFormForStart: (form: TextFieldPropForm) => import("../FieldGroup/types").FieldGroupPropForm;
|
|
19
19
|
export declare const getFormForEnd: (form: TextFieldPropForm) => import("../FieldGroup/types").FieldGroupPropForm;
|
|
20
|
+
export declare const getPartDate: (formatArray: string[], stringArray: string[], marker: string) => string | undefined;
|
|
20
21
|
export declare const getParts: (format: string, separator: string, withTime?: boolean) => string[];
|
|
21
22
|
export declare const getPartsDate: (value: string, format: string, separator: string, withTime: boolean, markers: string[]) => (string | undefined)[];
|
|
22
23
|
export declare const isTypeWithTime: (type: DatePickerPropType) => boolean;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import _toConsumableArray from"@babel/runtime/helpers/toConsumableArray";import _slicedToArray from"@babel/runtime/helpers/slicedToArray";import{startOfToday}from"date-fns";import{range}from"../../utils/array";import{getForm}from"../FieldGroup/FieldGroup";export var datePickerPropSeparatorDefault=".";export var datePickerPropFormatTypeDate="dd".concat(".","MM").concat(".","yyyy");export var datePickerPropPlaceholderTypeDate="\u0414\u0414".concat(".","\u041C\u041C").concat(".","\u0413\u0413\u0413\u0413");export var datePickerPropFormatTypeTime="HH:mm:ss";export var datePickerPropPlaceholderTypeTime="\u0427\u0427:\u041C\u041C:\u0421\u0421";export var datePickerPropFormatTypeDateTime="".concat(datePickerPropFormatTypeDate," ").concat("HH:mm:ss");export var datePickerPropPlaceholderTypeDateTime="".concat(datePickerPropPlaceholderTypeDate," ").concat("\u0427\u0427:\u041C\u041C:\u0421\u0421");export var datePickerPropFormatTypeYear="yyyy";export var datePickerPropPlaceholderTypeYear="\u0413\u0413\u0413\u0413";export var datePickerPropFormatTypeMonth="MM".concat(".","yyyy");export var datePickerPropPlaceholderTypeMonth="MM".concat(".","\u0413\u0413\u0413\u0413");export var normalizeRangeValue=function(a){var b,c;return a[0]&&a[1]&&(null===(b=a[0])||void 0===b?void 0:b.getTime())>(null===(c=a[1])||void 0===c?void 0:c.getTime())?[a[1],a[0]]:a};export var getMultiplicityTime=function(a,b,c,d){var e,f=null===(e=a.split(" ")[1])||void 0===e?void 0:e.split(":"),g={HH:b,mm:c,ss:d};return["HH","mm","ss"].map(function(a){return 0>(null===f||void 0===f?void 0:f.indexOf(a))?0:g[a]})};export var getTimeEnum=function(a){var b=1<arguments.length&&arguments[1]!==void 0?arguments[1]:1,c=2<arguments.length?arguments[2]:void 0,d=3<arguments.length?arguments[3]:void 0,e=4<arguments.length?arguments[4]:void 0,f=range(b?Math.floor(a/b):0);if(0===f.length)return[];var g=c(startOfToday());return f.map(function(a){return e(d(g,a*b))})};export var getFormForStart=function(a){return getForm(a,0,2)};export var getFormForEnd=function(a){return getForm(a,1,2)};var getPartDate=function(a,b,c){var d=a.indexOf(c);return 0<=d&&b[d]&&b[d].length===c.length?b[d]:void 0};export var getParts=function(a,b,c){if(c){var d=a.split(" "),e=_slicedToArray(d,2),f=e[0],g=e[1];return[].concat(_toConsumableArray(f?f.split(b):[]),_toConsumableArray(g?g.split(":"):[]))}return a.split(b)};export var getPartsDate=function(a,b,c,d,e){var f=getParts(b,c,d),g=getParts(a,c,d);return e.map(function(a){return getPartDate(f,g,a)})};export var isTypeWithTime=function(a){return-1!==a.indexOf("time")};var fieldPrefixs=["start","end"];export var getFieldName=function(a,b){return a?Array.isArray(a)?a[b]:"".concat(a,"_").concat(fieldPrefixs[b]):void 0};export var getDropdownZIndex=function(a){return"number"==typeof(null===a||void 0===a?void 0:a.zIndex)?a.zIndex+1:void 0};
|
|
1
|
+
import _toConsumableArray from"@babel/runtime/helpers/toConsumableArray";import _slicedToArray from"@babel/runtime/helpers/slicedToArray";import{startOfToday}from"date-fns";import{range}from"../../utils/array";import{getForm}from"../FieldGroup/FieldGroup";export var datePickerPropSeparatorDefault=".";export var datePickerPropFormatTypeDate="dd".concat(".","MM").concat(".","yyyy");export var datePickerPropPlaceholderTypeDate="\u0414\u0414".concat(".","\u041C\u041C").concat(".","\u0413\u0413\u0413\u0413");export var datePickerPropFormatTypeTime="HH:mm:ss";export var datePickerPropPlaceholderTypeTime="\u0427\u0427:\u041C\u041C:\u0421\u0421";export var datePickerPropFormatTypeDateTime="".concat(datePickerPropFormatTypeDate," ").concat("HH:mm:ss");export var datePickerPropPlaceholderTypeDateTime="".concat(datePickerPropPlaceholderTypeDate," ").concat("\u0427\u0427:\u041C\u041C:\u0421\u0421");export var datePickerPropFormatTypeYear="yyyy";export var datePickerPropPlaceholderTypeYear="\u0413\u0413\u0413\u0413";export var datePickerPropFormatTypeMonth="MM".concat(".","yyyy");export var datePickerPropPlaceholderTypeMonth="MM".concat(".","\u0413\u0413\u0413\u0413");export var normalizeRangeValue=function(a){var b,c;return a[0]&&a[1]&&(null===(b=a[0])||void 0===b?void 0:b.getTime())>(null===(c=a[1])||void 0===c?void 0:c.getTime())?[a[1],a[0]]:a};export var getMultiplicityTime=function(a,b,c,d){var e,f=null===(e=a.split(" ")[1])||void 0===e?void 0:e.split(":"),g={HH:b,mm:c,ss:d};return["HH","mm","ss"].map(function(a){return 0>(null===f||void 0===f?void 0:f.indexOf(a))?0:g[a]})};export var getTimeEnum=function(a){var b=1<arguments.length&&arguments[1]!==void 0?arguments[1]:1,c=2<arguments.length?arguments[2]:void 0,d=3<arguments.length?arguments[3]:void 0,e=4<arguments.length?arguments[4]:void 0,f=range(b?Math.floor(a/b):0);if(0===f.length)return[];var g=c(startOfToday());return f.map(function(a){return e(d(g,a*b))})};export var getFormForStart=function(a){return getForm(a,0,2)};export var getFormForEnd=function(a){return getForm(a,1,2)};export var getPartDate=function(a,b,c){var d=a.indexOf(c);return 0<=d&&b[d]&&b[d].length===c.length?b[d]:void 0};export var getParts=function(a,b,c){if(c){var d=a.split(" "),e=_slicedToArray(d,2),f=e[0],g=e[1];return[].concat(_toConsumableArray(f?f.split(b):[]),_toConsumableArray(g?g.split(":"):[]))}return a.split(b)};export var getPartsDate=function(a,b,c,d,e){var f=getParts(b,c,d),g=getParts(a,c,d);return e.map(function(a){return getPartDate(f,g,a)})};export var isTypeWithTime=function(a){return-1!==a.indexOf("time")};var fieldPrefixs=["start","end"];export var getFieldName=function(a,b){return a?Array.isArray(a)?a[b]:"".concat(a,"_").concat(fieldPrefixs[b]):void 0};export var getDropdownZIndex=function(a){return"number"==typeof(null===a||void 0===a?void 0:a.zIndex)?a.zIndex+1:void 0};
|
|
2
2
|
//# sourceMappingURL=helpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","names":["startOfToday","range","getForm","datePickerPropSeparatorDefault","datePickerPropFormatTypeDate","datePickerPropPlaceholderTypeDate","datePickerPropFormatTypeTime","datePickerPropPlaceholderTypeTime","datePickerPropFormatTypeDateTime","datePickerPropPlaceholderTypeDateTime","datePickerPropFormatTypeYear","datePickerPropPlaceholderTypeYear","datePickerPropFormatTypeMonth","datePickerPropPlaceholderTypeMonth","normalizeRangeValue","dateRange","getTime","getMultiplicityTime","format","multiplicityHours","multiplicityMinutes","multiplicitySeconds","formatArray","split","map","HH","mm","ss","marker","indexOf","getTimeEnum","length","multiplicity","startOfUnits","addUnits","getItemLabel","numbers","Math","floor","startDate","number","getFormForStart","form","getFormForEnd","getPartDate","stringArray","index","getParts","separator","withTime","date","time","getPartsDate","value","markers","isTypeWithTime","type","fieldPrefixs","getFieldName","name","rangeIndex","Array","isArray","getDropdownZIndex","style","zIndex"],"sources":["../../../../../src/components/DatePicker/helpers.ts"],"sourcesContent":["import { startOfToday } from 'date-fns';\n\nimport { range } from '../../utils/array';\nimport { DateRange } from '../../utils/types/Date';\nimport { getForm } from '../FieldGroup/FieldGroup';\nimport { TextFieldPropForm } from '../TextField/TextField';\nimport { DatePickerPropType } from './types';\n\nexport const datePickerPropSeparatorDefault = '.';\nexport const datePickerPropFormatTypeDate = `dd${datePickerPropSeparatorDefault}MM${datePickerPropSeparatorDefault}yyyy`;\nexport const datePickerPropPlaceholderTypeDate = `ДД${datePickerPropSeparatorDefault}ММ${datePickerPropSeparatorDefault}ГГГГ`;\n\nexport const datePickerPropFormatTypeTime = `HH:mm:ss`;\nexport const datePickerPropPlaceholderTypeTime = `ЧЧ:ММ:СС`;\n\nexport const datePickerPropFormatTypeDateTime = `${datePickerPropFormatTypeDate} ${datePickerPropFormatTypeTime}`;\nexport const datePickerPropPlaceholderTypeDateTime = `${datePickerPropPlaceholderTypeDate} ${datePickerPropPlaceholderTypeTime}`;\n\nexport const datePickerPropFormatTypeYear = `yyyy`;\nexport const datePickerPropPlaceholderTypeYear = `ГГГГ`;\n\nexport const datePickerPropFormatTypeMonth = `MM${datePickerPropSeparatorDefault}yyyy`;\nexport const datePickerPropPlaceholderTypeMonth = `MM${datePickerPropSeparatorDefault}ГГГГ`;\n\nexport const normalizeRangeValue = (dateRange: DateRange): DateRange => {\n if (\n dateRange[0] &&\n dateRange[1] &&\n dateRange[0]?.getTime() > dateRange[1]?.getTime()\n ) {\n return [dateRange[1], dateRange[0]];\n }\n return dateRange;\n};\n\nexport const getMultiplicityTime = (\n format: string,\n multiplicityHours: number | undefined,\n multiplicityMinutes: number | undefined,\n multiplicitySeconds: number | undefined,\n) => {\n const markers = ['HH', 'mm', 'ss'] as const;\n const formatArray = format.split(' ')[1]?.split(':');\n const map = {\n HH: multiplicityHours,\n mm: multiplicityMinutes,\n ss: multiplicitySeconds,\n } as const;\n\n return markers.map((marker) =>\n formatArray?.indexOf(marker) < 0 ? 0 : map[marker],\n );\n};\n\nexport const getTimeEnum = (\n length: number,\n multiplicity = 1,\n startOfUnits: (date: Date) => Date,\n addUnits: (date: Date, amount: number) => Date,\n getItemLabel: (date: Date) => string,\n) => {\n const numbers = range(multiplicity ? Math.floor(length / multiplicity) : 0);\n\n if (numbers.length === 0) {\n return [];\n }\n\n const startDate = startOfUnits(startOfToday());\n\n return numbers.map((number) => {\n return getItemLabel(addUnits(startDate, number * multiplicity));\n });\n};\n\nexport const getFormForStart = (form: TextFieldPropForm) => getForm(form, 0, 2);\nexport const getFormForEnd = (form: TextFieldPropForm) => getForm(form, 1, 2);\n\
|
|
1
|
+
{"version":3,"file":"helpers.js","names":["startOfToday","range","getForm","datePickerPropSeparatorDefault","datePickerPropFormatTypeDate","datePickerPropPlaceholderTypeDate","datePickerPropFormatTypeTime","datePickerPropPlaceholderTypeTime","datePickerPropFormatTypeDateTime","datePickerPropPlaceholderTypeDateTime","datePickerPropFormatTypeYear","datePickerPropPlaceholderTypeYear","datePickerPropFormatTypeMonth","datePickerPropPlaceholderTypeMonth","normalizeRangeValue","dateRange","getTime","getMultiplicityTime","format","multiplicityHours","multiplicityMinutes","multiplicitySeconds","formatArray","split","map","HH","mm","ss","marker","indexOf","getTimeEnum","length","multiplicity","startOfUnits","addUnits","getItemLabel","numbers","Math","floor","startDate","number","getFormForStart","form","getFormForEnd","getPartDate","stringArray","index","getParts","separator","withTime","date","time","getPartsDate","value","markers","isTypeWithTime","type","fieldPrefixs","getFieldName","name","rangeIndex","Array","isArray","getDropdownZIndex","style","zIndex"],"sources":["../../../../../src/components/DatePicker/helpers.ts"],"sourcesContent":["import { startOfToday } from 'date-fns';\n\nimport { range } from '../../utils/array';\nimport { DateRange } from '../../utils/types/Date';\nimport { getForm } from '../FieldGroup/FieldGroup';\nimport { TextFieldPropForm } from '../TextField/TextField';\nimport { DatePickerPropType } from './types';\n\nexport const datePickerPropSeparatorDefault = '.';\nexport const datePickerPropFormatTypeDate = `dd${datePickerPropSeparatorDefault}MM${datePickerPropSeparatorDefault}yyyy`;\nexport const datePickerPropPlaceholderTypeDate = `ДД${datePickerPropSeparatorDefault}ММ${datePickerPropSeparatorDefault}ГГГГ`;\n\nexport const datePickerPropFormatTypeTime = `HH:mm:ss`;\nexport const datePickerPropPlaceholderTypeTime = `ЧЧ:ММ:СС`;\n\nexport const datePickerPropFormatTypeDateTime = `${datePickerPropFormatTypeDate} ${datePickerPropFormatTypeTime}`;\nexport const datePickerPropPlaceholderTypeDateTime = `${datePickerPropPlaceholderTypeDate} ${datePickerPropPlaceholderTypeTime}`;\n\nexport const datePickerPropFormatTypeYear = `yyyy`;\nexport const datePickerPropPlaceholderTypeYear = `ГГГГ`;\n\nexport const datePickerPropFormatTypeMonth = `MM${datePickerPropSeparatorDefault}yyyy`;\nexport const datePickerPropPlaceholderTypeMonth = `MM${datePickerPropSeparatorDefault}ГГГГ`;\n\nexport const normalizeRangeValue = (dateRange: DateRange): DateRange => {\n if (\n dateRange[0] &&\n dateRange[1] &&\n dateRange[0]?.getTime() > dateRange[1]?.getTime()\n ) {\n return [dateRange[1], dateRange[0]];\n }\n return dateRange;\n};\n\nexport const getMultiplicityTime = (\n format: string,\n multiplicityHours: number | undefined,\n multiplicityMinutes: number | undefined,\n multiplicitySeconds: number | undefined,\n) => {\n const markers = ['HH', 'mm', 'ss'] as const;\n const formatArray = format.split(' ')[1]?.split(':');\n const map = {\n HH: multiplicityHours,\n mm: multiplicityMinutes,\n ss: multiplicitySeconds,\n } as const;\n\n return markers.map((marker) =>\n formatArray?.indexOf(marker) < 0 ? 0 : map[marker],\n );\n};\n\nexport const getTimeEnum = (\n length: number,\n multiplicity = 1,\n startOfUnits: (date: Date) => Date,\n addUnits: (date: Date, amount: number) => Date,\n getItemLabel: (date: Date) => string,\n) => {\n const numbers = range(multiplicity ? Math.floor(length / multiplicity) : 0);\n\n if (numbers.length === 0) {\n return [];\n }\n\n const startDate = startOfUnits(startOfToday());\n\n return numbers.map((number) => {\n return getItemLabel(addUnits(startDate, number * multiplicity));\n });\n};\n\nexport const getFormForStart = (form: TextFieldPropForm) => getForm(form, 0, 2);\nexport const getFormForEnd = (form: TextFieldPropForm) => getForm(form, 1, 2);\n\nexport const getPartDate = (\n formatArray: string[],\n stringArray: string[],\n marker: string,\n) => {\n const index = formatArray.indexOf(marker);\n\n if (\n index >= 0 &&\n stringArray[index] &&\n stringArray[index].length === marker.length\n ) {\n return stringArray[index];\n }\n\n return undefined;\n};\n\nexport const getParts = (\n format: string,\n separator: string,\n withTime?: boolean,\n) => {\n if (withTime) {\n const [date, time] = format.split(' ');\n\n return [\n ...(date ? date.split(separator) : []),\n ...(time ? time.split(':') : []),\n ];\n }\n\n return format.split(separator);\n};\n\nexport const getPartsDate = (\n value: string,\n format: string,\n separator: string,\n withTime: boolean,\n markers: string[],\n) => {\n const formatArray = getParts(format, separator, withTime);\n const stringArray = getParts(value, separator, withTime);\n\n return markers.map((marker) => getPartDate(formatArray, stringArray, marker));\n};\n\nexport const isTypeWithTime = (type: DatePickerPropType) =>\n type.indexOf('time') !== -1;\n\nconst fieldPrefixs = ['start', 'end'] as const;\n\nexport const getFieldName = (\n name: [string?, string?] | string | undefined,\n rangeIndex: 0 | 1,\n) => {\n if (!name) {\n return undefined;\n }\n\n if (Array.isArray(name)) {\n return name[rangeIndex];\n }\n\n return `${name}_${fieldPrefixs[rangeIndex]}`;\n};\n\nexport const getDropdownZIndex = (style?: React.CSSProperties) =>\n typeof style?.zIndex === 'number' ? style.zIndex + 1 : undefined;\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const addPrefix: (breakpoints: Record<string, boolean>, prefix?: string) => Record<string, boolean>;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var firstLetterUppercase=function(a){return a.charAt(0).toUpperCase()+a.slice(1).toLowerCase()};export var addPrefix=function(a){for(var b,c=1<arguments.length&&arguments[1]!==void 0?arguments[1]:"breakpoint",d=Object.keys(a),e={},f=0;f<d.length;f++)b=d[f],e["".concat(c).concat(firstLetterUppercase(b))]=a[b];return e};
|
|
2
|
+
//# sourceMappingURL=addPrefix.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"addPrefix.js","names":["firstLetterUppercase","string","charAt","toUpperCase","slice","toLowerCase","addPrefix","breakpoints","key","prefix","keys","Object","mods","index","length"],"sources":["../../../../../src/hooks/useBreakpoints/addPrefix.ts"],"sourcesContent":["const firstLetterUppercase = (string: string) =>\n string.charAt(0).toUpperCase() + string.slice(1).toLowerCase();\n\nexport const addPrefix = (\n breakpoints: Record<string, boolean>,\n prefix = 'breakpoint',\n) => {\n const keys = Object.keys(breakpoints);\n const mods: Record<string, boolean> = {};\n for (let index = 0; index < keys.length; index++) {\n const key = keys[index];\n mods[`${prefix}${firstLetterUppercase(key)}`] = breakpoints[key];\n }\n return mods;\n};\n"],"mappings":"AAAA,GAAMA,qBAAoB,CAAG,SAACC,CAAD,QAC3BA,EAAM,CAACC,MAAP,CAAc,CAAd,EAAiBC,WAAjB,GAAiCF,CAAM,CAACG,KAAP,CAAa,CAAb,EAAgBC,WAAhB,EADN,CAA7B,CAGA,MAAO,IAAMC,UAAS,CAAG,SACvBC,CADuB,CAGpB,CAGH,OACQC,EADR,CAJAC,CAIA,wDAJS,YAIT,CAFMC,CAAI,CAAGC,MAAM,CAACD,IAAP,CAAYH,CAAZ,CAEb,CADMK,CAA6B,CAAG,EACtC,CAASC,CAAK,CAAG,CAAjB,CAAoBA,CAAK,CAAGH,CAAI,CAACI,MAAjC,CAAyCD,CAAK,EAA9C,CACQL,CADR,CACcE,CAAI,CAACG,CAAD,CADlB,CAEED,CAAI,WAAIH,CAAJ,SAAaT,oBAAoB,CAACQ,CAAD,CAAjC,EAAJ,CAAgDD,CAAW,CAACC,CAAD,CAF7D,CAIA,MAAOI,EACR,CAXM"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export*from"./useBreakpoints";export*from"./getLastPoint";
|
|
1
|
+
export*from"./useBreakpoints";export*from"./getLastPoint";export*from"./addPrefix";
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../../../src/hooks/useBreakpoints/index.ts"],"sourcesContent":["export * from './useBreakpoints';\nexport * from './getLastPoint';\n"],"mappings":"AAAA,8BACA"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../../src/hooks/useBreakpoints/index.ts"],"sourcesContent":["export * from './useBreakpoints';\nexport * from './getLastPoint';\nexport * from './addPrefix';\n"],"mappings":"AAAA,8BACA,4BACA"}
|