@synerise/ds-date-range-picker 0.20.8 → 0.21.1
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 +38 -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/Shared/TimeWindow/TimeWindow.js +2 -2
- package/dist/RangeFilter/constants.d.ts +12 -0
- package/dist/RangeFilter/constants.js +51 -1
- package/dist/RangePicker/RangePicker.js +3 -1
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,44 @@
|
|
|
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.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)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* **date-range-picker:** adds separated translation key indexes ([6e899e9](https://github.com/Synerise/synerise-design/commit/6e899e99800ba26f81faf22650698b27529acb95))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
# [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)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### Bug Fixes
|
|
21
|
+
|
|
22
|
+
* **date-range-picker:** addsus notation support to monthly scheduler ([7cef538](https://github.com/Synerise/synerise-design/commit/7cef5388ee1e50b9f147e089bc2e88d4f6706c3f))
|
|
23
|
+
* **date-range-picker:** fixes to support long display of days ([496e467](https://github.com/Synerise/synerise-design/commit/496e467e21d2071c8ab13a0b217332abb6e2cfc0))
|
|
24
|
+
* **date-range-picker:** now button should not be left focused ([382dd26](https://github.com/Synerise/synerise-design/commit/382dd268e23337036933a5a420459e0748a7c170))
|
|
25
|
+
* **date-range-picker:** prevent end time clearing to current time ([5e4cfb6](https://github.com/Synerise/synerise-design/commit/5e4cfb62b4a4bf50fb1fafc1497b146d2b31ad7c))
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
### Features
|
|
29
|
+
|
|
30
|
+
* **date-range-picker:** exposes a standalone monthly scheduler ([d73d59c](https://github.com/Synerise/synerise-design/commit/d73d59c2364fc4e9a6f8a1b2daeb306da8a9dc89))
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
## [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)
|
|
37
|
+
|
|
38
|
+
**Note:** Version bump only for package @synerise/ds-date-range-picker
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
|
|
6
44
|
## [0.20.8](https://github.com/Synerise/synerise-design/compare/@synerise/ds-date-range-picker@0.20.7...@synerise/ds-date-range-picker@0.20.8) (2023-04-05)
|
|
7
45
|
|
|
8
46
|
**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
|
+
};
|
|
@@ -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
|
|
|
@@ -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
|
+
}];
|
|
@@ -475,7 +475,8 @@ var RangePicker = /*#__PURE__*/function (_React$PureComponent) {
|
|
|
475
475
|
}, this.renderSide(COLUMNS.LEFT)), /*#__PURE__*/React.createElement(S.Side, {
|
|
476
476
|
mode: mode
|
|
477
477
|
}, this.renderSide(COLUMNS.RIGHT))), /*#__PURE__*/React.createElement(S.PickerFooter, null, /*#__PURE__*/React.createElement(Range, {
|
|
478
|
-
onClick: function onClick() {
|
|
478
|
+
onClick: function onClick(_ref) {
|
|
479
|
+
var currentTarget = _ref.currentTarget;
|
|
479
480
|
var now = new Date();
|
|
480
481
|
|
|
481
482
|
var literallyNow = _objectSpread({}, value, {
|
|
@@ -486,6 +487,7 @@ var RangePicker = /*#__PURE__*/function (_React$PureComponent) {
|
|
|
486
487
|
});
|
|
487
488
|
|
|
488
489
|
onChange(literallyNow);
|
|
490
|
+
currentTarget.blur();
|
|
489
491
|
}
|
|
490
492
|
}, texts.now), /*#__PURE__*/React.createElement(S.FooterSeparator, null), !dateOnly && /*#__PURE__*/React.createElement(S.DateTimeModeSwitch, {
|
|
491
493
|
type: "ghost",
|
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.1",
|
|
4
4
|
"description": "Date-Range-Picker UI Component for the Synerise Design System",
|
|
5
5
|
"license": "ISC",
|
|
6
6
|
"repository": "Synerise/synerise-design",
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"@synerise/ds-button": "^0.17.12",
|
|
37
37
|
"@synerise/ds-date-picker": "^0.9.5",
|
|
38
38
|
"@synerise/ds-icon": "^0.54.0",
|
|
39
|
-
"@synerise/ds-manageable-list": "^0.
|
|
39
|
+
"@synerise/ds-manageable-list": "^0.25.0",
|
|
40
40
|
"@synerise/ds-time-picker": "^0.7.4",
|
|
41
41
|
"@synerise/ds-tooltip": "^0.13.0",
|
|
42
42
|
"@synerise/ds-utils": "^0.19.0",
|
|
@@ -54,5 +54,5 @@
|
|
|
54
54
|
"devDependencies": {
|
|
55
55
|
"@types/ramda": "^0.27.14"
|
|
56
56
|
},
|
|
57
|
-
"gitHead": "
|
|
57
|
+
"gitHead": "3bc6aad4f4a0cbb7ceb7a92c5854d0680047bcdc"
|
|
58
58
|
}
|