UNPKG

@mantine/dates

Version:

Calendars, date and time pickers based on Mantine components

1 lines 3.3 kB
{"version":3,"file":"use-dates-input.mjs","names":[],"sources":["../../../src/hooks/use-dates-input/use-dates-input.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { useDisclosure } from '@mantine/hooks';\nimport { useDatesContext } from '../../components/DatesProvider';\nimport { DatePickerType, DatePickerValue } from '../../types';\nimport { DateFormatter, getFormattedDate } from '../../utils';\nimport { useUncontrolledDates } from '../use-uncontrolled-dates/use-uncontrolled-dates';\n\ninterface UseDatesInput<Type extends DatePickerType = 'default'> {\n type: Type;\n value: DatePickerValue<Type> | undefined;\n defaultValue: DatePickerValue<Type> | undefined;\n onChange: ((value: DatePickerValue<Type>) => void) | undefined;\n locale: string | undefined;\n format: string | undefined;\n closeOnChange: boolean | undefined;\n sortDates: boolean | undefined;\n labelSeparator: string | undefined;\n valueFormatter: DateFormatter | undefined;\n}\n\nexport function useDatesInput<Type extends DatePickerType = 'default'>({\n type,\n value,\n defaultValue,\n onChange,\n locale,\n format,\n closeOnChange,\n sortDates,\n labelSeparator,\n valueFormatter,\n}: UseDatesInput<Type>) {\n const ctx = useDatesContext();\n\n const [dropdownOpened, dropdownHandlers] = useDisclosure(false);\n\n const [_value, _setValue] = useUncontrolledDates({\n type,\n value,\n defaultValue,\n onChange,\n });\n\n const formattedValue = getFormattedDate({\n type,\n date: _value,\n locale: ctx.getLocale(locale),\n format: format!,\n labelSeparator: ctx.getLabelSeparator(labelSeparator),\n formatter: valueFormatter,\n });\n\n const setValue = (val: any) => {\n if (closeOnChange) {\n if (type === 'default') {\n dropdownHandlers.close();\n }\n\n if (type === 'range' && val[0] && val[1]) {\n dropdownHandlers.close();\n }\n }\n\n if (sortDates && type === 'multiple') {\n _setValue([...val].sort((a, b) => (dayjs(a).isAfter(dayjs(b)) ? 1 : -1)));\n } else {\n _setValue(val);\n }\n };\n\n const onClear = () => setValue(type === 'range' ? [null, null] : type === 'multiple' ? [] : null);\n const shouldClear =\n type === 'range' ? !!_value[0] : type === 'multiple' ? _value.length > 0 : _value !== null;\n\n return {\n _value,\n setValue,\n onClear,\n shouldClear,\n formattedValue,\n dropdownOpened,\n dropdownHandlers,\n };\n}\n"],"mappings":";;;;;;;AAoBA,SAAgB,cAAuD,EACrE,MACA,OACA,cACA,UACA,QACA,QACA,eACA,WACA,gBACA,kBACsB;CACtB,MAAM,MAAM,gBAAgB;CAE5B,MAAM,CAAC,gBAAgB,oBAAoB,cAAc,KAAK;CAE9D,MAAM,CAAC,QAAQ,aAAa,qBAAqB;EAC/C;EACA;EACA;EACA;CACF,CAAC;CAED,MAAM,iBAAiB,iBAAiB;EACtC;EACA,MAAM;EACN,QAAQ,IAAI,UAAU,MAAM;EACpB;EACR,gBAAgB,IAAI,kBAAkB,cAAc;EACpD,WAAW;CACb,CAAC;CAED,MAAM,YAAY,QAAa;EAC7B,IAAI,eAAe;GACjB,IAAI,SAAS,WACX,iBAAiB,MAAM;GAGzB,IAAI,SAAS,WAAW,IAAI,MAAM,IAAI,IACpC,iBAAiB,MAAM;EAE3B;EAEA,IAAI,aAAa,SAAS,YACxB,UAAU,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,GAAG,MAAO,MAAM,CAAC,CAAC,CAAC,QAAQ,MAAM,CAAC,CAAC,IAAI,IAAI,EAAG,CAAC;OAExE,UAAU,GAAG;CAEjB;CAEA,MAAM,gBAAgB,SAAS,SAAS,UAAU,CAAC,MAAM,IAAI,IAAI,SAAS,aAAa,CAAC,IAAI,IAAI;CAIhG,OAAO;EACL;EACA;EACA;EACA,aANA,SAAS,UAAU,CAAC,CAAC,OAAO,KAAK,SAAS,aAAa,OAAO,SAAS,IAAI,WAAW;EAOtF;EACA;EACA;CACF;AACF"}