@bigbinary/neeto-filters-frontend 3.3.1 → 3.3.3

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
@@ -432,8 +432,8 @@ this case, all the users whose email address contains `bigbinary` in the
432
432
  ### Adding a new type
433
433
 
434
434
  - `NeetoFiltersEngine` provides the following types: `text`, `number`,
435
- `single_option`, `multi_option`, `date`, `time`, `datetime`, `date_range`, and
436
- `time_range`.
435
+ `single_option`, `multi_option`, `date`, `time`, `datetime`, `date_range`,
436
+ `time_range`, and `tree_select`.
437
437
  - Sometimes we need to filter attributes that are not present in the available
438
438
  types. In this case a new type needs to be created.
439
439
  - In this case, the type needs to be specified to the NPM package by passing the
package/dist/index.cjs.js CHANGED
@@ -384,6 +384,16 @@ var DEFAULT_BOOLEAN_OPTIONS = [{
384
384
  label: i18next.t("neetoFilters.common.no"),
385
385
  value: "false"
386
386
  }];
387
+ var TREE_SELECT_RULES = [{
388
+ label: i18next.t("neetoFilters.rules.in"),
389
+ value: "in"
390
+ }, {
391
+ label: i18next.t("neetoFilters.rules.notIn"),
392
+ value: "not_in"
393
+ }, {
394
+ label: i18next.t("neetoFilters.rules.isEmpty"),
395
+ value: "is_unknown"
396
+ }];
387
397
  var DEFAULT_HELP_ICON_PROPS = {
388
398
  icon: neetoIcons.Help,
389
399
  tooltipProps: {
@@ -439,6 +449,9 @@ var isText = function isText(type) {
439
449
  var isDigit = function isDigit(type) {
440
450
  return ["number", "decimal", "custom.decimal", "custom.number"].includes(type);
441
451
  };
452
+ var isTreeSelect = function isTreeSelect(type) {
453
+ return type === "tree_select";
454
+ };
442
455
  var isCustomDateRange = function isCustomDateRange(value) {
443
456
  return !ramda.pluck("value", DATE_OPTIONS).includes(value);
444
457
  };
@@ -553,6 +566,11 @@ var buildUpdatedFilter = function buildUpdatedFilter(_ref8) {
553
566
  value: option.value,
554
567
  rule: rule
555
568
  });
569
+ } else if (isTreeSelect(defaultType)) {
570
+ return ramda.mergeLeft(filter, {
571
+ value: option,
572
+ rule: rule
573
+ });
556
574
  }
557
575
  return ramda.mergeLeft(filter, {
558
576
  value: option.value,
@@ -582,7 +600,7 @@ var buildFiltersFromSearchParams = function buildFiltersFromSearchParams(columns
582
600
  return ramda.mergeLeft({
583
601
  value: value
584
602
  }, column);
585
- } else if (isMulti(defaultType)) {
603
+ } else if (isMulti(defaultType) || isTreeSelect(defaultType)) {
586
604
  var _value$split = value.split("+rule-"),
587
605
  _value$split2 = _slicedToArray(_value$split, 2),
588
606
  filterValue = _value$split2[0],
@@ -753,7 +771,7 @@ var buildFiltersPayload = function buildFiltersPayload(filters) {
753
771
  }
754
772
  if (isDate(defaultType)) {
755
773
  return ramda.mergeRight(filterPayload, buildDatePayload(value));
756
- } else if (isMulti(defaultType)) {
774
+ } else if (isMulti(defaultType) || isTreeSelect(defaultType)) {
757
775
  return ramda.mergeRight(filterPayload, {
758
776
  value: buildMultiOptionPayload(value)
759
777
  });
@@ -891,7 +909,7 @@ var createUrlParamString = function createUrlParamString(_ref15) {
891
909
  return "".concat(value, "+rule-").concat(rule);
892
910
  } else if (isSingleDate(defaultType) || isSingleTime(defaultType)) {
893
911
  return value && "".concat(value, "+rule-").concat(rule) || value;
894
- } else if (isMulti(defaultType)) {
912
+ } else if (isMulti(defaultType) || isTreeSelect(defaultType)) {
895
913
  return "".concat(value.join("|"), "+rule-").concat(rule);
896
914
  } else if (isSingle(defaultType)) {
897
915
  return "".concat(value, "+rule-").concat(rule);
@@ -1031,7 +1049,7 @@ var buildDropdownValue = function buildDropdownValue(_ref) {
1031
1049
  filter = _ref.filter,
1032
1050
  options = _ref.options;
1033
1051
  if (!filter) return null;
1034
- if (isMulti(defaultType)) {
1052
+ if (isMulti(defaultType) || isTreeSelect(defaultType)) {
1035
1053
  return options.filter(function (_ref2) {
1036
1054
  var value = _ref2.value;
1037
1055
  return filter.value.includes(value);
@@ -1769,6 +1787,100 @@ var Time = function Time(_ref) {
1769
1787
  };
1770
1788
  var Time$1 = /*#__PURE__*/React__default["default"].memo(Time);
1771
1789
 
1790
+ var TreeSelect = function TreeSelect(_ref) {
1791
+ var _findBy;
1792
+ var autoFocus = _ref.autoFocus,
1793
+ column = _ref.column,
1794
+ filter = _ref.filter,
1795
+ handleApplyFilter = _ref.handleApplyFilter;
1796
+ var key = column.key,
1797
+ label = column.label,
1798
+ _column$defaultType = column.defaultType,
1799
+ defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
1800
+ defaultValue = column.defaultValue,
1801
+ _column$helpIconProps = column.helpIconProps,
1802
+ helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps,
1803
+ _column$isClearable = column.isClearable,
1804
+ isClearable = _column$isClearable === void 0 ? true : _column$isClearable,
1805
+ _column$showRuleSelec = column.showRuleSelector,
1806
+ showRuleSelector = _column$showRuleSelec === void 0 ? false : _column$showRuleSelec,
1807
+ options = column.values;
1808
+ var initialRule = (_findBy = neetoCist.findBy({
1809
+ value: filter === null || filter === void 0 ? void 0 : filter.rule
1810
+ }, TREE_SELECT_RULES)) !== null && _findBy !== void 0 ? _findBy : TREE_SELECT_RULES[0];
1811
+ var _useState = React.useState(initialRule),
1812
+ _useState2 = _slicedToArray(_useState, 2),
1813
+ selectedRule = _useState2[0],
1814
+ setSelectedRule = _useState2[1];
1815
+ var _useTranslation = reactI18next.useTranslation(),
1816
+ t = _useTranslation.t;
1817
+ var selectedOption = buildDropdownValue({
1818
+ defaultType: defaultType,
1819
+ filter: filter,
1820
+ options: options
1821
+ });
1822
+ var handleChange = function handleChange(option) {
1823
+ if (neetoCist.isNotPresent(option)) return handleApplyFilter({
1824
+ _delete: true
1825
+ });
1826
+ var updatedFilter = buildUpdatedFilter({
1827
+ column: column,
1828
+ defaultType: defaultType,
1829
+ option: option,
1830
+ rule: selectedRule.value
1831
+ });
1832
+ return handleApplyFilter(updatedFilter);
1833
+ };
1834
+ var handleRuleChange = function handleRuleChange(rule) {
1835
+ var isPreviousRuleEmpty = isRuleEmpty(selectedRule.value);
1836
+ var isNewRuleEmpty = isRuleEmpty(rule.value);
1837
+ setSelectedRule(rule);
1838
+ if (isPreviousRuleEmpty || !isNewRuleEmpty && neetoCist.isNotPresent(filter === null || filter === void 0 ? void 0 : filter.value)) {
1839
+ return handleApplyFilter({
1840
+ _delete: true
1841
+ });
1842
+ }
1843
+ var updatedFilter = buildUpdatedFilter({
1844
+ column: column,
1845
+ defaultType: defaultType,
1846
+ option: isNewRuleEmpty ? [options[0]] : selectedOption,
1847
+ rule: rule.value
1848
+ });
1849
+ return handleApplyFilter(updatedFilter);
1850
+ };
1851
+ return /*#__PURE__*/React__default["default"].createElement("div", {
1852
+ className: "neeto-filters-pane-filter__item-wrapper"
1853
+ }, showRuleSelector && /*#__PURE__*/React__default["default"].createElement(neetoui.Select, {
1854
+ label: label,
1855
+ defaultValue: TREE_SELECT_RULES[0],
1856
+ options: TREE_SELECT_RULES,
1857
+ value: selectedRule,
1858
+ onChange: handleRuleChange
1859
+ }), !isRuleEmpty(selectedRule.value) &&
1860
+ /*#__PURE__*/
1861
+ // eslint-disable-next-line @bigbinary/neeto/merge-spread-attributes
1862
+ React__default["default"].createElement(neetoui.TreeSelect, _extends({
1863
+ autoFocus: autoFocus,
1864
+ multiple: true,
1865
+ showSearch: true,
1866
+ treeDataSimpleMode: true,
1867
+ allowClear: !defaultValue && isClearable,
1868
+ "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(key), "-filter"),
1869
+ label: !showRuleSelector && label,
1870
+ treeData: options,
1871
+ value: selectedOption,
1872
+ placeholder: t("neetoFilters.messages.selectResource", {
1873
+ resource: label
1874
+ }),
1875
+ onChange: handleChange
1876
+ }, neetoCist.isNotEmpty(helpIconProps) && {
1877
+ labelProps: {
1878
+ helpIconProps: buildHelpIconProps(helpIconProps)
1879
+ }
1880
+ }, getOtherProps(column))));
1881
+ };
1882
+ var TreeSelect$1 = /*#__PURE__*/React__default["default"].memo(TreeSelect);
1883
+
1772
1884
  var Item = function Item(_ref) {
1773
1885
  var column = _ref.column,
1774
1886
  filters = _ref.filters,
@@ -1843,6 +1955,14 @@ var Item = function Item(_ref) {
1843
1955
  handleApplyFilter: handleApplyFilter
1844
1956
  });
1845
1957
  }
1958
+ if (isTreeSelect(defaultType)) {
1959
+ return /*#__PURE__*/React__default["default"].createElement(TreeSelect$1, {
1960
+ autoFocus: autoFocus,
1961
+ column: column,
1962
+ filter: filter,
1963
+ handleApplyFilter: handleApplyFilter
1964
+ });
1965
+ }
1846
1966
  return /*#__PURE__*/React__default["default"].createElement(Dropdown$1, {
1847
1967
  autoFocus: autoFocus,
1848
1968
  column: column,
@@ -2167,7 +2287,7 @@ var buildFilterValue = function buildFilterValue(filter) {
2167
2287
  return value.map(utils.dateFormat.time).join(" - ");
2168
2288
  } else if (isDate(defaultType) || isTime(defaultType)) {
2169
2289
  return neetoCist.humanize(value);
2170
- } else if (isMulti(defaultType)) {
2290
+ } else if (isMulti(defaultType) || isTreeSelect(defaultType)) {
2171
2291
  return value.map(function (value) {
2172
2292
  var _findBy;
2173
2293
  return ((_findBy = neetoCist.findBy({
@@ -2207,7 +2327,7 @@ var buildRuleValue = function buildRuleValue(_ref) {
2207
2327
  return neetoCist.findBy({
2208
2328
  value: rule
2209
2329
  }, SINGLE_TIME_OPTIONS).label;
2210
- } else if (isMulti(defaultType) || isSingle(defaultType)) {
2330
+ } else if (isMulti(defaultType) || isSingle(defaultType) || isTreeSelect(defaultType)) {
2211
2331
  return isRuleEmpty(rule) ? i18next.t("neetoFilters.rules.isEmpty") : "";
2212
2332
  }
2213
2333
  return "";