@bigbinary/neeto-filters-frontend 2.11.19 → 2.12.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.
package/README.md CHANGED
@@ -188,6 +188,35 @@ const [filters, setFilters] = useState(() => buildFiltersFromURL([...SAMPLE_FIL
188
188
  const [selectors, setSelectors] = useState(() => buildSelectorsFromURL(FILTER_COLUMNS));
189
189
  ```
190
190
 
191
+ ### 5. `buildFilterColumnsFromFields` function
192
+
193
+ The `buildFilterColumnsFromFields` function is used to generate an array of filter columns based on the provided fields and selected field names.
194
+
195
+ #### Parameters
196
+
197
+ - `fields` (array): An array of field objects representing the available fields.
198
+ - `selectedFields` (array, optional): An array of strings representing the selected field names. Defaults to an empty array.
199
+
200
+ ```js
201
+ const fields = [
202
+ {
203
+ id: '1',
204
+ name: 'name',
205
+ kind: 'text',
206
+ },
207
+ {
208
+ id: '2',
209
+ name: 'age',
210
+ kind: 'number',
211
+ },
212
+ // Add more field objects as needed
213
+ ];
214
+
215
+ const selectedFields = ['name', 'age'];
216
+
217
+ const filterColumns = buildFilterColumnsFromFields(fields, selectedFields);
218
+ ```
219
+
191
220
  ## Development
192
221
 
193
222
  Install all the dependencies by executing the following command
package/dist/index.cjs.js CHANGED
@@ -10,9 +10,9 @@ var ramda = require('ramda');
10
10
  var reactRouterDom = require('react-router-dom');
11
11
  var reactUtils = require('@bigbinary/neeto-commons-frontend/react-utils');
12
12
  var neetoIcons = require('@bigbinary/neeto-icons');
13
+ var dayjs = require('dayjs');
13
14
  var utils = require('@bigbinary/neeto-commons-frontend/utils');
14
15
  var yup = require('yup');
15
- var dayjs = require('dayjs');
16
16
  var timezone = require('dayjs/plugin/timezone');
17
17
  var utc = require('dayjs/plugin/utc');
18
18
  var weekday = require('dayjs/plugin/weekday');
@@ -44,8 +44,8 @@ function _interopNamespace(e) {
44
44
 
45
45
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
46
46
  var classnames__default = /*#__PURE__*/_interopDefaultLegacy(classnames);
47
- var yup__namespace = /*#__PURE__*/_interopNamespace(yup);
48
47
  var dayjs__default = /*#__PURE__*/_interopDefaultLegacy(dayjs);
48
+ var yup__namespace = /*#__PURE__*/_interopNamespace(yup);
49
49
  var timezone__default = /*#__PURE__*/_interopDefaultLegacy(timezone);
50
50
  var utc__default = /*#__PURE__*/_interopDefaultLegacy(utc);
51
51
  var weekday__default = /*#__PURE__*/_interopDefaultLegacy(weekday);
@@ -3395,6 +3395,12 @@ var DATE_OPTIONS = [{
3395
3395
  }, {
3396
3396
  label: "All time",
3397
3397
  value: "all-time"
3398
+ }, {
3399
+ label: "After",
3400
+ value: "after"
3401
+ }, {
3402
+ label: "Before",
3403
+ value: "before"
3398
3404
  }, {
3399
3405
  label: "Custom date range",
3400
3406
  value: "custom-date-range"
@@ -3539,28 +3545,28 @@ var groupByGroup = ramda.groupBy(function (_ref) {
3539
3545
  return group || "individual";
3540
3546
  });
3541
3547
  var isBoolean = function isBoolean(type) {
3542
- return type === "boolean";
3548
+ return type === "boolean" || type === "custom.boolean";
3543
3549
  };
3544
3550
  var isDate = function isDate(type) {
3545
- return type === "date";
3551
+ return type === "date" || type === "custom.date";
3546
3552
  };
3547
3553
  var isSingleDate = function isSingleDate(type) {
3548
- return type === "single_date";
3554
+ return type === "single_date" || type === "custom.single_date";
3549
3555
  };
3550
3556
  var isSingleTime = function isSingleTime(type) {
3551
- return type === "single_time";
3557
+ return type === "single_time" || type === "custom.single_time";
3552
3558
  };
3553
3559
  var isTime = function isTime(type) {
3554
- return type === "time";
3560
+ return type === "time" || type === "custom.time";
3555
3561
  };
3556
3562
  var isMulti = function isMulti(type) {
3557
- return type === "multi_option";
3563
+ return type === "multi_option" || type === "custom.multi_option";
3558
3564
  };
3559
3565
  var isText = function isText(type) {
3560
- return type === "text";
3566
+ return type === "text" || type === "custom.text";
3561
3567
  };
3562
3568
  var isDigit = function isDigit(type) {
3563
- return type === "number" || type === "decimal";
3569
+ return type === "number" || type === "decimal" || type === "custom.number";
3564
3570
  };
3565
3571
  var isCustomDateRange = function isCustomDateRange(value) {
3566
3572
  return !ramda.pluck("value", DATE_OPTIONS).includes(value);
@@ -3621,7 +3627,7 @@ var splitFilter = function splitFilter(multiColumnFilter) {
3621
3627
  var buildDateValue = function buildDateValue(_ref6) {
3622
3628
  var value = _ref6.value;
3623
3629
  var rule = DATE_RULES[value] || "between";
3624
- var dateValue = value === "custom-date-range" ? "" : value;
3630
+ var dateValue = ["before", "after", "custom-date-range"].includes(value) ? "" : value;
3625
3631
  return {
3626
3632
  value: dateValue,
3627
3633
  rule: rule,
@@ -4073,7 +4079,47 @@ var buildUrlFromSegment = function buildUrlFromSegment(_ref19) {
4073
4079
  var getKeywordValueFromUrl = function getKeywordValueFromUrl() {
4074
4080
  return utils.getQueryParams()["keyword"] || "";
4075
4081
  };
4082
+ var buildFilterColumnsFromFields = function buildFilterColumnsFromFields(fields) {
4083
+ var selectedFields = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
4084
+ if (ramda.isEmpty(selectedFields)) {
4085
+ return fields.map(function (field) {
4086
+ var id = field.id,
4087
+ name = field.name,
4088
+ kind = field.kind;
4089
+ return {
4090
+ key: name,
4091
+ node: "".concat(name, ":").concat(id),
4092
+ label: pure.capitalize(name),
4093
+ type: "custom.".concat(kind)
4094
+ };
4095
+ });
4096
+ }
4097
+ return fields.reduce(function (columns, field) {
4098
+ if (selectedFields.includes(field.name)) {
4099
+ var id = field.id,
4100
+ name = field.name,
4101
+ kind = field.kind;
4102
+ columns.push({
4103
+ key: name,
4104
+ node: "".concat(name, ":").concat(id),
4105
+ label: pure.capitalize(name),
4106
+ type: "custom.".concat(kind)
4107
+ });
4108
+ }
4109
+ return columns;
4110
+ }, []);
4111
+ };
4076
4112
 
4113
+ var buildCustomDateValue = function buildCustomDateValue(value) {
4114
+ var isBeforeOrAfter = Math.abs(dayjs__default["default"](value[1]).diff(dayjs__default["default"](value[0]), "year")) >= 90;
4115
+ if (isBeforeOrAfter) {
4116
+ var currentMoment = dayjs__default["default"]();
4117
+ var diffWithStart = Math.abs(currentMoment.diff(dayjs__default["default"](value[0]), "year"));
4118
+ var diffWithEnd = Math.abs(currentMoment.diff(dayjs__default["default"](value[1]), "year"));
4119
+ return diffWithStart < diffWithEnd ? "after-".concat(utils.dateFormat.date(dayjs__default["default"](value[0]).subtract(1, "day"))) : "before-".concat(utils.dateFormat.date(dayjs__default["default"](value[1]).add(1, "day")));
4120
+ }
4121
+ return value.map(utils.dateFormat.date).join(" - ");
4122
+ };
4077
4123
  var buildFilterValue = function buildFilterValue(filter) {
4078
4124
  var _findBy2;
4079
4125
  var _filter$defaultType = filter.defaultType,
@@ -4086,7 +4132,7 @@ var buildFilterValue = function buildFilterValue(filter) {
4086
4132
  return value.toString();
4087
4133
  }));
4088
4134
  if (isDate(defaultType) && isCustomDateRange(value)) {
4089
- return value.map(utils.dateFormat.date).join(" - ");
4135
+ return buildCustomDateValue(value);
4090
4136
  } else if (isTime(defaultType) && isCustomTimeRange(value)) {
4091
4137
  return value.map(utils.dateFormat.time).join(" - ");
4092
4138
  } else if (isDate(defaultType) || isTime(defaultType)) {
@@ -7136,13 +7182,6 @@ var buildDropdownValue = function buildDropdownValue(_ref) {
7136
7182
  value: filter.value
7137
7183
  }, options);
7138
7184
  };
7139
- var buildDatetimeValue = function buildDatetimeValue(filter) {
7140
- var _findBy;
7141
- if (!filter) return null;
7142
- return (_findBy = pure.findBy({
7143
- value: filter.value
7144
- }, DATE_OPTIONS)) !== null && _findBy !== void 0 ? _findBy : ramda.last(DATE_OPTIONS);
7145
- };
7146
7185
  var buildSingleTimeValue = function buildSingleTimeValue(filter) {
7147
7186
  var _findBy2;
7148
7187
  if (!filter) return null;
@@ -7179,6 +7218,44 @@ var buildDropdownOptions = function buildDropdownOptions(_ref3) {
7179
7218
  }
7180
7219
  return options;
7181
7220
  };
7221
+ var initializeDateRule = function initializeDateRule(filter) {
7222
+ return filter ? pure.findBy({
7223
+ value: filter === null || filter === void 0 ? void 0 : filter.value
7224
+ }, DATE_OPTIONS) || findDateOption(filter, DATE_OPTIONS) : {};
7225
+ };
7226
+ var getDateValue = function getDateValue(value, rule) {
7227
+ if (ramda.isEmpty(value) || ramda.isNil(value)) {
7228
+ return null;
7229
+ }
7230
+ if (rule.value === "custom-date-range") {
7231
+ return value;
7232
+ }
7233
+ return rule.value === "before" ? dayjs__default["default"](value[1]).add(1, "day") : dayjs__default["default"](value[0]).subtract(1, "day");
7234
+ };
7235
+ var findDateOption = function findDateOption(filter, options) {
7236
+ var value = filter.value;
7237
+ var isBeforeOrAfter = dayjs__default["default"](value[1]).diff(dayjs__default["default"](value[0]), "year") >= 90;
7238
+ if (ramda.not(isBeforeOrAfter)) {
7239
+ return ramda.last(options);
7240
+ }
7241
+ var currentMoment = dayjs__default["default"]();
7242
+ var diffWithStart = Math.abs(currentMoment.diff(dayjs__default["default"](value[0]), "year"));
7243
+ var diffWithEnd = Math.abs(currentMoment.diff(dayjs__default["default"](value[1]), "year"));
7244
+ var returnOption = diffWithStart < diffWithEnd ? pure.findBy({
7245
+ value: "after"
7246
+ }, options) : pure.findBy({
7247
+ value: "before"
7248
+ }, options);
7249
+ return returnOption;
7250
+ };
7251
+ var buildDateValues = function buildDateValues(dates, selectedRule) {
7252
+ if (selectedRule.value === "after") {
7253
+ return [dates.add(1, "day"), dates.add(100, "year")];
7254
+ } else if (selectedRule.value === "before") {
7255
+ return [dates.subtract(100, "year"), dates.subtract(1, "day")];
7256
+ }
7257
+ return dates;
7258
+ };
7182
7259
 
7183
7260
  var Boolean$1 = function Boolean(_ref) {
7184
7261
  var column = _ref.column,
@@ -7234,22 +7311,27 @@ var Datetime = function Datetime(_ref) {
7234
7311
  filter = _ref.filter,
7235
7312
  handleApplyFilter = _ref.handleApplyFilter,
7236
7313
  autoFocus = _ref.autoFocus;
7314
+ var _useState = React.useState(initializeDateRule(filter)),
7315
+ _useState2 = _slicedToArray(_useState, 2),
7316
+ selectedRule = _useState2[0],
7317
+ setSelectedRule = _useState2[1];
7318
+ var _useTranslation = useTranslation(),
7319
+ t = _useTranslation.t;
7237
7320
  var key = column.key,
7238
7321
  _column$defaultType = column.defaultType,
7239
7322
  defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
7240
7323
  label = column.label;
7324
+ var isDatePickerShown = filter && isCustomDateRange(filter.value);
7241
7325
  var otherProps = getOtherProps(column);
7242
- var value = buildDatetimeValue(filter);
7243
- var isCustomDateRangeShown = filter && isCustomDateRange(filter.value);
7244
- var _useTranslation = useTranslation(),
7245
- t = _useTranslation.t;
7246
7326
  var handleChange = function handleChange(option) {
7247
7327
  if (ramda.isEmpty(option) || ramda.isNil(option)) {
7248
7328
  handleApplyFilter({
7249
7329
  _delete: true
7250
7330
  });
7331
+ setSelectedRule({});
7251
7332
  return;
7252
7333
  }
7334
+ setSelectedRule(option);
7253
7335
  var updatedFilter = buildUpdatedFilter({
7254
7336
  column: column,
7255
7337
  defaultType: defaultType,
@@ -7262,13 +7344,14 @@ var Datetime = function Datetime(_ref) {
7262
7344
  handleApplyFilter({
7263
7345
  _delete: true
7264
7346
  });
7347
+ setSelectedRule({});
7265
7348
  return;
7266
7349
  }
7267
7350
  var updatedFilter = buildUpdatedFilter({
7268
7351
  column: column,
7269
7352
  defaultType: defaultType,
7270
7353
  option: {
7271
- value: ramda.pluck("$d", dates).map(function (date) {
7354
+ value: ramda.pluck("$d", buildDateValues(dates, selectedRule)).map(function (date) {
7272
7355
  return date.toISOString();
7273
7356
  })
7274
7357
  }
@@ -7284,15 +7367,15 @@ var Datetime = function Datetime(_ref) {
7284
7367
  label: label,
7285
7368
  options: DATE_OPTIONS,
7286
7369
  strategy: "fixed",
7287
- value: value,
7370
+ value: selectedRule,
7288
7371
  placeholder: t("messages.selectResource", {
7289
7372
  resource: label.toLocaleLowerCase()
7290
7373
  }),
7291
7374
  onChange: handleChange
7292
- }), isCustomDateRangeShown && /*#__PURE__*/React__default["default"].createElement(neetoui.DatePicker, _extends$1({
7375
+ }), isDatePickerShown && /*#__PURE__*/React__default["default"].createElement(neetoui.DatePicker, _extends$1({
7293
7376
  "data-cy": "neeto-filters-".concat(key, "-date-range"),
7294
- type: "range",
7295
- value: filter.value,
7377
+ type: (selectedRule === null || selectedRule === void 0 ? void 0 : selectedRule.value) === "custom-date-range" ? "range" : "date",
7378
+ value: getDateValue(filter === null || filter === void 0 ? void 0 : filter.value, selectedRule),
7296
7379
  onChange: handleDateRangeChange
7297
7380
  }, otherProps)));
7298
7381
  };
@@ -7541,7 +7624,7 @@ var Text = function Text(_ref) {
7541
7624
  var ruleOptions = buildRuleOptions({
7542
7625
  defaultType: defaultType
7543
7626
  });
7544
- var inputType = defaultType === "text" ? "text" : "number";
7627
+ var inputType = defaultType === "text" || defaultType === "custom.text" ? "text" : "number";
7545
7628
  var _useState = React.useState(filter === null || filter === void 0 ? void 0 : filter.value),
7546
7629
  _useState2 = _slicedToArray(_useState, 2),
7547
7630
  inputValue = _useState2[0],
@@ -8399,6 +8482,7 @@ instance.use(initReactI18next).init({
8399
8482
  exports.Bar = Bar;
8400
8483
  exports.Filters = Filters;
8401
8484
  exports.Segments = index;
8485
+ exports.buildFilterColumnsFromFields = buildFilterColumnsFromFields;
8402
8486
  exports.buildFiltersFromURL = buildFiltersFromURL;
8403
8487
  exports.buildSelectorsFromURL = buildSelectorsFromURL;
8404
8488
  //# sourceMappingURL=index.cjs.js.map