@gravity-ui/date-components 3.2.4 → 3.3.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/README.md +89 -1
- package/dist/cjs/components/CalendarView/Calendar.css.map +1 -1
- package/dist/cjs/components/CalendarView/CalendarView.js +4 -2
- package/dist/cjs/components/CalendarView/CalendarView.js.map +1 -1
- package/dist/cjs/components/CalendarView/hooks/useCalendarCellProps.js +12 -10
- package/dist/cjs/components/CalendarView/hooks/useCalendarCellProps.js.map +1 -1
- package/dist/cjs/components/CalendarView/hooks/useCalendarGridProps.js +2 -1
- package/dist/cjs/components/CalendarView/hooks/useCalendarGridProps.js.map +1 -1
- package/dist/cjs/components/CalendarView/hooks/useCalendarProps.js +19 -9
- package/dist/cjs/components/CalendarView/hooks/useCalendarProps.js.map +1 -1
- package/dist/cjs/components/CalendarView/i18n/index.d.ts +8 -0
- package/dist/cjs/components/DateField/DateField.js +4 -1
- package/dist/cjs/components/DateField/DateField.js.map +1 -1
- package/dist/cjs/components/DateField/i18n/index.d.ts +8 -0
- package/dist/cjs/components/DateField/utils.d.ts +5 -1
- package/dist/cjs/components/DateField/utils.js +26 -22
- package/dist/cjs/components/DateField/utils.js.map +1 -1
- package/dist/cjs/components/DatePicker/hooks/useDatePickerProps.js +6 -2
- package/dist/cjs/components/DatePicker/hooks/useDatePickerProps.js.map +1 -1
- package/dist/cjs/components/DatePicker/i18n/index.d.ts +8 -0
- package/dist/cjs/components/RangeDateField/RangeDateField.d.ts +1 -1
- package/dist/cjs/components/RangeDateField/RangeDateField.js +4 -1
- package/dist/cjs/components/RangeDateField/RangeDateField.js.map +1 -1
- package/dist/cjs/components/RangeDateSelection/RangeDateSelection.js +3 -2
- package/dist/cjs/components/RangeDateSelection/RangeDateSelection.js.map +1 -1
- package/dist/cjs/components/RangeDateSelection/components/SelectionControl/SelectionControl.js +4 -3
- package/dist/cjs/components/RangeDateSelection/components/SelectionControl/SelectionControl.js.map +1 -1
- package/dist/cjs/components/RangeDateSelection/i18n/index.d.ts +8 -0
- package/dist/cjs/components/RelativeDateField/RelativeDateField.js +4 -1
- package/dist/cjs/components/RelativeDateField/RelativeDateField.js.map +1 -1
- package/dist/cjs/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.js +7 -3
- package/dist/cjs/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.js.map +1 -1
- package/dist/cjs/components/RelativeDatePicker/i18n/index.d.ts +8 -0
- package/dist/cjs/components/RelativeRangeDatePicker/RelativeRangeDatePicker.js +4 -1
- package/dist/cjs/components/RelativeRangeDatePicker/RelativeRangeDatePicker.js.map +1 -1
- package/dist/cjs/components/RelativeRangeDatePicker/components/Control/Control.js +18 -3
- package/dist/cjs/components/RelativeRangeDatePicker/components/Control/Control.js.map +1 -1
- package/dist/cjs/components/RelativeRangeDatePicker/components/Control/i18n/index.d.ts +8 -0
- package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.css.map +1 -1
- package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.js +11 -19
- package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.js.map +1 -1
- package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.js +4 -3
- package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.js.map +1 -1
- package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/i18n/index.d.ts +10 -2
- package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.js +6 -3
- package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.js.map +1 -1
- package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/Presets.css.map +1 -1
- package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/Presets.js +4 -2
- package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/Presets.js.map +1 -1
- package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/defaultPresets.d.ts +5 -1
- package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/defaultPresets.js +31 -75
- package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/defaultPresets.js.map +1 -1
- package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/i18n/index.d.ts +8 -0
- package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/utils.d.ts +5 -2
- package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/utils.js +5 -5
- package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/utils.js.map +1 -1
- package/dist/cjs/components/RelativeRangeDatePicker/components/Zones/Zones.js +3 -8
- package/dist/cjs/components/RelativeRangeDatePicker/components/Zones/Zones.js.map +1 -1
- package/dist/cjs/components/RelativeRangeDatePicker/components/Zones/i18n/index.d.ts +8 -0
- package/dist/cjs/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.d.ts +0 -11
- package/dist/cjs/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.js +5 -32
- package/dist/cjs/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.js.map +1 -1
- package/dist/cjs/components/RelativeRangeDatePicker/i18n/en.json +0 -3
- package/dist/cjs/components/RelativeRangeDatePicker/i18n/index.d.ts +10 -2
- package/dist/cjs/components/RelativeRangeDatePicker/i18n/ru.json +0 -3
- package/dist/cjs/components/RelativeRangeDatePicker/utils.d.ts +5 -2
- package/dist/cjs/components/RelativeRangeDatePicker/utils.js +5 -4
- package/dist/cjs/components/RelativeRangeDatePicker/utils.js.map +1 -1
- package/dist/cjs/components/types/helpers.d.ts +1 -0
- package/dist/cjs/components/types/helpers.js +3 -0
- package/dist/cjs/components/types/helpers.js.map +1 -0
- package/dist/cjs/components/types/index.d.ts +1 -0
- package/dist/cjs/components/types/index.js.map +1 -1
- package/dist/cjs/components/utils/dates.d.ts +1 -1
- package/dist/cjs/components/utils/dates.js +2 -2
- package/dist/cjs/components/utils/dates.js.map +1 -1
- package/dist/cjs/components/utils/validation/datePicker.d.ts +3 -1
- package/dist/cjs/components/utils/validation/datePicker.js +4 -4
- package/dist/cjs/components/utils/validation/datePicker.js.map +1 -1
- package/dist/cjs/components/utils/validation/i18n/en.json +6 -1
- package/dist/cjs/components/utils/validation/i18n/index.d.ts +10 -2
- package/dist/cjs/components/utils/validation/i18n/ru.json +7 -1
- package/dist/cjs/components/utils/validation/relativeRangeDatePicker.d.ts +15 -0
- package/dist/cjs/components/utils/validation/relativeRangeDatePicker.js +34 -0
- package/dist/cjs/components/utils/validation/relativeRangeDatePicker.js.map +1 -0
- package/dist/cjs/package.json +1 -1
- package/dist/esm/components/CalendarView/Calendar.css.map +1 -1
- package/dist/esm/components/CalendarView/CalendarView.js +5 -3
- package/dist/esm/components/CalendarView/CalendarView.js.map +1 -1
- package/dist/esm/components/CalendarView/hooks/useCalendarCellProps.js +12 -10
- package/dist/esm/components/CalendarView/hooks/useCalendarCellProps.js.map +1 -1
- package/dist/esm/components/CalendarView/hooks/useCalendarGridProps.js +3 -2
- package/dist/esm/components/CalendarView/hooks/useCalendarGridProps.js.map +1 -1
- package/dist/esm/components/CalendarView/hooks/useCalendarProps.js +20 -10
- package/dist/esm/components/CalendarView/hooks/useCalendarProps.js.map +1 -1
- package/dist/esm/components/CalendarView/i18n/index.d.ts +8 -0
- package/dist/esm/components/DateField/DateField.js +4 -1
- package/dist/esm/components/DateField/DateField.js.map +1 -1
- package/dist/esm/components/DateField/i18n/index.d.ts +8 -0
- package/dist/esm/components/DateField/utils.d.ts +5 -1
- package/dist/esm/components/DateField/utils.js +26 -22
- package/dist/esm/components/DateField/utils.js.map +1 -1
- package/dist/esm/components/DatePicker/hooks/useDatePickerProps.js +6 -2
- package/dist/esm/components/DatePicker/hooks/useDatePickerProps.js.map +1 -1
- package/dist/esm/components/DatePicker/i18n/index.d.ts +8 -0
- package/dist/esm/components/RangeDateField/RangeDateField.d.ts +1 -1
- package/dist/esm/components/RangeDateField/RangeDateField.js +4 -1
- package/dist/esm/components/RangeDateField/RangeDateField.js.map +1 -1
- package/dist/esm/components/RangeDateSelection/RangeDateSelection.js +3 -2
- package/dist/esm/components/RangeDateSelection/RangeDateSelection.js.map +1 -1
- package/dist/esm/components/RangeDateSelection/components/SelectionControl/SelectionControl.js +4 -3
- package/dist/esm/components/RangeDateSelection/components/SelectionControl/SelectionControl.js.map +1 -1
- package/dist/esm/components/RangeDateSelection/i18n/index.d.ts +8 -0
- package/dist/esm/components/RelativeDateField/RelativeDateField.js +4 -1
- package/dist/esm/components/RelativeDateField/RelativeDateField.js.map +1 -1
- package/dist/esm/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.js +7 -3
- package/dist/esm/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.js.map +1 -1
- package/dist/esm/components/RelativeDatePicker/i18n/index.d.ts +8 -0
- package/dist/esm/components/RelativeRangeDatePicker/RelativeRangeDatePicker.js +4 -1
- package/dist/esm/components/RelativeRangeDatePicker/RelativeRangeDatePicker.js.map +1 -1
- package/dist/esm/components/RelativeRangeDatePicker/components/Control/Control.js +18 -3
- package/dist/esm/components/RelativeRangeDatePicker/components/Control/Control.js.map +1 -1
- package/dist/esm/components/RelativeRangeDatePicker/components/Control/i18n/index.d.ts +8 -0
- package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.css.map +1 -1
- package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.js +11 -19
- package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.js.map +1 -1
- package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.js +4 -3
- package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.js.map +1 -1
- package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/i18n/index.d.ts +10 -2
- package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.js +5 -2
- package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.js.map +1 -1
- package/dist/esm/components/RelativeRangeDatePicker/components/Presets/Presets.css.map +1 -1
- package/dist/esm/components/RelativeRangeDatePicker/components/Presets/Presets.js +4 -2
- package/dist/esm/components/RelativeRangeDatePicker/components/Presets/Presets.js.map +1 -1
- package/dist/esm/components/RelativeRangeDatePicker/components/Presets/defaultPresets.d.ts +5 -1
- package/dist/esm/components/RelativeRangeDatePicker/components/Presets/defaultPresets.js +30 -75
- package/dist/esm/components/RelativeRangeDatePicker/components/Presets/defaultPresets.js.map +1 -1
- package/dist/esm/components/RelativeRangeDatePicker/components/Presets/i18n/index.d.ts +8 -0
- package/dist/esm/components/RelativeRangeDatePicker/components/Presets/utils.d.ts +5 -2
- package/dist/esm/components/RelativeRangeDatePicker/components/Presets/utils.js +5 -5
- package/dist/esm/components/RelativeRangeDatePicker/components/Presets/utils.js.map +1 -1
- package/dist/esm/components/RelativeRangeDatePicker/components/Zones/Zones.js +3 -8
- package/dist/esm/components/RelativeRangeDatePicker/components/Zones/Zones.js.map +1 -1
- package/dist/esm/components/RelativeRangeDatePicker/components/Zones/i18n/index.d.ts +8 -0
- package/dist/esm/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.d.ts +0 -11
- package/dist/esm/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.js +5 -31
- package/dist/esm/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.js.map +1 -1
- package/dist/esm/components/RelativeRangeDatePicker/i18n/en.json +0 -3
- package/dist/esm/components/RelativeRangeDatePicker/i18n/index.d.ts +10 -2
- package/dist/esm/components/RelativeRangeDatePicker/i18n/ru.json +0 -3
- package/dist/esm/components/RelativeRangeDatePicker/utils.d.ts +5 -2
- package/dist/esm/components/RelativeRangeDatePicker/utils.js +5 -4
- package/dist/esm/components/RelativeRangeDatePicker/utils.js.map +1 -1
- package/dist/esm/components/types/helpers.d.ts +1 -0
- package/dist/esm/components/types/helpers.js +2 -0
- package/dist/esm/components/types/helpers.js.map +1 -0
- package/dist/esm/components/types/index.d.ts +1 -0
- package/dist/esm/components/types/index.js.map +1 -1
- package/dist/esm/components/utils/dates.d.ts +1 -1
- package/dist/esm/components/utils/dates.js +2 -2
- package/dist/esm/components/utils/dates.js.map +1 -1
- package/dist/esm/components/utils/validation/datePicker.d.ts +3 -1
- package/dist/esm/components/utils/validation/datePicker.js +4 -4
- package/dist/esm/components/utils/validation/datePicker.js.map +1 -1
- package/dist/esm/components/utils/validation/i18n/en.json +6 -1
- package/dist/esm/components/utils/validation/i18n/index.d.ts +10 -2
- package/dist/esm/components/utils/validation/i18n/ru.json +7 -1
- package/dist/esm/components/utils/validation/relativeRangeDatePicker.d.ts +15 -0
- package/dist/esm/components/utils/validation/relativeRangeDatePicker.js +31 -0
- package/dist/esm/components/utils/validation/relativeRangeDatePicker.js.map +1 -0
- package/dist/esm/package.json +1 -1
- package/package.json +27 -24
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
import type { DateTime } from '@gravity-ui/date-utils';
|
|
2
|
+
import type { ExtractFunctionType } from "../../../types/index.js";
|
|
2
3
|
import type { Preset } from "./defaultPresets.js";
|
|
3
|
-
|
|
4
|
+
import { i18n } from "./i18n/index.js";
|
|
5
|
+
export declare function getPresetTitle(start: string, end: string, presets?: Preset[], t?: ExtractFunctionType<typeof i18n>): import("react").ReactNode;
|
|
4
6
|
export declare function filterPresets(presets: Preset[], minValue?: DateTime): Preset[];
|
|
5
7
|
export interface PresetTab {
|
|
6
8
|
id: string;
|
|
7
9
|
title: string;
|
|
8
10
|
presets: Preset[];
|
|
9
11
|
}
|
|
10
|
-
export declare function getDefaultPresetTabs({ withTime, minValue, }: {
|
|
12
|
+
export declare function getDefaultPresetTabs({ withTime, minValue, t, }: {
|
|
11
13
|
minValue?: DateTime;
|
|
12
14
|
withTime?: boolean;
|
|
15
|
+
t?: (key: 'Main' | 'Other') => string;
|
|
13
16
|
}): PresetTab[];
|
|
14
17
|
export declare function filterPresetTabs(tabs: PresetTab[], { minValue }?: {
|
|
15
18
|
minValue?: DateTime;
|
|
@@ -20,7 +20,7 @@ const countUnit = {
|
|
|
20
20
|
M: 'Last {count} month',
|
|
21
21
|
y: 'Last {count} year',
|
|
22
22
|
};
|
|
23
|
-
export function getPresetTitle(start, end, presets = allPresets) {
|
|
23
|
+
export function getPresetTitle(start, end, presets = allPresets, t = i18n) {
|
|
24
24
|
const startText = start.replace(/\s+/g, '');
|
|
25
25
|
const endText = end.replace(/\s+/g, '');
|
|
26
26
|
for (const preset of presets) {
|
|
@@ -34,7 +34,7 @@ export function getPresetTitle(start, end, presets = allPresets) {
|
|
|
34
34
|
const [, count, unit] = match;
|
|
35
35
|
if (isDateUnit(unit)) {
|
|
36
36
|
const template = Number(count) === 1 ? oneUnit[unit] : countUnit[unit];
|
|
37
|
-
return
|
|
37
|
+
return t(template, { count });
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
40
|
}
|
|
@@ -59,11 +59,11 @@ export function filterPresets(presets, minValue) {
|
|
|
59
59
|
return true;
|
|
60
60
|
});
|
|
61
61
|
}
|
|
62
|
-
export function getDefaultPresetTabs({ withTime, minValue, }) {
|
|
62
|
+
export function getDefaultPresetTabs({ withTime, minValue, t = i18n, }) {
|
|
63
63
|
const tabs = [];
|
|
64
64
|
const mainTab = {
|
|
65
65
|
id: 'main',
|
|
66
|
-
title:
|
|
66
|
+
title: t('Main'),
|
|
67
67
|
presets: [],
|
|
68
68
|
};
|
|
69
69
|
const mainPresets = DEFAULT_DATE_PRESETS;
|
|
@@ -76,7 +76,7 @@ export function getDefaultPresetTabs({ withTime, minValue, }) {
|
|
|
76
76
|
}
|
|
77
77
|
const otherTab = {
|
|
78
78
|
id: 'other',
|
|
79
|
-
title:
|
|
79
|
+
title: t('Other'),
|
|
80
80
|
presets: filterPresets(DEFAULT_OTHERS_PRESETS, minValue),
|
|
81
81
|
};
|
|
82
82
|
if (otherTab.presets.length > 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"../../../../../../src","sources":["components/RelativeRangeDatePicker/components/Presets/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"../../../../../../src","sources":["components/RelativeRangeDatePicker/components/Presets/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import {dateTimeParse} from '@gravity-ui/date-utils';\nimport type {DateTime} from '@gravity-ui/date-utils';\n\nimport type {ExtractFunctionType} from '../../../types';\n\nimport {\n DEFAULT_DATE_PRESETS,\n DEFAULT_OTHERS_PRESETS,\n DEFAULT_TIME_PRESETS,\n allPresets,\n} from './defaultPresets';\nimport type {Preset} from './defaultPresets';\nimport {i18n} from './i18n';\n\nconst lastRe = /^now-(\\d+)([smhdwMy])$/;\n\nconst oneUnit = {\n s: 'Last second',\n m: 'Last minute',\n h: 'Last hour',\n d: 'Last day',\n w: 'Last week',\n M: 'Last month',\n y: 'Last year',\n} as const;\n\nconst countUnit = {\n s: 'Last {count} second',\n m: 'Last {count} minute',\n h: 'Last {count} hour',\n d: 'Last {count} day',\n w: 'Last {count} week',\n M: 'Last {count} month',\n y: 'Last {count} year',\n} as const;\n\nexport function getPresetTitle(\n start: string,\n end: string,\n presets: Preset[] = allPresets,\n t: ExtractFunctionType<typeof i18n> = i18n,\n) {\n const startText = start.replace(/\\s+/g, '');\n const endText = end.replace(/\\s+/g, '');\n\n for (const preset of presets) {\n if (preset.from === startText && preset.to === endText) {\n return preset.title;\n }\n }\n\n if (end === 'now') {\n const match = lastRe.exec(startText);\n if (match) {\n const [, count, unit] = match;\n if (isDateUnit(unit)) {\n const template = Number(count) === 1 ? oneUnit[unit] : countUnit[unit];\n return t(template, {count});\n }\n }\n }\n\n return startText + ' — ' + endText;\n}\n\nfunction isDateUnit(value: string): value is 's' | 'm' | 'h' | 'd' | 'w' | 'M' | 'y' {\n return ['s', 'm', 'h', 'd', 'w', 'M', 'y'].includes(value);\n}\n\nexport function filterPresets(presets: Preset[], minValue?: DateTime) {\n return presets.filter((preset) => {\n const from = dateTimeParse(preset.from);\n const to = dateTimeParse(preset.to, {roundUp: true});\n\n if (!from || !to) {\n return false;\n }\n\n if (to.isBefore(from)) {\n return false;\n }\n\n if (minValue && from.isBefore(minValue)) {\n return false;\n }\n\n return true;\n });\n}\n\nexport interface PresetTab {\n id: string;\n title: string;\n presets: Preset[];\n}\n\nexport function getDefaultPresetTabs({\n withTime,\n minValue,\n t = i18n,\n}: {\n minValue?: DateTime;\n withTime?: boolean;\n t?: (key: 'Main' | 'Other') => string;\n}) {\n const tabs: PresetTab[] = [];\n\n const mainTab: PresetTab = {\n id: 'main',\n title: t('Main'),\n presets: [],\n };\n const mainPresets = DEFAULT_DATE_PRESETS;\n if (withTime) {\n mainPresets.unshift(...DEFAULT_TIME_PRESETS);\n }\n mainTab.presets = filterPresets(mainPresets, minValue);\n\n if (mainTab.presets.length > 0) {\n tabs.push(mainTab);\n }\n\n const otherTab: PresetTab = {\n id: 'other',\n title: t('Other'),\n presets: filterPresets(DEFAULT_OTHERS_PRESETS, minValue),\n };\n\n if (otherTab.presets.length > 0) {\n tabs.push(otherTab);\n }\n\n return tabs;\n}\n\nexport function filterPresetTabs(tabs: PresetTab[], {minValue}: {minValue?: DateTime} = {}) {\n return tabs.reduce<PresetTab[]>((acc, tab) => {\n const presets = filterPresets(tab.presets, minValue);\n if (presets.length) {\n acc.push({\n ...tab,\n presets,\n });\n }\n return acc;\n }, []);\n}\n"]}
|
|
@@ -26,31 +26,26 @@ zones.unshift({
|
|
|
26
26
|
});
|
|
27
27
|
zones.unshift({
|
|
28
28
|
value: 'system',
|
|
29
|
-
get content() {
|
|
30
|
-
return i18n('system');
|
|
31
|
-
},
|
|
32
29
|
});
|
|
33
30
|
zones.unshift({
|
|
34
31
|
value: 'default',
|
|
35
|
-
get content() {
|
|
36
|
-
return i18n('default');
|
|
37
|
-
},
|
|
38
32
|
});
|
|
39
33
|
const b = block('relative-range-date-picker-zones');
|
|
40
34
|
export function Zones(props) {
|
|
41
35
|
const timeZone = normalizeTimeZone(props.value);
|
|
42
36
|
const size = props.isMobile ? 'xl' : props.size;
|
|
37
|
+
const { t } = i18n.useTranslation();
|
|
43
38
|
return (_jsx(Select, { disabled: props.disabled, value: [timeZone], options: zones, size: size, onUpdate: (v) => {
|
|
44
39
|
const tz = v[0];
|
|
45
40
|
if (tz) {
|
|
46
41
|
props.onUpdate(tz);
|
|
47
42
|
}
|
|
48
43
|
}, width: "max", renderControl: (controlProps) => {
|
|
49
|
-
const value = timeZone === 'system' || timeZone === 'default' ?
|
|
44
|
+
const value = timeZone === 'system' || timeZone === 'default' ? t(timeZone) : timeZone;
|
|
50
45
|
return (_jsxs(Button, { ref: controlProps.ref, onClick: controlProps.triggerProps.onClick, view: "flat-secondary", width: "max", pin: "clear-clear", size: size, disabled: props.disabled, "aria-haspopup": "listbox", "aria-expanded": controlProps.open, onKeyDown: controlProps.triggerProps.onKeyDown, className: b('control'), children: [`${value} (${getTimeZoneOffset(timeZone)})`, _jsx(Icon, { className: b('control-icon'), data: ChevronRight, size: props.isMobile ? 20 : 16 })] }));
|
|
51
46
|
}, renderOption: ({ value, content }) => {
|
|
52
47
|
const v = content !== null && content !== void 0 ? content : value;
|
|
53
|
-
return (_jsxs("span", { className: b('item'), children: [_jsxs("span", { className: b('item-title'), title: value, children: [v, "\u00A0"] }), _jsx(Text, { color: "secondary", children: getTimeZoneOffset(value) })] }));
|
|
48
|
+
return (_jsxs("span", { className: b('item'), children: [_jsxs("span", { className: b('item-title'), title: value, children: [value === 'system' || value === 'default' ? t(value) : v, "\u00A0"] }), _jsx(Text, { color: "secondary", children: getTimeZoneOffset(value) })] }));
|
|
54
49
|
}, filterable: true }));
|
|
55
50
|
}
|
|
56
51
|
//# sourceMappingURL=Zones.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Zones.js","sourceRoot":"../../../../../../src","sources":["components/RelativeRangeDatePicker/components/Zones/Zones.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAC,gBAAgB,EAAC,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAC,YAAY,EAAC,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAC,MAAM,mBAAmB,CAAC;AAG7D,OAAO,EAAC,KAAK,EAAC,gCAA6B;AAC3C,OAAO,EAAC,iBAAiB,EAAE,iBAAiB,EAAC,uBAAoB;AAEjE,OAAO,EAAC,IAAI,EAAC,wBAAe;AAE5B,qBAAsB;AAEtB,MAAM,MAAM,GAA6D,EAAE,CAAC;AAE5E,MAAM,KAAK,GAAG,gBAAgB,EAAE,CAAC,MAAM,CAAuC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;IAC1F,MAAM,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,SAAS,EAAE,CAAC;QACZ,IAAI,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;QAC9B,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,KAAK,GAAG,EAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAC,CAAC;YACxC,MAAM,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;QACD,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC,EAAE,EAAE,CAAC,CAAC;AAEP,KAAK,CAAC,OAAO,CAAC;IACV,KAAK,EAAE,KAAK;CACf,CAAC,CAAC;AAEH,KAAK,CAAC,OAAO,CAAC;IACV,KAAK,EAAE,QAAQ;
|
|
1
|
+
{"version":3,"file":"Zones.js","sourceRoot":"../../../../../../src","sources":["components/RelativeRangeDatePicker/components/Zones/Zones.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport {getTimeZonesList} from '@gravity-ui/date-utils';\nimport {ChevronRight} from '@gravity-ui/icons';\nimport {Button, Icon, Select, Text} from '@gravity-ui/uikit';\nimport type {SelectOption, SelectOptionGroup} from '@gravity-ui/uikit';\n\nimport {block} from '../../../../utils/cn';\nimport {getTimeZoneOffset, normalizeTimeZone} from '../../utils';\n\nimport {i18n} from './i18n';\n\nimport './Zones.scss';\n\nconst groups: Record<string, {label: string; options: SelectOption[]}> = {};\n\nconst zones = getTimeZonesList().reduce<(SelectOption | SelectOptionGroup)[]>((opts, value) => {\n const [groupName] = value.split('/');\n if (groupName) {\n let group = groups[groupName];\n if (!group) {\n group = {label: groupName, options: []};\n groups[groupName] = group;\n opts.push(group);\n }\n group.options.push({value});\n }\n return opts;\n}, []);\n\nzones.unshift({\n value: 'UTC',\n});\n\nzones.unshift({\n value: 'system',\n});\n\nzones.unshift({\n value: 'default',\n});\n\nconst b = block('relative-range-date-picker-zones');\n\nexport interface ZonesProps {\n value: string;\n onUpdate: (timeZone: string) => void;\n size?: 's' | 'm' | 'l' | 'xl';\n isMobile?: boolean;\n disabled?: boolean;\n}\n\nexport function Zones(props: ZonesProps) {\n const timeZone = normalizeTimeZone(props.value);\n const size = props.isMobile ? 'xl' : props.size;\n const {t} = i18n.useTranslation();\n return (\n <Select\n disabled={props.disabled}\n value={[timeZone]}\n options={zones}\n size={size}\n onUpdate={(v) => {\n const tz = v[0];\n if (tz) {\n props.onUpdate(tz);\n }\n }}\n width=\"max\"\n renderControl={(controlProps) => {\n const value =\n timeZone === 'system' || timeZone === 'default' ? t(timeZone) : timeZone;\n return (\n <Button\n ref={controlProps.ref as React.Ref<HTMLButtonElement>}\n onClick={controlProps.triggerProps.onClick}\n view=\"flat-secondary\"\n width=\"max\"\n pin=\"clear-clear\"\n size={size}\n disabled={props.disabled}\n aria-haspopup=\"listbox\"\n aria-expanded={controlProps.open}\n onKeyDown={controlProps.triggerProps.onKeyDown}\n className={b('control')}\n >\n {`${value} (${getTimeZoneOffset(timeZone)})`}\n <Icon\n className={b('control-icon')}\n data={ChevronRight}\n size={props.isMobile ? 20 : 16}\n />\n </Button>\n );\n }}\n renderOption={({value, content}) => {\n const v = content ?? value;\n return (\n <span className={b('item')}>\n <span className={b('item-title')} title={value}>\n {value === 'system' || value === 'default' ? t(value) : v} \n </span>\n <Text color=\"secondary\">{getTimeZoneOffset(value)}</Text>\n </span>\n );\n }}\n filterable\n />\n );\n}\n"]}
|
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
export declare const i18n: ((key: "default" | "system", params?: import("@gravity-ui/i18n").Params) => string) & {
|
|
2
|
+
Translation: import("react").ComponentType<{
|
|
3
|
+
children: (props: {
|
|
4
|
+
t: (key: "default" | "system", params?: import("@gravity-ui/i18n").Params) => string;
|
|
5
|
+
}) => React.ReactNode;
|
|
6
|
+
}>;
|
|
7
|
+
useTranslation: () => {
|
|
8
|
+
t: (key: "default" | "system", params?: import("@gravity-ui/i18n").Params) => string;
|
|
9
|
+
};
|
|
2
10
|
keysetData: {
|
|
3
11
|
"g-date-relative-range-date-picker-zones": Record<"default" | "system", import("@gravity-ui/i18n").KeyData>;
|
|
4
12
|
};
|
package/dist/esm/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.d.ts
CHANGED
|
@@ -25,14 +25,3 @@ export interface RelativeRangeDatePickerStateOptions {
|
|
|
25
25
|
allowNullableValues?: boolean;
|
|
26
26
|
}
|
|
27
27
|
export declare function useRelativeRangeDatePickerState(props: RelativeRangeDatePickerStateOptions): RelativeRangeDatePickerState;
|
|
28
|
-
export declare function getRangeValidationResult(value: RelativeRangeDatePickerValue | null, allowNullableValues: boolean | undefined, minValue: DateTime | undefined, maxValue: DateTime | undefined, isDateUnavailable: ((v: DateTime, endpoint: 'start' | 'end') => boolean) | undefined, timeZone: string): {
|
|
29
|
-
isInvalid: boolean;
|
|
30
|
-
errors: never[];
|
|
31
|
-
startValidationResult?: undefined;
|
|
32
|
-
endValidationResult?: undefined;
|
|
33
|
-
} | {
|
|
34
|
-
isInvalid: boolean;
|
|
35
|
-
startValidationResult: import("../../utils/validation/datePicker.js").ValidationResult;
|
|
36
|
-
endValidationResult: import("../../utils/validation/datePicker.js").ValidationResult;
|
|
37
|
-
errors: string[];
|
|
38
|
-
};
|
package/dist/esm/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.js
CHANGED
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { dateTimeParse } from '@gravity-ui/date-utils';
|
|
3
2
|
import { useControlledState } from '@gravity-ui/uikit';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
3
|
+
import { i18n } from "../../utils/validation/i18n/index.js";
|
|
4
|
+
import { getRangeValidationResult } from "../../utils/validation/relativeRangeDatePicker.js";
|
|
6
5
|
export function useRelativeRangeDatePickerState(props) {
|
|
7
6
|
var _a, _b;
|
|
8
7
|
const [value, setValue] = useControlledState(props.value, (_a = props.defaultValue) !== null && _a !== void 0 ? _a : null);
|
|
9
8
|
const [timeZone, setTimeZone] = useControlledState(props.timeZone, (_b = props.defaultTimeZone) !== null && _b !== void 0 ? _b : 'default', props.onUpdateTimeZone);
|
|
10
|
-
const
|
|
9
|
+
const { t } = i18n.useTranslation();
|
|
10
|
+
const validation = React.useMemo(() => getRangeValidationResult(value, props.allowNullableValues, props.minValue, props.maxValue, props.isDateUnavailable, timeZone, t), [
|
|
11
11
|
value,
|
|
12
12
|
props.allowNullableValues,
|
|
13
13
|
props.isDateUnavailable,
|
|
14
14
|
props.maxValue,
|
|
15
15
|
props.minValue,
|
|
16
16
|
timeZone,
|
|
17
|
+
t,
|
|
17
18
|
]);
|
|
18
19
|
return Object.assign({ value,
|
|
19
20
|
timeZone,
|
|
@@ -26,31 +27,4 @@ export function useRelativeRangeDatePickerState(props) {
|
|
|
26
27
|
}
|
|
27
28
|
} }, validation);
|
|
28
29
|
}
|
|
29
|
-
export function getRangeValidationResult(value, allowNullableValues, minValue, maxValue, isDateUnavailable, timeZone) {
|
|
30
|
-
if (!value) {
|
|
31
|
-
return { isInvalid: false, errors: [] };
|
|
32
|
-
}
|
|
33
|
-
const startDate = value.start ? dateTimeParse(value.start.value, { timeZone }) : null;
|
|
34
|
-
const endDate = value.end ? dateTimeParse(value.end.value, { timeZone, roundUp: true }) : null;
|
|
35
|
-
const startValidationResult = getValidationResult(startDate, minValue, maxValue, isDateUnavailable ? (date) => isDateUnavailable(date, 'start') : undefined, timeZone, i18n('"From"'));
|
|
36
|
-
if (!startDate && !allowNullableValues) {
|
|
37
|
-
startValidationResult.isInvalid = true;
|
|
38
|
-
startValidationResult.errors.push(i18n('"From" is required.'));
|
|
39
|
-
}
|
|
40
|
-
const endValidationResult = getValidationResult(endDate, minValue, maxValue, isDateUnavailable ? (date) => isDateUnavailable(date, 'end') : undefined, timeZone, i18n('"To"'));
|
|
41
|
-
if (!endDate && !allowNullableValues) {
|
|
42
|
-
endValidationResult.isInvalid = true;
|
|
43
|
-
endValidationResult.errors.push(i18n('"To" is required.'));
|
|
44
|
-
}
|
|
45
|
-
if (startDate && endDate && endDate.isBefore(startDate)) {
|
|
46
|
-
startValidationResult.isInvalid = true;
|
|
47
|
-
startValidationResult.errors.push(i18n(`"From" can't be after "To".`));
|
|
48
|
-
}
|
|
49
|
-
return {
|
|
50
|
-
isInvalid: startValidationResult.isInvalid || endValidationResult.isInvalid,
|
|
51
|
-
startValidationResult,
|
|
52
|
-
endValidationResult,
|
|
53
|
-
errors: startValidationResult.errors.concat(endValidationResult.errors),
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
30
|
//# sourceMappingURL=useRelativeRangeDatePickerState.js.map
|
package/dist/esm/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useRelativeRangeDatePickerState.js","sourceRoot":"../../../../../src","sources":["components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"useRelativeRangeDatePickerState.js","sourceRoot":"../../../../../src","sources":["components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAC,kBAAkB,EAAC,MAAM,mBAAmB,CAAC;AAIrD,OAAO,EAAC,IAAI,EAAC,6CAAoC;AACjD,OAAO,EAAC,wBAAwB,EAAC,0DAAuD;AA4BxF,MAAM,UAAU,+BAA+B,CAC3C,KAA0C;;IAE1C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,kBAAkB,CAAC,KAAK,CAAC,KAAK,EAAE,MAAA,KAAK,CAAC,YAAY,mCAAI,IAAI,CAAC,CAAC;IAEtF,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,kBAAkB,CAC9C,KAAK,CAAC,QAAQ,EACd,MAAA,KAAK,CAAC,eAAe,mCAAI,SAAS,EAClC,KAAK,CAAC,gBAAgB,CACzB,CAAC;IAEF,MAAM,EAAC,CAAC,EAAC,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;IAClC,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAC5B,GAAG,EAAE,CACD,wBAAwB,CACpB,KAAK,EACL,KAAK,CAAC,mBAAmB,EACzB,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,iBAAiB,EACvB,QAAQ,EACR,CAAC,CACJ,EACL;QACI,KAAK;QACL,KAAK,CAAC,mBAAmB;QACzB,KAAK,CAAC,iBAAiB;QACvB,KAAK,CAAC,QAAQ;QACd,KAAK,CAAC,QAAQ;QACd,QAAQ;QACR,CAAC;KACJ,CACJ,CAAC;IAEF,uBACI,KAAK;QACL,QAAQ;QACR,QAAQ,CAAC,CAAC,EAAE,EAAE;;YACV,QAAQ,CAAC,CAAC,CAAC,CAAC;YACZ,WAAW,CAAC,EAAE,CAAC,CAAC;YAChB,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,QAAQ,KAAK,EAAE,CAAC,EAAE,CAAC;gBAC5C,MAAA,KAAK,CAAC,QAAQ,sDAAG,CAAC,EAAE,EAAE,CAAC,CAAC;YAC5B,CAAC;QACL,CAAC,IACE,UAAU,EACf;AACN,CAAC","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 {i18n} from '../../utils/validation/i18n';\nimport {getRangeValidationResult} from '../../utils/validation/relativeRangeDatePicker';\n\nexport type RelativeRangeDatePickerValue = RangeValue<Value | null>;\n\nexport interface RelativeRangeDatePickerState {\n value: RelativeRangeDatePickerValue | null;\n timeZone: string;\n setValue: (value: RelativeRangeDatePickerValue | null, timeZone: string) => void;\n isInvalid: boolean;\n errors: string[];\n}\n\nexport interface RelativeRangeDatePickerStateOptions {\n value?: RelativeRangeDatePickerValue | null;\n defaultValue?: RelativeRangeDatePickerValue;\n onUpdate?: (value: RelativeRangeDatePickerValue | null, timeZone: string) => void;\n timeZone?: string;\n defaultTimeZone?: string;\n onUpdateTimeZone?: (timeZone: string) => void;\n /** The minimum allowed date that a user may select. */\n minValue?: DateTime;\n /** The maximum allowed date that a user may select. */\n maxValue?: DateTime;\n /** Callback that is called for each date of the calendar. If it returns true, then the date is unavailable. */\n isDateUnavailable?: (date: DateTime, endpoint: 'start' | 'end') => boolean;\n allowNullableValues?: boolean;\n}\n\nexport function useRelativeRangeDatePickerState(\n props: RelativeRangeDatePickerStateOptions,\n): RelativeRangeDatePickerState {\n const [value, setValue] = useControlledState(props.value, props.defaultValue ?? null);\n\n const [timeZone, setTimeZone] = useControlledState(\n props.timeZone,\n props.defaultTimeZone ?? 'default',\n props.onUpdateTimeZone,\n );\n\n const {t} = i18n.useTranslation();\n const validation = React.useMemo(\n () =>\n getRangeValidationResult(\n value,\n props.allowNullableValues,\n props.minValue,\n props.maxValue,\n props.isDateUnavailable,\n timeZone,\n t,\n ),\n [\n value,\n props.allowNullableValues,\n props.isDateUnavailable,\n props.maxValue,\n props.minValue,\n timeZone,\n t,\n ],\n );\n\n return {\n value,\n timeZone,\n setValue(v, tz) {\n setValue(v);\n setTimeZone(tz);\n if (value !== v || (value && timeZone !== tz)) {\n props.onUpdate?.(v, tz);\n }\n },\n ...validation,\n };\n}\n"]}
|
|
@@ -1,5 +1,13 @@
|
|
|
1
|
-
export declare const i18n: ((key: "to" | "\"From\"" | "\"
|
|
1
|
+
export declare const i18n: ((key: "to" | "\"From\"" | "\"To\"", params?: import("@gravity-ui/i18n").Params) => string) & {
|
|
2
|
+
Translation: import("react").ComponentType<{
|
|
3
|
+
children: (props: {
|
|
4
|
+
t: (key: "to" | "\"From\"" | "\"To\"", params?: import("@gravity-ui/i18n").Params) => string;
|
|
5
|
+
}) => React.ReactNode;
|
|
6
|
+
}>;
|
|
7
|
+
useTranslation: () => {
|
|
8
|
+
t: (key: "to" | "\"From\"" | "\"To\"", params?: import("@gravity-ui/i18n").Params) => string;
|
|
9
|
+
};
|
|
2
10
|
keysetData: {
|
|
3
|
-
"g-date-relative-range-date-picker": Record<"to" | "\"From\"" | "\"
|
|
11
|
+
"g-date-relative-range-date-picker": Record<"to" | "\"From\"" | "\"To\"", import("@gravity-ui/i18n").KeyData>;
|
|
4
12
|
};
|
|
5
13
|
};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { Value } from "../RelativeDatePicker/index.js";
|
|
2
|
-
import type { RangeValue } from "../types/index.js";
|
|
2
|
+
import type { ExtractFunctionType, RangeValue } from "../types/index.js";
|
|
3
3
|
import type { Preset } from "./components/Presets/defaultPresets.js";
|
|
4
|
+
import { i18n } from "./components/Presets/i18n/index.js";
|
|
4
5
|
export declare function resolveTimeZone(timeZone: string): string;
|
|
5
6
|
export declare function normalizeTimeZone(timeZone: string): string;
|
|
6
7
|
export declare function getTimeZoneOffset(timeZone: string): string;
|
|
@@ -10,6 +11,8 @@ interface GetDefaultTitleArgs {
|
|
|
10
11
|
alwaysShowAsAbsolute?: boolean;
|
|
11
12
|
format?: string;
|
|
12
13
|
presets?: Preset[];
|
|
14
|
+
presetsTranslations?: ExtractFunctionType<typeof i18n>;
|
|
15
|
+
lang?: string;
|
|
13
16
|
}
|
|
14
|
-
export declare function getDefaultTitle({ value, timeZone, alwaysShowAsAbsolute, format, presets, }: GetDefaultTitleArgs): string;
|
|
17
|
+
export declare function getDefaultTitle({ value, timeZone, alwaysShowAsAbsolute, format, presets, presetsTranslations, lang, }: GetDefaultTitleArgs): string;
|
|
15
18
|
export {};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { dateTime, dateTimeParse } from '@gravity-ui/date-utils';
|
|
2
|
+
import { i18n } from "./components/Presets/i18n/index.js";
|
|
2
3
|
import { getPresetTitle } from "./components/Presets/utils.js";
|
|
3
4
|
export function resolveTimeZone(timeZone) {
|
|
4
5
|
if (timeZone === 'default' || timeZone === 'system') {
|
|
@@ -16,7 +17,7 @@ export function normalizeTimeZone(timeZone) {
|
|
|
16
17
|
export function getTimeZoneOffset(timeZone) {
|
|
17
18
|
return `UTC ${dateTime({ timeZone }).format('Z')}`;
|
|
18
19
|
}
|
|
19
|
-
export function getDefaultTitle({ value, timeZone, alwaysShowAsAbsolute, format = 'L', presets, }) {
|
|
20
|
+
export function getDefaultTitle({ value, timeZone, alwaysShowAsAbsolute, format = 'L', presets, presetsTranslations = i18n, lang = 'en', }) {
|
|
20
21
|
var _a, _b, _c, _d, _e, _f;
|
|
21
22
|
if (!value) {
|
|
22
23
|
return '';
|
|
@@ -27,19 +28,19 @@ export function getDefaultTitle({ value, timeZone, alwaysShowAsAbsolute, format
|
|
|
27
28
|
from =
|
|
28
29
|
value.start.type === 'relative' && !alwaysShowAsAbsolute
|
|
29
30
|
? value.start.value
|
|
30
|
-
: ((_b = (_a = dateTimeParse(value.start.value, { timeZone })) === null || _a === void 0 ? void 0 : _a.format(format)) !== null && _b !== void 0 ? _b : '');
|
|
31
|
+
: ((_b = (_a = dateTimeParse(value.start.value, { timeZone, lang })) === null || _a === void 0 ? void 0 : _a.format(format)) !== null && _b !== void 0 ? _b : '');
|
|
31
32
|
}
|
|
32
33
|
let to = '';
|
|
33
34
|
if (value.end) {
|
|
34
35
|
to =
|
|
35
36
|
value.end.type === 'relative' && !alwaysShowAsAbsolute
|
|
36
37
|
? value.end.value
|
|
37
|
-
: ((_d = (_c = dateTimeParse(value.end.value, { timeZone, roundUp: true })) === null || _c === void 0 ? void 0 : _c.format(format)) !== null && _d !== void 0 ? _d : '');
|
|
38
|
+
: ((_d = (_c = dateTimeParse(value.end.value, { timeZone, roundUp: true, lang })) === null || _c === void 0 ? void 0 : _c.format(format)) !== null && _d !== void 0 ? _d : '');
|
|
38
39
|
}
|
|
39
40
|
if (!alwaysShowAsAbsolute &&
|
|
40
41
|
((_e = value.start) === null || _e === void 0 ? void 0 : _e.type) === 'relative' &&
|
|
41
42
|
((_f = value.end) === null || _f === void 0 ? void 0 : _f.type) === 'relative') {
|
|
42
|
-
return `${getPresetTitle(value.start.value, value.end.value, presets)}`;
|
|
43
|
+
return `${getPresetTitle(value.start.value, value.end.value, presets, presetsTranslations)}`;
|
|
43
44
|
}
|
|
44
45
|
const delimiter = ' — ';
|
|
45
46
|
return `${from}${delimiter}${to}${tz}`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"../../../../src","sources":["components/RelativeRangeDatePicker/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAE,aAAa,EAAC,MAAM,wBAAwB,CAAC;AAM/D,OAAO,EAAC,cAAc,EAAC,sCAAmC;AAE1D,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC5C,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAClD,OAAO,QAAQ,CAAC,EAAC,QAAQ,EAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC3C,CAAC;IAED,OAAO,QAAQ,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAC9C,MAAM,OAAO,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IACvC,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChD,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,OAAO,eAAe,CAAC,QAAQ,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAC9C,OAAO,OAAO,QAAQ,CAAC,EAAC,QAAQ,EAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;AACrD,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"../../../../src","sources":["components/RelativeRangeDatePicker/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import {dateTime, dateTimeParse} from '@gravity-ui/date-utils';\n\nimport type {Value} from '../RelativeDatePicker';\nimport type {ExtractFunctionType, RangeValue} from '../types';\n\nimport type {Preset} from './components/Presets/defaultPresets';\nimport {i18n} from './components/Presets/i18n';\nimport {getPresetTitle} from './components/Presets/utils';\n\nexport function resolveTimeZone(timeZone: string) {\n if (timeZone === 'default' || timeZone === 'system') {\n return dateTime({timeZone}).timeZone();\n }\n\n return timeZone;\n}\n\nexport function normalizeTimeZone(timeZone: string) {\n const lowered = timeZone.toLowerCase();\n if (lowered === 'default' || lowered === 'system') {\n return lowered;\n }\n\n return resolveTimeZone(timeZone);\n}\n\nexport function getTimeZoneOffset(timeZone: string) {\n return `UTC ${dateTime({timeZone}).format('Z')}`;\n}\n\ninterface GetDefaultTitleArgs {\n value: RangeValue<Value | null> | null;\n timeZone: string;\n alwaysShowAsAbsolute?: boolean;\n format?: string;\n presets?: Preset[];\n presetsTranslations?: ExtractFunctionType<typeof i18n>;\n lang?: string;\n}\nexport function getDefaultTitle({\n value,\n timeZone,\n alwaysShowAsAbsolute,\n format = 'L',\n presets,\n presetsTranslations = i18n,\n lang = 'en',\n}: GetDefaultTitleArgs) {\n if (!value) {\n return '';\n }\n\n const tz = timeZone === 'default' ? '' : ` (${getTimeZoneOffset(timeZone)})`;\n\n let from = '';\n if (value.start) {\n from =\n value.start.type === 'relative' && !alwaysShowAsAbsolute\n ? value.start.value\n : (dateTimeParse(value.start.value, {timeZone, lang})?.format(format) ?? '');\n }\n let to = '';\n if (value.end) {\n to =\n value.end.type === 'relative' && !alwaysShowAsAbsolute\n ? value.end.value\n : (dateTimeParse(value.end.value, {timeZone, roundUp: true, lang})?.format(\n format,\n ) ?? '');\n }\n\n if (\n !alwaysShowAsAbsolute &&\n value.start?.type === 'relative' &&\n value.end?.type === 'relative'\n ) {\n return `${getPresetTitle(value.start.value, value.end.value, presets, presetsTranslations)}`;\n }\n\n const delimiter = ' — ';\n\n return `${from}${delimiter}${to}${tz}`;\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type ExtractFunctionType<T> = T extends (...args: infer A) => infer R ? (...args: A) => R : never;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"../../../../src","sources":["components/types/helpers.ts"],"names":[],"mappings":"","sourcesContent":["export type ExtractFunctionType<T> = T extends (...args: infer A) => infer R\n ? (...args: A) => R\n : never;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"../../../../src","sources":["components/types/index.ts"],"names":[],"mappings":"","sourcesContent":["export type * from './datePicker';\nexport type * from './inputs';\nexport type * from './style';\nexport type * from './events';\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"../../../../src","sources":["components/types/index.ts"],"names":[],"mappings":"","sourcesContent":["export type * from './datePicker';\nexport type * from './inputs';\nexport type * from './style';\nexport type * from './events';\nexport type * from './helpers';\n"]}
|
|
@@ -8,4 +8,4 @@ export declare function createPlaceholderValue({ placeholderValue, timeZone }: P
|
|
|
8
8
|
export declare function isInvalid(value: DateTime | null | undefined, minValue: DateTime | undefined, maxValue: DateTime | undefined): boolean;
|
|
9
9
|
export declare function constrainValue(value: DateTime, minValue: DateTime | undefined, maxValue: DateTime | undefined): DateTime;
|
|
10
10
|
export declare function mergeDateTime(date: DateTime, time: DateTime): DateTime;
|
|
11
|
-
export declare function formatDateTime(date: DateTime, format: string, timezone: string): string;
|
|
11
|
+
export declare function formatDateTime(date: DateTime, format: string, timezone: string, lang: string): string;
|
|
@@ -32,7 +32,7 @@ export function mergeDateTime(date, time) {
|
|
|
32
32
|
.set('minutes', time.minute())
|
|
33
33
|
.set('seconds', time.second());
|
|
34
34
|
}
|
|
35
|
-
export function formatDateTime(date, format, timezone) {
|
|
36
|
-
return dateTime({ input: date, timeZone: timezone }).format(format);
|
|
35
|
+
export function formatDateTime(date, format, timezone, lang) {
|
|
36
|
+
return dateTime({ input: date, timeZone: timezone, lang }).format(format);
|
|
37
37
|
}
|
|
38
38
|
//# sourceMappingURL=dates.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dates.js","sourceRoot":"../../../../src","sources":["components/utils/dates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,wBAAwB,CAAC;AAGhD,MAAM,UAAU,SAAS,CAAC,IAAc;IACpC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACvC,CAAC;AAMD,MAAM,UAAU,sBAAsB,CAAC,EAAC,gBAAgB,EAAE,QAAQ,EAA0B;IACxF,OAAO,gBAAgB,aAAhB,gBAAgB,cAAhB,gBAAgB,GAAI,QAAQ,CAAC,EAAC,QAAQ,EAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,SAAS,CACrB,KAAkC,EAClC,QAA8B,EAC9B,QAA8B;IAE9B,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,IAAI,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,IAAI,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,cAAc,CAC1B,KAAe,EACf,QAA8B,EAC9B,QAA8B;IAE9B,IAAI,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvC,OAAO,QAAQ,CAAC;IACpB,CAAC;IACD,IAAI,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACvC,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAc,EAAE,IAAc;IACxD,OAAO,IAAI;SACN,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;SACzB,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;SAC7B,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAc,EAAE,MAAc,EAAE,QAAgB;
|
|
1
|
+
{"version":3,"file":"dates.js","sourceRoot":"../../../../src","sources":["components/utils/dates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,wBAAwB,CAAC;AAGhD,MAAM,UAAU,SAAS,CAAC,IAAc;IACpC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACvC,CAAC;AAMD,MAAM,UAAU,sBAAsB,CAAC,EAAC,gBAAgB,EAAE,QAAQ,EAA0B;IACxF,OAAO,gBAAgB,aAAhB,gBAAgB,cAAhB,gBAAgB,GAAI,QAAQ,CAAC,EAAC,QAAQ,EAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,SAAS,CACrB,KAAkC,EAClC,QAA8B,EAC9B,QAA8B;IAE9B,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,IAAI,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,IAAI,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,cAAc,CAC1B,KAAe,EACf,QAA8B,EAC9B,QAA8B;IAE9B,IAAI,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvC,OAAO,QAAQ,CAAC;IACpB,CAAC;IACD,IAAI,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACvC,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAc,EAAE,IAAc;IACxD,OAAO,IAAI;SACN,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;SACzB,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;SAC7B,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAc,EAAE,MAAc,EAAE,QAAgB,EAAE,IAAY;IACzF,OAAO,QAAQ,CAAC,EAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC5E,CAAC","sourcesContent":["import {dateTime} from '@gravity-ui/date-utils';\nimport type {DateTime} from '@gravity-ui/date-utils';\n\nexport function isWeekend(date: DateTime) {\n return [0, 6].includes(date.day());\n}\n\nexport interface PlaceholderValueOptions {\n placeholderValue?: DateTime;\n timeZone?: string;\n}\nexport function createPlaceholderValue({placeholderValue, timeZone}: PlaceholderValueOptions) {\n return placeholderValue ?? dateTime({timeZone}).startOf('day');\n}\n\nexport function isInvalid(\n value: DateTime | null | undefined,\n minValue: DateTime | undefined,\n maxValue: DateTime | undefined,\n) {\n if (!value) {\n return false;\n }\n\n if (minValue && value.isBefore(minValue)) {\n return true;\n }\n if (maxValue && maxValue.isBefore(value)) {\n return true;\n }\n\n return false;\n}\n\nexport function constrainValue(\n value: DateTime,\n minValue: DateTime | undefined,\n maxValue: DateTime | undefined,\n) {\n if (minValue && value.isBefore(minValue)) {\n return minValue;\n }\n if (maxValue && maxValue.isBefore(value)) {\n return maxValue;\n }\n\n return value;\n}\n\nexport function mergeDateTime(date: DateTime, time: DateTime) {\n return date\n .set('hours', time.hour())\n .set('minutes', time.minute())\n .set('seconds', time.second());\n}\n\nexport function formatDateTime(date: DateTime, format: string, timezone: string, lang: string) {\n return dateTime({input: date, timeZone: timezone, lang}).format(format);\n}\n"]}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import type { DateTime } from '@gravity-ui/date-utils';
|
|
2
|
+
import type { ExtractFunctionType } from "../../types/index.js";
|
|
3
|
+
import { i18n } from "./i18n/index.js";
|
|
2
4
|
export interface ValidationResult {
|
|
3
5
|
isInvalid: boolean;
|
|
4
6
|
errors: string[];
|
|
5
7
|
}
|
|
6
|
-
export declare function getValidationResult(value: DateTime | null | undefined, minValue: DateTime | undefined, maxValue: DateTime | undefined, isDateUnavailable: ((v: DateTime) => boolean) | undefined, timeZone: string, valueTitle?: string): ValidationResult;
|
|
8
|
+
export declare function getValidationResult(value: DateTime | null | undefined, minValue: DateTime | undefined, maxValue: DateTime | undefined, isDateUnavailable: ((v: DateTime) => boolean) | undefined, timeZone: string, valueTitle?: string, t?: ExtractFunctionType<typeof i18n>): ValidationResult;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { i18n } from "./i18n/index.js";
|
|
2
|
-
export function getValidationResult(value, minValue, maxValue, isDateUnavailable, timeZone, valueTitle = 'Value') {
|
|
2
|
+
export function getValidationResult(value, minValue, maxValue, isDateUnavailable, timeZone, valueTitle = 'Value', t = i18n) {
|
|
3
3
|
const rangeOverflow = value && maxValue && maxValue.isBefore(value);
|
|
4
4
|
const rangeUnderflow = value && minValue && value.isBefore(minValue);
|
|
5
5
|
const isUnavailable = (value && (isDateUnavailable === null || isDateUnavailable === void 0 ? void 0 : isDateUnavailable(value))) || false;
|
|
@@ -7,19 +7,19 @@ export function getValidationResult(value, minValue, maxValue, isDateUnavailable
|
|
|
7
7
|
const errors = [];
|
|
8
8
|
if (isInvalid) {
|
|
9
9
|
if (rangeUnderflow && minValue) {
|
|
10
|
-
errors.push(
|
|
10
|
+
errors.push(t('Value must be {minValue} or later.', {
|
|
11
11
|
minValue: minValue.timeZone(timeZone).format(),
|
|
12
12
|
value: valueTitle,
|
|
13
13
|
}));
|
|
14
14
|
}
|
|
15
15
|
if (rangeOverflow && maxValue) {
|
|
16
|
-
errors.push(
|
|
16
|
+
errors.push(t('Value must be {maxValue} or earlier.', {
|
|
17
17
|
maxValue: maxValue.timeZone(timeZone).format(),
|
|
18
18
|
value: valueTitle,
|
|
19
19
|
}));
|
|
20
20
|
}
|
|
21
21
|
if (isUnavailable) {
|
|
22
|
-
errors.push(
|
|
22
|
+
errors.push(t('Selected date unavailable.'));
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
25
|
return { isInvalid, errors };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datePicker.js","sourceRoot":"../../../../../src","sources":["components/utils/validation/datePicker.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"datePicker.js","sourceRoot":"../../../../../src","sources":["components/utils/validation/datePicker.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,IAAI,EAAC,wBAAe;AAO5B,MAAM,UAAU,mBAAmB,CAC/B,KAAkC,EAClC,QAA8B,EAC9B,QAA8B,EAC9B,iBAAyD,EACzD,QAAgB,EAChB,UAAU,GAAG,OAAO,EACpB,IAAsC,IAAI;IAE1C,MAAM,aAAa,GAAG,KAAK,IAAI,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpE,MAAM,cAAc,GAAG,KAAK,IAAI,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACrE,MAAM,aAAa,GAAG,CAAC,KAAK,KAAI,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAG,KAAK,CAAC,CAAA,CAAC,IAAI,KAAK,CAAC;IACrE,MAAM,SAAS,GAAG,aAAa,IAAI,cAAc,IAAI,aAAa,CAAC;IACnE,MAAM,MAAM,GAAG,EAAE,CAAC;IAElB,IAAI,SAAS,EAAE,CAAC;QACZ,IAAI,cAAc,IAAI,QAAQ,EAAE,CAAC;YAC7B,MAAM,CAAC,IAAI,CACP,CAAC,CAAC,oCAAoC,EAAE;gBACpC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE;gBAC9C,KAAK,EAAE,UAAU;aACpB,CAAC,CACL,CAAC;QACN,CAAC;QAED,IAAI,aAAa,IAAI,QAAQ,EAAE,CAAC;YAC5B,MAAM,CAAC,IAAI,CACP,CAAC,CAAC,sCAAsC,EAAE;gBACtC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE;gBAC9C,KAAK,EAAE,UAAU;aACpB,CAAC,CACL,CAAC;QACN,CAAC;QAED,IAAI,aAAa,EAAE,CAAC;YAChB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC;QACjD,CAAC;IACL,CAAC;IAED,OAAO,EAAC,SAAS,EAAE,MAAM,EAAC,CAAC;AAC/B,CAAC","sourcesContent":["import type {DateTime} from '@gravity-ui/date-utils';\n\nimport type {ExtractFunctionType} from '../../types';\n\nimport {i18n} from './i18n';\n\nexport interface ValidationResult {\n isInvalid: boolean;\n errors: string[];\n}\n\nexport function getValidationResult(\n value: DateTime | null | undefined,\n minValue: DateTime | undefined,\n maxValue: DateTime | undefined,\n isDateUnavailable: ((v: DateTime) => boolean) | undefined,\n timeZone: string,\n valueTitle = 'Value',\n t: ExtractFunctionType<typeof i18n> = i18n,\n): ValidationResult {\n const rangeOverflow = value && maxValue && maxValue.isBefore(value);\n const rangeUnderflow = value && minValue && value.isBefore(minValue);\n const isUnavailable = (value && isDateUnavailable?.(value)) || false;\n const isInvalid = rangeOverflow || rangeUnderflow || isUnavailable;\n const errors = [];\n\n if (isInvalid) {\n if (rangeUnderflow && minValue) {\n errors.push(\n t('Value must be {minValue} or later.', {\n minValue: minValue.timeZone(timeZone).format(),\n value: valueTitle,\n }),\n );\n }\n\n if (rangeOverflow && maxValue) {\n errors.push(\n t('Value must be {maxValue} or earlier.', {\n maxValue: maxValue.timeZone(timeZone).format(),\n value: valueTitle,\n }),\n );\n }\n\n if (isUnavailable) {\n errors.push(t('Selected date unavailable.'));\n }\n }\n\n return {isInvalid, errors};\n}\n"]}
|
|
@@ -2,5 +2,10 @@
|
|
|
2
2
|
"Value must be {minValue} or later.": "{{value}} must be {{minValue}} or later.",
|
|
3
3
|
"Value must be {maxValue} or earlier.": "{{value}} must be {{maxValue}} or earlier.",
|
|
4
4
|
"Selected date unavailable.": "Selected date unavailable.",
|
|
5
|
-
"Value is required.": "{{value}} is required."
|
|
5
|
+
"Value is required.": "{{value}} is required.",
|
|
6
|
+
"\"From\"": "\"From\"",
|
|
7
|
+
"\"To\"": "\"To\"",
|
|
8
|
+
"\"From\" is required.": "\"From\" is required.",
|
|
9
|
+
"\"To\" is required.": "\"To\" is required.",
|
|
10
|
+
"\"From\" can't be after \"To\".": "\"From\" can't be after \"To\"."
|
|
6
11
|
}
|
|
@@ -1,5 +1,13 @@
|
|
|
1
|
-
export declare const i18n: ((key: "Selected date unavailable." | "Value must be {minValue} or later." | "Value must be {maxValue} or earlier." | "Value is required.", params?: import("@gravity-ui/i18n").Params) => string) & {
|
|
1
|
+
export declare const i18n: ((key: "Selected date unavailable." | "\"From\"" | "\"To\"" | "\"From\" is required." | "\"To\" is required." | "\"From\" can't be after \"To\"." | "Value must be {minValue} or later." | "Value must be {maxValue} or earlier." | "Value is required.", params?: import("@gravity-ui/i18n").Params) => string) & {
|
|
2
|
+
Translation: import("react").ComponentType<{
|
|
3
|
+
children: (props: {
|
|
4
|
+
t: (key: "Selected date unavailable." | "\"From\"" | "\"To\"" | "\"From\" is required." | "\"To\" is required." | "\"From\" can't be after \"To\"." | "Value must be {minValue} or later." | "Value must be {maxValue} or earlier." | "Value is required.", params?: import("@gravity-ui/i18n").Params) => string;
|
|
5
|
+
}) => React.ReactNode;
|
|
6
|
+
}>;
|
|
7
|
+
useTranslation: () => {
|
|
8
|
+
t: (key: "Selected date unavailable." | "\"From\"" | "\"To\"" | "\"From\" is required." | "\"To\" is required." | "\"From\" can't be after \"To\"." | "Value must be {minValue} or later." | "Value must be {maxValue} or earlier." | "Value is required.", params?: import("@gravity-ui/i18n").Params) => string;
|
|
9
|
+
};
|
|
2
10
|
keysetData: {
|
|
3
|
-
"g-date-validation": Record<"Selected date unavailable." | "Value must be {minValue} or later." | "Value must be {maxValue} or earlier." | "Value is required.", import("@gravity-ui/i18n").KeyData>;
|
|
11
|
+
"g-date-validation": Record<"Selected date unavailable." | "\"From\"" | "\"To\"" | "\"From\" is required." | "\"To\" is required." | "\"From\" can't be after \"To\"." | "Value must be {minValue} or later." | "Value must be {maxValue} or earlier." | "Value is required.", import("@gravity-ui/i18n").KeyData>;
|
|
4
12
|
};
|
|
5
13
|
};
|
|
@@ -2,5 +2,11 @@
|
|
|
2
2
|
"Value must be {minValue} or later.": "{{value}} должно ровняться {{minValue}} или быть позже.",
|
|
3
3
|
"Value must be {maxValue} or earlier.": "{{value}} должно ровняться {{maxValue}} или быть раньше.",
|
|
4
4
|
"Selected date unavailable.": "Выбранная дата недоступна.",
|
|
5
|
-
"Value is required.": "{{value}} обязательно."
|
|
5
|
+
"Value is required.": "{{value}} обязательно.",
|
|
6
|
+
"\"From\"": "«От»",
|
|
7
|
+
"\"To\"": "«До»",
|
|
8
|
+
"\"From\" is required.": "«От» обязательно.",
|
|
9
|
+
"\"To\"": "«До»",
|
|
10
|
+
"\"To\" is required.": "«До» обязательно.",
|
|
11
|
+
"\"From\" can't be after \"To\".": "«От» не может быть позже чем «До»."
|
|
6
12
|
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { DateTime } from '@gravity-ui/date-utils';
|
|
2
|
+
import type { RelativeRangeDatePickerValue } from "../../RelativeRangeDatePicker/index.js";
|
|
3
|
+
import type { ExtractFunctionType } from "../../types/index.js";
|
|
4
|
+
import { i18n } from "./i18n/index.js";
|
|
5
|
+
export declare function getRangeValidationResult(value: RelativeRangeDatePickerValue | null, allowNullableValues: boolean | undefined, minValue: DateTime | undefined, maxValue: DateTime | undefined, isDateUnavailable: ((v: DateTime, endpoint: 'start' | 'end') => boolean) | undefined, timeZone: string, t?: ExtractFunctionType<typeof i18n>): {
|
|
6
|
+
isInvalid: boolean;
|
|
7
|
+
errors: never[];
|
|
8
|
+
startValidationResult?: undefined;
|
|
9
|
+
endValidationResult?: undefined;
|
|
10
|
+
} | {
|
|
11
|
+
isInvalid: boolean;
|
|
12
|
+
startValidationResult: import("./datePicker.js").ValidationResult;
|
|
13
|
+
endValidationResult: import("./datePicker.js").ValidationResult;
|
|
14
|
+
errors: string[];
|
|
15
|
+
};
|