@gravity-ui/date-components 3.1.0 → 3.2.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/dist/cjs/components/DateField/hooks/useBaseDateFieldState.js +1 -1
- package/dist/cjs/components/DateField/hooks/useBaseDateFieldState.js.map +1 -1
- package/dist/cjs/components/DateField/hooks/useDateFieldState.js +3 -1
- package/dist/cjs/components/DateField/hooks/useDateFieldState.js.map +1 -1
- package/dist/cjs/components/RangeDateField/hooks/useRangeDateFieldState.js +4 -2
- package/dist/cjs/components/RangeDateField/hooks/useRangeDateFieldState.js.map +1 -1
- package/dist/cjs/components/RelativeRangeDatePicker/RelativeRangeDatePicker.js +1 -1
- package/dist/cjs/components/RelativeRangeDatePicker/RelativeRangeDatePicker.js.map +1 -1
- package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.d.ts +2 -0
- package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.js +2 -2
- package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.js.map +1 -1
- package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.d.ts +1 -1
- package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.js +4 -4
- package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.js.map +1 -1
- package/dist/cjs/components/RelativeRangeDatePicker/types.d.ts +2 -0
- package/dist/cjs/components/RelativeRangeDatePicker/types.js.map +1 -1
- package/dist/cjs/components/types/datePicker.d.ts +2 -0
- package/dist/cjs/components/types/datePicker.js.map +1 -1
- package/dist/esm/components/DateField/hooks/useBaseDateFieldState.js +1 -1
- package/dist/esm/components/DateField/hooks/useBaseDateFieldState.js.map +1 -1
- package/dist/esm/components/DateField/hooks/useDateFieldState.js +3 -1
- package/dist/esm/components/DateField/hooks/useDateFieldState.js.map +1 -1
- package/dist/esm/components/RangeDateField/hooks/useRangeDateFieldState.js +4 -2
- package/dist/esm/components/RangeDateField/hooks/useRangeDateFieldState.js.map +1 -1
- package/dist/esm/components/RelativeRangeDatePicker/RelativeRangeDatePicker.js +1 -1
- package/dist/esm/components/RelativeRangeDatePicker/RelativeRangeDatePicker.js.map +1 -1
- package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.d.ts +2 -0
- package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.js +2 -2
- package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.js.map +1 -1
- package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.d.ts +1 -1
- package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.js +4 -4
- package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.js.map +1 -1
- package/dist/esm/components/RelativeRangeDatePicker/types.d.ts +2 -0
- package/dist/esm/components/RelativeRangeDatePicker/types.js.map +1 -1
- package/dist/esm/components/types/datePicker.d.ts +2 -0
- package/dist/esm/components/types/datePicker.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useBaseDateFieldState.js","sourceRoot":"../../../../../src","sources":["components/DateField/hooks/useBaseDateFieldState.ts"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport type {DateTime} from '@gravity-ui/date-utils';\n\nimport type {ValidationState} from '../../types';\nimport {createPlaceholderValue} from '../../utils/dates';\nimport type {DateFieldSection, DateFieldSectionType, FormatInfo} from '../types';\nimport {\n EDITABLE_SEGMENTS,\n formatSections,\n getCurrentEditableSectionIndex,\n getDurationUnitFromSectionType,\n} from '../utils';\n\nconst PAGE_STEP: Partial<Record<DateFieldSectionType, number>> = {\n year: 5,\n quarter: 2,\n month: 2,\n weekday: 3,\n day: 7,\n hour: 2,\n minute: 15,\n second: 15,\n};\n\nexport type BaseDateFieldStateOptions<T = DateTime> = {\n value: T | null;\n displayValue: T;\n placeholderValue?: DateTime;\n timeZone: string;\n validationState?: ValidationState;\n editableSections: DateFieldSection[];\n formatInfo: FormatInfo;\n readOnly?: boolean;\n disabled?: boolean;\n selectedSectionIndexes: {startIndex: number; endIndex: number} | null;\n selectedSections: number | 'all';\n isEmpty: boolean;\n flushAllValidSections: () => void;\n flushValidSection: (sectionIndex: number) => void;\n setSelectedSections: (position: number | 'all') => void;\n setValue: (value: T) => void;\n setDate: (value: T | null) => void;\n adjustSection: (sectionIndex: number, amount: number) => void;\n setSection: (sectionIndex: number, amount: number) => void;\n getSectionValue: (sectionIndex: number) => DateTime;\n setSectionValue: (sectionIndex: number, currentValue: DateTime) => void;\n createPlaceholder: () => T;\n setValueFromString: (str: string) => boolean;\n};\n\nexport type DateFieldState<T = DateTime> = {\n /** The current field value. */\n value: T | null;\n /** Is no part of value is filled. */\n isEmpty: boolean;\n /** The current used value. value or placeholderValue */\n displayValue: T;\n /** Sets the field's value. */\n setValue: (value: T) => void;\n /** Sets the date value. */\n setDate: (value: T | null) => void;\n /** Formatted value */\n text: string;\n /** Whether the field is read only. */\n readOnly?: boolean;\n /** Whether the field is disabled. */\n disabled?: boolean;\n /** A list of segments for the current value. */\n sections: DateFieldSection[];\n /** Some info about available sections */\n formatInfo: FormatInfo;\n /**\n * @deprecated use formatInfo.hasDate instead.\n * Whether the the format is containing date parts\n */\n hasDate: boolean;\n /**\n * @deprecated use formatInfo.hasTime instead.\n * Whether the the format is containing time parts\n */\n hasTime: boolean;\n /** Selected sections */\n selectedSectionIndexes: {startIndex: number; endIndex: number} | null;\n /** The current validation state of the date field, based on the `validationState`, `minValue`, and `maxValue` props. */\n validationState?: ValidationState;\n /** Sets selection for segment in position. */\n setSelectedSections: (position: number | 'all') => void;\n /** Focuses segment in position */\n focusSectionInPosition: (position: number) => void;\n /** Focuses the next segment if present */\n focusNextSection: () => void;\n /** Focuses the previous segment if present */\n focusPreviousSection: () => void;\n /** Focuses the first segment */\n focusFirstSection: () => void;\n /** Focuses the last segment */\n focusLastSection: () => void;\n /** Increments the currently selected segment. Upon reaching the minimum or maximum value, the value wraps around to the opposite limit. */\n increment: () => void;\n /** Decrements the currently selected segment. Upon reaching the minimum or maximum value, the value wraps around to the opposite limit. */\n decrement: () => void;\n /**\n * Increments the currently selected segment by a larger amount, rounding it to the nearest increment.\n * The amount to increment by depends on the field, for example 15 minutes, 7 days, and 5 years.\n * Upon reaching the minimum or maximum value, the value wraps around to the opposite limit.\n */\n incrementPage: () => void;\n /**\n * Decrements the currently selected segment by a larger amount, rounding it to the nearest decrement.\n * The amount to increment by depends on the field, for example 15 minutes, 7 days, and 5 years.\n * Upon reaching the minimum or maximum value, the value wraps around to the opposite limit.\n */\n decrementPage: () => void;\n incrementToMax: () => void;\n decrementToMin: () => void;\n /** Clears the value of the currently selected segment, reverting it to the placeholder. */\n clearSection: () => void;\n /** Clears all segments, reverting them to the placeholder. */\n clearAll: () => void;\n /** Handles input key in the currently selected segment */\n onInput: (key: string) => void;\n //** Tries to set value from str. Supports date in input format or ISO */\n setValueFromString: (str: string) => boolean;\n};\n\nexport function useBaseDateFieldState<T = DateTime>(\n props: BaseDateFieldStateOptions<T>,\n): DateFieldState<T> {\n const {\n value,\n validationState,\n displayValue,\n editableSections,\n formatInfo,\n selectedSectionIndexes,\n selectedSections,\n isEmpty,\n flushAllValidSections,\n flushValidSection,\n setSelectedSections,\n setValue,\n setDate,\n adjustSection,\n setSection,\n getSectionValue,\n setSectionValue,\n createPlaceholder,\n setValueFromString,\n } = props;\n\n const enteredKeys = React.useRef('');\n\n return {\n value,\n isEmpty,\n displayValue,\n setValue,\n setDate,\n text: formatSections(editableSections),\n readOnly: props.readOnly,\n disabled: props.disabled,\n sections: editableSections,\n formatInfo,\n hasDate: formatInfo.hasDate,\n hasTime: formatInfo.hasTime,\n selectedSectionIndexes,\n validationState,\n setSelectedSections(position) {\n enteredKeys.current = '';\n setSelectedSections(position);\n },\n focusSectionInPosition(position) {\n const nextSectionIndex = this.sections.findIndex((s) => s.end >= position);\n const index = nextSectionIndex === -1 ? 0 : nextSectionIndex;\n const nextSection = this.sections[index];\n if (nextSection) {\n this.setSelectedSections(\n EDITABLE_SEGMENTS[nextSection.type] ? index : nextSection.nextEditableSection,\n );\n }\n },\n focusNextSection() {\n const currentIndex = selectedSections === 'all' ? 0 : selectedSections;\n const newIndex = this.sections[currentIndex]?.nextEditableSection ?? -1;\n if (newIndex !== -1) {\n this.setSelectedSections(newIndex);\n }\n },\n focusPreviousSection() {\n const currentIndex = selectedSections === 'all' ? 0 : selectedSections;\n const newIndex = this.sections[currentIndex]?.previousEditableSection ?? -1;\n if (newIndex !== -1) {\n this.setSelectedSections(newIndex);\n }\n },\n focusFirstSection() {\n const newIndex = this.sections[0]?.previousEditableSection ?? -1;\n if (newIndex !== -1) {\n setSelectedSections(newIndex);\n }\n },\n focusLastSection() {\n const newIndex = this.sections[this.sections.length - 1]?.nextEditableSection ?? -1;\n if (newIndex !== -1) {\n this.setSelectedSections(newIndex);\n }\n },\n increment() {\n if (this.readOnly || this.disabled) {\n return;\n }\n\n enteredKeys.current = '';\n const sectionIndex = getCurrentEditableSectionIndex(this.sections, selectedSections);\n if (sectionIndex !== -1) {\n adjustSection(sectionIndex, 1);\n }\n },\n decrement() {\n if (this.readOnly || this.disabled) {\n return;\n }\n\n enteredKeys.current = '';\n const sectionIndex = getCurrentEditableSectionIndex(this.sections, selectedSections);\n if (sectionIndex !== -1) {\n adjustSection(sectionIndex, -1);\n }\n },\n incrementPage() {\n if (this.readOnly || this.disabled) {\n return;\n }\n\n enteredKeys.current = '';\n const sectionIndex = getCurrentEditableSectionIndex(this.sections, selectedSections);\n if (sectionIndex !== -1) {\n adjustSection(sectionIndex, PAGE_STEP[this.sections[sectionIndex].type] || 1);\n }\n },\n decrementPage() {\n if (this.readOnly || this.disabled) {\n return;\n }\n\n enteredKeys.current = '';\n const sectionIndex = getCurrentEditableSectionIndex(this.sections, selectedSections);\n if (sectionIndex !== -1) {\n adjustSection(sectionIndex, -(PAGE_STEP[this.sections[sectionIndex].type] || 1));\n }\n },\n incrementToMax() {\n if (this.readOnly || this.disabled) {\n return;\n }\n enteredKeys.current = '';\n const sectionIndex = getCurrentEditableSectionIndex(this.sections, selectedSections);\n if (sectionIndex !== -1) {\n const section = this.sections[sectionIndex];\n if (typeof section.maxValue === 'number') {\n setSection(sectionIndex, section.maxValue);\n }\n }\n },\n decrementToMin() {\n if (this.readOnly || this.disabled) {\n return;\n }\n enteredKeys.current = '';\n const sectionIndex = getCurrentEditableSectionIndex(this.sections, selectedSections);\n if (sectionIndex !== -1) {\n const section = this.sections[sectionIndex];\n if (typeof section.minValue === 'number') {\n setSection(sectionIndex, section.minValue);\n }\n }\n },\n clearSection() {\n if (this.readOnly || this.disabled) {\n return;\n }\n\n enteredKeys.current = '';\n if (selectedSections === 'all') {\n this.clearAll();\n return;\n }\n\n const sectionIndex = getCurrentEditableSectionIndex(this.sections, selectedSections);\n if (sectionIndex === -1) {\n return;\n }\n\n flushValidSection(sectionIndex);\n\n const section = this.sections[sectionIndex];\n\n const placeholder = createPlaceholderValue({\n placeholderValue: props.placeholderValue,\n timeZone: props.timeZone,\n }).timeZone(props.timeZone);\n\n const displayPortion = getSectionValue(sectionIndex);\n let currentValue = displayPortion;\n\n // Reset day period to default without changing the hour.\n if (section.type === 'dayPeriod') {\n const isPM = displayPortion.hour() >= 12;\n const shouldBePM = placeholder.hour() >= 12;\n if (isPM && !shouldBePM) {\n currentValue = displayPortion.set('hour', displayPortion.hour() - 12);\n } else if (!isPM && shouldBePM) {\n currentValue = displayPortion.set('hour', displayPortion.hour() + 12);\n }\n } else {\n const type = getDurationUnitFromSectionType(section.type);\n currentValue = displayPortion.set(type, placeholder[type]());\n }\n\n setSectionValue(sectionIndex, currentValue);\n },\n clearAll() {\n if (this.readOnly || this.disabled) {\n return;\n }\n\n enteredKeys.current = '';\n flushAllValidSections();\n if (value !== null) {\n setDate(null);\n }\n\n const date = createPlaceholder();\n\n setValue(date);\n },\n onInput(key: string) {\n if (this.readOnly || this.disabled) {\n return;\n }\n\n const sectionIndex = getCurrentEditableSectionIndex(this.sections, selectedSections);\n if (sectionIndex === -1) {\n return;\n }\n\n const section = this.sections[sectionIndex];\n let newValue = enteredKeys.current + key;\n\n const onInputNumber = (numberValue: number) => {\n let sectionValue = section.type === 'month' ? numberValue - 1 : numberValue;\n const allowsZero = section.minValue === 0;\n if (\n section.type === 'hour' &&\n (section.minValue === 12 || section.maxValue === 11)\n ) {\n if (numberValue > 12) {\n sectionValue = Number(key);\n }\n if (section.minValue === 12 && sectionValue > 1) {\n sectionValue += 12;\n }\n } else if (sectionValue > (section.maxValue ?? 0)) {\n sectionValue = Number(key) - (section.type === 'month' ? 1 : 0);\n newValue = key;\n if (sectionValue > (section.maxValue ?? 0)) {\n enteredKeys.current = '';\n return;\n }\n }\n\n const shouldSetValue = sectionValue > 0 || (sectionValue === 0 && allowsZero);\n if (shouldSetValue) {\n setSection(sectionIndex, sectionValue);\n }\n\n if (\n Number(numberValue + '0') > (section.maxValue ?? 0) ||\n newValue.length >= String(section.maxValue).length\n ) {\n enteredKeys.current = '';\n if (shouldSetValue) {\n this.focusNextSection();\n }\n } else {\n enteredKeys.current = newValue;\n }\n };\n\n const onInputString = (stringValue: string) => {\n const options = section.options ?? [];\n let sectionValue = stringValue.toLocaleUpperCase();\n let foundOptions = options.filter((v) => v.startsWith(sectionValue));\n if (foundOptions.length === 0) {\n if (stringValue !== key) {\n sectionValue = key.toLocaleUpperCase();\n foundOptions = options.filter((v) => v.startsWith(sectionValue));\n }\n if (foundOptions.length === 0) {\n enteredKeys.current = '';\n return;\n }\n }\n const foundValue = foundOptions[0];\n const index = options.indexOf(foundValue);\n\n if (section.type === 'dayPeriod') {\n setSection(sectionIndex, index === 1 ? 12 : 0);\n } else {\n setSection(sectionIndex, index);\n }\n\n if (foundOptions.length > 1) {\n enteredKeys.current = newValue;\n } else {\n enteredKeys.current = '';\n this.focusNextSection();\n }\n };\n\n switch (section.type) {\n case 'day':\n case 'hour':\n case 'minute':\n case 'second':\n case 'quarter':\n case 'year': {\n if (!Number.isInteger(Number(newValue))) {\n return;\n }\n const numberValue = Number(newValue);\n onInputNumber(numberValue);\n break;\n }\n case 'dayPeriod': {\n onInputString(newValue);\n break;\n }\n case 'weekday':\n case 'month': {\n if (Number.isInteger(Number(newValue))) {\n const numberValue = Number(newValue);\n onInputNumber(numberValue);\n } else {\n onInputString(newValue);\n }\n break;\n }\n }\n },\n setValueFromString(str: string) {\n enteredKeys.current = '';\n return setValueFromString(str);\n },\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"useBaseDateFieldState.js","sourceRoot":"../../../../../src","sources":["components/DateField/hooks/useBaseDateFieldState.ts"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport type {DateTime} from '@gravity-ui/date-utils';\n\nimport type {ValidationState} from '../../types';\nimport {createPlaceholderValue} from '../../utils/dates';\nimport type {DateFieldSection, DateFieldSectionType, FormatInfo} from '../types';\nimport {\n EDITABLE_SEGMENTS,\n formatSections,\n getCurrentEditableSectionIndex,\n getDurationUnitFromSectionType,\n} from '../utils';\n\nconst PAGE_STEP: Partial<Record<DateFieldSectionType, number>> = {\n year: 5,\n quarter: 2,\n month: 2,\n weekday: 3,\n day: 7,\n hour: 2,\n minute: 15,\n second: 15,\n};\n\nexport type BaseDateFieldStateOptions<T = DateTime> = {\n value: T | null;\n displayValue: T;\n placeholderValue?: DateTime;\n timeZone: string;\n validationState?: ValidationState;\n editableSections: DateFieldSection[];\n formatInfo: FormatInfo;\n readOnly?: boolean;\n disabled?: boolean;\n selectedSectionIndexes: {startIndex: number; endIndex: number} | null;\n selectedSections: number | 'all';\n isEmpty: boolean;\n flushAllValidSections: () => void;\n flushValidSection: (sectionIndex: number) => void;\n setSelectedSections: (position: number | 'all') => void;\n setValue: (value: T) => void;\n setDate: (value: T | null) => void;\n adjustSection: (sectionIndex: number, amount: number) => void;\n setSection: (sectionIndex: number, amount: number) => void;\n getSectionValue: (sectionIndex: number) => DateTime;\n setSectionValue: (sectionIndex: number, currentValue: DateTime) => void;\n createPlaceholder: () => T;\n setValueFromString: (str: string) => boolean;\n};\n\nexport type DateFieldState<T = DateTime> = {\n /** The current field value. */\n value: T | null;\n /** Is no part of value is filled. */\n isEmpty: boolean;\n /** The current used value. value or placeholderValue */\n displayValue: T;\n /** Sets the field's value. */\n setValue: (value: T) => void;\n /** Sets the date value. */\n setDate: (value: T | null) => void;\n /** Formatted value */\n text: string;\n /** Whether the field is read only. */\n readOnly?: boolean;\n /** Whether the field is disabled. */\n disabled?: boolean;\n /** A list of segments for the current value. */\n sections: DateFieldSection[];\n /** Some info about available sections */\n formatInfo: FormatInfo;\n /**\n * @deprecated use formatInfo.hasDate instead.\n * Whether the the format is containing date parts\n */\n hasDate: boolean;\n /**\n * @deprecated use formatInfo.hasTime instead.\n * Whether the the format is containing time parts\n */\n hasTime: boolean;\n /** Selected sections */\n selectedSectionIndexes: {startIndex: number; endIndex: number} | null;\n /** The current validation state of the date field, based on the `validationState`, `minValue`, and `maxValue` props. */\n validationState?: ValidationState;\n /** Sets selection for segment in position. */\n setSelectedSections: (position: number | 'all') => void;\n /** Focuses segment in position */\n focusSectionInPosition: (position: number) => void;\n /** Focuses the next segment if present */\n focusNextSection: () => void;\n /** Focuses the previous segment if present */\n focusPreviousSection: () => void;\n /** Focuses the first segment */\n focusFirstSection: () => void;\n /** Focuses the last segment */\n focusLastSection: () => void;\n /** Increments the currently selected segment. Upon reaching the minimum or maximum value, the value wraps around to the opposite limit. */\n increment: () => void;\n /** Decrements the currently selected segment. Upon reaching the minimum or maximum value, the value wraps around to the opposite limit. */\n decrement: () => void;\n /**\n * Increments the currently selected segment by a larger amount, rounding it to the nearest increment.\n * The amount to increment by depends on the field, for example 15 minutes, 7 days, and 5 years.\n * Upon reaching the minimum or maximum value, the value wraps around to the opposite limit.\n */\n incrementPage: () => void;\n /**\n * Decrements the currently selected segment by a larger amount, rounding it to the nearest decrement.\n * The amount to increment by depends on the field, for example 15 minutes, 7 days, and 5 years.\n * Upon reaching the minimum or maximum value, the value wraps around to the opposite limit.\n */\n decrementPage: () => void;\n incrementToMax: () => void;\n decrementToMin: () => void;\n /** Clears the value of the currently selected segment, reverting it to the placeholder. */\n clearSection: () => void;\n /** Clears all segments, reverting them to the placeholder. */\n clearAll: () => void;\n /** Handles input key in the currently selected segment */\n onInput: (key: string) => void;\n //** Tries to set value from str. Supports date in input format or ISO */\n setValueFromString: (str: string) => boolean;\n};\n\nexport function useBaseDateFieldState<T = DateTime>(\n props: BaseDateFieldStateOptions<T>,\n): DateFieldState<T> {\n const {\n value,\n validationState,\n displayValue,\n editableSections,\n formatInfo,\n selectedSectionIndexes,\n selectedSections,\n isEmpty,\n flushAllValidSections,\n flushValidSection,\n setSelectedSections,\n setValue,\n setDate,\n adjustSection,\n setSection,\n getSectionValue,\n setSectionValue,\n createPlaceholder,\n setValueFromString,\n } = props;\n\n const enteredKeys = React.useRef('');\n\n return {\n value,\n isEmpty,\n displayValue,\n setValue,\n setDate,\n text: formatSections(editableSections),\n readOnly: props.readOnly,\n disabled: props.disabled,\n sections: editableSections,\n formatInfo,\n hasDate: formatInfo.hasDate,\n hasTime: formatInfo.hasTime,\n selectedSectionIndexes,\n validationState,\n setSelectedSections(position) {\n enteredKeys.current = '';\n setSelectedSections(position);\n },\n focusSectionInPosition(position) {\n const nextSectionIndex = this.sections.findIndex((s) => s.end >= position);\n const index = nextSectionIndex === -1 ? 0 : nextSectionIndex;\n const nextSection = this.sections[index];\n if (nextSection) {\n this.setSelectedSections(\n EDITABLE_SEGMENTS[nextSection.type] ? index : nextSection.nextEditableSection,\n );\n }\n },\n focusNextSection() {\n const currentIndex = selectedSections === 'all' ? 0 : selectedSections;\n const newIndex = this.sections[currentIndex]?.nextEditableSection ?? -1;\n if (newIndex !== -1) {\n this.setSelectedSections(newIndex);\n }\n },\n focusPreviousSection() {\n const currentIndex = selectedSections === 'all' ? 0 : selectedSections;\n const newIndex = this.sections[currentIndex]?.previousEditableSection ?? -1;\n if (newIndex !== -1) {\n this.setSelectedSections(newIndex);\n }\n },\n focusFirstSection() {\n const newIndex = this.sections[0]?.previousEditableSection ?? -1;\n if (newIndex !== -1) {\n setSelectedSections(newIndex);\n }\n },\n focusLastSection() {\n const newIndex = this.sections[this.sections.length - 1]?.nextEditableSection ?? -1;\n if (newIndex !== -1) {\n this.setSelectedSections(newIndex);\n }\n },\n increment() {\n if (this.readOnly || this.disabled) {\n return;\n }\n\n enteredKeys.current = '';\n const sectionIndex = getCurrentEditableSectionIndex(this.sections, selectedSections);\n if (sectionIndex !== -1) {\n adjustSection(sectionIndex, 1);\n }\n },\n decrement() {\n if (this.readOnly || this.disabled) {\n return;\n }\n\n enteredKeys.current = '';\n const sectionIndex = getCurrentEditableSectionIndex(this.sections, selectedSections);\n if (sectionIndex !== -1) {\n adjustSection(sectionIndex, -1);\n }\n },\n incrementPage() {\n if (this.readOnly || this.disabled) {\n return;\n }\n\n enteredKeys.current = '';\n const sectionIndex = getCurrentEditableSectionIndex(this.sections, selectedSections);\n if (sectionIndex !== -1) {\n adjustSection(sectionIndex, PAGE_STEP[this.sections[sectionIndex].type] || 1);\n }\n },\n decrementPage() {\n if (this.readOnly || this.disabled) {\n return;\n }\n\n enteredKeys.current = '';\n const sectionIndex = getCurrentEditableSectionIndex(this.sections, selectedSections);\n if (sectionIndex !== -1) {\n adjustSection(sectionIndex, -(PAGE_STEP[this.sections[sectionIndex].type] || 1));\n }\n },\n incrementToMax() {\n if (this.readOnly || this.disabled) {\n return;\n }\n enteredKeys.current = '';\n const sectionIndex = getCurrentEditableSectionIndex(this.sections, selectedSections);\n if (sectionIndex !== -1) {\n const section = this.sections[sectionIndex];\n if (typeof section.maxValue === 'number') {\n setSection(sectionIndex, section.maxValue);\n }\n }\n },\n decrementToMin() {\n if (this.readOnly || this.disabled) {\n return;\n }\n enteredKeys.current = '';\n const sectionIndex = getCurrentEditableSectionIndex(this.sections, selectedSections);\n if (sectionIndex !== -1) {\n const section = this.sections[sectionIndex];\n if (typeof section.minValue === 'number') {\n setSection(sectionIndex, section.minValue);\n }\n }\n },\n clearSection() {\n if (this.readOnly || this.disabled) {\n return;\n }\n\n enteredKeys.current = '';\n if (selectedSections === 'all') {\n this.clearAll();\n return;\n }\n\n const sectionIndex = getCurrentEditableSectionIndex(this.sections, selectedSections);\n if (sectionIndex === -1) {\n return;\n }\n\n flushValidSection(sectionIndex);\n\n const section = this.sections[sectionIndex];\n\n const placeholder = createPlaceholderValue({\n placeholderValue: props.placeholderValue,\n timeZone: props.timeZone,\n }).timeZone(props.timeZone);\n\n const displayPortion = getSectionValue(sectionIndex);\n let currentValue = displayPortion;\n\n // Reset day period to default without changing the hour.\n if (section.type === 'dayPeriod') {\n const isPM = displayPortion.hour() >= 12;\n const shouldBePM = placeholder.hour() >= 12;\n if (isPM && !shouldBePM) {\n currentValue = displayPortion.set('hour', displayPortion.hour() - 12);\n } else if (!isPM && shouldBePM) {\n currentValue = displayPortion.set('hour', displayPortion.hour() + 12);\n }\n } else {\n const type = getDurationUnitFromSectionType(section.type);\n currentValue = displayPortion.set(type, placeholder[type]());\n }\n\n setSectionValue(sectionIndex, currentValue);\n },\n clearAll() {\n if (this.readOnly || this.disabled) {\n return;\n }\n\n enteredKeys.current = '';\n flushAllValidSections();\n if (value !== null) {\n setDate(null);\n }\n\n const date = createPlaceholder();\n\n setValue(date);\n },\n onInput(key: string) {\n if (this.readOnly || this.disabled) {\n return;\n }\n\n const sectionIndex = getCurrentEditableSectionIndex(this.sections, selectedSections);\n if (sectionIndex === -1) {\n return;\n }\n\n const section = this.sections[sectionIndex];\n let newValue = enteredKeys.current + key;\n\n const onInputNumber = (numberValue: number) => {\n let sectionValue = section.type === 'month' ? numberValue - 1 : numberValue;\n const allowsZero = section.minValue === 0;\n if (\n section.type === 'hour' &&\n (section.minValue === 12 || section.maxValue === 11)\n ) {\n if (numberValue > 12) {\n sectionValue = Number(key);\n }\n if (section.minValue === 12 && sectionValue > 1) {\n sectionValue += 12;\n }\n } else if (sectionValue > (section.maxValue ?? 0)) {\n sectionValue = Number(key) - (section.type === 'month' ? 1 : 0);\n newValue = key;\n if (sectionValue > (section.maxValue ?? 0)) {\n enteredKeys.current = '';\n return;\n }\n }\n\n const shouldSetValue = sectionValue > 0 || (sectionValue === 0 && allowsZero);\n if (shouldSetValue) {\n setSection(sectionIndex, sectionValue);\n }\n\n if (\n Number(numberValue + '0') > (section.maxValue ?? 0) ||\n newValue.length >= String(section.maxValue).length\n ) {\n enteredKeys.current = '';\n if (shouldSetValue) {\n this.focusNextSection();\n }\n } else {\n enteredKeys.current = newValue === '0' ? '' : newValue;\n }\n };\n\n const onInputString = (stringValue: string) => {\n const options = section.options ?? [];\n let sectionValue = stringValue.toLocaleUpperCase();\n let foundOptions = options.filter((v) => v.startsWith(sectionValue));\n if (foundOptions.length === 0) {\n if (stringValue !== key) {\n sectionValue = key.toLocaleUpperCase();\n foundOptions = options.filter((v) => v.startsWith(sectionValue));\n }\n if (foundOptions.length === 0) {\n enteredKeys.current = '';\n return;\n }\n }\n const foundValue = foundOptions[0];\n const index = options.indexOf(foundValue);\n\n if (section.type === 'dayPeriod') {\n setSection(sectionIndex, index === 1 ? 12 : 0);\n } else {\n setSection(sectionIndex, index);\n }\n\n if (foundOptions.length > 1) {\n enteredKeys.current = newValue;\n } else {\n enteredKeys.current = '';\n this.focusNextSection();\n }\n };\n\n switch (section.type) {\n case 'day':\n case 'hour':\n case 'minute':\n case 'second':\n case 'quarter':\n case 'year': {\n if (!Number.isInteger(Number(newValue))) {\n return;\n }\n const numberValue = Number(newValue);\n onInputNumber(numberValue);\n break;\n }\n case 'dayPeriod': {\n onInputString(newValue);\n break;\n }\n case 'weekday':\n case 'month': {\n if (Number.isInteger(Number(newValue))) {\n const numberValue = Number(newValue);\n onInputNumber(numberValue);\n } else {\n onInputString(newValue);\n }\n break;\n }\n }\n },\n setValueFromString(str: string) {\n enteredKeys.current = '';\n return setValueFromString(str);\n },\n };\n}\n"]}
|
|
@@ -132,7 +132,9 @@ function useDateFieldState(props) {
|
|
|
132
132
|
}).timeZone(timeZone);
|
|
133
133
|
}
|
|
134
134
|
function setValueFromString(str) {
|
|
135
|
-
|
|
135
|
+
var _a;
|
|
136
|
+
const parseDate = (_a = props.parseDateFromString) !== null && _a !== void 0 ? _a : utils_1.parseDateFromString;
|
|
137
|
+
const date = parseDate(str, format, timeZone);
|
|
136
138
|
if (date.isValid()) {
|
|
137
139
|
handleUpdateDate(date);
|
|
138
140
|
return true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDateFieldState.js","sourceRoot":"../../../../../src","sources":["components/DateField/hooks/useDateFieldState.ts"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport type {DateTime} from '@gravity-ui/date-utils';\nimport {useControlledState} from '@gravity-ui/uikit';\n\nimport type {DateFieldBase} from '../../types/datePicker';\nimport {createPlaceholderValue, isInvalid} from '../../utils/dates';\nimport {useDefaultTimeZone} from '../../utils/useDefaultTimeZone';\nimport type {\n AvailableSections,\n DateFieldSectionType,\n DateFieldSectionWithoutPosition,\n} from '../types';\nimport {\n addSegment,\n adjustDateToFormat,\n getEditableSections,\n getFormatInfo,\n isAllSegmentsValid,\n markValidSection,\n parseDateFromString,\n setSegment,\n useFormatSections,\n} from '../utils';\n\nimport {useBaseDateFieldState} from './useBaseDateFieldState';\nimport type {DateFieldState} from './useBaseDateFieldState';\n\nexport interface DateFieldStateOptions extends DateFieldBase {}\n\nexport function useDateFieldState(props: DateFieldStateOptions): DateFieldState {\n const [value, setDate] = useControlledState(\n props.value,\n props.defaultValue ?? null,\n props.onUpdate,\n );\n\n const inputTimeZone = useDefaultTimeZone(\n props.value || props.defaultValue || props.placeholderValue,\n );\n const timeZone = props.timeZone || inputTimeZone;\n\n const handleUpdateDate = (v: DateTime | null) => {\n setDate(v ? v.timeZone(inputTimeZone) : v);\n };\n\n const [placeholderDate, setPlaceholderDate] = React.useState(() => {\n return createPlaceholderValue({\n placeholderValue: props.placeholderValue,\n timeZone,\n });\n });\n\n const format = props.format || 'L';\n const sections = useFormatSections(format);\n const formatInfo = React.useMemo(() => getFormatInfo(sections), [sections]);\n const allSegments = formatInfo.availableUnits;\n\n const validSegmentsState = React.useState<AvailableSections>(() =>\n value ? {...allSegments} : {},\n );\n\n let validSegments = validSegmentsState[0];\n const setValidSegments = validSegmentsState[1];\n\n if (value && !isAllSegmentsValid(allSegments, validSegments)) {\n setValidSegments({...allSegments});\n }\n\n if (\n !value &&\n Object.keys(allSegments).length > 0 &&\n isAllSegmentsValid(allSegments, validSegments) &&\n Object.keys(validSegments).length === Object.keys(allSegments).length\n ) {\n validSegments = {};\n setValidSegments(validSegments);\n setPlaceholderDate(\n createPlaceholderValue({\n placeholderValue: props.placeholderValue,\n timeZone,\n }),\n );\n }\n\n const displayValue =\n value && value.isValid() && isAllSegmentsValid(allSegments, validSegments)\n ? value.timeZone(timeZone)\n : placeholderDate.timeZone(timeZone);\n const sectionsState = useSectionsState(sections, displayValue, validSegments);\n\n const [selectedSections, setSelectedSections] = React.useState<number | 'all'>(-1);\n\n const selectedSectionIndexes = React.useMemo<{\n startIndex: number;\n endIndex: number;\n } | null>(() => {\n if (selectedSections === -1) {\n return null;\n }\n\n if (selectedSections === 'all') {\n return {\n startIndex: 0,\n endIndex: sectionsState.editableSections.length - 1,\n };\n }\n\n if (typeof selectedSections === 'number') {\n return {startIndex: selectedSections, endIndex: selectedSections};\n }\n\n if (typeof selectedSections === 'string') {\n const selectedSectionIndex = sectionsState.editableSections.findIndex(\n (section) => section.type === selectedSections,\n );\n\n return {startIndex: selectedSectionIndex, endIndex: selectedSectionIndex};\n }\n\n return selectedSections;\n }, [selectedSections, sectionsState.editableSections]);\n\n function setValue(newValue: DateTime) {\n if (props.disabled || props.readOnly) {\n return;\n }\n\n if (isAllSegmentsValid(allSegments, validSegments)) {\n if (!value || !newValue.isSame(value)) {\n handleUpdateDate(adjustDateToFormat(newValue, formatInfo));\n }\n } else {\n if (value) {\n handleUpdateDate(null);\n }\n setPlaceholderDate(newValue);\n }\n }\n\n function markValid(part: DateFieldSectionType) {\n validSegments = markValidSection(allSegments, validSegments, part);\n setValidSegments({...validSegments});\n }\n\n function setSection(sectionIndex: number, amount: number) {\n const section = sectionsState.editableSections[sectionIndex];\n if (section) {\n markValid(section.type);\n setValue(setSegment(section, displayValue, amount));\n }\n }\n\n function adjustSection(sectionIndex: number, amount: number) {\n const section = sectionsState.editableSections[sectionIndex];\n if (section) {\n if (validSegments[section.type]) {\n setValue(addSegment(section, displayValue, amount));\n } else {\n markValid(section.type);\n if (Object.keys(validSegments).length >= Object.keys(allSegments).length) {\n setValue(displayValue);\n }\n }\n }\n }\n\n function flushValidSection(sectionIndex: number) {\n const section = sectionsState.editableSections[sectionIndex];\n if (section) {\n delete validSegments[section.type];\n }\n setValidSegments({...validSegments});\n }\n\n function flushAllValidSections() {\n validSegments = {};\n setValidSegments({});\n }\n\n function getSectionValue(_sectionIndex: number) {\n return displayValue;\n }\n\n function setSectionValue(_sectionIndex: number, currentValue: DateTime) {\n setValue(currentValue);\n }\n\n function createPlaceholder() {\n return createPlaceholderValue({\n placeholderValue: props.placeholderValue,\n timeZone,\n }).timeZone(timeZone);\n }\n\n function setValueFromString(str: string) {\n const date = parseDateFromString(str, format, timeZone);\n if (date.isValid()) {\n handleUpdateDate(date);\n return true;\n }\n return false;\n }\n\n const validationState =\n props.validationState ||\n (isInvalid(value, props.minValue, props.maxValue) ? 'invalid' : undefined) ||\n (value && props.isDateUnavailable?.(value) ? 'invalid' : undefined);\n\n return useBaseDateFieldState({\n value,\n displayValue,\n placeholderValue: props.placeholderValue,\n timeZone,\n validationState,\n editableSections: sectionsState.editableSections,\n formatInfo,\n readOnly: props.readOnly,\n disabled: props.disabled,\n selectedSectionIndexes,\n selectedSections,\n isEmpty: Object.keys(validSegments).length === 0,\n flushAllValidSections,\n flushValidSection,\n setSelectedSections,\n setValue,\n setDate: handleUpdateDate,\n adjustSection,\n setSection,\n getSectionValue,\n setSectionValue,\n createPlaceholder,\n setValueFromString,\n });\n}\n\nfunction useSectionsState(\n sections: DateFieldSectionWithoutPosition[],\n value: DateTime,\n validSegments: AvailableSections,\n) {\n const [state, setState] = React.useState(() => {\n return {\n value,\n sections,\n validSegments,\n editableSections: getEditableSections(sections, value, validSegments),\n };\n });\n\n if (\n sections !== state.sections ||\n validSegments !== state.validSegments ||\n !value.isSame(state.value) ||\n value.timeZone() !== state.value.timeZone()\n ) {\n setState({\n value,\n sections,\n validSegments,\n editableSections: getEditableSections(sections, value, validSegments),\n });\n }\n\n return state;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"useDateFieldState.js","sourceRoot":"../../../../../src","sources":["components/DateField/hooks/useDateFieldState.ts"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport type {DateTime} from '@gravity-ui/date-utils';\nimport {useControlledState} from '@gravity-ui/uikit';\n\nimport type {DateFieldBase} from '../../types/datePicker';\nimport {createPlaceholderValue, isInvalid} from '../../utils/dates';\nimport {useDefaultTimeZone} from '../../utils/useDefaultTimeZone';\nimport type {\n AvailableSections,\n DateFieldSectionType,\n DateFieldSectionWithoutPosition,\n} from '../types';\nimport {\n addSegment,\n adjustDateToFormat,\n getEditableSections,\n getFormatInfo,\n isAllSegmentsValid,\n markValidSection,\n parseDateFromString,\n setSegment,\n useFormatSections,\n} from '../utils';\n\nimport {useBaseDateFieldState} from './useBaseDateFieldState';\nimport type {DateFieldState} from './useBaseDateFieldState';\n\nexport interface DateFieldStateOptions extends DateFieldBase {}\n\nexport function useDateFieldState(props: DateFieldStateOptions): DateFieldState {\n const [value, setDate] = useControlledState(\n props.value,\n props.defaultValue ?? null,\n props.onUpdate,\n );\n\n const inputTimeZone = useDefaultTimeZone(\n props.value || props.defaultValue || props.placeholderValue,\n );\n const timeZone = props.timeZone || inputTimeZone;\n\n const handleUpdateDate = (v: DateTime | null) => {\n setDate(v ? v.timeZone(inputTimeZone) : v);\n };\n\n const [placeholderDate, setPlaceholderDate] = React.useState(() => {\n return createPlaceholderValue({\n placeholderValue: props.placeholderValue,\n timeZone,\n });\n });\n\n const format = props.format || 'L';\n const sections = useFormatSections(format);\n const formatInfo = React.useMemo(() => getFormatInfo(sections), [sections]);\n const allSegments = formatInfo.availableUnits;\n\n const validSegmentsState = React.useState<AvailableSections>(() =>\n value ? {...allSegments} : {},\n );\n\n let validSegments = validSegmentsState[0];\n const setValidSegments = validSegmentsState[1];\n\n if (value && !isAllSegmentsValid(allSegments, validSegments)) {\n setValidSegments({...allSegments});\n }\n\n if (\n !value &&\n Object.keys(allSegments).length > 0 &&\n isAllSegmentsValid(allSegments, validSegments) &&\n Object.keys(validSegments).length === Object.keys(allSegments).length\n ) {\n validSegments = {};\n setValidSegments(validSegments);\n setPlaceholderDate(\n createPlaceholderValue({\n placeholderValue: props.placeholderValue,\n timeZone,\n }),\n );\n }\n\n const displayValue =\n value && value.isValid() && isAllSegmentsValid(allSegments, validSegments)\n ? value.timeZone(timeZone)\n : placeholderDate.timeZone(timeZone);\n const sectionsState = useSectionsState(sections, displayValue, validSegments);\n\n const [selectedSections, setSelectedSections] = React.useState<number | 'all'>(-1);\n\n const selectedSectionIndexes = React.useMemo<{\n startIndex: number;\n endIndex: number;\n } | null>(() => {\n if (selectedSections === -1) {\n return null;\n }\n\n if (selectedSections === 'all') {\n return {\n startIndex: 0,\n endIndex: sectionsState.editableSections.length - 1,\n };\n }\n\n if (typeof selectedSections === 'number') {\n return {startIndex: selectedSections, endIndex: selectedSections};\n }\n\n if (typeof selectedSections === 'string') {\n const selectedSectionIndex = sectionsState.editableSections.findIndex(\n (section) => section.type === selectedSections,\n );\n\n return {startIndex: selectedSectionIndex, endIndex: selectedSectionIndex};\n }\n\n return selectedSections;\n }, [selectedSections, sectionsState.editableSections]);\n\n function setValue(newValue: DateTime) {\n if (props.disabled || props.readOnly) {\n return;\n }\n\n if (isAllSegmentsValid(allSegments, validSegments)) {\n if (!value || !newValue.isSame(value)) {\n handleUpdateDate(adjustDateToFormat(newValue, formatInfo));\n }\n } else {\n if (value) {\n handleUpdateDate(null);\n }\n setPlaceholderDate(newValue);\n }\n }\n\n function markValid(part: DateFieldSectionType) {\n validSegments = markValidSection(allSegments, validSegments, part);\n setValidSegments({...validSegments});\n }\n\n function setSection(sectionIndex: number, amount: number) {\n const section = sectionsState.editableSections[sectionIndex];\n if (section) {\n markValid(section.type);\n setValue(setSegment(section, displayValue, amount));\n }\n }\n\n function adjustSection(sectionIndex: number, amount: number) {\n const section = sectionsState.editableSections[sectionIndex];\n if (section) {\n if (validSegments[section.type]) {\n setValue(addSegment(section, displayValue, amount));\n } else {\n markValid(section.type);\n if (Object.keys(validSegments).length >= Object.keys(allSegments).length) {\n setValue(displayValue);\n }\n }\n }\n }\n\n function flushValidSection(sectionIndex: number) {\n const section = sectionsState.editableSections[sectionIndex];\n if (section) {\n delete validSegments[section.type];\n }\n setValidSegments({...validSegments});\n }\n\n function flushAllValidSections() {\n validSegments = {};\n setValidSegments({});\n }\n\n function getSectionValue(_sectionIndex: number) {\n return displayValue;\n }\n\n function setSectionValue(_sectionIndex: number, currentValue: DateTime) {\n setValue(currentValue);\n }\n\n function createPlaceholder() {\n return createPlaceholderValue({\n placeholderValue: props.placeholderValue,\n timeZone,\n }).timeZone(timeZone);\n }\n\n function setValueFromString(str: string) {\n const parseDate = props.parseDateFromString ?? parseDateFromString;\n const date = parseDate(str, format, timeZone);\n if (date.isValid()) {\n handleUpdateDate(date);\n return true;\n }\n return false;\n }\n\n const validationState =\n props.validationState ||\n (isInvalid(value, props.minValue, props.maxValue) ? 'invalid' : undefined) ||\n (value && props.isDateUnavailable?.(value) ? 'invalid' : undefined);\n\n return useBaseDateFieldState({\n value,\n displayValue,\n placeholderValue: props.placeholderValue,\n timeZone,\n validationState,\n editableSections: sectionsState.editableSections,\n formatInfo,\n readOnly: props.readOnly,\n disabled: props.disabled,\n selectedSectionIndexes,\n selectedSections,\n isEmpty: Object.keys(validSegments).length === 0,\n flushAllValidSections,\n flushValidSection,\n setSelectedSections,\n setValue,\n setDate: handleUpdateDate,\n adjustSection,\n setSection,\n getSectionValue,\n setSectionValue,\n createPlaceholder,\n setValueFromString,\n });\n}\n\nfunction useSectionsState(\n sections: DateFieldSectionWithoutPosition[],\n value: DateTime,\n validSegments: AvailableSections,\n) {\n const [state, setState] = React.useState(() => {\n return {\n value,\n sections,\n validSegments,\n editableSections: getEditableSections(sections, value, validSegments),\n };\n });\n\n if (\n sections !== state.sections ||\n validSegments !== state.validSegments ||\n !value.isSame(state.value) ||\n value.timeZone() !== state.value.timeZone()\n ) {\n setState({\n value,\n sections,\n validSegments,\n editableSections: getEditableSections(sections, value, validSegments),\n });\n }\n\n return state;\n}\n"]}
|
|
@@ -148,9 +148,11 @@ function useRangeDateFieldState(props) {
|
|
|
148
148
|
});
|
|
149
149
|
}
|
|
150
150
|
function setValueFromString(str) {
|
|
151
|
+
var _a;
|
|
151
152
|
const list = str.split(delimiter);
|
|
152
|
-
const
|
|
153
|
-
const
|
|
153
|
+
const parseDate = (_a = props.parseDateFromString) !== null && _a !== void 0 ? _a : utils_1.parseDateFromString;
|
|
154
|
+
const start = parseDate(list === null || list === void 0 ? void 0 : list[0], format, timeZone);
|
|
155
|
+
const end = parseDate(list === null || list === void 0 ? void 0 : list[1], format, timeZone);
|
|
154
156
|
const range = { start, end };
|
|
155
157
|
if (range.start.isValid() && range.end.isValid()) {
|
|
156
158
|
handleUpdateRange(range);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useRangeDateFieldState.js","sourceRoot":"../../../../../src","sources":["components/RangeDateField/hooks/useRangeDateFieldState.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable complexity */\nimport React from 'react';\n\nimport type {DateTime} from '@gravity-ui/date-utils';\nimport {useControlledState} from '@gravity-ui/uikit';\n\nimport {useBaseDateFieldState} from '../../DateField';\nimport type {DateFieldState} from '../../DateField';\nimport type {DateFieldSectionType, DateFieldSectionWithoutPosition} from '../../DateField/types';\nimport {\n EDITABLE_SEGMENTS,\n addSegment,\n adjustDateToFormat,\n getFormatInfo,\n isAllSegmentsValid,\n markValidSection,\n parseDateFromString,\n setSegment,\n useFormatSections,\n} from '../../DateField/utils';\nimport type {DateFieldBase} from '../../types/datePicker';\nimport type {RangeValue} from '../../types/inputs';\nimport {isInvalid} from '../../utils/dates';\nimport {useDefaultTimeZone} from '../../utils/useDefaultTimeZone';\nimport {createPlaceholderRangeValue, getRangeEditableSections, isValidRange} from '../utils';\n\nexport interface RangeDateFieldStateOptions extends DateFieldBase<RangeValue<DateTime>> {\n delimiter?: string;\n}\n\nconst RANGE_FORMAT_DELIMITER = ' — ';\n\nexport type RangeDateFieldState = DateFieldState<RangeValue<DateTime>>;\n\nexport function useRangeDateFieldState(props: RangeDateFieldStateOptions): RangeDateFieldState {\n const [value, setRange] = useControlledState(\n props.value,\n props.defaultValue || null,\n props.onUpdate,\n );\n\n const inputTimeZone = useDefaultTimeZone(\n props.value?.start || props.defaultValue?.start || props.placeholderValue,\n );\n const timeZone = props.timeZone || inputTimeZone;\n\n const handleUpdateRange = (v: RangeValue<DateTime> | null) => {\n setRange(\n v ? {start: v.start.timeZone(inputTimeZone), end: v.end.timeZone(inputTimeZone)} : v,\n );\n };\n\n const [placeholderDate, setPlaceholderDate] = React.useState<RangeValue<DateTime>>(() => {\n return createPlaceholderRangeValue({\n placeholderValue: props.placeholderValue,\n timeZone,\n });\n });\n\n const format = props.format || 'L';\n const delimiter = props.delimiter ?? RANGE_FORMAT_DELIMITER;\n const sections = useFormatSections(format);\n const formatInfo = React.useMemo(() => getFormatInfo(sections), [sections]);\n\n const allSegments = formatInfo.availableUnits;\n\n // eslint-disable-next-line prefer-const\n let [validSegments, setValidSegments] = React.useState<RangeValue<typeof EDITABLE_SEGMENTS>>(\n () => (value ? {start: {...allSegments}, end: {...allSegments}} : {start: {}, end: {}}),\n );\n\n if (\n value &&\n (!isAllSegmentsValid(allSegments, validSegments.start) ||\n !isAllSegmentsValid(allSegments, validSegments.end))\n ) {\n setValidSegments({start: {...allSegments}, end: {...allSegments}});\n }\n\n if (\n !value &&\n Object.keys(allSegments).length > 0 &&\n isAllSegmentsValid(allSegments, validSegments.start) &&\n Object.keys(validSegments.start).length === Object.keys(allSegments).length &&\n isAllSegmentsValid(allSegments, validSegments.end) &&\n Object.keys(validSegments.end).length === Object.keys(allSegments).length\n ) {\n validSegments = {start: {}, end: {}};\n setValidSegments(validSegments);\n setPlaceholderDate(\n createPlaceholderRangeValue({\n placeholderValue: props.placeholderValue,\n timeZone,\n }),\n );\n }\n\n const displayValue =\n value &&\n value.start.isValid() &&\n value.end.isValid() &&\n Object.keys(validSegments.start).length >= Object.keys(allSegments).length &&\n Object.keys(validSegments.end).length >= Object.keys(allSegments).length\n ? {start: value.start.timeZone(timeZone), end: value.end.timeZone(timeZone)}\n : {\n start: placeholderDate.start.timeZone(timeZone),\n end: placeholderDate.end.timeZone(timeZone),\n };\n const sectionsState = useSectionsState(sections, displayValue, validSegments, delimiter);\n\n const [selectedSections, setSelectedSections] = React.useState<number | 'all'>(-1);\n\n const selectedSectionIndexes = React.useMemo<{\n startIndex: number;\n endIndex: number;\n } | null>(() => {\n if (selectedSections === -1) {\n return null;\n }\n\n if (selectedSections === 'all') {\n return {\n startIndex: 0,\n endIndex: sectionsState.editableSections.length - 1,\n };\n }\n\n if (typeof selectedSections === 'number') {\n return {startIndex: selectedSections, endIndex: selectedSections};\n }\n\n if (typeof selectedSections === 'string') {\n const selectedSectionIndex = sectionsState.editableSections.findIndex(\n (section) => section.type === selectedSections,\n );\n\n return {startIndex: selectedSectionIndex, endIndex: selectedSectionIndex};\n }\n\n return selectedSections;\n }, [selectedSections, sectionsState.editableSections]);\n\n function setValue(newValue: RangeValue<DateTime>) {\n if (props.disabled || props.readOnly) {\n return;\n }\n\n if (\n isAllSegmentsValid(allSegments, validSegments.start) &&\n isAllSegmentsValid(allSegments, validSegments.end)\n ) {\n if (!value || !(newValue.start.isSame(value.start) && newValue.end.isSame(value.end))) {\n handleUpdateRange({\n start: adjustDateToFormat(newValue.start, formatInfo, 'startOf'),\n end: adjustDateToFormat(newValue.end, formatInfo, 'endOf'),\n });\n }\n } else {\n if (value) {\n handleUpdateRange(null);\n }\n setPlaceholderDate(newValue);\n }\n }\n\n function markValid(portion: 'start' | 'end', part: DateFieldSectionType) {\n validSegments[portion] = markValidSection(allSegments, validSegments[portion], part);\n setValidSegments({...validSegments, [portion]: {...validSegments[portion]}});\n }\n\n function setSection(sectionIndex: number, amount: number) {\n const portion = sectionIndex <= sections.length ? 'start' : 'end';\n const section = sectionsState.editableSections[sectionIndex];\n markValid(portion, section.type);\n setValue({\n ...displayValue,\n [portion]: setSegment(section, displayValue[portion], amount),\n });\n }\n\n function adjustSection(sectionIndex: number, amount: number) {\n const section = sectionsState.editableSections[sectionIndex];\n const portion = sectionIndex <= sections.length ? 'start' : 'end';\n if (validSegments[portion][section.type]) {\n setValue({\n ...displayValue,\n [portion]: addSegment(section, displayValue[portion], amount),\n });\n } else {\n markValid(portion, section.type);\n if (Object.keys(validSegments[portion]).length >= Object.keys(allSegments).length) {\n setValue(displayValue);\n }\n }\n }\n\n function flushValidSection(sectionIndex: number) {\n const portion = sectionIndex <= sections.length ? 'start' : 'end';\n delete validSegments[portion][sectionsState.editableSections[sectionIndex].type];\n setValidSegments({...validSegments, [portion]: {...validSegments[portion]}});\n }\n\n function flushAllValidSections() {\n validSegments = {start: {}, end: {}};\n setValidSegments({start: {}, end: {}});\n }\n\n function getSectionValue(sectionIndex: number) {\n const portion = sectionIndex <= sections.length ? 'start' : 'end';\n return displayValue[portion];\n }\n\n function setSectionValue(sectionIndex: number, currentValue: DateTime) {\n const portion = sectionIndex <= sections.length ? 'start' : 'end';\n setValue({...displayValue, [portion]: currentValue});\n }\n\n function createPlaceholder() {\n return createPlaceholderRangeValue({\n placeholderValue: props.placeholderValue,\n timeZone,\n });\n }\n\n function setValueFromString(str: string) {\n const list = str.split(delimiter);\n const start = parseDateFromString(list?.[0], format, timeZone);\n const end = parseDateFromString(list?.[1], format, timeZone);\n const range = {start, end};\n if (range.start.isValid() && range.end.isValid()) {\n handleUpdateRange(range);\n return true;\n }\n return false;\n }\n\n const validationState =\n props.validationState ||\n (isInvalid(value?.start, props.minValue, props.maxValue) ? 'invalid' : undefined) ||\n (isInvalid(value?.end, props.minValue, props.maxValue) ? 'invalid' : undefined) ||\n (value && !isValidRange(value) ? 'invalid' : undefined) ||\n (value && props.isDateUnavailable?.(value.start) ? 'invalid' : undefined) ||\n (value && props.isDateUnavailable?.(value.end) ? 'invalid' : undefined);\n\n return useBaseDateFieldState({\n value,\n displayValue,\n placeholderValue: props.placeholderValue,\n timeZone,\n validationState,\n editableSections: sectionsState.editableSections,\n formatInfo,\n readOnly: props.readOnly,\n disabled: props.disabled,\n selectedSectionIndexes,\n selectedSections,\n isEmpty:\n Object.keys(validSegments.start).length === 0 &&\n Object.keys(validSegments.end).length === 0,\n flushAllValidSections,\n flushValidSection,\n setSelectedSections,\n setValue,\n setDate: handleUpdateRange,\n adjustSection,\n setSection,\n getSectionValue,\n setSectionValue,\n createPlaceholder,\n setValueFromString,\n });\n}\n\nfunction useSectionsState(\n sections: DateFieldSectionWithoutPosition[],\n value: RangeValue<DateTime>,\n validSegments: RangeValue<typeof EDITABLE_SEGMENTS>,\n delimiter: string,\n) {\n const [state, setState] = React.useState(() => {\n return {\n value,\n sections,\n validSegments,\n delimiter,\n editableSections: getRangeEditableSections(sections, value, validSegments, delimiter),\n };\n });\n\n if (\n sections !== state.sections ||\n validSegments !== state.validSegments ||\n !(value.start.isSame(state.value.start) && value.end.isSame(state.value.end)) ||\n delimiter !== state.delimiter\n ) {\n setState({\n value,\n sections,\n validSegments,\n delimiter,\n editableSections: getRangeEditableSections(sections, value, validSegments, delimiter),\n });\n }\n\n return state;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"useRangeDateFieldState.js","sourceRoot":"../../../../../src","sources":["components/RangeDateField/hooks/useRangeDateFieldState.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable complexity */\nimport React from 'react';\n\nimport type {DateTime} from '@gravity-ui/date-utils';\nimport {useControlledState} from '@gravity-ui/uikit';\n\nimport {useBaseDateFieldState} from '../../DateField';\nimport type {DateFieldState} from '../../DateField';\nimport type {DateFieldSectionType, DateFieldSectionWithoutPosition} from '../../DateField/types';\nimport {\n EDITABLE_SEGMENTS,\n addSegment,\n adjustDateToFormat,\n getFormatInfo,\n isAllSegmentsValid,\n markValidSection,\n parseDateFromString,\n setSegment,\n useFormatSections,\n} from '../../DateField/utils';\nimport type {DateFieldBase} from '../../types/datePicker';\nimport type {RangeValue} from '../../types/inputs';\nimport {isInvalid} from '../../utils/dates';\nimport {useDefaultTimeZone} from '../../utils/useDefaultTimeZone';\nimport {createPlaceholderRangeValue, getRangeEditableSections, isValidRange} from '../utils';\n\nexport interface RangeDateFieldStateOptions extends DateFieldBase<RangeValue<DateTime>> {\n delimiter?: string;\n}\n\nconst RANGE_FORMAT_DELIMITER = ' — ';\n\nexport type RangeDateFieldState = DateFieldState<RangeValue<DateTime>>;\n\nexport function useRangeDateFieldState(props: RangeDateFieldStateOptions): RangeDateFieldState {\n const [value, setRange] = useControlledState(\n props.value,\n props.defaultValue || null,\n props.onUpdate,\n );\n\n const inputTimeZone = useDefaultTimeZone(\n props.value?.start || props.defaultValue?.start || props.placeholderValue,\n );\n const timeZone = props.timeZone || inputTimeZone;\n\n const handleUpdateRange = (v: RangeValue<DateTime> | null) => {\n setRange(\n v ? {start: v.start.timeZone(inputTimeZone), end: v.end.timeZone(inputTimeZone)} : v,\n );\n };\n\n const [placeholderDate, setPlaceholderDate] = React.useState<RangeValue<DateTime>>(() => {\n return createPlaceholderRangeValue({\n placeholderValue: props.placeholderValue,\n timeZone,\n });\n });\n\n const format = props.format || 'L';\n const delimiter = props.delimiter ?? RANGE_FORMAT_DELIMITER;\n const sections = useFormatSections(format);\n const formatInfo = React.useMemo(() => getFormatInfo(sections), [sections]);\n\n const allSegments = formatInfo.availableUnits;\n\n // eslint-disable-next-line prefer-const\n let [validSegments, setValidSegments] = React.useState<RangeValue<typeof EDITABLE_SEGMENTS>>(\n () => (value ? {start: {...allSegments}, end: {...allSegments}} : {start: {}, end: {}}),\n );\n\n if (\n value &&\n (!isAllSegmentsValid(allSegments, validSegments.start) ||\n !isAllSegmentsValid(allSegments, validSegments.end))\n ) {\n setValidSegments({start: {...allSegments}, end: {...allSegments}});\n }\n\n if (\n !value &&\n Object.keys(allSegments).length > 0 &&\n isAllSegmentsValid(allSegments, validSegments.start) &&\n Object.keys(validSegments.start).length === Object.keys(allSegments).length &&\n isAllSegmentsValid(allSegments, validSegments.end) &&\n Object.keys(validSegments.end).length === Object.keys(allSegments).length\n ) {\n validSegments = {start: {}, end: {}};\n setValidSegments(validSegments);\n setPlaceholderDate(\n createPlaceholderRangeValue({\n placeholderValue: props.placeholderValue,\n timeZone,\n }),\n );\n }\n\n const displayValue =\n value &&\n value.start.isValid() &&\n value.end.isValid() &&\n Object.keys(validSegments.start).length >= Object.keys(allSegments).length &&\n Object.keys(validSegments.end).length >= Object.keys(allSegments).length\n ? {start: value.start.timeZone(timeZone), end: value.end.timeZone(timeZone)}\n : {\n start: placeholderDate.start.timeZone(timeZone),\n end: placeholderDate.end.timeZone(timeZone),\n };\n const sectionsState = useSectionsState(sections, displayValue, validSegments, delimiter);\n\n const [selectedSections, setSelectedSections] = React.useState<number | 'all'>(-1);\n\n const selectedSectionIndexes = React.useMemo<{\n startIndex: number;\n endIndex: number;\n } | null>(() => {\n if (selectedSections === -1) {\n return null;\n }\n\n if (selectedSections === 'all') {\n return {\n startIndex: 0,\n endIndex: sectionsState.editableSections.length - 1,\n };\n }\n\n if (typeof selectedSections === 'number') {\n return {startIndex: selectedSections, endIndex: selectedSections};\n }\n\n if (typeof selectedSections === 'string') {\n const selectedSectionIndex = sectionsState.editableSections.findIndex(\n (section) => section.type === selectedSections,\n );\n\n return {startIndex: selectedSectionIndex, endIndex: selectedSectionIndex};\n }\n\n return selectedSections;\n }, [selectedSections, sectionsState.editableSections]);\n\n function setValue(newValue: RangeValue<DateTime>) {\n if (props.disabled || props.readOnly) {\n return;\n }\n\n if (\n isAllSegmentsValid(allSegments, validSegments.start) &&\n isAllSegmentsValid(allSegments, validSegments.end)\n ) {\n if (!value || !(newValue.start.isSame(value.start) && newValue.end.isSame(value.end))) {\n handleUpdateRange({\n start: adjustDateToFormat(newValue.start, formatInfo, 'startOf'),\n end: adjustDateToFormat(newValue.end, formatInfo, 'endOf'),\n });\n }\n } else {\n if (value) {\n handleUpdateRange(null);\n }\n setPlaceholderDate(newValue);\n }\n }\n\n function markValid(portion: 'start' | 'end', part: DateFieldSectionType) {\n validSegments[portion] = markValidSection(allSegments, validSegments[portion], part);\n setValidSegments({...validSegments, [portion]: {...validSegments[portion]}});\n }\n\n function setSection(sectionIndex: number, amount: number) {\n const portion = sectionIndex <= sections.length ? 'start' : 'end';\n const section = sectionsState.editableSections[sectionIndex];\n markValid(portion, section.type);\n setValue({\n ...displayValue,\n [portion]: setSegment(section, displayValue[portion], amount),\n });\n }\n\n function adjustSection(sectionIndex: number, amount: number) {\n const section = sectionsState.editableSections[sectionIndex];\n const portion = sectionIndex <= sections.length ? 'start' : 'end';\n if (validSegments[portion][section.type]) {\n setValue({\n ...displayValue,\n [portion]: addSegment(section, displayValue[portion], amount),\n });\n } else {\n markValid(portion, section.type);\n if (Object.keys(validSegments[portion]).length >= Object.keys(allSegments).length) {\n setValue(displayValue);\n }\n }\n }\n\n function flushValidSection(sectionIndex: number) {\n const portion = sectionIndex <= sections.length ? 'start' : 'end';\n delete validSegments[portion][sectionsState.editableSections[sectionIndex].type];\n setValidSegments({...validSegments, [portion]: {...validSegments[portion]}});\n }\n\n function flushAllValidSections() {\n validSegments = {start: {}, end: {}};\n setValidSegments({start: {}, end: {}});\n }\n\n function getSectionValue(sectionIndex: number) {\n const portion = sectionIndex <= sections.length ? 'start' : 'end';\n return displayValue[portion];\n }\n\n function setSectionValue(sectionIndex: number, currentValue: DateTime) {\n const portion = sectionIndex <= sections.length ? 'start' : 'end';\n setValue({...displayValue, [portion]: currentValue});\n }\n\n function createPlaceholder() {\n return createPlaceholderRangeValue({\n placeholderValue: props.placeholderValue,\n timeZone,\n });\n }\n\n function setValueFromString(str: string) {\n const list = str.split(delimiter);\n const parseDate = props.parseDateFromString ?? parseDateFromString;\n const start = parseDate(list?.[0], format, timeZone);\n const end = parseDate(list?.[1], format, timeZone);\n const range = {start, end};\n if (range.start.isValid() && range.end.isValid()) {\n handleUpdateRange(range);\n return true;\n }\n return false;\n }\n\n const validationState =\n props.validationState ||\n (isInvalid(value?.start, props.minValue, props.maxValue) ? 'invalid' : undefined) ||\n (isInvalid(value?.end, props.minValue, props.maxValue) ? 'invalid' : undefined) ||\n (value && !isValidRange(value) ? 'invalid' : undefined) ||\n (value && props.isDateUnavailable?.(value.start) ? 'invalid' : undefined) ||\n (value && props.isDateUnavailable?.(value.end) ? 'invalid' : undefined);\n\n return useBaseDateFieldState({\n value,\n displayValue,\n placeholderValue: props.placeholderValue,\n timeZone,\n validationState,\n editableSections: sectionsState.editableSections,\n formatInfo,\n readOnly: props.readOnly,\n disabled: props.disabled,\n selectedSectionIndexes,\n selectedSections,\n isEmpty:\n Object.keys(validSegments.start).length === 0 &&\n Object.keys(validSegments.end).length === 0,\n flushAllValidSections,\n flushValidSection,\n setSelectedSections,\n setValue,\n setDate: handleUpdateRange,\n adjustSection,\n setSection,\n getSectionValue,\n setSectionValue,\n createPlaceholder,\n setValueFromString,\n });\n}\n\nfunction useSectionsState(\n sections: DateFieldSectionWithoutPosition[],\n value: RangeValue<DateTime>,\n validSegments: RangeValue<typeof EDITABLE_SEGMENTS>,\n delimiter: string,\n) {\n const [state, setState] = React.useState(() => {\n return {\n value,\n sections,\n validSegments,\n delimiter,\n editableSections: getRangeEditableSections(sections, value, validSegments, delimiter),\n };\n });\n\n if (\n sections !== state.sections ||\n validSegments !== state.validSegments ||\n !(value.start.isSame(state.value.start) && value.end.isSame(state.value.end)) ||\n delimiter !== state.delimiter\n ) {\n setState({\n value,\n sections,\n validSegments,\n delimiter,\n editableSections: getRangeEditableSections(sections, value, validSegments, delimiter),\n });\n }\n\n return state;\n}\n"]}
|
|
@@ -61,7 +61,7 @@ function RelativeRangeDatePicker(props) {
|
|
|
61
61
|
setTimeout(() => {
|
|
62
62
|
dialogClosing.current = false;
|
|
63
63
|
});
|
|
64
|
-
}, anchor: anchor, modal: true, returnFocus: true, popupClassName: props.popupClassName, popupStyle: props.popupStyle, popupPlacement: props.popupPlacement, popupOffset: props.popupOffset, isMobile: isMobile, size: props.size, format: props.format, readOnly: props.readOnly, minValue: props.minValue, maxValue: props.maxValue, allowNullableValues: props.allowNullableValues, isDateUnavailable: props.isDateUnavailable, placeholderValue: props.placeholderValue, withPresets: props.withPresets, presetTabs: props.presetTabs, docs: props.docs, withApplyButton: props.withApplyButton, withZonesList: props.withZonesList, withHeader: props.withHeader })] })));
|
|
64
|
+
}, anchor: anchor, modal: true, returnFocus: true, popupClassName: props.popupClassName, popupStyle: props.popupStyle, popupPlacement: props.popupPlacement, popupOffset: props.popupOffset, isMobile: isMobile, size: props.size, format: props.format, readOnly: props.readOnly, minValue: props.minValue, maxValue: props.maxValue, allowNullableValues: props.allowNullableValues, isDateUnavailable: props.isDateUnavailable, placeholderValue: props.placeholderValue, withPresets: props.withPresets, applyPresetsImmediately: props.applyPresetsImmediately, presetTabs: props.presetTabs, docs: props.docs, withApplyButton: props.withApplyButton, withZonesList: props.withZonesList, withHeader: props.withHeader })] })));
|
|
65
65
|
}
|
|
66
66
|
function getNativeValue(value) {
|
|
67
67
|
if (!value) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RelativeRangeDatePicker.js","sourceRoot":"../../../../src","sources":["components/RelativeRangeDatePicker/RelativeRangeDatePicker.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport React from 'react';\n\nimport {useControlledState, useFocusWithin, useMobile} from '@gravity-ui/uikit';\n\nimport {block} from '../../utils/cn';\nimport {HiddenInput} from '../HiddenInput/HiddenInput';\nimport type {Value} from '../RelativeDatePicker';\n\nimport {Control} from './components/Control/Control';\nimport {PickerDialog} from './components/PickerDialog/PickerDialog';\nimport {useRelativeRangeDatePickerState} from './hooks/useRelativeRangeDatePickerState';\nimport type {RelativeRangeDatePickerProps} from './types';\n\nimport './RelativeRangeDatePicker.scss';\n\nconst b = block('relative-range-date-picker');\n\nexport function RelativeRangeDatePicker(props: RelativeRangeDatePickerProps) {\n const state = useRelativeRangeDatePickerState(props);\n\n const isMobile = useMobile();\n\n const [anchor, setAnchor] = React.useState<HTMLDivElement | null>(null);\n const dialogClosing = React.useRef(false);\n\n const [open, setOpen] = useControlledState<boolean>(undefined, false, props.onOpenChange);\n\n const {focusWithinProps} = useFocusWithin({\n isDisabled: props.disabled,\n onFocusWithin: props.onFocus,\n onBlurWithin: props.onBlur,\n onFocusWithinChange: (isFocusWithin) => {\n if (\n isFocusWithin &&\n !dialogClosing.current &&\n !props.renderControl &&\n document.activeElement?.tagName !== 'BUTTON'\n ) {\n setOpen(true);\n }\n },\n });\n\n return (\n <div\n ref={setAnchor}\n {...focusWithinProps}\n className={b(null, props.className)}\n style={props.style}\n >\n <Control\n props={props}\n state={state}\n open={open}\n setOpen={setOpen}\n isMobile={isMobile}\n onClick={() => {\n if (props.disabled) {\n return;\n }\n setOpen(true);\n }}\n onKeyDown={(e) => {\n if (props.disabled) {\n return;\n }\n if (e.altKey && (e.key === 'ArrowDown' || e.key === 'ArrowUp')) {\n e.preventDefault();\n setOpen(true);\n }\n }}\n onClickCalendar={() => {\n setOpen(!open);\n }}\n onUpdate={(v: string) => {\n if (!props.readOnly && !v) {\n state.setValue(null, 'default');\n }\n }}\n />\n <HiddenInput\n name={props.name}\n form={props.form}\n value={state.value}\n toStringValue={(v) => v?.start?.type ?? ''}\n disabled={props.disabled}\n />\n <HiddenInput\n name={props.name}\n form={props.form}\n value={state.value}\n toStringValue={(v) => getNativeValue(v?.start ?? null)}\n disabled={props.disabled}\n />\n <HiddenInput\n name={props.name}\n form={props.form}\n value={state.value}\n toStringValue={(v) => v?.end?.type ?? ''}\n disabled={props.disabled}\n />\n <HiddenInput\n name={props.name}\n form={props.form}\n value={state.value}\n toStringValue={(v) => getNativeValue(v?.end ?? null)}\n disabled={props.disabled}\n />\n <HiddenInput\n name={props.name}\n form={props.form}\n onReset={(v) => {\n state.setValue(v.value, v.timeZone);\n }}\n value={{value: state.value, timeZone: state.timeZone}}\n toStringValue={(v) => v.timeZone}\n disabled={props.disabled}\n />\n\n <PickerDialog\n value={state.value}\n onUpdate={state.setValue}\n timeZone={state.timeZone}\n open={open}\n onClose={() => {\n setOpen(false);\n dialogClosing.current = true;\n }}\n onRemove={() => {\n setTimeout(() => {\n dialogClosing.current = false;\n });\n }}\n anchor={anchor}\n modal\n returnFocus\n popupClassName={props.popupClassName}\n popupStyle={props.popupStyle}\n popupPlacement={props.popupPlacement}\n popupOffset={props.popupOffset}\n isMobile={isMobile}\n size={props.size}\n format={props.format}\n readOnly={props.readOnly}\n minValue={props.minValue}\n maxValue={props.maxValue}\n allowNullableValues={props.allowNullableValues}\n isDateUnavailable={props.isDateUnavailable}\n placeholderValue={props.placeholderValue}\n withPresets={props.withPresets}\n presetTabs={props.presetTabs}\n docs={props.docs}\n withApplyButton={props.withApplyButton}\n withZonesList={props.withZonesList}\n withHeader={props.withHeader}\n />\n </div>\n );\n}\n\nfunction getNativeValue(value: Value | null) {\n if (!value) {\n return '';\n }\n if (value.type === 'relative') {\n return value.value;\n }\n return value.value.toISOString();\n}\n"]}
|
|
1
|
+
{"version":3,"file":"RelativeRangeDatePicker.js","sourceRoot":"../../../../src","sources":["components/RelativeRangeDatePicker/RelativeRangeDatePicker.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport React from 'react';\n\nimport {useControlledState, useFocusWithin, useMobile} from '@gravity-ui/uikit';\n\nimport {block} from '../../utils/cn';\nimport {HiddenInput} from '../HiddenInput/HiddenInput';\nimport type {Value} from '../RelativeDatePicker';\n\nimport {Control} from './components/Control/Control';\nimport {PickerDialog} from './components/PickerDialog/PickerDialog';\nimport {useRelativeRangeDatePickerState} from './hooks/useRelativeRangeDatePickerState';\nimport type {RelativeRangeDatePickerProps} from './types';\n\nimport './RelativeRangeDatePicker.scss';\n\nconst b = block('relative-range-date-picker');\n\nexport function RelativeRangeDatePicker(props: RelativeRangeDatePickerProps) {\n const state = useRelativeRangeDatePickerState(props);\n\n const isMobile = useMobile();\n\n const [anchor, setAnchor] = React.useState<HTMLDivElement | null>(null);\n const dialogClosing = React.useRef(false);\n\n const [open, setOpen] = useControlledState<boolean>(undefined, false, props.onOpenChange);\n\n const {focusWithinProps} = useFocusWithin({\n isDisabled: props.disabled,\n onFocusWithin: props.onFocus,\n onBlurWithin: props.onBlur,\n onFocusWithinChange: (isFocusWithin) => {\n if (\n isFocusWithin &&\n !dialogClosing.current &&\n !props.renderControl &&\n document.activeElement?.tagName !== 'BUTTON'\n ) {\n setOpen(true);\n }\n },\n });\n\n return (\n <div\n ref={setAnchor}\n {...focusWithinProps}\n className={b(null, props.className)}\n style={props.style}\n >\n <Control\n props={props}\n state={state}\n open={open}\n setOpen={setOpen}\n isMobile={isMobile}\n onClick={() => {\n if (props.disabled) {\n return;\n }\n setOpen(true);\n }}\n onKeyDown={(e) => {\n if (props.disabled) {\n return;\n }\n if (e.altKey && (e.key === 'ArrowDown' || e.key === 'ArrowUp')) {\n e.preventDefault();\n setOpen(true);\n }\n }}\n onClickCalendar={() => {\n setOpen(!open);\n }}\n onUpdate={(v: string) => {\n if (!props.readOnly && !v) {\n state.setValue(null, 'default');\n }\n }}\n />\n <HiddenInput\n name={props.name}\n form={props.form}\n value={state.value}\n toStringValue={(v) => v?.start?.type ?? ''}\n disabled={props.disabled}\n />\n <HiddenInput\n name={props.name}\n form={props.form}\n value={state.value}\n toStringValue={(v) => getNativeValue(v?.start ?? null)}\n disabled={props.disabled}\n />\n <HiddenInput\n name={props.name}\n form={props.form}\n value={state.value}\n toStringValue={(v) => v?.end?.type ?? ''}\n disabled={props.disabled}\n />\n <HiddenInput\n name={props.name}\n form={props.form}\n value={state.value}\n toStringValue={(v) => getNativeValue(v?.end ?? null)}\n disabled={props.disabled}\n />\n <HiddenInput\n name={props.name}\n form={props.form}\n onReset={(v) => {\n state.setValue(v.value, v.timeZone);\n }}\n value={{value: state.value, timeZone: state.timeZone}}\n toStringValue={(v) => v.timeZone}\n disabled={props.disabled}\n />\n\n <PickerDialog\n value={state.value}\n onUpdate={state.setValue}\n timeZone={state.timeZone}\n open={open}\n onClose={() => {\n setOpen(false);\n dialogClosing.current = true;\n }}\n onRemove={() => {\n setTimeout(() => {\n dialogClosing.current = false;\n });\n }}\n anchor={anchor}\n modal\n returnFocus\n popupClassName={props.popupClassName}\n popupStyle={props.popupStyle}\n popupPlacement={props.popupPlacement}\n popupOffset={props.popupOffset}\n isMobile={isMobile}\n size={props.size}\n format={props.format}\n readOnly={props.readOnly}\n minValue={props.minValue}\n maxValue={props.maxValue}\n allowNullableValues={props.allowNullableValues}\n isDateUnavailable={props.isDateUnavailable}\n placeholderValue={props.placeholderValue}\n withPresets={props.withPresets}\n applyPresetsImmediately={props.applyPresetsImmediately}\n presetTabs={props.presetTabs}\n docs={props.docs}\n withApplyButton={props.withApplyButton}\n withZonesList={props.withZonesList}\n withHeader={props.withHeader}\n />\n </div>\n );\n}\n\nfunction getNativeValue(value: Value | null) {\n if (!value) {\n return '';\n }\n if (value.type === 'relative') {\n return value.value;\n }\n return value.value.toISOString();\n}\n"]}
|
|
@@ -23,6 +23,8 @@ export interface PickerFormProps extends RelativeRangeDatePickerStateOptions, Do
|
|
|
23
23
|
withZonesList?: boolean;
|
|
24
24
|
/** Show relative range presets */
|
|
25
25
|
withPresets?: boolean;
|
|
26
|
+
/** Apply presets immediately */
|
|
27
|
+
applyPresetsImmediately?: boolean;
|
|
26
28
|
/** Show header with docs tooltip */
|
|
27
29
|
withHeader?: boolean;
|
|
28
30
|
/** Custom preset tabs */
|
|
@@ -35,8 +35,8 @@ function PickerForm(props) {
|
|
|
35
35
|
state.applyValue();
|
|
36
36
|
props.onApply();
|
|
37
37
|
}, className: b('apply'), width: "max", children: (0, i18n_1.i18n)('Apply') })) : null, props.withPresets && !props.readOnly ? ((0, jsx_runtime_1.jsx)(Presets_1.Presets, { size: props.size, presetTabs: props.presetTabs, onChoosePreset: (start, end) => {
|
|
38
|
-
state.setRange({ type: 'relative', value: start }, { type: 'relative', value: end });
|
|
39
|
-
if (!props.withApplyButton) {
|
|
38
|
+
state.setRange({ type: 'relative', value: start }, { type: 'relative', value: end }, props.applyPresetsImmediately);
|
|
39
|
+
if (!props.withApplyButton || props.applyPresetsImmediately) {
|
|
40
40
|
props.onApply();
|
|
41
41
|
}
|
|
42
42
|
}, minValue: props.minValue, className: b('presets') })) : null, props.withZonesList ? ((0, jsx_runtime_1.jsx)("div", { className: b('zone'), children: (0, jsx_runtime_1.jsx)(Zones_1.Zones, { value: state.timeZone, onUpdate: state.setTimeZone, disabled: props.readOnly, size: props.size }) })) : null] }));
|
package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PickerForm.js","sourceRoot":"../../../../../../src","sources":["components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport type {DateTime} from '@gravity-ui/date-utils';\nimport {Button, Text} from '@gravity-ui/uikit';\nimport type {TextInputSize} from '@gravity-ui/uikit';\n\nimport {block} from '../../../../utils/cn';\nimport {RelativeDatePicker} from '../../../RelativeDatePicker';\nimport type {RelativeDatePickerProps} from '../../../RelativeDatePicker';\nimport type {DomProps, StyleProps} from '../../../types';\nimport type {RelativeRangeDatePickerStateOptions} from '../../hooks/useRelativeRangeDatePickerState';\nimport {Presets} from '../Presets/Presets';\nimport type {Preset} from '../Presets/defaultPresets';\nimport type {PresetTab} from '../Presets/utils';\nimport {Zones} from '../Zones/Zones';\n\nimport {PickerDoc} from './PickerDoc';\nimport {i18n} from './i18n';\nimport {useRelativeRangeDatePickerDialogState} from './useRelativeRangeDatePickerDialogState';\n\nimport './PickerForm.scss';\n\nconst b = block('relative-range-date-picker-form');\n\nexport interface PickerFormProps extends RelativeRangeDatePickerStateOptions, DomProps, StyleProps {\n /** The size of the element */\n size?: TextInputSize;\n /**\n * Whether the values is immutable.\n * @default false\n */\n readOnly?: boolean;\n /** Format of the date when rendered in the input. [Available formats](https://day.js.org/docs/en/display/format) */\n format?: string;\n /** A placeholder date that controls the default values of each segment when the user first interacts with them. Defaults to today's date at midnight. */\n placeholderValue?: DateTime;\n /** Apply changes with button */\n withApplyButton?: boolean;\n /** Show time zone selector */\n withZonesList?: boolean;\n /** Show relative range presets */\n withPresets?: boolean;\n /** Show header with docs tooltip */\n withHeader?: boolean;\n /** Custom preset tabs */\n presetTabs?: PresetTab[];\n /** Custom docs for picker, if empty array docs will be hidden */\n docs?: Preset[];\n}\n\nexport function PickerForm(\n props: PickerFormProps & {\n onApply: () => void;\n },\n) {\n const state = useRelativeRangeDatePickerDialogState(props);\n\n const fieldProps: RelativeDatePickerProps = {\n timeZone: state.timeZone,\n format: props.format,\n minValue: props.minValue,\n maxValue: props.maxValue,\n hasClear: props.allowNullableValues,\n readOnly: props.readOnly,\n size: props.size,\n errorPlacement: 'inside',\n };\n const {isDateUnavailable, withHeader = false} = props;\n return (\n <div className={b({size: props.size}, props.className)} style={props.style}>\n {withHeader && (\n <div className={b('header')}>\n <Text variant={props.size === 'xl' ? 'subheader-3' : 'subheader-2'}>\n {i18n('Select the interval')}\n </Text>\n <PickerDoc\n size={props.size}\n docs={props.docs}\n onStartUpdate={(start) => {\n state.setStart({type: 'relative', value: start});\n }}\n onEndUpdate={(end) => {\n state.setEnd({type: 'relative', value: end});\n }}\n />\n </div>\n )}\n\n <div className={b('pickers')}>\n <RelativeDatePicker\n {...fieldProps}\n isDateUnavailable={\n isDateUnavailable ? (date) => isDateUnavailable(date, 'start') : undefined\n }\n validationState={state.startValidation?.isInvalid ? 'invalid' : undefined}\n errorMessage={\n state.startValidation?.errors?.join('\\n') || i18n('Value is incorrect.')\n }\n placeholderValue={props.placeholderValue?.startOf('day')}\n label={i18n('From')}\n value={state.start}\n onUpdate={state.setStart}\n />\n <RelativeDatePicker\n {...fieldProps}\n isDateUnavailable={\n isDateUnavailable ? (date) => isDateUnavailable(date, 'end') : undefined\n }\n validationState={state.endValidation?.isInvalid ? 'invalid' : undefined}\n errorMessage={\n state.endValidation?.errors?.join('\\n') || i18n('Value is incorrect.')\n }\n placeholderValue={props.placeholderValue?.endOf('day')}\n label={i18n('To')}\n value={state.end}\n onUpdate={state.setEnd}\n roundUp\n />\n </div>\n {props.withApplyButton && !props.readOnly ? (\n <Button\n disabled={state.isInvalid}\n size={props.size}\n onClick={() => {\n state.applyValue();\n props.onApply();\n }}\n className={b('apply')}\n width=\"max\"\n >\n {i18n('Apply')}\n </Button>\n ) : null}\n {props.withPresets && !props.readOnly ? (\n <Presets\n size={props.size}\n presetTabs={props.presetTabs}\n onChoosePreset={(start, end) => {\n state.setRange(\n {type: 'relative', value: start},\n {type: 'relative', value: end},\n );\n if (!props.withApplyButton) {\n props.onApply();\n }\n }}\n minValue={props.minValue}\n className={b('presets')}\n />\n ) : null}\n {props.withZonesList ? (\n <div className={b('zone')}>\n <Zones\n value={state.timeZone}\n onUpdate={state.setTimeZone}\n disabled={props.readOnly}\n size={props.size}\n />\n </div>\n ) : null}\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"PickerForm.js","sourceRoot":"../../../../../../src","sources":["components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport type {DateTime} from '@gravity-ui/date-utils';\nimport {Button, Text} from '@gravity-ui/uikit';\nimport type {TextInputSize} from '@gravity-ui/uikit';\n\nimport {block} from '../../../../utils/cn';\nimport {RelativeDatePicker} from '../../../RelativeDatePicker';\nimport type {RelativeDatePickerProps} from '../../../RelativeDatePicker';\nimport type {DomProps, StyleProps} from '../../../types';\nimport type {RelativeRangeDatePickerStateOptions} from '../../hooks/useRelativeRangeDatePickerState';\nimport {Presets} from '../Presets/Presets';\nimport type {Preset} from '../Presets/defaultPresets';\nimport type {PresetTab} from '../Presets/utils';\nimport {Zones} from '../Zones/Zones';\n\nimport {PickerDoc} from './PickerDoc';\nimport {i18n} from './i18n';\nimport {useRelativeRangeDatePickerDialogState} from './useRelativeRangeDatePickerDialogState';\n\nimport './PickerForm.scss';\n\nconst b = block('relative-range-date-picker-form');\n\nexport interface PickerFormProps extends RelativeRangeDatePickerStateOptions, DomProps, StyleProps {\n /** The size of the element */\n size?: TextInputSize;\n /**\n * Whether the values is immutable.\n * @default false\n */\n readOnly?: boolean;\n /** Format of the date when rendered in the input. [Available formats](https://day.js.org/docs/en/display/format) */\n format?: string;\n /** A placeholder date that controls the default values of each segment when the user first interacts with them. Defaults to today's date at midnight. */\n placeholderValue?: DateTime;\n /** Apply changes with button */\n withApplyButton?: boolean;\n /** Show time zone selector */\n withZonesList?: boolean;\n /** Show relative range presets */\n withPresets?: boolean;\n /** Apply presets immediately */\n applyPresetsImmediately?: boolean;\n /** Show header with docs tooltip */\n withHeader?: boolean;\n /** Custom preset tabs */\n presetTabs?: PresetTab[];\n /** Custom docs for picker, if empty array docs will be hidden */\n docs?: Preset[];\n}\n\nexport function PickerForm(\n props: PickerFormProps & {\n onApply: () => void;\n },\n) {\n const state = useRelativeRangeDatePickerDialogState(props);\n\n const fieldProps: RelativeDatePickerProps = {\n timeZone: state.timeZone,\n format: props.format,\n minValue: props.minValue,\n maxValue: props.maxValue,\n hasClear: props.allowNullableValues,\n readOnly: props.readOnly,\n size: props.size,\n errorPlacement: 'inside',\n };\n const {isDateUnavailable, withHeader = false} = props;\n return (\n <div className={b({size: props.size}, props.className)} style={props.style}>\n {withHeader && (\n <div className={b('header')}>\n <Text variant={props.size === 'xl' ? 'subheader-3' : 'subheader-2'}>\n {i18n('Select the interval')}\n </Text>\n <PickerDoc\n size={props.size}\n docs={props.docs}\n onStartUpdate={(start) => {\n state.setStart({type: 'relative', value: start});\n }}\n onEndUpdate={(end) => {\n state.setEnd({type: 'relative', value: end});\n }}\n />\n </div>\n )}\n\n <div className={b('pickers')}>\n <RelativeDatePicker\n {...fieldProps}\n isDateUnavailable={\n isDateUnavailable ? (date) => isDateUnavailable(date, 'start') : undefined\n }\n validationState={state.startValidation?.isInvalid ? 'invalid' : undefined}\n errorMessage={\n state.startValidation?.errors?.join('\\n') || i18n('Value is incorrect.')\n }\n placeholderValue={props.placeholderValue?.startOf('day')}\n label={i18n('From')}\n value={state.start}\n onUpdate={state.setStart}\n />\n <RelativeDatePicker\n {...fieldProps}\n isDateUnavailable={\n isDateUnavailable ? (date) => isDateUnavailable(date, 'end') : undefined\n }\n validationState={state.endValidation?.isInvalid ? 'invalid' : undefined}\n errorMessage={\n state.endValidation?.errors?.join('\\n') || i18n('Value is incorrect.')\n }\n placeholderValue={props.placeholderValue?.endOf('day')}\n label={i18n('To')}\n value={state.end}\n onUpdate={state.setEnd}\n roundUp\n />\n </div>\n {props.withApplyButton && !props.readOnly ? (\n <Button\n disabled={state.isInvalid}\n size={props.size}\n onClick={() => {\n state.applyValue();\n props.onApply();\n }}\n className={b('apply')}\n width=\"max\"\n >\n {i18n('Apply')}\n </Button>\n ) : null}\n {props.withPresets && !props.readOnly ? (\n <Presets\n size={props.size}\n presetTabs={props.presetTabs}\n onChoosePreset={(start, end) => {\n state.setRange(\n {type: 'relative', value: start},\n {type: 'relative', value: end},\n props.applyPresetsImmediately,\n );\n if (!props.withApplyButton || props.applyPresetsImmediately) {\n props.onApply();\n }\n }}\n minValue={props.minValue}\n className={b('presets')}\n />\n ) : null}\n {props.withZonesList ? (\n <div className={b('zone')}>\n <Zones\n value={state.timeZone}\n onUpdate={state.setTimeZone}\n disabled={props.readOnly}\n size={props.size}\n />\n </div>\n ) : null}\n </div>\n );\n}\n"]}
|
|
@@ -6,7 +6,7 @@ export declare function useRelativeRangeDatePickerDialogState(props: PickerFormP
|
|
|
6
6
|
timeZone: string;
|
|
7
7
|
setStart: (newValue: Value | null) => void;
|
|
8
8
|
setEnd: (newValue: Value | null) => void;
|
|
9
|
-
setRange: (newStart: Value, newEnd: Value) => void;
|
|
9
|
+
setRange: (newStart: Value, newEnd: Value, force?: boolean) => void;
|
|
10
10
|
setTimeZone: (newTimeZone: string) => void;
|
|
11
11
|
applyValue: () => void;
|
|
12
12
|
isInvalid: boolean;
|
|
@@ -44,12 +44,12 @@ function useRelativeRangeDatePickerDialogState(props) {
|
|
|
44
44
|
return;
|
|
45
45
|
}
|
|
46
46
|
setTimeZone(newTimeZone);
|
|
47
|
-
const newStart = start ? Object.assign({}, start) :
|
|
47
|
+
const newStart = start ? Object.assign({}, start) : null;
|
|
48
48
|
if ((newStart === null || newStart === void 0 ? void 0 : newStart.type) === 'absolute') {
|
|
49
49
|
newStart.value = newStart.value.timeZone(newTimeZone, true);
|
|
50
50
|
setStart(newStart);
|
|
51
51
|
}
|
|
52
|
-
const newEnd = end ? Object.assign({}, end) :
|
|
52
|
+
const newEnd = end ? Object.assign({}, end) : null;
|
|
53
53
|
if ((newEnd === null || newEnd === void 0 ? void 0 : newEnd.type) === 'absolute') {
|
|
54
54
|
newEnd.value = newEnd.value.timeZone(newTimeZone, true);
|
|
55
55
|
setEnd(newEnd);
|
|
@@ -58,13 +58,13 @@ function useRelativeRangeDatePickerDialogState(props) {
|
|
|
58
58
|
setValue(getRangeValue(newStart, newEnd, Object.assign(Object.assign({}, props), { timeZone: newTimeZone, allowNullableValues })), newTimeZone);
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
|
-
function setRange(newStart, newEnd) {
|
|
61
|
+
function setRange(newStart, newEnd, force) {
|
|
62
62
|
if (props.readOnly) {
|
|
63
63
|
return;
|
|
64
64
|
}
|
|
65
65
|
setStart(newStart);
|
|
66
66
|
setEnd(newEnd);
|
|
67
|
-
if (!withApplyButton) {
|
|
67
|
+
if (!withApplyButton || force) {
|
|
68
68
|
setValue(getRangeValue(newStart, newEnd, Object.assign(Object.assign({}, props), { timeZone, allowNullableValues })), timeZone);
|
|
69
69
|
}
|
|
70
70
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useRelativeRangeDatePickerDialogState.js","sourceRoot":"../../../../../../src","sources":["components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.tsx"],"names":[],"mappings":";;AAWA,sFAuIC;;AAlJD,0DAA0B;AAG1B,6CAAqD;AAIrD,oGAAqF;AAIrF,SAAgB,qCAAqC,CAAC,KAAsB;;IACxE,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,IAAA,0BAAkB,EACtD,KAAK,CAAC,QAAQ,EACd,MAAA,KAAK,CAAC,eAAe,mCAAI,SAAS,EAClC,KAAK,CAAC,gBAAgB,CACzB,CAAC;IAEF,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,0BAAkB,EACxC,KAAK,CAAC,KAAK,EACX,MAAA,KAAK,CAAC,YAAY,mCAAI,IAAI,EAC1B,CAAC,CAAC,EAAE,EAAU,EAAE,EAAE;;QACd,eAAe,CAAC,EAAE,CAAC,CAAC;QACpB,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,YAAY,KAAK,EAAE,CAAC,EAAE,CAAC;YAChD,MAAA,KAAK,CAAC,QAAQ,sDAAG,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5B,CAAC;IACL,CAAC,CACJ,CAAC;IAEF,MAAM,EAAC,eAAe,EAAC,GAAG,KAAK,CAAC;IAEhC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,eAAK,CAAC,QAAQ,CAAe,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,mCAAI,IAAI,CAAC,CAAC;IAC7E,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,eAAK,CAAC,QAAQ,CAAe,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,GAAG,mCAAI,IAAI,CAAC,CAAC;IACvE,MAAM,CAAC,aAAa,EAAE,WAAW,CAAC,GAAG,eAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IAElE,MAAM,QAAQ,GAAG,eAAe,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC;IAChE,MAAM,mBAAmB,GAAG,KAAK,CAAC,mBAAmB,CAAC;IAEtD,SAAS,aAAa,CAAC,QAAsB;QACzC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACjB,OAAO;QACX,CAAC;QACD,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACnB,IAAI,CAAC,eAAe,EAAE,CAAC;YACnB,QAAQ,CACJ,aAAa,CAAC,QAAQ,EAAE,GAAG,kCAAM,KAAK,KAAE,QAAQ,EAAE,mBAAmB,IAAE,EACvE,QAAQ,CACX,CAAC;QACN,CAAC;IACL,CAAC;IAED,SAAS,WAAW,CAAC,QAAsB;QACvC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACjB,OAAO;QACX,CAAC;QACD,MAAM,CAAC,QAAQ,CAAC,CAAC;QACjB,IAAI,CAAC,eAAe,EAAE,CAAC;YACnB,QAAQ,CACJ,aAAa,CAAC,KAAK,EAAE,QAAQ,kCAAM,KAAK,KAAE,QAAQ,EAAE,mBAAmB,IAAE,EACzE,QAAQ,CACX,CAAC;QACN,CAAC;IACL,CAAC;IAED,SAAS,gBAAgB,CAAC,WAAmB;QACzC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACjB,OAAO;QACX,CAAC;QACD,WAAW,CAAC,WAAW,CAAC,CAAC;QACzB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,mBAAK,KAAK,EAAE,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"useRelativeRangeDatePickerDialogState.js","sourceRoot":"../../../../../../src","sources":["components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport type {DateTime} from '@gravity-ui/date-utils';\nimport {useControlledState} from '@gravity-ui/uikit';\n\nimport type {Value} from '../../../RelativeDatePicker';\nimport type {RangeValue} from '../../../types';\nimport {getRangeValidationResult} from '../../hooks/useRelativeRangeDatePickerState';\n\nimport type {PickerFormProps} from './PickerForm';\n\nexport function useRelativeRangeDatePickerDialogState(props: PickerFormProps) {\n const [userTimeZone, setUserTimeZone] = useControlledState(\n props.timeZone,\n props.defaultTimeZone ?? 'default',\n props.onUpdateTimeZone,\n );\n\n const [value, setValue] = useControlledState(\n props.value,\n props.defaultValue ?? null,\n (v, tz: string) => {\n setUserTimeZone(tz);\n if (value !== v || (value && userTimeZone !== tz)) {\n props.onUpdate?.(v, tz);\n }\n },\n );\n\n const {withApplyButton} = props;\n\n const [start, setStart] = React.useState<Value | null>(value?.start ?? null);\n const [end, setEnd] = React.useState<Value | null>(value?.end ?? null);\n const [innerTimeZone, setTimeZone] = React.useState(userTimeZone);\n\n const timeZone = withApplyButton ? innerTimeZone : userTimeZone;\n const allowNullableValues = props.allowNullableValues;\n\n function setStartValue(newValue: Value | null) {\n if (props.readOnly) {\n return;\n }\n setStart(newValue);\n if (!withApplyButton) {\n setValue(\n getRangeValue(newValue, end, {...props, timeZone, allowNullableValues}),\n timeZone,\n );\n }\n }\n\n function setEndValue(newValue: Value | null) {\n if (props.readOnly) {\n return;\n }\n setEnd(newValue);\n if (!withApplyButton) {\n setValue(\n getRangeValue(start, newValue, {...props, timeZone, allowNullableValues}),\n timeZone,\n );\n }\n }\n\n function setTimeZoneValue(newTimeZone: string) {\n if (props.readOnly) {\n return;\n }\n setTimeZone(newTimeZone);\n const newStart = start ? {...start} : null;\n if (newStart?.type === 'absolute') {\n newStart.value = newStart.value.timeZone(newTimeZone, true);\n setStart(newStart);\n }\n const newEnd = end ? {...end} : null;\n if (newEnd?.type === 'absolute') {\n newEnd.value = newEnd.value.timeZone(newTimeZone, true);\n setEnd(newEnd);\n }\n if (!withApplyButton) {\n setValue(\n getRangeValue(newStart, newEnd, {\n ...props,\n timeZone: newTimeZone,\n allowNullableValues,\n }),\n newTimeZone,\n );\n }\n }\n\n function setRange(newStart: Value, newEnd: Value, force?: boolean) {\n if (props.readOnly) {\n return;\n }\n setStart(newStart);\n setEnd(newEnd);\n if (!withApplyButton || force) {\n setValue(\n getRangeValue(newStart, newEnd, {...props, timeZone, allowNullableValues}),\n timeZone,\n );\n }\n }\n\n function applyValue() {\n if (props.readOnly) {\n return;\n }\n setValue(getRangeValue(start, end, {...props, timeZone, allowNullableValues}), timeZone);\n }\n\n const validation = React.useMemo(\n () =>\n getRangeValidationResult(\n start || end ? {start, end} : null,\n allowNullableValues,\n props.minValue,\n props.maxValue,\n props.isDateUnavailable,\n timeZone,\n ),\n [\n allowNullableValues,\n end,\n props.isDateUnavailable,\n props.maxValue,\n props.minValue,\n start,\n timeZone,\n ],\n );\n\n return {\n start,\n end,\n timeZone,\n setStart: setStartValue,\n setEnd: setEndValue,\n setRange,\n setTimeZone: setTimeZoneValue,\n applyValue,\n isInvalid: validation.isInvalid,\n startValidation: validation.startValidationResult,\n endValidation: validation.endValidationResult,\n };\n}\n\ninterface GetRangeValueOptions {\n allowNullableValues?: boolean;\n minValue?: DateTime;\n maxValue?: DateTime;\n isDateUnavailable?: (v: DateTime, endPoint: 'start' | 'end') => boolean;\n timeZone?: string;\n}\nfunction getRangeValue(\n start: Value | null,\n end: Value | null,\n options: GetRangeValueOptions = {},\n): RangeValue<Value | null> | null {\n if (!start && !end) {\n return null;\n }\n\n const {isInvalid} = getRangeValidationResult(\n {start, end},\n options.allowNullableValues,\n options.minValue,\n options.maxValue,\n options.isDateUnavailable,\n options.timeZone ?? 'default',\n );\n\n if (isInvalid) {\n return null;\n }\n\n return {start, end};\n}\n"]}
|