@bigbinary/neeto-filters-frontend 4.3.32 → 4.3.34

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 (101) hide show
  1. package/README.md +0 -2
  2. package/dist/.ready +1 -0
  3. package/dist/Bar.js +15 -26
  4. package/dist/Bar.js.map +1 -1
  5. package/dist/Filters.js +8 -7
  6. package/dist/Filters.js.map +1 -1
  7. package/dist/Segments.js +12 -9
  8. package/dist/Segments.js.map +1 -1
  9. package/dist/cjs/Bar.js +19 -30
  10. package/dist/cjs/Bar.js.map +1 -1
  11. package/dist/cjs/Filters.js +8 -7
  12. package/dist/cjs/Filters.js.map +1 -1
  13. package/dist/cjs/Segments.js +8 -5
  14. package/dist/cjs/Segments.js.map +1 -1
  15. package/dist/cjs/hooks.js +1 -1
  16. package/dist/cjs/index.js +9 -4
  17. package/dist/cjs/index.js.map +1 -1
  18. package/dist/cjs/utils.js +2 -1
  19. package/dist/cjs/utils.js.map +1 -1
  20. package/dist/cjs/v2/Bar.js +661 -0
  21. package/dist/cjs/v2/Bar.js.map +1 -0
  22. package/dist/cjs/v2/Filters.js +336 -0
  23. package/dist/cjs/v2/Filters.js.map +1 -0
  24. package/dist/cjs/v2/Segments.js +520 -0
  25. package/dist/cjs/v2/Segments.js.map +1 -0
  26. package/dist/cjs/v2/index.js +58 -0
  27. package/dist/cjs/v2/index.js.map +1 -0
  28. package/dist/cjs/v2/utils.js +70 -0
  29. package/dist/cjs/v2/utils.js.map +1 -0
  30. package/dist/{constants-8DtAPJaA.js → constants-BaYBNRZa.js} +2 -2
  31. package/dist/{constants-8DtAPJaA.js.map → constants-BaYBNRZa.js.map} +1 -1
  32. package/dist/dayjs-9rsrbiYS.js +6 -0
  33. package/dist/dayjs-9rsrbiYS.js.map +1 -0
  34. package/dist/dayjs-DNGB9yJD.js +4 -0
  35. package/dist/dayjs-DNGB9yJD.js.map +1 -0
  36. package/dist/hooks.js +2 -2
  37. package/dist/{index-Bq32eLIG.js → index-BCnobjnZ.js} +5 -18
  38. package/dist/index-BCnobjnZ.js.map +1 -0
  39. package/dist/index-BD5y7_BW.js +969 -0
  40. package/dist/index-BD5y7_BW.js.map +1 -0
  41. package/dist/index-BxEtpFbP.js +301 -0
  42. package/dist/index-BxEtpFbP.js.map +1 -0
  43. package/dist/{index-CzUm_HaL.js → index-Bzw5oKqg.js} +48 -166
  44. package/dist/index-Bzw5oKqg.js.map +1 -0
  45. package/dist/index-C4AC0OfA.js +967 -0
  46. package/dist/index-C4AC0OfA.js.map +1 -0
  47. package/dist/{index-Rn6zFKPg.js → index-Cdvbpy-b.js} +30 -147
  48. package/dist/index-Cdvbpy-b.js.map +1 -0
  49. package/dist/index-CpgjbwJP.js +299 -0
  50. package/dist/index-CpgjbwJP.js.map +1 -0
  51. package/dist/{index-BYRIatjo.js → index-aOxl-IeV.js} +6 -38
  52. package/dist/index-aOxl-IeV.js.map +1 -0
  53. package/dist/index.js +10 -5
  54. package/dist/index.js.map +1 -1
  55. package/dist/inject-css-B6qYtOJe.js +6 -0
  56. package/dist/inject-css-B6qYtOJe.js.map +1 -0
  57. package/dist/inject-css-C2dztUxs.js +4 -0
  58. package/dist/inject-css-C2dztUxs.js.map +1 -0
  59. package/dist/keyboardShortcuts-DcgoM1dR.js +20 -0
  60. package/dist/keyboardShortcuts-DcgoM1dR.js.map +1 -0
  61. package/dist/keyboardShortcuts-oiJyIaFr.js +18 -0
  62. package/dist/keyboardShortcuts-oiJyIaFr.js.map +1 -0
  63. package/dist/{useSegmentsApi-wYy0UPCH.js → useSegmentsApi-C6mffm-a.js} +4 -4
  64. package/dist/{useSegmentsApi-wYy0UPCH.js.map → useSegmentsApi-C6mffm-a.js.map} +1 -1
  65. package/dist/{useSegmentsApi-CDE1HWEv.js → useSegmentsApi-DlvMy4A9.js} +2 -2
  66. package/dist/{useSegmentsApi-CDE1HWEv.js.map → useSegmentsApi-DlvMy4A9.js.map} +1 -1
  67. package/dist/utils-B3464cET.js +126 -0
  68. package/dist/utils-B3464cET.js.map +1 -0
  69. package/dist/utils-BUFBOQlR.js +802 -0
  70. package/dist/utils-BUFBOQlR.js.map +1 -0
  71. package/dist/utils-Cj2MY2tu.js +38 -0
  72. package/dist/utils-Cj2MY2tu.js.map +1 -0
  73. package/dist/utils-ClTYBS1C.js +865 -0
  74. package/dist/utils-ClTYBS1C.js.map +1 -0
  75. package/dist/utils-CwKBnC3c.js +17 -0
  76. package/dist/utils-CwKBnC3c.js.map +1 -0
  77. package/dist/{utils-BuCOQsNv.js → utils-CzRCzZ3I.js} +3 -4
  78. package/dist/utils-CzRCzZ3I.js.map +1 -0
  79. package/dist/utils-Dh5ByFPA.js +138 -0
  80. package/dist/utils-Dh5ByFPA.js.map +1 -0
  81. package/dist/{utils-CxVWpPGf.js → utils-Q-OTPVjq.js} +8 -9
  82. package/dist/utils-Q-OTPVjq.js.map +1 -0
  83. package/dist/utils.js +3 -2
  84. package/dist/utils.js.map +1 -1
  85. package/dist/v2/Bar.js +659 -0
  86. package/dist/v2/Bar.js.map +1 -0
  87. package/dist/v2/Filters.js +334 -0
  88. package/dist/v2/Filters.js.map +1 -0
  89. package/dist/v2/Segments.js +518 -0
  90. package/dist/v2/Segments.js.map +1 -0
  91. package/dist/v2/index.js +42 -0
  92. package/dist/v2/index.js.map +1 -0
  93. package/dist/v2/utils.js +12 -0
  94. package/dist/v2/utils.js.map +1 -0
  95. package/package.json +41 -28
  96. package/dist/index-BYRIatjo.js.map +0 -1
  97. package/dist/index-Bq32eLIG.js.map +0 -1
  98. package/dist/index-CzUm_HaL.js.map +0 -1
  99. package/dist/index-Rn6zFKPg.js.map +0 -1
  100. package/dist/utils-BuCOQsNv.js.map +0 -1
  101. package/dist/utils-CxVWpPGf.js.map +0 -1
@@ -0,0 +1,661 @@
1
+ 'use strict';
2
+
3
+ var _defineProperty = require('@babel/runtime/helpers/defineProperty');
4
+ var react = require('react');
5
+ var reactQuery = require('@tanstack/react-query');
6
+ var classnames = require('classnames');
7
+ var i18next = require('i18next');
8
+ var neetoCist = require('@bigbinary/neeto-cist');
9
+ var reactUtils = require('@bigbinary/neeto-commons-frontend/react-utils');
10
+ var ramda = require('ramda');
11
+ var useSegmentsApi = require('../../useSegmentsApi-DlvMy4A9.js');
12
+ var index = require('../../index-BxEtpFbP.js');
13
+ var neetoAtoms = require('@bigbinary/neeto-atoms');
14
+ var utils = require('@bigbinary/neeto-commons-frontend/utils');
15
+ var reactI18next = require('react-i18next');
16
+ var reactRouterDom = require('react-router-dom');
17
+ var constants = require('../../constants-DoHD7obf.js');
18
+ var lucideReact = require('lucide-react');
19
+ var useHotkeys = require('@bigbinary/neeto-hotkeys');
20
+ var utils$1 = require('../../utils-Dh5ByFPA.js');
21
+ var keyboardShortcuts = require('../../keyboardShortcuts-DcgoM1dR.js');
22
+ var v2_utils = require('../../utils-ClTYBS1C.js');
23
+ var jsxRuntime = require('react/jsx-runtime');
24
+ var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
25
+ var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
26
+ var utils$2 = require('../../utils-CzRCzZ3I.js');
27
+ require('axios');
28
+ require('@bigbinary/neeto-atoms/formik');
29
+ require('@bigbinary/neeto-molecules/v2/HelpPopover');
30
+ require('../../utils-Cj2MY2tu.js');
31
+ require('yup');
32
+ require('../../index-BD5y7_BW.js');
33
+ require('../../dayjs-9rsrbiYS.js');
34
+ require('@bigbinary/neeto-icons/Help');
35
+
36
+ var DEFAULT_SEGMENTS_CACHE = {
37
+ segments: []
38
+ };
39
+ var SEGMENT_ACTIONS = {
40
+ EDIT: "edit",
41
+ CREATE: "create"
42
+ };
43
+
44
+ var buildCustomDateValue = function buildCustomDateValue(value) {
45
+ var isBeforeOrAfter = Math.abs(utils.dayjs(value[1]).diff(utils.dayjs(value[0]), "year")) >= 90;
46
+ if (isBeforeOrAfter) {
47
+ var currentMoment = utils.dayjs();
48
+ var diffWithStart = Math.abs(currentMoment.diff(utils.dayjs(value[0]), "year"));
49
+ var diffWithEnd = Math.abs(currentMoment.diff(utils.dayjs(value[1]), "year"));
50
+ return diffWithStart < diffWithEnd ? "after-".concat(utils.dateFormat.date(utils.dayjs(value[0]).subtract(1, "day"))) : "before-".concat(utils.dateFormat.date(utils.dayjs(value[1]).add(1, "day")));
51
+ }
52
+ return value.map(utils.dateFormat.date).join(" - ");
53
+ };
54
+ var buildFilterValue = function buildFilterValue(filter) {
55
+ var _findBy2;
56
+ var _filter$defaultType = filter.defaultType,
57
+ defaultType = _filter$defaultType === void 0 ? filter.type : _filter$defaultType,
58
+ value = filter.value,
59
+ rule = filter.rule,
60
+ _filter$values = filter.values,
61
+ initialValues = _filter$values === void 0 ? [] : _filter$values;
62
+ var values = initialValues.map(ramda.modify("value", function (value) {
63
+ return value.toString();
64
+ }));
65
+ if (v2_utils.isDate(defaultType) && v2_utils.isCustomDateRange(value)) {
66
+ return buildCustomDateValue(value);
67
+ } else if (v2_utils.isTime(defaultType) && v2_utils.isCustomTimeRange(value)) {
68
+ return value.map(utils.dateFormat.time).join(" - ");
69
+ } else if (v2_utils.isDate(defaultType) || v2_utils.isTime(defaultType)) {
70
+ return neetoCist.humanize(value);
71
+ } else if (v2_utils.isMulti(defaultType) || v2_utils.isTreeSelect(defaultType)) {
72
+ return value.map(function (value) {
73
+ var _findBy;
74
+ return ((_findBy = neetoCist.findBy({
75
+ value: value
76
+ }, values)) === null || _findBy === void 0 ? void 0 : _findBy.label) || value;
77
+ }).join(", ");
78
+ } else if (v2_utils.isSingleDate(defaultType)) {
79
+ return rule === "between" ? value.map(utils.dateFormat.date).join(" - ") : utils.dateFormat.date(value);
80
+ } else if (v2_utils.isSingleTime(defaultType)) {
81
+ return rule === "between" ? value.map(utils.dateFormat.time).join(" - ") : utils.dateFormat.time(value);
82
+ } else if (v2_utils.isBoolean(defaultType)) {
83
+ return v2_utils.getLabelFromBool({
84
+ value: value,
85
+ values: values
86
+ });
87
+ }
88
+ return ((_findBy2 = neetoCist.findBy({
89
+ value: value
90
+ }, values)) === null || _findBy2 === void 0 ? void 0 : _findBy2.label) || value;
91
+ };
92
+ var buildRuleValue = function buildRuleValue(_ref) {
93
+ var rule = _ref.rule,
94
+ defaultType = _ref.defaultType;
95
+ try {
96
+ if (v2_utils.isText(defaultType)) {
97
+ return neetoCist.findBy({
98
+ value: rule
99
+ }, v2_utils.TEXT_RULES).label;
100
+ } else if (v2_utils.isDigit(defaultType)) {
101
+ return neetoCist.findBy({
102
+ value: rule
103
+ }, v2_utils.NUMBER_RULES).label;
104
+ } else if (v2_utils.isSingleDate(defaultType)) {
105
+ return neetoCist.findBy({
106
+ value: rule
107
+ }, constants.SINGLE_DATE_OPTIONS).label;
108
+ } else if (v2_utils.isSingleTime(defaultType)) {
109
+ return neetoCist.findBy({
110
+ value: rule
111
+ }, constants.SINGLE_TIME_OPTIONS).label;
112
+ } else if (v2_utils.isMulti(defaultType) || v2_utils.isSingle(defaultType) || v2_utils.isTreeSelect(defaultType)) {
113
+ return utils$1.isRuleEmpty(rule) ? i18next.t("neetoFilters.rules.isEmpty") : "";
114
+ }
115
+ } catch (_unused) {
116
+ // This block is to handle the cases where the user modifies the URL and adds an invalid rule.
117
+ }
118
+ return "";
119
+ };
120
+ var hasOnlyKeywordFilter = function hasOnlyKeywordFilter(filters) {
121
+ return filters.length === 1 && filters[0].key === constants.SEARCH_TERM_KEY;
122
+ };
123
+ var deepCompare = function deepCompare(segments, filters) {
124
+ var comparisonHelper = function comparisonHelper(filters) {
125
+ return ramda.sortBy(ramda.prop("key"), neetoCist.removeBy({
126
+ key: constants.SEARCH_TERM_KEY
127
+ }, ramda.project(["key", "rule", "value", "label"], filters)));
128
+ };
129
+ return ramda.reject(function (filters) {
130
+ var segment = neetoCist.findBy({
131
+ key: filters.key
132
+ }, segments);
133
+ return segment && segment.value === filters.value;
134
+ }, comparisonHelper(filters));
135
+ };
136
+
137
+ var Block = function Block(_ref) {
138
+ var filter = _ref.filter,
139
+ handleDelete = _ref.handleDelete,
140
+ setIsPaneOpen = _ref.setIsPaneOpen;
141
+ var key = filter.key,
142
+ _filter$defaultType = filter.defaultType,
143
+ defaultType = _filter$defaultType === void 0 ? filter.type : _filter$defaultType,
144
+ label = filter.label,
145
+ rule = filter.rule,
146
+ defaultValue = filter.defaultValue;
147
+ var filterValue = buildFilterValue(filter);
148
+ var ruleContent = buildRuleValue({
149
+ rule: rule,
150
+ defaultType: defaultType
151
+ });
152
+ var blockLength = label.length + ruleContent.length + filterValue.length;
153
+ var toolTipDisabled = blockLength <= 50;
154
+ var blockContent = !toolTipDisabled ? "".concat(filterValue.slice(0, 50 - blockLength), "...") : filterValue;
155
+ var deleteBlockHotKeyRef = useHotkeys(keyboardShortcuts.SHORTCUTS.deleteBlock.sequence, function () {
156
+ return handleDelete(key);
157
+ }, {
158
+ mode: "scoped"
159
+ });
160
+ var openFilterPaneHotKeyRef = useHotkeys(keyboardShortcuts.SHORTCUTS.openFilterPane.sequence, function () {
161
+ return setIsPaneOpen(key);
162
+ }, {
163
+ mode: "scoped"
164
+ });
165
+ return /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Tooltip, {
166
+ content: filterValue,
167
+ disabled: toolTipDisabled,
168
+ position: "bottom",
169
+ children: /*#__PURE__*/jsxRuntime.jsxs("div", {
170
+ className: "neeto-filters-bar__block",
171
+ "data-testid": "neeto-filters-".concat(neetoCist.hyphenate(key), "-block"),
172
+ tabIndex: 0,
173
+ ref: function ref(node) {
174
+ deleteBlockHotKeyRef.current = node;
175
+ openFilterPaneHotKeyRef.current = node;
176
+ },
177
+ onClick: function onClick() {
178
+ return setIsPaneOpen(key);
179
+ },
180
+ children: [/*#__PURE__*/jsxRuntime.jsxs(neetoAtoms.Typography, {
181
+ variant: "body2",
182
+ children: [label, ":"]
183
+ }), /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Typography, {
184
+ className: "text-muted-foreground",
185
+ variant: "body2",
186
+ children: ruleContent
187
+ }), !utils$1.isRuleEmpty(rule) && /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Typography, {
188
+ variant: "body2",
189
+ children: blockContent
190
+ }), !defaultValue && /*#__PURE__*/jsxRuntime.jsx("div", {
191
+ className: "neeto-filters-bar__block-close",
192
+ children: /*#__PURE__*/jsxRuntime.jsx(lucideReact.XIcon, {
193
+ "data-testid": "neeto-filters-".concat(neetoCist.hyphenate(key), "-block-close-btn"),
194
+ size: 16,
195
+ strokeWidth: 2,
196
+ onClick: function onClick(event) {
197
+ event.stopPropagation();
198
+ handleDelete(key);
199
+ }
200
+ })
201
+ })]
202
+ })
203
+ });
204
+ };
205
+
206
+ var ChildBlock = function ChildBlock(_ref) {
207
+ var childKey = _ref.childKey,
208
+ setIsPaneOpen = _ref.setIsPaneOpen,
209
+ handleDelete = _ref.handleDelete;
210
+ var deleteBlockHotKeyRef = useHotkeys(keyboardShortcuts.SHORTCUTS.deleteBlock.sequence, function () {
211
+ return handleDelete(childKey);
212
+ }, {
213
+ mode: "scoped"
214
+ });
215
+ var openFilterPaneHotKeyRef = useHotkeys(keyboardShortcuts.SHORTCUTS.openFilterPane.sequence, function () {
216
+ return setIsPaneOpen(childKey);
217
+ }, {
218
+ mode: "scoped"
219
+ });
220
+ return /*#__PURE__*/jsxRuntime.jsxs("div", {
221
+ className: "neeto-filters-bar__block",
222
+ "data-testid": "neeto-filters-".concat(neetoCist.hyphenate(childKey), "-block"),
223
+ tabIndex: 0,
224
+ ref: function ref(node) {
225
+ deleteBlockHotKeyRef.current = node;
226
+ openFilterPaneHotKeyRef.current = node;
227
+ },
228
+ onClick: function onClick() {
229
+ return setIsPaneOpen(childKey);
230
+ },
231
+ children: [/*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Typography, {
232
+ variant: "body2",
233
+ weight: "medium",
234
+ children: childKey
235
+ }), /*#__PURE__*/jsxRuntime.jsx("div", {
236
+ className: "neeto-filters-bar__block-close",
237
+ children: /*#__PURE__*/jsxRuntime.jsx(lucideReact.XIcon, {
238
+ "data-testid": "neeto-filters-".concat(neetoCist.hyphenate(childKey), "-block-close-btn"),
239
+ size: 16,
240
+ strokeWidth: 2,
241
+ onClick: function onClick(event) {
242
+ event.stopPropagation();
243
+ handleDelete(childKey);
244
+ }
245
+ })
246
+ })]
247
+ });
248
+ };
249
+
250
+ var FilterBar = function FilterBar(_ref) {
251
+ var entity = _ref.entity,
252
+ filters = _ref.filters,
253
+ setIsSavePaneOpen = _ref.setIsSavePaneOpen,
254
+ setIsPaneOpen = _ref.setIsPaneOpen,
255
+ childrenKeys = _ref.childrenKeys,
256
+ nonHiddenFilters = _ref.nonHiddenFilters,
257
+ childrenFiltersApplied = _ref.childrenFiltersApplied,
258
+ keywordFilter = _ref.keywordFilter,
259
+ handleApplyFilters = _ref.handleApplyFilters;
260
+ var _useTranslation = reactI18next.useTranslation(),
261
+ t = _useTranslation.t;
262
+ var history = reactRouterDom.useHistory();
263
+ var searchParams = reactUtils.useQueryParams({
264
+ toCamelCase: false
265
+ });
266
+ var handleDelete = function handleDelete(key) {
267
+ if (key === constants.SEARCH_TERM_KEY) {
268
+ var params = ramda.omit([constants.SEARCH_TERM_KEY], v2_utils.getSnakeCasedQueryParams());
269
+ var pathname = window.location.pathname;
270
+ history.push(utils.buildUrl(pathname, params));
271
+ return;
272
+ }
273
+ if (childrenKeys.includes(key)) {
274
+ var _params = ramda.omit([key], v2_utils.getSnakeCasedQueryParams());
275
+ var _pathname = window.location.pathname;
276
+ history.push(utils.buildUrl(_pathname, _params));
277
+ }
278
+ var newFilters = neetoCist.removeBy({
279
+ key: key
280
+ }, filters);
281
+ handleApplyFilters(newFilters);
282
+ };
283
+ var handleClearAll = function handleClearAll() {
284
+ var params = v2_utils.isKeywordFilterPresent(keywordFilter) ? ramda.omit([constants.SEARCH_TERM_KEY], v2_utils.getSnakeCasedQueryParams()) : v2_utils.getSnakeCasedQueryParams();
285
+ var pathname = window.location.pathname;
286
+ history.push(utils.buildUrl(pathname, params));
287
+ handleApplyFilters([], true);
288
+ };
289
+ var hideClearButton = nonHiddenFilters.every(function (_ref2) {
290
+ var defaultValue = _ref2.defaultValue,
291
+ isClearable = _ref2.isClearable;
292
+ return defaultValue && !isClearable;
293
+ }) && !childrenFiltersApplied;
294
+ return /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
295
+ children: [nonHiddenFilters.map(function (filter) {
296
+ var _filter$suffixCompone;
297
+ return /*#__PURE__*/jsxRuntime.jsxs(react.Fragment, {
298
+ children: [/*#__PURE__*/jsxRuntime.jsx(Block, {
299
+ filter: filter,
300
+ handleDelete: handleDelete,
301
+ setIsPaneOpen: setIsPaneOpen
302
+ }), (_filter$suffixCompone = filter.suffixComponent) === null || _filter$suffixCompone === void 0 ? void 0 : _filter$suffixCompone.call(filter), /*#__PURE__*/jsxRuntime.jsx("div", {
303
+ className: "neeto-filters-bar--separator"
304
+ })]
305
+ }, filter.key);
306
+ }), childrenKeys.filter(function (childKey) {
307
+ return ramda.has(childKey, searchParams);
308
+ }).map(function (childKey) {
309
+ return /*#__PURE__*/jsxRuntime.jsxs(react.Fragment, {
310
+ children: [/*#__PURE__*/jsxRuntime.jsx(ChildBlock, {
311
+ childKey: childKey,
312
+ handleDelete: handleDelete,
313
+ setIsPaneOpen: setIsPaneOpen
314
+ }), /*#__PURE__*/jsxRuntime.jsx("div", {
315
+ className: "neeto-filters-bar--separator"
316
+ })]
317
+ }, childKey);
318
+ }), /*#__PURE__*/jsxRuntime.jsxs("div", {
319
+ className: "flex items-center gap-x-2",
320
+ children: [neetoCist.isPresent(entity) && !hasOnlyKeywordFilter(filters) && /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Button, {
321
+ "data-testid": "save-segment-button",
322
+ label: t("neetoFilters.views.saveAsNewView"),
323
+ variant: "secondary",
324
+ onClick: function onClick() {
325
+ setIsPaneOpen(false);
326
+ setIsSavePaneOpen({
327
+ action: SEGMENT_ACTIONS.CREATE
328
+ });
329
+ }
330
+ }), !hideClearButton && /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Button, {
331
+ "data-testid": "neeto-filters-bar-clear-btn",
332
+ label: t("neetoFilters.common.clearFilters"),
333
+ size: "sm",
334
+ variant: "secondary",
335
+ onClick: handleClearAll
336
+ })]
337
+ })]
338
+ });
339
+ };
340
+
341
+ 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; }
342
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), true).forEach(function (r) { _defineProperty(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; }
343
+ var useSegment = function useSegment(_ref) {
344
+ var entity = _ref.entity,
345
+ keyword = _ref.keyword,
346
+ columns = _ref.columns,
347
+ childrenKeys = _ref.childrenKeys,
348
+ segmentsBaseUrl = _ref.segmentsBaseUrl;
349
+ var history = reactRouterDom.useHistory();
350
+ var _useTranslation = reactI18next.useTranslation(),
351
+ t = _useTranslation.t;
352
+ var initialRenderRef = react.useRef(true);
353
+ var _useQueryParams = reactUtils.useQueryParams(),
354
+ segmentId = _useQueryParams.segmentId;
355
+ var _useState = react.useState({
356
+ action: undefined
357
+ }),
358
+ _useState2 = _slicedToArray(_useState, 2),
359
+ isSavePaneOpen = _useState2[0],
360
+ setIsSavePaneOpen = _useState2[1];
361
+ var _useCreateSegment = useSegmentsApi.useCreateSegment(),
362
+ createSegment = _useCreateSegment.mutate,
363
+ isCreating = _useCreateSegment.isPending;
364
+ var _useUpdateSegment = useSegmentsApi.useUpdateSegment(),
365
+ updateSegment = _useUpdateSegment.mutate,
366
+ isUpdating = _useUpdateSegment.isPending;
367
+ var isSubmitting = isCreating || isUpdating;
368
+ var searchParams = reactUtils.useQueryParams({
369
+ toCamelCase: false
370
+ });
371
+ var keywordValue = searchParams[constants.SEARCH_TERM_KEY] || "";
372
+ var isEdit = isSavePaneOpen.action === SEGMENT_ACTIONS.EDIT;
373
+ var keywordFilter = _objectSpread(_objectSpread({
374
+ type: "text",
375
+ rule: "contains",
376
+ label: t("neetoFilters.common.searchTerm")
377
+ }, keyword), {}, {
378
+ key: constants.SEARCH_TERM_KEY,
379
+ value: keywordValue
380
+ });
381
+ var filters = utils$2.buildFiltersFromSearchParams(utils$2.isKeywordFilterPresent(keywordFilter) && neetoCist.isNotEmpty(keywordValue) ? [keywordFilter].concat(_toConsumableArray(columns)) : columns);
382
+ var nonHiddenFilters = neetoCist.removeBy({
383
+ hidden: true
384
+ }, filters);
385
+ var handleApplyFilters = function handleApplyFilters(newFilters, isClearAll) {
386
+ var params = utils$2.buildUrlFromFilters(_objectSpread({
387
+ columns: columns,
388
+ filters: utils$2.isKeywordFilterPresent(keywordFilter) && neetoCist.isNotEmpty(utils$2.getSearchTermFromUrl()) ? [].concat(_toConsumableArray(newFilters), [keywordFilter]) : newFilters
389
+ }, isClearAll && {
390
+ isClearAll: true,
391
+ childrenKeys: childrenKeys
392
+ }));
393
+ history.push({
394
+ search: params
395
+ });
396
+ };
397
+ var childrenFiltersApplied = childrenKeys.some(function (key) {
398
+ return ramda.has(key, searchParams);
399
+ });
400
+ react.useEffect(function () {
401
+ if (initialRenderRef.current) {
402
+ initialRenderRef.current = false;
403
+ return neetoCist.noop;
404
+ }
405
+ var handler = setTimeout(function () {
406
+ handleApplyFilters(filters);
407
+ }, 500);
408
+ return function () {
409
+ return clearTimeout(handler);
410
+ };
411
+ }, [keywordValue]);
412
+ var handleCreateSuccess = function handleCreateSuccess(_ref2) {
413
+ var _filters$;
414
+ var _ref2$segment = _ref2.segment,
415
+ id = _ref2$segment.id,
416
+ filters = _ref2$segment.filters;
417
+ history.push({
418
+ pathname: segmentsBaseUrl,
419
+ search: utils$2.buildUrlFromSegment({
420
+ columns: columns,
421
+ filters: (_filters$ = filters[0]) === null || _filters$ === void 0 ? void 0 : _filters$.conditions,
422
+ id: id
423
+ })
424
+ });
425
+ setIsSavePaneOpen({
426
+ action: undefined
427
+ });
428
+ utils.showThumbsUpToastr();
429
+ };
430
+ var handleCreate = function handleCreate(_ref3, _ref4) {
431
+ var name = _ref3.name;
432
+ var setFieldError = _ref4.setFieldError;
433
+ var filtersPayload = utils$2.buildSegmentsPayload(filters, childrenKeys);
434
+ createSegment({
435
+ name: name,
436
+ entity: entity,
437
+ filters: filtersPayload
438
+ }, {
439
+ onSuccess: handleCreateSuccess,
440
+ onError: function onError(error) {
441
+ return setFieldError("name", error.response.data.error);
442
+ }
443
+ });
444
+ };
445
+ var handleUpdate = function handleUpdate(_ref5, _ref6) {
446
+ var name = _ref5.name;
447
+ var setFieldError = _ref6.setFieldError;
448
+ var filtersPayload = utils$2.buildSegmentsPayload(filters, childrenKeys);
449
+ updateSegment({
450
+ id: segmentId,
451
+ payload: {
452
+ name: name,
453
+ filters: filtersPayload
454
+ }
455
+ }, {
456
+ onSuccess: function onSuccess() {
457
+ setIsSavePaneOpen({
458
+ action: undefined
459
+ });
460
+ utils.showThumbsUpToastr();
461
+ },
462
+ onError: function onError(error) {
463
+ return setFieldError("name", error.response.data.error);
464
+ }
465
+ });
466
+ };
467
+ return {
468
+ isEdit: isEdit,
469
+ filters: filters,
470
+ keywordFilter: keywordFilter,
471
+ isSubmitting: isSubmitting,
472
+ nonHiddenFilters: nonHiddenFilters,
473
+ isSavePaneOpen: isSavePaneOpen,
474
+ setIsSavePaneOpen: setIsSavePaneOpen,
475
+ handleApplyFilters: handleApplyFilters,
476
+ childrenFiltersApplied: childrenFiltersApplied,
477
+ handleSubmit: isEdit ? handleUpdate : handleCreate
478
+ };
479
+ };
480
+
481
+ var SegmentBar = function SegmentBar(_ref) {
482
+ var entity = _ref.entity,
483
+ filters = _ref.filters,
484
+ setIsSavePaneOpen = _ref.setIsSavePaneOpen,
485
+ setIsPaneOpen = _ref.setIsPaneOpen,
486
+ handleApplyFilters = _ref.handleApplyFilters,
487
+ childrenKeys = _ref.childrenKeys,
488
+ showSegmentName = _ref.showSegmentName;
489
+ var _useTranslation = reactI18next.useTranslation(),
490
+ t = _useTranslation.t;
491
+ var history = reactRouterDom.useHistory();
492
+ var _useQueryParams = reactUtils.useQueryParams(),
493
+ segmentId = _useQueryParams.segmentId;
494
+ var queryClient = reactQuery.useQueryClient();
495
+ var cachedSegments = queryClient.getQueryData([useSegmentsApi.QUERY_KEYS.SEGMENTS_LIST, entity, ""]) || DEFAULT_SEGMENTS_CACHE;
496
+ var segment = neetoCist.findById(segmentId, cachedSegments.segments);
497
+ if (neetoCist.isNotPresent(segment)) return null;
498
+ var handleDelete = function handleDelete(key) {
499
+ if (key === constants.SEARCH_TERM_KEY) {
500
+ var params = ramda.omit([constants.SEARCH_TERM_KEY], utils$2.getSnakeCasedQueryParams());
501
+ var pathname = window.location.pathname;
502
+ history.push(utils.buildUrl(pathname, params));
503
+ return;
504
+ }
505
+ if (childrenKeys.includes(key)) {
506
+ var _params = ramda.omit([key], utils$2.getSnakeCasedQueryParams());
507
+ var _pathname = window.location.pathname;
508
+ history.push(utils.buildUrl(_pathname, _params));
509
+ }
510
+ var newFilters = neetoCist.removeBy({
511
+ key: key
512
+ }, filters);
513
+ handleApplyFilters(newFilters);
514
+ };
515
+ var changedFilters = deepCompare(segment.filters[0].conditions, filters);
516
+ return /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
517
+ children: [showSegmentName && /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Typography, {
518
+ className: "text-muted-foreground me-4 px-2",
519
+ "data-testid": "neeto-filters-segment-name",
520
+ variant: "h4",
521
+ children: segment.name
522
+ }), neetoCist.isNotEmpty(changedFilters) && /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
523
+ children: [/*#__PURE__*/jsxRuntime.jsx(neetoAtoms.DropdownMenu, {
524
+ buttonProps: {
525
+ className: "me-2"
526
+ },
527
+ buttonStyle: "secondary",
528
+ label: t("neetoFilters.views.updateView"),
529
+ children: /*#__PURE__*/jsxRuntime.jsxs(neetoAtoms.DropdownMenu.Menu, {
530
+ children: [/*#__PURE__*/jsxRuntime.jsx(neetoAtoms.DropdownMenu.MenuItem, {
531
+ children: /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.DropdownMenu.MenuItem.Button, {
532
+ onClick: function onClick() {
533
+ return setIsSavePaneOpen({
534
+ action: SEGMENT_ACTIONS.EDIT
535
+ });
536
+ },
537
+ children: t("neetoFilters.views.updateView")
538
+ })
539
+ }), /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.DropdownMenu.MenuItem, {
540
+ children: /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.DropdownMenu.MenuItem.Button, {
541
+ onClick: function onClick() {
542
+ setIsPaneOpen(false);
543
+ setIsSavePaneOpen({
544
+ action: SEGMENT_ACTIONS.CREATE
545
+ });
546
+ },
547
+ children: t("neetoFilters.views.saveAsNewView")
548
+ })
549
+ })]
550
+ })
551
+ }), changedFilters.map(function (filter) {
552
+ var _filter$suffixCompone;
553
+ return /*#__PURE__*/jsxRuntime.jsxs(react.Fragment, {
554
+ children: [/*#__PURE__*/jsxRuntime.jsx(Block, {
555
+ filter: filter,
556
+ handleDelete: handleDelete,
557
+ setIsPaneOpen: setIsPaneOpen
558
+ }), (_filter$suffixCompone = filter.suffixComponent) === null || _filter$suffixCompone === void 0 ? void 0 : _filter$suffixCompone.call(filter), /*#__PURE__*/jsxRuntime.jsx("div", {
559
+ className: "neeto-filters-bar--separator"
560
+ })]
561
+ }, filter.key);
562
+ })]
563
+ })]
564
+ });
565
+ };
566
+
567
+ var Bar = function Bar(_ref) {
568
+ var entity = _ref.entity,
569
+ className = _ref.className,
570
+ _ref$columns = _ref.columns,
571
+ columns = _ref$columns === void 0 ? [] : _ref$columns,
572
+ segmentHelpPopoverProps = _ref.segmentHelpPopoverProps,
573
+ _ref$keyword = _ref.keyword,
574
+ keyword = _ref$keyword === void 0 ? {
575
+ node: "",
576
+ value: "",
577
+ setValue: neetoCist.noop
578
+ } : _ref$keyword,
579
+ _ref$setIsPaneOpen = _ref.setIsPaneOpen,
580
+ setIsPaneOpen = _ref$setIsPaneOpen === void 0 ? ramda.identity : _ref$setIsPaneOpen,
581
+ _ref$childrenKeys = _ref.childrenKeys,
582
+ childrenKeys = _ref$childrenKeys === void 0 ? [] : _ref$childrenKeys,
583
+ _ref$defaultSegmentNa = _ref.defaultSegmentName,
584
+ defaultSegmentName = _ref$defaultSegmentNa === void 0 ? i18next.t("neetoFilters.common.allResults") : _ref$defaultSegmentNa,
585
+ _ref$segmentsBaseUrl = _ref.segmentsBaseUrl,
586
+ segmentsBaseUrl = _ref$segmentsBaseUrl === void 0 ? window.location.pathname : _ref$segmentsBaseUrl,
587
+ customFilters = _ref.customFilters,
588
+ _ref$showSegmentName = _ref.showSegmentName,
589
+ showSegmentName = _ref$showSegmentName === void 0 ? true : _ref$showSegmentName;
590
+ var queryClient = reactQuery.useQueryClient();
591
+ var _useQueryParams = reactUtils.useQueryParams(),
592
+ segmentId = _useQueryParams.segmentId;
593
+ var segmentFormInitialRef = react.useRef(null);
594
+ var _useSegment = useSegment({
595
+ entity: entity,
596
+ keyword: keyword,
597
+ columns: columns,
598
+ childrenKeys: childrenKeys,
599
+ segmentsBaseUrl: segmentsBaseUrl
600
+ }),
601
+ isEdit = _useSegment.isEdit,
602
+ filters = _useSegment.filters,
603
+ handleSubmit = _useSegment.handleSubmit,
604
+ isSubmitting = _useSegment.isSubmitting,
605
+ keywordFilter = _useSegment.keywordFilter,
606
+ isSavePaneOpen = _useSegment.isSavePaneOpen,
607
+ nonHiddenFilters = _useSegment.nonHiddenFilters,
608
+ setIsSavePaneOpen = _useSegment.setIsSavePaneOpen,
609
+ handleApplyFilters = _useSegment.handleApplyFilters,
610
+ childrenFiltersApplied = _useSegment.childrenFiltersApplied;
611
+ var BarComponent = segmentId ? SegmentBar : FilterBar;
612
+ var cachedSegments = queryClient.getQueryData([useSegmentsApi.QUERY_KEYS.SEGMENTS_LIST, entity, ""]) || DEFAULT_SEGMENTS_CACHE;
613
+ var segment = neetoCist.findById(segmentId, cachedSegments.segments);
614
+ if (ramda.isEmpty(nonHiddenFilters) && !childrenFiltersApplied) return null;
615
+ return /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
616
+ children: [/*#__PURE__*/jsxRuntime.jsx("div", {
617
+ className: classnames("neeto-filters-bar", _defineProperty({}, className, className)),
618
+ children: /*#__PURE__*/jsxRuntime.jsx(BarComponent, {
619
+ childrenFiltersApplied: childrenFiltersApplied,
620
+ childrenKeys: childrenKeys,
621
+ entity: entity,
622
+ filters: filters,
623
+ handleApplyFilters: handleApplyFilters,
624
+ keywordFilter: keywordFilter,
625
+ nonHiddenFilters: nonHiddenFilters,
626
+ setIsPaneOpen: setIsPaneOpen,
627
+ setIsSavePaneOpen: setIsSavePaneOpen,
628
+ showSegmentName: showSegmentName
629
+ })
630
+ }), /*#__PURE__*/jsxRuntime.jsx(index.SegmentForm, {
631
+ childrenKeys: childrenKeys,
632
+ columns: columns,
633
+ customFilters: customFilters,
634
+ defaultSegmentName: defaultSegmentName,
635
+ filters: filters,
636
+ handleSubmit: handleSubmit,
637
+ isEdit: isEdit,
638
+ isSubmitting: isSubmitting,
639
+ keywordFilter: keywordFilter,
640
+ segmentFormInitialRef: segmentFormInitialRef,
641
+ segmentHelpPopoverProps: segmentHelpPopoverProps,
642
+ isOpen: neetoCist.isPresent(isSavePaneOpen.action),
643
+ initialValues: isEdit ? ramda.assoc("filters", [{
644
+ conditions: filters
645
+ }], segment) : {
646
+ name: "",
647
+ filters: [{
648
+ conditions: filters
649
+ }]
650
+ },
651
+ onClose: function onClose() {
652
+ return setIsSavePaneOpen({
653
+ action: undefined
654
+ });
655
+ }
656
+ })]
657
+ });
658
+ };
659
+
660
+ module.exports = Bar;
661
+ //# sourceMappingURL=Bar.js.map