@bigbinary/neeto-filters-frontend 2.11.19 → 2.11.20

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/dist/index.js CHANGED
@@ -2,13 +2,13 @@ import React, { useContext, useState, useRef, useEffect, useCallback, useMemo }
2
2
  import classnames from 'classnames';
3
3
  import { removeBy, findBy, isNotEmpty, humanize, noop as noop$2, toLabelAndValue, replaceBy, isPresent, existsBy, filterBy } from '@bigbinary/neeto-commons-frontend/pure';
4
4
  import { Tooltip, Typography, Dropdown as Dropdown$2, Button, Pane as Pane$1, Alert, Select, DatePicker, TimePicker, Input as Input$1, Accordion, Spinner } from '@bigbinary/neetoui';
5
- import { groupBy, anyPass, isNil, isEmpty, any, mergeLeft, identity, omit, mergeRight, concat, pluck, either, has as has$1, toPairs, equals, pick, modify, prop, isNotNil, append, last } from 'ramda';
5
+ import { groupBy, anyPass, isNil, isEmpty, any, mergeLeft, identity, omit, mergeRight, concat, pluck, either, has as has$1, toPairs, equals, pick, modify, prop, isNotNil, append, last, not } from 'ramda';
6
6
  import { useHistory, useLocation } from 'react-router-dom';
7
7
  import { useHotKeys, useDebounce } from '@bigbinary/neeto-commons-frontend/react-utils';
8
8
  import { Close, Search, Check, MenuHorizontal, Down, Settings } from '@bigbinary/neeto-icons';
9
+ import dayjs from 'dayjs';
9
10
  import { getQueryParams, dateFormat } from '@bigbinary/neeto-commons-frontend/utils';
10
11
  import * as yup from 'yup';
11
- import dayjs from 'dayjs';
12
12
  import timezone from 'dayjs/plugin/timezone';
13
13
  import utc from 'dayjs/plugin/utc';
14
14
  import weekday from 'dayjs/plugin/weekday';
@@ -3360,6 +3360,12 @@ var DATE_OPTIONS = [{
3360
3360
  }, {
3361
3361
  label: "All time",
3362
3362
  value: "all-time"
3363
+ }, {
3364
+ label: "After",
3365
+ value: "after"
3366
+ }, {
3367
+ label: "Before",
3368
+ value: "before"
3363
3369
  }, {
3364
3370
  label: "Custom date range",
3365
3371
  value: "custom-date-range"
@@ -3586,7 +3592,7 @@ var splitFilter = function splitFilter(multiColumnFilter) {
3586
3592
  var buildDateValue = function buildDateValue(_ref6) {
3587
3593
  var value = _ref6.value;
3588
3594
  var rule = DATE_RULES[value] || "between";
3589
- var dateValue = value === "custom-date-range" ? "" : value;
3595
+ var dateValue = ["before", "after", "custom-date-range"].includes(value) ? "" : value;
3590
3596
  return {
3591
3597
  value: dateValue,
3592
3598
  rule: rule,
@@ -4039,6 +4045,16 @@ var getKeywordValueFromUrl = function getKeywordValueFromUrl() {
4039
4045
  return getQueryParams()["keyword"] || "";
4040
4046
  };
4041
4047
 
4048
+ var buildCustomDateValue = function buildCustomDateValue(value) {
4049
+ var isBeforeOrAfter = Math.abs(dayjs(value[1]).diff(dayjs(value[0]), "year")) >= 90;
4050
+ if (isBeforeOrAfter) {
4051
+ var currentMoment = dayjs();
4052
+ var diffWithStart = Math.abs(currentMoment.diff(dayjs(value[0]), "year"));
4053
+ var diffWithEnd = Math.abs(currentMoment.diff(dayjs(value[1]), "year"));
4054
+ return diffWithStart < diffWithEnd ? "after-".concat(dateFormat.date(dayjs(value[0]).subtract(1, "day"))) : "before-".concat(dateFormat.date(dayjs(value[1]).add(1, "day")));
4055
+ }
4056
+ return value.map(dateFormat.date).join(" - ");
4057
+ };
4042
4058
  var buildFilterValue = function buildFilterValue(filter) {
4043
4059
  var _findBy2;
4044
4060
  var _filter$defaultType = filter.defaultType,
@@ -4051,7 +4067,7 @@ var buildFilterValue = function buildFilterValue(filter) {
4051
4067
  return value.toString();
4052
4068
  }));
4053
4069
  if (isDate(defaultType) && isCustomDateRange(value)) {
4054
- return value.map(dateFormat.date).join(" - ");
4070
+ return buildCustomDateValue(value);
4055
4071
  } else if (isTime(defaultType) && isCustomTimeRange(value)) {
4056
4072
  return value.map(dateFormat.time).join(" - ");
4057
4073
  } else if (isDate(defaultType) || isTime(defaultType)) {
@@ -7101,13 +7117,6 @@ var buildDropdownValue = function buildDropdownValue(_ref) {
7101
7117
  value: filter.value
7102
7118
  }, options);
7103
7119
  };
7104
- var buildDatetimeValue = function buildDatetimeValue(filter) {
7105
- var _findBy;
7106
- if (!filter) return null;
7107
- return (_findBy = findBy({
7108
- value: filter.value
7109
- }, DATE_OPTIONS)) !== null && _findBy !== void 0 ? _findBy : last(DATE_OPTIONS);
7110
- };
7111
7120
  var buildSingleTimeValue = function buildSingleTimeValue(filter) {
7112
7121
  var _findBy2;
7113
7122
  if (!filter) return null;
@@ -7144,6 +7153,44 @@ var buildDropdownOptions = function buildDropdownOptions(_ref3) {
7144
7153
  }
7145
7154
  return options;
7146
7155
  };
7156
+ var initializeDateRule = function initializeDateRule(filter) {
7157
+ return filter ? findBy({
7158
+ value: filter === null || filter === void 0 ? void 0 : filter.value
7159
+ }, DATE_OPTIONS) || findDateOption(filter, DATE_OPTIONS) : {};
7160
+ };
7161
+ var getDateValue = function getDateValue(value, rule) {
7162
+ if (isEmpty(value) || isNil(value)) {
7163
+ return null;
7164
+ }
7165
+ if (rule.value === "custom-date-range") {
7166
+ return value;
7167
+ }
7168
+ return rule.value === "before" ? dayjs(value[1]).add(1, "day") : dayjs(value[0]).subtract(1, "day");
7169
+ };
7170
+ var findDateOption = function findDateOption(filter, options) {
7171
+ var value = filter.value;
7172
+ var isBeforeOrAfter = dayjs(value[1]).diff(dayjs(value[0]), "year") >= 90;
7173
+ if (not(isBeforeOrAfter)) {
7174
+ return last(options);
7175
+ }
7176
+ var currentMoment = dayjs();
7177
+ var diffWithStart = Math.abs(currentMoment.diff(dayjs(value[0]), "year"));
7178
+ var diffWithEnd = Math.abs(currentMoment.diff(dayjs(value[1]), "year"));
7179
+ var returnOption = diffWithStart < diffWithEnd ? findBy({
7180
+ value: "after"
7181
+ }, options) : findBy({
7182
+ value: "before"
7183
+ }, options);
7184
+ return returnOption;
7185
+ };
7186
+ var buildDateValues = function buildDateValues(dates, selectedRule) {
7187
+ if (selectedRule.value === "after") {
7188
+ return [dates.add(1, "day"), dates.add(100, "year")];
7189
+ } else if (selectedRule.value === "before") {
7190
+ return [dates.subtract(100, "year"), dates.subtract(1, "day")];
7191
+ }
7192
+ return dates;
7193
+ };
7147
7194
 
7148
7195
  var Boolean$1 = function Boolean(_ref) {
7149
7196
  var column = _ref.column,
@@ -7199,22 +7246,27 @@ var Datetime = function Datetime(_ref) {
7199
7246
  filter = _ref.filter,
7200
7247
  handleApplyFilter = _ref.handleApplyFilter,
7201
7248
  autoFocus = _ref.autoFocus;
7249
+ var _useState = useState(initializeDateRule(filter)),
7250
+ _useState2 = _slicedToArray(_useState, 2),
7251
+ selectedRule = _useState2[0],
7252
+ setSelectedRule = _useState2[1];
7253
+ var _useTranslation = useTranslation(),
7254
+ t = _useTranslation.t;
7202
7255
  var key = column.key,
7203
7256
  _column$defaultType = column.defaultType,
7204
7257
  defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
7205
7258
  label = column.label;
7259
+ var isDatePickerShown = filter && isCustomDateRange(filter.value);
7206
7260
  var otherProps = getOtherProps(column);
7207
- var value = buildDatetimeValue(filter);
7208
- var isCustomDateRangeShown = filter && isCustomDateRange(filter.value);
7209
- var _useTranslation = useTranslation(),
7210
- t = _useTranslation.t;
7211
7261
  var handleChange = function handleChange(option) {
7212
7262
  if (isEmpty(option) || isNil(option)) {
7213
7263
  handleApplyFilter({
7214
7264
  _delete: true
7215
7265
  });
7266
+ setSelectedRule({});
7216
7267
  return;
7217
7268
  }
7269
+ setSelectedRule(option);
7218
7270
  var updatedFilter = buildUpdatedFilter({
7219
7271
  column: column,
7220
7272
  defaultType: defaultType,
@@ -7227,13 +7279,14 @@ var Datetime = function Datetime(_ref) {
7227
7279
  handleApplyFilter({
7228
7280
  _delete: true
7229
7281
  });
7282
+ setSelectedRule({});
7230
7283
  return;
7231
7284
  }
7232
7285
  var updatedFilter = buildUpdatedFilter({
7233
7286
  column: column,
7234
7287
  defaultType: defaultType,
7235
7288
  option: {
7236
- value: pluck("$d", dates).map(function (date) {
7289
+ value: pluck("$d", buildDateValues(dates, selectedRule)).map(function (date) {
7237
7290
  return date.toISOString();
7238
7291
  })
7239
7292
  }
@@ -7249,15 +7302,15 @@ var Datetime = function Datetime(_ref) {
7249
7302
  label: label,
7250
7303
  options: DATE_OPTIONS,
7251
7304
  strategy: "fixed",
7252
- value: value,
7305
+ value: selectedRule,
7253
7306
  placeholder: t("messages.selectResource", {
7254
7307
  resource: label.toLocaleLowerCase()
7255
7308
  }),
7256
7309
  onChange: handleChange
7257
- }), isCustomDateRangeShown && /*#__PURE__*/React.createElement(DatePicker, _extends$1({
7310
+ }), isDatePickerShown && /*#__PURE__*/React.createElement(DatePicker, _extends$1({
7258
7311
  "data-cy": "neeto-filters-".concat(key, "-date-range"),
7259
- type: "range",
7260
- value: filter.value,
7312
+ type: (selectedRule === null || selectedRule === void 0 ? void 0 : selectedRule.value) === "custom-date-range" ? "range" : "date",
7313
+ value: getDateValue(filter === null || filter === void 0 ? void 0 : filter.value, selectedRule),
7261
7314
  onChange: handleDateRangeChange
7262
7315
  }, otherProps)));
7263
7316
  };