@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.
@@ -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 = __importStar(require("react"));
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)({ options: (_a = props.maskOptions) === null || _a === void 0 ? void 0 : _a.from });
53
- var maskInputToRef = (0, react_2.useMaskito)({ options: (_b = props.maskOptions) === null || _b === void 0 ? void 0 : _b.to });
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 _c = (0, useDateInputState_1["default"])({
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 = _c.isOpened, onCloseFrom = _c.onClose, inputPropsFrom = _c.inputProps, onClearFrom = _c.onClear;
63
+ }), isOpenedFrom = _j.isOpened, onCloseFrom = _j.onClose, inputPropsFrom = _j.inputProps, onClearFrom = _j.onClear;
75
64
  // Input 'to'
76
- var _d = (0, useDateInputState_1["default"])({
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 = _d.isOpened, onCloseTo = _d.onClose, inputPropsTo = _d.inputProps, onClearTo = _d.onClear;
86
- var _e = (0, useDateRange_1["default"])({
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 = _e.focus, onClose = _e.onClose, onClear = _e.onClear, extendedInputPropsFrom = _e.extendedInputPropsFrom, extendedInputPropsTo = _e.extendedInputPropsTo;
100
- react_1["default"].useEffect(function () {
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 () { return (__assign({ value: [props.inputFrom.value, props.inputTo.value], onChange: onDayClick, valueFormat: props.valueFormat, numberOfMonths: 2, showFooter: false }, props.calendarProps)); }, [onDayClick, props.calendarProps, props.inputFrom.value, props.inputTo.value, props.valueFormat]);
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)({ options: props.maskOptions });
34
- var _b = (0, useDateInputState_1["default"])({
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 = _b.onClear, onClose = _b.onClose, isOpened = _b.isOpened, inputProps = _b.inputProps;
46
- var _c = (0, useDateTime_1["default"])({
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: (_a = props.dateTimeSeparator) !== null && _a !== void 0 ? _a : DATE_TIME_SEPARATOR,
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 = _c.dateValueFormat, dateValue = _c.dateValue, timeValue = _c.timeValue, onDateSelect = _c.onDateSelect, onTimeSelect = _c.onTimeSelect;
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 () { return (__assign({ value: dateValue, onChange: onDateSelect, valueFormat: dateValueFormat }, props.calendarProps)); }, [dateValue, dateValueFormat, onDateSelect, props.calendarProps]);
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
- }); }, [onClose, onTimeSelect, timeValue]);
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
- maskOptions: (0, kit_1.maskitoDateTimeOptionsGenerator)({
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,8 @@
1
+ import { MaskitoOptions } from '@maskito/core';
2
+ export declare const createDateTimeMask: (options?: {
3
+ from?: string;
4
+ to?: string;
5
+ minuteStep?: number;
6
+ min?: Date;
7
+ dateTimeSeparator?: string;
8
+ }) => MaskitoOptions;
@@ -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 = __importStar(require("react"));
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)({ options: (_a = props.maskOptions) === null || _a === void 0 ? void 0 : _a.from });
54
- var maskInputToRef = (0, react_2.useMaskito)({ options: (_b = props.maskOptions) === null || _b === void 0 ? void 0 : _b.to });
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 _c = (0, useDateInputState_1["default"])({
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 = _c.isOpened, onCloseFrom = _c.onClose, inputPropsFrom = _c.inputProps, onClearFrom = _c.onClear, onNow = _c.onNow;
70
+ }), isOpenedFrom = _q.isOpened, onCloseFrom = _q.onClose, inputPropsFrom = _q.inputProps, onClearFrom = _q.onClear, onNow = _q.onNow;
78
71
  // Input 'to'
79
- var _d = (0, useDateInputState_1["default"])({
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 = _d.isOpened, onCloseTo = _d.onClose, inputPropsTo = _d.inputProps, onClearTo = _d.onClear;
91
- var _e = (0, useDateTime_1["default"])({
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 = _e.dateValueFormat, dateValueFrom = _e.dateValue, timeValueFrom = _e.timeValue, onDateFromSelect = _e.onDateSelect, onTimeFromSelect = _e.onTimeSelect;
99
- var _f = (0, useDateTime_1["default"])({
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 = _f.dateValue, timeValueTo = _f.timeValue, onDateToSelect = _f.onDateSelect, onTimeToSelect = _f.onTimeSelect;
107
- var _g = (0, useDateRange_1["default"])({
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 = _g.focus, onClose = _g.onClose, onClear = _g.onClear, extendedInputPropsFrom = _g.extendedInputPropsFrom, extendedInputPropsTo = _g.extendedInputPropsTo;
121
- react_1["default"].useEffect(function () {
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 () { return (__assign({ value: [dateValueFrom, dateValueTo], onChange: focus === 'from' ? onDateFromSelect : onDateToSelect, valueFormat: dateValueFormat }, props.calendarProps)); }, [dateValueFormat, dateValueFrom, dateValueTo, focus, onDateFromSelect, onDateToSelect, props.calendarProps]);
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
- maskOptions: {
182
- from: (0, kit_1.maskitoDateTimeOptionsGenerator)({
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
- }, [setHoveredId, setIsFocused, setIsOpened]);
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>;