@steroidsjs/core 3.0.82 → 3.0.84
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/docs-autogen-result.json +241 -4
- package/en.json +5 -0
- package/hooks/useDataProvider.d.ts +4 -0
- package/hooks/useDataProvider.js +5 -1
- package/package.json +1 -1
- package/ui/form/AutoCompleteField/AutoCompleteField.d.ts +4 -0
- package/ui/form/AutoCompleteField/AutoCompleteField.js +2 -1
- package/ui/form/DateField/DateField.d.ts +7 -0
- package/ui/form/DateField/DateField.js +16 -9
- package/ui/form/DateField/useDateInputState.js +3 -0
- package/ui/form/DateRangeField/DateRangeField.d.ts +7 -0
- package/ui/form/DateRangeField/DateRangeField.js +28 -45
- package/ui/form/DateTimeField/DateTimeField.d.ts +19 -0
- package/ui/form/DateTimeField/DateTimeField.js +27 -21
- package/ui/form/DateTimeField/utils.d.ts +8 -0
- package/ui/form/DateTimeField/utils.js +81 -0
- package/ui/form/DateTimeRangeField/DateTimeRangeField.d.ts +23 -0
- package/ui/form/DateTimeRangeField/DateTimeRangeField.js +40 -63
- package/ui/form/DropDownField/DropDownField.d.ts +8 -0
- package/ui/form/DropDownField/DropDownField.js +7 -2
- package/ui/form/TimeField/TimeField.d.ts +19 -2
- package/ui/form/TimeField/TimeField.js +16 -6
- package/ui/form/TimeField/utils.d.ts +9 -0
- package/ui/form/TimeField/utils.js +100 -0
- package/ui/form/TimeRangeField/TimeRangeField.d.ts +26 -0
- package/ui/form/TimeRangeField/TimeRangeField.js +28 -12
|
@@ -10,34 +10,11 @@ var __assign = (this && this.__assign) || function () {
|
|
|
10
10
|
};
|
|
11
11
|
return __assign.apply(this, arguments);
|
|
12
12
|
};
|
|
13
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
14
|
-
if (k2 === undefined) k2 = k;
|
|
15
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
16
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
17
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
18
|
-
}
|
|
19
|
-
Object.defineProperty(o, k2, desc);
|
|
20
|
-
}) : (function(o, m, k, k2) {
|
|
21
|
-
if (k2 === undefined) k2 = k;
|
|
22
|
-
o[k2] = m[k];
|
|
23
|
-
}));
|
|
24
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
25
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
26
|
-
}) : function(o, v) {
|
|
27
|
-
o["default"] = v;
|
|
28
|
-
});
|
|
29
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
30
|
-
if (mod && mod.__esModule) return mod;
|
|
31
|
-
var result = {};
|
|
32
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
33
|
-
__setModuleDefault(result, mod);
|
|
34
|
-
return result;
|
|
35
|
-
};
|
|
36
13
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
37
14
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
38
15
|
};
|
|
39
16
|
exports.__esModule = true;
|
|
40
|
-
var react_1 =
|
|
17
|
+
var react_1 = require("react");
|
|
41
18
|
var kit_1 = require("@maskito/kit");
|
|
42
19
|
var react_2 = require("@maskito/react");
|
|
43
20
|
var useDateRange_1 = __importDefault(require("../../form/DateField/useDateRange"));
|
|
@@ -47,10 +24,22 @@ var fieldWrapper_1 = __importDefault(require("../../form/Field/fieldWrapper"));
|
|
|
47
24
|
var enums_1 = require("../../../enums");
|
|
48
25
|
var useOnDayClick_1 = __importDefault(require("./useOnDayClick"));
|
|
49
26
|
function DateRangeField(props) {
|
|
50
|
-
var _a, _b;
|
|
27
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
51
28
|
var components = (0, hooks_1.useComponents)();
|
|
52
|
-
var maskInputFromRef = (0, react_2.useMaskito)({
|
|
53
|
-
|
|
29
|
+
var maskInputFromRef = (0, react_2.useMaskito)({
|
|
30
|
+
options: (_b = (_a = props.maskOptions) === null || _a === void 0 ? void 0 : _a.from) !== null && _b !== void 0 ? _b : (0, kit_1.maskitoDateOptionsGenerator)({
|
|
31
|
+
mode: 'dd/mm/yyyy',
|
|
32
|
+
separator: '.',
|
|
33
|
+
min: (_d = (_c = props.disabledDays) === null || _c === void 0 ? void 0 : _c.before) !== null && _d !== void 0 ? _d : null
|
|
34
|
+
})
|
|
35
|
+
});
|
|
36
|
+
var maskInputToRef = (0, react_2.useMaskito)({
|
|
37
|
+
options: (_f = (_e = props.maskOptions) === null || _e === void 0 ? void 0 : _e.to) !== null && _f !== void 0 ? _f : (0, kit_1.maskitoDateOptionsGenerator)({
|
|
38
|
+
mode: 'dd/mm/yyyy',
|
|
39
|
+
separator: '.',
|
|
40
|
+
min: (_h = (_g = props.disabledDays) === null || _g === void 0 ? void 0 : _g.before) !== null && _h !== void 0 ? _h : null
|
|
41
|
+
})
|
|
42
|
+
});
|
|
54
43
|
// Global onChange (from props)
|
|
55
44
|
var onChange = (0, react_1.useCallback)(function () {
|
|
56
45
|
var _a;
|
|
@@ -62,7 +51,7 @@ function DateRangeField(props) {
|
|
|
62
51
|
}
|
|
63
52
|
}, [props.attributeFrom, props.attributeTo, props.inputFrom.value, props.inputTo.value, props.onChange]);
|
|
64
53
|
// Input 'from'
|
|
65
|
-
var
|
|
54
|
+
var _j = (0, useDateInputState_1["default"])({
|
|
66
55
|
displayFormat: props.displayFormat,
|
|
67
56
|
valueFormat: props.valueFormat,
|
|
68
57
|
input: props.inputFrom,
|
|
@@ -71,9 +60,9 @@ function DateRangeField(props) {
|
|
|
71
60
|
required: props.required,
|
|
72
61
|
inputProps: props.inputPropsFrom,
|
|
73
62
|
onChange: onChange
|
|
74
|
-
}), isOpenedFrom =
|
|
63
|
+
}), isOpenedFrom = _j.isOpened, onCloseFrom = _j.onClose, inputPropsFrom = _j.inputProps, onClearFrom = _j.onClear;
|
|
75
64
|
// Input 'to'
|
|
76
|
-
var
|
|
65
|
+
var _k = (0, useDateInputState_1["default"])({
|
|
77
66
|
displayFormat: props.displayFormat,
|
|
78
67
|
valueFormat: props.valueFormat,
|
|
79
68
|
input: props.inputTo,
|
|
@@ -82,8 +71,8 @@ function DateRangeField(props) {
|
|
|
82
71
|
required: props.required,
|
|
83
72
|
inputProps: props.inputPropsTo,
|
|
84
73
|
onChange: onChange
|
|
85
|
-
}), isOpenedTo =
|
|
86
|
-
var
|
|
74
|
+
}), isOpenedTo = _k.isOpened, onCloseTo = _k.onClose, inputPropsTo = _k.inputProps, onClearTo = _k.onClear;
|
|
75
|
+
var _l = (0, useDateRange_1["default"])({
|
|
87
76
|
onClearFrom: onClearFrom,
|
|
88
77
|
onCloseTo: onCloseTo,
|
|
89
78
|
onCloseFrom: onCloseFrom,
|
|
@@ -96,8 +85,8 @@ function DateRangeField(props) {
|
|
|
96
85
|
hasInitialFocus: props.hasInitialFocus,
|
|
97
86
|
displayFormat: props.displayFormat,
|
|
98
87
|
valueFormat: props.valueFormat
|
|
99
|
-
}), focus =
|
|
100
|
-
react_1
|
|
88
|
+
}), focus = _l.focus, onClose = _l.onClose, onClear = _l.onClear, extendedInputPropsFrom = _l.extendedInputPropsFrom, extendedInputPropsTo = _l.extendedInputPropsTo;
|
|
89
|
+
(0, react_1.useEffect)(function () {
|
|
101
90
|
if (extendedInputPropsFrom.ref && extendedInputPropsTo.ref) {
|
|
102
91
|
maskInputFromRef(extendedInputPropsFrom.ref.current);
|
|
103
92
|
maskInputToRef(extendedInputPropsTo.ref.current);
|
|
@@ -117,7 +106,11 @@ function DateRangeField(props) {
|
|
|
117
106
|
onToChange: props.inputTo.onChange
|
|
118
107
|
});
|
|
119
108
|
// Calendar props
|
|
120
|
-
var calendarProps = (0, react_1.useMemo)(function () {
|
|
109
|
+
var calendarProps = (0, react_1.useMemo)(function () {
|
|
110
|
+
var _a;
|
|
111
|
+
return (__assign({ value: [props.inputFrom.value, props.inputTo.value], onChange: onDayClick, valueFormat: props.valueFormat, numberOfMonths: 2, showFooter: false }, ((props === null || props === void 0 ? void 0 : props.disabledDays)
|
|
112
|
+
? __assign(__assign({}, props.calendarProps), { pickerProps: __assign(__assign({}, (_a = props.calendarProps) === null || _a === void 0 ? void 0 : _a.pickerProps), { disabledDays: props.disabledDays }) }) : props.calendarProps)));
|
|
113
|
+
}, [onDayClick, props.calendarProps, props.disabledDays, props.inputFrom.value, props.inputTo.value, props.valueFormat]);
|
|
121
114
|
var viewProps = (0, react_1.useMemo)(function () { return (__assign(__assign({}, props.viewProps), { onClear: onClear, onClose: onClose, calendarProps: calendarProps, icon: props.icon, size: props.size, disabled: props.disabled, className: props.className, showRemove: props.showRemove, errorsFrom: props.errorsFrom, errorsTo: props.errorsTo, errors: props.errors, inputPropsTo: extendedInputPropsTo, inputPropsFrom: extendedInputPropsFrom, isOpened: focus === 'from' ? isOpenedFrom : isOpenedTo, style: props.style, id: props.id, withRangeButtons: props.withRangeButtons, rangeButtonsPosition: props.rangeButtonsPosition, displayFormat: props.displayFormat })); }, [props.viewProps, props.icon, props.size, props.disabled, props.className, props.showRemove, props.errorsFrom,
|
|
122
115
|
props.errorsTo, props.errors, props.style, props.id, props.withRangeButtons, props.rangeButtonsPosition,
|
|
123
116
|
props.displayFormat, onClear, onClose, calendarProps, extendedInputPropsTo, extendedInputPropsFrom, focus, isOpenedFrom, isOpenedTo]);
|
|
@@ -134,16 +127,6 @@ DateRangeField.defaultProps = {
|
|
|
134
127
|
hasInitialFocus: false,
|
|
135
128
|
icon: true,
|
|
136
129
|
useSmartRangeReset: true,
|
|
137
|
-
maskOptions: {
|
|
138
|
-
from: (0, kit_1.maskitoDateOptionsGenerator)({
|
|
139
|
-
mode: 'dd/mm/yyyy',
|
|
140
|
-
separator: '.'
|
|
141
|
-
}),
|
|
142
|
-
to: (0, kit_1.maskitoDateOptionsGenerator)({
|
|
143
|
-
mode: 'dd/mm/yyyy',
|
|
144
|
-
separator: '.'
|
|
145
|
-
})
|
|
146
|
-
},
|
|
147
130
|
rangeButtonsPosition: 'left-bottom'
|
|
148
131
|
};
|
|
149
132
|
exports["default"] = (0, fieldWrapper_1["default"])(enums_1.FieldEnum.DATE_RANGE_FIELD, DateRangeField, { attributeSuffixes: ['from', 'to'] });
|
|
@@ -27,6 +27,25 @@ export interface IDateTimeFieldProps extends IDateInputStateInput, IUiComponent
|
|
|
27
27
|
* Разделитель для даты и времени, не влияет на отображение
|
|
28
28
|
*/
|
|
29
29
|
dateTimeSeparator?: string;
|
|
30
|
+
/**
|
|
31
|
+
* Ограничение доступных дат.
|
|
32
|
+
*/
|
|
33
|
+
disabledDays?: {
|
|
34
|
+
after?: Date;
|
|
35
|
+
before?: Date;
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Ограничение доступного времени.
|
|
39
|
+
*/
|
|
40
|
+
availableTime?: {
|
|
41
|
+
from: string;
|
|
42
|
+
to: string;
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Шаг минут
|
|
46
|
+
* @example 15
|
|
47
|
+
*/
|
|
48
|
+
minuteStep?: number;
|
|
30
49
|
[key: string]: any;
|
|
31
50
|
}
|
|
32
51
|
export interface IDateTimeFieldViewProps extends IDateInputStateOutput, Pick<IDateTimeFieldProps, 'size' | 'errors' | 'showRemove' | 'calendarProps' | 'className' | 'timePanelViewProps'> {
|
|
@@ -15,8 +15,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
15
15
|
};
|
|
16
16
|
exports.__esModule = true;
|
|
17
17
|
var react_1 = require("react");
|
|
18
|
-
var kit_1 = require("@maskito/kit");
|
|
19
18
|
var react_2 = require("@maskito/react");
|
|
19
|
+
var utils_1 = require("./utils");
|
|
20
20
|
var useDateTime_1 = __importDefault(require("../DateField/useDateTime"));
|
|
21
21
|
var useDateInputState_1 = __importDefault(require("../../form/DateField/useDateInputState"));
|
|
22
22
|
var fieldWrapper_1 = __importDefault(require("../../form/Field/fieldWrapper"));
|
|
@@ -28,10 +28,18 @@ var DATE_TIME_SEPARATOR = ', ';
|
|
|
28
28
|
* Поля ввода с выпадающими списками для выбора даты и времени
|
|
29
29
|
*/
|
|
30
30
|
function DateTimeField(props) {
|
|
31
|
-
var _a;
|
|
31
|
+
var _a, _b, _c, _d, _e, _f;
|
|
32
32
|
var components = (0, hooks_1.useComponents)();
|
|
33
|
-
var maskInputRef = (0, react_2.useMaskito)({
|
|
34
|
-
|
|
33
|
+
var maskInputRef = (0, react_2.useMaskito)({
|
|
34
|
+
options: (0, utils_1.createDateTimeMask)({
|
|
35
|
+
from: (_a = props.availableTime) === null || _a === void 0 ? void 0 : _a.from,
|
|
36
|
+
to: (_b = props.availableTime) === null || _b === void 0 ? void 0 : _b.to,
|
|
37
|
+
minuteStep: props.minuteStep,
|
|
38
|
+
min: (_d = (_c = props.disabledDays) === null || _c === void 0 ? void 0 : _c.before) !== null && _d !== void 0 ? _d : null,
|
|
39
|
+
dateTimeSeparator: (_e = props.dateTimeSeparator) !== null && _e !== void 0 ? _e : DATE_TIME_SEPARATOR
|
|
40
|
+
})
|
|
41
|
+
});
|
|
42
|
+
var _g = (0, useDateInputState_1["default"])({
|
|
35
43
|
input: props.input,
|
|
36
44
|
disabled: props.disabled,
|
|
37
45
|
onChange: props.onChange,
|
|
@@ -42,25 +50,31 @@ function DateTimeField(props) {
|
|
|
42
50
|
displayFormat: props.displayFormat,
|
|
43
51
|
useUTC: props.useUTC,
|
|
44
52
|
dateInUTC: props.dateInUTC
|
|
45
|
-
}), onClear =
|
|
46
|
-
var
|
|
53
|
+
}), onClear = _g.onClear, onClose = _g.onClose, isOpened = _g.isOpened, inputProps = _g.inputProps;
|
|
54
|
+
var _h = (0, useDateTime_1["default"])({
|
|
47
55
|
displayFormat: props.displayFormat,
|
|
48
|
-
dateTimeSeparator: (
|
|
56
|
+
dateTimeSeparator: (_f = props.dateTimeSeparator) !== null && _f !== void 0 ? _f : DATE_TIME_SEPARATOR,
|
|
49
57
|
input: props.input,
|
|
50
58
|
valueFormat: props.valueFormat,
|
|
51
59
|
useUTC: props.useUTC,
|
|
52
60
|
dateInUTC: props.dateInUTC
|
|
53
|
-
}), dateValueFormat =
|
|
61
|
+
}), dateValueFormat = _h.dateValueFormat, dateValue = _h.dateValue, timeValue = _h.timeValue, onDateSelect = _h.onDateSelect, onTimeSelect = _h.onTimeSelect;
|
|
54
62
|
// Calendar props
|
|
55
|
-
var calendarProps = (0, react_1.useMemo)(function () {
|
|
63
|
+
var calendarProps = (0, react_1.useMemo)(function () {
|
|
64
|
+
var _a;
|
|
65
|
+
return (__assign({ value: dateValue, onChange: onDateSelect, valueFormat: dateValueFormat }, ((props === null || props === void 0 ? void 0 : props.disabledDays)
|
|
66
|
+
? __assign(__assign({}, props.calendarProps), { pickerProps: __assign(__assign({}, (_a = props.calendarProps) === null || _a === void 0 ? void 0 : _a.pickerProps), { disabledDays: props.disabledDays }) }) : props.calendarProps)));
|
|
67
|
+
}, [dateValue, dateValueFormat, onDateSelect, props.calendarProps, props.disabledDays]);
|
|
56
68
|
// TimePanel props
|
|
57
69
|
var timePanelViewProps = (0, react_1.useMemo)(function () { return ({
|
|
58
70
|
onClose: onClose,
|
|
59
71
|
showHeader: true,
|
|
60
72
|
showNow: false,
|
|
61
73
|
value: timeValue,
|
|
62
|
-
onSelect: onTimeSelect
|
|
63
|
-
|
|
74
|
+
onSelect: onTimeSelect,
|
|
75
|
+
availableTime: props.availableTime,
|
|
76
|
+
minuteStep: props.minuteStep
|
|
77
|
+
}); }, [onClose, onTimeSelect, props.availableTime, props.minuteStep, timeValue]);
|
|
64
78
|
var viewProps = (0, react_1.useMemo)(function () { return ({
|
|
65
79
|
isOpened: isOpened,
|
|
66
80
|
onClear: onClear,
|
|
@@ -78,10 +92,7 @@ function DateTimeField(props) {
|
|
|
78
92
|
disabled: props.disabled,
|
|
79
93
|
style: props.style,
|
|
80
94
|
id: props.id
|
|
81
|
-
}); }, [
|
|
82
|
-
calendarProps, inputProps, isOpened, maskInputRef, onClear, onClose, props.className, props.disabled, props.errors,
|
|
83
|
-
props.icon, props.id, props.placeholder, props.showRemove, props.size, props.style, timePanelViewProps,
|
|
84
|
-
]);
|
|
95
|
+
}); }, [calendarProps, inputProps, isOpened, maskInputRef, onClear, onClose, props.className, props.disabled, props.errors, props.icon, props.id, props.placeholder, props.showRemove, props.size, props.style, timePanelViewProps]);
|
|
85
96
|
return components.ui.renderView(props.view || 'form.DateTimeFieldView', viewProps);
|
|
86
97
|
}
|
|
87
98
|
DateTimeField.defaultProps = {
|
|
@@ -93,11 +104,6 @@ DateTimeField.defaultProps = {
|
|
|
93
104
|
useUTC: false,
|
|
94
105
|
dateInUTC: false,
|
|
95
106
|
icon: true,
|
|
96
|
-
|
|
97
|
-
dateMode: 'dd/mm/yyyy',
|
|
98
|
-
timeMode: 'HH:MM',
|
|
99
|
-
dateSeparator: '.',
|
|
100
|
-
dateTimeSeparator: DATE_TIME_SEPARATOR
|
|
101
|
-
})
|
|
107
|
+
minuteStep: 1
|
|
102
108
|
};
|
|
103
109
|
exports["default"] = (0, fieldWrapper_1["default"])(enums_1.FieldEnum.DATE_TIME_FIELD, DateTimeField);
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
14
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
15
|
+
if (ar || !(i in from)) {
|
|
16
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
17
|
+
ar[i] = from[i];
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
21
|
+
};
|
|
22
|
+
exports.__esModule = true;
|
|
23
|
+
exports.createDateTimeMask = void 0;
|
|
24
|
+
var kit_1 = require("@maskito/kit");
|
|
25
|
+
var utils_1 = require("@steroidsjs/core/ui/form/TimeField/utils");
|
|
26
|
+
var TIME_REGEXP = /(\d{2}:\d{2})$/;
|
|
27
|
+
var clampTime = function (minutes, fromMin, toMin, step) {
|
|
28
|
+
// Жёсткие границы
|
|
29
|
+
if (minutes <= fromMin) {
|
|
30
|
+
return fromMin;
|
|
31
|
+
}
|
|
32
|
+
if (minutes >= toMin) {
|
|
33
|
+
return toMin;
|
|
34
|
+
}
|
|
35
|
+
if (!step || step <= 1) {
|
|
36
|
+
return minutes;
|
|
37
|
+
}
|
|
38
|
+
// Округление относительно from
|
|
39
|
+
var diff = minutes - fromMin;
|
|
40
|
+
return fromMin + Math.floor(diff / step) * step;
|
|
41
|
+
};
|
|
42
|
+
var createDateTimeMask = function (options) {
|
|
43
|
+
var _a;
|
|
44
|
+
var baseMask = (0, kit_1.maskitoDateTimeOptionsGenerator)({
|
|
45
|
+
dateMode: 'dd/mm/yyyy',
|
|
46
|
+
timeMode: 'HH:MM',
|
|
47
|
+
dateSeparator: '.',
|
|
48
|
+
min: options.min,
|
|
49
|
+
dateTimeSeparator: options.dateTimeSeparator
|
|
50
|
+
});
|
|
51
|
+
return __assign(__assign({}, baseMask), { postprocessors: __spreadArray(__spreadArray([], ((_a = baseMask.postprocessors) !== null && _a !== void 0 ? _a : []), true), [
|
|
52
|
+
function (_a) {
|
|
53
|
+
var value = _a.value, selection = _a.selection;
|
|
54
|
+
if (!value) {
|
|
55
|
+
return { value: value, selection: selection };
|
|
56
|
+
}
|
|
57
|
+
var match = value.match(TIME_REGEXP);
|
|
58
|
+
if (!match) {
|
|
59
|
+
return { value: value, selection: selection };
|
|
60
|
+
}
|
|
61
|
+
var time = match[1];
|
|
62
|
+
var minutes = (0, utils_1.timeToMinutes)(time);
|
|
63
|
+
var fromMin = (options === null || options === void 0 ? void 0 : options.from)
|
|
64
|
+
? (0, utils_1.timeToMinutes)(options.from.padStart(5, '0'))
|
|
65
|
+
: 0;
|
|
66
|
+
var toMin = (options === null || options === void 0 ? void 0 : options.to)
|
|
67
|
+
? (0, utils_1.timeToMinutes)(options.to.padStart(5, '0'))
|
|
68
|
+
: 24 * 60 - 1;
|
|
69
|
+
var clamped = clampTime(minutes, fromMin, toMin, options === null || options === void 0 ? void 0 : options.minuteStep);
|
|
70
|
+
var normalizedTime = (0, utils_1.minutesToTime)(clamped);
|
|
71
|
+
if (normalizedTime === time) {
|
|
72
|
+
return { value: value, selection: selection };
|
|
73
|
+
}
|
|
74
|
+
return {
|
|
75
|
+
value: value.replace(TIME_REGEXP, normalizedTime),
|
|
76
|
+
selection: selection
|
|
77
|
+
};
|
|
78
|
+
},
|
|
79
|
+
], false) });
|
|
80
|
+
};
|
|
81
|
+
exports.createDateTimeMask = createDateTimeMask;
|
|
@@ -57,6 +57,29 @@ export interface IDateTimeRangeFieldProps extends Omit<IDateInputStateInput, 'in
|
|
|
57
57
|
*/
|
|
58
58
|
to: MaskitoOptions;
|
|
59
59
|
};
|
|
60
|
+
/**
|
|
61
|
+
* Ограничение доступных дат.
|
|
62
|
+
*/
|
|
63
|
+
disabledDays?: {
|
|
64
|
+
after?: Date;
|
|
65
|
+
before?: Date;
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* Разделитель для даты и времени, не влияет на отображение
|
|
69
|
+
*/
|
|
70
|
+
dateTimeSeparator?: string;
|
|
71
|
+
/**
|
|
72
|
+
* Ограничение доступного времени.
|
|
73
|
+
*/
|
|
74
|
+
availableTime?: {
|
|
75
|
+
from: string;
|
|
76
|
+
to: string;
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* Шаг минут
|
|
80
|
+
* @example 15
|
|
81
|
+
*/
|
|
82
|
+
minuteStep?: number;
|
|
60
83
|
/**
|
|
61
84
|
* Добавляет дополнительные кнопки к календарю
|
|
62
85
|
* true - будут отображены кнопки по-умолчанию
|
|
@@ -10,36 +10,13 @@ var __assign = (this && this.__assign) || function () {
|
|
|
10
10
|
};
|
|
11
11
|
return __assign.apply(this, arguments);
|
|
12
12
|
};
|
|
13
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
14
|
-
if (k2 === undefined) k2 = k;
|
|
15
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
16
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
17
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
18
|
-
}
|
|
19
|
-
Object.defineProperty(o, k2, desc);
|
|
20
|
-
}) : (function(o, m, k, k2) {
|
|
21
|
-
if (k2 === undefined) k2 = k;
|
|
22
|
-
o[k2] = m[k];
|
|
23
|
-
}));
|
|
24
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
25
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
26
|
-
}) : function(o, v) {
|
|
27
|
-
o["default"] = v;
|
|
28
|
-
});
|
|
29
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
30
|
-
if (mod && mod.__esModule) return mod;
|
|
31
|
-
var result = {};
|
|
32
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
33
|
-
__setModuleDefault(result, mod);
|
|
34
|
-
return result;
|
|
35
|
-
};
|
|
36
13
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
37
14
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
38
15
|
};
|
|
39
16
|
exports.__esModule = true;
|
|
40
|
-
var react_1 =
|
|
41
|
-
var kit_1 = require("@maskito/kit");
|
|
17
|
+
var react_1 = require("react");
|
|
42
18
|
var react_2 = require("@maskito/react");
|
|
19
|
+
var utils_1 = require("@steroidsjs/core/ui/form/DateTimeField/utils");
|
|
43
20
|
var useDateRange_1 = __importDefault(require("../../form/DateField/useDateRange"));
|
|
44
21
|
var useDateTime_1 = __importDefault(require("../../form/DateField/useDateTime"));
|
|
45
22
|
var useDateInputState_1 = __importDefault(require("../../form/DateField/useDateInputState"));
|
|
@@ -48,10 +25,26 @@ var hooks_1 = require("../../../hooks");
|
|
|
48
25
|
var enums_1 = require("../../../enums");
|
|
49
26
|
var DATE_TIME_SEPARATOR = ', ';
|
|
50
27
|
function DateTimeRangeField(props) {
|
|
51
|
-
var _a, _b;
|
|
28
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
|
|
52
29
|
var components = (0, hooks_1.useComponents)();
|
|
53
|
-
var maskInputFromRef = (0, react_2.useMaskito)({
|
|
54
|
-
|
|
30
|
+
var maskInputFromRef = (0, react_2.useMaskito)({
|
|
31
|
+
options: (_b = (_a = props.maskOptions) === null || _a === void 0 ? void 0 : _a.from) !== null && _b !== void 0 ? _b : (0, utils_1.createDateTimeMask)({
|
|
32
|
+
from: (_c = props.availableTime) === null || _c === void 0 ? void 0 : _c.from,
|
|
33
|
+
to: (_d = props.availableTime) === null || _d === void 0 ? void 0 : _d.to,
|
|
34
|
+
minuteStep: props.minuteStep,
|
|
35
|
+
min: (_f = (_e = props.disabledDays) === null || _e === void 0 ? void 0 : _e.before) !== null && _f !== void 0 ? _f : null,
|
|
36
|
+
dateTimeSeparator: (_g = props.dateTimeSeparator) !== null && _g !== void 0 ? _g : DATE_TIME_SEPARATOR
|
|
37
|
+
})
|
|
38
|
+
});
|
|
39
|
+
var maskInputToRef = (0, react_2.useMaskito)({
|
|
40
|
+
options: (_j = (_h = props.maskOptions) === null || _h === void 0 ? void 0 : _h.to) !== null && _j !== void 0 ? _j : (0, utils_1.createDateTimeMask)({
|
|
41
|
+
from: (_k = props.availableTime) === null || _k === void 0 ? void 0 : _k.from,
|
|
42
|
+
to: (_l = props.availableTime) === null || _l === void 0 ? void 0 : _l.to,
|
|
43
|
+
minuteStep: props.minuteStep,
|
|
44
|
+
min: (_o = (_m = props.disabledDays) === null || _m === void 0 ? void 0 : _m.before) !== null && _o !== void 0 ? _o : null,
|
|
45
|
+
dateTimeSeparator: (_p = props.dateTimeSeparator) !== null && _p !== void 0 ? _p : DATE_TIME_SEPARATOR
|
|
46
|
+
})
|
|
47
|
+
});
|
|
55
48
|
// Global onChange (from props)
|
|
56
49
|
var onChange = (0, react_1.useCallback)(function () {
|
|
57
50
|
var _a;
|
|
@@ -63,7 +56,7 @@ function DateTimeRangeField(props) {
|
|
|
63
56
|
}
|
|
64
57
|
}, [props.attributeFrom, props.attributeTo, props.inputFrom.value, props.inputTo.value, props.onChange]);
|
|
65
58
|
// Input 'from'
|
|
66
|
-
var
|
|
59
|
+
var _q = (0, useDateInputState_1["default"])({
|
|
67
60
|
displayFormat: props.displayFormat,
|
|
68
61
|
valueFormat: props.valueFormat,
|
|
69
62
|
input: props.inputFrom,
|
|
@@ -74,9 +67,9 @@ function DateTimeRangeField(props) {
|
|
|
74
67
|
useUTC: props.useUTC,
|
|
75
68
|
dateInUTC: props.dateInUTC,
|
|
76
69
|
onChange: onChange
|
|
77
|
-
}), isOpenedFrom =
|
|
70
|
+
}), isOpenedFrom = _q.isOpened, onCloseFrom = _q.onClose, inputPropsFrom = _q.inputProps, onClearFrom = _q.onClear, onNow = _q.onNow;
|
|
78
71
|
// Input 'to'
|
|
79
|
-
var
|
|
72
|
+
var _r = (0, useDateInputState_1["default"])({
|
|
80
73
|
displayFormat: props.displayFormat,
|
|
81
74
|
valueFormat: props.valueFormat,
|
|
82
75
|
input: props.inputTo,
|
|
@@ -87,24 +80,24 @@ function DateTimeRangeField(props) {
|
|
|
87
80
|
useUTC: props.useUTC,
|
|
88
81
|
dateInUTC: props.dateInUTC,
|
|
89
82
|
onChange: onChange
|
|
90
|
-
}), isOpenedTo =
|
|
91
|
-
var
|
|
83
|
+
}), isOpenedTo = _r.isOpened, onCloseTo = _r.onClose, inputPropsTo = _r.inputProps, onClearTo = _r.onClear;
|
|
84
|
+
var _s = (0, useDateTime_1["default"])({
|
|
92
85
|
displayFormat: props.displayFormat,
|
|
93
86
|
valueFormat: props.valueFormat,
|
|
94
87
|
dateTimeSeparator: DATE_TIME_SEPARATOR,
|
|
95
88
|
useUTC: props.useUTC,
|
|
96
89
|
dateInUTC: props.dateInUTC,
|
|
97
90
|
input: props.inputFrom
|
|
98
|
-
}), dateValueFormat =
|
|
99
|
-
var
|
|
91
|
+
}), dateValueFormat = _s.dateValueFormat, dateValueFrom = _s.dateValue, timeValueFrom = _s.timeValue, onDateFromSelect = _s.onDateSelect, onTimeFromSelect = _s.onTimeSelect;
|
|
92
|
+
var _t = (0, useDateTime_1["default"])({
|
|
100
93
|
displayFormat: props.displayFormat,
|
|
101
94
|
valueFormat: props.valueFormat,
|
|
102
95
|
dateTimeSeparator: DATE_TIME_SEPARATOR,
|
|
103
96
|
useUTC: props.useUTC,
|
|
104
97
|
dateInUTC: props.dateInUTC,
|
|
105
98
|
input: props.inputTo
|
|
106
|
-
}), dateValueTo =
|
|
107
|
-
var
|
|
99
|
+
}), dateValueTo = _t.dateValue, timeValueTo = _t.timeValue, onDateToSelect = _t.onDateSelect, onTimeToSelect = _t.onTimeSelect;
|
|
100
|
+
var _u = (0, useDateRange_1["default"])({
|
|
108
101
|
onClearFrom: onClearFrom,
|
|
109
102
|
onCloseTo: onCloseTo,
|
|
110
103
|
onCloseFrom: onCloseFrom,
|
|
@@ -117,8 +110,8 @@ function DateTimeRangeField(props) {
|
|
|
117
110
|
hasInitialFocus: props.hasInitialFocus,
|
|
118
111
|
displayFormat: props.displayFormat,
|
|
119
112
|
valueFormat: props.valueFormat
|
|
120
|
-
}), focus =
|
|
121
|
-
react_1
|
|
113
|
+
}), focus = _u.focus, onClose = _u.onClose, onClear = _u.onClear, extendedInputPropsFrom = _u.extendedInputPropsFrom, extendedInputPropsTo = _u.extendedInputPropsTo;
|
|
114
|
+
(0, react_1.useEffect)(function () {
|
|
122
115
|
if (extendedInputPropsFrom.ref && extendedInputPropsTo.ref) {
|
|
123
116
|
maskInputFromRef(extendedInputPropsFrom.ref.current);
|
|
124
117
|
maskInputToRef(extendedInputPropsTo.ref.current);
|
|
@@ -130,18 +123,13 @@ function DateTimeRangeField(props) {
|
|
|
130
123
|
maskInputToRef,
|
|
131
124
|
]);
|
|
132
125
|
// Calendar props
|
|
133
|
-
var calendarProps = (0, react_1.useMemo)(function () {
|
|
126
|
+
var calendarProps = (0, react_1.useMemo)(function () {
|
|
127
|
+
var _a;
|
|
128
|
+
return (__assign({ value: [dateValueFrom, dateValueTo], onChange: focus === 'from' ? onDateFromSelect : onDateToSelect, valueFormat: dateValueFormat }, ((props === null || props === void 0 ? void 0 : props.disabledDays)
|
|
129
|
+
? __assign(__assign({}, props.calendarProps), { pickerProps: __assign(__assign({}, (_a = props.calendarProps) === null || _a === void 0 ? void 0 : _a.pickerProps), { disabledDays: props.disabledDays }) }) : props.calendarProps)));
|
|
130
|
+
}, [dateValueFormat, dateValueFrom, dateValueTo, focus, onDateFromSelect, onDateToSelect, props.calendarProps, props.disabledDays]);
|
|
134
131
|
// TimePanel props
|
|
135
|
-
var timePanelViewProps = (0, react_1.useMemo)(function () { return (__assign({ value: focus === 'from' ? timeValueFrom : timeValueTo, onSelect: focus === 'from' ? onTimeFromSelect : onTimeToSelect, onNow: onNow, onClose: onClose, showNow: false, showHeader: true }, props.timePanelViewProps)); }, [
|
|
136
|
-
focus,
|
|
137
|
-
onClose,
|
|
138
|
-
onNow,
|
|
139
|
-
onTimeFromSelect,
|
|
140
|
-
onTimeToSelect,
|
|
141
|
-
props.timePanelViewProps,
|
|
142
|
-
timeValueFrom,
|
|
143
|
-
timeValueTo,
|
|
144
|
-
]);
|
|
132
|
+
var timePanelViewProps = (0, react_1.useMemo)(function () { return (__assign({ value: focus === 'from' ? timeValueFrom : timeValueTo, onSelect: focus === 'from' ? onTimeFromSelect : onTimeToSelect, onNow: onNow, onClose: onClose, showNow: false, showHeader: true, availableTime: props.availableTime, minuteStep: props.minuteStep }, props.timePanelViewProps)); }, [focus, onClose, onNow, onTimeFromSelect, onTimeToSelect, props.availableTime, props.minuteStep, props.timePanelViewProps, timeValueFrom, timeValueTo]);
|
|
145
133
|
var viewProps = (0, react_1.useMemo)(function () { return ({
|
|
146
134
|
onClear: onClear,
|
|
147
135
|
onClose: onClose,
|
|
@@ -178,18 +166,7 @@ DateTimeRangeField.defaultProps = {
|
|
|
178
166
|
useUTC: false,
|
|
179
167
|
dateInUTC: false,
|
|
180
168
|
icon: true,
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
dateMode: 'dd/mm/yyyy',
|
|
184
|
-
timeMode: 'HH:MM',
|
|
185
|
-
dateSeparator: '.'
|
|
186
|
-
}),
|
|
187
|
-
to: (0, kit_1.maskitoDateTimeOptionsGenerator)({
|
|
188
|
-
dateMode: 'dd/mm/yyyy',
|
|
189
|
-
timeMode: 'HH:MM',
|
|
190
|
-
dateSeparator: '.'
|
|
191
|
-
})
|
|
192
|
-
},
|
|
193
|
-
rangeButtonsPosition: 'left-bottom'
|
|
169
|
+
rangeButtonsPosition: 'left-bottom',
|
|
170
|
+
minuteStep: 1
|
|
194
171
|
};
|
|
195
172
|
exports["default"] = (0, fieldWrapper_1["default"])(enums_1.FieldEnum.DATE_TIME_RANGE_FIELD, DateTimeRangeField, { attributeSuffixes: ['from', 'to'] });
|
|
@@ -166,6 +166,14 @@ export interface IDropDownFieldProps extends IFieldWrapperInputProps, Omit<IData
|
|
|
166
166
|
* Число в пикселях, больше которого не может быть выпадающее меню
|
|
167
167
|
*/
|
|
168
168
|
maxHeight?: number;
|
|
169
|
+
/**
|
|
170
|
+
* Callback-функция, которая вызывается при открытии DropDown
|
|
171
|
+
*/
|
|
172
|
+
onOpen?: () => void;
|
|
173
|
+
/**
|
|
174
|
+
* Сигнал, запрещающий отправку запроса на получение данных
|
|
175
|
+
*/
|
|
176
|
+
isFetchDisabled?: boolean;
|
|
169
177
|
[key: string]: any;
|
|
170
178
|
}
|
|
171
179
|
export interface IDropDownFieldViewProps extends IDropDownFieldProps {
|
|
@@ -120,7 +120,8 @@ function DropDownField(props) {
|
|
|
120
120
|
autoComplete: props.autoComplete,
|
|
121
121
|
autoFetch: props.autoFetch,
|
|
122
122
|
query: query,
|
|
123
|
-
initialSelectedIds: inputSelectedIds
|
|
123
|
+
initialSelectedIds: inputSelectedIds,
|
|
124
|
+
isFetchDisabled: props.isFetchDisabled
|
|
124
125
|
}), fetchRemote = _c.fetchRemote, items = _c.items, isLoading = _c.isLoading, isAutoComplete = _c.isAutoComplete, sourceItems = _c.sourceItems, dataProvider = __rest(_c, ["fetchRemote", "items", "isLoading", "isAutoComplete", "sourceItems"]);
|
|
125
126
|
// Data select
|
|
126
127
|
var _d = (0, hooks_1.useDataSelect)({
|
|
@@ -136,11 +137,15 @@ function DropDownField(props) {
|
|
|
136
137
|
hasCloseOnSelect: props.hasCloseOnSelect
|
|
137
138
|
}), isOpened = _d.isOpened, setIsOpened = _d.setIsOpened, setIsFocused = _d.setIsFocused, hoveredId = _d.hoveredId, setHoveredId = _d.setHoveredId, selectedIds = _d.selectedIds, setSelectedIds = _d.setSelectedIds, selectedItems = _d.selectedItems, setSelectedAll = _d.setSelectedAll, isSelectedAll = _d.isSelectedAll;
|
|
138
139
|
var onOpen = (0, react_1.useCallback)(function () {
|
|
140
|
+
// setIsLazyLoadEnabled(true);
|
|
139
141
|
setQuery('');
|
|
140
142
|
setIsFocused(true);
|
|
141
143
|
setIsOpened(true);
|
|
142
144
|
setHoveredId(null);
|
|
143
|
-
|
|
145
|
+
if (props.onOpen) {
|
|
146
|
+
props.onOpen();
|
|
147
|
+
}
|
|
148
|
+
}, [setHoveredId, setIsFocused, setIsOpened, props.onOpen]);
|
|
144
149
|
var onItemHover = (0, react_1.useCallback)(function (id) {
|
|
145
150
|
setHoveredId(id);
|
|
146
151
|
}, [setHoveredId]);
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { MaskitoOptions } from '@maskito/core';
|
|
1
2
|
import { IDateInputStateInput, IDateInputStateOutput } from '../../form/DateField/useDateInputState';
|
|
2
|
-
export interface ITimePanelViewProps extends Pick<ITimeFieldViewProps, 'value' | 'onClose' | 'onNow' | 'onSelect' | 'className'> {
|
|
3
|
+
export interface ITimePanelViewProps extends Pick<ITimeFieldViewProps, 'value' | 'onClose' | 'onNow' | 'onSelect' | 'className' | 'availableTime' | 'minuteStep'> {
|
|
3
4
|
showHeader?: boolean;
|
|
4
5
|
showNow?: boolean;
|
|
5
6
|
}
|
|
@@ -21,9 +22,25 @@ export interface ITimeFieldProps extends IDateInputStateInput, IUiComponent {
|
|
|
21
22
|
* Свойства для компонента панели времени
|
|
22
23
|
*/
|
|
23
24
|
timePanelViewProps?: any;
|
|
25
|
+
/**
|
|
26
|
+
* Опции маски для поля ввода
|
|
27
|
+
*/
|
|
28
|
+
maskOptions?: MaskitoOptions;
|
|
29
|
+
/**
|
|
30
|
+
* Ограничение доступного времени.
|
|
31
|
+
*/
|
|
32
|
+
availableTime?: {
|
|
33
|
+
from: string;
|
|
34
|
+
to: string;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Шаг минут
|
|
38
|
+
* @example 15
|
|
39
|
+
*/
|
|
40
|
+
minuteStep?: number;
|
|
24
41
|
[key: string]: any;
|
|
25
42
|
}
|
|
26
|
-
export interface ITimeFieldViewProps extends IDateInputStateOutput, Pick<ITimeFieldProps, 'size' | 'errors' | 'showRemove' | 'noBorder' | 'className' | 'timePanelViewProps' | 'style'> {
|
|
43
|
+
export interface ITimeFieldViewProps extends IDateInputStateOutput, Pick<ITimeFieldProps, 'size' | 'errors' | 'showRemove' | 'noBorder' | 'className' | 'timePanelViewProps' | 'style' | 'availableTime' | 'minuteStep'> {
|
|
27
44
|
[key: string]: any;
|
|
28
45
|
}
|
|
29
46
|
declare const _default: import("../Field/fieldWrapper").FieldWrapperComponent<ITimeFieldProps>;
|