@bigbinary/neeto-filters-frontend 4.0.1 → 4.1.1

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