@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 +50 -0
- package/dist/RangeFilter/Filters/new/Monthly/Monthly.d.ts +4 -0
- package/dist/RangeFilter/Filters/new/Monthly/Monthly.js +372 -0
- package/dist/RangeFilter/Filters/new/Monthly/Monthly.types.d.ts +18 -0
- package/dist/RangeFilter/Filters/new/Monthly/Monthly.types.js +1 -0
- package/dist/RangeFilter/Filters/new/Monthly/utils.d.ts +5 -0
- package/dist/RangeFilter/Filters/new/Monthly/utils.js +43 -0
- package/dist/RangeFilter/Filters/new/Weekly/Weekly.js +2 -2
- package/dist/RangeFilter/Shared/TimeWindow/TimeWindow.js +27 -12
- package/dist/RangeFilter/Shared/TimeWindow/constants/timeWindow.constants.d.ts +2 -0
- package/dist/RangeFilter/Shared/TimeWindow/constants/timeWindow.constants.js +3 -1
- package/dist/RangeFilter/constants.d.ts +12 -0
- package/dist/RangeFilter/constants.js +51 -1
- package/dist/RangePicker/RangePicker.js +24 -20
- package/dist/RangePicker/utils.js +41 -7
- package/dist/RelativeRangePicker/Elements/RangeDropdown/RangeDropdown.js +5 -4
- package/package.json +5 -5
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,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 @@
|
|
|
1
|
+
export {};
|
|
@@ -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 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
|
|
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$
|
|
424
|
-
value = _this$
|
|
425
|
-
forceAdjacentMonths = _this$
|
|
426
|
-
startAlwaysOnTheLeft = _this$
|
|
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$
|
|
466
|
-
mode = _this$
|
|
467
|
-
onChange = _this$
|
|
468
|
-
value = _this$
|
|
469
|
-
canSwitchMode = _this$
|
|
470
|
-
dateOnly = _this$
|
|
471
|
-
onSwitchMode = _this$
|
|
472
|
-
texts = _this$
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
52
|
-
useOnClickOutside(
|
|
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,
|
|
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.
|
|
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.
|
|
37
|
+
"@synerise/ds-date-picker": "^0.9.6",
|
|
38
38
|
"@synerise/ds-icon": "^0.54.0",
|
|
39
|
-
"@synerise/ds-manageable-list": "^0.25.
|
|
40
|
-
"@synerise/ds-time-picker": "^0.7.
|
|
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": "
|
|
57
|
+
"gitHead": "a81aad1ee5bb7249f069115cab0ec06b66ab12b0"
|
|
58
58
|
}
|