@gravity-ui/date-components 2.6.0 → 2.7.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/DatePicker/hooks/datePickerStateFactory.js +19 -3
- package/dist/cjs/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.js +16 -12
- package/dist/cjs/components/RelativeRangeDatePicker/RelativeRangeDatePicker.css +3 -0
- package/dist/cjs/components/RelativeRangeDatePicker/RelativeRangeDatePicker.js +10 -4
- package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.css +4 -0
- package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.js +4 -1
- package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/Presets.css +4 -0
- package/dist/cjs/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.d.ts +6 -5
- package/dist/cjs/components/RelativeRangeDatePicker/index.d.ts +4 -0
- package/dist/cjs/components/RelativeRangeDatePicker/index.js +7 -1
- package/dist/cjs/components/RelativeRangeDatePicker/utils.js +1 -1
- package/dist/esm/components/DatePicker/hooks/datePickerStateFactory.js +19 -3
- package/dist/esm/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.js +16 -12
- package/dist/esm/components/RelativeRangeDatePicker/RelativeRangeDatePicker.css +3 -0
- package/dist/esm/components/RelativeRangeDatePicker/RelativeRangeDatePicker.js +10 -4
- package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.css +4 -0
- package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.js +4 -1
- package/dist/esm/components/RelativeRangeDatePicker/components/Presets/Presets.css +4 -0
- package/dist/esm/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.d.ts +6 -5
- package/dist/esm/components/RelativeRangeDatePicker/index.d.ts +4 -0
- package/dist/esm/components/RelativeRangeDatePicker/index.js +2 -0
- package/dist/esm/components/RelativeRangeDatePicker/utils.js +1 -1
- package/package.json +3 -2
|
@@ -39,9 +39,25 @@ function datePickerStateFactory({ getPlaceholderTime, mergeDateTime, setTimezone
|
|
|
39
39
|
disabled,
|
|
40
40
|
readOnly, validationState: props.validationState, minValue: props.minValue, maxValue: props.maxValue, isDateUnavailable: props.isDateUnavailable, format, placeholderValue: props.placeholderValue, timeZone }));
|
|
41
41
|
const timeFormat = react_1.default.useMemo(() => {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
42
|
+
if (!dateFieldState.hasTime) {
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
const timeFormatParts = [];
|
|
46
|
+
const hours = dateFieldState.sections.find((s) => s.type === 'hour');
|
|
47
|
+
if (hours) {
|
|
48
|
+
timeFormatParts.push(hours.format);
|
|
49
|
+
}
|
|
50
|
+
const minutes = dateFieldState.sections.find((s) => s.type === 'minute');
|
|
51
|
+
if (minutes) {
|
|
52
|
+
timeFormatParts.push(minutes.format);
|
|
53
|
+
}
|
|
54
|
+
const seconds = dateFieldState.sections.find((s) => s.type === 'second');
|
|
55
|
+
if (seconds) {
|
|
56
|
+
timeFormatParts.push(seconds.format);
|
|
57
|
+
}
|
|
58
|
+
const dayPeriod = dateFieldState.sections.find((s) => s.type === 'dayPeriod');
|
|
59
|
+
return timeFormatParts.join(':') + (dayPeriod ? ` ${dayPeriod.format}` : '');
|
|
60
|
+
}, [dateFieldState.hasTime, dateFieldState.sections]);
|
|
45
61
|
if (value) {
|
|
46
62
|
selectedDate = setTimezone(value, timeZone);
|
|
47
63
|
if (dateFieldState.hasTime) {
|
|
@@ -38,18 +38,6 @@ function useRelativeDatePickerProps(state, _a) {
|
|
|
38
38
|
if (!state.isActive && isOpen) {
|
|
39
39
|
setOpen(false);
|
|
40
40
|
}
|
|
41
|
-
const [prevOpen, setPrevOpen] = react_1.default.useState(isOpen);
|
|
42
|
-
if (isOpen !== prevOpen) {
|
|
43
|
-
setPrevOpen(isOpen);
|
|
44
|
-
if (!isOpen) {
|
|
45
|
-
// FIXME: use popup afterOpenChange instead.
|
|
46
|
-
setTimeout(() => {
|
|
47
|
-
setFocusedDate(mode === 'relative'
|
|
48
|
-
? relativeDateState.lastCorrectDate
|
|
49
|
-
: datePickerState.dateFieldState.displayValue);
|
|
50
|
-
}, 200);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
41
|
const commonInputProps = {
|
|
54
42
|
onFocus: () => {
|
|
55
43
|
if (!state.isActive) {
|
|
@@ -59,6 +47,17 @@ function useRelativeDatePickerProps(state, _a) {
|
|
|
59
47
|
},
|
|
60
48
|
errorMessage: props.errorMessage,
|
|
61
49
|
errorPlacement: props.errorPlacement,
|
|
50
|
+
controlProps: {
|
|
51
|
+
onClick: () => {
|
|
52
|
+
if (state.disabled) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
if (!isOpen) {
|
|
56
|
+
state.setActive(true);
|
|
57
|
+
setOpen(true);
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
},
|
|
62
61
|
};
|
|
63
62
|
const { inputProps } = (0, DateField_1.useDateFieldProps)(datePickerState.dateFieldState, Object.assign(Object.assign({}, props), { value: undefined, defaultValue: undefined, onUpdate: undefined }));
|
|
64
63
|
const { inputProps: relativeDateProps } = (0, RelativeDateField_1.useRelativeDateFieldProps)(relativeDateState, Object.assign(Object.assign({}, props), { value: undefined, defaultValue: undefined, onUpdate: undefined }));
|
|
@@ -145,6 +144,11 @@ function useRelativeDatePickerProps(state, _a) {
|
|
|
145
144
|
setOpen(false);
|
|
146
145
|
focusInput();
|
|
147
146
|
},
|
|
147
|
+
onTransitionExited: () => {
|
|
148
|
+
setFocusedDate(mode === 'relative'
|
|
149
|
+
? relativeDateState.lastCorrectDate
|
|
150
|
+
: datePickerState.dateFieldState.displayValue);
|
|
151
|
+
},
|
|
148
152
|
},
|
|
149
153
|
calendarProps: {
|
|
150
154
|
ref: calendarRef,
|
|
@@ -33,10 +33,7 @@ function RelativeRangeDatePicker(props) {
|
|
|
33
33
|
},
|
|
34
34
|
onBlurWithin: (e) => {
|
|
35
35
|
var _a;
|
|
36
|
-
|
|
37
|
-
const seemsIsClickOutsideInEmptySpace = open &&
|
|
38
|
-
(document.activeElement === null || document.activeElement === document.body);
|
|
39
|
-
if (!seemsIsClickOutsideInEmptySpace) {
|
|
36
|
+
if (!open) {
|
|
40
37
|
setIsActive(false);
|
|
41
38
|
(_a = props.onBlur) === null || _a === void 0 ? void 0 : _a.call(props, e);
|
|
42
39
|
}
|
|
@@ -64,6 +61,15 @@ function RelativeRangeDatePicker(props) {
|
|
|
64
61
|
'aria-expanded': open,
|
|
65
62
|
disabled: isMobile,
|
|
66
63
|
className: b('input', { mobile: isMobile }),
|
|
64
|
+
onClick: () => {
|
|
65
|
+
if (props.disabled) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
if (!open) {
|
|
69
|
+
setIsActive(true);
|
|
70
|
+
setOpen(true);
|
|
71
|
+
}
|
|
72
|
+
},
|
|
67
73
|
}, onKeyDown: (e) => {
|
|
68
74
|
if (props.disabled) {
|
|
69
75
|
return;
|
package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.css
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
.g-date-relative-range-date-picker-dialog__content {
|
|
2
2
|
--_--popup-content-padding: var(--g-spacing-2);
|
|
3
|
+
--_--g-date-picker-presets-padding: var(--_--popup-content-padding);
|
|
3
4
|
padding: var(--_--popup-content-padding);
|
|
4
5
|
}
|
|
5
6
|
.g-date-relative-range-date-picker-dialog__content_mobile {
|
|
@@ -29,4 +30,7 @@
|
|
|
29
30
|
margin-block: var(--g-spacing-2) calc(-1 * var(--_--popup-content-padding));
|
|
30
31
|
margin-inline: calc(-1 * var(--_--popup-content-padding));
|
|
31
32
|
border-block-start: 1px solid var(--g-color-line-generic);
|
|
33
|
+
}
|
|
34
|
+
.g-date-relative-range-date-picker-dialog__presets {
|
|
35
|
+
margin-inline: calc(-1 * var(--_--popup-content-padding));
|
|
32
36
|
}
|
|
@@ -40,5 +40,8 @@ function DialogContent(props) {
|
|
|
40
40
|
props.onApply();
|
|
41
41
|
}, 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) => {
|
|
42
42
|
state.setRange({ type: 'relative', value: start }, { type: 'relative', value: end });
|
|
43
|
-
|
|
43
|
+
if (!props.withApplyButton) {
|
|
44
|
+
props.onApply();
|
|
45
|
+
}
|
|
46
|
+
}, minValue: props.minValue, docs: props.docs, 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] }));
|
|
44
47
|
}
|
|
@@ -1,8 +1,12 @@
|
|
|
1
|
+
.g-date-relative-range-date-picker-presets {
|
|
2
|
+
--g-list-item-padding: 0 var(--_--g-date-picker-presets-padding, 0);
|
|
3
|
+
}
|
|
1
4
|
.g-date-relative-range-date-picker-presets__tabs {
|
|
2
5
|
--g-tabs-border-width: 0;
|
|
3
6
|
display: flex;
|
|
4
7
|
align-items: center;
|
|
5
8
|
gap: var(--g-spacing-2);
|
|
9
|
+
padding-inline: var(--_--g-date-picker-presets-padding, 0);
|
|
6
10
|
box-shadow: inset 0 -1px var(--g-color-line-generic);
|
|
7
11
|
}
|
|
8
12
|
.g-date-relative-range-date-picker-presets__list-container {
|
package/dist/cjs/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.d.ts
CHANGED
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
import type { DateTime } from '@gravity-ui/date-utils';
|
|
2
2
|
import type { Value } from '../../RelativeDatePicker';
|
|
3
3
|
import type { RangeValue } from '../../types';
|
|
4
|
+
export type RelativeRangeDatePickerValue = RangeValue<Value | null>;
|
|
4
5
|
export interface RelativeRangeDatePickerState {
|
|
5
|
-
value:
|
|
6
|
+
value: RelativeRangeDatePickerValue | null;
|
|
6
7
|
timeZone: string;
|
|
7
|
-
setValue: (value:
|
|
8
|
+
setValue: (value: RelativeRangeDatePickerValue | null, timeZone: string) => void;
|
|
8
9
|
isInvalid: boolean;
|
|
9
10
|
errors: string[];
|
|
10
11
|
}
|
|
11
12
|
export interface RelativeRangeDatePickerStateOptions {
|
|
12
|
-
value?:
|
|
13
|
-
defaultValue?:
|
|
14
|
-
onUpdate?: (value:
|
|
13
|
+
value?: RelativeRangeDatePickerValue | null;
|
|
14
|
+
defaultValue?: RelativeRangeDatePickerValue;
|
|
15
|
+
onUpdate?: (value: RelativeRangeDatePickerValue | null, timeZone: string) => void;
|
|
15
16
|
timeZone?: string;
|
|
16
17
|
defaultTimeZone?: string;
|
|
17
18
|
onUpdateTimeZone?: (timeZone: string) => void;
|
|
@@ -2,3 +2,7 @@ export * from './RelativeRangeDatePicker';
|
|
|
2
2
|
export { PickerDialog as RelativeRangeDatePickerDialog } from './components/PickerDialog/PickerDialog';
|
|
3
3
|
export type { PickerDialogProps as RelativeRangeDatePickerDialogProps } from './components/PickerDialog/PickerDialog';
|
|
4
4
|
export * from './hooks/useRelativeRangeDatePickerState';
|
|
5
|
+
export { DEFAULT_DATE_PRESETS, DEFAULT_TIME_PRESETS, DEFAULT_OTHERS_PRESETS, } from './components/Presets/defaultPresets';
|
|
6
|
+
export { getDefaultPresetTabs } from './components/Presets/utils';
|
|
7
|
+
export type { Preset as RelativeRangeDatePickerPreset } from './components/Presets/defaultPresets';
|
|
8
|
+
export type { PresetTab as RelativeRangeDatePickerPresetTab } from './components/Presets/utils';
|
|
@@ -1,8 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.RelativeRangeDatePickerDialog = void 0;
|
|
3
|
+
exports.getDefaultPresetTabs = exports.DEFAULT_OTHERS_PRESETS = exports.DEFAULT_TIME_PRESETS = exports.DEFAULT_DATE_PRESETS = exports.RelativeRangeDatePickerDialog = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
tslib_1.__exportStar(require("./RelativeRangeDatePicker"), exports);
|
|
6
6
|
var PickerDialog_1 = require("./components/PickerDialog/PickerDialog");
|
|
7
7
|
Object.defineProperty(exports, "RelativeRangeDatePickerDialog", { enumerable: true, get: function () { return PickerDialog_1.PickerDialog; } });
|
|
8
8
|
tslib_1.__exportStar(require("./hooks/useRelativeRangeDatePickerState"), exports);
|
|
9
|
+
var defaultPresets_1 = require("./components/Presets/defaultPresets");
|
|
10
|
+
Object.defineProperty(exports, "DEFAULT_DATE_PRESETS", { enumerable: true, get: function () { return defaultPresets_1.DEFAULT_DATE_PRESETS; } });
|
|
11
|
+
Object.defineProperty(exports, "DEFAULT_TIME_PRESETS", { enumerable: true, get: function () { return defaultPresets_1.DEFAULT_TIME_PRESETS; } });
|
|
12
|
+
Object.defineProperty(exports, "DEFAULT_OTHERS_PRESETS", { enumerable: true, get: function () { return defaultPresets_1.DEFAULT_OTHERS_PRESETS; } });
|
|
13
|
+
var utils_1 = require("./components/Presets/utils");
|
|
14
|
+
Object.defineProperty(exports, "getDefaultPresetTabs", { enumerable: true, get: function () { return utils_1.getDefaultPresetTabs; } });
|
|
@@ -27,7 +27,7 @@ function getDefaultTitle({ value, timeZone, alwaysShowAsAbsolute, format = 'L',
|
|
|
27
27
|
if (!value) {
|
|
28
28
|
return '';
|
|
29
29
|
}
|
|
30
|
-
const tz = timeZone === '
|
|
30
|
+
const tz = timeZone === 'default' ? '' : ` (${getTimeZoneOffset(timeZone)})`;
|
|
31
31
|
let from = '';
|
|
32
32
|
if (value.start) {
|
|
33
33
|
from =
|
|
@@ -35,9 +35,25 @@ export function datePickerStateFactory({ getPlaceholderTime, mergeDateTime, setT
|
|
|
35
35
|
disabled,
|
|
36
36
|
readOnly, validationState: props.validationState, minValue: props.minValue, maxValue: props.maxValue, isDateUnavailable: props.isDateUnavailable, format, placeholderValue: props.placeholderValue, timeZone }));
|
|
37
37
|
const timeFormat = React.useMemo(() => {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
38
|
+
if (!dateFieldState.hasTime) {
|
|
39
|
+
return undefined;
|
|
40
|
+
}
|
|
41
|
+
const timeFormatParts = [];
|
|
42
|
+
const hours = dateFieldState.sections.find((s) => s.type === 'hour');
|
|
43
|
+
if (hours) {
|
|
44
|
+
timeFormatParts.push(hours.format);
|
|
45
|
+
}
|
|
46
|
+
const minutes = dateFieldState.sections.find((s) => s.type === 'minute');
|
|
47
|
+
if (minutes) {
|
|
48
|
+
timeFormatParts.push(minutes.format);
|
|
49
|
+
}
|
|
50
|
+
const seconds = dateFieldState.sections.find((s) => s.type === 'second');
|
|
51
|
+
if (seconds) {
|
|
52
|
+
timeFormatParts.push(seconds.format);
|
|
53
|
+
}
|
|
54
|
+
const dayPeriod = dateFieldState.sections.find((s) => s.type === 'dayPeriod');
|
|
55
|
+
return timeFormatParts.join(':') + (dayPeriod ? ` ${dayPeriod.format}` : '');
|
|
56
|
+
}, [dateFieldState.hasTime, dateFieldState.sections]);
|
|
41
57
|
if (value) {
|
|
42
58
|
selectedDate = setTimezone(value, timeZone);
|
|
43
59
|
if (dateFieldState.hasTime) {
|
|
@@ -35,18 +35,6 @@ export function useRelativeDatePickerProps(state, _a) {
|
|
|
35
35
|
if (!state.isActive && isOpen) {
|
|
36
36
|
setOpen(false);
|
|
37
37
|
}
|
|
38
|
-
const [prevOpen, setPrevOpen] = React.useState(isOpen);
|
|
39
|
-
if (isOpen !== prevOpen) {
|
|
40
|
-
setPrevOpen(isOpen);
|
|
41
|
-
if (!isOpen) {
|
|
42
|
-
// FIXME: use popup afterOpenChange instead.
|
|
43
|
-
setTimeout(() => {
|
|
44
|
-
setFocusedDate(mode === 'relative'
|
|
45
|
-
? relativeDateState.lastCorrectDate
|
|
46
|
-
: datePickerState.dateFieldState.displayValue);
|
|
47
|
-
}, 200);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
38
|
const commonInputProps = {
|
|
51
39
|
onFocus: () => {
|
|
52
40
|
if (!state.isActive) {
|
|
@@ -56,6 +44,17 @@ export function useRelativeDatePickerProps(state, _a) {
|
|
|
56
44
|
},
|
|
57
45
|
errorMessage: props.errorMessage,
|
|
58
46
|
errorPlacement: props.errorPlacement,
|
|
47
|
+
controlProps: {
|
|
48
|
+
onClick: () => {
|
|
49
|
+
if (state.disabled) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
if (!isOpen) {
|
|
53
|
+
state.setActive(true);
|
|
54
|
+
setOpen(true);
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
},
|
|
59
58
|
};
|
|
60
59
|
const { inputProps } = useDateFieldProps(datePickerState.dateFieldState, Object.assign(Object.assign({}, props), { value: undefined, defaultValue: undefined, onUpdate: undefined }));
|
|
61
60
|
const { inputProps: relativeDateProps } = useRelativeDateFieldProps(relativeDateState, Object.assign(Object.assign({}, props), { value: undefined, defaultValue: undefined, onUpdate: undefined }));
|
|
@@ -142,6 +141,11 @@ export function useRelativeDatePickerProps(state, _a) {
|
|
|
142
141
|
setOpen(false);
|
|
143
142
|
focusInput();
|
|
144
143
|
},
|
|
144
|
+
onTransitionExited: () => {
|
|
145
|
+
setFocusedDate(mode === 'relative'
|
|
146
|
+
? relativeDateState.lastCorrectDate
|
|
147
|
+
: datePickerState.dateFieldState.displayValue);
|
|
148
|
+
},
|
|
145
149
|
},
|
|
146
150
|
calendarProps: {
|
|
147
151
|
ref: calendarRef,
|
|
@@ -29,10 +29,7 @@ export function RelativeRangeDatePicker(props) {
|
|
|
29
29
|
},
|
|
30
30
|
onBlurWithin: (e) => {
|
|
31
31
|
var _a;
|
|
32
|
-
|
|
33
|
-
const seemsIsClickOutsideInEmptySpace = open &&
|
|
34
|
-
(document.activeElement === null || document.activeElement === document.body);
|
|
35
|
-
if (!seemsIsClickOutsideInEmptySpace) {
|
|
32
|
+
if (!open) {
|
|
36
33
|
setIsActive(false);
|
|
37
34
|
(_a = props.onBlur) === null || _a === void 0 ? void 0 : _a.call(props, e);
|
|
38
35
|
}
|
|
@@ -60,6 +57,15 @@ export function RelativeRangeDatePicker(props) {
|
|
|
60
57
|
'aria-expanded': open,
|
|
61
58
|
disabled: isMobile,
|
|
62
59
|
className: b('input', { mobile: isMobile }),
|
|
60
|
+
onClick: () => {
|
|
61
|
+
if (props.disabled) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
if (!open) {
|
|
65
|
+
setIsActive(true);
|
|
66
|
+
setOpen(true);
|
|
67
|
+
}
|
|
68
|
+
},
|
|
63
69
|
}, onKeyDown: (e) => {
|
|
64
70
|
if (props.disabled) {
|
|
65
71
|
return;
|
package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.css
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
.g-date-relative-range-date-picker-dialog__content {
|
|
2
2
|
--_--popup-content-padding: var(--g-spacing-2);
|
|
3
|
+
--_--g-date-picker-presets-padding: var(--_--popup-content-padding);
|
|
3
4
|
padding: var(--_--popup-content-padding);
|
|
4
5
|
}
|
|
5
6
|
.g-date-relative-range-date-picker-dialog__content_mobile {
|
|
@@ -29,4 +30,7 @@
|
|
|
29
30
|
margin-block: var(--g-spacing-2) calc(-1 * var(--_--popup-content-padding));
|
|
30
31
|
margin-inline: calc(-1 * var(--_--popup-content-padding));
|
|
31
32
|
border-block-start: 1px solid var(--g-color-line-generic);
|
|
33
|
+
}
|
|
34
|
+
.g-date-relative-range-date-picker-dialog__presets {
|
|
35
|
+
margin-inline: calc(-1 * var(--_--popup-content-padding));
|
|
32
36
|
}
|
|
@@ -36,5 +36,8 @@ function DialogContent(props) {
|
|
|
36
36
|
props.onApply();
|
|
37
37
|
}, className: b('apply'), width: "max", children: i18n('Apply') })) : null, props.withPresets && !props.readOnly ? (_jsx(Presets, { size: props.size, presetTabs: props.presetTabs, onChoosePreset: (start, end) => {
|
|
38
38
|
state.setRange({ type: 'relative', value: start }, { type: 'relative', value: end });
|
|
39
|
-
|
|
39
|
+
if (!props.withApplyButton) {
|
|
40
|
+
props.onApply();
|
|
41
|
+
}
|
|
42
|
+
}, minValue: props.minValue, docs: props.docs, className: b('presets') })) : null, props.withZonesList ? (_jsx("div", { className: b('zone'), children: _jsx(Zones, { value: state.timeZone, onUpdate: state.setTimeZone, disabled: props.readOnly, size: props.size }) })) : null] }));
|
|
40
43
|
}
|
|
@@ -1,8 +1,12 @@
|
|
|
1
|
+
.g-date-relative-range-date-picker-presets {
|
|
2
|
+
--g-list-item-padding: 0 var(--_--g-date-picker-presets-padding, 0);
|
|
3
|
+
}
|
|
1
4
|
.g-date-relative-range-date-picker-presets__tabs {
|
|
2
5
|
--g-tabs-border-width: 0;
|
|
3
6
|
display: flex;
|
|
4
7
|
align-items: center;
|
|
5
8
|
gap: var(--g-spacing-2);
|
|
9
|
+
padding-inline: var(--_--g-date-picker-presets-padding, 0);
|
|
6
10
|
box-shadow: inset 0 -1px var(--g-color-line-generic);
|
|
7
11
|
}
|
|
8
12
|
.g-date-relative-range-date-picker-presets__list-container {
|
package/dist/esm/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.d.ts
CHANGED
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
import type { DateTime } from '@gravity-ui/date-utils';
|
|
2
2
|
import type { Value } from '../../RelativeDatePicker';
|
|
3
3
|
import type { RangeValue } from '../../types';
|
|
4
|
+
export type RelativeRangeDatePickerValue = RangeValue<Value | null>;
|
|
4
5
|
export interface RelativeRangeDatePickerState {
|
|
5
|
-
value:
|
|
6
|
+
value: RelativeRangeDatePickerValue | null;
|
|
6
7
|
timeZone: string;
|
|
7
|
-
setValue: (value:
|
|
8
|
+
setValue: (value: RelativeRangeDatePickerValue | null, timeZone: string) => void;
|
|
8
9
|
isInvalid: boolean;
|
|
9
10
|
errors: string[];
|
|
10
11
|
}
|
|
11
12
|
export interface RelativeRangeDatePickerStateOptions {
|
|
12
|
-
value?:
|
|
13
|
-
defaultValue?:
|
|
14
|
-
onUpdate?: (value:
|
|
13
|
+
value?: RelativeRangeDatePickerValue | null;
|
|
14
|
+
defaultValue?: RelativeRangeDatePickerValue;
|
|
15
|
+
onUpdate?: (value: RelativeRangeDatePickerValue | null, timeZone: string) => void;
|
|
15
16
|
timeZone?: string;
|
|
16
17
|
defaultTimeZone?: string;
|
|
17
18
|
onUpdateTimeZone?: (timeZone: string) => void;
|
|
@@ -2,3 +2,7 @@ export * from './RelativeRangeDatePicker';
|
|
|
2
2
|
export { PickerDialog as RelativeRangeDatePickerDialog } from './components/PickerDialog/PickerDialog';
|
|
3
3
|
export type { PickerDialogProps as RelativeRangeDatePickerDialogProps } from './components/PickerDialog/PickerDialog';
|
|
4
4
|
export * from './hooks/useRelativeRangeDatePickerState';
|
|
5
|
+
export { DEFAULT_DATE_PRESETS, DEFAULT_TIME_PRESETS, DEFAULT_OTHERS_PRESETS, } from './components/Presets/defaultPresets';
|
|
6
|
+
export { getDefaultPresetTabs } from './components/Presets/utils';
|
|
7
|
+
export type { Preset as RelativeRangeDatePickerPreset } from './components/Presets/defaultPresets';
|
|
8
|
+
export type { PresetTab as RelativeRangeDatePickerPresetTab } from './components/Presets/utils';
|
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
export * from './RelativeRangeDatePicker';
|
|
2
2
|
export { PickerDialog as RelativeRangeDatePickerDialog } from './components/PickerDialog/PickerDialog';
|
|
3
3
|
export * from './hooks/useRelativeRangeDatePickerState';
|
|
4
|
+
export { DEFAULT_DATE_PRESETS, DEFAULT_TIME_PRESETS, DEFAULT_OTHERS_PRESETS, } from './components/Presets/defaultPresets';
|
|
5
|
+
export { getDefaultPresetTabs } from './components/Presets/utils';
|
|
@@ -21,7 +21,7 @@ export function getDefaultTitle({ value, timeZone, alwaysShowAsAbsolute, format
|
|
|
21
21
|
if (!value) {
|
|
22
22
|
return '';
|
|
23
23
|
}
|
|
24
|
-
const tz = timeZone === '
|
|
24
|
+
const tz = timeZone === 'default' ? '' : ` (${getTimeZoneOffset(timeZone)})`;
|
|
25
25
|
let from = '';
|
|
26
26
|
if (value.start) {
|
|
27
27
|
from =
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gravity-ui/date-components",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.7.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "dist/cjs/index.js",
|
|
@@ -62,8 +62,9 @@
|
|
|
62
62
|
"@gravity-ui/tsconfig": "^1.0.0",
|
|
63
63
|
"@gravity-ui/uikit": "^6.15.0",
|
|
64
64
|
"@storybook/addon-a11y": "^8.1.10",
|
|
65
|
+
"@storybook/addon-actions": "^8.1.10",
|
|
65
66
|
"@storybook/addon-essentials": "^8.1.10",
|
|
66
|
-
"@storybook/addon-storysource": "8.1.10",
|
|
67
|
+
"@storybook/addon-storysource": "^8.1.10",
|
|
67
68
|
"@storybook/addon-viewport": "^8.1.10",
|
|
68
69
|
"@storybook/addon-webpack5-compiler-babel": "^3.0.3",
|
|
69
70
|
"@storybook/blocks": "^8.1.10",
|