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