@atlaskit/link-datasource 1.29.5 → 1.30.0

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 (41) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/cjs/ui/confluence-search-modal/basic-filters/filters/date-range-picker/index.js +126 -33
  3. package/dist/cjs/ui/confluence-search-modal/basic-filters/filters/date-range-picker/messages.js +50 -0
  4. package/dist/cjs/ui/confluence-search-modal/basic-filters/filters/date-range-picker/styled.js +6 -4
  5. package/dist/cjs/ui/confluence-search-modal/basic-filters/filters/date-range-picker/trigger.js +6 -6
  6. package/dist/cjs/ui/confluence-search-modal/basic-filters/filters/date-range-picker/utils.js +66 -0
  7. package/dist/cjs/ui/confluence-search-modal/basic-filters/index.js +12 -2
  8. package/dist/cjs/ui/confluence-search-modal/modal/index.js +36 -13
  9. package/dist/es2019/ui/confluence-search-modal/basic-filters/filters/date-range-picker/index.js +116 -31
  10. package/dist/es2019/ui/confluence-search-modal/basic-filters/filters/date-range-picker/messages.js +50 -0
  11. package/dist/es2019/ui/confluence-search-modal/basic-filters/filters/date-range-picker/styled.js +6 -4
  12. package/dist/es2019/ui/confluence-search-modal/basic-filters/filters/date-range-picker/trigger.js +6 -6
  13. package/dist/es2019/ui/confluence-search-modal/basic-filters/filters/date-range-picker/utils.js +57 -0
  14. package/dist/es2019/ui/confluence-search-modal/basic-filters/index.js +8 -1
  15. package/dist/es2019/ui/confluence-search-modal/modal/index.js +32 -7
  16. package/dist/esm/ui/confluence-search-modal/basic-filters/filters/date-range-picker/index.js +128 -35
  17. package/dist/esm/ui/confluence-search-modal/basic-filters/filters/date-range-picker/messages.js +50 -0
  18. package/dist/esm/ui/confluence-search-modal/basic-filters/filters/date-range-picker/styled.js +6 -4
  19. package/dist/esm/ui/confluence-search-modal/basic-filters/filters/date-range-picker/trigger.js +6 -6
  20. package/dist/esm/ui/confluence-search-modal/basic-filters/filters/date-range-picker/utils.js +59 -0
  21. package/dist/esm/ui/confluence-search-modal/basic-filters/index.js +12 -2
  22. package/dist/esm/ui/confluence-search-modal/modal/index.js +36 -13
  23. package/dist/types/ui/common/modal/popup-select/types.d.ts +3 -1
  24. package/dist/types/ui/confluence-search-modal/basic-filters/filters/date-range-picker/index.d.ts +4 -3
  25. package/dist/types/ui/confluence-search-modal/basic-filters/filters/date-range-picker/messages.d.ts +50 -0
  26. package/dist/types/ui/confluence-search-modal/basic-filters/filters/date-range-picker/trigger.d.ts +4 -4
  27. package/dist/types/ui/confluence-search-modal/basic-filters/filters/date-range-picker/utils.d.ts +6 -0
  28. package/dist/types/ui/confluence-search-modal/basic-filters/index.d.ts +2 -2
  29. package/dist/types/ui/confluence-search-modal/confluence-search-container/index.d.ts +1 -1
  30. package/dist/types/ui/confluence-search-modal/modal/index.d.ts +1 -1
  31. package/dist/types/ui/confluence-search-modal/types.d.ts +3 -3
  32. package/dist/types-ts4.5/ui/common/modal/popup-select/types.d.ts +3 -1
  33. package/dist/types-ts4.5/ui/confluence-search-modal/basic-filters/filters/date-range-picker/index.d.ts +4 -3
  34. package/dist/types-ts4.5/ui/confluence-search-modal/basic-filters/filters/date-range-picker/messages.d.ts +50 -0
  35. package/dist/types-ts4.5/ui/confluence-search-modal/basic-filters/filters/date-range-picker/trigger.d.ts +4 -4
  36. package/dist/types-ts4.5/ui/confluence-search-modal/basic-filters/filters/date-range-picker/utils.d.ts +6 -0
  37. package/dist/types-ts4.5/ui/confluence-search-modal/basic-filters/index.d.ts +2 -2
  38. package/dist/types-ts4.5/ui/confluence-search-modal/confluence-search-container/index.d.ts +1 -1
  39. package/dist/types-ts4.5/ui/confluence-search-modal/modal/index.d.ts +1 -1
  40. package/dist/types-ts4.5/ui/confluence-search-modal/types.d.ts +3 -3
  41. package/package.json +4 -3
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @atlaskit/link-datasource
2
2
 
3
+ ## 1.30.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#92396](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/92396) [`f13614517fe4`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/f13614517fe4) - [ux] Introduces a custom date range filter for confluence smart link list view modal
8
+
3
9
  ## 1.29.5
4
10
 
5
11
  ### Patch Changes
@@ -6,43 +6,94 @@ Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
8
  exports.DateRangePicker = void 0;
9
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
10
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
11
  var _react = _interopRequireWildcard(require("react"));
11
12
  var _reactIntlNext = require("react-intl-next");
13
+ var _datetimePicker = require("@atlaskit/datetime-picker");
14
+ var _error = _interopRequireDefault(require("@atlaskit/icon/glyph/error"));
12
15
  var _popup = _interopRequireDefault(require("@atlaskit/popup"));
16
+ var _colors = require("@atlaskit/theme/colors");
13
17
  var _constants = require("@atlaskit/theme/constants");
14
18
  var _types = require("../../types");
15
19
  var _messages = require("./messages");
16
20
  var _PopupComponent = require("./PopupComponent");
17
21
  var _styled = require("./styled");
18
22
  var _trigger = require("./trigger");
23
+ var _utils = require("./utils");
19
24
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
20
25
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
26
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
27
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
21
28
  var lastModifiedValues = ['anyTime', 'today', 'yesterday', 'past7Days', 'past30Days', 'pastYear', 'custom'];
22
29
  var defaultOptionValue = 'anyTime';
23
- var filterName = _types.CLOLBasicFilters.lastModified;
24
30
  var DateRangePicker = exports.DateRangePicker = function DateRangePicker(_ref) {
25
- var onSelectionChange = _ref.onSelectionChange;
26
- var _useState = (0, _react.useState)(null),
31
+ var onSelectionChange = _ref.onSelectionChange,
32
+ selection = _ref.selection;
33
+ var _useState = (0, _react.useState)(selection === null || selection === void 0 ? void 0 : selection.value),
27
34
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
28
35
  currentOption = _useState2[0],
29
36
  setCurrentOption = _useState2[1];
30
- var _useState3 = (0, _react.useState)(false),
37
+ var _useState3 = (0, _react.useState)((0, _utils.getInvalidDateRange)(selection === null || selection === void 0 ? void 0 : selection.from, selection === null || selection === void 0 ? void 0 : selection.to)),
31
38
  _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
32
- isPickerOpen = _useState4[0],
33
- setIsPickerOpen = _useState4[1];
39
+ invalidDateRange = _useState4[0],
40
+ setInvalidDateRange = _useState4[1];
41
+ var customFromDate = (0, _react.useRef)(selection === null || selection === void 0 ? void 0 : selection.from);
42
+ var customToDate = (0, _react.useRef)(selection === null || selection === void 0 ? void 0 : selection.to);
43
+ var _useState5 = (0, _react.useState)(false),
44
+ _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
45
+ isPickerOpen = _useState6[0],
46
+ setIsPickerOpen = _useState6[1];
34
47
  var _useIntl = (0, _reactIntlNext.useIntl)(),
35
- formatMessage = _useIntl.formatMessage;
36
- var onClickFilterOption = (0, _react.useCallback)(function (option) {
37
- setCurrentOption(option);
48
+ locale = _useIntl.locale,
49
+ formatMessage = _useIntl.formatMessage,
50
+ formatDate = _useIntl.formatDate;
51
+ var isCustomSelected = currentOption === 'custom' || (selection === null || selection === void 0 ? void 0 : selection.value) === 'custom';
52
+ var maxDate = new Date().toISOString();
53
+ (0, _react.useEffect)(function () {
54
+ if (isPickerOpen) {
55
+ customFromDate.current = selection === null || selection === void 0 ? void 0 : selection.from;
56
+ customToDate.current = selection === null || selection === void 0 ? void 0 : selection.to;
57
+ }
58
+ }, [isPickerOpen, selection === null || selection === void 0 ? void 0 : selection.from, selection === null || selection === void 0 ? void 0 : selection.to]);
59
+ var handleFromOnChange = function handleFromOnChange(date) {
60
+ customFromDate.current = date;
61
+ setInvalidDateRange((0, _utils.getInvalidDateRange)(customFromDate.current, customToDate.current));
62
+ };
63
+ var handleToOnChange = function handleToOnChange(date) {
64
+ customToDate.current = date;
65
+ setInvalidDateRange((0, _utils.getInvalidDateRange)(customFromDate.current, customToDate.current));
66
+ };
67
+ var handleClickUpdateDateRange = function handleClickUpdateDateRange() {
68
+ var label = 'custom';
69
+ if (customFromDate.current && !customToDate.current) {
70
+ label = customFromDate.current;
71
+ } else if (customToDate.current && !customFromDate.current) {
72
+ label = customToDate.current;
73
+ }
74
+ onSelectionChange(_types.CLOLBasicFilters.lastModified, {
75
+ optionType: 'dateRange',
76
+ label: label,
77
+ value: 'custom',
78
+ from: customFromDate.current,
79
+ to: customToDate.current
80
+ });
38
81
  setIsPickerOpen(false);
39
- onSelectionChange(filterName, [{
40
- optionType: 'defaultOption',
82
+ };
83
+ var handleClickFilterOption = (0, _react.useCallback)(function (option) {
84
+ setCurrentOption(option);
85
+ onSelectionChange(_types.CLOLBasicFilters.lastModified, {
86
+ optionType: 'dateRange',
41
87
  label: option,
42
88
  value: option
43
- }]);
89
+ });
90
+ if (option !== 'custom') {
91
+ setIsPickerOpen(false);
92
+ }
44
93
  }, [onSelectionChange]);
45
94
  var handleTogglePopup = (0, _react.useCallback)(function () {
95
+ // If users click out of popup, we let selection prop define the current option when opened again until user sets state
96
+ setCurrentOption(undefined);
46
97
  setIsPickerOpen(!isPickerOpen);
47
98
  }, [isPickerOpen]);
48
99
  return /*#__PURE__*/_react.default.createElement(_popup.default, {
@@ -54,36 +105,78 @@ var DateRangePicker = exports.DateRangePicker = function DateRangePicker(_ref) {
54
105
  return /*#__PURE__*/_react.default.createElement(_styled.CustomDropdown, null, lastModifiedValues.map(function (option) {
55
106
  return /*#__PURE__*/_react.default.createElement(_styled.CustomDropdownItem, {
56
107
  key: option
57
- //want to show Anytime as selected if none of the other options are selected
108
+ // want to show Anytime as selected if none of the other options are selected
58
109
  ,
59
- isSelected: currentOption ? option === currentOption : option === defaultOptionValue,
110
+ isSelected: selection !== null && selection !== void 0 && selection.value ? option === selection.value : option === defaultOptionValue,
60
111
  onClick: function onClick() {
61
- return onClickFilterOption(option);
112
+ return handleClickFilterOption(option);
113
+ }
114
+ }, (0, _utils.getDropdownLabel)(option, formatMessage));
115
+ }), isPickerOpen && isCustomSelected && /*#__PURE__*/_react.default.createElement(_styled.CustomDateWrapper, null, /*#__PURE__*/_react.default.createElement(_styled.DatePickersWrapper, null, /*#__PURE__*/_react.default.createElement(_datetimePicker.DatePicker, {
116
+ maxDate: maxDate,
117
+ innerProps: {
118
+ style: {
119
+ width: 140
120
+ }
121
+ },
122
+ testId: "date-from-picker",
123
+ dateFormat: "D MMM YYYY",
124
+ onChange: handleFromOnChange,
125
+ defaultValue: selection === null || selection === void 0 ? void 0 : selection.from,
126
+ placeholder: formatMessage(_messages.dateRangeMessages.dateRangeFrom),
127
+ isInvalid: Boolean(invalidDateRange),
128
+ locale: locale,
129
+ selectProps: {
130
+ styles: {
131
+ placeholder: function placeholder(base) {
132
+ return _objectSpread(_objectSpread({}, base), {}, {
133
+ width: 'max-content'
134
+ });
135
+ }
62
136
  }
63
- }, /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, getCurrentOptionLabel(option)));
64
- }));
137
+ }
138
+ }), /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, _messages.dateRangeMessages.dateRangeToLabel), /*#__PURE__*/_react.default.createElement(_datetimePicker.DatePicker, {
139
+ maxDate: maxDate,
140
+ innerProps: {
141
+ style: {
142
+ width: 140
143
+ }
144
+ },
145
+ testId: "date-to-picker",
146
+ dateFormat: "D MMM YYYY",
147
+ onChange: handleToOnChange,
148
+ defaultValue: selection === null || selection === void 0 ? void 0 : selection.to,
149
+ placeholder: formatMessage(_messages.dateRangeMessages.dateRangeTo),
150
+ isInvalid: Boolean(invalidDateRange),
151
+ locale: locale,
152
+ selectProps: {
153
+ styles: {
154
+ placeholder: function placeholder(base) {
155
+ return _objectSpread(_objectSpread({}, base), {}, {
156
+ width: 'max-content'
157
+ });
158
+ }
159
+ }
160
+ }
161
+ })), invalidDateRange && /*#__PURE__*/_react.default.createElement(_styled.DateRangeErrorMessage, null, /*#__PURE__*/_react.default.createElement(_error.default, {
162
+ size: "small",
163
+ primaryColor: "var(--ds-icon-danger, ".concat(_colors.R400, ")"),
164
+ label: "Date range error"
165
+ }), invalidDateRange), /*#__PURE__*/_react.default.createElement(_styled.SelectDateRangeButton, {
166
+ "data-testId": "custom-date-range-update-button",
167
+ disabled: Boolean(invalidDateRange),
168
+ onClick: handleClickUpdateDateRange
169
+ }, formatMessage(_messages.dateRangeMessages.dateRangeUpdateButton))));
65
170
  },
66
171
  placement: "bottom-start",
67
172
  trigger: function trigger(triggerProps) {
68
173
  return /*#__PURE__*/_react.default.createElement(_trigger.PopupTrigger, {
69
174
  triggerProps: triggerProps,
70
- optionSelected: !!currentOption,
71
- label: formatMessage(_messages.dateRangeMessages.dateRangeTitle),
72
- selectedLabel: formatMessage(getCurrentOptionLabel(currentOption)),
73
- onClickButton: handleTogglePopup
175
+ isSelected: !!(selection !== null && selection !== void 0 && selection.value) || isPickerOpen,
176
+ labelPrefix: formatMessage(_messages.dateRangeMessages.dateRangeTitle),
177
+ selectedLabel: (0, _utils.getCurrentOptionLabel)(formatDate, formatMessage, selection),
178
+ onClick: handleTogglePopup
74
179
  });
75
180
  }
76
181
  });
77
- };
78
- var getCurrentOptionLabel = function getCurrentOptionLabel(option) {
79
- var mapping = {
80
- anyTime: 'dateRangeAnyTime',
81
- today: 'dateRangeToday',
82
- yesterday: 'dateRangeYesterday',
83
- past7Days: 'dateRangeLastWeek',
84
- past30Days: 'dateRangeLastMonth',
85
- pastYear: 'dateRangeLastYear',
86
- custom: 'dateRangeCustom'
87
- };
88
- return option ? _messages.dateRangeMessages[mapping[option]] : _messages.dateRangeMessages[mapping['anyTime']];
89
182
  };
@@ -45,5 +45,55 @@ var dateRangeMessages = exports.dateRangeMessages = (0, _reactIntlNext.defineMes
45
45
  id: 'linkDataSource.confluence-search.configmodal.date.range.custom',
46
46
  defaultMessage: 'Custom',
47
47
  description: 'Custom date range'
48
+ },
49
+ dateRangeFrom: {
50
+ id: 'linkDataSource.confluence-search.configmodal.date.range.from',
51
+ defaultMessage: 'From',
52
+ description: 'Filter starting from a custom date'
53
+ },
54
+ dateRangeTo: {
55
+ id: 'linkDataSource.confluence-search.configmodal.date.range.to',
56
+ defaultMessage: 'To',
57
+ description: 'Filter up to a custom date'
58
+ },
59
+ dateRangeDateInputPlaceholder: {
60
+ id: 'linkDataSource.confluence-search.configmodal.date.range.input.placeholder',
61
+ defaultMessage: 'Choose a date',
62
+ description: 'Placeholder text for date input'
63
+ },
64
+ dateRangeCustomInvalidDateAfterToday: {
65
+ id: 'linkDataSource.confluence-search.configmodal.date.range.custom.invalid.after.today',
66
+ defaultMessage: 'The From date can’t be in the future',
67
+ description: 'error displayed when a date range begins after the current date'
68
+ },
69
+ dateRangeCustomInvalidToDateAfterToday: {
70
+ id: 'linkDataSource.confluence-search.configmodal.date.range.custom.invalid.to.after.today',
71
+ defaultMessage: 'The To date can’t be in the future',
72
+ description: 'error displayed when a date range ends after the current date'
73
+ },
74
+ dateRangeCustomInvalidDateAfterEnd: {
75
+ id: 'linkDataSource.confluence-search.configmodal.date.range.custom.invalid.after.end',
76
+ defaultMessage: 'The From date has to be before the To date',
77
+ description: 'error displayed when a date range begins after the end date'
78
+ },
79
+ dateRangeToLabel: {
80
+ id: 'linkDataSource.confluence-search.configmodal.date.range.to.Label',
81
+ defaultMessage: 'to',
82
+ description: "'to' in between from and to date pickers"
83
+ },
84
+ dateRangeUpdateButton: {
85
+ id: 'linkDataSource.confluence-search.configmodal.date.range.update.button',
86
+ defaultMessage: 'Update',
87
+ description: 'Text for update button in date filter picker'
88
+ },
89
+ dateRangeBeforeLabel: {
90
+ id: 'linkDataSource.confluence-search.configmodal.date.range.before.label',
91
+ defaultMessage: 'before {date}',
92
+ description: '`before date` for date picker dropdown'
93
+ },
94
+ dateRangeAfterLabel: {
95
+ id: 'linkDataSource.confluence-search.configmodal.date.range.after.label',
96
+ defaultMessage: 'after {date}',
97
+ description: '`after date` for date picker dropdown'
48
98
  }
49
99
  });
@@ -7,11 +7,13 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.SelectDateRangeButton = exports.PopupComponentContainer = exports.DateRangeErrorMessage = exports.DatePickersWrapper = exports.CustomDropdownItem = exports.CustomDropdown = exports.CustomDateWrapper = void 0;
8
8
  var _styled = _interopRequireDefault(require("@emotion/styled"));
9
9
  var _colors = require("@atlaskit/theme/colors");
10
+ var _constants = require("@atlaskit/theme/constants");
10
11
  var PopupComponentContainer = exports.PopupComponentContainer = _styled.default.div({
11
12
  boxSizing: 'border-box',
12
13
  display: 'block',
13
14
  flex: '1 1 auto',
14
15
  overflow: 'visible',
16
+ borderRadius: "var(--ds-border-radius-200, 3px)",
15
17
  background: "var(--ds-background-input, ".concat(_colors.N0, ")"),
16
18
  ':focus': {
17
19
  outline: 'none'
@@ -19,11 +21,11 @@ var PopupComponentContainer = exports.PopupComponentContainer = _styled.default.
19
21
  boxShadow: "var(--ds-shadow-overlay, 0px 0px 1px 0px rgba(9, 30, 66, 0.31), 0px 3px 5px 0px rgba(9, 30, 66, 0.20))"
20
22
  });
21
23
  var CustomDropdown = exports.CustomDropdown = _styled.default.div({
22
- width: '360px',
24
+ width: '340px',
23
25
  background: "var(--ds-background-input, ".concat(_colors.N0, ")"),
24
- borderRadius: '3px',
26
+ borderRadius: "var(--ds-border-radius-200, 3px)",
25
27
  boxShadow: "var(--ds-shadow-overlay, 0px 0px 1px 0px rgba(9, 30, 66, 0.31), 0px 3px 5px 0px rgba(9, 30, 66, 0.20))",
26
- zIndex: '900'
28
+ zIndex: _constants.layers.modal()
27
29
  });
28
30
  var CustomDropdownItem = exports.CustomDropdownItem = _styled.default.div(function (props) {
29
31
  return {
@@ -60,7 +62,7 @@ var SelectDateRangeButton = exports.SelectDateRangeButton = _styled.default.butt
60
62
  width: '70px',
61
63
  height: '40px',
62
64
  marginTop: "var(--ds-space-150, 12px)",
63
- borderRadius: '3px',
65
+ borderRadius: "var(--ds-border-radius-200, 3px)",
64
66
  '&:hover': {
65
67
  background: "var(--ds-background-accent-gray-subtler, ".concat(_colors.N30, ")"),
66
68
  cursor: 'pointer'
@@ -11,14 +11,14 @@ var _standardButton = _interopRequireDefault(require("@atlaskit/button/standard-
11
11
  var _chevronDown = _interopRequireDefault(require("@atlaskit/icon/glyph/chevron-down"));
12
12
  var PopupTrigger = exports.PopupTrigger = function PopupTrigger(_ref) {
13
13
  var triggerProps = _ref.triggerProps,
14
- optionSelected = _ref.optionSelected,
15
- label = _ref.label,
14
+ isSelected = _ref.isSelected,
15
+ labelPrefix = _ref.labelPrefix,
16
16
  selectedLabel = _ref.selectedLabel,
17
- onClickButton = _ref.onClickButton;
17
+ onClick = _ref.onClick;
18
18
  return /*#__PURE__*/_react.default.createElement(_standardButton.default, (0, _extends2.default)({}, triggerProps, {
19
19
  testId: 'confluence-search-modal--date-range-button',
20
- onClick: onClickButton,
21
- isSelected: optionSelected,
20
+ onClick: onClick,
21
+ isSelected: isSelected,
22
22
  iconAfter: /*#__PURE__*/_react.default.createElement("span", {
23
23
  style: {
24
24
  display: 'flex',
@@ -28,5 +28,5 @@ var PopupTrigger = exports.PopupTrigger = function PopupTrigger(_ref) {
28
28
  size: "medium",
29
29
  label: ""
30
30
  }))
31
- }), label, selectedLabel ? ": ".concat(selectedLabel) : '');
31
+ }), labelPrefix, selectedLabel ? ": ".concat(selectedLabel) : '');
32
32
  };
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.getInvalidDateRange = exports.getDropdownLabel = exports.getCurrentOptionLabel = void 0;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _reactIntlNext = require("react-intl-next");
10
+ var _dateTime = require("../../../../../ui/issue-like-table/render-type/date-time");
11
+ var _messages = require("./messages");
12
+ var getDropdownLabel = exports.getDropdownLabel = function getDropdownLabel() {
13
+ var option = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'anyTime';
14
+ var formatMessage = arguments.length > 1 ? arguments[1] : undefined;
15
+ var mapping = {
16
+ anyTime: 'dateRangeAnyTime',
17
+ today: 'dateRangeToday',
18
+ yesterday: 'dateRangeYesterday',
19
+ past7Days: 'dateRangeLastWeek',
20
+ past30Days: 'dateRangeLastMonth',
21
+ pastYear: 'dateRangeLastYear',
22
+ custom: 'dateRangeCustom'
23
+ };
24
+ return formatMessage(_messages.dateRangeMessages[mapping[option]]);
25
+ };
26
+ var getCurrentOptionLabel = exports.getCurrentOptionLabel = function getCurrentOptionLabel(formatDate, formatMessage, selection) {
27
+ var selectedOption = selection === null || selection === void 0 ? void 0 : selection.value;
28
+ if (selectedOption === 'custom') {
29
+ var hasFromDate = !!(selection !== null && selection !== void 0 && selection.from);
30
+ var hasToDate = !!(selection !== null && selection !== void 0 && selection.to);
31
+ var formattedFromDate = (0, _dateTime.getFormattedDate)((selection === null || selection === void 0 ? void 0 : selection.from) || '', 'date', formatDate);
32
+ var formattedToDate = (0, _dateTime.getFormattedDate)((selection === null || selection === void 0 ? void 0 : selection.to) || '', 'date', formatDate);
33
+ if (hasFromDate && !hasToDate) {
34
+ return formatMessage(_messages.dateRangeMessages.dateRangeAfterLabel, {
35
+ date: formattedFromDate
36
+ });
37
+ }
38
+ if (!hasFromDate && hasToDate) {
39
+ return formatMessage(_messages.dateRangeMessages.dateRangeBeforeLabel, {
40
+ date: formattedToDate
41
+ });
42
+ }
43
+ if (hasFromDate && hasToDate) {
44
+ return "".concat(formattedFromDate, " - ").concat(formattedToDate);
45
+ }
46
+ }
47
+ return getDropdownLabel(selectedOption, formatMessage);
48
+ };
49
+ var getInvalidDateRange = exports.getInvalidDateRange = function getInvalidDateRange(from, to) {
50
+ if (!from && !to) {
51
+ return null;
52
+ }
53
+ var dateFrom = new Date("".concat(from).concat(from ? 'T00:00:00' : ''));
54
+ var dateTo = new Date("".concat(to).concat(to ? 'T00:00:00' : ''));
55
+ var now = new Date();
56
+ if (dateFrom > now) {
57
+ return /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, _messages.dateRangeMessages.dateRangeCustomInvalidDateAfterToday);
58
+ }
59
+ if (dateFrom > dateTo) {
60
+ return /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, _messages.dateRangeMessages.dateRangeCustomInvalidDateAfterEnd);
61
+ }
62
+ if (dateTo > now) {
63
+ return /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, _messages.dateRangeMessages.dateRangeCustomInvalidToDateAfterToday);
64
+ }
65
+ return null;
66
+ };
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.default = void 0;
8
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
8
9
  var _react = _interopRequireDefault(require("react"));
9
10
  var _primitives = require("@atlaskit/primitives");
10
11
  var _dateRangePicker = require("./filters/date-range-picker");
@@ -18,7 +19,15 @@ var BasicFilterContainer = function BasicFilterContainer(_ref) {
18
19
  _ref$selections = _ref.selections,
19
20
  selections = _ref$selections === void 0 ? {} : _ref$selections,
20
21
  isHydrating = _ref.isHydrating;
21
- var editedOrCreatedBy = selections.editedOrCreatedBy;
22
+ var lastModified = selections.lastModified,
23
+ editedOrCreatedBy = selections.editedOrCreatedBy;
24
+ var _ref2 = lastModified || [],
25
+ _ref3 = (0, _slicedToArray2.default)(_ref2, 1),
26
+ lastModifiedValue = _ref3[0];
27
+ var lastModifiedSelection = (lastModifiedValue === null || lastModifiedValue === void 0 ? void 0 : lastModifiedValue.optionType) === 'dateRange' ? lastModifiedValue : undefined;
28
+ var onDateRangePickerChange = function onDateRangePickerChange(filterType, updatedOption) {
29
+ onChange(filterType, [updatedOption]);
30
+ };
22
31
  return /*#__PURE__*/_react.default.createElement(_primitives.Flex, {
23
32
  xcss: basicFilterContainerStyles,
24
33
  gap: "space.100",
@@ -29,7 +38,8 @@ var BasicFilterContainer = function BasicFilterContainer(_ref) {
29
38
  selection: editedOrCreatedBy || [],
30
39
  isHydrating: isHydrating
31
40
  }), /*#__PURE__*/_react.default.createElement(_dateRangePicker.DateRangePicker, {
32
- onSelectionChange: onChange
41
+ selection: lastModifiedSelection,
42
+ onSelectionChange: onDateRangePickerChange
33
43
  }));
34
44
  };
35
45
  var _default = exports.default = BasicFilterContainer;
@@ -108,14 +108,18 @@ var PlainConfluenceSearchConfigModal = exports.PlainConfluenceSearchConfigModal
108
108
  _useState10 = (0, _slicedToArray2.default)(_useState9, 2),
109
109
  visibleColumnKeys = _useState10[0],
110
110
  setVisibleColumnKeys = _useState10[1];
111
- var _useState11 = (0, _react.useState)(initialParameters === null || initialParameters === void 0 ? void 0 : initialParameters.lastModified),
111
+ var _useState11 = (0, _react.useState)((initialParameters === null || initialParameters === void 0 ? void 0 : initialParameters.contributorAccountIds) || []),
112
112
  _useState12 = (0, _slicedToArray2.default)(_useState11, 2),
113
- lastModified = _useState12[0],
114
- setLastModified = _useState12[1];
115
- var _useState13 = (0, _react.useState)((initialParameters === null || initialParameters === void 0 ? void 0 : initialParameters.contributorAccountIds) || []),
113
+ contributorAccountIds = _useState12[0],
114
+ setContributorAccountIds = _useState12[1];
115
+ var _useState13 = (0, _react.useState)(initialParameters !== null && initialParameters !== void 0 && initialParameters.lastModified ? {
116
+ value: initialParameters === null || initialParameters === void 0 ? void 0 : initialParameters.lastModified,
117
+ from: initialParameters === null || initialParameters === void 0 ? void 0 : initialParameters.lastModifiedFrom,
118
+ to: initialParameters === null || initialParameters === void 0 ? void 0 : initialParameters.lastModifiedTo
119
+ } : undefined),
116
120
  _useState14 = (0, _slicedToArray2.default)(_useState13, 2),
117
- contributorAccountIds = _useState14[0],
118
- setContributorAccountIds = _useState14[1];
121
+ lastModified = _useState14[0],
122
+ setLastModified = _useState14[1];
119
123
 
120
124
  // analytics related parameters
121
125
  var searchCount = (0, _react.useRef)(0);
@@ -125,15 +129,19 @@ var PlainConfluenceSearchConfigModal = exports.PlainConfluenceSearchConfigModal
125
129
  // TODO: further refactoring in EDM-9573
126
130
  // https://stash.atlassian.com/projects/ATLASSIAN/repos/atlassian-frontend-monorepo/pull-requests/82725/overview?commentId=6829210
127
131
  var parameters = (0, _react.useMemo)(function () {
128
- return _objectSpread(_objectSpread(_objectSpread({}, initialParameters), {}, {
132
+ return _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({}, initialParameters), {}, {
129
133
  cloudId: cloudId,
130
134
  searchString: searchString
131
- }, ((initialParameters === null || initialParameters === void 0 ? void 0 : initialParameters.lastModified) || lastModified) && {
132
- lastModified: lastModified
135
+ }, ((initialParameters === null || initialParameters === void 0 ? void 0 : initialParameters.lastModified) || (lastModified === null || lastModified === void 0 ? void 0 : lastModified.value)) && {
136
+ lastModified: lastModified === null || lastModified === void 0 ? void 0 : lastModified.value
137
+ }), ((initialParameters === null || initialParameters === void 0 ? void 0 : initialParameters.lastModifiedFrom) || (lastModified === null || lastModified === void 0 ? void 0 : lastModified.from)) && {
138
+ lastModifiedFrom: lastModified === null || lastModified === void 0 ? void 0 : lastModified.from
139
+ }), ((initialParameters === null || initialParameters === void 0 ? void 0 : initialParameters.lastModifiedTo) || (lastModified === null || lastModified === void 0 ? void 0 : lastModified.to)) && {
140
+ lastModifiedTo: lastModified === null || lastModified === void 0 ? void 0 : lastModified.to
133
141
  }), ((initialParameters === null || initialParameters === void 0 ? void 0 : initialParameters.contributorAccountIds) || (contributorAccountIds === null || contributorAccountIds === void 0 ? void 0 : contributorAccountIds.length) > 0) && {
134
142
  contributorAccountIds: contributorAccountIds
135
143
  });
136
- }, [cloudId, lastModified, contributorAccountIds, initialParameters, searchString /** Add more parameters when more filters are added */]);
144
+ }, [initialParameters, cloudId, searchString, lastModified, contributorAccountIds]);
137
145
  var initialFilterSelection = (0, _react.useMemo)(function () {
138
146
  return {
139
147
  editedOrCreatedBy: (initialParameters === null || initialParameters === void 0 ? void 0 : initialParameters.contributorAccountIds) || []
@@ -312,8 +320,17 @@ var PlainConfluenceSearchConfigModal = exports.PlainConfluenceSearchConfigModal
312
320
  if (contributorAccountIds.length > 0) {
313
321
  params.append('contributors', contributorAccountIds.join(','));
314
322
  }
323
+ if (lastModified !== null && lastModified !== void 0 && lastModified.value) {
324
+ params.append('lastModified', lastModified.value);
325
+ }
326
+ if (lastModified !== null && lastModified !== void 0 && lastModified.from) {
327
+ params.append('from', lastModified === null || lastModified === void 0 ? void 0 : lastModified.from);
328
+ }
329
+ if (lastModified !== null && lastModified !== void 0 && lastModified.to) {
330
+ params.append('to', lastModified === null || lastModified === void 0 ? void 0 : lastModified.to);
331
+ }
315
332
  return "".concat(selectedConfluenceSiteUrl, "/wiki/search?").concat(params.toString());
316
- }, [contributorAccountIds, searchString, selectedConfluenceSiteUrl]);
333
+ }, [contributorAccountIds, lastModified, searchString, selectedConfluenceSiteUrl]);
317
334
  var analyticsPayload = (0, _react.useMemo)(function () {
318
335
  return {
319
336
  extensionKey: extensionKey,
@@ -453,10 +470,16 @@ var PlainConfluenceSearchConfigModal = exports.PlainConfluenceSearchConfigModal
453
470
  var editedOrCreatedBy = filters.editedOrCreatedBy,
454
471
  _lastModified = filters.lastModified;
455
472
  if (_lastModified) {
456
- var lastModifiedValue = _lastModified.find(function (range) {
473
+ var updatedDateRangeOption = _lastModified.find(function (range) {
457
474
  return range.value;
458
475
  });
459
- setLastModified(lastModifiedValue === null || lastModifiedValue === void 0 ? void 0 : lastModifiedValue.value);
476
+ if ((updatedDateRangeOption === null || updatedDateRangeOption === void 0 ? void 0 : updatedDateRangeOption.optionType) === 'dateRange') {
477
+ setLastModified({
478
+ value: updatedDateRangeOption.value,
479
+ from: updatedDateRangeOption.from,
480
+ to: updatedDateRangeOption.to
481
+ });
482
+ }
460
483
  }
461
484
  if (editedOrCreatedBy) {
462
485
  var accountIds = editedOrCreatedBy.map(function (user) {