@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/dist/index.js CHANGED
@@ -6,7 +6,7 @@ import { useDebounce, useQueryParams, useMutationWithInvalidation, withT } from
6
6
  import { groupBy, anyPass, isNil, isEmpty, any, concat, omit, mergeLeft, toLower, identity, mergeRight, toPairs, pluck, either, not, has, equals, pick, last, modify, append, mergeDeepRight, prop, assoc, reject, sortBy, project } from 'ramda';
7
7
  import { useQuery, useQueryClient } from 'react-query';
8
8
  import { Help, Delete as Delete$1, Plus, Close, Down } from '@bigbinary/neeto-icons';
9
- import { Select, DatePicker, TimePickerInput, Input, Button, Pane as Pane$1, Typography, Accordion, Tooltip, Dropdown as Dropdown$2, Alert, Spinner } from '@bigbinary/neetoui';
9
+ import { Select, DatePicker, TimePickerInput, Input, TreeSelect as TreeSelect$2, Button, Pane as Pane$1, Typography, Accordion, Tooltip, Dropdown as Dropdown$2, Alert, Spinner } from '@bigbinary/neetoui';
10
10
  import { Form, Input as Input$1, ActionBlock } from '@bigbinary/neetoui/formik';
11
11
  import { useTranslation, Trans } from 'react-i18next';
12
12
  import { useHistory } from 'react-router-dom/cjs/react-router-dom.min';
@@ -350,6 +350,16 @@ var DEFAULT_BOOLEAN_OPTIONS = [{
350
350
  label: t$1("neetoFilters.common.no"),
351
351
  value: "false"
352
352
  }];
353
+ var TREE_SELECT_RULES = [{
354
+ label: t$1("neetoFilters.rules.in"),
355
+ value: "in"
356
+ }, {
357
+ label: t$1("neetoFilters.rules.notIn"),
358
+ value: "not_in"
359
+ }, {
360
+ label: t$1("neetoFilters.rules.isEmpty"),
361
+ value: "is_unknown"
362
+ }];
353
363
  var DEFAULT_HELP_ICON_PROPS = {
354
364
  icon: Help,
355
365
  tooltipProps: {
@@ -405,6 +415,9 @@ var isText = function isText(type) {
405
415
  var isDigit = function isDigit(type) {
406
416
  return ["number", "decimal", "custom.decimal", "custom.number"].includes(type);
407
417
  };
418
+ var isTreeSelect = function isTreeSelect(type) {
419
+ return type === "tree_select";
420
+ };
408
421
  var isCustomDateRange = function isCustomDateRange(value) {
409
422
  return !pluck("value", DATE_OPTIONS).includes(value);
410
423
  };
@@ -519,6 +532,11 @@ var buildUpdatedFilter = function buildUpdatedFilter(_ref8) {
519
532
  value: option.value,
520
533
  rule: rule
521
534
  });
535
+ } else if (isTreeSelect(defaultType)) {
536
+ return mergeLeft(filter, {
537
+ value: option,
538
+ rule: rule
539
+ });
522
540
  }
523
541
  return mergeLeft(filter, {
524
542
  value: option.value,
@@ -548,7 +566,7 @@ var buildFiltersFromSearchParams = function buildFiltersFromSearchParams(columns
548
566
  return mergeLeft({
549
567
  value: value
550
568
  }, column);
551
- } else if (isMulti(defaultType)) {
569
+ } else if (isMulti(defaultType) || isTreeSelect(defaultType)) {
552
570
  var _value$split = value.split("+rule-"),
553
571
  _value$split2 = _slicedToArray(_value$split, 2),
554
572
  filterValue = _value$split2[0],
@@ -719,7 +737,7 @@ var buildFiltersPayload = function buildFiltersPayload(filters) {
719
737
  }
720
738
  if (isDate(defaultType)) {
721
739
  return mergeRight(filterPayload, buildDatePayload(value));
722
- } else if (isMulti(defaultType)) {
740
+ } else if (isMulti(defaultType) || isTreeSelect(defaultType)) {
723
741
  return mergeRight(filterPayload, {
724
742
  value: buildMultiOptionPayload(value)
725
743
  });
@@ -857,7 +875,7 @@ var createUrlParamString = function createUrlParamString(_ref15) {
857
875
  return "".concat(value, "+rule-").concat(rule);
858
876
  } else if (isSingleDate(defaultType) || isSingleTime(defaultType)) {
859
877
  return value && "".concat(value, "+rule-").concat(rule) || value;
860
- } else if (isMulti(defaultType)) {
878
+ } else if (isMulti(defaultType) || isTreeSelect(defaultType)) {
861
879
  return "".concat(value.join("|"), "+rule-").concat(rule);
862
880
  } else if (isSingle(defaultType)) {
863
881
  return "".concat(value, "+rule-").concat(rule);
@@ -997,7 +1015,7 @@ var buildDropdownValue = function buildDropdownValue(_ref) {
997
1015
  filter = _ref.filter,
998
1016
  options = _ref.options;
999
1017
  if (!filter) return null;
1000
- if (isMulti(defaultType)) {
1018
+ if (isMulti(defaultType) || isTreeSelect(defaultType)) {
1001
1019
  return options.filter(function (_ref2) {
1002
1020
  var value = _ref2.value;
1003
1021
  return filter.value.includes(value);
@@ -1735,6 +1753,100 @@ var Time = function Time(_ref) {
1735
1753
  };
1736
1754
  var Time$1 = /*#__PURE__*/React.memo(Time);
1737
1755
 
1756
+ var TreeSelect = function TreeSelect(_ref) {
1757
+ var _findBy;
1758
+ var autoFocus = _ref.autoFocus,
1759
+ column = _ref.column,
1760
+ filter = _ref.filter,
1761
+ handleApplyFilter = _ref.handleApplyFilter;
1762
+ var key = column.key,
1763
+ label = column.label,
1764
+ _column$defaultType = column.defaultType,
1765
+ defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
1766
+ defaultValue = column.defaultValue,
1767
+ _column$helpIconProps = column.helpIconProps,
1768
+ helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps,
1769
+ _column$isClearable = column.isClearable,
1770
+ isClearable = _column$isClearable === void 0 ? true : _column$isClearable,
1771
+ _column$showRuleSelec = column.showRuleSelector,
1772
+ showRuleSelector = _column$showRuleSelec === void 0 ? false : _column$showRuleSelec,
1773
+ options = column.values;
1774
+ var initialRule = (_findBy = findBy({
1775
+ value: filter === null || filter === void 0 ? void 0 : filter.rule
1776
+ }, TREE_SELECT_RULES)) !== null && _findBy !== void 0 ? _findBy : TREE_SELECT_RULES[0];
1777
+ var _useState = useState(initialRule),
1778
+ _useState2 = _slicedToArray(_useState, 2),
1779
+ selectedRule = _useState2[0],
1780
+ setSelectedRule = _useState2[1];
1781
+ var _useTranslation = useTranslation(),
1782
+ t = _useTranslation.t;
1783
+ var selectedOption = buildDropdownValue({
1784
+ defaultType: defaultType,
1785
+ filter: filter,
1786
+ options: options
1787
+ });
1788
+ var handleChange = function handleChange(option) {
1789
+ if (isNotPresent(option)) return handleApplyFilter({
1790
+ _delete: true
1791
+ });
1792
+ var updatedFilter = buildUpdatedFilter({
1793
+ column: column,
1794
+ defaultType: defaultType,
1795
+ option: option,
1796
+ rule: selectedRule.value
1797
+ });
1798
+ return handleApplyFilter(updatedFilter);
1799
+ };
1800
+ var handleRuleChange = function handleRuleChange(rule) {
1801
+ var isPreviousRuleEmpty = isRuleEmpty(selectedRule.value);
1802
+ var isNewRuleEmpty = isRuleEmpty(rule.value);
1803
+ setSelectedRule(rule);
1804
+ if (isPreviousRuleEmpty || !isNewRuleEmpty && isNotPresent(filter === null || filter === void 0 ? void 0 : filter.value)) {
1805
+ return handleApplyFilter({
1806
+ _delete: true
1807
+ });
1808
+ }
1809
+ var updatedFilter = buildUpdatedFilter({
1810
+ column: column,
1811
+ defaultType: defaultType,
1812
+ option: isNewRuleEmpty ? [options[0]] : selectedOption,
1813
+ rule: rule.value
1814
+ });
1815
+ return handleApplyFilter(updatedFilter);
1816
+ };
1817
+ return /*#__PURE__*/React.createElement("div", {
1818
+ className: "neeto-filters-pane-filter__item-wrapper"
1819
+ }, showRuleSelector && /*#__PURE__*/React.createElement(Select, {
1820
+ label: label,
1821
+ defaultValue: TREE_SELECT_RULES[0],
1822
+ options: TREE_SELECT_RULES,
1823
+ value: selectedRule,
1824
+ onChange: handleRuleChange
1825
+ }), !isRuleEmpty(selectedRule.value) &&
1826
+ /*#__PURE__*/
1827
+ // eslint-disable-next-line @bigbinary/neeto/merge-spread-attributes
1828
+ React.createElement(TreeSelect$2, _extends({
1829
+ autoFocus: autoFocus,
1830
+ multiple: true,
1831
+ showSearch: true,
1832
+ treeDataSimpleMode: true,
1833
+ allowClear: !defaultValue && isClearable,
1834
+ "data-cy": "neeto-filters-".concat(hyphenate(key), "-filter"),
1835
+ label: !showRuleSelector && label,
1836
+ treeData: options,
1837
+ value: selectedOption,
1838
+ placeholder: t("neetoFilters.messages.selectResource", {
1839
+ resource: label
1840
+ }),
1841
+ onChange: handleChange
1842
+ }, isNotEmpty(helpIconProps) && {
1843
+ labelProps: {
1844
+ helpIconProps: buildHelpIconProps(helpIconProps)
1845
+ }
1846
+ }, getOtherProps(column))));
1847
+ };
1848
+ var TreeSelect$1 = /*#__PURE__*/React.memo(TreeSelect);
1849
+
1738
1850
  var Item = function Item(_ref) {
1739
1851
  var column = _ref.column,
1740
1852
  filters = _ref.filters,
@@ -1809,6 +1921,14 @@ var Item = function Item(_ref) {
1809
1921
  handleApplyFilter: handleApplyFilter
1810
1922
  });
1811
1923
  }
1924
+ if (isTreeSelect(defaultType)) {
1925
+ return /*#__PURE__*/React.createElement(TreeSelect$1, {
1926
+ autoFocus: autoFocus,
1927
+ column: column,
1928
+ filter: filter,
1929
+ handleApplyFilter: handleApplyFilter
1930
+ });
1931
+ }
1812
1932
  return /*#__PURE__*/React.createElement(Dropdown$1, {
1813
1933
  autoFocus: autoFocus,
1814
1934
  column: column,
@@ -2133,7 +2253,7 @@ var buildFilterValue = function buildFilterValue(filter) {
2133
2253
  return value.map(dateFormat.time).join(" - ");
2134
2254
  } else if (isDate(defaultType) || isTime(defaultType)) {
2135
2255
  return humanize(value);
2136
- } else if (isMulti(defaultType)) {
2256
+ } else if (isMulti(defaultType) || isTreeSelect(defaultType)) {
2137
2257
  return value.map(function (value) {
2138
2258
  var _findBy;
2139
2259
  return ((_findBy = findBy({
@@ -2173,7 +2293,7 @@ var buildRuleValue = function buildRuleValue(_ref) {
2173
2293
  return findBy({
2174
2294
  value: rule
2175
2295
  }, SINGLE_TIME_OPTIONS).label;
2176
- } else if (isMulti(defaultType) || isSingle(defaultType)) {
2296
+ } else if (isMulti(defaultType) || isSingle(defaultType) || isTreeSelect(defaultType)) {
2177
2297
  return isRuleEmpty(rule) ? t$1("neetoFilters.rules.isEmpty") : "";
2178
2298
  }
2179
2299
  return "";