@synerise/ds-date-range-picker 0.20.9 → 0.21.2

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/CHANGELOG.md CHANGED
@@ -3,6 +3,56 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [0.21.2](https://github.com/Synerise/synerise-design/compare/@synerise/ds-date-range-picker@0.21.1...@synerise/ds-date-range-picker@0.21.2) (2023-04-14)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * **date-range-picker:** "more" dropdown trigger should toggle dropdown ([7083de0](https://github.com/Synerise/synerise-design/commit/7083de02906eb79a2274ef952b2cbd2c8122e1a7))
12
+ * **date-range-picker:** add some it.todo in tests ([ec6f52a](https://github.com/Synerise/synerise-design/commit/ec6f52a69df81e2d14312850521bc47114a70bdc))
13
+ * **date-range-picker:** date range picker us notation fixes ([c17afe0](https://github.com/Synerise/synerise-design/commit/c17afe052c3c0226ab4ed2f7c25655a0d2e89a75))
14
+ * **date-range-picker:** disable AM mode for 12 PM lower limit ([237bc00](https://github.com/Synerise/synerise-design/commit/237bc00277fa3fa3cb6dacba14a2630da75706fe))
15
+ * **date-range-picker:** fixes filter unselect all ([592b48e](https://github.com/Synerise/synerise-design/commit/592b48eedc876dd8215790d2b73a08f3e0ade170))
16
+ * **date-range-picker:** fixes issues with range cloning in old filters ([15fc3b4](https://github.com/Synerise/synerise-design/commit/15fc3b4878e761e2685cda99afdfd1ff590e2ac4))
17
+ * **date-range-picker:** month filter US notation fixes ([06ce486](https://github.com/Synerise/synerise-design/commit/06ce4861a1cc468b15ba01b82f75eca374f96f0f))
18
+ * **date-range-picker:** rangePicker 12HoursClock disabling options fix ([5de9505](https://github.com/Synerise/synerise-design/commit/5de95050e786821892557528cd3a61a0b5eadcbf))
19
+ * **date-range-picker:** tests fixes ([68935f3](https://github.com/Synerise/synerise-design/commit/68935f394b102e4af8cb1f04f314275cb45a41bb))
20
+ * **date-range-picker:** uS_NOTATION_MONTH_DAYS_INDEXES order fix ([1e1f701](https://github.com/Synerise/synerise-design/commit/1e1f701521a8a50c21f33bcf476cf41449e5c0f2))
21
+
22
+
23
+
24
+
25
+
26
+ ## [0.21.1](https://github.com/Synerise/synerise-design/compare/@synerise/ds-date-range-picker@0.21.0...@synerise/ds-date-range-picker@0.21.1) (2023-04-12)
27
+
28
+
29
+ ### Bug Fixes
30
+
31
+ * **date-range-picker:** adds separated translation key indexes ([6e899e9](https://github.com/Synerise/synerise-design/commit/6e899e99800ba26f81faf22650698b27529acb95))
32
+
33
+
34
+
35
+
36
+
37
+ # [0.21.0](https://github.com/Synerise/synerise-design/compare/@synerise/ds-date-range-picker@0.20.9...@synerise/ds-date-range-picker@0.21.0) (2023-04-12)
38
+
39
+
40
+ ### Bug Fixes
41
+
42
+ * **date-range-picker:** addsus notation support to monthly scheduler ([7cef538](https://github.com/Synerise/synerise-design/commit/7cef5388ee1e50b9f147e089bc2e88d4f6706c3f))
43
+ * **date-range-picker:** fixes to support long display of days ([496e467](https://github.com/Synerise/synerise-design/commit/496e467e21d2071c8ab13a0b217332abb6e2cfc0))
44
+ * **date-range-picker:** now button should not be left focused ([382dd26](https://github.com/Synerise/synerise-design/commit/382dd268e23337036933a5a420459e0748a7c170))
45
+ * **date-range-picker:** prevent end time clearing to current time ([5e4cfb6](https://github.com/Synerise/synerise-design/commit/5e4cfb62b4a4bf50fb1fafc1497b146d2b31ad7c))
46
+
47
+
48
+ ### Features
49
+
50
+ * **date-range-picker:** exposes a standalone monthly scheduler ([d73d59c](https://github.com/Synerise/synerise-design/commit/d73d59c2364fc4e9a6f8a1b2daeb306da8a9dc89))
51
+
52
+
53
+
54
+
55
+
6
56
  ## [0.20.9](https://github.com/Synerise/synerise-design/compare/@synerise/ds-date-range-picker@0.20.8...@synerise/ds-date-range-picker@0.20.9) (2023-04-05)
7
57
 
8
58
  **Note:** Version bump only for package @synerise/ds-date-range-picker
@@ -0,0 +1,4 @@
1
+ import * as React from 'react';
2
+ import { MonthlyProps } from './Monthly.types';
3
+ declare const Monthly: React.FC<MonthlyProps>;
4
+ export default Monthly;
@@ -0,0 +1,372 @@
1
+ function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
+
3
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
4
+
5
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
6
+
7
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
8
+
9
+ import * as React from 'react';
10
+ import { useIntl } from 'react-intl';
11
+ import * as dayjs from 'dayjs';
12
+ import { v4 as uuid } from 'uuid';
13
+ import { useDataFormat } from '@synerise/ds-data-format';
14
+ import RangeFormContainer from '../../../Shared/TimeWindow/RangeFormContainer/RangeFormContainer';
15
+ import { SelectionCount, SelectionHint, AddButton } from '../../../Shared';
16
+ import Grid from '../../../Shared/TimeWindow/Grid/Grid';
17
+ import Day from '../../../Shared/TimeWindow/Day/Day';
18
+ import * as S from '../../../RangeFilter.styles';
19
+ import { useShiftAndControlKeys } from '../hooks/useShiftAndControlKeys';
20
+ import { canAddAnotherRange, haveActiveDaysCommonRange, range } from './utils';
21
+ import { DEFAULT_RANGE_START, DEFAULT_RANGE_END, DEFAULT_TIME_FORMAT, EMPTY_OBJECT, DEFAULT_MAX_ENTRIES, RENDER_EMPTY_NODE_FN, NOOP } from '../constants';
22
+ import { MONTH_DAYS, DAYS_OF_PERIOD_ENUM, COUNTED_FROM_ENUM, MONTHLY_SCHEDULER_INTL_KEYS_NTH_WEEK, MONTHLY_SCHEDULER_INTL_KEYS_WEEKDAYS_LONG, MONTHLY_SCHEDULER_INTL_KEYS_WEEKDAYS_SHORT } from '../../../constants';
23
+ import { US_NOTATION_WEEK_DAYS_INDEXES } from '../../../Shared/TimeWindow/constants/timeWindow.constants';
24
+
25
+ var Monthly = function Monthly(_ref) {
26
+ var _ref$maxEntries = _ref.maxEntries,
27
+ maxEntries = _ref$maxEntries === void 0 ? DEFAULT_MAX_ENTRIES : _ref$maxEntries,
28
+ _ref$valueSelectionMo = _ref.valueSelectionMode,
29
+ valueSelectionMode = _ref$valueSelectionMo === void 0 ? ['Hour', 'Range'] : _ref$valueSelectionMo,
30
+ _ref$onChange = _ref.onChange,
31
+ onChange = _ref$onChange === void 0 ? NOOP : _ref$onChange,
32
+ timeFormat = _ref.timeFormat,
33
+ valueFormatOptions = _ref.valueFormatOptions,
34
+ value = _ref.value,
35
+ timePickerProps = _ref.timePickerProps,
36
+ disabled = _ref.disabled,
37
+ _ref$periodType = _ref.periodType,
38
+ periodType = _ref$periodType === void 0 ? DAYS_OF_PERIOD_ENUM.DAY_OF_MONTH : _ref$periodType,
39
+ _ref$countedFrom = _ref.countedFrom,
40
+ countedFrom = _ref$countedFrom === void 0 ? COUNTED_FROM_ENUM.BEGINNING : _ref$countedFrom;
41
+ var defaultDayValue = React.useMemo(function () {
42
+ return {
43
+ start: DEFAULT_RANGE_START,
44
+ stop: DEFAULT_RANGE_END,
45
+ restricted: false,
46
+ display: false,
47
+ inverted: false,
48
+ mode: valueSelectionMode[0]
49
+ };
50
+ }, [valueSelectionMode]);
51
+
52
+ var _React$useState = React.useState(Object.keys(value)),
53
+ filteredSchedule = _React$useState[0],
54
+ setFilteredSchedule = _React$useState[1];
55
+
56
+ var _React$useState2 = React.useState([]),
57
+ activeDays = _React$useState2[0],
58
+ setActiveDays = _React$useState2[1];
59
+
60
+ var ref = React.useRef();
61
+
62
+ var _useShiftAndControlKe = useShiftAndControlKeys(ref),
63
+ controlKeyPressed = _useShiftAndControlKe[0],
64
+ shiftKeyPressed = _useShiftAndControlKe[1];
65
+
66
+ var intl = useIntl();
67
+
68
+ var _useDataFormat = useDataFormat(),
69
+ isSundayFirstWeekDay = _useDataFormat.isSundayFirstWeekDay;
70
+
71
+ var allKeys = React.useMemo(function () {
72
+ if (periodType === DAYS_OF_PERIOD_ENUM.DAY_OF_WEEK) {
73
+ if (isSundayFirstWeekDay) {
74
+ var keys = [];
75
+ range(0, 5).forEach(function (i) {
76
+ keys = [].concat(keys, US_NOTATION_WEEK_DAYS_INDEXES.map(function (index) {
77
+ return index + 7 * i;
78
+ }));
79
+ });
80
+ return keys;
81
+ }
82
+
83
+ return range(0, 5 * 7);
84
+ }
85
+
86
+ return range(0, 31);
87
+ }, [periodType, isSundayFirstWeekDay]);
88
+
89
+ var getGridSettings = function getGridSettings() {
90
+ var _settings;
91
+
92
+ var settings = (_settings = {}, _settings[DAYS_OF_PERIOD_ENUM.DAY_OF_MONTH] = {
93
+ numberOfDays: 31,
94
+ reverseGroup: 1,
95
+ inverted: countedFrom === COUNTED_FROM_ENUM.ENDING
96
+ }, _settings[DAYS_OF_PERIOD_ENUM.DAY_OF_WEEK] = {
97
+ numberOfDays: 7 * 5,
98
+ reverseGroup: 7,
99
+ labelInverted: countedFrom === COUNTED_FROM_ENUM.ENDING,
100
+ inverted: countedFrom === COUNTED_FROM_ENUM.ENDING,
101
+ rowLabelFormatter: function rowLabelFormatter(rowIndex) {
102
+ return intl.formatMessage(MONTHLY_SCHEDULER_INTL_KEYS_NTH_WEEK[rowIndex]);
103
+ }
104
+ }, _settings);
105
+ return settings[periodType];
106
+ };
107
+
108
+ React.useEffect(function () {
109
+ setFilteredSchedule(Object.keys(value));
110
+ }, [value]);
111
+ var removeEmptyEntries = React.useCallback(function (monthlySchedule) {
112
+ var emptyEntries = Object.keys(monthlySchedule).filter(function (key) {
113
+ return Object.keys(monthlySchedule[key]).length === 0;
114
+ });
115
+ var scheduleToUpdate = monthlySchedule;
116
+ emptyEntries.forEach(function (emptyEntry) {
117
+ delete scheduleToUpdate[emptyEntry];
118
+ });
119
+ onChange(scheduleToUpdate);
120
+ }, [onChange]);
121
+ React.useEffect(function () {
122
+ var entriesWithActiveDaysValue = Object.keys(value).filter(function (id) {
123
+ return activeDays.every(function (day) {
124
+ return !!value[id][day] && haveActiveDaysCommonRange(value[id], activeDays);
125
+ });
126
+ });
127
+ removeEmptyEntries(value);
128
+ setFilteredSchedule(entriesWithActiveDaysValue);
129
+ }, [value, activeDays, removeEmptyEntries]);
130
+ var handleDayTimeChange = React.useCallback(function (dayValue, dayKey, guid) {
131
+ var updatedSchedule = value;
132
+ var start = dayValue[0],
133
+ end = dayValue[1];
134
+
135
+ if (dayKey instanceof Array) {
136
+ dayKey.forEach(function (day) {
137
+ updatedSchedule[guid][day] = _objectSpread({}, value[guid][day], {
138
+ restricted: true,
139
+ start: start ? dayjs(start).format(DEFAULT_TIME_FORMAT) : undefined,
140
+ stop: end ? dayjs(end).format(DEFAULT_TIME_FORMAT) : undefined
141
+ });
142
+ });
143
+ } else {
144
+ updatedSchedule[guid][dayKey] = _objectSpread({}, value[guid][dayKey], {
145
+ restricted: true,
146
+ start: start ? dayjs(start).format(DEFAULT_TIME_FORMAT) : undefined,
147
+ stop: end ? dayjs(end).format(DEFAULT_TIME_FORMAT) : undefined
148
+ });
149
+ }
150
+
151
+ onChange(updatedSchedule);
152
+ }, [value, onChange]);
153
+
154
+ var _getDayValue = React.useCallback(function (dayKey, guid) {
155
+ if (typeof dayKey === 'number' && value[guid] && !!value[guid][dayKey]) {
156
+ return value[guid][dayKey];
157
+ }
158
+
159
+ return defaultDayValue;
160
+ }, [value, defaultDayValue]);
161
+
162
+ var handleModeChange = React.useCallback(function (selectedMode, dayKeys, guid) {
163
+ var updatedSchedule = value;
164
+ dayKeys.forEach(function (day) {
165
+ updatedSchedule[guid][day] = _objectSpread({}, value[guid][day], {
166
+ mode: selectedMode
167
+ });
168
+ });
169
+ onChange(updatedSchedule);
170
+ }, [value, onChange]);
171
+ var handleRangeDelete = React.useCallback(function (guid, activeDaysArray) {
172
+ var updatedSchedule = value;
173
+ activeDaysArray.forEach(function (activeDay) {
174
+ delete updatedSchedule[guid][activeDay];
175
+ });
176
+ onChange(_objectSpread({}, updatedSchedule));
177
+ }, [value, onChange]);
178
+ var dayWeekFormatter = React.useCallback(function (dayKey, _long) {
179
+ var weekStartIndex = Math.floor(dayKey / 7);
180
+ var dayOfWeek = dayKey - weekStartIndex * 7;
181
+ var weekday = intl.formatMessage(MONTHLY_SCHEDULER_INTL_KEYS_WEEKDAYS_LONG[dayOfWeek]);
182
+ var nthWeek = intl.formatMessage(MONTHLY_SCHEDULER_INTL_KEYS_NTH_WEEK[weekStartIndex]);
183
+ return _long ? nthWeek + " " + weekday : intl.formatMessage(MONTHLY_SCHEDULER_INTL_KEYS_WEEKDAYS_SHORT[dayOfWeek]);
184
+ }, [intl]);
185
+ var dayMonthFormatter = React.useCallback(function (dayKey) {
186
+ var locale = intl.locale.substring(0, 2);
187
+ return MONTH_DAYS(locale)[dayKey];
188
+ }, [intl]);
189
+ var dayFormatter = React.useCallback(function (dayKey, _long2) {
190
+ if (periodType === DAYS_OF_PERIOD_ENUM.DAY_OF_WEEK) {
191
+ return dayWeekFormatter(dayKey, _long2);
192
+ }
193
+
194
+ return dayMonthFormatter(dayKey);
195
+ }, [periodType, dayWeekFormatter, dayMonthFormatter]);
196
+ var checkDay = React.useCallback(function (dayKey) {
197
+ setActiveDays([dayKey]);
198
+ }, []);
199
+ var getDayLabel = React.useCallback(function (dayKey, _long3) {
200
+ return dayFormatter(dayKey, _long3 || false);
201
+ }, [dayFormatter]);
202
+ var excludeDayFromActive = React.useCallback(function (dayKey) {
203
+ setActiveDays(activeDays.filter(function (day) {
204
+ return day !== dayKey;
205
+ }));
206
+ }, [activeDays]);
207
+ var isDayRestricted = React.useCallback(function (dayKey) {
208
+ return Object.keys(value).some(function (key) {
209
+ return !!value[key][dayKey];
210
+ });
211
+ }, [value]);
212
+ var removeDaySelection = React.useCallback(function (dayKey) {
213
+ var updatedSchedule = value;
214
+ Object.keys(value).forEach(function (key) {
215
+ delete updatedSchedule[key][dayKey];
216
+ });
217
+ excludeDayFromActive(dayKey);
218
+ onChange(updatedSchedule);
219
+ }, [value, onChange, excludeDayFromActive]);
220
+ var uncheckActiveDay = React.useCallback(function (dayKey) {
221
+ removeDaySelection(dayKey);
222
+ }, [removeDaySelection]);
223
+ var handleSelectAll = React.useCallback(function () {
224
+ setActiveDays(allKeys);
225
+ }, [allKeys]);
226
+ var handleUnselectAll = React.useCallback(function () {
227
+ setActiveDays([]);
228
+ }, []);
229
+ var checkActiveDay = React.useCallback(function (dayKey) {
230
+ if (!isDayRestricted(dayKey)) {
231
+ checkDay(dayKey);
232
+ }
233
+
234
+ var updatedActiveDay = [];
235
+
236
+ if (controlKeyPressed) {
237
+ updatedActiveDay = activeDays.includes(dayKey) ? activeDays : [].concat(activeDays, [dayKey]);
238
+ } else if (activeDays.length > 0 && shiftKeyPressed) {
239
+ updatedActiveDay = activeDays[0] < dayKey ? range(+activeDays[0], +dayKey + 1) : range(+dayKey, +activeDays[0] + 1);
240
+ } else {
241
+ updatedActiveDay = [dayKey];
242
+ }
243
+
244
+ setActiveDays(updatedActiveDay);
245
+ }, [checkDay, isDayRestricted, activeDays, controlKeyPressed, shiftKeyPressed]);
246
+ var handleToggleDay = React.useCallback(function (dayKey, forcedState) {
247
+ if (typeof forcedState !== 'undefined') {
248
+ if (controlKeyPressed && forcedState) {
249
+ activeDays.includes(dayKey) ? excludeDayFromActive(dayKey) : checkActiveDay(dayKey);
250
+ return;
251
+ }
252
+
253
+ forcedState ? checkActiveDay(dayKey) : uncheckActiveDay(dayKey);
254
+ } else {
255
+ activeDays.includes(dayKey) ? uncheckActiveDay(dayKey) : checkActiveDay(dayKey);
256
+ }
257
+ }, [controlKeyPressed, activeDays, uncheckActiveDay, checkActiveDay, excludeDayFromActive]);
258
+ var renderDay = React.useCallback(function (dayKey) {
259
+ var isActive = activeDays.includes(dayKey);
260
+ return /*#__PURE__*/React.createElement(Day, {
261
+ key: dayKey,
262
+ dayKey: dayKey,
263
+ "data-attr": dayKey,
264
+ label: getDayLabel(dayKey),
265
+ restricted: isDayRestricted(dayKey),
266
+ active: isActive,
267
+ readOnly: disabled,
268
+ intl: intl,
269
+ onToggle: handleToggleDay,
270
+ texts: EMPTY_OBJECT
271
+ });
272
+ }, [activeDays, intl, getDayLabel, handleToggleDay, isDayRestricted, disabled]);
273
+ var handleRangeAdd = React.useCallback(function () {
274
+ var _objectSpread2;
275
+
276
+ var updatedDay = {};
277
+ var guid = Object.keys(value).find(function (key) {
278
+ return activeDays.every(function (day) {
279
+ return value[key][day] === undefined;
280
+ });
281
+ });
282
+ activeDays.forEach(function (day) {
283
+ updatedDay[day] = defaultDayValue;
284
+ });
285
+ var restOfScheduleObject = guid ? value[guid] : EMPTY_OBJECT;
286
+
287
+ var updatedSchedule = _objectSpread({}, value, (_objectSpread2 = {}, _objectSpread2[guid || uuid()] = _objectSpread({}, restOfScheduleObject, {}, updatedDay), _objectSpread2));
288
+
289
+ onChange(updatedSchedule);
290
+ }, [value, activeDays, defaultDayValue, onChange]);
291
+ var renderGridTitle = React.useCallback(function (count) {
292
+ return /*#__PURE__*/React.createElement(SelectionCount, {
293
+ selectedDayCount: count,
294
+ label: intl.formatMessage({
295
+ id: 'DS.DATE-RANGE-PICKER.SELECTED',
296
+ defaultMessage: 'Selected'
297
+ })
298
+ });
299
+ }, [intl]);
300
+ var canAddRange = canAddAnotherRange(value, activeDays, maxEntries);
301
+ var isAnyDaySelected = activeDays.length > 0;
302
+ var shouldRenderAddButton = isAnyDaySelected && filteredSchedule.length < maxEntries && canAddRange && !disabled;
303
+ return /*#__PURE__*/React.createElement(S.NewFilterContainer, {
304
+ ref: ref
305
+ }, /*#__PURE__*/React.createElement(Grid, _extends({
306
+ reverseGroup: 0,
307
+ onUnselectAll: handleUnselectAll,
308
+ onSelectAll: handleSelectAll,
309
+ showUnselectAll: Boolean(activeDays.length),
310
+ showSelectAll: true,
311
+ renderDay: renderDay,
312
+ keys: allKeys,
313
+ days: EMPTY_OBJECT,
314
+ intl: intl,
315
+ numberOfDays: 7,
316
+ numberOfDaysPerRow: 7,
317
+ texts: EMPTY_OBJECT,
318
+ title: renderGridTitle(activeDays.length)
319
+ }, getGridSettings())), isAnyDaySelected && filteredSchedule.map(function (guid, index) {
320
+ return /*#__PURE__*/React.createElement(RangeFormContainer, {
321
+ days: EMPTY_OBJECT,
322
+ onChange: NOOP,
323
+ key: "value-range-" + guid,
324
+ onDayTimeChange: function onDayTimeChange(dayValue, dayKey) {
325
+ handleDayTimeChange(dayValue, dayKey, guid);
326
+ },
327
+ texts: EMPTY_OBJECT,
328
+ onMultipleDayTimeChange: function onMultipleDayTimeChange(dates) {
329
+ return handleDayTimeChange(dates, activeDays, guid);
330
+ },
331
+ dayKeys: activeDays // eslint-disable-next-line @typescript-eslint/no-explicit-any
332
+ ,
333
+ getDayLabel: getDayLabel,
334
+ activeDays: activeDays,
335
+ getDayValue: function getDayValue(dayKey) {
336
+ return _getDayValue(dayKey, guid);
337
+ },
338
+ onRangeDelete: disabled ? undefined : function () {
339
+ return handleRangeDelete(guid, activeDays);
340
+ },
341
+ onModeChange: function onModeChange(mode) {
342
+ return handleModeChange(mode, activeDays, guid);
343
+ },
344
+ valueSelectionModes: valueSelectionMode,
345
+ hideHeader: index !== 0,
346
+ renderSuffix: RENDER_EMPTY_NODE_FN,
347
+ timePickerProps: timePickerProps,
348
+ timeFormat: timeFormat,
349
+ valueFormatOptions: valueFormatOptions,
350
+ disabled: disabled,
351
+ monthlyFilterPeriod: periodType
352
+ });
353
+ }), isAnyDaySelected && !canAddRange && /*#__PURE__*/React.createElement(SelectionHint, {
354
+ message: intl.formatMessage({
355
+ id: 'DS.DATE-RANGE-PICKER.MAXIMUM-RANGES-MESSAGE',
356
+ defaultMessage: 'The maximum amount of ranges have been selected.'
357
+ })
358
+ }), shouldRenderAddButton && /*#__PURE__*/React.createElement(AddButton, {
359
+ label: intl.formatMessage({
360
+ id: 'DS.DATE-RANGE-PICKER.ADD-TIME',
361
+ defaultMessage: 'Add range'
362
+ }),
363
+ onClick: handleRangeAdd
364
+ }), !isAnyDaySelected && !disabled && /*#__PURE__*/React.createElement(SelectionHint, {
365
+ message: intl.formatMessage({
366
+ id: 'DS.DATE-RANGE-PICKER.SELECT-DAYS-DESCRIPTION',
367
+ defaultMessage: 'Select range.'
368
+ })
369
+ }));
370
+ };
371
+
372
+ export default Monthly;
@@ -0,0 +1,18 @@
1
+ import { DAYS_OF_PERIOD_ENUM, COUNTED_FROM_ENUM } from '../../../constants';
2
+ import { DayOptions } from '../../../Shared/TimeWindow/TimeWindow.types';
3
+ import { DateLimitMode } from '../../../Shared/TimeWindow/RangeFormContainer/RangeForm/RangeForm.types';
4
+ import { FilterBaseProps } from '../Filters.types';
5
+ import { WithDisabledProp } from '../../../RangeFilter.types';
6
+ export declare type MonthlyScheduleDayValue = DayOptions & {
7
+ mode: DateLimitMode;
8
+ };
9
+ export declare type MonthlySchedule = {
10
+ [guid: string]: Record<DayOfMonthIndex, MonthlyScheduleDayValue>;
11
+ };
12
+ export declare type DayOfMonthIndex = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31;
13
+ export declare type MonthlyProps = {
14
+ value: MonthlySchedule;
15
+ periodType: DAYS_OF_PERIOD_ENUM;
16
+ countedFrom: COUNTED_FROM_ENUM;
17
+ onChange: (value: MonthlyProps['value']) => void;
18
+ } & FilterBaseProps & WithDisabledProp;
@@ -0,0 +1,5 @@
1
+ import { DayOfMonthIndex, MonthlySchedule, MonthlyScheduleDayValue } from './Monthly.types';
2
+ import { DayKey } from '../../../Shared/TimeWindow/TimeWindow.types';
3
+ export declare const range: (start: number, stop: number) => number[];
4
+ export declare const haveActiveDaysCommonRange: (days: Record<DayOfMonthIndex, MonthlyScheduleDayValue>, activeDaysArray: DayKey[]) => boolean;
5
+ export declare const canAddAnotherRange: (schedule: MonthlySchedule, activeDays: DayKey[], maxRanges?: number) => boolean;
@@ -0,0 +1,43 @@
1
+ import { DEFAULT_MAX_ENTRIES } from '../constants';
2
+ export var range = function range(start, stop) {
3
+ var result = [];
4
+
5
+ for (var i = start; i < stop; i += 1) {
6
+ result.push(i);
7
+ }
8
+
9
+ return result;
10
+ };
11
+ export var haveActiveDaysCommonRange = function haveActiveDaysCommonRange(days, activeDaysArray) {
12
+ var previousDay;
13
+ var activeDaysHaveDifferentRanges = activeDaysArray.some(function (dayIndex) {
14
+ var _previousDay, _previousDay2;
15
+
16
+ var currentDay = days[dayIndex];
17
+
18
+ if (!currentDay) {
19
+ return true;
20
+ }
21
+
22
+ if (!previousDay) {
23
+ previousDay = currentDay;
24
+ return false;
25
+ }
26
+
27
+ var areRangeDifferent = (currentDay == null ? void 0 : currentDay.start) !== ((_previousDay = previousDay) == null ? void 0 : _previousDay.start) || (currentDay == null ? void 0 : currentDay.stop) !== ((_previousDay2 = previousDay) == null ? void 0 : _previousDay2.stop);
28
+ previousDay = currentDay;
29
+ return areRangeDifferent;
30
+ });
31
+ return !activeDaysHaveDifferentRanges;
32
+ };
33
+ export var canAddAnotherRange = function canAddAnotherRange(schedule, activeDays, maxRanges) {
34
+ if (maxRanges === void 0) {
35
+ maxRanges = DEFAULT_MAX_ENTRIES;
36
+ }
37
+
38
+ return Object.keys(schedule).length < maxRanges || Object.keys(schedule).some(function (key) {
39
+ return activeDays.every(function (day) {
40
+ return schedule[key][day] === undefined;
41
+ }) && !haveActiveDaysCommonRange(schedule[key], activeDays);
42
+ });
43
+ };
@@ -78,11 +78,11 @@ var Weekly = function Weekly(_ref) {
78
78
  onChange(scheduleToUpdate);
79
79
  }, [onChange]);
80
80
  React.useEffect(function () {
81
- var entriesWithActiveDaysValue = Object.keys(value).filter(function (id) {
81
+ var entriesWithActiveDaysValue = activeDays.length ? Object.keys(value).filter(function (id) {
82
82
  return activeDays.every(function (day) {
83
83
  return !!value[id][day] && haveActiveDaysCommonRange(value[id], activeDays);
84
84
  });
85
- });
85
+ }) : [];
86
86
  removeEmptyEntries(value);
87
87
  setFilteredSchedule(entriesWithActiveDaysValue);
88
88
  }, [value, activeDays, removeEmptyEntries]);
@@ -30,7 +30,7 @@ import AddButton from '../AddButton/AddButton';
30
30
  import RangeFormContainer from './RangeFormContainer/RangeFormContainer';
31
31
  import Day from './Day/Day';
32
32
  import SelectionHint from '../SelectionHint/SelectionHint';
33
- import { EU_NOTATION_WEEK_DAYS_INDEXES, US_NOTATION_WEEK_DAYS_INDEXES } from './constants/timeWindow.constants';
33
+ import { EU_NOTATION_MONTH_DAYS_INDEXES, EU_NOTATION_WEEK_DAYS_INDEXES, US_NOTATION_MONTH_DAYS_INDEXES, US_NOTATION_WEEK_DAYS_INDEXES } from './constants/timeWindow.constants';
34
34
  export var DEFAULT_LIMIT_MODE = 'Range';
35
35
 
36
36
  var TimeWindowBase = /*#__PURE__*/function (_React$PureComponent) {
@@ -153,8 +153,8 @@ var TimeWindowBase = /*#__PURE__*/function (_React$PureComponent) {
153
153
  _defineProperty(_assertThisInitialized(_this), "handleDayTimeChange", function (value, dayKey) {
154
154
  _this.handleDayChange(dayKey, {
155
155
  restricted: true,
156
- start: dayjs(value[0]).format(TIME_FORMAT),
157
- stop: dayjs(value[1]).format(TIME_FORMAT)
156
+ start: value[0] !== undefined ? dayjs(value[0]).format(TIME_FORMAT) : DEFAULT_RANGE_START,
157
+ stop: value[1] !== undefined ? dayjs(value[1]).format(TIME_FORMAT) : DEFAULT_RANGE_END
158
158
  });
159
159
  });
160
160
 
@@ -189,7 +189,8 @@ var TimeWindowBase = /*#__PURE__*/function (_React$PureComponent) {
189
189
 
190
190
  _defineProperty(_assertThisInitialized(_this), "handleClearSelection", function () {
191
191
  _this.setState({
192
- activeDays: []
192
+ activeDays: [],
193
+ isRangeDefined: false
193
194
  });
194
195
  });
195
196
 
@@ -263,17 +264,30 @@ var TimeWindowBase = /*#__PURE__*/function (_React$PureComponent) {
263
264
  });
264
265
  });
265
266
 
267
+ _defineProperty(_assertThisInitialized(_this), "replaceDaysIndexesForUSNotation", function (daysIndexes) {
268
+ var isSundayFirstWeekDay = _this.props.isSundayFirstWeekDay;
269
+ var stringifyDaysIndexes = JSON.stringify(daysIndexes);
270
+ var stringifyEUNotationWeekDaysIndexes = JSON.stringify(EU_NOTATION_WEEK_DAYS_INDEXES);
271
+ var stringifyEUNotationMonthDaysIndexes = JSON.stringify(EU_NOTATION_MONTH_DAYS_INDEXES);
272
+ var result = daysIndexes;
273
+
274
+ if (stringifyDaysIndexes === stringifyEUNotationWeekDaysIndexes && isSundayFirstWeekDay) {
275
+ result = US_NOTATION_WEEK_DAYS_INDEXES;
276
+ }
277
+
278
+ if (stringifyDaysIndexes === stringifyEUNotationMonthDaysIndexes && isSundayFirstWeekDay) {
279
+ result = US_NOTATION_MONTH_DAYS_INDEXES;
280
+ }
281
+
282
+ return result;
283
+ });
284
+
266
285
  _defineProperty(_assertThisInitialized(_this), "getAllKeys", function () {
267
286
  var _this$props7 = _this.props,
268
287
  numberOfDays = _this$props7.numberOfDays,
269
- customDays = _this$props7.customDays,
270
- isSundayFirstWeekDay = _this$props7.isSundayFirstWeekDay;
288
+ customDays = _this$props7.customDays;
271
289
  var keys = range(numberOfDays);
272
-
273
- if (JSON.stringify(keys) === JSON.stringify(EU_NOTATION_WEEK_DAYS_INDEXES) && isSundayFirstWeekDay) {
274
- keys = US_NOTATION_WEEK_DAYS_INDEXES;
275
- }
276
-
290
+ keys = _this.replaceDaysIndexesForUSNotation(keys).slice();
277
291
  if (customDays) keys = [].concat(keys, Object.keys(customDays));
278
292
  return keys;
279
293
  });
@@ -444,9 +458,10 @@ var TimeWindowBase = /*#__PURE__*/function (_React$PureComponent) {
444
458
  };
445
459
 
446
460
  _proto.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {
461
+ var activeDays = this.state.activeDays;
447
462
  var hasCommonRange = this.haveActiveDaysCommonRange();
448
463
 
449
- if (prevState.isRangeDefined !== hasCommonRange) {
464
+ if (prevState.isRangeDefined !== hasCommonRange && activeDays.length) {
450
465
  // eslint-disable-next-line react/no-did-update-set-state
451
466
  this.setState(function (state) {
452
467
  return _objectSpread({}, state, {
@@ -1,2 +1,4 @@
1
1
  export declare const EU_NOTATION_WEEK_DAYS_INDEXES: number[];
2
2
  export declare const US_NOTATION_WEEK_DAYS_INDEXES: number[];
3
+ export declare const EU_NOTATION_MONTH_DAYS_INDEXES: number[];
4
+ export declare const US_NOTATION_MONTH_DAYS_INDEXES: number[];
@@ -1,2 +1,4 @@
1
1
  export var EU_NOTATION_WEEK_DAYS_INDEXES = [0, 1, 2, 3, 4, 5, 6];
2
- export var US_NOTATION_WEEK_DAYS_INDEXES = [6, 0, 1, 2, 3, 4, 5];
2
+ export var US_NOTATION_WEEK_DAYS_INDEXES = [6, 0, 1, 2, 3, 4, 5];
3
+ export var EU_NOTATION_MONTH_DAYS_INDEXES = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34];
4
+ export var US_NOTATION_MONTH_DAYS_INDEXES = [6, 0, 1, 2, 3, 4, 5, 13, 7, 8, 9, 10, 11, 12, 20, 14, 15, 16, 17, 18, 19, 27, 21, 22, 23, 24, 25, 26, 34, 28, 29, 30, 31, 32, 33];
@@ -58,3 +58,15 @@ export declare const TYPES_DATA: {
58
58
  };
59
59
  };
60
60
  export declare const SPACE_UNICODE = "\u00A0";
61
+ export declare const MONTHLY_SCHEDULER_INTL_KEYS_NTH_WEEK: {
62
+ id: string;
63
+ defaultMessage: string;
64
+ }[];
65
+ export declare const MONTHLY_SCHEDULER_INTL_KEYS_WEEKDAYS_LONG: {
66
+ id: string;
67
+ defaultMessage: string;
68
+ }[];
69
+ export declare const MONTHLY_SCHEDULER_INTL_KEYS_WEEKDAYS_SHORT: {
70
+ id: string;
71
+ defaultMessage: string;
72
+ }[];
@@ -76,4 +76,54 @@ export var TYPES_DATA = {
76
76
  }
77
77
  }
78
78
  };
79
- export var SPACE_UNICODE = "\xA0";
79
+ export var SPACE_UNICODE = "\xA0";
80
+ export var MONTHLY_SCHEDULER_INTL_KEYS_NTH_WEEK = range(1, 6).map(function (i) {
81
+ return {
82
+ id: "DS.DATE-RANGE-PICKER.NTH." + i,
83
+ defaultMessage: "Week " + i
84
+ };
85
+ });
86
+ export var MONTHLY_SCHEDULER_INTL_KEYS_WEEKDAYS_LONG = [{
87
+ id: 'DS.DATE-RANGE-PICKER.WEEKDAYS_LONG.1',
88
+ defaultMessage: 'Monday'
89
+ }, {
90
+ id: 'DS.DATE-RANGE-PICKER.WEEKDAYS_LONG.2',
91
+ defaultMessage: 'Tuesday'
92
+ }, {
93
+ id: 'DS.DATE-RANGE-PICKER.WEEKDAYS_LONG.3',
94
+ defaultMessage: 'Wednesday'
95
+ }, {
96
+ id: 'DS.DATE-RANGE-PICKER.WEEKDAYS_LONG.4',
97
+ defaultMessage: 'Thursday'
98
+ }, {
99
+ id: 'DS.DATE-RANGE-PICKER.WEEKDAYS_LONG.5',
100
+ defaultMessage: 'Friday'
101
+ }, {
102
+ id: 'DS.DATE-RANGE-PICKER.WEEKDAYS_LONG.6',
103
+ defaultMessage: 'Saturday'
104
+ }, {
105
+ id: 'DS.DATE-RANGE-PICKER.WEEKDAYS_LONG.7',
106
+ defaultMessage: 'Sunday'
107
+ }];
108
+ export var MONTHLY_SCHEDULER_INTL_KEYS_WEEKDAYS_SHORT = [{
109
+ id: 'DS.DATE-RANGE-PICKER.WEEKDAYS_SHORT.1',
110
+ defaultMessage: 'Mon'
111
+ }, {
112
+ id: 'DS.DATE-RANGE-PICKER.WEEKDAYS_SHORT.2',
113
+ defaultMessage: 'Tue'
114
+ }, {
115
+ id: 'DS.DATE-RANGE-PICKER.WEEKDAYS_SHORT.3',
116
+ defaultMessage: 'Wed'
117
+ }, {
118
+ id: 'DS.DATE-RANGE-PICKER.WEEKDAYS_SHORT.4',
119
+ defaultMessage: 'Thu'
120
+ }, {
121
+ id: 'DS.DATE-RANGE-PICKER.WEEKDAYS_SHORT.5',
122
+ defaultMessage: 'Fri'
123
+ }, {
124
+ id: 'DS.DATE-RANGE-PICKER.WEEKDAYS_SHORT.6',
125
+ defaultMessage: 'Sat'
126
+ }, {
127
+ id: 'DS.DATE-RANGE-PICKER.WEEKDAYS_SHORT.7',
128
+ defaultMessage: 'Sun'
129
+ }];
@@ -337,7 +337,9 @@ var RangePicker = /*#__PURE__*/function (_React$PureComponent) {
337
337
  });
338
338
 
339
339
  _defineProperty(_assertThisInitialized(_this), "renderTimePicker", function (side) {
340
- var value = _this.props.value;
340
+ var _this$props8 = _this.props,
341
+ value = _this$props8.value,
342
+ is12HoursClock = _this$props8.is12HoursClock;
341
343
  var from = value.from,
342
344
  to = value.to;
343
345
 
@@ -354,9 +356,9 @@ var RangePicker = /*#__PURE__*/function (_React$PureComponent) {
354
356
  key: "time-picker-" + side,
355
357
  value: getDateFromString(from),
356
358
  onChange: _this.handleFromTimeChange,
357
- disabledHours: getDisabledTimeOptions(from, 'HOURS', null, to),
358
- disabledMinutes: getDisabledTimeOptions(from, 'MINUTES', null, to),
359
- disabledSeconds: getDisabledTimeOptions(from, 'SECONDS', null, to),
359
+ disabledHours: getDisabledTimeOptions(from, 'HOURS', null, to, is12HoursClock),
360
+ disabledMinutes: getDisabledTimeOptions(from, 'MINUTES', null, to, is12HoursClock),
361
+ disabledSeconds: getDisabledTimeOptions(from, 'SECONDS', null, to, is12HoursClock),
360
362
  onShortNext: sidesAreAdjacent ? undefined : function () {
361
363
  _this.handleAddDay(1, COLUMNS.LEFT);
362
364
  },
@@ -372,9 +374,9 @@ var RangePicker = /*#__PURE__*/function (_React$PureComponent) {
372
374
  key: "time-picker-" + side,
373
375
  value: getDateFromString(to),
374
376
  onChange: _this.handleToTimeChange,
375
- disabledHours: getDisabledTimeOptions(to, 'HOURS', from, null),
376
- disabledMinutes: getDisabledTimeOptions(to, 'MINUTES', from, null),
377
- disabledSeconds: getDisabledTimeOptions(to, 'SECONDS', from, null),
377
+ disabledHours: getDisabledTimeOptions(to, 'HOURS', from, null, is12HoursClock),
378
+ disabledMinutes: getDisabledTimeOptions(to, 'MINUTES', from, null, is12HoursClock),
379
+ disabledSeconds: getDisabledTimeOptions(to, 'SECONDS', from, null, is12HoursClock),
378
380
  onShortNext: function onShortNext() {
379
381
  _this.handleAddDay(1, COLUMNS.RIGHT);
380
382
  },
@@ -420,10 +422,10 @@ var RangePicker = /*#__PURE__*/function (_React$PureComponent) {
420
422
  _proto.getSnapshotBeforeUpdate = function getSnapshotBeforeUpdate(prevProps) {
421
423
  var _prevProps$value, _prevProps$value2;
422
424
 
423
- var _this$props8 = this.props,
424
- value = _this$props8.value,
425
- forceAdjacentMonths = _this$props8.forceAdjacentMonths,
426
- startAlwaysOnTheLeft = _this$props8.startAlwaysOnTheLeft;
425
+ var _this$props9 = this.props,
426
+ value = _this$props9.value,
427
+ forceAdjacentMonths = _this$props9.forceAdjacentMonths,
428
+ startAlwaysOnTheLeft = _this$props9.startAlwaysOnTheLeft;
427
429
  var _this$props$jumpToSta = this.props.jumpToStartAndEnd,
428
430
  jumpToStartAndEnd = _this$props$jumpToSta === void 0 ? true : _this$props$jumpToSta;
429
431
  var _this$state3 = this.state,
@@ -462,20 +464,21 @@ var RangePicker = /*#__PURE__*/function (_React$PureComponent) {
462
464
  };
463
465
 
464
466
  _proto.render = function render() {
465
- var _this$props9 = this.props,
466
- mode = _this$props9.mode,
467
- onChange = _this$props9.onChange,
468
- value = _this$props9.value,
469
- canSwitchMode = _this$props9.canSwitchMode,
470
- dateOnly = _this$props9.dateOnly,
471
- onSwitchMode = _this$props9.onSwitchMode,
472
- texts = _this$props9.texts;
467
+ var _this$props10 = this.props,
468
+ mode = _this$props10.mode,
469
+ onChange = _this$props10.onChange,
470
+ value = _this$props10.value,
471
+ canSwitchMode = _this$props10.canSwitchMode,
472
+ dateOnly = _this$props10.dateOnly,
473
+ onSwitchMode = _this$props10.onSwitchMode,
474
+ texts = _this$props10.texts;
473
475
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(S.Sides, null, /*#__PURE__*/React.createElement(S.Side, {
474
476
  mode: mode
475
477
  }, this.renderSide(COLUMNS.LEFT)), /*#__PURE__*/React.createElement(S.Side, {
476
478
  mode: mode
477
479
  }, this.renderSide(COLUMNS.RIGHT))), /*#__PURE__*/React.createElement(S.PickerFooter, null, /*#__PURE__*/React.createElement(Range, {
478
- onClick: function onClick() {
480
+ onClick: function onClick(_ref) {
481
+ var currentTarget = _ref.currentTarget;
479
482
  var now = new Date();
480
483
 
481
484
  var literallyNow = _objectSpread({}, value, {
@@ -486,6 +489,7 @@ var RangePicker = /*#__PURE__*/function (_React$PureComponent) {
486
489
  });
487
490
 
488
491
  onChange(literallyNow);
492
+ currentTarget.blur();
489
493
  }
490
494
  }, texts.now), /*#__PURE__*/React.createElement(S.FooterSeparator, null), !dateOnly && /*#__PURE__*/React.createElement(S.DateTimeModeSwitch, {
491
495
  type: "ghost",
@@ -4,7 +4,7 @@ import fnsMin from 'date-fns/min';
4
4
  import fnsMax from 'date-fns/max';
5
5
  import fnsIsValid from 'date-fns/isValid';
6
6
  import dayjs from 'dayjs';
7
- import { AM, PM, HOUR_12, MAP_24_HOUR_TO_12, HOUR } from '@synerise/ds-time-picker';
7
+ import { AM, PM, HOUR_12, MAP_24_HOUR_TO_12, HOUR, DISABLE_CLOCK_MODE_HOUR } from '@synerise/ds-time-picker';
8
8
  import { fnsEndOfDay, fnsIsSameMonth, fnsStartOfDay, fnsStartOfMonth } from '../fns';
9
9
  import { TIME_OPTIONS } from '../constants';
10
10
  import SET from '../dateUtils/set';
@@ -46,10 +46,21 @@ export var getDisabledTimeOptions = function getDisabledTimeOptions(initialDay,
46
46
  var dayClockMode = getAmOrPmFromDate(legacyParse(day));
47
47
  var lowerLimitClockMode = getAmOrPmFromDate(legacyParse(lowerLimit));
48
48
  var upperLimitClockMode = getAmOrPmFromDate(legacyParse(upperLimit));
49
+ var dayBuilder = dayjs(day);
50
+ var dayHour = dayBuilder.get(HOUR);
49
51
 
50
52
  if (is12HoursClock && lowerLimit) {
51
53
  if (lowerLimitClockMode === PM && dayjs(lowerLimit).get(HOUR) === HOUR_12) {
52
- return [];
54
+ return [DISABLE_CLOCK_MODE_HOUR];
55
+ }
56
+
57
+ if (lowerLimitClockMode === AM && dayClockMode === PM) {
58
+ var day12HBuilder = dayjs(change24To12Hour(dayBuilder.toDate()));
59
+ var lowLimitDayBuilder = dayjs(lowerLimit);
60
+
61
+ if (day12HBuilder.isBefore(lowLimitDayBuilder)) {
62
+ return [DISABLE_CLOCK_MODE_HOUR];
63
+ }
53
64
  }
54
65
 
55
66
  if (lowerLimitClockMode === AM && dayClockMode === PM) {
@@ -65,15 +76,22 @@ export var getDisabledTimeOptions = function getDisabledTimeOptions(initialDay,
65
76
  if (is12HoursClock && upperLimit) {
66
77
  if (upperLimitClockMode === PM && dayClockMode === PM) {
67
78
  day = change24To12Hour(legacyParse(day));
68
- upperLimit = change24To12Hour(legacyParse(upperLimit));
79
+ }
80
+
81
+ upperLimit = change24To12Hour(legacyParse(upperLimit));
82
+ var upLimitDayBuilder = dayjs(upperLimit);
83
+
84
+ if (upperLimitClockMode === PM && dayClockMode === AM && dayBuilder.isAfter(upLimitDayBuilder)) {
85
+ return [DISABLE_CLOCK_MODE_HOUR];
86
+ }
87
+
88
+ if (upperLimitClockMode === PM && dayClockMode === AM) {
89
+ return [];
69
90
  }
70
91
  }
71
92
 
72
93
  if (is12HoursClock && granularity !== HOURS_GRANULARITY) {
73
- var dayBuilder = dayjs(day);
74
- var hour = dayBuilder.get(HOUR);
75
-
76
- if (hour === HOUR_12) {
94
+ if (dayHour === HOUR_12) {
77
95
  return [];
78
96
  }
79
97
  }
@@ -97,6 +115,22 @@ export var getDisabledTimeOptions = function getDisabledTimeOptions(initialDay,
97
115
  result = result.filter(function (item) {
98
116
  return item !== HOUR_12;
99
117
  });
118
+
119
+ var _lowLimitDayBuilder = dayjs(lowLimit);
120
+
121
+ var lowerLimitHour = _lowLimitDayBuilder.get(HOUR);
122
+
123
+ if (lowerLimitClockMode === PM && lowerLimitHour !== HOUR_12 && result[0] === 0) {
124
+ result.push(HOUR_12);
125
+ }
126
+
127
+ if (lowerLimitClockMode === AM && lowerLimitHour !== 0 && dayClockMode === AM && initialLowerLimit !== null) {
128
+ result.push(HOUR_12);
129
+ }
130
+
131
+ if (upperLimit && upperLimitClockMode === AM && dayClockMode === AM) {
132
+ result.push(DISABLE_CLOCK_MODE_HOUR);
133
+ }
100
134
  }
101
135
  }
102
136
 
@@ -48,8 +48,8 @@ var RangeDropdown = function RangeDropdown(_ref) {
48
48
  dropVisible = _React$useState[0],
49
49
  setDropVisible = _React$useState[1];
50
50
 
51
- var overlayRef = React.useRef(null);
52
- useOnClickOutside(overlayRef, function () {
51
+ var dropdownRef = React.useRef(null);
52
+ useOnClickOutside(dropdownRef, function () {
53
53
  setDropVisible(false);
54
54
  });
55
55
  var onMenuItemClick = React.useCallback(function (_ref2) {
@@ -70,7 +70,6 @@ var RangeDropdown = function RangeDropdown(_ref) {
70
70
  }, ranges) || anyOfTransformedRangesMatchesCurrentRange;
71
71
  var overlay = /*#__PURE__*/React.createElement(S.OverlayWrapper, {
72
72
  visible: dropVisible,
73
- ref: overlayRef,
74
73
  width: DROPDOWN_WIDTH
75
74
  }, /*#__PURE__*/React.createElement(Scrollbar, {
76
75
  maxHeight: MAX_ITEMS_COUNT * ITEMS_HEIGHT,
@@ -90,7 +89,9 @@ var RangeDropdown = function RangeDropdown(_ref) {
90
89
  })
91
90
  }, range.translationKey ? texts[range.translationKey] : range.key);
92
91
  }))));
93
- return /*#__PURE__*/React.createElement(S.DropdownContainer, null, /*#__PURE__*/React.createElement(S.Range, {
92
+ return /*#__PURE__*/React.createElement(S.DropdownContainer, {
93
+ ref: dropdownRef
94
+ }, /*#__PURE__*/React.createElement(S.Range, {
94
95
  type: containsCurrentRange ? 'primary' : 'tertiary',
95
96
  mode: "label-icon",
96
97
  onClick: function onClick() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@synerise/ds-date-range-picker",
3
- "version": "0.20.9",
3
+ "version": "0.21.2",
4
4
  "description": "Date-Range-Picker UI Component for the Synerise Design System",
5
5
  "license": "ISC",
6
6
  "repository": "Synerise/synerise-design",
@@ -34,10 +34,10 @@
34
34
  "dependencies": {
35
35
  "@date-fns/upgrade": "^1.0.3",
36
36
  "@synerise/ds-button": "^0.17.12",
37
- "@synerise/ds-date-picker": "^0.9.5",
37
+ "@synerise/ds-date-picker": "^0.9.6",
38
38
  "@synerise/ds-icon": "^0.54.0",
39
- "@synerise/ds-manageable-list": "^0.25.0",
40
- "@synerise/ds-time-picker": "^0.7.4",
39
+ "@synerise/ds-manageable-list": "^0.25.1",
40
+ "@synerise/ds-time-picker": "^0.7.5",
41
41
  "@synerise/ds-tooltip": "^0.13.0",
42
42
  "@synerise/ds-utils": "^0.19.0",
43
43
  "date-fns": "^2.16.1",
@@ -54,5 +54,5 @@
54
54
  "devDependencies": {
55
55
  "@types/ramda": "^0.27.14"
56
56
  },
57
- "gitHead": "f84931e820ffcf263bec74e9371f9d6a48e38a34"
57
+ "gitHead": "a81aad1ee5bb7249f069115cab0ec06b66ab12b0"
58
58
  }