@synerise/ds-date-range-picker 0.21.23 → 0.21.24

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,17 @@
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.24](https://github.com/Synerise/synerise-design/compare/@synerise/ds-date-range-picker@0.21.23...@synerise/ds-date-range-picker@0.21.24) (2023-08-09)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * **date-range-picker:** weekly filter standalone starttime reset fixed ([63072c2](https://github.com/Synerise/synerise-design/commit/63072c21bbe63286f2b5b31decf7f58b22c1ac1d))
12
+
13
+
14
+
15
+
16
+
6
17
  ## [0.21.23](https://github.com/Synerise/synerise-design/compare/@synerise/ds-date-range-picker@0.21.22...@synerise/ds-date-range-picker@0.21.23) (2023-08-03)
7
18
 
8
19
 
package/README.md CHANGED
@@ -60,6 +60,7 @@ const value = {
60
60
  | value | Value of the picker | DateRange | new Date() |
61
61
  | startAlwaysOnTheLeft | Enable not to move month from left side to right side | boolean | `false` |
62
62
  | onVisibleChange | Callback executed when popover with dateRangePicker changes its visibility | (visible: boolean) => void | - |
63
+ | filterValueSelectionModes | Allowed modes to display in filter | DateLimitMode[] | ["Range", "Hour"] |
63
64
 
64
65
  ### DateRange
65
66
 
@@ -7,6 +7,7 @@ import { FilterDefinition } from './RangeFilter/RangeFilter.types';
7
7
  import { SavedFilter } from './RangeFilter/Shared/FilterDropdown/FilterDropdown.types';
8
8
  import { Props as FooterProps } from './Footer/Footer.types';
9
9
  import { RangePickerInputProps } from './RangePickerInput/RangePickerInput.types';
10
+ import { DateLimitMode } from './RangeFilter/Shared/TimeWindow/RangeFormContainer/RangeForm/RangeForm.types';
10
11
  export { DateRange } from './date.types';
11
12
  export declare type CustomColorArrow = 'blue' | 'grey' | 'red' | 'green' | 'yellow' | 'pink' | 'mars' | 'orange' | 'fern' | 'cyan' | 'purple' | 'violet';
12
13
  export declare type AdditionalMapper = {
@@ -67,6 +68,7 @@ export interface DateRangePickerProps extends WrappedComponentProps {
67
68
  allowedFilterTypes?: string[];
68
69
  renderPopoverTrigger?: (...args: any) => JSX.Element;
69
70
  isTruncateMs?: boolean;
71
+ filterValueSelectionModes?: DateLimitMode[];
70
72
  }
71
73
  /**
72
74
  * @deprecated use `DateRangePickerProps`
@@ -6,7 +6,7 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
6
6
 
7
7
  import * as React from 'react';
8
8
  import { useIntl } from 'react-intl';
9
- import * as dayjs from 'dayjs';
9
+ import dayjs from 'dayjs';
10
10
  import { v4 as uuid } from 'uuid';
11
11
  import { useDataFormat } from '@synerise/ds-data-format';
12
12
  import RangeFormContainer from '../../../Shared/TimeWindow/RangeFormContainer/RangeFormContainer';
@@ -15,7 +15,7 @@ import Grid from '../../../Shared/TimeWindow/Grid/Grid';
15
15
  import Day from '../../../Shared/TimeWindow/Day/Day';
16
16
  import * as S from '../../../RangeFilter.styles';
17
17
  import { useShiftAndControlKeys } from '../hooks/useShiftAndControlKeys';
18
- import { canAddAnotherRange, haveActiveDaysCommonRange, range } from './utils';
18
+ import { canAddAnotherRange, haveActiveDaysCommonRange, range, removeEmptyEntries } from './utils';
19
19
  import { DEFAULT_RANGE_START, DEFAULT_RANGE_END, DEFAULT_TIME_FORMAT, EMPTY_OBJECT, DEFAULT_MAX_ENTRIES, RENDER_EMPTY_NODE_FN, NOOP } from '../constants';
20
20
  import { EU_NOTATION_WEEK_DAYS_INDEXES, US_NOTATION_WEEK_DAYS_INDEXES } from '../../../Shared/TimeWindow/constants/timeWindow.constants';
21
21
 
@@ -65,27 +65,14 @@ var Weekly = function Weekly(_ref) {
65
65
  return isSundayFirstWeekDay ? US_NOTATION_WEEK_DAYS_INDEXES : EU_NOTATION_WEEK_DAYS_INDEXES;
66
66
  }, [isSundayFirstWeekDay]);
67
67
  React.useEffect(function () {
68
- setFilteredSchedule(Object.keys(value));
69
- }, [value]);
70
- var removeEmptyEntries = React.useCallback(function (weeklySchedule) {
71
- var emptyEntries = Object.keys(weeklySchedule).filter(function (key) {
72
- return Object.keys(weeklySchedule[key]).length === 0;
73
- });
74
- var scheduleToUpdate = weeklySchedule;
75
- emptyEntries.forEach(function (emptyEntry) {
76
- delete scheduleToUpdate[emptyEntry];
77
- });
78
- onChange(scheduleToUpdate);
79
- }, [onChange]);
80
- React.useEffect(function () {
68
+ removeEmptyEntries(value);
81
69
  var entriesWithActiveDaysValue = activeDays.length ? Object.keys(value).filter(function (id) {
82
70
  return activeDays.every(function (day) {
83
71
  return !!value[id][day] && haveActiveDaysCommonRange(value[id], activeDays);
84
72
  });
85
73
  }) : [];
86
- removeEmptyEntries(value);
87
74
  setFilteredSchedule(entriesWithActiveDaysValue);
88
- }, [value, activeDays, removeEmptyEntries]);
75
+ }, [value, activeDays]);
89
76
  var handleDayTimeChange = React.useCallback(function (dayValue, dayKey, guid) {
90
77
  var updatedSchedule = value;
91
78
  var start = dayValue[0],
@@ -93,13 +80,15 @@ var Weekly = function Weekly(_ref) {
93
80
 
94
81
  if (dayKey instanceof Array) {
95
82
  dayKey.forEach(function (day) {
96
- updatedSchedule[guid][day] = _objectSpread({}, value[guid][day], {
97
- restricted: true,
98
- start: start ? dayjs(start).format(DEFAULT_TIME_FORMAT) : undefined,
99
- stop: end ? dayjs(end).format(DEFAULT_TIME_FORMAT) : undefined
100
- });
83
+ if (guid in updatedSchedule) {
84
+ updatedSchedule[guid][day] = _objectSpread({}, value[guid][day], {
85
+ restricted: true,
86
+ start: start ? dayjs(start).format(DEFAULT_TIME_FORMAT) : undefined,
87
+ stop: end ? dayjs(end).format(DEFAULT_TIME_FORMAT) : undefined
88
+ });
89
+ }
101
90
  });
102
- } else {
91
+ } else if (guid in updatedSchedule) {
103
92
  updatedSchedule[guid][dayKey] = _objectSpread({}, value[guid][dayKey], {
104
93
  restricted: true,
105
94
  start: start ? dayjs(start).format(DEFAULT_TIME_FORMAT) : undefined,
@@ -301,6 +290,7 @@ var Weekly = function Weekly(_ref) {
301
290
  defaultMessage: 'The maximum amount of ranges have been selected.'
302
291
  })
303
292
  }), shouldRenderAddButton && /*#__PURE__*/React.createElement(AddButton, {
293
+ "data-testid": "drp-filter-add-range",
304
294
  label: intl.formatMessage({
305
295
  id: 'DS.DATE-RANGE-PICKER.ADD-TIME',
306
296
  defaultMessage: 'Add range'
@@ -3,3 +3,4 @@ import { DayKey } from '../../WeeklyFilter/WeeklyFilter.types';
3
3
  export declare const range: (start: number, stop: number) => number[];
4
4
  export declare const haveActiveDaysCommonRange: (days: Record<DayOfWeekIndex, WeeklyScheduleDayValue>, activeDaysArray: DayKey[]) => boolean;
5
5
  export declare const canAddAnotherRange: (schedule: WeeklySchedule, activeDays: DayKey[], maxRanges?: number) => boolean;
6
+ export declare const removeEmptyEntries: (weeklySchedule: WeeklySchedule) => void;
@@ -40,4 +40,13 @@ export var canAddAnotherRange = function canAddAnotherRange(schedule, activeDays
40
40
  return schedule[key][day] === undefined;
41
41
  }) && !haveActiveDaysCommonRange(schedule[key], activeDays);
42
42
  });
43
+ };
44
+ export var removeEmptyEntries = function removeEmptyEntries(weeklySchedule) {
45
+ var emptyEntries = Object.keys(weeklySchedule).filter(function (key) {
46
+ return Object.keys(weeklySchedule[key]).length === 0;
47
+ });
48
+ var scheduleToUpdate = weeklySchedule;
49
+ emptyEntries.forEach(function (emptyEntry) {
50
+ delete scheduleToUpdate[emptyEntry];
51
+ });
43
52
  };
@@ -0,0 +1 @@
1
+ import '@testing-library/jest-dom/extend-expect';
@@ -0,0 +1,36 @@
1
+ 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; }
2
+
3
+ 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; }
4
+
5
+ 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; }
6
+
7
+ import '@testing-library/jest-dom/extend-expect';
8
+ import { removeEmptyEntries } from './utils';
9
+ var dayValue = {
10
+ "start": "06:00:00.000",
11
+ "stop": "20:59:59.999",
12
+ "restricted": true,
13
+ "display": false,
14
+ "inverted": false,
15
+ "mode": "Range"
16
+ };
17
+ var scheduleWithEmptyEntries = {
18
+ '5de64ead-e81e-4bf9-8e13-47e8829b8cc3': {
19
+ 0: _objectSpread({}, dayValue),
20
+ 1: _objectSpread({}, dayValue),
21
+ 2: _objectSpread({}, dayValue),
22
+ 3: _objectSpread({}, dayValue),
23
+ 4: _objectSpread({}, dayValue),
24
+ 5: _objectSpread({}, dayValue),
25
+ 6: _objectSpread({}, dayValue)
26
+ },
27
+ // @ts-ignore
28
+ '5dr44ead-e81e-4bf9-8e13-47e8829b8cc3': {}
29
+ };
30
+ describe('Weekly utils', function () {
31
+ it('removeEmptyEntries should clear entries with no day data', function () {
32
+ removeEmptyEntries(scheduleWithEmptyEntries);
33
+ expect(Object.keys(scheduleWithEmptyEntries).length).toBe(1);
34
+ expect(Object.keys(scheduleWithEmptyEntries)[0]).toBe('5de64ead-e81e-4bf9-8e13-47e8829b8cc3');
35
+ });
36
+ });
@@ -62,7 +62,8 @@ var RangeFormContainer = function RangeFormContainer(_ref) {
62
62
  setMode((dayValue == null ? void 0 : dayValue.mode) || valueSelectionModes[0] || DEFAULT_LIMIT_MODE);
63
63
  }, [dayValue, valueSelectionModes]);
64
64
  var onStartChange = React.useCallback(function (start) {
65
- var end = dayValue.stop;
65
+ var dayVal = getDayValue(activeDays[0]);
66
+ var end = dayVal.stop;
66
67
  var value = [start, end ? getDateFromDayValue(end, timeFormat) : undefined];
67
68
 
68
69
  if (activeDays.length > 1) {
@@ -70,17 +71,18 @@ var RangeFormContainer = function RangeFormContainer(_ref) {
70
71
  } else {
71
72
  onDayTimeChange(value, dayKeys);
72
73
  }
73
- }, [activeDays, onMultipleDayTimeChange, onDayTimeChange, timeFormat, dayValue, dayKeys]);
74
+ }, [activeDays, onMultipleDayTimeChange, onDayTimeChange, timeFormat, getDayValue, dayKeys]);
74
75
  var onEndChange = React.useCallback(function (end) {
75
- var start = dayValue.start;
76
- var value = [start ? getDateFromDayValue(dayValue.start, timeFormat) : undefined, end];
76
+ var dayVal = getDayValue(activeDays[0]);
77
+ var start = dayVal.start;
78
+ var value = [start ? getDateFromDayValue(start, timeFormat) : undefined, end];
77
79
 
78
80
  if (activeDays.length > 1) {
79
81
  onMultipleDayTimeChange(value);
80
82
  } else {
81
83
  onDayTimeChange(value, dayKeys);
82
84
  }
83
- }, [activeDays, onMultipleDayTimeChange, onDayTimeChange, timeFormat, dayValue, dayKeys]);
85
+ }, [activeDays, onMultipleDayTimeChange, onDayTimeChange, timeFormat, getDayValue, dayKeys]);
84
86
  var onExactHourSelect = React.useCallback(function (value) {
85
87
  if (activeDays.length > 1) {
86
88
  onMultipleDayTimeChange([value, value]);
@@ -27,7 +27,7 @@ export declare class RawDateRangePicker extends React.PureComponent<DateRangePic
27
27
  getAddons: () => AddonType[];
28
28
  render(): JSX.Element;
29
29
  }
30
- declare const _default: React.ForwardRefExoticComponent<Pick<DateRangePickerProps, "readOnly" | "texts" | "valueFormatOptions" | "format" | "value" | "onVisibleChange" | "rangeUnits" | "containerClass" | "disableDefaultTexts" | "disabledDate" | "forceAdjacentMonths" | "forceAbsolute" | "footerProps" | "onValueChange" | "onApply" | "onFilterSave" | "popoverProps" | "popoverTrigger" | "ranges" | "relativeFuture" | "relativePast" | "relativeModes" | "savedFilters" | "showRelativePicker" | "showFilter" | "showTime" | "showCustomRange" | "validate" | "valueTransformer" | "arrowColor" | "disableAbsoluteTimepickerInRelative" | "rangePickerInputProps" | "allowedFilterTypes" | "renderPopoverTrigger" | "isTruncateMs"> & {
30
+ declare const _default: React.ForwardRefExoticComponent<Pick<DateRangePickerProps, "readOnly" | "texts" | "valueFormatOptions" | "format" | "value" | "onVisibleChange" | "rangeUnits" | "containerClass" | "disableDefaultTexts" | "disabledDate" | "forceAdjacentMonths" | "forceAbsolute" | "footerProps" | "onValueChange" | "onApply" | "onFilterSave" | "popoverProps" | "popoverTrigger" | "ranges" | "relativeFuture" | "relativePast" | "relativeModes" | "savedFilters" | "showRelativePicker" | "showFilter" | "showTime" | "showCustomRange" | "validate" | "valueTransformer" | "arrowColor" | "disableAbsoluteTimepickerInRelative" | "rangePickerInputProps" | "allowedFilterTypes" | "renderPopoverTrigger" | "isTruncateMs" | "filterValueSelectionModes"> & {
31
31
  forwardedRef?: ((instance: any) => void) | React.RefObject<any> | null | undefined;
32
32
  } & React.RefAttributes<any>> & {
33
33
  WrappedComponent: React.ComponentType<DateRangePickerProps>;
@@ -29,17 +29,19 @@ import RangeFilter from './RangeFilter/RangeFilter';
29
29
  import RangeFilterStatus from './RangeFilter/Shared/RangeFilterStatus/RangeFilterStatus';
30
30
  import { isLifetime } from './RelativeRangePicker/Elements/RangeDropdown/RangeDropdown';
31
31
  export function defaultValueTransformer(value) {
32
- if (value.key === 'ALL_TIME' || isLifetime(value)) {
33
- return {
34
- type: 'ABSOLUTE'
35
- };
36
- }
37
-
38
32
  var id = value.id,
39
33
  timestamp = value.timestamp,
40
34
  translationKey = value.translationKey,
41
35
  filter = value.filter;
42
36
 
37
+ if (value.key === 'ALL_TIME' || isLifetime(value)) {
38
+ return _objectSpread({
39
+ type: 'ABSOLUTE'
40
+ }, filter ? {
41
+ filter: filter
42
+ } : {});
43
+ }
44
+
43
45
  var baseValue = _objectSpread({}, id ? {
44
46
  id: id
45
47
  } : {}, {}, timestamp ? {
@@ -258,6 +260,7 @@ export var RawDateRangePicker = /*#__PURE__*/function (_React$PureComponent) {
258
260
  var _value$filter, _value$filter2;
259
261
 
260
262
  var _addonKey = 'filter';
263
+ var filterEnabled = value.from && value.to || isLifetime(value);
261
264
  var label = value != null && value.filter ? intl.formatMessage({
262
265
  id: "DS.DATE-RANGE-PICKER.FILTER-ENABLED",
263
266
  defaultMessage: 'Filter enabled'
@@ -270,7 +273,7 @@ export var RawDateRangePicker = /*#__PURE__*/function (_React$PureComponent) {
270
273
  content: /*#__PURE__*/React.createElement(RangeFilterStatus, {
271
274
  onFilterRemove: _this.handleRemoveFilterClick,
272
275
  filter: value.filter,
273
- disabled: !value.from || !value.to,
276
+ disabled: !filterEnabled,
274
277
  label: label,
275
278
  onClick: _this.handleModalOpenClick
276
279
  }),
@@ -325,7 +328,8 @@ export var RawDateRangePicker = /*#__PURE__*/function (_React$PureComponent) {
325
328
  footerProps = _this$props4.footerProps,
326
329
  allowedFilterTypes = _this$props4.allowedFilterTypes,
327
330
  _this$props4$disableA = _this$props4.disableAbsoluteTimepickerInRelative,
328
- disableAbsoluteTimepickerInRelative = _this$props4$disableA === void 0 ? false : _this$props4$disableA;
331
+ disableAbsoluteTimepickerInRelative = _this$props4$disableA === void 0 ? false : _this$props4$disableA,
332
+ filterValueSelectionModes = _this$props4.filterValueSelectionModes;
329
333
  var _this$state3 = this.state,
330
334
  value = _this$state3.value,
331
335
  mode = _this$state3.mode;
@@ -349,7 +353,8 @@ export var RawDateRangePicker = /*#__PURE__*/function (_React$PureComponent) {
349
353
  onApply: this.handleFilterApply,
350
354
  savedFilters: savedFilters,
351
355
  allowedFilterTypes: allowedFilterTypes,
352
- onFilterSave: onFilterSave
356
+ onFilterSave: onFilterSave,
357
+ valueSelectionModes: filterValueSelectionModes
353
358
  }));
354
359
  var validator = validate ? validate(value) : {
355
360
  valid: true
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@synerise/ds-date-range-picker",
3
- "version": "0.21.23",
3
+ "version": "0.21.24",
4
4
  "description": "Date-Range-Picker UI Component for the Synerise Design System",
5
5
  "license": "ISC",
6
6
  "repository": "Synerise/synerise-design",
@@ -34,7 +34,7 @@
34
34
  "dependencies": {
35
35
  "@date-fns/upgrade": "^1.0.3",
36
36
  "@synerise/ds-button": "^0.17.20",
37
- "@synerise/ds-date-picker": "^0.10.7",
37
+ "@synerise/ds-date-picker": "^0.10.8",
38
38
  "@synerise/ds-icon": "^0.58.0",
39
39
  "@synerise/ds-manageable-list": "^0.25.14",
40
40
  "@synerise/ds-time-picker": "^0.7.16",
@@ -54,5 +54,5 @@
54
54
  "devDependencies": {
55
55
  "@types/ramda": "^0.27.14"
56
56
  },
57
- "gitHead": "3879c41ef7a22df15d5cd80ceaa41ec56e551429"
57
+ "gitHead": "1a5a5475cc50107c0da950887a91b003e77a96e4"
58
58
  }