@synerise/ds-date-range-picker 0.24.10 → 0.25.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.
Files changed (61) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README.md +2 -1
  3. package/dist/DateRangePicker.js +11 -8
  4. package/dist/DateRangePicker.types.d.ts +3 -2
  5. package/dist/RangeFilter/Filters/new/Daily/Daily.d.ts +1 -1
  6. package/dist/RangeFilter/Filters/new/Daily/Daily.js +4 -1
  7. package/dist/RangeFilter/Filters/new/Daily/Daily.types.d.ts +2 -0
  8. package/dist/RangeFilter/Filters/new/Monthly/Monthly.d.ts +1 -2
  9. package/dist/RangeFilter/Filters/new/Monthly/Monthly.js +8 -1
  10. package/dist/RangeFilter/Filters/new/Monthly/Monthly.types.d.ts +4 -0
  11. package/dist/RangeFilter/Filters/new/Weekly/Weekly.d.ts +1 -2
  12. package/dist/RangeFilter/Filters/new/Weekly/Weekly.js +8 -1
  13. package/dist/RangeFilter/Filters/new/Weekly/Weekly.types.d.ts +4 -0
  14. package/dist/RangeFilter/Shared/RangeFilterStatus/RangeFilterStatus.d.ts +1 -2
  15. package/dist/RangeFilter/Shared/RangeFilterStatus/RangeFilterStatus.js +8 -7
  16. package/dist/RangeFilter/Shared/RangeFilterStatus/RangeFilterStatus.styles.d.ts +1 -0
  17. package/dist/RangeFilter/Shared/RangeFilterStatus/RangeFilterStatus.styles.js +9 -3
  18. package/dist/RangeFilter/Shared/RangeFilterStatus/RangeFilterStatus.types.d.ts +2 -0
  19. package/dist/RangeFilter/Shared/TimeWindow/RangeFormContainer/RangeForm/RangeForm.d.ts +1 -1
  20. package/dist/RangeFilter/Shared/TimeWindow/RangeFormContainer/RangeForm/RangeForm.js +8 -1
  21. package/dist/RangeFilter/Shared/TimeWindow/RangeFormContainer/RangeForm/RangeForm.types.d.ts +5 -5
  22. package/dist/RangeFilter/Shared/TimeWindow/RangeFormContainer/RangeFormContainer.d.ts +1 -1
  23. package/dist/RangeFilter/Shared/TimeWindow/RangeFormContainer/RangeFormContainer.js +4 -2
  24. package/dist/RangeFilter/Shared/TimeWindow/RangeFormContainer/RangeFormContainer.types.d.ts +5 -3
  25. package/dist/RangePickerInput/RangePickerInput.js +2 -1
  26. package/dist/RawDateRangePicker.d.ts +2 -2
  27. package/dist/RawDateRangePicker.js +13 -24
  28. package/dist/RelativeRangePicker/Elements/CustomRangeForm/CustomRangeForm.js +1 -1
  29. package/dist/RelativeRangePicker/Elements/CustomRangeForm/DurationField/DurationField.js +3 -4
  30. package/dist/RelativeRangePicker/Elements/CustomRangeForm/OffsetField/OffsetField.js +3 -4
  31. package/dist/RelativeRangePicker/Elements/ModeDropdown/ModeDropdown.js +1 -1
  32. package/dist/RelativeRangePicker/Elements/RangeButtons/RangeButtons.d.ts +1 -2
  33. package/dist/RelativeRangePicker/Elements/RangeButtons/RangeButtons.js +5 -1
  34. package/dist/RelativeRangePicker/Elements/RangeDropdown/RangeDropdown.js +3 -2
  35. package/dist/RelativeRangePicker/Elements/RangeDropdown/RangeDropdown.types.d.ts +3 -3
  36. package/dist/RelativeRangePicker/RelativeRangePicker.js +12 -10
  37. package/dist/RelativeRangePicker/RelativeRangePicker.types.d.ts +3 -3
  38. package/dist/RelativeRangePicker/utils/findMatchingPreset.utils.d.ts +18 -0
  39. package/dist/RelativeRangePicker/utils/findMatchingPreset.utils.js +20 -0
  40. package/dist/RelativeRangePicker/utils/getCurrentGroupFromProps.utils.d.ts +3 -0
  41. package/dist/RelativeRangePicker/utils/getCurrentGroupFromProps.utils.js +9 -0
  42. package/dist/RelativeRangePicker/utils/getDefaultCustomRange.utils.d.ts +2 -0
  43. package/dist/RelativeRangePicker/utils/getDefaultCustomRange.utils.js +17 -0
  44. package/dist/RelativeRangePicker/utils/index.d.ts +8 -0
  45. package/dist/RelativeRangePicker/utils/index.js +8 -0
  46. package/dist/RelativeRangePicker/utils/isAbsolute.utils.d.ts +2 -0
  47. package/dist/RelativeRangePicker/utils/isAbsolute.utils.js +4 -0
  48. package/dist/RelativeRangePicker/utils/setDurationValue.utils.d.ts +2 -0
  49. package/dist/RelativeRangePicker/utils/setDurationValue.utils.js +6 -0
  50. package/dist/RelativeRangePicker/utils/setFuture.utils.d.ts +1 -0
  51. package/dist/RelativeRangePicker/utils/setFuture.utils.js +3 -0
  52. package/dist/RelativeRangePicker/utils/setOffsetValue.utils.d.ts +2 -0
  53. package/dist/RelativeRangePicker/utils/setOffsetValue.utils.js +6 -0
  54. package/dist/RelativeRangePicker/utils/updatePresetKey.utils.d.ts +2 -0
  55. package/dist/RelativeRangePicker/utils/updatePresetKey.utils.js +23 -0
  56. package/dist/constants.d.ts +14 -3
  57. package/dist/constants.js +13 -0
  58. package/dist/date.types.d.ts +8 -0
  59. package/package.json +20 -20
  60. package/dist/RelativeRangePicker/utils.d.ts +0 -19
  61. package/dist/RelativeRangePicker/utils.js +0 -52
package/CHANGELOG.md CHANGED
@@ -3,6 +3,28 @@
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.25.1](https://github.com/Synerise/synerise-design/compare/@synerise/ds-date-range-picker@0.25.0...@synerise/ds-date-range-picker@0.25.1) (2023-10-18)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * **date-range-picker:** ui/ux updates to filter and relative section ([8bb636b](https://github.com/Synerise/synerise-design/commit/8bb636b185a5fe98a4ef70350dc387493ac6f0a5))
12
+
13
+
14
+
15
+
16
+
17
+ # [0.25.0](https://github.com/Synerise/synerise-design/compare/@synerise/ds-date-range-picker@0.24.10...@synerise/ds-date-range-picker@0.25.0) (2023-10-17)
18
+
19
+
20
+ ### Features
21
+
22
+ * **date-range-picker:** display errors in daily / weekly / monthly scheduler ([1bc8695](https://github.com/Synerise/synerise-design/commit/1bc8695af46628b30492fb247a2ddbe5785711b0))
23
+
24
+
25
+
26
+
27
+
6
28
  ## [0.24.10](https://github.com/Synerise/synerise-design/compare/@synerise/ds-date-range-picker@0.24.9...@synerise/ds-date-range-picker@0.24.10) (2023-10-11)
7
29
 
8
30
 
package/README.md CHANGED
@@ -58,7 +58,8 @@ const value = {
58
58
  | showFilter | Enable range filtering | boolean | `false` |
59
59
  | showCustomRange | Enable custom range form in relative range picker | boolean | `true` |
60
60
  | validate | Function to specify if particular date ranges are correct | (date:Date)=>boolean | - |
61
- | value | Value of the picker | DateRange | new Date() |
61
+ | value | Value of the picker | DateRange | |
62
+ | defaultValue | Default value of the picker (when value is undefined and when user clears input) | DateRange | |
62
63
  | startAlwaysOnTheLeft | Enable not to move month from left side to right side | boolean | `false` |
63
64
  | onVisibleChange | Callback executed when popover with dateRangePicker changes its visibility | (visible: boolean) => void | - |
64
65
  | filterValueSelectionModes | Allowed modes to display in filter | DateLimitMode[] | ["Range", "Hour"] |
@@ -17,6 +17,7 @@ import { getDefaultTexts } from './utils';
17
17
 
18
18
  var DateRangePicker = function DateRangePicker(props) {
19
19
  var value = props.value,
20
+ defaultValue = props.defaultValue,
20
21
  onApply = props.onApply,
21
22
  showTime = props.showTime,
22
23
  texts = props.texts,
@@ -37,12 +38,13 @@ var DateRangePicker = function DateRangePicker(props) {
37
38
  _props$readOnly = props.readOnly,
38
39
  readOnly = _props$readOnly === void 0 ? false : _props$readOnly;
39
40
  var intl = useIntl();
41
+ var selectedRange = value || defaultValue;
40
42
 
41
43
  var _React$useState = React.useState(false),
42
44
  popupVisible = _React$useState[0],
43
45
  setPopupVisible = _React$useState[1];
44
46
 
45
- var _React$useState2 = React.useState(value),
47
+ var _React$useState2 = React.useState(selectedRange),
46
48
  selectedDate = _React$useState2[0],
47
49
  setSelectedDate = _React$useState2[1];
48
50
 
@@ -59,17 +61,18 @@ var DateRangePicker = function DateRangePicker(props) {
59
61
  }
60
62
  }, [popupVisible]);
61
63
  React.useEffect(function () {
62
- if (!isEqual(value, selectedDate)) {
63
- setSelectedDate(value);
64
+ if (!isEqual(selectedRange, selectedDate)) {
65
+ setSelectedDate(selectedRange);
64
66
  } // eslint-disable-next-line react-hooks/exhaustive-deps
65
67
 
66
- }, [value]);
67
- var onApplyCallback = React.useCallback(function (val) {
68
- onApply && onApply(val);
69
- setSelectedDate(val);
68
+ }, [selectedRange]);
69
+ var onApplyCallback = React.useCallback(function (range) {
70
+ var finalDateRange = range === undefined && defaultValue !== undefined ? defaultValue : range;
71
+ onApply && onApply(finalDateRange);
72
+ setSelectedDate(finalDateRange);
70
73
  setPopupVisible(false);
71
74
  setInputActive(false);
72
- }, [onApply]);
75
+ }, [defaultValue, onApply]);
73
76
 
74
77
  var conditionalVisibilityProps = _objectSpread({}, popupVisible === false && {
75
78
  visible: false
@@ -2,7 +2,7 @@ import { ReactNode } from 'react';
2
2
  import { WrappedComponentProps } from 'react-intl';
3
3
  import { PopoverProps } from 'antd/lib/popover';
4
4
  import { DateToFormatOptions } from '@synerise/ds-data-format';
5
- import { DateFilter, DateRange, RelativeUnits } from './date.types';
5
+ import { DateFilter, DateRange, DateRangePreset, RelativeUnits } from './date.types';
6
6
  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';
@@ -42,7 +42,7 @@ export interface DateRangePickerProps extends WrappedComponentProps {
42
42
  onFilterSave?: (filters: SavedFilter[]) => void;
43
43
  popoverProps?: Partial<PopoverProps>;
44
44
  popoverTrigger?: ReactNode;
45
- ranges?: DateRange[];
45
+ ranges?: DateRangePreset[];
46
46
  rangeUnits?: Array<RelativeUnits>;
47
47
  relativeFuture?: boolean;
48
48
  relativePast?: boolean;
@@ -59,6 +59,7 @@ export interface DateRangePickerProps extends WrappedComponentProps {
59
59
  message?: string;
60
60
  };
61
61
  value: DateRange;
62
+ defaultValue?: DateRange;
62
63
  /**
63
64
  * transforms value, by default omits ALL_TIME props
64
65
  */
@@ -1,3 +1,3 @@
1
1
  import { DailyProps } from './Daily.types';
2
- declare const Daily: ({ maxEntries, disabled, value, onChange, valueSelectionMode, timeFormat, timePickerProps, }: DailyProps) => JSX.Element;
2
+ declare const Daily: ({ maxEntries, disabled, value, onChange, valueSelectionMode, timeFormat, timePickerProps, errorTexts, }: DailyProps) => JSX.Element;
3
3
  export default Daily;
@@ -23,7 +23,9 @@ var Daily = function Daily(_ref) {
23
23
  _ref$valueSelectionMo = _ref.valueSelectionMode,
24
24
  valueSelectionMode = _ref$valueSelectionMo === void 0 ? ['Hour', 'Range'] : _ref$valueSelectionMo,
25
25
  timeFormat = _ref.timeFormat,
26
- timePickerProps = _ref.timePickerProps;
26
+ timePickerProps = _ref.timePickerProps,
27
+ _ref$errorTexts = _ref.errorTexts,
28
+ errorTexts = _ref$errorTexts === void 0 ? [] : _ref$errorTexts;
27
29
  var intl = useIntl();
28
30
  var defaultDayValue = useMemo(function () {
29
31
  return {
@@ -75,6 +77,7 @@ var Daily = function Daily(_ref) {
75
77
  disabled: disabled,
76
78
  days: EMPTY_OBJECT,
77
79
  onChange: NOOP,
80
+ errorTexts: errorTexts[index],
78
81
  onMultipleDayTimeChange: NOOP // eslint-disable-next-line react/no-array-index-key
79
82
  ,
80
83
  key: "range-" + index + "-" + String(s == null ? void 0 : s.start),
@@ -2,10 +2,12 @@ import { FilterBaseProps } from '../Filters.types';
2
2
  import { DateLimitMode } from '../../../Shared/TimeWindow/RangeFormContainer/RangeForm/RangeForm.types';
3
3
  import { DayOptions } from '../../../Shared/TimeWindow/TimeWindow.types';
4
4
  import { WithDisabledProp } from '../../../RangeFilter.types';
5
+ import { FilterErrorType } from '../../../Shared/TimeWindow/RangeFormContainer/RangeFormContainer.types';
5
6
  export type DailySchedule = DayOptions & {
6
7
  mode: DateLimitMode;
7
8
  };
8
9
  export type DailyProps = {
9
10
  value: DailySchedule[];
11
+ errorTexts?: FilterErrorType[];
10
12
  onChange: (value: DailyProps['value']) => void;
11
13
  } & FilterBaseProps & WithDisabledProp;
@@ -1,4 +1,3 @@
1
- import * as React from 'react';
2
1
  import { MonthlyProps } from './Monthly.types';
3
- declare const Monthly: React.FC<MonthlyProps>;
2
+ declare const Monthly: ({ maxEntries, valueSelectionMode, onChange, timeFormat, valueFormatOptions, value, timePickerProps, disabled, periodType, countedFrom, errorTexts, }: MonthlyProps) => JSX.Element;
4
3
  export default Monthly;
@@ -37,7 +37,8 @@ var Monthly = function Monthly(_ref) {
37
37
  _ref$periodType = _ref.periodType,
38
38
  periodType = _ref$periodType === void 0 ? DAYS_OF_PERIOD_ENUM.DAY_OF_MONTH : _ref$periodType,
39
39
  _ref$countedFrom = _ref.countedFrom,
40
- countedFrom = _ref$countedFrom === void 0 ? COUNTED_FROM_ENUM.BEGINNING : _ref$countedFrom;
40
+ countedFrom = _ref$countedFrom === void 0 ? COUNTED_FROM_ENUM.BEGINNING : _ref$countedFrom,
41
+ errorTexts = _ref.errorTexts;
41
42
  var defaultDayValue = React.useMemo(function () {
42
43
  return {
43
44
  start: DEFAULT_RANGE_START,
@@ -304,6 +305,11 @@ var Monthly = function Monthly(_ref) {
304
305
  var canAddRange = canAddAnotherRange(value, activeDays, maxEntries);
305
306
  var isAnyDaySelected = activeDays.length > 0;
306
307
  var shouldRenderAddButton = isAnyDaySelected && filteredSchedule.length < maxEntries && canAddRange && !disabled;
308
+
309
+ var getErrorTextsForFormRow = function getErrorTextsForFormRow(guid) {
310
+ return activeDays.length === 1 && errorTexts && errorTexts[guid] && errorTexts[guid][activeDays[0]];
311
+ };
312
+
307
313
  return /*#__PURE__*/React.createElement(S.NewFilterContainer, {
308
314
  ref: ref
309
315
  }, /*#__PURE__*/React.createElement(Grid, _extends({
@@ -323,6 +329,7 @@ var Monthly = function Monthly(_ref) {
323
329
  }, getGridSettings())), isAnyDaySelected && filteredSchedule.map(function (guid, index) {
324
330
  return /*#__PURE__*/React.createElement(RangeFormContainer, {
325
331
  days: EMPTY_OBJECT,
332
+ errorTexts: getErrorTextsForFormRow(guid),
326
333
  onChange: NOOP,
327
334
  key: "value-range-" + guid,
328
335
  onDayTimeChange: function onDayTimeChange(dayValue, dayKey) {
@@ -3,6 +3,7 @@ import { DayOptions } from '../../../Shared/TimeWindow/TimeWindow.types';
3
3
  import { DateLimitMode } from '../../../Shared/TimeWindow/RangeFormContainer/RangeForm/RangeForm.types';
4
4
  import { FilterBaseProps } from '../Filters.types';
5
5
  import { WithDisabledProp } from '../../../RangeFilter.types';
6
+ import { FilterErrorType } from '../../../Shared/TimeWindow/RangeFormContainer/RangeFormContainer.types';
6
7
  export type MonthlyScheduleDayValue = DayOptions & {
7
8
  mode: DateLimitMode;
8
9
  };
@@ -12,6 +13,9 @@ export type MonthlySchedule = {
12
13
  export 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
14
  export type MonthlyProps = {
14
15
  value: MonthlySchedule;
16
+ errorTexts?: {
17
+ [guid: string]: FilterErrorType[];
18
+ };
15
19
  periodType: DAYS_OF_PERIOD_ENUM;
16
20
  countedFrom: COUNTED_FROM_ENUM;
17
21
  onChange: (value: MonthlyProps['value']) => void;
@@ -1,4 +1,3 @@
1
- import * as React from 'react';
2
1
  import { WeeklyProps } from './Weekly.types';
3
- declare const Weekly: React.FC<WeeklyProps>;
2
+ declare const Weekly: ({ maxEntries, valueSelectionMode, onChange, timeFormat, valueFormatOptions, value, timePickerProps, disabled, errorTexts, }: WeeklyProps) => JSX.Element;
4
3
  export default Weekly;
@@ -30,7 +30,8 @@ var Weekly = function Weekly(_ref) {
30
30
  valueFormatOptions = _ref.valueFormatOptions,
31
31
  value = _ref.value,
32
32
  timePickerProps = _ref.timePickerProps,
33
- disabled = _ref.disabled;
33
+ disabled = _ref.disabled,
34
+ errorTexts = _ref.errorTexts;
34
35
  var defaultDayValue = React.useMemo(function () {
35
36
  return {
36
37
  start: DEFAULT_RANGE_START,
@@ -239,6 +240,11 @@ var Weekly = function Weekly(_ref) {
239
240
  var canAddRange = canAddAnotherRange(value, activeDays, maxEntries);
240
241
  var isAnyDaySelected = activeDays.length > 0;
241
242
  var shouldRenderAddButton = isAnyDaySelected && filteredSchedule.length < maxEntries && canAddRange && !disabled;
243
+
244
+ var getErrorTextsForFormRow = function getErrorTextsForFormRow(guid) {
245
+ return activeDays.length === 1 && errorTexts && errorTexts[guid] && errorTexts[guid][activeDays[0]];
246
+ };
247
+
242
248
  return /*#__PURE__*/React.createElement(S.NewFilterContainer, {
243
249
  ref: ref
244
250
  }, /*#__PURE__*/React.createElement(Grid, {
@@ -258,6 +264,7 @@ var Weekly = function Weekly(_ref) {
258
264
  return /*#__PURE__*/React.createElement(RangeFormContainer, {
259
265
  days: EMPTY_OBJECT,
260
266
  onChange: NOOP,
267
+ errorTexts: getErrorTextsForFormRow(guid),
261
268
  key: "value-range-" + guid,
262
269
  onDayTimeChange: function onDayTimeChange(dayValue, dayKey) {
263
270
  handleDayTimeChange(dayValue, dayKey, guid);
@@ -2,6 +2,7 @@ import { DayOptions } from '../../../Shared/TimeWindow/TimeWindow.types';
2
2
  import { DateLimitMode } from '../../../Shared/TimeWindow/RangeFormContainer/RangeForm/RangeForm.types';
3
3
  import { FilterBaseProps } from '../Filters.types';
4
4
  import { WithDisabledProp } from '../../../RangeFilter.types';
5
+ import { FilterErrorType } from '../../../Shared/TimeWindow/RangeFormContainer/RangeFormContainer.types';
5
6
  export type WeeklyScheduleDayValue = DayOptions & {
6
7
  mode: DateLimitMode;
7
8
  };
@@ -11,5 +12,8 @@ export type WeeklySchedule = {
11
12
  export type DayOfWeekIndex = 0 | 1 | 2 | 3 | 4 | 5 | 6;
12
13
  export type WeeklyProps = {
13
14
  value: WeeklySchedule;
15
+ errorTexts?: {
16
+ [guid: string]: FilterErrorType[];
17
+ };
14
18
  onChange: (value: WeeklyProps['value']) => void;
15
19
  } & FilterBaseProps & WithDisabledProp;
@@ -1,4 +1,3 @@
1
- import * as React from 'react';
2
1
  import { RangeFilterStatusProps } from './RangeFilterStatus.types';
3
- declare const RangeFilterStatus: React.FC<RangeFilterStatusProps>;
2
+ declare const RangeFilterStatus: ({ onFilterRemove, disabled, filter, label, onClick, texts }: RangeFilterStatusProps) => JSX.Element;
4
3
  export default RangeFilterStatus;
@@ -1,4 +1,4 @@
1
- import * as React from 'react';
1
+ import React from 'react';
2
2
  import Button from '@synerise/ds-button';
3
3
  import ContentItem from '@synerise/ds-manageable-list/dist/Item/ContentItem/ContentItem';
4
4
  import Badge from '@synerise/ds-badge';
@@ -13,16 +13,17 @@ var RangeFilterStatus = function RangeFilterStatus(_ref) {
13
13
  disabled = _ref.disabled,
14
14
  filter = _ref.filter,
15
15
  label = _ref.label,
16
- _onClick = _ref.onClick;
16
+ _onClick = _ref.onClick,
17
+ texts = _ref.texts;
17
18
  var intl = useIntl();
18
- return /*#__PURE__*/React.createElement(S.Container, null, !filter ? /*#__PURE__*/React.createElement(Button.Creator, {
19
+ return /*#__PURE__*/React.createElement(S.Container, null, /*#__PURE__*/React.createElement(S.Title, null, texts == null ? void 0 : texts.filter), !filter ? /*#__PURE__*/React.createElement(Button.Creator, {
19
20
  label: label,
20
21
  disabled: disabled,
21
22
  onClick: _onClick,
22
23
  block: true
23
24
  }) : /*#__PURE__*/React.createElement(ContentItem, {
24
- onClick: function onClick(e) {
25
- e.stopPropagation();
25
+ onClick: function onClick(event) {
26
+ event.stopPropagation();
26
27
 
27
28
  _onClick();
28
29
  },
@@ -35,8 +36,8 @@ var RangeFilterStatus = function RangeFilterStatus(_ref) {
35
36
  defaultMessage: 'Remove'
36
37
  })
37
38
  }, /*#__PURE__*/React.createElement(Icon, {
38
- onClick: function onClick(e) {
39
- e.stopPropagation();
39
+ onClick: function onClick(event) {
40
+ event.stopPropagation();
40
41
  onFilterRemove && onFilterRemove();
41
42
  },
42
43
  component: /*#__PURE__*/React.createElement(CloseS, null),
@@ -1,3 +1,4 @@
1
1
  export declare const BadgeWrapper: import("styled-components").StyledComponent<"div", any, {}, never>;
2
+ export declare const Title: import("styled-components").StyledComponent<"h3", any, {}, never>;
2
3
  export declare const SuffixText: import("styled-components").StyledComponent<"span", any, {}, never>;
3
4
  export declare const Container: import("styled-components").StyledComponent<"div", any, {}, never>;
@@ -3,13 +3,19 @@ export var BadgeWrapper = styled.div.withConfig({
3
3
  displayName: "RangeFilterStatusstyles__BadgeWrapper",
4
4
  componentId: "sc-1ei851t-0"
5
5
  })(["margin-right:16px;margin-bottom:-2px;"]);
6
+ export var Title = styled.h3.withConfig({
7
+ displayName: "RangeFilterStatusstyles__Title",
8
+ componentId: "sc-1ei851t-1"
9
+ })(["font-size:16px;line-height:1.39;color:", ";margin-bottom:1em;"], function (props) {
10
+ return props.theme.palette['grey-800'];
11
+ });
6
12
  export var SuffixText = styled.span.withConfig({
7
13
  displayName: "RangeFilterStatusstyles__SuffixText",
8
- componentId: "sc-1ei851t-1"
14
+ componentId: "sc-1ei851t-2"
9
15
  })(["color:", ";font-weight:500;margin-right:16px;"], function (props) {
10
16
  return props.theme.palette['blue-600'];
11
17
  });
12
18
  export var Container = styled.div.withConfig({
13
19
  displayName: "RangeFilterStatusstyles__Container",
14
- componentId: "sc-1ei851t-2"
15
- })(["margin:10px 0 24px 0;"]);
20
+ componentId: "sc-1ei851t-3"
21
+ })(["padding:16px 24px 24px;"]);
@@ -1,8 +1,10 @@
1
1
  import { DateFilter } from '../../../date.types';
2
+ import { Texts } from '../../../DateRangePicker.types';
2
3
  export type RangeFilterStatusProps = {
3
4
  filter: DateFilter | undefined;
4
5
  disabled: boolean;
5
6
  label: string;
7
+ texts?: Partial<Texts>;
6
8
  onClick: () => void;
7
9
  onFilterRemove: () => void;
8
10
  };
@@ -1,5 +1,5 @@
1
1
  import { RangeFormProps } from './RangeForm.types';
2
2
  import { FORM_MODES, RANGE_FORM_INTL_KEYS } from './RangeForm.constants';
3
3
  export { FORM_MODES, RANGE_FORM_INTL_KEYS };
4
- declare const RangeForm: ({ onModeChange, disabled, startDate, endDate, onStartChange, onEndChange, onExactHourSelect, onRangeDelete, valueSelectionModes, mode, rangeDisplayMode, isInvertedRange, timePickerProps, texts, valueFormatOptions, }: RangeFormProps) => JSX.Element;
4
+ declare const RangeForm: ({ onModeChange, disabled, startDate, endDate, onStartChange, onEndChange, onExactHourSelect, onRangeDelete, valueSelectionModes, mode, rangeDisplayMode, isInvertedRange, timePickerProps, texts, valueFormatOptions, errorTexts, }: RangeFormProps) => JSX.Element;
5
5
  export default RangeForm;
@@ -34,7 +34,8 @@ var RangeForm = function RangeForm(_ref) {
34
34
  isInvertedRange = _ref.isInvertedRange,
35
35
  timePickerProps = _ref.timePickerProps,
36
36
  texts = _ref.texts,
37
- valueFormatOptions = _ref.valueFormatOptions;
37
+ valueFormatOptions = _ref.valueFormatOptions,
38
+ errorTexts = _ref.errorTexts;
38
39
 
39
40
  var _useDataFormat = useDataFormat(),
40
41
  is12HoursClock = _useDataFormat.is12HoursClock;
@@ -71,8 +72,12 @@ var RangeForm = function RangeForm(_ref) {
71
72
  return node.parentElement != null ? node.parentElement : document.body;
72
73
  };
73
74
 
75
+ var errorForFirstItem = (errorTexts == null ? void 0 : errorTexts.length) && errorTexts[0];
76
+ var errorForSecondItem = (errorTexts == null ? void 0 : errorTexts.length) && errorTexts[1];
77
+
74
78
  var singleHourPicker = function singleHourPicker() {
75
79
  return /*#__PURE__*/React.createElement(TimePicker, _extends({
80
+ errorText: errorForFirstItem,
76
81
  disabled: disabled,
77
82
  clearTooltip: texts == null ? void 0 : texts.clear,
78
83
  onChange: function onChange(date) {
@@ -144,6 +149,7 @@ var RangeForm = function RangeForm(_ref) {
144
149
 
145
150
  var renderRangePicker = function renderRangePicker() {
146
151
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(TimePicker, _extends({
152
+ errorText: errorForFirstItem,
147
153
  disabled: disabled,
148
154
  clearTooltip: texts == null ? void 0 : texts.clear,
149
155
  onChange: function onChange(date) {
@@ -160,6 +166,7 @@ var RangeForm = function RangeForm(_ref) {
160
166
  use12HourClock: is12HoursClock,
161
167
  valueFormatOptions: valueFormatOptions
162
168
  }, timePickerProps)), /*#__PURE__*/React.createElement(S.Separator, null, "-"), /*#__PURE__*/React.createElement(TimePicker, _extends({
169
+ errorText: errorForSecondItem,
163
170
  disabled: disabled,
164
171
  clearTooltip: texts == null ? void 0 : texts.clear,
165
172
  onChange: function onChange(date) {
@@ -1,4 +1,4 @@
1
- import * as React from 'react';
1
+ import { ReactNode } from 'react';
2
2
  import { WithTranslations } from '../../../../../DateRangePicker.types';
3
3
  import { RangeFormContainerProps } from '../RangeFormContainer.types';
4
4
  import { WithDisabledProp } from '../../../../RangeFilter.types';
@@ -7,7 +7,7 @@ export type RangeDisplayMode = 'timepicker' | 'slider';
7
7
  export type RangeFormProps = {
8
8
  mode: DateLimitMode;
9
9
  onModeChange: (mode: DateLimitMode) => void;
10
- title?: React.ReactNode;
10
+ title?: ReactNode;
11
11
  startDate: Date | undefined;
12
12
  endDate: Date | undefined;
13
13
  onStartChange: (value?: Date) => void;
@@ -17,8 +17,8 @@ export type RangeFormProps = {
17
17
  valueSelectionModes: DateLimitMode[];
18
18
  rangeDisplayMode?: RangeDisplayMode;
19
19
  isInvertedRange?: boolean;
20
- } & WithTranslations & WithDisabledProp & Pick<RangeFormContainerProps, 'timePickerProps' | 'valueFormatOptions'>;
20
+ } & WithTranslations & WithDisabledProp & Pick<RangeFormContainerProps, 'timePickerProps' | 'valueFormatOptions' | 'errorTexts'>;
21
21
  export type RangeFormTexts = {
22
- range: React.ReactNode | string;
23
- hour: React.ReactNode | string;
22
+ range: ReactNode | string;
23
+ hour: ReactNode | string;
24
24
  };
@@ -1,3 +1,3 @@
1
1
  import type { RangeFormContainerProps } from './RangeFormContainer.types';
2
- declare const RangeFormContainer: ({ activeDays, disabled, days, dayKeys, getDayValue, getDayLabel, onDayTimeChange, onMultipleDayTimeChange, hideHeader, headerOptions, monthlyFilter, monthlyFilterPeriod, onRangeClear, onRangePaste, onRangeCopy, onRangeDelete, texts, onChange, valueSelectionModes, rangeDisplayMode, onModeChange, timePickerProps, renderSuffix, timeFormat, valueFormatOptions, }: RangeFormContainerProps) => JSX.Element;
2
+ declare const RangeFormContainer: ({ errorTexts, activeDays, disabled, days, dayKeys, getDayValue, getDayLabel, onDayTimeChange, onMultipleDayTimeChange, hideHeader, headerOptions, monthlyFilter, monthlyFilterPeriod, onRangeClear, onRangePaste, onRangeCopy, onRangeDelete, texts, onChange, valueSelectionModes, rangeDisplayMode, onModeChange, timePickerProps, renderSuffix, timeFormat, valueFormatOptions, }: RangeFormContainerProps) => JSX.Element;
3
3
  export default RangeFormContainer;
@@ -16,7 +16,8 @@ import { DEFAULT_LIMIT_MODE } from '../TimeWindow';
16
16
  import * as S from './RangeFormContainer.styles';
17
17
 
18
18
  var RangeFormContainer = function RangeFormContainer(_ref) {
19
- var activeDays = _ref.activeDays,
19
+ var errorTexts = _ref.errorTexts,
20
+ activeDays = _ref.activeDays,
20
21
  disabled = _ref.disabled,
21
22
  days = _ref.days,
22
23
  dayKeys = _ref.dayKeys,
@@ -115,6 +116,7 @@ var RangeFormContainer = function RangeFormContainer(_ref) {
115
116
  return /*#__PURE__*/React.createElement(RangeForm, {
116
117
  disabled: disabled,
117
118
  texts: texts,
119
+ errorTexts: errorTexts,
118
120
  onModeChange: function onModeChange(selected) {
119
121
  setMode(selected);
120
122
  handleModeChange(selected);
@@ -132,7 +134,7 @@ var RangeFormContainer = function RangeFormContainer(_ref) {
132
134
  rangeDisplayMode: rangeDisplayMode,
133
135
  isInvertedRange: Boolean(dayValue == null ? void 0 : dayValue.inverted)
134
136
  });
135
- }, [timeFormat, rangeDisplayMode, valueSelectionModes, handleModeChange, mode, disabled, dayValue, onRangeDelete, texts, timePickerProps, onStartChange, onEndChange, onExactHourSelect, valueFormatOptions]);
137
+ }, [disabled, texts, errorTexts, mode, dayValue.start, dayValue.stop, dayValue == null ? void 0 : dayValue.inverted, timeFormat, onStartChange, onEndChange, onExactHourSelect, onRangeDelete, valueSelectionModes, valueFormatOptions, timePickerProps, rangeDisplayMode, handleModeChange]);
136
138
  var invertedToggleLink = React.useMemo(function () {
137
139
  return /*#__PURE__*/React.createElement(S.InvertAction, {
138
140
  onClick: toggleInverted
@@ -1,14 +1,16 @@
1
- import * as React from 'react';
1
+ import { ReactNode } from 'react';
2
2
  import type { TimePickerProps } from '@synerise/ds-time-picker';
3
3
  import type { DateToFormatOptions } from '@synerise/ds-data-format';
4
4
  import { DayKey, RangeActions, TimeWindowProps, TimeWindowTexts } from '../TimeWindow.types';
5
5
  import { FilterDefinition, WithDisabledProp } from '../../../RangeFilter.types';
6
6
  import { DateLimitMode, RangeDisplayMode } from './RangeForm/RangeForm.types';
7
7
  export type DateValue = [Date | undefined, Date | undefined, boolean | undefined];
8
+ export type FilterErrorType = [ReactNode?, ReactNode?];
8
9
  export type RangeFormContainerProps = {
10
+ errorTexts?: FilterErrorType;
9
11
  activeDays: DayKey[];
10
12
  dayKeys: DayKey | DayKey[];
11
- getDayLabel: (dayKey: DayKey, long?: boolean) => string | object | React.ReactNode;
13
+ getDayLabel: (dayKey: DayKey, long?: boolean) => string | object | ReactNode;
12
14
  getDayValue: (dayKey: DayKey) => Partial<FilterDefinition>;
13
15
  onMultipleDayTimeChange: (value: DateValue) => void;
14
16
  onDayTimeChange: (value: DateValue, dayKey: DayKey) => void;
@@ -23,5 +25,5 @@ export type RangeFormContainerProps = {
23
25
  timeFormat?: string;
24
26
  valueFormatOptions?: DateToFormatOptions;
25
27
  timePickerProps?: Partial<TimePickerProps>;
26
- renderSuffix?: () => React.ReactNode;
28
+ renderSuffix?: () => ReactNode;
27
29
  } & Pick<TimeWindowProps, 'monthlyFilter' | 'monthlyFilterPeriod' | 'hideHeader' | 'headerOptions' | 'onChange' | 'days'> & WithDisabledProp & Partial<RangeActions>;
@@ -48,6 +48,7 @@ var RangePickerInput = function RangePickerInput(_ref) {
48
48
  setHovered = _React$useState[1];
49
49
 
50
50
  var showError = error || !!errorText;
51
+ var hasValue = (dateRangeValue == null ? void 0 : dateRangeValue.from) && (dateRangeValue == null ? void 0 : dateRangeValue.to);
51
52
  var handleIconMouseEnter = React.useCallback(function () {
52
53
  return setHovered(true);
53
54
  }, []);
@@ -113,7 +114,7 @@ var RangePickerInput = function RangePickerInput(_ref) {
113
114
  active: !!highlight && !disabled,
114
115
  tabIndex: disabled ? -1 : 0,
115
116
  focus: active && !disabled
116
- }, placeholder, /*#__PURE__*/React.createElement(S.IconSeparator, null), !readOnly && hovered && !!value && !!value.to && !!value.from ? /*#__PURE__*/React.createElement(Tooltip, {
117
+ }, placeholder, /*#__PURE__*/React.createElement(S.IconSeparator, null), !readOnly && hovered && hasValue ? /*#__PURE__*/React.createElement(Tooltip, {
117
118
  title: texts == null ? void 0 : texts.clear
118
119
  }, /*#__PURE__*/React.createElement(S.ClearIconWrapper, null, /*#__PURE__*/React.createElement(Icon, {
119
120
  component: /*#__PURE__*/React.createElement(Close3S, null),
@@ -1,11 +1,11 @@
1
1
  import React, { PureComponent } from 'react';
2
2
  import type { DateRangePickerProps, DateRangePickerProps as Props, State, AddonType } from './DateRangePicker.types';
3
- import type { DateRange, RelativeDateRange } from './date.types';
3
+ import type { DateRange } from './date.types';
4
4
  import { FilterDefinition, FilterValue } from './RangeFilter/RangeFilter.types';
5
5
  export declare function defaultValueTransformer(value: DateRange): DateRange;
6
6
  export declare class RawDateRangePicker extends PureComponent<DateRangePickerProps, State> {
7
7
  static defaultProps: {
8
- ranges: (import("./date.types").AbsoluteDateRange | RelativeDateRange)[];
8
+ ranges: (import("./date.types").RelativeDateRangePreset | import("./date.types").AbsoluteDateRangePreset)[];
9
9
  relativePast: boolean;
10
10
  showRelativePicker: boolean;
11
11
  validate: () => {
@@ -257,34 +257,23 @@ export var RawDateRangePicker = /*#__PURE__*/function (_PureComponent) {
257
257
  }
258
258
 
259
259
  if (showFilter) {
260
- var _value$filter, _value$filter2;
261
-
262
260
  var _addonKey = 'filter';
263
261
  var filterEnabled = value.from && value.to || isLifetime(value);
264
262
  var label = value != null && value.filter ? intl.formatMessage({
265
263
  id: "DS.DATE-RANGE-PICKER.FILTER-ENABLED",
266
264
  defaultMessage: 'Filter enabled'
267
265
  }) : intl.formatMessage({
268
- id: "DS.DATE-RANGE-PICKER.ADD-FILTER",
269
- defaultMessage: 'Add filter'
266
+ id: "DS.DATE-RANGE-PICKER.SELECT-DATE-FILTER",
267
+ defaultMessage: 'Select date filter'
270
268
  });
271
269
  addons.push({
272
- content: /*#__PURE__*/React.createElement(AddonCollapse, {
273
- content: /*#__PURE__*/React.createElement(RangeFilterStatus, {
274
- onFilterRemove: _this.handleRemoveFilterClick,
275
- filter: value.filter,
276
- disabled: !filterEnabled,
277
- label: label,
278
- onClick: _this.handleModalOpenClick
279
- }),
280
- title: texts == null ? void 0 : texts.filter,
281
- expanded: _addonKey === visibleAddonKey,
282
- onCollapseChange: function onCollapseChange(expanded) {
283
- return _this.handleAddonCollapse(_addonKey, expanded);
284
- },
285
- collapsedSummary: value != null && (_value$filter = value.filter) != null && _value$filter.type ? intl.formatMessage({
286
- id: "DS.DATE-RANGE-PICKER." + (value == null ? void 0 : (_value$filter2 = value.filter) == null ? void 0 : _value$filter2.type)
287
- }) : null
270
+ content: /*#__PURE__*/React.createElement(RangeFilterStatus, {
271
+ onFilterRemove: _this.handleRemoveFilterClick,
272
+ filter: value.filter,
273
+ texts: texts,
274
+ disabled: !filterEnabled,
275
+ label: label,
276
+ onClick: _this.handleModalOpenClick
288
277
  }),
289
278
  key: _addonKey
290
279
  });
@@ -296,7 +285,7 @@ export var RawDateRangePicker = /*#__PURE__*/function (_PureComponent) {
296
285
  _this.state = {
297
286
  mode: MODES.DATE,
298
287
  value: normalizeRange(props.value),
299
- visibleAddonKey: ''
288
+ visibleAddonKey: 'relative-picker'
300
289
  };
301
290
  return _this;
302
291
  }
@@ -306,7 +295,7 @@ export var RawDateRangePicker = /*#__PURE__*/function (_PureComponent) {
306
295
  _proto.componentDidUpdate = function componentDidUpdate(prevProps) {
307
296
  var value = this.props.value;
308
297
 
309
- if (prevProps.value !== value && !value) {
298
+ if (prevProps.value !== value) {
310
299
  this.handleRangeChange(value);
311
300
  }
312
301
  };
@@ -367,9 +356,9 @@ export var RawDateRangePicker = /*#__PURE__*/function (_PureComponent) {
367
356
 
368
357
  function isRelative(dateRange) {
369
358
  var isLegacyCustom = Object.keys(value).includes('key') && key === undefined;
370
- return CONST.RELATIVE_PRESETS.map(function (e) {
359
+ return dateRange.key && (CONST.RELATIVE_PRESETS.map(function (e) {
371
360
  return e.key;
372
- }).includes(dateRange.key) || isLegacyCustom;
361
+ }).includes(dateRange.key) || dateRange.key === CONST.CUSTOM_RANGE_KEY) || isLegacyCustom;
373
362
  }
374
363
 
375
364
  var isValidRelative = isRelative(value) && Boolean(value.offset && value.duration);
@@ -5,7 +5,7 @@ import * as S from '../../RelativeRangePicker.styles';
5
5
  import ModeDropdown from '../ModeDropdown/ModeDropdown';
6
6
  import DurationField from './DurationField/DurationField';
7
7
  import OffsetField from './OffsetField/OffsetField';
8
- import { RANGES_MODE } from '../../utils';
8
+ import { RANGES_MODE } from '../../../constants';
9
9
  import TimestampRange from '../TimestampRange/TimestampRange';
10
10
  export var setOffsetType = set(lensPath(['offset', 'type']));
11
11