@bigbinary/neeto-filters-frontend 3.2.4 → 3.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,53 +1,24 @@
1
- import React, { useState, useRef, useEffect, useTransition, useMemo } from 'react';
1
+ import React, { useState, useEffect, useMemo, useRef, useTransition } from 'react';
2
2
  import classnames from 'classnames';
3
3
  import i18next, { t as t$1 } from 'i18next';
4
- import { findBy, isNotEmpty, capitalize, removeBy, humanize, hyphenate, noop, toLabelAndValue, replaceBy, isPresent, existsBy, isNotPresent, filterBy } from '@bigbinary/neeto-cist';
5
- import { useMutationWithInvalidation, useQueryParams, useDebounce, withT } from '@bigbinary/neeto-commons-frontend/react-utils';
6
- import { buildUrl, getQueryParams, dateFormat } from '@bigbinary/neeto-commons-frontend/utils';
7
- import { Tooltip, Typography, Dropdown as Dropdown$2, Button, Pane as Pane$1, Alert, Select, DatePicker, TimePickerInput, Input as Input$1, Accordion, Spinner } from '@bigbinary/neetoui';
8
- import { groupBy, anyPass, isNil, isEmpty, any, concat, omit, mergeLeft, toLower, identity, mergeRight, toPairs, not, pluck, either, has, equals, pick, modify, prop, isNotNil, append, last, mergeDeepRight } from 'ramda';
4
+ import { findBy, isNotEmpty, capitalize, removeBy, toLabelAndValue, hyphenate, isNotPresent, noop, replaceBy, existsBy, _existsBy, isPresent, notEqualsDeep, humanize, findById, filterBy } from '@bigbinary/neeto-cist';
5
+ import { useDebounce, useQueryParams, useMutationWithInvalidation, withT } from '@bigbinary/neeto-commons-frontend/react-utils';
6
+ import { groupBy, anyPass, isNil, isEmpty, any, concat, omit, mergeLeft, toLower, identity, mergeRight, toPairs, pluck, either, not, has, equals, pick, last, modify, append, mergeDeepRight, prop, assoc, sortBy, project } from 'ramda';
7
+ import { useQuery, useQueryClient } from 'react-query';
8
+ import { Help, Delete as Delete$1, Plus, Close, Down } from '@bigbinary/neeto-icons';
9
+ import { Select, DatePicker, TimePickerInput, Input, Button, Pane as Pane$1, Typography, Accordion, Tooltip, Dropdown as Dropdown$2, Alert, Spinner } from '@bigbinary/neetoui';
10
+ import { Form, Input as Input$1, ActionBlock } from '@bigbinary/neetoui/formik';
9
11
  import { useTranslation, Trans } from 'react-i18next';
10
- import { useHistory, useLocation } from 'react-router-dom';
12
+ import { useHistory } from 'react-router-dom/cjs/react-router-dom.min';
13
+ import { buildUrl, getQueryParams, dateFormat, showThumbsUpToastr } from '@bigbinary/neeto-commons-frontend/utils';
14
+ import * as yup from 'yup';
15
+ import { useHistory as useHistory$1, useLocation } from 'react-router-dom';
11
16
  import useHotkeys from '@bigbinary/neeto-hotkeys';
12
- import { Help, Close, MenuHorizontal, Down, Settings } from '@bigbinary/neeto-icons';
13
- import { Form, Input, ActionBlock } from '@bigbinary/neetoui/formik';
14
- import { useQuery } from 'react-query';
15
17
  import axios from 'axios';
16
- import * as yup from 'yup';
17
18
  import Search from '@bigbinary/neeto-molecules/Search';
18
19
  import MenuBar from '@bigbinary/neeto-molecules/MenuBar';
19
- import { FormikInlineInput } from '@bigbinary/neeto-molecules/InlineInput';
20
-
21
- function _arrayLikeToArray(arr, len) {
22
- if (len == null || len > arr.length) len = arr.length;
23
- for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
24
- return arr2;
25
- }
26
-
27
- function _arrayWithoutHoles(arr) {
28
- if (Array.isArray(arr)) return _arrayLikeToArray(arr);
29
- }
30
-
31
- function _iterableToArray(iter) {
32
- if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
33
- }
34
-
35
- function _unsupportedIterableToArray(o, minLen) {
36
- if (!o) return;
37
- if (typeof o === "string") return _arrayLikeToArray(o, minLen);
38
- var n = Object.prototype.toString.call(o).slice(8, -1);
39
- if (n === "Object" && o.constructor) n = o.constructor.name;
40
- if (n === "Map" || n === "Set") return Array.from(o);
41
- if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
42
- }
43
-
44
- function _nonIterableSpread() {
45
- throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
46
- }
47
-
48
- function _toConsumableArray(arr) {
49
- return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
50
- }
20
+ import { DragDropContext, Droppable, Draggable } from '@hello-pangea/dnd';
21
+ import MoreDropdown from '@bigbinary/neeto-molecules/MoreDropdown';
51
22
 
52
23
  function _typeof(o) {
53
24
  "@babel/helpers - typeof";
@@ -90,6 +61,92 @@ function _defineProperty(obj, key, value) {
90
61
  return obj;
91
62
  }
92
63
 
64
+ function _arrayLikeToArray(arr, len) {
65
+ if (len == null || len > arr.length) len = arr.length;
66
+ for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
67
+ return arr2;
68
+ }
69
+
70
+ function _arrayWithoutHoles(arr) {
71
+ if (Array.isArray(arr)) return _arrayLikeToArray(arr);
72
+ }
73
+
74
+ function _iterableToArray(iter) {
75
+ if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
76
+ }
77
+
78
+ function _unsupportedIterableToArray(o, minLen) {
79
+ if (!o) return;
80
+ if (typeof o === "string") return _arrayLikeToArray(o, minLen);
81
+ var n = Object.prototype.toString.call(o).slice(8, -1);
82
+ if (n === "Object" && o.constructor) n = o.constructor.name;
83
+ if (n === "Map" || n === "Set") return Array.from(o);
84
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
85
+ }
86
+
87
+ function _nonIterableSpread() {
88
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
89
+ }
90
+
91
+ function _toConsumableArray(arr) {
92
+ return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
93
+ }
94
+
95
+ function _extends() {
96
+ _extends = Object.assign ? Object.assign.bind() : function (target) {
97
+ for (var i = 1; i < arguments.length; i++) {
98
+ var source = arguments[i];
99
+ for (var key in source) {
100
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
101
+ target[key] = source[key];
102
+ }
103
+ }
104
+ }
105
+ return target;
106
+ };
107
+ return _extends.apply(this, arguments);
108
+ }
109
+
110
+ function _arrayWithHoles(arr) {
111
+ if (Array.isArray(arr)) return arr;
112
+ }
113
+
114
+ function _iterableToArrayLimit(r, l) {
115
+ var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
116
+ if (null != t) {
117
+ var e,
118
+ n,
119
+ i,
120
+ u,
121
+ a = [],
122
+ f = !0,
123
+ o = !1;
124
+ try {
125
+ if (i = (t = t.call(r)).next, 0 === l) {
126
+ if (Object(t) !== t) return;
127
+ f = !1;
128
+ } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);
129
+ } catch (r) {
130
+ o = !0, n = r;
131
+ } finally {
132
+ try {
133
+ if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return;
134
+ } finally {
135
+ if (o) throw n;
136
+ }
137
+ }
138
+ return a;
139
+ }
140
+ }
141
+
142
+ function _nonIterableRest() {
143
+ throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
144
+ }
145
+
146
+ function _slicedToArray(arr, i) {
147
+ return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
148
+ }
149
+
93
150
  var SEGMENTS_BASE_URL = "/neeto_filters/segments";
94
151
  var DATE_OPTIONS = [{
95
152
  label: "Today",
@@ -172,21 +229,6 @@ var DATE_RULES = {
172
229
  var SEARCH_TERM_KEY = "search_term";
173
230
  var SEGMENT_ID_KEY = "segment_id";
174
231
 
175
- var SHORTCUTS = {
176
- closePane: {
177
- sequence: "escape",
178
- description: t$1("neetoFilters.shortcuts.closePane")
179
- },
180
- deleteBlock: {
181
- sequence: "backspace",
182
- description: t$1("neetoFilters.shortcuts.deleteBlock")
183
- },
184
- openFilterPane: {
185
- sequence: "enter",
186
- description: t$1("neetoFilters.shortcuts.openFilterPane")
187
- }
188
- };
189
-
190
232
  var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
191
233
 
192
234
  function getDefaultExportFromCjs (x) {
@@ -204,6 +246,44 @@ dayjs_min.exports;
204
246
  var dayjs_minExports = dayjs_min.exports;
205
247
  var dayjs = /*@__PURE__*/getDefaultExportFromCjs(dayjs_minExports);
206
248
 
249
+ var timezone$1 = {exports: {}};
250
+
251
+ timezone$1.exports;
252
+
253
+ (function (module, exports) {
254
+ !function(t,e){module.exports=e();}(commonjsGlobal,(function(){var t={year:0,month:1,day:2,hour:3,minute:4,second:5},e={};return function(n,i,o){var r,a=function(t,n,i){void 0===i&&(i={});var o=new Date(t),r=function(t,n){void 0===n&&(n={});var i=n.timeZoneName||"short",o=t+"|"+i,r=e[o];return r||(r=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:t,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",timeZoneName:i}),e[o]=r),r}(n,i);return r.formatToParts(o)},u=function(e,n){for(var i=a(e,n),r=[],u=0;u<i.length;u+=1){var f=i[u],s=f.type,m=f.value,c=t[s];c>=0&&(r[c]=parseInt(m,10));}var d=r[3],l=24===d?0:d,v=r[0]+"-"+r[1]+"-"+r[2]+" "+l+":"+r[4]+":"+r[5]+":000",h=+e;return (o.utc(v).valueOf()-(h-=h%1e3))/6e4},f=i.prototype;f.tz=function(t,e){void 0===t&&(t=r);var n=this.utcOffset(),i=this.toDate(),a=i.toLocaleString("en-US",{timeZone:t}),u=Math.round((i-new Date(a))/1e3/60),f=o(a).$set("millisecond",this.$ms).utcOffset(15*-Math.round(i.getTimezoneOffset()/15)-u,!0);if(e){var s=f.utcOffset();f=f.add(n-s,"minute");}return f.$x.$timezone=t,f},f.offsetName=function(t){var e=this.$x.$timezone||o.tz.guess(),n=a(this.valueOf(),e,{timeZoneName:t}).find((function(t){return "timezonename"===t.type.toLowerCase()}));return n&&n.value};var s=f.startOf;f.startOf=function(t,e){if(!this.$x||!this.$x.$timezone)return s.call(this,t,e);var n=o(this.format("YYYY-MM-DD HH:mm:ss:SSS"));return s.call(n,t,e).tz(this.$x.$timezone,!0)},o.tz=function(t,e,n){var i=n&&e,a=n||e||r,f=u(+o(),a);if("string"!=typeof t)return o(t).tz(a);var s=function(t,e,n){var i=t-60*e*1e3,o=u(i,n);if(e===o)return [i,e];var r=u(i-=60*(o-e)*1e3,n);return o===r?[i,o]:[t-60*Math.min(o,r)*1e3,Math.max(o,r)]}(o.utc(t,i).valueOf(),f,a),m=s[0],c=s[1],d=o(m).utcOffset(c);return d.$x.$timezone=a,d},o.tz.guess=function(){return Intl.DateTimeFormat().resolvedOptions().timeZone},o.tz.setDefault=function(t){r=t;};}}));
255
+ } (timezone$1, timezone$1.exports));
256
+
257
+ var timezoneExports = timezone$1.exports;
258
+ var timezone = /*@__PURE__*/getDefaultExportFromCjs(timezoneExports);
259
+
260
+ var utc$1 = {exports: {}};
261
+
262
+ utc$1.exports;
263
+
264
+ (function (module, exports) {
265
+ !function(t,i){module.exports=i();}(commonjsGlobal,(function(){var t="minute",i=/[+-]\d\d(?::?\d\d)?/g,e=/([+-]|\d\d)/g;return function(s,f,n){var u=f.prototype;n.utc=function(t){var i={date:t,utc:!0,args:arguments};return new f(i)},u.utc=function(i){var e=n(this.toDate(),{locale:this.$L,utc:!0});return i?e.add(this.utcOffset(),t):e},u.local=function(){return n(this.toDate(),{locale:this.$L,utc:!1})};var o=u.parse;u.parse=function(t){t.utc&&(this.$u=!0),this.$utils().u(t.$offset)||(this.$offset=t.$offset),o.call(this,t);};var r=u.init;u.init=function(){if(this.$u){var t=this.$d;this.$y=t.getUTCFullYear(),this.$M=t.getUTCMonth(),this.$D=t.getUTCDate(),this.$W=t.getUTCDay(),this.$H=t.getUTCHours(),this.$m=t.getUTCMinutes(),this.$s=t.getUTCSeconds(),this.$ms=t.getUTCMilliseconds();}else r.call(this);};var a=u.utcOffset;u.utcOffset=function(s,f){var n=this.$utils().u;if(n(s))return this.$u?0:n(this.$offset)?a.call(this):this.$offset;if("string"==typeof s&&(s=function(t){void 0===t&&(t="");var s=t.match(i);if(!s)return null;var f=(""+s[0]).match(e)||["-",0,0],n=f[0],u=60*+f[1]+ +f[2];return 0===u?0:"+"===n?u:-u}(s),null===s))return this;var u=Math.abs(s)<=16?60*s:s,o=this;if(f)return o.$offset=u,o.$u=0===s,o;if(0!==s){var r=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();(o=this.local().add(u+r,t)).$offset=u,o.$x.$localOffset=r;}else o=this.utc();return o};var h=u.format;u.format=function(t){var i=t||(this.$u?"YYYY-MM-DDTHH:mm:ss[Z]":"");return h.call(this,i)},u.valueOf=function(){var t=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||(new Date).getTimezoneOffset());return this.$d.valueOf()-6e4*t},u.isUTC=function(){return !!this.$u},u.toISOString=function(){return this.toDate().toISOString()},u.toString=function(){return this.toDate().toUTCString()};var l=u.toDate;u.toDate=function(t){return "s"===t&&this.$offset?n(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate():l.call(this)};var c=u.diff;u.diff=function(t,i,e){if(t&&this.$u===t.$u)return c.call(this,t,i,e);var s=this.local(),f=n(t).local();return c.call(s,f,i,e)};}}));
266
+ } (utc$1, utc$1.exports));
267
+
268
+ var utcExports = utc$1.exports;
269
+ var utc = /*@__PURE__*/getDefaultExportFromCjs(utcExports);
270
+
271
+ var weekday$1 = {exports: {}};
272
+
273
+ weekday$1.exports;
274
+
275
+ (function (module, exports) {
276
+ !function(e,t){module.exports=t();}(commonjsGlobal,(function(){return function(e,t){t.prototype.weekday=function(e){var t=this.$locale().weekStart||0,i=this.$W,n=(i<t?i+7:i)-t;return this.$utils().u(e)?n:this.subtract(n,"day").add(e,"day")};}}));
277
+ } (weekday$1, weekday$1.exports));
278
+
279
+ var weekdayExports = weekday$1.exports;
280
+ var weekday = /*@__PURE__*/getDefaultExportFromCjs(weekdayExports);
281
+
282
+ dayjs.extend(utc);
283
+ dayjs.extend(timezone);
284
+ dayjs.extend(weekday);
285
+ dayjs.Ls.en.weekStart = 1;
286
+
207
287
  var NUMBER_RULES = [{
208
288
  label: t$1("neetoFilters.rules.is"),
209
289
  value: "is"
@@ -242,6 +322,26 @@ var TEXT_RULES = [{
242
322
  label: t$1("neetoFilters.rules.doesNotEndWith"),
243
323
  value: "does_not_end_with"
244
324
  }];
325
+ var MULTI_DROPDOWN_RULES = [{
326
+ label: t$1("neetoFilters.rules.in"),
327
+ value: "in"
328
+ }, {
329
+ label: t$1("neetoFilters.rules.notIn"),
330
+ value: "not_in"
331
+ }, {
332
+ label: t$1("neetoFilters.rules.isEmpty"),
333
+ value: "is_unknown"
334
+ }];
335
+ var SINGLE_DROPDOWN_RULES = [{
336
+ label: t$1("neetoFilters.rules.is"),
337
+ value: "is"
338
+ }, {
339
+ label: t$1("neetoFilters.rules.isNot"),
340
+ value: "is_not"
341
+ }, {
342
+ label: t$1("neetoFilters.rules.isEmpty"),
343
+ value: "is_unknown"
344
+ }];
245
345
  var DEFAULT_BOOLEAN_OPTIONS = [{
246
346
  label: t$1("neetoFilters.common.yes"),
247
347
  value: "true"
@@ -256,94 +356,16 @@ var DEFAULT_HELP_ICON_PROPS = {
256
356
  }
257
357
  };
258
358
 
259
- function _arrayWithHoles(arr) {
260
- if (Array.isArray(arr)) return arr;
261
- }
262
-
263
- function _iterableToArrayLimit(r, l) {
264
- var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
265
- if (null != t) {
266
- var e,
267
- n,
268
- i,
269
- u,
270
- a = [],
271
- f = !0,
272
- o = !1;
273
- try {
274
- if (i = (t = t.call(r)).next, 0 === l) {
275
- if (Object(t) !== t) return;
276
- f = !1;
277
- } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);
278
- } catch (r) {
279
- o = !0, n = r;
280
- } finally {
281
- try {
282
- if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return;
283
- } finally {
284
- if (o) throw n;
285
- }
286
- }
287
- return a;
288
- }
289
- }
290
-
291
- function _nonIterableRest() {
292
- throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
293
- }
294
-
295
- function _slicedToArray(arr, i) {
296
- return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
297
- }
298
-
299
- var timezone$1 = {exports: {}};
300
-
301
- timezone$1.exports;
302
-
303
- (function (module, exports) {
304
- !function(t,e){module.exports=e();}(commonjsGlobal,(function(){var t={year:0,month:1,day:2,hour:3,minute:4,second:5},e={};return function(n,i,o){var r,a=function(t,n,i){void 0===i&&(i={});var o=new Date(t),r=function(t,n){void 0===n&&(n={});var i=n.timeZoneName||"short",o=t+"|"+i,r=e[o];return r||(r=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:t,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",timeZoneName:i}),e[o]=r),r}(n,i);return r.formatToParts(o)},u=function(e,n){for(var i=a(e,n),r=[],u=0;u<i.length;u+=1){var f=i[u],s=f.type,m=f.value,c=t[s];c>=0&&(r[c]=parseInt(m,10));}var d=r[3],l=24===d?0:d,v=r[0]+"-"+r[1]+"-"+r[2]+" "+l+":"+r[4]+":"+r[5]+":000",h=+e;return (o.utc(v).valueOf()-(h-=h%1e3))/6e4},f=i.prototype;f.tz=function(t,e){void 0===t&&(t=r);var n=this.utcOffset(),i=this.toDate(),a=i.toLocaleString("en-US",{timeZone:t}),u=Math.round((i-new Date(a))/1e3/60),f=o(a).$set("millisecond",this.$ms).utcOffset(15*-Math.round(i.getTimezoneOffset()/15)-u,!0);if(e){var s=f.utcOffset();f=f.add(n-s,"minute");}return f.$x.$timezone=t,f},f.offsetName=function(t){var e=this.$x.$timezone||o.tz.guess(),n=a(this.valueOf(),e,{timeZoneName:t}).find((function(t){return "timezonename"===t.type.toLowerCase()}));return n&&n.value};var s=f.startOf;f.startOf=function(t,e){if(!this.$x||!this.$x.$timezone)return s.call(this,t,e);var n=o(this.format("YYYY-MM-DD HH:mm:ss:SSS"));return s.call(n,t,e).tz(this.$x.$timezone,!0)},o.tz=function(t,e,n){var i=n&&e,a=n||e||r,f=u(+o(),a);if("string"!=typeof t)return o(t).tz(a);var s=function(t,e,n){var i=t-60*e*1e3,o=u(i,n);if(e===o)return [i,e];var r=u(i-=60*(o-e)*1e3,n);return o===r?[i,o]:[t-60*Math.min(o,r)*1e3,Math.max(o,r)]}(o.utc(t,i).valueOf(),f,a),m=s[0],c=s[1],d=o(m).utcOffset(c);return d.$x.$timezone=a,d},o.tz.guess=function(){return Intl.DateTimeFormat().resolvedOptions().timeZone},o.tz.setDefault=function(t){r=t;};}}));
305
- } (timezone$1, timezone$1.exports));
306
-
307
- var timezoneExports = timezone$1.exports;
308
- var timezone = /*@__PURE__*/getDefaultExportFromCjs(timezoneExports);
309
-
310
- var utc$1 = {exports: {}};
311
-
312
- utc$1.exports;
313
-
314
- (function (module, exports) {
315
- !function(t,i){module.exports=i();}(commonjsGlobal,(function(){var t="minute",i=/[+-]\d\d(?::?\d\d)?/g,e=/([+-]|\d\d)/g;return function(s,f,n){var u=f.prototype;n.utc=function(t){var i={date:t,utc:!0,args:arguments};return new f(i)},u.utc=function(i){var e=n(this.toDate(),{locale:this.$L,utc:!0});return i?e.add(this.utcOffset(),t):e},u.local=function(){return n(this.toDate(),{locale:this.$L,utc:!1})};var o=u.parse;u.parse=function(t){t.utc&&(this.$u=!0),this.$utils().u(t.$offset)||(this.$offset=t.$offset),o.call(this,t);};var r=u.init;u.init=function(){if(this.$u){var t=this.$d;this.$y=t.getUTCFullYear(),this.$M=t.getUTCMonth(),this.$D=t.getUTCDate(),this.$W=t.getUTCDay(),this.$H=t.getUTCHours(),this.$m=t.getUTCMinutes(),this.$s=t.getUTCSeconds(),this.$ms=t.getUTCMilliseconds();}else r.call(this);};var a=u.utcOffset;u.utcOffset=function(s,f){var n=this.$utils().u;if(n(s))return this.$u?0:n(this.$offset)?a.call(this):this.$offset;if("string"==typeof s&&(s=function(t){void 0===t&&(t="");var s=t.match(i);if(!s)return null;var f=(""+s[0]).match(e)||["-",0,0],n=f[0],u=60*+f[1]+ +f[2];return 0===u?0:"+"===n?u:-u}(s),null===s))return this;var u=Math.abs(s)<=16?60*s:s,o=this;if(f)return o.$offset=u,o.$u=0===s,o;if(0!==s){var r=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();(o=this.local().add(u+r,t)).$offset=u,o.$x.$localOffset=r;}else o=this.utc();return o};var h=u.format;u.format=function(t){var i=t||(this.$u?"YYYY-MM-DDTHH:mm:ss[Z]":"");return h.call(this,i)},u.valueOf=function(){var t=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||(new Date).getTimezoneOffset());return this.$d.valueOf()-6e4*t},u.isUTC=function(){return !!this.$u},u.toISOString=function(){return this.toDate().toISOString()},u.toString=function(){return this.toDate().toUTCString()};var l=u.toDate;u.toDate=function(t){return "s"===t&&this.$offset?n(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate():l.call(this)};var c=u.diff;u.diff=function(t,i,e){if(t&&this.$u===t.$u)return c.call(this,t,i,e);var s=this.local(),f=n(t).local();return c.call(s,f,i,e)};}}));
316
- } (utc$1, utc$1.exports));
317
-
318
- var utcExports = utc$1.exports;
319
- var utc = /*@__PURE__*/getDefaultExportFromCjs(utcExports);
320
-
321
- var weekday$1 = {exports: {}};
322
-
323
- weekday$1.exports;
324
-
325
- (function (module, exports) {
326
- !function(e,t){module.exports=t();}(commonjsGlobal,(function(){return function(e,t){t.prototype.weekday=function(e){var t=this.$locale().weekStart||0,i=this.$W,n=(i<t?i+7:i)-t;return this.$utils().u(e)?n:this.subtract(n,"day").add(e,"day")};}}));
327
- } (weekday$1, weekday$1.exports));
328
-
329
- var weekdayExports = weekday$1.exports;
330
- var weekday = /*@__PURE__*/getDefaultExportFromCjs(weekdayExports);
331
-
332
- dayjs.extend(utc);
333
- dayjs.extend(timezone);
334
- dayjs.extend(weekday);
335
- dayjs.Ls.en.weekStart = 1;
336
-
337
- function ownKeys$4(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; }
338
- function _objectSpread$4(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$4(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$4(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
339
- var groupByGroup = groupBy(function (_ref) {
340
- var group = _ref.group;
341
- return group || "individual";
342
- });
343
- var standardizeColumnType = function standardizeColumnType(kind) {
344
- // neeto-fields-nano supports `monetary` and `number` as type of fields, which will be acting as `decimal` in action.
345
- if (["custom.monetary", "custom.number"].includes(kind)) {
346
- return "custom.decimal";
359
+ function ownKeys$5(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; }
360
+ function _objectSpread$5(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$5(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$5(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
361
+ var groupByGroup = groupBy(function (_ref) {
362
+ var group = _ref.group;
363
+ return group || "individual";
364
+ });
365
+ var standardizeColumnType = function standardizeColumnType(kind) {
366
+ // neeto-fields-nano supports `monetary` and `number` as type of fields, which will be acting as `decimal` in action.
367
+ if (["custom.monetary", "custom.number"].includes(kind)) {
368
+ return "custom.decimal";
347
369
  }
348
370
  return kind;
349
371
  };
@@ -373,6 +395,9 @@ var isTime = function isTime(type) {
373
395
  var isMulti = function isMulti(type) {
374
396
  return type === "multi_option" || type === "custom.multi_option";
375
397
  };
398
+ var isSingle = function isSingle(type) {
399
+ return type === "single_option" || type === "custom.single_option";
400
+ };
376
401
  var isText = function isText(type) {
377
402
  return type === "text" || type === "custom.text";
378
403
  };
@@ -465,7 +490,7 @@ var buildUpdatedFilter = function buildUpdatedFilter(_ref8) {
465
490
  if (isMulti(defaultType)) {
466
491
  return mergeLeft(filter, {
467
492
  value: pluck("value", option),
468
- rule: "in"
493
+ rule: rule
469
494
  });
470
495
  } else if (isDate(defaultType)) {
471
496
  return mergeLeft(filter, buildDateValue(option));
@@ -488,6 +513,11 @@ var buildUpdatedFilter = function buildUpdatedFilter(_ref8) {
488
513
  });
489
514
  } else if (isTime(defaultType)) {
490
515
  return mergeLeft(filter, buildTimeValue(option));
516
+ } else if (isSingle(defaultType)) {
517
+ return mergeLeft(filter, {
518
+ value: option.value,
519
+ rule: rule
520
+ });
491
521
  }
492
522
  return mergeLeft(filter, {
493
523
  value: option.value,
@@ -518,40 +548,53 @@ var buildFiltersFromSearchParams = function buildFiltersFromSearchParams(columns
518
548
  value: value
519
549
  }, column);
520
550
  } else if (isMulti(defaultType)) {
521
- return mergeLeft({
522
- rule: "in",
523
- value: value.split("|")
524
- }, column);
525
- } else if (isDigit(defaultType) || isText(defaultType)) {
526
551
  var _value$split = value.split("+rule-"),
527
552
  _value$split2 = _slicedToArray(_value$split, 2),
528
553
  filterValue = _value$split2[0],
529
554
  rule = _value$split2[1];
530
555
  return mergeLeft({
531
556
  rule: rule,
532
- value: filterValue
533
- }, column);
534
- } else if (isTime(defaultType) && isCustomTimeRange(value)) {
535
- return mergeLeft({
536
- value: value
557
+ value: filterValue.split("|")
537
558
  }, column);
538
- } else if (isSingleDate(defaultType)) {
559
+ } else if (isSingle(defaultType)) {
539
560
  var _value$split3 = value.split("+rule-"),
540
561
  _value$split4 = _slicedToArray(_value$split3, 2),
541
562
  _filterValue = _value$split4[0],
542
563
  _rule = _value$split4[1];
543
564
  return mergeLeft({
544
565
  rule: _rule,
545
- value: _rule === "between" ? _filterValue.split(",") : _filterValue
566
+ value: _filterValue
546
567
  }, column);
547
- } else if (isSingleTime(defaultType)) {
568
+ } else if (isDigit(defaultType) || isText(defaultType)) {
548
569
  var _value$split5 = value.split("+rule-"),
549
570
  _value$split6 = _slicedToArray(_value$split5, 2),
550
571
  _filterValue2 = _value$split6[0],
551
572
  _rule2 = _value$split6[1];
552
573
  return mergeLeft({
553
574
  rule: _rule2,
554
- value: _rule2 === "between" ? _filterValue2.split(",") : _filterValue2
575
+ value: _filterValue2
576
+ }, column);
577
+ } else if (isTime(defaultType) && isCustomTimeRange(value)) {
578
+ return mergeLeft({
579
+ value: value
580
+ }, column);
581
+ } else if (isSingleDate(defaultType)) {
582
+ var _value$split7 = value.split("+rule-"),
583
+ _value$split8 = _slicedToArray(_value$split7, 2),
584
+ _filterValue3 = _value$split8[0],
585
+ _rule3 = _value$split8[1];
586
+ return mergeLeft({
587
+ rule: _rule3,
588
+ value: _rule3 === "between" ? _filterValue3.split(",") : _filterValue3
589
+ }, column);
590
+ } else if (isSingleTime(defaultType)) {
591
+ var _value$split9 = value.split("+rule-"),
592
+ _value$split10 = _slicedToArray(_value$split9, 2),
593
+ _filterValue4 = _value$split10[0],
594
+ _rule4 = _value$split10[1];
595
+ return mergeLeft({
596
+ rule: _rule4,
597
+ value: _rule4 === "between" ? _filterValue4.split(",") : _filterValue4
555
598
  }, column);
556
599
  } else if (isBoolean(defaultType)) {
557
600
  return mergeLeft({
@@ -634,7 +677,7 @@ var buildDatePayload = function buildDatePayload(value) {
634
677
  var buildSingleDatePayload = function buildSingleDatePayload(filter) {
635
678
  var value = filter.value;
636
679
  var filterValue = Array.isArray(value) ? value.join(",") : value;
637
- return _objectSpread$4(_objectSpread$4({}, filter), {}, {
680
+ return _objectSpread$5(_objectSpread$5({}, filter), {}, {
638
681
  value: filterValue,
639
682
  type: "date"
640
683
  });
@@ -642,7 +685,7 @@ var buildSingleDatePayload = function buildSingleDatePayload(filter) {
642
685
  var buildSingleTimePayload = function buildSingleTimePayload(filter) {
643
686
  var value = filter.value;
644
687
  var filterValue = Array.isArray(value) ? value.join(",") : value;
645
- return _objectSpread$4(_objectSpread$4({}, filter), {}, {
688
+ return _objectSpread$5(_objectSpread$5({}, filter), {}, {
646
689
  value: filterValue,
647
690
  type: "time"
648
691
  });
@@ -814,7 +857,9 @@ var createUrlParamString = function createUrlParamString(_ref15) {
814
857
  } else if (isSingleDate(defaultType) || isSingleTime(defaultType)) {
815
858
  return value && "".concat(value, "+rule-").concat(rule) || value;
816
859
  } else if (isMulti(defaultType)) {
817
- return value.join("|");
860
+ return "".concat(value.join("|"), "+rule-").concat(rule);
861
+ } else if (isSingle(defaultType)) {
862
+ return "".concat(value, "+rule-").concat(rule);
818
863
  } else if (isBoolean(defaultType)) {
819
864
  return getLabelFromBool({
820
865
  value: value,
@@ -910,7 +955,7 @@ var buildFilterColumnsFromFields = function buildFilterColumnsFromFields(_ref22)
910
955
  var id = field.id,
911
956
  name = field.name,
912
957
  kind = field.kind;
913
- var column = _objectSpread$4({
958
+ var column = _objectSpread$5({
914
959
  key: toLower(name),
915
960
  node: "".concat(name, ":").concat(id),
916
961
  label: capitalize(name),
@@ -934,906 +979,704 @@ var buildFilterColumnsFromFields = function buildFilterColumnsFromFields(_ref22)
934
979
  };
935
980
  var getColumnsWithStandardizedType = function getColumnsWithStandardizedType(columns) {
936
981
  return columns.map(function (column) {
937
- return _objectSpread$4(_objectSpread$4({}, column), {}, {
982
+ return _objectSpread$5(_objectSpread$5({}, column), {}, {
938
983
  type: standardizeColumnType(column.type)
939
984
  });
940
985
  });
941
986
  };
942
- var isNilOrEmpty = function isNilOrEmpty(param) {
943
- return isNil(param) || isEmpty(param);
944
- };
945
987
  var isKeywordFilterPresent = function isKeywordFilterPresent(keyworFilter) {
946
988
  return not(isEmpty(keyworFilter.node));
947
989
  };
990
+ var isNilOrEmpty = function isNilOrEmpty(param) {
991
+ return isNil(param) || isEmpty(param);
992
+ };
948
993
 
949
- var buildCustomDateValue = function buildCustomDateValue(value) {
950
- var isBeforeOrAfter = Math.abs(dayjs(value[1]).diff(dayjs(value[0]), "year")) >= 90;
951
- if (isBeforeOrAfter) {
952
- var currentMoment = dayjs();
953
- var diffWithStart = Math.abs(currentMoment.diff(dayjs(value[0]), "year"));
954
- var diffWithEnd = Math.abs(currentMoment.diff(dayjs(value[1]), "year"));
955
- return diffWithStart < diffWithEnd ? "after-".concat(dateFormat.date(dayjs(value[0]).subtract(1, "day"))) : "before-".concat(dateFormat.date(dayjs(value[1]).add(1, "day")));
994
+ var buildDropdownValue = function buildDropdownValue(_ref) {
995
+ var defaultType = _ref.defaultType,
996
+ filter = _ref.filter,
997
+ options = _ref.options;
998
+ if (!filter) return null;
999
+ if (isMulti(defaultType)) {
1000
+ return options.filter(function (_ref2) {
1001
+ var value = _ref2.value;
1002
+ return filter.value.includes(value);
1003
+ });
956
1004
  }
957
- return value.map(dateFormat.date).join(" - ");
1005
+ return findBy({
1006
+ value: filter.value
1007
+ }, options);
958
1008
  };
959
- var buildFilterValue = function buildFilterValue(filter) {
1009
+ var buildSingleTimeValue = function buildSingleTimeValue(filter) {
960
1010
  var _findBy2;
961
- var _filter$defaultType = filter.defaultType,
962
- defaultType = _filter$defaultType === void 0 ? filter.type : _filter$defaultType,
963
- value = filter.value,
964
- rule = filter.rule,
965
- _filter$values = filter.values,
966
- initialValues = _filter$values === void 0 ? [] : _filter$values;
967
- var values = initialValues.map(modify("value", function (value) {
968
- return value.toString();
1011
+ if (!filter) return null;
1012
+ return (_findBy2 = findBy({
1013
+ value: filter.value
1014
+ }, TIME_OPTIONS)) !== null && _findBy2 !== void 0 ? _findBy2 : last(TIME_OPTIONS);
1015
+ };
1016
+ var getOtherProps = function getOtherProps(props) {
1017
+ return omit(["key", "node", "label", "type", "values", "model", "showRuleSelector"], props);
1018
+ };
1019
+ var buildDropdownOptions = function buildDropdownOptions(_ref3) {
1020
+ var defaultType = _ref3.defaultType,
1021
+ filter = _ref3.filter,
1022
+ options = _ref3.options;
1023
+ options = options.map(modify("value", function (value) {
1024
+ return value === null || value === void 0 ? void 0 : value.toString();
969
1025
  }));
970
- if (isDate(defaultType) && isCustomDateRange(value)) {
971
- return buildCustomDateValue(value);
972
- } else if (isTime(defaultType) && isCustomTimeRange(value)) {
973
- return value.map(dateFormat.time).join(" - ");
974
- } else if (isDate(defaultType) || isTime(defaultType)) {
975
- return humanize(value);
976
- } else if (isMulti(defaultType)) {
977
- return value.map(function (value) {
978
- var _findBy;
979
- return ((_findBy = findBy({
1026
+ if (!filter) return options;
1027
+ if (isMulti(defaultType)) {
1028
+ var selectedOptions = filter.value.map(function (value) {
1029
+ return findBy({
980
1030
  value: value
981
- }, values)) === null || _findBy === void 0 ? void 0 : _findBy.label) || value;
982
- }).join(", ");
983
- } else if (isSingleDate(defaultType)) {
984
- return rule === "between" ? value.map(dateFormat.date).join(" - ") : dateFormat.date(value);
985
- } else if (isSingleTime(defaultType)) {
986
- return rule === "between" ? value.map(dateFormat.time).join(" - ") : dateFormat.time(value);
987
- } else if (isBoolean(defaultType)) {
988
- return getLabelFromBool({
989
- value: value,
990
- values: values
1031
+ }, options) || toLabelAndValue(value);
991
1032
  });
1033
+ var nonSelectedOptions = options.filter(function (option) {
1034
+ return !filter.value.includes(option.value);
1035
+ });
1036
+ return concat(selectedOptions, nonSelectedOptions);
992
1037
  }
993
- return ((_findBy2 = findBy({
994
- value: value
995
- }, values)) === null || _findBy2 === void 0 ? void 0 : _findBy2.label) || value;
1038
+ if (!findBy({
1039
+ value: filter.value
1040
+ }, options)) {
1041
+ return append(toLabelAndValue(filter.value), options);
1042
+ }
1043
+ return options;
996
1044
  };
997
- var buildRuleValue = function buildRuleValue(_ref) {
998
- var rule = _ref.rule,
999
- defaultType = _ref.defaultType;
1000
- if (isText(defaultType)) {
1001
- return findBy({
1002
- value: rule
1003
- }, TEXT_RULES).label;
1004
- } else if (isDigit(defaultType)) {
1005
- return findBy({
1006
- value: rule
1007
- }, NUMBER_RULES).label;
1008
- } else if (isSingleDate(defaultType)) {
1009
- return findBy({
1010
- value: rule
1011
- }, SINGLE_DATE_OPTIONS).label;
1012
- } else if (isSingleTime(defaultType)) {
1013
- return findBy({
1014
- value: rule
1015
- }, SINGLE_TIME_OPTIONS).label;
1045
+ var initializeDateRule = function initializeDateRule(filter) {
1046
+ return filter ? findBy({
1047
+ value: filter === null || filter === void 0 ? void 0 : filter.value
1048
+ }, DATE_OPTIONS) || findDateOption(filter, DATE_OPTIONS) : {};
1049
+ };
1050
+ var getDateValue = function getDateValue(value, rule) {
1051
+ if (isEmpty(value) || isNil(value)) {
1052
+ return null;
1016
1053
  }
1017
- return "";
1054
+ if (rule.value === "custom-date-range") {
1055
+ return value;
1056
+ }
1057
+ return rule.value === "before" ? dayjs(value[1]).add(1, "day") : dayjs(value[0]).subtract(1, "day");
1018
1058
  };
1019
- var hasOnlyKeywordFilter = function hasOnlyKeywordFilter(filters) {
1020
- return filters.length === 1 && filters[0].key === SEARCH_TERM_KEY;
1059
+ var findDateOption = function findDateOption(filter, options) {
1060
+ var value = filter.value;
1061
+ var isBeforeOrAfter = dayjs(value[1]).diff(dayjs(value[0]), "year") >= 90;
1062
+ if (not(isBeforeOrAfter)) {
1063
+ return last(options);
1064
+ }
1065
+ var currentMoment = dayjs();
1066
+ var diffWithStart = Math.abs(currentMoment.diff(dayjs(value[0]), "year"));
1067
+ var diffWithEnd = Math.abs(currentMoment.diff(dayjs(value[1]), "year"));
1068
+ return diffWithStart < diffWithEnd ? findBy({
1069
+ value: "after"
1070
+ }, options) : findBy({
1071
+ value: "before"
1072
+ }, options);
1073
+ };
1074
+ var buildDateValues = function buildDateValues(dates, selectedRule) {
1075
+ if (selectedRule.value === "after") {
1076
+ return [dates.add(1, "day"), dates.add(100, "year")];
1077
+ } else if (selectedRule.value === "before") {
1078
+ return [dates.subtract(100, "year"), dates.subtract(1, "day")];
1079
+ }
1080
+ return dates;
1081
+ };
1082
+ var buildHelpIconProps = function buildHelpIconProps(helpIconProps) {
1083
+ return mergeDeepRight(DEFAULT_HELP_ICON_PROPS, helpIconProps);
1084
+ };
1085
+ var hasInvalidTimes = function hasInvalidTimes(times) {
1086
+ if (Array.isArray(times)) {
1087
+ return times.some(function (time) {
1088
+ return time.isValid();
1089
+ }) === false;
1090
+ }
1091
+ return !times.isValid();
1092
+ };
1093
+ var areCustomTimeRangeValuesNotValid = function areCustomTimeRangeValuesNotValid(times) {
1094
+ return !times.every(function (time) {
1095
+ return time.isValid();
1096
+ });
1021
1097
  };
1022
1098
 
1023
- var Block = function Block(_ref) {
1024
- var filter = _ref.filter,
1025
- handleDelete = _ref.handleDelete,
1026
- setIsPaneOpen = _ref.setIsPaneOpen;
1027
- var key = filter.key,
1028
- _filter$defaultType = filter.defaultType,
1029
- defaultType = _filter$defaultType === void 0 ? filter.type : _filter$defaultType,
1030
- label = filter.label,
1031
- rule = filter.rule,
1032
- defaultValue = filter.defaultValue;
1033
- var filterValue = buildFilterValue(filter);
1034
- var ruleContent = buildRuleValue({
1035
- rule: rule,
1036
- defaultType: defaultType
1099
+ // eslint-disable-next-line @bigbinary/neeto/use-standard-date-time-formats
1100
+ var formatSingleTime = function formatSingleTime(time) {
1101
+ return dayjs(time).format("HH:mm:ss");
1102
+ };
1103
+ var formatTime = function formatTime(value, timePickerType) {
1104
+ if (isNilOrEmpty(value)) return null;
1105
+ if (timePickerType === "range") {
1106
+ return value.map(formatSingleTime);
1107
+ }
1108
+ return formatSingleTime(value);
1109
+ };
1110
+ var isRuleEmpty = function isRuleEmpty(rule) {
1111
+ return equals(rule, "is_unknown");
1112
+ };
1113
+
1114
+ var Boolean = function Boolean(_ref) {
1115
+ var column = _ref.column,
1116
+ filter = _ref.filter,
1117
+ handleApplyFilter = _ref.handleApplyFilter,
1118
+ autoFocus = _ref.autoFocus;
1119
+ var key = column.key,
1120
+ _column$defaultType = column.defaultType,
1121
+ defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
1122
+ label = column.label,
1123
+ values = column.values,
1124
+ _column$helpIconProps = column.helpIconProps,
1125
+ helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
1126
+ var options = isNil(values) || isEmpty(values) ? DEFAULT_BOOLEAN_OPTIONS : values;
1127
+ var otherProps = getOtherProps(column);
1128
+ var value = buildDropdownValue({
1129
+ defaultType: defaultType,
1130
+ filter: filter,
1131
+ options: options
1037
1132
  });
1038
- var blockLength = label.length + ruleContent.length + filterValue.length;
1039
- var toolTipDisabled = blockLength <= 50;
1040
- var blockContent = !toolTipDisabled ? "".concat(filterValue.slice(0, 50 - blockLength), "...") : filterValue;
1041
- var deleteBlockHotKeyRef = useHotkeys(SHORTCUTS.deleteBlock.sequence, function () {
1042
- return handleDelete(key);
1043
- }, {
1044
- mode: "scoped"
1045
- });
1046
- var openFilterPaneHotKeyRef = useHotkeys(SHORTCUTS.openFilterPane.sequence, function () {
1047
- return setIsPaneOpen(key);
1048
- }, {
1049
- mode: "scoped"
1050
- });
1051
- return /*#__PURE__*/React.createElement(Tooltip, {
1052
- content: filterValue,
1053
- disabled: toolTipDisabled,
1054
- position: "bottom",
1055
- theme: "light"
1056
- }, /*#__PURE__*/React.createElement("div", {
1057
- className: "neeto-filters-bar__block",
1058
- "data-cy": "neeto-filters-".concat(hyphenate(key), "-block"),
1059
- tabIndex: 0,
1060
- ref: function ref(node) {
1061
- deleteBlockHotKeyRef.current = node;
1062
- openFilterPaneHotKeyRef.current = node;
1063
- },
1064
- onClick: function onClick() {
1065
- return setIsPaneOpen(key);
1133
+ var _useTranslation = useTranslation(),
1134
+ t = _useTranslation.t;
1135
+ var handleChange = function handleChange(option) {
1136
+ if (isEmpty(option) || isNil(option)) {
1137
+ handleApplyFilter({
1138
+ _delete: true
1139
+ });
1140
+ return;
1066
1141
  }
1067
- }, /*#__PURE__*/React.createElement(Typography, {
1068
- style: "body2"
1069
- }, label, ":"), /*#__PURE__*/React.createElement(Typography, {
1070
- className: "neeto-ui-text-gray-600",
1071
- style: "body2"
1072
- }, ruleContent), /*#__PURE__*/React.createElement(Typography, {
1073
- style: "body2"
1074
- }, blockContent), !defaultValue && /*#__PURE__*/React.createElement("div", {
1075
- className: "neeto-filters-bar__block-close"
1076
- }, /*#__PURE__*/React.createElement(Close, {
1077
- "data-cy": "neeto-filters-".concat(hyphenate(key), "-block-close-btn"),
1078
- size: 16,
1079
- strokeWidth: 2,
1080
- onClick: function onClick(event) {
1081
- event.stopPropagation();
1082
- handleDelete(key);
1142
+ var updatedFilter = buildUpdatedFilter({
1143
+ column: column,
1144
+ defaultType: defaultType,
1145
+ option: option
1146
+ });
1147
+ handleApplyFilter(updatedFilter);
1148
+ };
1149
+ return /*#__PURE__*/React.createElement("div", {
1150
+ className: "neeto-filters-pane-filter__item-wrapper"
1151
+ }, /*#__PURE__*/React.createElement(Select, _extends({
1152
+ autoFocus: autoFocus,
1153
+ label: label,
1154
+ options: options,
1155
+ value: value,
1156
+ isClearable: true
1157
+ }, isNotEmpty(helpIconProps) && {
1158
+ labelProps: {
1159
+ helpIconProps: buildHelpIconProps(helpIconProps)
1083
1160
  }
1084
- }))));
1161
+ }, {
1162
+ "data-cy": "neeto-filters-".concat(hyphenate(key), "-filter"),
1163
+ strategy: "fixed",
1164
+ placeholder: t("neetoFilters.messages.selectOption", {
1165
+ resource: label
1166
+ }),
1167
+ onChange: handleChange
1168
+ }, otherProps)));
1085
1169
  };
1170
+ var Boolean$1 = /*#__PURE__*/React.memo(Boolean);
1086
1171
 
1087
- var ChildBlock = function ChildBlock(_ref) {
1088
- var childKey = _ref.childKey,
1089
- setIsPaneOpen = _ref.setIsPaneOpen,
1090
- handleDelete = _ref.handleDelete;
1091
- var deleteBlockHotKeyRef = useHotkeys(SHORTCUTS.deleteBlock.sequence, function () {
1092
- return handleDelete(childKey);
1093
- }, {
1094
- mode: "scoped"
1095
- });
1096
- var openFilterPaneHotKeyRef = useHotkeys(SHORTCUTS.openFilterPane.sequence, function () {
1097
- return setIsPaneOpen(childKey);
1098
- }, {
1099
- mode: "scoped"
1100
- });
1101
- return /*#__PURE__*/React.createElement("div", {
1102
- className: "neeto-filters-bar__block",
1103
- "data-cy": "neeto-filters-".concat(hyphenate(childKey), "-block"),
1104
- tabIndex: 0,
1105
- ref: function ref(node) {
1106
- deleteBlockHotKeyRef.current = node;
1107
- openFilterPaneHotKeyRef.current = node;
1108
- },
1109
- onClick: function onClick() {
1110
- return setIsPaneOpen(childKey);
1172
+ var Datetime = function Datetime(_ref) {
1173
+ var column = _ref.column,
1174
+ filter = _ref.filter,
1175
+ handleApplyFilter = _ref.handleApplyFilter,
1176
+ autoFocus = _ref.autoFocus;
1177
+ var _useState = useState(initializeDateRule(filter)),
1178
+ _useState2 = _slicedToArray(_useState, 2),
1179
+ selectedRule = _useState2[0],
1180
+ setSelectedRule = _useState2[1];
1181
+ var _useTranslation = useTranslation(),
1182
+ t = _useTranslation.t;
1183
+ var key = column.key,
1184
+ _column$defaultType = column.defaultType,
1185
+ defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
1186
+ label = column.label,
1187
+ _column$helpIconProps = column.helpIconProps,
1188
+ helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
1189
+ var isDatePickerShown = filter && isCustomDateRange(filter.value);
1190
+ var otherProps = getOtherProps(column);
1191
+ var handleChange = function handleChange(option) {
1192
+ if (isEmpty(option) || isNil(option)) {
1193
+ handleApplyFilter({
1194
+ _delete: true
1195
+ });
1196
+ setSelectedRule({});
1197
+ return;
1111
1198
  }
1112
- }, /*#__PURE__*/React.createElement(Typography, {
1113
- style: "body2",
1114
- weight: "medium"
1115
- }, childKey), /*#__PURE__*/React.createElement("div", {
1116
- className: "neeto-filters-bar__block-close"
1117
- }, /*#__PURE__*/React.createElement(Close, {
1118
- "data-cy": "neeto-filters-".concat(hyphenate(childKey), "-block-close-btn"),
1119
- size: 16,
1120
- strokeWidth: 2,
1121
- onClick: function onClick(event) {
1122
- event.stopPropagation();
1123
- handleDelete(childKey);
1199
+ setSelectedRule(option);
1200
+ var updatedFilter = buildUpdatedFilter({
1201
+ column: column,
1202
+ defaultType: defaultType,
1203
+ option: option
1204
+ });
1205
+ handleApplyFilter(updatedFilter);
1206
+ };
1207
+ var handleDateRangeChange = function handleDateRangeChange(dates) {
1208
+ if (isEmpty(dates) || isNil(dates)) {
1209
+ handleApplyFilter({
1210
+ _delete: true
1211
+ });
1212
+ setSelectedRule({});
1213
+ return;
1124
1214
  }
1125
- })));
1215
+ var updatedFilter = buildUpdatedFilter({
1216
+ column: column,
1217
+ defaultType: defaultType,
1218
+ option: {
1219
+ value: pluck("$d", buildDateValues(dates, selectedRule)).map(function (date) {
1220
+ return date.toISOString();
1221
+ })
1222
+ }
1223
+ });
1224
+ handleApplyFilter(updatedFilter);
1225
+ };
1226
+ useEffect(function () {
1227
+ isNil(filter) && setSelectedRule({});
1228
+ }, [filter]);
1229
+ return /*#__PURE__*/React.createElement("div", {
1230
+ className: "neeto-filters-pane-filter__item-wrapper"
1231
+ }, /*#__PURE__*/React.createElement(Select, _extends({
1232
+ autoFocus: autoFocus,
1233
+ label: label,
1234
+ isClearable: true,
1235
+ "data-cy": "neeto-filters-".concat(hyphenate(key), "-filter"),
1236
+ options: DATE_OPTIONS,
1237
+ strategy: "fixed",
1238
+ value: selectedRule,
1239
+ placeholder: t("neetoFilters.messages.selectResource", {
1240
+ resource: label
1241
+ })
1242
+ }, isNotEmpty(helpIconProps) && {
1243
+ labelProps: {
1244
+ helpIconProps: buildHelpIconProps(helpIconProps)
1245
+ }
1246
+ }, {
1247
+ onChange: handleChange
1248
+ })), isDatePickerShown && /*#__PURE__*/React.createElement(DatePicker, _extends({
1249
+ "data-cy": "neeto-filters-".concat(hyphenate(key), "-date-range"),
1250
+ getPopupContainer: prop("parentNode"),
1251
+ type: (selectedRule === null || selectedRule === void 0 ? void 0 : selectedRule.value) === "custom-date-range" ? "range" : "date",
1252
+ value: getDateValue(filter === null || filter === void 0 ? void 0 : filter.value, selectedRule),
1253
+ onChange: handleDateRangeChange
1254
+ }, otherProps)));
1126
1255
  };
1256
+ var Datetime$1 = /*#__PURE__*/React.memo(Datetime);
1127
1257
 
1128
- var fetch = function fetch(params) {
1129
- return axios.get(SEGMENTS_BASE_URL, {
1130
- params: params
1131
- });
1132
- };
1133
- var show = function show(id) {
1134
- return axios.get("".concat(SEGMENTS_BASE_URL, "/").concat(id), {
1135
- transformResponseCase: false
1136
- });
1137
- };
1138
- var create = function create(payload) {
1139
- return axios.post(SEGMENTS_BASE_URL, {
1140
- segment: payload
1258
+ var Dropdown = function Dropdown(_ref) {
1259
+ var column = _ref.column,
1260
+ filter = _ref.filter,
1261
+ handleApplyFilter = _ref.handleApplyFilter,
1262
+ autoFocus = _ref.autoFocus,
1263
+ filters = _ref.filters;
1264
+ var key = column.key,
1265
+ label = column.label,
1266
+ values = column.values,
1267
+ defaultValue = column.defaultValue,
1268
+ _column$defaultType = column.defaultType,
1269
+ defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
1270
+ _column$showRuleSelec = column.showRuleSelector,
1271
+ showRuleSelector = _column$showRuleSelec === void 0 ? false : _column$showRuleSelec,
1272
+ _column$isClearable = column.isClearable,
1273
+ isClearable = _column$isClearable === void 0 ? true : _column$isClearable,
1274
+ _column$helpIconProps = column.helpIconProps,
1275
+ helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
1276
+ var otherProps = getOtherProps(column);
1277
+ var options = buildDropdownOptions({
1278
+ defaultType: defaultType,
1279
+ filter: filter,
1280
+ options: values
1141
1281
  });
1142
- };
1143
- var update = function update(_ref) {
1144
- var id = _ref.id,
1145
- payload = _ref.payload,
1146
- _ref$showToastr = _ref.showToastr,
1147
- showToastr = _ref$showToastr === void 0 ? true : _ref$showToastr;
1148
- return axios.put("".concat(SEGMENTS_BASE_URL, "/").concat(id), payload, {
1149
- showToastr: showToastr
1282
+ var dropdownRules = isMulti(defaultType) ? MULTI_DROPDOWN_RULES : SINGLE_DROPDOWN_RULES;
1283
+ var value = buildDropdownValue({
1284
+ defaultType: defaultType,
1285
+ filter: filter,
1286
+ options: options
1150
1287
  });
1151
- };
1152
- var destroy = function destroy(id) {
1153
- return axios["delete"]("".concat(SEGMENTS_BASE_URL, "/").concat(id));
1154
- };
1155
- var segmentsApi = {
1156
- fetch: fetch,
1157
- show: show,
1158
- create: create,
1159
- update: update,
1160
- destroy: destroy
1161
- };
1162
-
1163
- var QUERY_KEYS = {
1164
- SEGMENTS_LIST: "segments-list"
1165
- };
1166
- var SEGMENTS_STALE_TIME = 900000; // 15 mins
1167
-
1168
- function ownKeys$3(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; }
1169
- function _objectSpread$3(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$3(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$3(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1170
- var SEGMENTS_LIST = QUERY_KEYS.SEGMENTS_LIST;
1171
- var useFetchSegments = function useFetchSegments(_ref) {
1172
- var entity = _ref.entity,
1173
- _ref$searchTerm = _ref.searchTerm,
1174
- searchTerm = _ref$searchTerm === void 0 ? "" : _ref$searchTerm;
1175
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1176
- return useQuery([SEGMENTS_LIST, entity, searchTerm], function () {
1177
- return segmentsApi.fetch({
1178
- entity: entity,
1179
- searchTerm: searchTerm
1180
- });
1181
- }, mergeRight({
1182
- staleTime: SEGMENTS_STALE_TIME,
1183
- select: prop("segments")
1184
- }, options));
1185
- };
1186
- var useShowSegment = function useShowSegment(id) {
1187
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1188
- return useQuery([SEGMENTS_LIST, id], function () {
1189
- return segmentsApi.show(id);
1190
- }, mergeRight({
1191
- staleTime: SEGMENTS_STALE_TIME,
1192
- select: prop("segment")
1193
- }, options));
1194
- };
1195
- var useCreateSegment = function useCreateSegment(options) {
1196
- return useMutationWithInvalidation(segmentsApi.create, _objectSpread$3({
1197
- keysToInvalidate: [SEGMENTS_LIST]
1198
- }, options));
1199
- };
1200
- var useUpdateSegment = function useUpdateSegment(options) {
1201
- return useMutationWithInvalidation(segmentsApi.update, _objectSpread$3({
1202
- keysToInvalidate: [SEGMENTS_LIST]
1203
- }, options));
1204
- };
1205
- var useDestroySegment = function useDestroySegment(options) {
1206
- return useMutationWithInvalidation(segmentsApi.destroy, _objectSpread$3({
1207
- keysToInvalidate: [SEGMENTS_LIST]
1208
- }, options));
1209
- };
1210
-
1211
- var buildSegmentsValidationSchema = function buildSegmentsValidationSchema(defaultSegmentName) {
1212
- return yup.object({
1213
- name: yup.string().trim().required().test({
1214
- name: "not-default-segment-name",
1215
- test: function test(value) {
1216
- return (value === null || value === void 0 ? void 0 : value.toLocaleLowerCase()) !== defaultSegmentName.toLocaleLowerCase();
1217
- },
1218
- message: t$1("neetoFilters.segments.reservedNameErrorMessage")
1219
- })
1220
- });
1221
- };
1222
-
1223
- var Menu = Dropdown$2.Menu,
1224
- MenuItem = Dropdown$2.MenuItem;
1225
- var Segment = function Segment(_ref) {
1226
- var entity = _ref.entity,
1227
- filters = _ref.filters,
1228
- columns = _ref.columns,
1229
- childrenKeys = _ref.childrenKeys,
1230
- setIsFilterPaneOpen = _ref.setIsFilterPaneOpen,
1231
- defaultSegmentName = _ref.defaultSegmentName;
1232
- var _useState = useState(false),
1288
+ var _useState = useState(findBy({
1289
+ value: filter === null || filter === void 0 ? void 0 : filter.rule
1290
+ }, dropdownRules) || dropdownRules[0]),
1233
1291
  _useState2 = _slicedToArray(_useState, 2),
1234
- isSavePaneOpen = _useState2[0],
1235
- setIsSavePaneOpen = _useState2[1];
1236
- var _useState3 = useState(false),
1237
- _useState4 = _slicedToArray(_useState3, 2),
1238
- isUpdateAlertOpen = _useState4[0],
1239
- setIsUpdateAlertOpen = _useState4[1];
1240
- var inputRef = useRef(null);
1292
+ selectedRule = _useState2[0],
1293
+ setSelectedRule = _useState2[1];
1241
1294
  var _useTranslation = useTranslation(),
1242
1295
  t = _useTranslation.t;
1243
- var history = useHistory();
1244
- var filtersPayload = buildSegmentsPayload(filters, childrenKeys);
1245
- var _getQueryParams = getQueryParams(),
1246
- segmentId = _getQueryParams.segmentId;
1247
- var _useShowSegment = useShowSegment(segmentId, {
1248
- enabled: isNotNil(segmentId)
1249
- }),
1250
- _useShowSegment$data = _useShowSegment.data,
1251
- selectedSegment = _useShowSegment$data === void 0 ? {} : _useShowSegment$data;
1252
- var _useCreateSegment = useCreateSegment(),
1253
- createSegment = _useCreateSegment.mutate,
1254
- isCreating = _useCreateSegment.isLoading;
1255
- var _useUpdateSegment = useUpdateSegment(),
1256
- updateSegment = _useUpdateSegment.mutate,
1257
- isUpdating = _useUpdateSegment.isLoading;
1258
- var isSubmitting = isCreating || isUpdating;
1259
- var handleUpdate = function handleUpdate() {
1260
- return updateSegment({
1261
- id: segmentId,
1262
- payload: {
1263
- filters: filtersPayload
1264
- }
1265
- }, {
1266
- onSuccess: function onSuccess() {
1267
- return setIsUpdateAlertOpen(false);
1268
- }
1269
- });
1296
+ var getOption = function getOption(isSelectedRuleEmpty, options, value) {
1297
+ if (isSelectedRuleEmpty) {
1298
+ return isMulti(defaultType) ? [options[0]] : options[0];
1299
+ }
1300
+ return value;
1270
1301
  };
1271
- var handleCreateSuccess = function handleCreateSuccess(_ref2) {
1272
- var _filters$;
1273
- var _ref2$segment = _ref2.segment,
1274
- id = _ref2$segment.id,
1275
- filters = _ref2$segment.filters;
1276
- history.push({
1277
- search: buildUrlFromSegment({
1278
- columns: columns,
1279
- filters: (_filters$ = filters[0]) === null || _filters$ === void 0 ? void 0 : _filters$.conditions,
1280
- id: id
1281
- })
1302
+ var handleRuleChange = function handleRuleChange(rule) {
1303
+ var isPreviousRuleEmpty = isRuleEmpty(selectedRule.value);
1304
+ var isNewRuleEmpty = isRuleEmpty(rule.value);
1305
+ setSelectedRule(rule);
1306
+ if (isPreviousRuleEmpty || !isNewRuleEmpty && isNotPresent(filter === null || filter === void 0 ? void 0 : filter.value)) {
1307
+ handleApplyFilter({
1308
+ _delete: true
1309
+ });
1310
+ return;
1311
+ }
1312
+ var updatedFilter = buildUpdatedFilter({
1313
+ column: column,
1314
+ defaultType: defaultType,
1315
+ rule: rule.value,
1316
+ option: getOption(isNewRuleEmpty, options, value)
1282
1317
  });
1283
- setIsSavePaneOpen(false);
1318
+ handleApplyFilter(updatedFilter);
1284
1319
  };
1285
- var handleSubmit = function handleSubmit(_ref3) {
1286
- var name = _ref3.name;
1287
- return createSegment({
1288
- name: name,
1289
- entity: entity,
1290
- filters: filtersPayload
1291
- }, {
1292
- onSuccess: handleCreateSuccess
1320
+ var handleChange = function handleChange(option) {
1321
+ if (isEmpty(option) || isNil(option)) {
1322
+ handleApplyFilter({
1323
+ _delete: true
1324
+ });
1325
+ return;
1326
+ }
1327
+ var updatedFilter = buildUpdatedFilter({
1328
+ column: column,
1329
+ defaultType: defaultType,
1330
+ option: option,
1331
+ rule: selectedRule.value
1293
1332
  });
1333
+ handleApplyFilter(updatedFilter);
1294
1334
  };
1295
- return /*#__PURE__*/React.createElement(React.Fragment, null, isNil(segmentId) ? /*#__PURE__*/React.createElement(Button, {
1296
- "data-cy": "save-segment-button",
1297
- disabled: hasOnlyKeywordFilter(filters),
1298
- label: t("neetoFilters.segments.saveAsSegment"),
1299
- style: "secondary",
1300
- onClick: function onClick() {
1301
- setIsFilterPaneOpen(false);
1302
- setIsSavePaneOpen(true);
1303
- }
1304
- }) : /*#__PURE__*/React.createElement(Dropdown$2, {
1305
- buttonStyle: "secondary",
1306
- label: t("neetoFilters.segments.saveSegment")
1307
- }, /*#__PURE__*/React.createElement(Menu, null, /*#__PURE__*/React.createElement(MenuItem.Button, {
1308
- isDisabled: equals(filtersPayload, selectedSegment === null || selectedSegment === void 0 ? void 0 : selectedSegment.filters),
1309
- onClick: setIsUpdateAlertOpen
1310
- }, t("neetoFilters.segments.saveSegment")), /*#__PURE__*/React.createElement(MenuItem.Button, {
1311
- onClick: function onClick() {
1312
- setIsFilterPaneOpen(false);
1313
- setIsSavePaneOpen(true);
1314
- }
1315
- }, t("neetoFilters.segments.saveAsNewSegment")))), /*#__PURE__*/React.createElement(Pane$1, {
1316
- initialFocusRef: inputRef,
1317
- isOpen: isSavePaneOpen,
1318
- onClose: function onClose() {
1319
- return setIsSavePaneOpen(false);
1320
- }
1321
- }, /*#__PURE__*/React.createElement(Pane$1.Header, null, /*#__PURE__*/React.createElement(Typography, {
1322
- style: "h2",
1323
- weight: "semibold"
1324
- }, t("neetoFilters.segments.addNewSegment"))), /*#__PURE__*/React.createElement(Form, {
1325
- className: "w-full",
1326
- formProps: {
1327
- noValidate: true
1328
- },
1329
- formikProps: {
1330
- initialValues: {
1331
- name: ""
1332
- },
1333
- validateOnChange: true,
1334
- validateOnBlur: true,
1335
- validationSchema: buildSegmentsValidationSchema(defaultSegmentName),
1336
- onSubmit: handleSubmit
1337
- }
1338
- }, /*#__PURE__*/React.createElement(Pane$1.Body, null, /*#__PURE__*/React.createElement(Input, {
1339
- className: "w-full",
1340
- label: t("neetoFilters.segments.name"),
1341
- name: "name",
1342
- placeholder: t("neetoFilters.segments.segmentName"),
1343
- ref: inputRef
1344
- })), /*#__PURE__*/React.createElement(Pane$1.Footer, {
1345
- className: "flex items-center space-x-2"
1346
- }, /*#__PURE__*/React.createElement(ActionBlock, {
1347
- cancelButtonProps: {
1348
- onClick: function onClick() {
1349
- return setIsSavePaneOpen(false);
1350
- },
1351
- disabled: false
1352
- },
1353
- submitButtonProps: {
1354
- disabled: isSubmitting,
1355
- loading: isSubmitting
1335
+ useEffect(function () {
1336
+ if (!isEmpty(filters)) return;
1337
+ setSelectedRule(dropdownRules[0]);
1338
+ }, [filters]);
1339
+ return /*#__PURE__*/React.createElement("div", {
1340
+ className: "neeto-filters-pane-filter__item-wrapper"
1341
+ }, showRuleSelector && /*#__PURE__*/React.createElement(Select, {
1342
+ label: label,
1343
+ defaultValue: dropdownRules[0],
1344
+ options: dropdownRules,
1345
+ value: selectedRule,
1346
+ onChange: handleRuleChange
1347
+ }), !isRuleEmpty(selectedRule.value) && /*#__PURE__*/React.createElement(Select, _extends({
1348
+ autoFocus: autoFocus,
1349
+ options: options,
1350
+ value: value,
1351
+ "data-cy": "neeto-filters-".concat(hyphenate(key), "-filter"),
1352
+ isClearable: !defaultValue && isClearable,
1353
+ isMulti: isMulti(defaultType),
1354
+ label: !showRuleSelector && label,
1355
+ strategy: "fixed",
1356
+ placeholder: t("neetoFilters.messages.selectResource", {
1357
+ resource: label
1358
+ })
1359
+ }, isNotEmpty(helpIconProps) && {
1360
+ labelProps: {
1361
+ helpIconProps: buildHelpIconProps(helpIconProps)
1356
1362
  }
1357
- })))), /*#__PURE__*/React.createElement(Alert, {
1358
- isOpen: isUpdateAlertOpen,
1359
- isSubmitting: isUpdating,
1360
- submitButtonLabel: t("neetoFilters.common.update"),
1361
- title: t("neetoFilters.segments.updateSegment"),
1362
- message: /*#__PURE__*/React.createElement(Trans, {
1363
- i18nKey: "neetoFilters.segments.updateSegmentMessage",
1364
- values: {
1365
- entity: selectedSegment === null || selectedSegment === void 0 ? void 0 : selectedSegment.name
1366
- }
1367
- }),
1368
- onClose: function onClose() {
1369
- return setIsUpdateAlertOpen(false);
1370
- },
1371
- onSubmit: handleUpdate
1372
- }));
1363
+ }, {
1364
+ onChange: handleChange
1365
+ }, otherProps)));
1373
1366
  };
1367
+ var Dropdown$1 = /*#__PURE__*/React.memo(Dropdown);
1374
1368
 
1375
- function ownKeys$2(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; }
1376
- function _objectSpread$2(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$2(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$2(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1377
- var Bar = function Bar(_ref) {
1378
- var entity = _ref.entity,
1379
- className = _ref.className,
1380
- _ref$columns = _ref.columns,
1381
- columns = _ref$columns === void 0 ? [] : _ref$columns,
1382
- _ref$keyword = _ref.keyword,
1383
- keyword = _ref$keyword === void 0 ? {
1384
- node: "",
1385
- value: "",
1386
- setValue: noop
1387
- } : _ref$keyword,
1388
- _ref$setIsPaneOpen = _ref.setIsPaneOpen,
1389
- setIsPaneOpen = _ref$setIsPaneOpen === void 0 ? identity : _ref$setIsPaneOpen,
1390
- _ref$childrenKeys = _ref.childrenKeys,
1391
- childrenKeys = _ref$childrenKeys === void 0 ? [] : _ref$childrenKeys,
1392
- _ref$defaultSegmentNa = _ref.defaultSegmentName,
1393
- defaultSegmentName = _ref$defaultSegmentNa === void 0 ? t$1("neetoFilters.common.allResults") : _ref$defaultSegmentNa;
1394
- return function () {
1395
- var _useTranslation = useTranslation(),
1396
- t = _useTranslation.t;
1397
- var initialRenderRef = useRef(true);
1398
- var searchParams = useQueryParams({
1399
- toCamelCase: false
1400
- });
1401
- var keywordValue = searchParams[SEARCH_TERM_KEY] || "";
1402
- var keywordFilter = _objectSpread$2(_objectSpread$2({
1403
- type: "text",
1404
- rule: "contains",
1405
- label: t("neetoFilters.common.searchTerm")
1406
- }, keyword), {}, {
1407
- key: SEARCH_TERM_KEY,
1408
- value: keywordValue
1409
- });
1410
- var filters = buildFiltersFromSearchParams(isKeywordFilterPresent(keywordFilter) && isNotEmpty(keywordValue) ? [keywordFilter].concat(_toConsumableArray(columns)) : columns);
1411
- var nonHiddenFilters = removeBy({
1412
- hidden: true
1413
- }, filters);
1414
- var history = useHistory();
1415
- var handleSubmit = function handleSubmit(newFilters, isClearAll) {
1416
- var params = buildUrlFromFilters(_objectSpread$2({
1417
- columns: columns,
1418
- filters: isKeywordFilterPresent(keywordFilter) && isNotEmpty(getSearchTermFromUrl()) ? [].concat(_toConsumableArray(newFilters), [keywordFilter]) : newFilters
1419
- }, isClearAll && {
1420
- isClearAll: true,
1421
- childrenKeys: childrenKeys
1422
- }));
1423
- history.push({
1424
- search: params
1425
- });
1426
- };
1427
- var handleDelete = function handleDelete(key) {
1428
- if (key === SEARCH_TERM_KEY) {
1429
- var params = omit([SEARCH_TERM_KEY], getSnakeCasedQueryParams());
1430
- var pathname = window.location.pathname;
1431
- history.push(buildUrl(pathname, params));
1432
- return;
1433
- }
1434
- if (childrenKeys.includes(key)) {
1435
- var _params = omit([key], getSnakeCasedQueryParams());
1436
- var _pathname = window.location.pathname;
1437
- history.push(buildUrl(_pathname, _params));
1438
- }
1439
- var newFilters = removeBy({
1440
- key: key
1441
- }, filters);
1442
- handleSubmit(newFilters);
1443
- };
1444
- var handleClearAll = function handleClearAll() {
1445
- var params = isKeywordFilterPresent(keywordFilter) ? omit([SEARCH_TERM_KEY], getSnakeCasedQueryParams()) : getSnakeCasedQueryParams();
1446
- var pathname = window.location.pathname;
1447
- history.push(buildUrl(pathname, params));
1448
- handleSubmit([], true);
1449
- };
1450
- var childrenFiltersApplied = childrenKeys.some(function (key) {
1451
- return has(key, searchParams);
1452
- });
1453
- var hideClearButton = nonHiddenFilters.every(function (_ref2) {
1454
- var defaultValue = _ref2.defaultValue,
1455
- isClearable = _ref2.isClearable;
1456
- return defaultValue && !isClearable;
1457
- }) && !childrenFiltersApplied;
1458
- useEffect(function () {
1459
- if (initialRenderRef.current) {
1460
- initialRenderRef.current = false;
1461
- return noop;
1462
- }
1463
- var handler = setTimeout(function () {
1464
- handleSubmit(filters);
1465
- }, 500);
1466
- return function () {
1467
- return clearTimeout(handler);
1468
- };
1469
- }, [keywordValue]);
1470
- if (isEmpty(nonHiddenFilters) && !childrenFiltersApplied) return null;
1471
- return /*#__PURE__*/React.createElement("div", {
1472
- className: classnames("neeto-filters-bar", _defineProperty({}, className, className))
1473
- }, nonHiddenFilters.map(function (filter) {
1474
- var _filter$suffixCompone;
1475
- return /*#__PURE__*/React.createElement(React.Fragment, {
1476
- key: filter.key
1477
- }, /*#__PURE__*/React.createElement(Block, {
1478
- filter: filter,
1479
- handleDelete: handleDelete,
1480
- setIsPaneOpen: setIsPaneOpen
1481
- }), (_filter$suffixCompone = filter.suffixComponent) === null || _filter$suffixCompone === void 0 ? void 0 : _filter$suffixCompone.call(filter), /*#__PURE__*/React.createElement("div", {
1482
- className: "neeto-filters-bar--separator"
1483
- }));
1484
- }), childrenKeys.filter(function (childKey) {
1485
- return has(childKey, searchParams);
1486
- }).map(function (childKey) {
1487
- return /*#__PURE__*/React.createElement(React.Fragment, {
1488
- key: childKey
1489
- }, /*#__PURE__*/React.createElement(ChildBlock, {
1490
- childKey: childKey,
1491
- handleDelete: handleDelete,
1492
- setIsPaneOpen: setIsPaneOpen
1493
- }), /*#__PURE__*/React.createElement("div", {
1494
- className: "neeto-filters-bar--separator"
1495
- }));
1496
- }), /*#__PURE__*/React.createElement("div", {
1497
- className: "flex items-center gap-x-2"
1498
- }, isNotNil(entity) && /*#__PURE__*/React.createElement(Segment, {
1499
- childrenKeys: childrenKeys,
1500
- columns: columns,
1501
- defaultSegmentName: defaultSegmentName,
1502
- entity: entity,
1503
- filters: filters,
1504
- setIsFilterPaneOpen: setIsPaneOpen
1505
- }), !hideClearButton && /*#__PURE__*/React.createElement(Button, {
1506
- "data-cy": "neeto-filters-bar-clear-btn",
1507
- label: t("neetoFilters.common.clearFilters"),
1508
- style: "text",
1509
- onClick: handleClearAll
1510
- })));
1511
- }();
1512
- };
1369
+ var SingleDatetime = function SingleDatetime(_ref) {
1370
+ var column = _ref.column,
1371
+ filter = _ref.filter,
1372
+ filters = _ref.filters,
1373
+ handleApplyFilter = _ref.handleApplyFilter,
1374
+ autoFocus = _ref.autoFocus;
1375
+ var _useState = useState(function () {
1376
+ return findBy({
1377
+ value: filter === null || filter === void 0 ? void 0 : filter.rule
1378
+ }, SINGLE_DATE_OPTIONS) || SINGLE_DATE_OPTIONS[0];
1379
+ }),
1380
+ _useState2 = _slicedToArray(_useState, 2),
1381
+ selectedRule = _useState2[0],
1382
+ setSelectedRule = _useState2[1];
1383
+ var key = column.key,
1384
+ _column$defaultType = column.defaultType,
1385
+ defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
1386
+ label = column.label,
1387
+ _column$helpIconProps = column.helpIconProps,
1388
+ helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
1389
+ var otherProps = getOtherProps(column);
1390
+ var datePickerType = selectedRule.value === "between" ? "range" : "date";
1391
+ var value = filter === null || filter === void 0 ? void 0 : filter.value;
1513
1392
 
1514
- function _extends() {
1515
- _extends = Object.assign ? Object.assign.bind() : function (target) {
1516
- for (var i = 1; i < arguments.length; i++) {
1517
- var source = arguments[i];
1518
- for (var key in source) {
1519
- if (Object.prototype.hasOwnProperty.call(source, key)) {
1520
- target[key] = source[key];
1521
- }
1522
- }
1523
- }
1524
- return target;
1525
- };
1526
- return _extends.apply(this, arguments);
1527
- }
1528
-
1529
- function _objectWithoutPropertiesLoose(source, excluded) {
1530
- if (source == null) return {};
1531
- var target = {};
1532
- var sourceKeys = Object.keys(source);
1533
- var key, i;
1534
- for (i = 0; i < sourceKeys.length; i++) {
1535
- key = sourceKeys[i];
1536
- if (excluded.indexOf(key) >= 0) continue;
1537
- target[key] = source[key];
1538
- }
1539
- return target;
1540
- }
1393
+ // Reset states when "Clear filters" button is clicked.
1394
+ useEffect(function () {
1395
+ if (!isEmpty(filters)) return;
1396
+ setSelectedRule(SINGLE_DATE_OPTIONS[0]);
1397
+ }, [filters]);
1398
+ var handleRuleChange = function handleRuleChange(ruleOption) {
1399
+ setSelectedRule(ruleOption);
1541
1400
 
1542
- function _objectWithoutProperties(source, excluded) {
1543
- if (source == null) return {};
1544
- var target = _objectWithoutPropertiesLoose(source, excluded);
1545
- var key, i;
1546
- if (Object.getOwnPropertySymbols) {
1547
- var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
1548
- for (i = 0; i < sourceSymbolKeys.length; i++) {
1549
- key = sourceSymbolKeys[i];
1550
- if (excluded.indexOf(key) >= 0) continue;
1551
- if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
1552
- target[key] = source[key];
1401
+ // Clear value if switched between incompatable types
1402
+ var updateValue = value;
1403
+ if (datePickerType === "range" && ruleOption.value !== "between" || datePickerType === "date" && ruleOption.value === "between") {
1404
+ updateValue = "";
1553
1405
  }
1554
- }
1555
- return target;
1556
- }
1557
-
1558
- var useFilters = function useFilters(_ref) {
1559
- var onFiltersChange = _ref.onFiltersChange,
1560
- columns = _ref.columns,
1561
- keywordFilter = _ref.keywordFilter,
1562
- onSelectorsChange = _ref.onSelectorsChange;
1563
- var _useTransition = useTransition(),
1564
- _useTransition2 = _slicedToArray(_useTransition, 2);
1565
- _useTransition2[0];
1566
- var startTransition = _useTransition2[1];
1567
- var initialRender = useRef(true);
1568
- var prevFilters = useRef([]);
1569
- var location = useLocation();
1570
- var filters = buildFiltersFromSearchParams(columns, false);
1571
- var history = useHistory();
1572
- var defaultValuesOfColumns = JSON.stringify(pluck("defaultValue", columns));
1573
- var handlePrecenseOfDefaultFilters = function handlePrecenseOfDefaultFilters(defaultFilters) {
1574
- var params = buildUrlFromFilters({
1575
- columns: columns,
1576
- filters: isKeywordFilterPresent(keywordFilter) && isNotEmpty(getSearchTermFromUrl()) ? [].concat(_toConsumableArray(defaultFilters), [keywordFilter]) : defaultFilters
1577
- });
1578
- history.replace({
1579
- search: params
1406
+ var updatedFilter = buildUpdatedFilter({
1407
+ column: column,
1408
+ defaultType: defaultType,
1409
+ option: {},
1410
+ rule: ruleOption.value,
1411
+ value: updateValue
1580
1412
  });
1413
+ handleApplyFilter(updatedFilter);
1581
1414
  };
1582
- var handleFiltersChange = function handleFiltersChange(filtersPayload) {
1583
- startTransition(function () {
1584
- onFiltersChange(buildFiltersPayload(filtersPayload.filter(function (filter) {
1585
- return !isNil(filter.node);
1586
- })));
1415
+ var handleChange = function handleChange(dates) {
1416
+ if (isEmpty(dates) || isNil(dates)) {
1417
+ handleApplyFilter({
1418
+ _delete: true
1419
+ });
1420
+ return;
1421
+ }
1422
+ var value = datePickerType === "range" ? pluck("$d", dates).map(function (date) {
1423
+ return date.toISOString();
1424
+ }) : dates["$d"];
1425
+ var updatedFilter = buildUpdatedFilter({
1426
+ column: column,
1427
+ defaultType: defaultType,
1428
+ option: {},
1429
+ rule: selectedRule.value,
1430
+ value: value
1587
1431
  });
1432
+ handleApplyFilter(updatedFilter);
1588
1433
  };
1434
+ return /*#__PURE__*/React.createElement("div", {
1435
+ className: "neeto-filters-pane-filter__item-wrapper"
1436
+ }, /*#__PURE__*/React.createElement(Select, _extends({
1437
+ label: label,
1438
+ "data-cy": "neeto-filters-".concat(hyphenate(key), "-filter-rule"),
1439
+ defaultValue: SINGLE_DATE_OPTIONS[0],
1440
+ options: SINGLE_DATE_OPTIONS,
1441
+ strategy: "fixed",
1442
+ value: selectedRule
1443
+ }, isNotEmpty(helpIconProps) && {
1444
+ labelProps: {
1445
+ helpIconProps: buildHelpIconProps(helpIconProps)
1446
+ }
1447
+ }, {
1448
+ onChange: handleRuleChange
1449
+ })), /*#__PURE__*/React.createElement(DatePicker, _extends({
1450
+ autoFocus: autoFocus,
1451
+ value: value,
1452
+ "data-cy": "neeto-filters-".concat(hyphenate(key), "-filter"),
1453
+ getPopupContainer: prop("parentNode"),
1454
+ type: datePickerType,
1455
+ onChange: handleChange
1456
+ }, otherProps)));
1457
+ };
1589
1458
 
1590
- //This function sends the updated filters to host via callbacks.
1591
- var sendUpdatedFilters = function sendUpdatedFilters() {
1592
- if (compareFilters(append(keywordFilter, filters), prevFilters.current)) {
1593
- return;
1459
+ var SingleTime = function SingleTime(_ref) {
1460
+ var column = _ref.column,
1461
+ filter = _ref.filter,
1462
+ filters = _ref.filters,
1463
+ handleApplyFilter = _ref.handleApplyFilter,
1464
+ autoFocus = _ref.autoFocus;
1465
+ var _useState = useState(function () {
1466
+ return findBy({
1467
+ value: filter === null || filter === void 0 ? void 0 : filter.rule
1468
+ }, SINGLE_TIME_OPTIONS) || SINGLE_TIME_OPTIONS[0];
1469
+ }),
1470
+ _useState2 = _slicedToArray(_useState, 2),
1471
+ selectedRule = _useState2[0],
1472
+ setSelectedRule = _useState2[1];
1473
+ var key = column.key,
1474
+ _column$defaultType = column.defaultType,
1475
+ defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
1476
+ label = column.label,
1477
+ _column$helpIconProps = column.helpIconProps,
1478
+ helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
1479
+ var otherProps = getOtherProps(column);
1480
+ var timePickerType = selectedRule.value === "between" ? "range" : "time";
1481
+ var value = filter === null || filter === void 0 ? void 0 : filter.value;
1482
+ useEffect(function () {
1483
+ if (!isEmpty(filters)) return;
1484
+ setSelectedRule(SINGLE_TIME_OPTIONS[0]);
1485
+ }, [filters]);
1486
+ var handleRuleChange = function handleRuleChange(ruleOption) {
1487
+ setSelectedRule(ruleOption);
1488
+
1489
+ // Clear value if switched between incompatible types
1490
+ var updateValue = value;
1491
+ if (timePickerType === "range" && ruleOption.value !== "between" || timePickerType === "time" && ruleOption.value === "between") {
1492
+ updateValue = "";
1594
1493
  }
1595
- var newFilters = buildFiltersFromSearchParams(columns);
1596
- var filtersPayload = isKeywordFilterPresent(keywordFilter) && isNotEmpty(getSearchTermFromUrl()) ? append(keywordFilter, newFilters) : newFilters;
1597
- handleFiltersChange(filtersPayload);
1598
- onSelectorsChange(buildSelectorsFromURL(columns));
1494
+ var updatedFilter = buildUpdatedFilter({
1495
+ column: column,
1496
+ defaultType: defaultType,
1497
+ option: {},
1498
+ rule: ruleOption.value,
1499
+ value: updateValue
1500
+ });
1501
+ handleApplyFilter(updatedFilter);
1599
1502
  };
1600
- var handleChangesInURL = function handleChangesInURL() {
1601
- var defaultFilters = buildDefaultFilters(columns, filters);
1602
- var searchParams = getSnakeCasedQueryParams();
1603
- var keys = pluck("key", append(keywordFilter, columns));
1604
- if (keys.every(function (key) {
1605
- return isNil(searchParams[key]);
1606
- }) && !isEmpty(defaultFilters)) {
1607
- history.replace({
1608
- search: buildUrlFromFilters({
1609
- columns: columns,
1610
- filters: concat(defaultFilters, filters)
1611
- })
1503
+ var handleChange = function handleChange(times) {
1504
+ if (hasInvalidTimes(times)) {
1505
+ handleApplyFilter({
1506
+ _delete: true
1612
1507
  });
1613
- filters = buildFiltersFromSearchParams(columns, false);
1508
+ return;
1509
+ }
1510
+ if (timePickerType === "range" && areCustomTimeRangeValuesNotValid(times)) {
1511
+ return;
1614
1512
  }
1513
+ var value = timePickerType === "range" ? pluck("$d", times).map(function (time) {
1514
+ return time.toISOString();
1515
+ }) : times["$d"].toISOString();
1516
+ var updatedFilter = buildUpdatedFilter({
1517
+ column: column,
1518
+ defaultType: defaultType,
1519
+ option: {},
1520
+ rule: selectedRule.value,
1521
+ value: value
1522
+ });
1523
+ handleApplyFilter(updatedFilter);
1615
1524
  };
1616
- useEffect(function () {
1617
- if (initialRender.current) {
1618
- initialRender.current = false;
1619
- var keywordValue = getSearchTermFromUrl();
1620
- var defaultFilters = buildDefaultFilters(columns, filters);
1621
- isNotEmpty(defaultFilters) && handlePrecenseOfDefaultFilters(defaultFilters);
1622
- prevFilters.current = append(mergeRight(keywordFilter, {
1623
- value: keywordValue
1624
- }), filters);
1625
- } else {
1626
- handleChangesInURL();
1627
- sendUpdatedFilters();
1628
- prevFilters.current = append(keywordFilter, filters);
1525
+ var formattedTime = formatTime(value, timePickerType);
1526
+ return /*#__PURE__*/React.createElement("div", {
1527
+ className: "neeto-filters-pane-filter__item-wrapper"
1528
+ }, /*#__PURE__*/React.createElement(Select, _extends({
1529
+ label: label,
1530
+ defaultValue: SINGLE_TIME_OPTIONS[0],
1531
+ options: SINGLE_TIME_OPTIONS,
1532
+ strategy: "fixed",
1533
+ value: selectedRule
1534
+ }, isNotEmpty(helpIconProps) && {
1535
+ labelProps: {
1536
+ helpIconProps: buildHelpIconProps(helpIconProps)
1629
1537
  }
1630
- }, [location.search, defaultValuesOfColumns]);
1631
- return filters;
1538
+ }, {
1539
+ onChange: handleRuleChange
1540
+ })), /*#__PURE__*/React.createElement(TimePickerInput, _extends({
1541
+ autoFocus: autoFocus,
1542
+ className: "w-full",
1543
+ "data-cy": "neeto-filters-".concat(hyphenate(key), "-filter"),
1544
+ type: timePickerType,
1545
+ value: formattedTime,
1546
+ onChange: handleChange
1547
+ }, otherProps)));
1632
1548
  };
1633
1549
 
1634
- var buildDropdownValue = function buildDropdownValue(_ref) {
1635
- var defaultType = _ref.defaultType,
1636
- filter = _ref.filter,
1637
- options = _ref.options;
1638
- if (!filter) return null;
1639
- if (isMulti(defaultType)) {
1640
- return options.filter(function (_ref2) {
1641
- var value = _ref2.value;
1642
- return filter.value.includes(value);
1643
- });
1644
- }
1645
- return findBy({
1646
- value: filter.value
1647
- }, options);
1648
- };
1649
- var buildSingleTimeValue = function buildSingleTimeValue(filter) {
1650
- var _findBy2;
1651
- if (!filter) return null;
1652
- return (_findBy2 = findBy({
1653
- value: filter.value
1654
- }, TIME_OPTIONS)) !== null && _findBy2 !== void 0 ? _findBy2 : last(TIME_OPTIONS);
1655
- };
1656
- var getOtherProps = function getOtherProps(props) {
1657
- return omit(["key", "node", "label", "type", "values", "model", "showRuleSelector"], props);
1658
- };
1659
- var buildDropdownOptions = function buildDropdownOptions(_ref3) {
1660
- var defaultType = _ref3.defaultType,
1661
- filter = _ref3.filter,
1662
- options = _ref3.options;
1663
- options = options.map(modify("value", function (value) {
1664
- return value === null || value === void 0 ? void 0 : value.toString();
1665
- }));
1666
- if (!filter) return options;
1667
- if (isMulti(defaultType)) {
1668
- var selectedOptions = filter.value.map(function (value) {
1669
- return findBy({
1670
- value: value
1671
- }, options) || toLabelAndValue(value);
1672
- });
1673
- var nonSelectedOptions = options.filter(function (option) {
1674
- return !filter.value.includes(option.value);
1675
- });
1676
- return concat(selectedOptions, nonSelectedOptions);
1677
- }
1678
- if (!findBy({
1679
- value: filter.value
1680
- }, options)) {
1681
- return append(toLabelAndValue(filter.value), options);
1682
- }
1683
- return options;
1684
- };
1685
- var initializeDateRule = function initializeDateRule(filter) {
1686
- return filter ? findBy({
1687
- value: filter === null || filter === void 0 ? void 0 : filter.value
1688
- }, DATE_OPTIONS) || findDateOption(filter, DATE_OPTIONS) : {};
1689
- };
1690
- var getDateValue = function getDateValue(value, rule) {
1691
- if (isEmpty(value) || isNil(value)) {
1692
- return null;
1693
- }
1694
- if (rule.value === "custom-date-range") {
1695
- return value;
1696
- }
1697
- return rule.value === "before" ? dayjs(value[1]).add(1, "day") : dayjs(value[0]).subtract(1, "day");
1698
- };
1699
- var findDateOption = function findDateOption(filter, options) {
1700
- var value = filter.value;
1701
- var isBeforeOrAfter = dayjs(value[1]).diff(dayjs(value[0]), "year") >= 90;
1702
- if (not(isBeforeOrAfter)) {
1703
- return last(options);
1704
- }
1705
- var currentMoment = dayjs();
1706
- var diffWithStart = Math.abs(currentMoment.diff(dayjs(value[0]), "year"));
1707
- var diffWithEnd = Math.abs(currentMoment.diff(dayjs(value[1]), "year"));
1708
- return diffWithStart < diffWithEnd ? findBy({
1709
- value: "after"
1710
- }, options) : findBy({
1711
- value: "before"
1712
- }, options);
1713
- };
1714
- var buildDateValues = function buildDateValues(dates, selectedRule) {
1715
- if (selectedRule.value === "after") {
1716
- return [dates.add(1, "day"), dates.add(100, "year")];
1717
- } else if (selectedRule.value === "before") {
1718
- return [dates.subtract(100, "year"), dates.subtract(1, "day")];
1719
- }
1720
- return dates;
1721
- };
1722
- var buildHelpIconProps = function buildHelpIconProps(helpIconProps) {
1723
- return mergeDeepRight(DEFAULT_HELP_ICON_PROPS, helpIconProps);
1724
- };
1725
- var hasInvalidTimes = function hasInvalidTimes(times) {
1726
- if (Array.isArray(times)) {
1727
- return times.some(function (time) {
1728
- return time.isValid();
1729
- }) === false;
1730
- }
1731
- return !times.isValid();
1732
- };
1733
- var areCustomTimeRangeValuesNotValid = function areCustomTimeRangeValuesNotValid(times) {
1734
- return !times.every(function (time) {
1735
- return time.isValid();
1736
- });
1737
- };
1738
-
1739
- // eslint-disable-next-line @bigbinary/neeto/use-standard-date-time-formats
1740
- var formatSingleTime = function formatSingleTime(time) {
1741
- return dayjs(time).format("HH:mm:ss");
1742
- };
1743
- var formatTime = function formatTime(value, timePickerType) {
1744
- if (isNilOrEmpty(value)) return null;
1745
- if (timePickerType === "range") {
1746
- return value.map(formatSingleTime);
1747
- }
1748
- return formatSingleTime(value);
1749
- };
1750
-
1751
- var Boolean = function Boolean(_ref) {
1752
- var column = _ref.column,
1550
+ var Text = function Text(_ref) {
1551
+ var column = _ref.column,
1753
1552
  filter = _ref.filter,
1553
+ filters = _ref.filters,
1754
1554
  handleApplyFilter = _ref.handleApplyFilter,
1755
- autoFocus = _ref.autoFocus;
1555
+ autoFocus = _ref.autoFocus,
1556
+ onClose = _ref.onClose;
1756
1557
  var key = column.key,
1757
1558
  _column$defaultType = column.defaultType,
1758
1559
  defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
1759
1560
  label = column.label,
1760
- values = column.values,
1561
+ _column$showRuleSelec = column.showRuleSelector,
1562
+ showRuleSelector = _column$showRuleSelec === void 0 ? false : _column$showRuleSelec,
1761
1563
  _column$helpIconProps = column.helpIconProps,
1762
1564
  helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
1763
- var options = isNil(values) || isEmpty(values) ? DEFAULT_BOOLEAN_OPTIONS : values;
1764
1565
  var otherProps = getOtherProps(column);
1765
- var value = buildDropdownValue({
1766
- defaultType: defaultType,
1767
- filter: filter,
1768
- options: options
1566
+ var ruleOptions = buildRuleOptions({
1567
+ defaultType: defaultType
1769
1568
  });
1569
+ var inputType = defaultType === "text" || defaultType === "custom.text" ? "text" : "number";
1570
+ var _useState = useState(filter === null || filter === void 0 ? void 0 : filter.value),
1571
+ _useState2 = _slicedToArray(_useState, 2),
1572
+ inputValue = _useState2[0],
1573
+ setInputValue = _useState2[1];
1574
+ var _useState3 = useState(function () {
1575
+ return findBy({
1576
+ value: filter === null || filter === void 0 ? void 0 : filter.rule
1577
+ }, ruleOptions) || ruleOptions[0];
1578
+ }),
1579
+ _useState4 = _slicedToArray(_useState3, 2),
1580
+ selectedRule = _useState4[0],
1581
+ setSelectedRule = _useState4[1];
1582
+ var debouncedInputValue = useDebounce(inputValue);
1770
1583
  var _useTranslation = useTranslation(),
1771
1584
  t = _useTranslation.t;
1772
- var handleChange = function handleChange(option) {
1773
- if (isEmpty(option) || isNil(option)) {
1774
- handleApplyFilter({
1775
- _delete: true
1776
- });
1777
- return;
1778
- }
1585
+ var handleUpdateAndApplyFilter = function handleUpdateAndApplyFilter() {
1586
+ var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : debouncedInputValue;
1587
+ var rule = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : selectedRule;
1588
+ if (equals(filter === null || filter === void 0 ? void 0 : filter.value, value) && equals(selectedRule, rule)) return;
1779
1589
  var updatedFilter = buildUpdatedFilter({
1780
1590
  column: column,
1781
1591
  defaultType: defaultType,
1782
- option: option
1592
+ option: {},
1593
+ rule: rule.value,
1594
+ value: value.trim()
1783
1595
  });
1784
1596
  handleApplyFilter(updatedFilter);
1785
1597
  };
1598
+ var handleKeydown = function handleKeydown(e) {
1599
+ if (!(e.key === "Enter")) return;
1600
+ handleUpdateAndApplyFilter(inputValue);
1601
+ onClose();
1602
+ };
1603
+ var handleRuleChange = function handleRuleChange(ruleOption) {
1604
+ setSelectedRule(ruleOption);
1605
+ if (!debouncedInputValue) return;
1606
+ handleUpdateAndApplyFilter(debouncedInputValue, ruleOption);
1607
+ };
1608
+
1609
+ // Reset states when "Clear filters" button is clicked.
1610
+ useEffect(function () {
1611
+ (isEmpty(filters) || isNil(filter)) && setInputValue("");
1612
+ }, [filter]);
1613
+ useEffect(function () {
1614
+ if (!debouncedInputValue) {
1615
+ !isUndefinedOrEmpty(filter) && handleApplyFilter({
1616
+ _delete: true
1617
+ });
1618
+ return;
1619
+ }
1620
+ handleUpdateAndApplyFilter();
1621
+ }, [debouncedInputValue]);
1786
1622
  return /*#__PURE__*/React.createElement("div", {
1787
1623
  className: "neeto-filters-pane-filter__item-wrapper"
1788
- }, /*#__PURE__*/React.createElement(Select, _extends({
1789
- autoFocus: autoFocus,
1624
+ }, showRuleSelector && /*#__PURE__*/React.createElement(Select, _extends({
1790
1625
  label: label,
1791
- options: options,
1792
- value: value,
1793
- isClearable: true
1626
+ "data-cy": "neeto-filters-".concat(hyphenate(key), "-filter-rule"),
1627
+ defaultValue: ruleOptions[0],
1628
+ options: ruleOptions,
1629
+ strategy: "fixed",
1630
+ value: selectedRule,
1631
+ onChange: handleRuleChange
1794
1632
  }, isNotEmpty(helpIconProps) && {
1795
1633
  labelProps: {
1796
1634
  helpIconProps: buildHelpIconProps(helpIconProps)
1797
1635
  }
1798
- }, {
1636
+ })), /*#__PURE__*/React.createElement(Input, _extends({
1637
+ autoFocus: autoFocus,
1799
1638
  "data-cy": "neeto-filters-".concat(hyphenate(key), "-filter"),
1800
- strategy: "fixed",
1801
- placeholder: t("neetoFilters.messages.selectOption", {
1639
+ label: !showRuleSelector && label,
1640
+ type: inputType,
1641
+ value: inputValue
1642
+ }, isNotEmpty(helpIconProps) && {
1643
+ labelProps: {
1644
+ helpIconProps: buildHelpIconProps(helpIconProps)
1645
+ }
1646
+ }, {
1647
+ placeholder: t("neetoFilters.messages.enterResource", {
1802
1648
  resource: label
1803
1649
  }),
1804
- onChange: handleChange
1650
+ onChange: function onChange(event) {
1651
+ return setInputValue(event.target.value);
1652
+ },
1653
+ onKeyDown: handleKeydown
1805
1654
  }, otherProps)));
1806
1655
  };
1807
- var Boolean$1 = /*#__PURE__*/React.memo(Boolean);
1808
1656
 
1809
- var Datetime = function Datetime(_ref) {
1657
+ var Time = function Time(_ref) {
1810
1658
  var column = _ref.column,
1811
1659
  filter = _ref.filter,
1812
1660
  handleApplyFilter = _ref.handleApplyFilter,
1813
1661
  autoFocus = _ref.autoFocus;
1814
- var _useState = useState(initializeDateRule(filter)),
1815
- _useState2 = _slicedToArray(_useState, 2),
1816
- selectedRule = _useState2[0],
1817
- setSelectedRule = _useState2[1];
1818
- var _useTranslation = useTranslation(),
1819
- t = _useTranslation.t;
1820
1662
  var key = column.key,
1821
1663
  _column$defaultType = column.defaultType,
1822
1664
  defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
1823
1665
  label = column.label,
1824
1666
  _column$helpIconProps = column.helpIconProps,
1825
1667
  helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
1826
- var isDatePickerShown = filter && isCustomDateRange(filter.value);
1827
1668
  var otherProps = getOtherProps(column);
1669
+ var value = buildSingleTimeValue(filter);
1670
+ var isCustomTimeRangeShown = filter && isCustomTimeRange(filter.value);
1671
+ var _useTranslation = useTranslation(),
1672
+ t = _useTranslation.t;
1828
1673
  var handleChange = function handleChange(option) {
1829
1674
  if (isEmpty(option) || isNil(option)) {
1830
1675
  handleApplyFilter({
1831
1676
  _delete: true
1832
1677
  });
1833
- setSelectedRule({});
1834
1678
  return;
1835
1679
  }
1836
- setSelectedRule(option);
1837
1680
  var updatedFilter = buildUpdatedFilter({
1838
1681
  column: column,
1839
1682
  defaultType: defaultType,
@@ -1841,38 +1684,37 @@ var Datetime = function Datetime(_ref) {
1841
1684
  });
1842
1685
  handleApplyFilter(updatedFilter);
1843
1686
  };
1844
- var handleDateRangeChange = function handleDateRangeChange(dates) {
1845
- if (isEmpty(dates) || isNil(dates)) {
1687
+ var handleTimeRangeChange = function handleTimeRangeChange(times) {
1688
+ if (hasInvalidTimes(times)) {
1846
1689
  handleApplyFilter({
1847
1690
  _delete: true
1848
1691
  });
1849
- setSelectedRule({});
1692
+ return;
1693
+ }
1694
+ if (isCustomTimeRangeShown && areCustomTimeRangeValuesNotValid(times)) {
1850
1695
  return;
1851
1696
  }
1852
1697
  var updatedFilter = buildUpdatedFilter({
1853
1698
  column: column,
1854
1699
  defaultType: defaultType,
1855
1700
  option: {
1856
- value: pluck("$d", buildDateValues(dates, selectedRule)).map(function (date) {
1857
- return date.toISOString();
1701
+ value: pluck("$d", times).map(function (time) {
1702
+ return time.toISOString();
1858
1703
  })
1859
1704
  }
1860
1705
  });
1861
1706
  handleApplyFilter(updatedFilter);
1862
1707
  };
1863
- useEffect(function () {
1864
- isNil(filter) && setSelectedRule({});
1865
- }, [filter]);
1866
1708
  return /*#__PURE__*/React.createElement("div", {
1867
1709
  className: "neeto-filters-pane-filter__item-wrapper"
1868
1710
  }, /*#__PURE__*/React.createElement(Select, _extends({
1869
1711
  autoFocus: autoFocus,
1870
1712
  label: label,
1713
+ value: value,
1871
1714
  isClearable: true,
1872
1715
  "data-cy": "neeto-filters-".concat(hyphenate(key), "-filter"),
1873
- options: DATE_OPTIONS,
1716
+ options: TIME_OPTIONS,
1874
1717
  strategy: "fixed",
1875
- value: selectedRule,
1876
1718
  placeholder: t("neetoFilters.messages.selectResource", {
1877
1719
  resource: label
1878
1720
  })
@@ -1882,529 +1724,1096 @@ var Datetime = function Datetime(_ref) {
1882
1724
  }
1883
1725
  }, {
1884
1726
  onChange: handleChange
1885
- })), isDatePickerShown && /*#__PURE__*/React.createElement(DatePicker, _extends({
1727
+ })), isCustomTimeRangeShown && /*#__PURE__*/React.createElement(TimePickerInput, _extends({
1728
+ className: "w-full",
1886
1729
  "data-cy": "neeto-filters-".concat(hyphenate(key), "-date-range"),
1887
- getPopupContainer: prop("parentNode"),
1888
- type: (selectedRule === null || selectedRule === void 0 ? void 0 : selectedRule.value) === "custom-date-range" ? "range" : "date",
1889
- value: getDateValue(filter === null || filter === void 0 ? void 0 : filter.value, selectedRule),
1890
- onChange: handleDateRangeChange
1730
+ type: "range",
1731
+ value: formatTime(filter.value, "range"),
1732
+ onChange: handleTimeRangeChange
1891
1733
  }, otherProps)));
1892
1734
  };
1893
- var Datetime$1 = /*#__PURE__*/React.memo(Datetime);
1735
+ var Time$1 = /*#__PURE__*/React.memo(Time);
1894
1736
 
1895
- var Dropdown = function Dropdown(_ref) {
1737
+ var Item = function Item(_ref) {
1896
1738
  var column = _ref.column,
1897
- filter = _ref.filter,
1898
- handleApplyFilter = _ref.handleApplyFilter,
1899
- autoFocus = _ref.autoFocus;
1739
+ filters = _ref.filters,
1740
+ onChange = _ref.onChange,
1741
+ autoFocus = _ref.autoFocus,
1742
+ _ref$onClose = _ref.onClose,
1743
+ onClose = _ref$onClose === void 0 ? noop : _ref$onClose;
1900
1744
  var key = column.key,
1901
- label = column.label,
1902
- values = column.values,
1903
- defaultValue = column.defaultValue,
1904
1745
  _column$defaultType = column.defaultType,
1905
- defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
1906
- _column$isClearable = column.isClearable,
1907
- isClearable = _column$isClearable === void 0 ? true : _column$isClearable,
1908
- _column$helpIconProps = column.helpIconProps,
1909
- helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
1910
- var otherProps = getOtherProps(column);
1911
- var options = buildDropdownOptions({
1912
- defaultType: defaultType,
1913
- filter: filter,
1914
- options: values
1915
- });
1916
- var value = buildDropdownValue({
1917
- defaultType: defaultType,
1918
- filter: filter,
1919
- options: options
1920
- });
1921
- var _useTranslation = useTranslation(),
1922
- t = _useTranslation.t;
1923
- var handleChange = function handleChange(option) {
1924
- if (isEmpty(option) || isNil(option)) {
1925
- handleApplyFilter({
1926
- _delete: true
1927
- });
1928
- return;
1929
- }
1930
- var updatedFilter = buildUpdatedFilter({
1746
+ defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType;
1747
+ var filter = useMemo(function () {
1748
+ return findBy({
1749
+ key: key
1750
+ }, filters);
1751
+ }, [filters, key]);
1752
+ var handleApplyFilter = function handleApplyFilter(updatedFilter) {
1753
+ if (updatedFilter._delete) onChange(removeBy({
1754
+ key: key
1755
+ }, filters));else if (!filter) onChange(append(updatedFilter, filters));else onChange(replaceBy({
1756
+ key: key
1757
+ }, updatedFilter, filters));
1758
+ };
1759
+ if (isText(defaultType) || isDigit(defaultType)) {
1760
+ return /*#__PURE__*/React.createElement(Text, {
1761
+ autoFocus: autoFocus,
1931
1762
  column: column,
1932
- defaultType: defaultType,
1933
- option: option
1763
+ filter: filter,
1764
+ filters: filters,
1765
+ handleApplyFilter: handleApplyFilter,
1766
+ onClose: onClose
1934
1767
  });
1935
- handleApplyFilter(updatedFilter);
1936
- };
1937
- return /*#__PURE__*/React.createElement("div", {
1938
- className: "neeto-filters-pane-filter__item-wrapper"
1939
- }, /*#__PURE__*/React.createElement(Select, _extends({
1768
+ }
1769
+ if (isDate(defaultType)) {
1770
+ return /*#__PURE__*/React.createElement(Datetime$1, {
1771
+ autoFocus: autoFocus,
1772
+ column: column,
1773
+ filter: filter,
1774
+ handleApplyFilter: handleApplyFilter
1775
+ });
1776
+ }
1777
+ if (isTime(defaultType)) {
1778
+ return /*#__PURE__*/React.createElement(Time$1, {
1779
+ autoFocus: autoFocus,
1780
+ column: column,
1781
+ filter: filter,
1782
+ handleApplyFilter: handleApplyFilter
1783
+ });
1784
+ }
1785
+ if (isSingleDate(defaultType)) {
1786
+ return /*#__PURE__*/React.createElement(SingleDatetime, {
1787
+ autoFocus: autoFocus,
1788
+ column: column,
1789
+ filter: filter,
1790
+ filters: filters,
1791
+ handleApplyFilter: handleApplyFilter
1792
+ });
1793
+ }
1794
+ if (isSingleTime(defaultType)) {
1795
+ return /*#__PURE__*/React.createElement(SingleTime, {
1796
+ autoFocus: autoFocus,
1797
+ column: column,
1798
+ filter: filter,
1799
+ filters: filters,
1800
+ handleApplyFilter: handleApplyFilter
1801
+ });
1802
+ }
1803
+ if (isBoolean(defaultType) || isCheckbox(defaultType)) {
1804
+ return /*#__PURE__*/React.createElement(Boolean$1, {
1805
+ autoFocus: autoFocus,
1806
+ column: column,
1807
+ filter: filter,
1808
+ handleApplyFilter: handleApplyFilter
1809
+ });
1810
+ }
1811
+ return /*#__PURE__*/React.createElement(Dropdown$1, {
1940
1812
  autoFocus: autoFocus,
1941
- label: label,
1942
- options: options,
1943
- value: value,
1944
- "data-cy": "neeto-filters-".concat(hyphenate(key), "-filter"),
1945
- isClearable: !defaultValue && isClearable,
1946
- isMulti: isMulti(defaultType),
1947
- strategy: "fixed",
1948
- placeholder: t("neetoFilters.messages.selectResource", {
1949
- resource: label
1950
- })
1951
- }, isNotEmpty(helpIconProps) && {
1952
- labelProps: {
1953
- helpIconProps: buildHelpIconProps(helpIconProps)
1954
- }
1955
- }, {
1956
- onChange: handleChange
1957
- }, otherProps)));
1813
+ column: column,
1814
+ filter: filter,
1815
+ filters: filters,
1816
+ handleApplyFilter: handleApplyFilter
1817
+ });
1958
1818
  };
1959
- var Dropdown$1 = /*#__PURE__*/React.memo(Dropdown);
1960
1819
 
1961
- var SingleDatetime = function SingleDatetime(_ref) {
1962
- var column = _ref.column,
1963
- filter = _ref.filter,
1820
+ var STEPS = {
1821
+ ADD: "add",
1822
+ COLUMN: "column",
1823
+ VALUE: "value"
1824
+ };
1825
+
1826
+ var AddFilter = function AddFilter(_ref) {
1827
+ var _findBy;
1828
+ var columns = _ref.columns,
1964
1829
  filters = _ref.filters,
1965
- handleApplyFilter = _ref.handleApplyFilter,
1966
- autoFocus = _ref.autoFocus;
1967
- var _useState = useState(function () {
1968
- return findBy({
1969
- value: filter === null || filter === void 0 ? void 0 : filter.rule
1970
- }, SINGLE_DATE_OPTIONS) || SINGLE_DATE_OPTIONS[0];
1830
+ handleChange = _ref.handleChange,
1831
+ handleClearFilter = _ref.handleClearFilter,
1832
+ _ref$disabled = _ref.disabled,
1833
+ disabled = _ref$disabled === void 0 ? false : _ref$disabled;
1834
+ var _useTranslation = useTranslation(),
1835
+ t = _useTranslation.t;
1836
+ var _useState = useState({
1837
+ step: STEPS.ADD,
1838
+ column: {}
1971
1839
  }),
1972
1840
  _useState2 = _slicedToArray(_useState, 2),
1973
- selectedRule = _useState2[0],
1974
- setSelectedRule = _useState2[1];
1975
- var key = column.key,
1976
- _column$defaultType = column.defaultType,
1977
- defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
1978
- label = column.label,
1979
- _column$helpIconProps = column.helpIconProps,
1980
- helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
1981
- var otherProps = getOtherProps(column);
1982
- var datePickerType = selectedRule.value === "between" ? "range" : "date";
1983
- var value = filter === null || filter === void 0 ? void 0 : filter.value;
1984
-
1985
- // Reset states when "Clear filters" button is clicked.
1986
- useEffect(function () {
1987
- if (!isEmpty(filters)) return;
1988
- setSelectedRule(SINGLE_DATE_OPTIONS[0]);
1989
- }, [filters]);
1990
- var handleRuleChange = function handleRuleChange(ruleOption) {
1991
- setSelectedRule(ruleOption);
1992
-
1993
- // Clear value if switched between incompatable types
1994
- var updateValue = value;
1995
- if (datePickerType === "range" && ruleOption.value !== "between" || datePickerType === "date" && ruleOption.value === "between") {
1996
- updateValue = "";
1997
- }
1998
- var updatedFilter = buildUpdatedFilter({
1999
- column: column,
2000
- defaultType: defaultType,
2001
- option: {},
2002
- rule: ruleOption.value,
2003
- value: updateValue
2004
- });
2005
- handleApplyFilter(updatedFilter);
2006
- };
2007
- var handleChange = function handleChange(dates) {
2008
- if (isEmpty(dates) || isNil(dates)) {
2009
- handleApplyFilter({
2010
- _delete: true
1841
+ selectedColumn = _useState2[0],
1842
+ setSelectedColumn = _useState2[1];
1843
+
1844
+ // Disable the add button when
1845
+ // 1. No value is entered for previous filter
1846
+ // 2. There are no more columns
1847
+ var disableAddButton = selectedColumn.step !== STEPS.ADD && isNotPresent((_findBy = findBy({
1848
+ key: selectedColumn.column.key
1849
+ }, filters)) === null || _findBy === void 0 ? void 0 : _findBy.value) || isEmpty(columns);
1850
+ return /*#__PURE__*/React.createElement(React.Fragment, null, selectedColumn.step !== STEPS.ADD ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
1851
+ className: "flex w-full gap-4"
1852
+ }, selectedColumn.step === STEPS.COLUMN && /*#__PURE__*/React.createElement(Select, {
1853
+ isSearchable: true,
1854
+ label: t("neetoFilters.segments.newFilter"),
1855
+ optionRemapping: {
1856
+ label: "label",
1857
+ value: "key"
1858
+ },
1859
+ options: columns,
1860
+ placeholder: t("neetoFilters.segments.selectFilter"),
1861
+ onChange: function onChange(column) {
1862
+ return setSelectedColumn({
1863
+ step: STEPS.VALUE,
1864
+ column: column
2011
1865
  });
2012
- return;
2013
- }
2014
- var value = datePickerType === "range" ? pluck("$d", dates).map(function (date) {
2015
- return date.toISOString();
2016
- }) : dates["$d"];
2017
- var updatedFilter = buildUpdatedFilter({
2018
- column: column,
2019
- defaultType: defaultType,
2020
- option: {},
2021
- rule: selectedRule.value,
2022
- value: value
2023
- });
2024
- handleApplyFilter(updatedFilter);
2025
- };
2026
- return /*#__PURE__*/React.createElement("div", {
2027
- className: "neeto-filters-pane-filter__item-wrapper"
2028
- }, /*#__PURE__*/React.createElement(Select, _extends({
2029
- label: label,
2030
- "data-cy": "neeto-filters-".concat(hyphenate(key), "-filter-rule"),
2031
- defaultValue: SINGLE_DATE_OPTIONS[0],
2032
- options: SINGLE_DATE_OPTIONS,
2033
- strategy: "fixed",
2034
- value: selectedRule
2035
- }, isNotEmpty(helpIconProps) && {
2036
- labelProps: {
2037
- helpIconProps: buildHelpIconProps(helpIconProps)
2038
1866
  }
2039
- }, {
2040
- onChange: handleRuleChange
2041
- })), /*#__PURE__*/React.createElement(DatePicker, _extends({
2042
- autoFocus: autoFocus,
2043
- value: value,
2044
- "data-cy": "neeto-filters-".concat(hyphenate(key), "-filter"),
2045
- getPopupContainer: prop("parentNode"),
2046
- type: datePickerType,
1867
+ }), selectedColumn.step === STEPS.VALUE && /*#__PURE__*/React.createElement(Item, {
1868
+ filters: filters,
1869
+ autoFocus: true,
1870
+ column: selectedColumn.column,
2047
1871
  onChange: handleChange
2048
- }, otherProps)));
1872
+ }), /*#__PURE__*/React.createElement(Button, {
1873
+ className: "mt-6 self-center",
1874
+ icon: Delete$1,
1875
+ style: "text",
1876
+ onClick: function onClick() {
1877
+ handleClearFilter(selectedColumn.column);
1878
+ setSelectedColumn(assoc("step", STEPS.ADD));
1879
+ }
1880
+ })), /*#__PURE__*/React.createElement(AddFilter, {
1881
+ filters: filters,
1882
+ handleChange: handleChange,
1883
+ handleClearFilter: handleClearFilter,
1884
+ columns: columns.filter(function (_ref2) {
1885
+ var key = _ref2.key;
1886
+ return !existsBy({
1887
+ key: key
1888
+ }, filters);
1889
+ }),
1890
+ disabled: disableAddButton
1891
+ })) : /*#__PURE__*/React.createElement(Button, {
1892
+ disabled: disabled,
1893
+ className: "self-start",
1894
+ icon: Plus,
1895
+ iconPosition: "left",
1896
+ label: t("neetoFilters.segments.addFilter"),
1897
+ style: "link",
1898
+ onClick: function onClick() {
1899
+ return setSelectedColumn(assoc("step", STEPS.COLUMN));
1900
+ }
1901
+ }));
2049
1902
  };
2050
1903
 
2051
- var SingleTime = function SingleTime(_ref) {
2052
- var column = _ref.column,
2053
- filter = _ref.filter,
1904
+ var buildSegmentsValidationSchema = function buildSegmentsValidationSchema(defaultSegmentName) {
1905
+ return yup.object({
1906
+ name: yup.string().trim().required(t$1("neetoFilters.segments.nameIsRequired")).test({
1907
+ name: "not-default-segment-name",
1908
+ test: function test(value) {
1909
+ return (value === null || value === void 0 ? void 0 : value.toLocaleLowerCase()) !== defaultSegmentName.toLocaleLowerCase();
1910
+ },
1911
+ message: t$1("neetoFilters.segments.reservedNameErrorMessage")
1912
+ })
1913
+ });
1914
+ };
1915
+
1916
+ function ownKeys$4(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; }
1917
+ function _objectSpread$4(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$4(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$4(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1918
+ var SegmentForm = function SegmentForm(_ref) {
1919
+ var _ref$isEdit = _ref.isEdit,
1920
+ isEdit = _ref$isEdit === void 0 ? false : _ref$isEdit,
1921
+ segmentFormInitialRef = _ref.segmentFormInitialRef,
1922
+ isOpen = _ref.isOpen,
1923
+ onClose = _ref.onClose,
1924
+ isSubmitting = _ref.isSubmitting,
1925
+ handleSubmit = _ref.handleSubmit,
1926
+ defaultSegmentName = _ref.defaultSegmentName,
1927
+ initialValues = _ref.initialValues,
1928
+ customFilters = _ref.customFilters,
1929
+ columns = _ref.columns,
2054
1930
  filters = _ref.filters,
2055
- handleApplyFilter = _ref.handleApplyFilter,
2056
- autoFocus = _ref.autoFocus;
2057
- var _useState = useState(function () {
2058
- return findBy({
2059
- value: filter === null || filter === void 0 ? void 0 : filter.rule
2060
- }, SINGLE_TIME_OPTIONS) || SINGLE_TIME_OPTIONS[0];
1931
+ childrenKeys = _ref.childrenKeys;
1932
+ var history = useHistory();
1933
+ var _useTranslation = useTranslation(),
1934
+ t = _useTranslation.t;
1935
+ var _buildFilteredColumns = buildFilteredColumns({
1936
+ searchTerm: "",
1937
+ columns: columns
2061
1938
  }),
2062
- _useState2 = _slicedToArray(_useState, 2),
2063
- selectedRule = _useState2[0],
2064
- setSelectedRule = _useState2[1];
2065
- var key = column.key,
2066
- _column$defaultType = column.defaultType,
2067
- defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
2068
- label = column.label,
2069
- _column$helpIconProps = column.helpIconProps,
2070
- helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
2071
- var otherProps = getOtherProps(column);
2072
- var timePickerType = selectedRule.value === "between" ? "range" : "time";
2073
- var value = filter === null || filter === void 0 ? void 0 : filter.value;
2074
- useEffect(function () {
2075
- if (!isEmpty(filters)) return;
2076
- setSelectedRule(SINGLE_TIME_OPTIONS[0]);
2077
- }, [filters]);
2078
- var handleRuleChange = function handleRuleChange(ruleOption) {
2079
- setSelectedRule(ruleOption);
2080
-
2081
- // Clear value if switched between incompatible types
2082
- var updateValue = value;
2083
- if (timePickerType === "range" && ruleOption.value !== "between" || timePickerType === "time" && ruleOption.value === "between") {
2084
- updateValue = "";
1939
+ _buildFilteredColumns2 = _buildFilteredColumns.groupedColumns,
1940
+ groupedColumns = _buildFilteredColumns2 === void 0 ? [] : _buildFilteredColumns2,
1941
+ _buildFilteredColumns3 = _buildFilteredColumns.ungroupedColumns,
1942
+ ungroupedColumns = _buildFilteredColumns3 === void 0 ? [] : _buildFilteredColumns3;
1943
+ var handleChange = function handleChange(newFilters) {
1944
+ var isClearAll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
1945
+ var params = buildUrlFromFilters(_objectSpread$4({
1946
+ columns: columns,
1947
+ filters: newFilters
1948
+ }, isClearAll && {
1949
+ isClearAll: true,
1950
+ childrenKeys: childrenKeys
1951
+ }));
1952
+ history.push({
1953
+ search: params
1954
+ });
1955
+ };
1956
+ var handleClearFilter = function handleClearFilter(column, values, setFieldValue) {
1957
+ var formState = [{
1958
+ conditions: removeBy({
1959
+ key: column.key
1960
+ }, values.filters[0].conditions)
1961
+ }];
1962
+ var globalState = removeBy({
1963
+ key: column.key
1964
+ }, filters);
1965
+ setFieldValue("filters", formState);
1966
+ handleChange(globalState);
1967
+ };
1968
+ return /*#__PURE__*/React.createElement(Pane$1, {
1969
+ isOpen: isOpen,
1970
+ onClose: onClose,
1971
+ initialFocusRef: segmentFormInitialRef
1972
+ }, /*#__PURE__*/React.createElement(Pane$1.Header, null, /*#__PURE__*/React.createElement(Typography, {
1973
+ style: "h2",
1974
+ weight: "semibold"
1975
+ }, isEdit ? t("neetoFilters.segments.editSegment") : t("neetoFilters.segments.addNewSegment"))), /*#__PURE__*/React.createElement(Form, {
1976
+ className: "w-full",
1977
+ formProps: {
1978
+ noValidate: true
1979
+ },
1980
+ formikProps: {
1981
+ initialValues: initialValues,
1982
+ validateOnChange: true,
1983
+ validateOnBlur: true,
1984
+ validationSchema: buildSegmentsValidationSchema(defaultSegmentName),
1985
+ onSubmit: handleSubmit
2085
1986
  }
2086
- var updatedFilter = buildUpdatedFilter({
2087
- column: column,
2088
- defaultType: defaultType,
2089
- option: {},
2090
- rule: ruleOption.value,
2091
- value: updateValue
1987
+ }, function (_ref2) {
1988
+ var errors = _ref2.errors,
1989
+ values = _ref2.values,
1990
+ setFieldValue = _ref2.setFieldValue;
1991
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Pane$1.Body, null, /*#__PURE__*/React.createElement(Input$1, {
1992
+ className: "w-full flex-grow-0",
1993
+ error: errors.name,
1994
+ label: t("neetoFilters.segments.name"),
1995
+ name: "name",
1996
+ placeholder: t("neetoFilters.segments.segmentName"),
1997
+ ref: segmentFormInitialRef
1998
+ }), /*#__PURE__*/React.createElement(Typography, {
1999
+ className: "mb-2 mt-4",
2000
+ style: "h4"
2001
+ }, t("neetoFilters.common.filters")), /*#__PURE__*/React.createElement("div", {
2002
+ className: "neeto-filters-pane-filter__body flex w-full flex-col gap-5"
2003
+ }, ungroupedColumns.filter(function (_ref3) {
2004
+ var key = _ref3.key;
2005
+ return _existsBy({
2006
+ key: key
2007
+ }, values.filters[0].conditions);
2008
+ }).map(function (column) {
2009
+ return /*#__PURE__*/React.createElement("div", {
2010
+ className: "flex w-full gap-4",
2011
+ key: column.key
2012
+ }, /*#__PURE__*/React.createElement(Item, {
2013
+ column: column,
2014
+ filters: filters,
2015
+ autoFocus: column.key === isOpen,
2016
+ onChange: function onChange(filters) {
2017
+ setFieldValue("filters", [{
2018
+ conditions: filters
2019
+ }]);
2020
+ handleChange(filters);
2021
+ }
2022
+ }), /*#__PURE__*/React.createElement(Button, {
2023
+ className: "mt-6 self-center",
2024
+ icon: Delete$1,
2025
+ style: "text",
2026
+ onClick: function onClick() {
2027
+ return handleClearFilter(column, values, setFieldValue);
2028
+ }
2029
+ }));
2030
+ }), isPresent(groupedColumns) && /*#__PURE__*/React.createElement(Accordion, null, groupedColumns.map(function (_ref4) {
2031
+ var group = _ref4.group,
2032
+ columns = _ref4.columns;
2033
+ return /*#__PURE__*/React.createElement(Accordion.Item, {
2034
+ className: "accordion_item",
2035
+ key: group,
2036
+ title: group
2037
+ }, columns.map(function (column) {
2038
+ return /*#__PURE__*/React.createElement(Item, {
2039
+ column: column,
2040
+ filters: filters,
2041
+ autoFocus: column.key === isOpen,
2042
+ key: column.key,
2043
+ onChange: handleChange
2044
+ });
2045
+ }));
2046
+ })), isEmpty([].concat(_toConsumableArray(groupedColumns), _toConsumableArray(ungroupedColumns))) && /*#__PURE__*/React.createElement(Typography, {
2047
+ style: "body2"
2048
+ }, t("neetoFilters.messages.noResourcesFound", {
2049
+ resources: t("neetoFilters.common.columns")
2050
+ })), customFilters, /*#__PURE__*/React.createElement(AddFilter, {
2051
+ filters: filters,
2052
+ handleChange: handleChange,
2053
+ columns: ungroupedColumns.filter(function (_ref5) {
2054
+ var key = _ref5.key;
2055
+ return !existsBy({
2056
+ key: key
2057
+ }, filters);
2058
+ }),
2059
+ handleClearFilter: function handleClearFilter(_ref6) {
2060
+ var key = _ref6.key;
2061
+ return handleChange(removeBy({
2062
+ key: key
2063
+ }, filters));
2064
+ }
2065
+ }))), /*#__PURE__*/React.createElement(Pane$1.Footer, {
2066
+ className: "flex items-center space-x-2"
2067
+ }, /*#__PURE__*/React.createElement(ActionBlock, {
2068
+ cancelButtonProps: {
2069
+ onClick: onClose,
2070
+ disabled: false
2071
+ },
2072
+ submitButtonProps: {
2073
+ disabled: isSubmitting || isEmpty(filters),
2074
+ loading: isSubmitting
2075
+ }
2076
+ })));
2077
+ }));
2078
+ };
2079
+
2080
+ var QUERY_KEYS = {
2081
+ SEGMENTS_LIST: "segments-list"
2082
+ };
2083
+ var SEGMENTS_STALE_TIME = 900000; // 15 mins
2084
+
2085
+ var DEFAULT_SEGMENTS_CACHE = {
2086
+ segments: []
2087
+ };
2088
+ var SEGMENT_ACTIONS$1 = {
2089
+ EDIT: "edit",
2090
+ CREATE: "create"
2091
+ };
2092
+
2093
+ var SHORTCUTS = {
2094
+ closePane: {
2095
+ sequence: "escape",
2096
+ description: t$1("neetoFilters.shortcuts.closePane")
2097
+ },
2098
+ deleteBlock: {
2099
+ sequence: "backspace",
2100
+ description: t$1("neetoFilters.shortcuts.deleteBlock")
2101
+ },
2102
+ openFilterPane: {
2103
+ sequence: "enter",
2104
+ description: t$1("neetoFilters.shortcuts.openFilterPane")
2105
+ }
2106
+ };
2107
+
2108
+ var buildCustomDateValue = function buildCustomDateValue(value) {
2109
+ var isBeforeOrAfter = Math.abs(dayjs(value[1]).diff(dayjs(value[0]), "year")) >= 90;
2110
+ if (isBeforeOrAfter) {
2111
+ var currentMoment = dayjs();
2112
+ var diffWithStart = Math.abs(currentMoment.diff(dayjs(value[0]), "year"));
2113
+ var diffWithEnd = Math.abs(currentMoment.diff(dayjs(value[1]), "year"));
2114
+ return diffWithStart < diffWithEnd ? "after-".concat(dateFormat.date(dayjs(value[0]).subtract(1, "day"))) : "before-".concat(dateFormat.date(dayjs(value[1]).add(1, "day")));
2115
+ }
2116
+ return value.map(dateFormat.date).join(" - ");
2117
+ };
2118
+ var buildFilterValue = function buildFilterValue(filter) {
2119
+ var _findBy2;
2120
+ var _filter$defaultType = filter.defaultType,
2121
+ defaultType = _filter$defaultType === void 0 ? filter.type : _filter$defaultType,
2122
+ value = filter.value,
2123
+ rule = filter.rule,
2124
+ _filter$values = filter.values,
2125
+ initialValues = _filter$values === void 0 ? [] : _filter$values;
2126
+ var values = initialValues.map(modify("value", function (value) {
2127
+ return value.toString();
2128
+ }));
2129
+ if (isDate(defaultType) && isCustomDateRange(value)) {
2130
+ return buildCustomDateValue(value);
2131
+ } else if (isTime(defaultType) && isCustomTimeRange(value)) {
2132
+ return value.map(dateFormat.time).join(" - ");
2133
+ } else if (isDate(defaultType) || isTime(defaultType)) {
2134
+ return humanize(value);
2135
+ } else if (isMulti(defaultType)) {
2136
+ return value.map(function (value) {
2137
+ var _findBy;
2138
+ return ((_findBy = findBy({
2139
+ value: value
2140
+ }, values)) === null || _findBy === void 0 ? void 0 : _findBy.label) || value;
2141
+ }).join(", ");
2142
+ } else if (isSingleDate(defaultType)) {
2143
+ return rule === "between" ? value.map(dateFormat.date).join(" - ") : dateFormat.date(value);
2144
+ } else if (isSingleTime(defaultType)) {
2145
+ return rule === "between" ? value.map(dateFormat.time).join(" - ") : dateFormat.time(value);
2146
+ } else if (isBoolean(defaultType)) {
2147
+ return getLabelFromBool({
2148
+ value: value,
2149
+ values: values
2092
2150
  });
2093
- handleApplyFilter(updatedFilter);
2151
+ }
2152
+ return ((_findBy2 = findBy({
2153
+ value: value
2154
+ }, values)) === null || _findBy2 === void 0 ? void 0 : _findBy2.label) || value;
2155
+ };
2156
+ var buildRuleValue = function buildRuleValue(_ref) {
2157
+ var rule = _ref.rule,
2158
+ defaultType = _ref.defaultType;
2159
+ if (isText(defaultType)) {
2160
+ return findBy({
2161
+ value: rule
2162
+ }, TEXT_RULES).label;
2163
+ } else if (isDigit(defaultType)) {
2164
+ return findBy({
2165
+ value: rule
2166
+ }, NUMBER_RULES).label;
2167
+ } else if (isSingleDate(defaultType)) {
2168
+ return findBy({
2169
+ value: rule
2170
+ }, SINGLE_DATE_OPTIONS).label;
2171
+ } else if (isSingleTime(defaultType)) {
2172
+ return findBy({
2173
+ value: rule
2174
+ }, SINGLE_TIME_OPTIONS).label;
2175
+ } else if (isMulti(defaultType) || isSingle(defaultType)) {
2176
+ return isRuleEmpty(rule) ? t$1("neetoFilters.rules.isEmpty") : "";
2177
+ }
2178
+ return "";
2179
+ };
2180
+ var hasOnlyKeywordFilter = function hasOnlyKeywordFilter(filters) {
2181
+ return filters.length === 1 && filters[0].key === SEARCH_TERM_KEY;
2182
+ };
2183
+ var deepCompare = function deepCompare(filters1, filters2) {
2184
+ var comparisonHelper = function comparisonHelper(filters) {
2185
+ return sortBy(prop("key"), removeBy({
2186
+ key: SEARCH_TERM_KEY
2187
+ }, project(["key", "rule", "value"], filters)));
2094
2188
  };
2095
- var handleChange = function handleChange(times) {
2096
- if (hasInvalidTimes(times)) {
2097
- handleApplyFilter({
2098
- _delete: true
2099
- });
2100
- return;
2189
+ return notEqualsDeep(comparisonHelper(filters1), comparisonHelper(filters2));
2190
+ };
2191
+
2192
+ var Block = function Block(_ref) {
2193
+ var filter = _ref.filter,
2194
+ handleDelete = _ref.handleDelete,
2195
+ setIsPaneOpen = _ref.setIsPaneOpen;
2196
+ var key = filter.key,
2197
+ _filter$defaultType = filter.defaultType,
2198
+ defaultType = _filter$defaultType === void 0 ? filter.type : _filter$defaultType,
2199
+ label = filter.label,
2200
+ rule = filter.rule,
2201
+ defaultValue = filter.defaultValue;
2202
+ var filterValue = buildFilterValue(filter);
2203
+ var ruleContent = buildRuleValue({
2204
+ rule: rule,
2205
+ defaultType: defaultType
2206
+ });
2207
+ var blockLength = label.length + ruleContent.length + filterValue.length;
2208
+ var toolTipDisabled = blockLength <= 50;
2209
+ var blockContent = !toolTipDisabled ? "".concat(filterValue.slice(0, 50 - blockLength), "...") : filterValue;
2210
+ var deleteBlockHotKeyRef = useHotkeys(SHORTCUTS.deleteBlock.sequence, function () {
2211
+ return handleDelete(key);
2212
+ }, {
2213
+ mode: "scoped"
2214
+ });
2215
+ var openFilterPaneHotKeyRef = useHotkeys(SHORTCUTS.openFilterPane.sequence, function () {
2216
+ return setIsPaneOpen(key);
2217
+ }, {
2218
+ mode: "scoped"
2219
+ });
2220
+ return /*#__PURE__*/React.createElement(Tooltip, {
2221
+ content: filterValue,
2222
+ disabled: toolTipDisabled,
2223
+ position: "bottom",
2224
+ theme: "light"
2225
+ }, /*#__PURE__*/React.createElement("div", {
2226
+ className: "neeto-filters-bar__block",
2227
+ "data-cy": "neeto-filters-".concat(hyphenate(key), "-block"),
2228
+ tabIndex: 0,
2229
+ ref: function ref(node) {
2230
+ deleteBlockHotKeyRef.current = node;
2231
+ openFilterPaneHotKeyRef.current = node;
2232
+ },
2233
+ onClick: function onClick() {
2234
+ return setIsPaneOpen(key);
2235
+ }
2236
+ }, /*#__PURE__*/React.createElement(Typography, {
2237
+ style: "body2"
2238
+ }, label, ":"), /*#__PURE__*/React.createElement(Typography, {
2239
+ className: "neeto-ui-text-gray-600",
2240
+ style: "body2"
2241
+ }, ruleContent), !isRuleEmpty(rule) && /*#__PURE__*/React.createElement(Typography, {
2242
+ style: "body2"
2243
+ }, blockContent), !defaultValue && /*#__PURE__*/React.createElement("div", {
2244
+ className: "neeto-filters-bar__block-close"
2245
+ }, /*#__PURE__*/React.createElement(Close, {
2246
+ "data-cy": "neeto-filters-".concat(hyphenate(key), "-block-close-btn"),
2247
+ size: 16,
2248
+ strokeWidth: 2,
2249
+ onClick: function onClick(event) {
2250
+ event.stopPropagation();
2251
+ handleDelete(key);
2252
+ }
2253
+ }))));
2254
+ };
2255
+
2256
+ var ChildBlock = function ChildBlock(_ref) {
2257
+ var childKey = _ref.childKey,
2258
+ setIsPaneOpen = _ref.setIsPaneOpen,
2259
+ handleDelete = _ref.handleDelete;
2260
+ var deleteBlockHotKeyRef = useHotkeys(SHORTCUTS.deleteBlock.sequence, function () {
2261
+ return handleDelete(childKey);
2262
+ }, {
2263
+ mode: "scoped"
2264
+ });
2265
+ var openFilterPaneHotKeyRef = useHotkeys(SHORTCUTS.openFilterPane.sequence, function () {
2266
+ return setIsPaneOpen(childKey);
2267
+ }, {
2268
+ mode: "scoped"
2269
+ });
2270
+ return /*#__PURE__*/React.createElement("div", {
2271
+ className: "neeto-filters-bar__block",
2272
+ "data-cy": "neeto-filters-".concat(hyphenate(childKey), "-block"),
2273
+ tabIndex: 0,
2274
+ ref: function ref(node) {
2275
+ deleteBlockHotKeyRef.current = node;
2276
+ openFilterPaneHotKeyRef.current = node;
2277
+ },
2278
+ onClick: function onClick() {
2279
+ return setIsPaneOpen(childKey);
2280
+ }
2281
+ }, /*#__PURE__*/React.createElement(Typography, {
2282
+ style: "body2",
2283
+ weight: "medium"
2284
+ }, childKey), /*#__PURE__*/React.createElement("div", {
2285
+ className: "neeto-filters-bar__block-close"
2286
+ }, /*#__PURE__*/React.createElement(Close, {
2287
+ "data-cy": "neeto-filters-".concat(hyphenate(childKey), "-block-close-btn"),
2288
+ size: 16,
2289
+ strokeWidth: 2,
2290
+ onClick: function onClick(event) {
2291
+ event.stopPropagation();
2292
+ handleDelete(childKey);
2101
2293
  }
2102
- if (timePickerType === "range" && areCustomTimeRangeValuesNotValid(times)) {
2294
+ })));
2295
+ };
2296
+
2297
+ var FilterBar = function FilterBar(_ref) {
2298
+ var entity = _ref.entity,
2299
+ filters = _ref.filters,
2300
+ setIsSavePaneOpen = _ref.setIsSavePaneOpen,
2301
+ setIsPaneOpen = _ref.setIsPaneOpen,
2302
+ childrenKeys = _ref.childrenKeys,
2303
+ nonHiddenFilters = _ref.nonHiddenFilters,
2304
+ childrenFiltersApplied = _ref.childrenFiltersApplied,
2305
+ keywordFilter = _ref.keywordFilter,
2306
+ handleApplyFilters = _ref.handleApplyFilters;
2307
+ var _useTranslation = useTranslation(),
2308
+ t = _useTranslation.t;
2309
+ var history = useHistory$1();
2310
+ var searchParams = useQueryParams({
2311
+ toCamelCase: false
2312
+ });
2313
+ var handleDelete = function handleDelete(key) {
2314
+ if (key === SEARCH_TERM_KEY) {
2315
+ var params = omit([SEARCH_TERM_KEY], getSnakeCasedQueryParams());
2316
+ var pathname = window.location.pathname;
2317
+ history.push(buildUrl(pathname, params));
2103
2318
  return;
2104
2319
  }
2105
- var value = timePickerType === "range" ? pluck("$d", times).map(function (time) {
2106
- return time.toISOString();
2107
- }) : times["$d"].toISOString();
2108
- var updatedFilter = buildUpdatedFilter({
2109
- column: column,
2110
- defaultType: defaultType,
2111
- option: {},
2112
- rule: selectedRule.value,
2113
- value: value
2114
- });
2115
- handleApplyFilter(updatedFilter);
2320
+ if (childrenKeys.includes(key)) {
2321
+ var _params = omit([key], getSnakeCasedQueryParams());
2322
+ var _pathname = window.location.pathname;
2323
+ history.push(buildUrl(_pathname, _params));
2324
+ }
2325
+ var newFilters = removeBy({
2326
+ key: key
2327
+ }, filters);
2328
+ handleApplyFilters(newFilters);
2116
2329
  };
2117
- var formattedTime = formatTime(value, timePickerType);
2118
- return /*#__PURE__*/React.createElement("div", {
2119
- className: "neeto-filters-pane-filter__item-wrapper"
2120
- }, /*#__PURE__*/React.createElement(Select, _extends({
2121
- label: label,
2122
- defaultValue: SINGLE_TIME_OPTIONS[0],
2123
- options: SINGLE_TIME_OPTIONS,
2124
- strategy: "fixed",
2125
- value: selectedRule
2126
- }, isNotEmpty(helpIconProps) && {
2127
- labelProps: {
2128
- helpIconProps: buildHelpIconProps(helpIconProps)
2330
+ var handleClearAll = function handleClearAll() {
2331
+ var params = isKeywordFilterPresent(keywordFilter) ? omit([SEARCH_TERM_KEY], getSnakeCasedQueryParams()) : getSnakeCasedQueryParams();
2332
+ var pathname = window.location.pathname;
2333
+ history.push(buildUrl(pathname, params));
2334
+ handleApplyFilters([], true);
2335
+ };
2336
+ var hideClearButton = nonHiddenFilters.every(function (_ref2) {
2337
+ var defaultValue = _ref2.defaultValue,
2338
+ isClearable = _ref2.isClearable;
2339
+ return defaultValue && !isClearable;
2340
+ }) && !childrenFiltersApplied;
2341
+ return /*#__PURE__*/React.createElement(React.Fragment, null, nonHiddenFilters.map(function (filter) {
2342
+ var _filter$suffixCompone;
2343
+ return /*#__PURE__*/React.createElement(React.Fragment, {
2344
+ key: filter.key
2345
+ }, /*#__PURE__*/React.createElement(Block, {
2346
+ filter: filter,
2347
+ handleDelete: handleDelete,
2348
+ setIsPaneOpen: setIsPaneOpen
2349
+ }), (_filter$suffixCompone = filter.suffixComponent) === null || _filter$suffixCompone === void 0 ? void 0 : _filter$suffixCompone.call(filter), /*#__PURE__*/React.createElement("div", {
2350
+ className: "neeto-filters-bar--separator"
2351
+ }));
2352
+ }), childrenKeys.filter(function (childKey) {
2353
+ return has(childKey, searchParams);
2354
+ }).map(function (childKey) {
2355
+ return /*#__PURE__*/React.createElement(React.Fragment, {
2356
+ key: childKey
2357
+ }, /*#__PURE__*/React.createElement(ChildBlock, {
2358
+ childKey: childKey,
2359
+ handleDelete: handleDelete,
2360
+ setIsPaneOpen: setIsPaneOpen
2361
+ }), /*#__PURE__*/React.createElement("div", {
2362
+ className: "neeto-filters-bar--separator"
2363
+ }));
2364
+ }), /*#__PURE__*/React.createElement("div", {
2365
+ className: "flex items-center gap-x-2"
2366
+ }, isPresent(entity) && !hasOnlyKeywordFilter(filters) && /*#__PURE__*/React.createElement(Button, {
2367
+ "data-cy": "save-segment-button",
2368
+ label: t("neetoFilters.segments.saveAsNewSegment"),
2369
+ style: "secondary",
2370
+ onClick: function onClick() {
2371
+ setIsPaneOpen(false);
2372
+ setIsSavePaneOpen({
2373
+ action: SEGMENT_ACTIONS$1.CREATE
2374
+ });
2129
2375
  }
2130
- }, {
2131
- onChange: handleRuleChange
2132
- })), /*#__PURE__*/React.createElement(TimePickerInput, _extends({
2133
- autoFocus: autoFocus,
2134
- className: "w-full",
2135
- "data-cy": "neeto-filters-".concat(hyphenate(key), "-filter"),
2136
- type: timePickerType,
2137
- value: formattedTime,
2138
- onChange: handleChange
2139
- }, otherProps)));
2376
+ }), !hideClearButton && /*#__PURE__*/React.createElement(Button, {
2377
+ "data-cy": "neeto-filters-bar-clear-btn",
2378
+ label: t("neetoFilters.common.clearFilters"),
2379
+ style: "text",
2380
+ onClick: handleClearAll
2381
+ })));
2140
2382
  };
2141
2383
 
2142
- var Text = function Text(_ref) {
2143
- var column = _ref.column,
2144
- filter = _ref.filter,
2145
- filters = _ref.filters,
2146
- handleApplyFilter = _ref.handleApplyFilter,
2147
- autoFocus = _ref.autoFocus,
2148
- onClose = _ref.onClose;
2149
- var key = column.key,
2150
- _column$defaultType = column.defaultType,
2151
- defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
2152
- label = column.label,
2153
- _column$showRuleSelec = column.showRuleSelector,
2154
- showRuleSelector = _column$showRuleSelec === void 0 ? false : _column$showRuleSelec,
2155
- _column$helpIconProps = column.helpIconProps,
2156
- helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
2157
- var otherProps = getOtherProps(column);
2158
- var ruleOptions = buildRuleOptions({
2159
- defaultType: defaultType
2384
+ var fetch = function fetch(params) {
2385
+ return axios.get(SEGMENTS_BASE_URL, {
2386
+ params: params
2160
2387
  });
2161
- var inputType = defaultType === "text" || defaultType === "custom.text" ? "text" : "number";
2162
- var _useState = useState(filter === null || filter === void 0 ? void 0 : filter.value),
2163
- _useState2 = _slicedToArray(_useState, 2),
2164
- inputValue = _useState2[0],
2165
- setInputValue = _useState2[1];
2166
- var _useState3 = useState(function () {
2167
- return findBy({
2168
- value: filter === null || filter === void 0 ? void 0 : filter.rule
2169
- }, ruleOptions) || ruleOptions[0];
2170
- }),
2171
- _useState4 = _slicedToArray(_useState3, 2),
2172
- selectedRule = _useState4[0],
2173
- setSelectedRule = _useState4[1];
2174
- var debouncedInputValue = useDebounce(inputValue);
2388
+ };
2389
+ var show = function show(id) {
2390
+ return axios.get("".concat(SEGMENTS_BASE_URL, "/").concat(id), {
2391
+ transformResponseCase: false
2392
+ });
2393
+ };
2394
+ var create = function create(payload) {
2395
+ return axios.post(SEGMENTS_BASE_URL, {
2396
+ segment: payload
2397
+ }, {
2398
+ showToastr: false
2399
+ });
2400
+ };
2401
+ var update = function update(_ref) {
2402
+ var id = _ref.id,
2403
+ payload = _ref.payload,
2404
+ _ref$showToastr = _ref.showToastr,
2405
+ showToastr = _ref$showToastr === void 0 ? true : _ref$showToastr;
2406
+ return axios.put("".concat(SEGMENTS_BASE_URL, "/").concat(id), payload, {
2407
+ showToastr: showToastr
2408
+ });
2409
+ };
2410
+ var destroy = function destroy(id) {
2411
+ return axios["delete"]("".concat(SEGMENTS_BASE_URL, "/").concat(id));
2412
+ };
2413
+ var segmentsApi = {
2414
+ fetch: fetch,
2415
+ show: show,
2416
+ create: create,
2417
+ update: update,
2418
+ destroy: destroy
2419
+ };
2420
+
2421
+ function ownKeys$3(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; }
2422
+ function _objectSpread$3(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$3(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$3(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
2423
+ var SEGMENTS_LIST = QUERY_KEYS.SEGMENTS_LIST;
2424
+ var useFetchSegments = function useFetchSegments(_ref) {
2425
+ var entity = _ref.entity,
2426
+ _ref$searchTerm = _ref.searchTerm,
2427
+ searchTerm = _ref$searchTerm === void 0 ? "" : _ref$searchTerm;
2428
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
2429
+ return useQuery([SEGMENTS_LIST, entity, searchTerm], function () {
2430
+ return segmentsApi.fetch({
2431
+ entity: entity,
2432
+ searchTerm: searchTerm
2433
+ });
2434
+ }, mergeRight({
2435
+ staleTime: SEGMENTS_STALE_TIME,
2436
+ select: prop("segments")
2437
+ }, options));
2438
+ };
2439
+ var useCreateSegment = function useCreateSegment(options) {
2440
+ return useMutationWithInvalidation(segmentsApi.create, _objectSpread$3({
2441
+ keysToInvalidate: [SEGMENTS_LIST]
2442
+ }, options));
2443
+ };
2444
+ var useUpdateSegment = function useUpdateSegment(options) {
2445
+ return useMutationWithInvalidation(segmentsApi.update, _objectSpread$3({
2446
+ keysToInvalidate: [SEGMENTS_LIST]
2447
+ }, options));
2448
+ };
2449
+ var useDestroySegment = function useDestroySegment(options) {
2450
+ return useMutationWithInvalidation(segmentsApi.destroy, _objectSpread$3({
2451
+ keysToInvalidate: [SEGMENTS_LIST]
2452
+ }, options));
2453
+ };
2454
+
2455
+ function ownKeys$2(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; }
2456
+ function _objectSpread$2(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$2(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$2(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
2457
+ var useSegment = function useSegment(_ref) {
2458
+ var entity = _ref.entity,
2459
+ keyword = _ref.keyword,
2460
+ columns = _ref.columns,
2461
+ childrenKeys = _ref.childrenKeys;
2462
+ var history = useHistory$1();
2175
2463
  var _useTranslation = useTranslation(),
2176
2464
  t = _useTranslation.t;
2177
- var handleUpdateAndApplyFilter = function handleUpdateAndApplyFilter() {
2178
- var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : debouncedInputValue;
2179
- var rule = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : selectedRule;
2180
- if (equals(filter === null || filter === void 0 ? void 0 : filter.value, value) && equals(selectedRule, rule)) return;
2181
- var updatedFilter = buildUpdatedFilter({
2182
- column: column,
2183
- defaultType: defaultType,
2184
- option: {},
2185
- rule: rule.value,
2186
- value: value.trim()
2465
+ var initialRenderRef = useRef(true);
2466
+ var _useQueryParams = useQueryParams(),
2467
+ segmentId = _useQueryParams.segmentId;
2468
+ var _useState = useState({
2469
+ action: undefined
2470
+ }),
2471
+ _useState2 = _slicedToArray(_useState, 2),
2472
+ isSavePaneOpen = _useState2[0],
2473
+ setIsSavePaneOpen = _useState2[1];
2474
+ var _useCreateSegment = useCreateSegment(),
2475
+ createSegment = _useCreateSegment.mutate,
2476
+ isCreating = _useCreateSegment.isLoading;
2477
+ var _useUpdateSegment = useUpdateSegment(),
2478
+ updateSegment = _useUpdateSegment.mutate,
2479
+ isUpdating = _useUpdateSegment.isLoading;
2480
+ var isSubmitting = isCreating || isUpdating;
2481
+ var searchParams = useQueryParams({
2482
+ toCamelCase: false
2483
+ });
2484
+ var keywordValue = searchParams[SEARCH_TERM_KEY] || "";
2485
+ var isEdit = isSavePaneOpen.action === SEGMENT_ACTIONS$1.EDIT;
2486
+ var keywordFilter = _objectSpread$2(_objectSpread$2({
2487
+ type: "text",
2488
+ rule: "contains",
2489
+ label: t("neetoFilters.common.searchTerm")
2490
+ }, keyword), {}, {
2491
+ key: SEARCH_TERM_KEY,
2492
+ value: keywordValue
2493
+ });
2494
+ var filters = buildFiltersFromSearchParams(isKeywordFilterPresent(keywordFilter) && isNotEmpty(keywordValue) ? [keywordFilter].concat(_toConsumableArray(columns)) : columns);
2495
+ var nonHiddenFilters = removeBy({
2496
+ hidden: true
2497
+ }, filters);
2498
+ var handleApplyFilters = function handleApplyFilters(newFilters, isClearAll) {
2499
+ var params = buildUrlFromFilters(_objectSpread$2({
2500
+ columns: columns,
2501
+ filters: isKeywordFilterPresent(keywordFilter) && isNotEmpty(getSearchTermFromUrl()) ? [].concat(_toConsumableArray(newFilters), [keywordFilter]) : newFilters
2502
+ }, isClearAll && {
2503
+ isClearAll: true,
2504
+ childrenKeys: childrenKeys
2505
+ }));
2506
+ history.push({
2507
+ search: params
2187
2508
  });
2188
- handleApplyFilter(updatedFilter);
2189
2509
  };
2190
- var handleKeydown = function handleKeydown(e) {
2191
- if (!(e.key === "Enter")) return;
2192
- handleUpdateAndApplyFilter(inputValue);
2193
- onClose();
2510
+ var childrenFiltersApplied = childrenKeys.some(function (key) {
2511
+ return has(key, searchParams);
2512
+ });
2513
+ useEffect(function () {
2514
+ if (initialRenderRef.current) {
2515
+ initialRenderRef.current = false;
2516
+ return noop;
2517
+ }
2518
+ var handler = setTimeout(function () {
2519
+ handleApplyFilters(filters);
2520
+ }, 500);
2521
+ return function () {
2522
+ return clearTimeout(handler);
2523
+ };
2524
+ }, [keywordValue]);
2525
+ var handleCreateSuccess = function handleCreateSuccess(_ref2) {
2526
+ var _filters$;
2527
+ var _ref2$segment = _ref2.segment,
2528
+ id = _ref2$segment.id,
2529
+ filters = _ref2$segment.filters;
2530
+ history.push({
2531
+ search: buildUrlFromSegment({
2532
+ columns: columns,
2533
+ filters: (_filters$ = filters[0]) === null || _filters$ === void 0 ? void 0 : _filters$.conditions,
2534
+ id: id
2535
+ })
2536
+ });
2537
+ setIsSavePaneOpen({
2538
+ action: undefined
2539
+ });
2540
+ showThumbsUpToastr();
2541
+ };
2542
+ var handleCreate = function handleCreate(_ref3, _ref4) {
2543
+ var name = _ref3.name;
2544
+ var setFieldError = _ref4.setFieldError;
2545
+ var filtersPayload = buildSegmentsPayload(filters, childrenKeys);
2546
+ createSegment({
2547
+ name: name,
2548
+ entity: entity,
2549
+ filters: filtersPayload
2550
+ }, {
2551
+ onSuccess: handleCreateSuccess,
2552
+ onError: function onError(error) {
2553
+ return setFieldError("name", error.response.data.error);
2554
+ }
2555
+ });
2556
+ };
2557
+ var handleUpdate = function handleUpdate(_ref5, _ref6) {
2558
+ var name = _ref5.name;
2559
+ var setFieldError = _ref6.setFieldError;
2560
+ var filtersPayload = buildSegmentsPayload(filters, childrenKeys);
2561
+ updateSegment({
2562
+ id: segmentId,
2563
+ payload: {
2564
+ name: name,
2565
+ filters: filtersPayload
2566
+ }
2567
+ }, {
2568
+ onSuccess: function onSuccess() {
2569
+ setIsSavePaneOpen({
2570
+ action: undefined
2571
+ });
2572
+ showThumbsUpToastr();
2573
+ },
2574
+ onError: function onError(error) {
2575
+ return setFieldError("name", error.response.data.error);
2576
+ }
2577
+ });
2194
2578
  };
2195
- var handleRuleChange = function handleRuleChange(ruleOption) {
2196
- setSelectedRule(ruleOption);
2197
- if (!debouncedInputValue) return;
2198
- handleUpdateAndApplyFilter(debouncedInputValue, ruleOption);
2579
+ return {
2580
+ isEdit: isEdit,
2581
+ filters: filters,
2582
+ keywordFilter: keywordFilter,
2583
+ isSubmitting: isSubmitting,
2584
+ nonHiddenFilters: nonHiddenFilters,
2585
+ isSavePaneOpen: isSavePaneOpen,
2586
+ setIsSavePaneOpen: setIsSavePaneOpen,
2587
+ handleApplyFilters: handleApplyFilters,
2588
+ childrenFiltersApplied: childrenFiltersApplied,
2589
+ handleSubmit: isEdit ? handleUpdate : handleCreate
2199
2590
  };
2200
-
2201
- // Reset states when "Clear filters" button is clicked.
2202
- useEffect(function () {
2203
- (isEmpty(filters) || isNil(filter)) && setInputValue("");
2204
- }, [filter]);
2205
- useEffect(function () {
2206
- if (!debouncedInputValue) {
2207
- !isUndefinedOrEmpty(filter) && handleApplyFilter({
2208
- _delete: true
2209
- });
2210
- return;
2211
- }
2212
- handleUpdateAndApplyFilter();
2213
- }, [debouncedInputValue]);
2214
- return /*#__PURE__*/React.createElement("div", {
2215
- className: "neeto-filters-pane-filter__item-wrapper"
2216
- }, showRuleSelector && /*#__PURE__*/React.createElement(Select, _extends({
2217
- label: label,
2218
- "data-cy": "neeto-filters-".concat(hyphenate(key), "-filter-rule"),
2219
- defaultValue: ruleOptions[0],
2220
- options: ruleOptions,
2221
- strategy: "fixed",
2222
- value: selectedRule,
2223
- onChange: handleRuleChange
2224
- }, isNotEmpty(helpIconProps) && {
2225
- labelProps: {
2226
- helpIconProps: buildHelpIconProps(helpIconProps)
2227
- }
2228
- })), /*#__PURE__*/React.createElement(Input$1, _extends({
2229
- autoFocus: autoFocus,
2230
- "data-cy": "neeto-filters-".concat(hyphenate(key), "-filter"),
2231
- label: !showRuleSelector && label,
2232
- type: inputType,
2233
- value: inputValue
2234
- }, isNotEmpty(helpIconProps) && {
2235
- labelProps: {
2236
- helpIconProps: buildHelpIconProps(helpIconProps)
2237
- }
2238
- }, {
2239
- placeholder: t("neetoFilters.messages.enterResource", {
2240
- resource: label
2241
- }),
2242
- onChange: function onChange(event) {
2243
- return setInputValue(event.target.value);
2244
- },
2245
- onKeyDown: handleKeydown
2246
- }, otherProps)));
2247
2591
  };
2248
2592
 
2249
- var Time = function Time(_ref) {
2250
- var column = _ref.column,
2251
- filter = _ref.filter,
2252
- handleApplyFilter = _ref.handleApplyFilter,
2253
- autoFocus = _ref.autoFocus;
2254
- var key = column.key,
2255
- _column$defaultType = column.defaultType,
2256
- defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
2257
- label = column.label,
2258
- _column$helpIconProps = column.helpIconProps,
2259
- helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
2260
- var otherProps = getOtherProps(column);
2261
- var value = buildSingleTimeValue(filter);
2262
- var isCustomTimeRangeShown = filter && isCustomTimeRange(filter.value);
2593
+ var Menu = Dropdown$2.Menu,
2594
+ MenuItem = Dropdown$2.MenuItem;
2595
+ var SegmentBar = function SegmentBar(_ref) {
2596
+ var entity = _ref.entity,
2597
+ filters = _ref.filters,
2598
+ setIsSavePaneOpen = _ref.setIsSavePaneOpen,
2599
+ setIsPaneOpen = _ref.setIsPaneOpen;
2263
2600
  var _useTranslation = useTranslation(),
2264
2601
  t = _useTranslation.t;
2265
- var handleChange = function handleChange(option) {
2266
- if (isEmpty(option) || isNil(option)) {
2267
- handleApplyFilter({
2268
- _delete: true
2602
+ var _useQueryParams = useQueryParams(),
2603
+ segmentId = _useQueryParams.segmentId;
2604
+ var queryClient = useQueryClient();
2605
+ var cachedSegments = queryClient.getQueryData([QUERY_KEYS.SEGMENTS_LIST, entity, ""]) || DEFAULT_SEGMENTS_CACHE;
2606
+ var segment = findById(segmentId, cachedSegments.segments);
2607
+ if (isNotPresent(segment)) return null;
2608
+ var newChangesExists = deepCompare(segment.filters[0].conditions, filters);
2609
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Typography, {
2610
+ className: "neeto-ui-text-gray-600 mr-4",
2611
+ "data-cy": "neeto-filters-segment-name",
2612
+ style: "h4"
2613
+ }, segment.name), newChangesExists && /*#__PURE__*/React.createElement(Dropdown$2, {
2614
+ buttonStyle: "secondary",
2615
+ label: t("neetoFilters.segments.updateSegment")
2616
+ }, /*#__PURE__*/React.createElement(Menu, null, /*#__PURE__*/React.createElement(MenuItem.Button, {
2617
+ onClick: function onClick() {
2618
+ return setIsSavePaneOpen({
2619
+ action: SEGMENT_ACTIONS$1.EDIT
2269
2620
  });
2270
- return;
2271
2621
  }
2272
- var updatedFilter = buildUpdatedFilter({
2273
- column: column,
2274
- defaultType: defaultType,
2275
- option: option
2276
- });
2277
- handleApplyFilter(updatedFilter);
2278
- };
2279
- var handleTimeRangeChange = function handleTimeRangeChange(times) {
2280
- if (hasInvalidTimes(times)) {
2281
- handleApplyFilter({
2282
- _delete: true
2622
+ }, t("neetoFilters.segments.updateSegment")), /*#__PURE__*/React.createElement(MenuItem.Button, {
2623
+ onClick: function onClick() {
2624
+ setIsPaneOpen(false);
2625
+ setIsSavePaneOpen({
2626
+ action: SEGMENT_ACTIONS$1.CREATE
2283
2627
  });
2284
- return;
2285
- }
2286
- if (isCustomTimeRangeShown && areCustomTimeRangeValuesNotValid(times)) {
2287
- return;
2288
2628
  }
2289
- var updatedFilter = buildUpdatedFilter({
2290
- column: column,
2291
- defaultType: defaultType,
2292
- option: {
2293
- value: pluck("$d", times).map(function (time) {
2294
- return time.toISOString();
2295
- })
2296
- }
2297
- });
2298
- handleApplyFilter(updatedFilter);
2299
- };
2300
- return /*#__PURE__*/React.createElement("div", {
2301
- className: "neeto-filters-pane-filter__item-wrapper"
2302
- }, /*#__PURE__*/React.createElement(Select, _extends({
2303
- autoFocus: autoFocus,
2304
- label: label,
2305
- value: value,
2306
- isClearable: true,
2307
- "data-cy": "neeto-filters-".concat(hyphenate(key), "-filter"),
2308
- options: TIME_OPTIONS,
2309
- strategy: "fixed",
2310
- placeholder: t("neetoFilters.messages.selectResource", {
2311
- resource: label
2312
- })
2313
- }, isNotEmpty(helpIconProps) && {
2314
- labelProps: {
2315
- helpIconProps: buildHelpIconProps(helpIconProps)
2629
+ }, t("neetoFilters.segments.saveAsNewSegment")))));
2630
+ };
2631
+
2632
+ var Bar = function Bar(_ref) {
2633
+ var entity = _ref.entity,
2634
+ className = _ref.className,
2635
+ _ref$columns = _ref.columns,
2636
+ columns = _ref$columns === void 0 ? [] : _ref$columns,
2637
+ _ref$keyword = _ref.keyword,
2638
+ keyword = _ref$keyword === void 0 ? {
2639
+ node: "",
2640
+ value: "",
2641
+ setValue: noop
2642
+ } : _ref$keyword,
2643
+ _ref$setIsPaneOpen = _ref.setIsPaneOpen,
2644
+ setIsPaneOpen = _ref$setIsPaneOpen === void 0 ? identity : _ref$setIsPaneOpen,
2645
+ _ref$childrenKeys = _ref.childrenKeys,
2646
+ childrenKeys = _ref$childrenKeys === void 0 ? [] : _ref$childrenKeys,
2647
+ _ref$defaultSegmentNa = _ref.defaultSegmentName,
2648
+ defaultSegmentName = _ref$defaultSegmentNa === void 0 ? t$1("neetoFilters.common.allResults") : _ref$defaultSegmentNa,
2649
+ customFilters = _ref.customFilters;
2650
+ var queryClient = useQueryClient();
2651
+ var _useQueryParams = useQueryParams(),
2652
+ segmentId = _useQueryParams.segmentId;
2653
+ var segmentFormInitialRef = useRef(null);
2654
+ var _useSegment = useSegment({
2655
+ entity: entity,
2656
+ keyword: keyword,
2657
+ columns: columns,
2658
+ childrenKeys: childrenKeys
2659
+ }),
2660
+ isEdit = _useSegment.isEdit,
2661
+ filters = _useSegment.filters,
2662
+ handleSubmit = _useSegment.handleSubmit,
2663
+ isSubmitting = _useSegment.isSubmitting,
2664
+ keywordFilter = _useSegment.keywordFilter,
2665
+ isSavePaneOpen = _useSegment.isSavePaneOpen,
2666
+ nonHiddenFilters = _useSegment.nonHiddenFilters,
2667
+ setIsSavePaneOpen = _useSegment.setIsSavePaneOpen,
2668
+ handleApplyFilters = _useSegment.handleApplyFilters,
2669
+ childrenFiltersApplied = _useSegment.childrenFiltersApplied;
2670
+ var BarComponent = segmentId ? SegmentBar : FilterBar;
2671
+ var cachedSegments = queryClient.getQueryData([QUERY_KEYS.SEGMENTS_LIST, entity, ""]) || DEFAULT_SEGMENTS_CACHE;
2672
+ var segment = findById(segmentId, cachedSegments.segments);
2673
+ if (isEmpty(nonHiddenFilters) && !childrenFiltersApplied) return null;
2674
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
2675
+ className: classnames("neeto-filters-bar", _defineProperty({}, className, className))
2676
+ }, /*#__PURE__*/React.createElement(BarComponent, {
2677
+ childrenFiltersApplied: childrenFiltersApplied,
2678
+ childrenKeys: childrenKeys,
2679
+ entity: entity,
2680
+ filters: filters,
2681
+ handleApplyFilters: handleApplyFilters,
2682
+ keywordFilter: keywordFilter,
2683
+ nonHiddenFilters: nonHiddenFilters,
2684
+ setIsPaneOpen: setIsPaneOpen,
2685
+ setIsSavePaneOpen: setIsSavePaneOpen
2686
+ })), /*#__PURE__*/React.createElement(SegmentForm, {
2687
+ childrenKeys: childrenKeys,
2688
+ columns: columns,
2689
+ customFilters: customFilters,
2690
+ defaultSegmentName: defaultSegmentName,
2691
+ filters: filters,
2692
+ handleSubmit: handleSubmit,
2693
+ isEdit: isEdit,
2694
+ isSubmitting: isSubmitting,
2695
+ keywordFilter: keywordFilter,
2696
+ segmentFormInitialRef: segmentFormInitialRef,
2697
+ isOpen: isPresent(isSavePaneOpen.action),
2698
+ initialValues: isEdit ? assoc("filters", [{
2699
+ conditions: filters
2700
+ }], segment) : {
2701
+ name: "",
2702
+ filters: [{
2703
+ conditions: filters
2704
+ }]
2705
+ },
2706
+ onClose: function onClose() {
2707
+ return setIsSavePaneOpen({
2708
+ action: undefined
2709
+ });
2316
2710
  }
2317
- }, {
2318
- onChange: handleChange
2319
- })), isCustomTimeRangeShown && /*#__PURE__*/React.createElement(TimePickerInput, _extends({
2320
- className: "w-full",
2321
- "data-cy": "neeto-filters-".concat(hyphenate(key), "-date-range"),
2322
- type: "range",
2323
- value: formatTime(filter.value, "range"),
2324
- onChange: handleTimeRangeChange
2325
- }, otherProps)));
2711
+ }));
2326
2712
  };
2327
- var Time$1 = /*#__PURE__*/React.memo(Time);
2328
2713
 
2329
- var Item = function Item(_ref) {
2330
- var column = _ref.column,
2331
- filters = _ref.filters,
2332
- onChange = _ref.onChange,
2333
- autoFocus = _ref.autoFocus,
2334
- onClose = _ref.onClose;
2335
- var key = column.key,
2336
- _column$defaultType = column.defaultType,
2337
- defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType;
2338
- var filter = useMemo(function () {
2339
- return findBy({
2340
- key: key
2341
- }, filters);
2342
- }, [filters, key]);
2343
- var handleApplyFilter = function handleApplyFilter(updatedFilter) {
2344
- if (updatedFilter._delete) onChange(removeBy({
2345
- key: key
2346
- }, filters));else if (!filter) onChange(append(updatedFilter, filters));else onChange(replaceBy({
2347
- key: key
2348
- }, updatedFilter, filters));
2349
- };
2350
- if (isText(defaultType) || isDigit(defaultType)) {
2351
- return /*#__PURE__*/React.createElement(Text, {
2352
- autoFocus: autoFocus,
2353
- column: column,
2354
- filter: filter,
2355
- filters: filters,
2356
- handleApplyFilter: handleApplyFilter,
2357
- onClose: onClose
2358
- });
2359
- }
2360
- if (isDate(defaultType)) {
2361
- return /*#__PURE__*/React.createElement(Datetime$1, {
2362
- autoFocus: autoFocus,
2363
- column: column,
2364
- filter: filter,
2365
- handleApplyFilter: handleApplyFilter
2366
- });
2714
+ function _objectWithoutPropertiesLoose(source, excluded) {
2715
+ if (source == null) return {};
2716
+ var target = {};
2717
+ var sourceKeys = Object.keys(source);
2718
+ var key, i;
2719
+ for (i = 0; i < sourceKeys.length; i++) {
2720
+ key = sourceKeys[i];
2721
+ if (excluded.indexOf(key) >= 0) continue;
2722
+ target[key] = source[key];
2367
2723
  }
2368
- if (isTime(defaultType)) {
2369
- return /*#__PURE__*/React.createElement(Time$1, {
2370
- autoFocus: autoFocus,
2371
- column: column,
2372
- filter: filter,
2373
- handleApplyFilter: handleApplyFilter
2374
- });
2724
+ return target;
2725
+ }
2726
+
2727
+ function _objectWithoutProperties(source, excluded) {
2728
+ if (source == null) return {};
2729
+ var target = _objectWithoutPropertiesLoose(source, excluded);
2730
+ var key, i;
2731
+ if (Object.getOwnPropertySymbols) {
2732
+ var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
2733
+ for (i = 0; i < sourceSymbolKeys.length; i++) {
2734
+ key = sourceSymbolKeys[i];
2735
+ if (excluded.indexOf(key) >= 0) continue;
2736
+ if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
2737
+ target[key] = source[key];
2738
+ }
2375
2739
  }
2376
- if (isSingleDate(defaultType)) {
2377
- return /*#__PURE__*/React.createElement(SingleDatetime, {
2378
- autoFocus: autoFocus,
2379
- column: column,
2380
- filter: filter,
2381
- filters: filters,
2382
- handleApplyFilter: handleApplyFilter
2740
+ return target;
2741
+ }
2742
+
2743
+ var useFilters = function useFilters(_ref) {
2744
+ var onFiltersChange = _ref.onFiltersChange,
2745
+ columns = _ref.columns,
2746
+ keywordFilter = _ref.keywordFilter,
2747
+ onSelectorsChange = _ref.onSelectorsChange;
2748
+ var _useTransition = useTransition(),
2749
+ _useTransition2 = _slicedToArray(_useTransition, 2);
2750
+ _useTransition2[0];
2751
+ var startTransition = _useTransition2[1];
2752
+ var initialRender = useRef(true);
2753
+ var prevFilters = useRef([]);
2754
+ var location = useLocation();
2755
+ var filters = buildFiltersFromSearchParams(columns, false);
2756
+ var history = useHistory$1();
2757
+ var defaultValuesOfColumns = JSON.stringify(pluck("defaultValue", columns));
2758
+ var handlePrecenseOfDefaultFilters = function handlePrecenseOfDefaultFilters(defaultFilters) {
2759
+ var params = buildUrlFromFilters({
2760
+ columns: columns,
2761
+ filters: isKeywordFilterPresent(keywordFilter) && isNotEmpty(getSearchTermFromUrl()) ? [].concat(_toConsumableArray(defaultFilters), [keywordFilter]) : defaultFilters
2383
2762
  });
2384
- }
2385
- if (isSingleTime(defaultType)) {
2386
- return /*#__PURE__*/React.createElement(SingleTime, {
2387
- autoFocus: autoFocus,
2388
- column: column,
2389
- filter: filter,
2390
- filters: filters,
2391
- handleApplyFilter: handleApplyFilter
2763
+ history.replace({
2764
+ search: params
2392
2765
  });
2393
- }
2394
- if (isBoolean(defaultType) || isCheckbox(defaultType)) {
2395
- return /*#__PURE__*/React.createElement(Boolean$1, {
2396
- autoFocus: autoFocus,
2397
- column: column,
2398
- filter: filter,
2399
- handleApplyFilter: handleApplyFilter
2766
+ };
2767
+ var handleFiltersChange = function handleFiltersChange(filtersPayload) {
2768
+ startTransition(function () {
2769
+ onFiltersChange(buildFiltersPayload(filtersPayload.filter(function (filter) {
2770
+ return !isNil(filter.node);
2771
+ })));
2400
2772
  });
2401
- }
2402
- return /*#__PURE__*/React.createElement(Dropdown$1, {
2403
- autoFocus: autoFocus,
2404
- column: column,
2405
- filter: filter,
2406
- handleApplyFilter: handleApplyFilter
2407
- });
2773
+ };
2774
+
2775
+ //This function sends the updated filters to host via callbacks.
2776
+ var sendUpdatedFilters = function sendUpdatedFilters() {
2777
+ if (compareFilters(append(keywordFilter, filters), prevFilters.current)) {
2778
+ return;
2779
+ }
2780
+ var newFilters = buildFiltersFromSearchParams(columns);
2781
+ var filtersPayload = isKeywordFilterPresent(keywordFilter) && isNotEmpty(getSearchTermFromUrl()) ? append(keywordFilter, newFilters) : newFilters;
2782
+ handleFiltersChange(filtersPayload);
2783
+ onSelectorsChange(buildSelectorsFromURL(columns));
2784
+ };
2785
+ var handleChangesInURL = function handleChangesInURL() {
2786
+ var defaultFilters = buildDefaultFilters(columns, filters);
2787
+ var searchParams = getSnakeCasedQueryParams();
2788
+ var keys = pluck("key", append(keywordFilter, columns));
2789
+ if (keys.every(function (key) {
2790
+ return isNil(searchParams[key]);
2791
+ }) && !isEmpty(defaultFilters)) {
2792
+ history.replace({
2793
+ search: buildUrlFromFilters({
2794
+ columns: columns,
2795
+ filters: concat(defaultFilters, filters)
2796
+ })
2797
+ });
2798
+ filters = buildFiltersFromSearchParams(columns, false);
2799
+ }
2800
+ };
2801
+ useEffect(function () {
2802
+ if (initialRender.current) {
2803
+ initialRender.current = false;
2804
+ var keywordValue = getSearchTermFromUrl();
2805
+ var defaultFilters = buildDefaultFilters(columns, filters);
2806
+ isNotEmpty(defaultFilters) && handlePrecenseOfDefaultFilters(defaultFilters);
2807
+ prevFilters.current = append(mergeRight(keywordFilter, {
2808
+ value: keywordValue
2809
+ }), filters);
2810
+ } else {
2811
+ handleChangesInURL();
2812
+ sendUpdatedFilters();
2813
+ prevFilters.current = append(keywordFilter, filters);
2814
+ }
2815
+ }, [location.search, defaultValuesOfColumns]);
2816
+ return filters;
2408
2817
  };
2409
2818
 
2410
2819
  var _excluded = ["isOpen", "onClose", "columns", "onChange", "isSearchable", "keyword", "onSelectorsChange", "childrenKeys", "children", "className"];
@@ -2430,7 +2839,7 @@ var Pane = function Pane(_ref) {
2430
2839
  _useState2 = _slicedToArray(_useState, 2),
2431
2840
  searchTerm = _useState2[0],
2432
2841
  setSearchTerm = _useState2[1];
2433
- var history = useHistory();
2842
+ var history = useHistory$1();
2434
2843
  var _useTranslation = useTranslation(),
2435
2844
  t = _useTranslation.t;
2436
2845
  columns = useMemo(function () {
@@ -2572,7 +2981,7 @@ var Pane = function Pane(_ref) {
2572
2981
 
2573
2982
  var e=[],t=[];function n(n,r){if(n&&"undefined"!=typeof document){var a,s=!0===r.prepend?"prepend":"append",d=!0===r.singleTag,i="string"==typeof r.container?document.querySelector(r.container):document.getElementsByTagName("head")[0];if(d){var u=e.indexOf(i);-1===u&&(u=e.push(i)-1,t[u]={}),a=t[u]&&t[u][s]?t[u][s]:t[u][s]=c();}else a=c();65279===n.charCodeAt(0)&&(n=n.substring(1)),a.styleSheet?a.styleSheet.cssText+=n:a.appendChild(document.createTextNode(n));}function c(){var e=document.createElement("style");if(e.setAttribute("type","text/css"),r.attributes)for(var t=Object.keys(r.attributes),n=0;n<t.length;n++)e.setAttribute(t[n],r.attributes[t[n]]);var a="prepend"===s?"afterbegin":"beforeend";return i.insertAdjacentElement(a,e),e}}
2574
2983
 
2575
- var css = ".neeto-filters-bar{align-items:center;display:flex;flex-wrap:wrap}.neeto-filters-bar__block{border-radius:var(--neeto-ui-rounded);display:flex;gap:4px;margin:4px 0;max-width:384px;overflow:hidden;padding:4px 8px;position:relative;transition:var(--neeto-ui-transition);white-space:nowrap}.neeto-filters-bar__block p:first-child{color:rgb(var(--neeto-ui-gray-700))}.neeto-filters-bar__block-close{background-image:linear-gradient(90deg,rgba(var(--neeto-ui-gray-200),.5) 0,rgba(var(--neeto-ui-gray-200),1) 25%);color:rgb(var(--neeto-ui-gray-800));opacity:0;padding:8px;position:absolute;right:0;top:0;transition:var(--neeto-ui-transition)}.neeto-filters-bar__block:active,.neeto-filters-bar__block:hover{background-color:rgb(var(--neeto-ui-gray-200));cursor:pointer}.neeto-filters-bar__block:active .neeto-filters-bar__block-close,.neeto-filters-bar__block:hover .neeto-filters-bar__block-close{border-radius:var(--neeto-ui-rounded);color:rgb(var(--neeto-ui-black));opacity:1}.neeto-filters-bar__block:focus{box-shadow:0 0 0 3px rgba(var(--neeto-ui-gray-800),15%);outline:none}.neeto-filters-bar--separator{align-self:stretch;border-left:1px solid rgb(var(--neeto-ui-gray-400));margin:12px 8px}.neeto-filters-pane-filter{overflow:visible;width:360px}.neeto-filters-pane-filter__body{align-items:stretch!important;gap:20px}.neeto-filters-pane-filter__body>*{flex-grow:0!important}.neeto-filters-pane-filter__body p{text-align:center}.neeto-filters-pane-filter__body .neeto-filters-pane-filter__item-wrapper{display:flex;flex-direction:column;gap:8px}.neeto-filters-pane-filter__body .accordion_item .neeto-filters-pane-filter__item-wrapper{margin-top:16px}.neeto-filters-pane-filter__body .accordion_item .neeto-filters-pane-filter__item-wrapper:first-of-type{margin-top:0}.neeto-filters-pane-filter__body .accordion_item:first-of-type .neeto-ui-accordion__item{padding-top:0}.neeto-filters-pane-filter__body .neeto-ui-accordion__wrapper--last-item{border-bottom:thin solid rgb(var(--neeto-ui-gray-300))}@media screen and (max-width:767px){.neeto-filters-pane-filter{width:100vw}}.neeto-filters-pane-backdrop{-webkit-backdrop-filter:blur(0)!important;backdrop-filter:blur(0)!important;background-color:rgba(var(--neeto-ui-gray-700),.2)}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFwcC9qYXZhc2NyaXB0L3NyYy9zdHlsZXNoZWV0cy9jb21wb25lbnRzL19iYXIuc2NzcyIsImFwcC9qYXZhc2NyaXB0L3NyYy9zdHlsZXNoZWV0cy9pbmRleC5zY3NzIiwiYXBwL2phdmFzY3JpcHQvc3JjL3N0eWxlc2hlZXRzL2NvbXBvbmVudHMvX2ZpbHRlcnMuc2NzcyIsImFwcC9qYXZhc2NyaXB0L3NyYy9zdHlsZXNoZWV0cy9hYnN0cmFjdHMvX21peGlucy5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUdFLGtCQUFBLENBRkEsWUFBQSxDQUNBLGNDRUYsQ0RDRSwwQkFLRSxxQ0FBQSxDQUhBLFlBQUEsQ0FFQSxPQUFBLENBR0EsWUFBQSxDQUNBLGVBQUEsQ0FFQSxlQUFBLENBVEEsZUFBQSxDQUVBLGlCQUFBLENBR0EscUNBQUEsQ0FHQSxrQkNFSixDRENJLHdDQUNFLG1DQ0NOLENERUksZ0NBUUUsZ0hBQUEsQ0FGQSxtQ0FBQSxDQURBLFNBQUEsQ0FEQSxXQUFBLENBSEEsaUJBQUEsQ0FFQSxPQUFBLENBREEsS0FBQSxDQUtBLHFDQ0NOLENET0ksaUVBRUUsOENBQUEsQ0FDQSxjQ05OLENEUU0saUlBR0UscUNBQUEsQ0FEQSxnQ0FBQSxDQURBLFNDSlIsQ0RVSSxnQ0FFRSx1REFBQSxDQURBLFlDUE4sQ0RZRSw4QkFHRSxrQkFBQSxDQUZBLG1EQUFBLENBQ0EsZUNUSixDQy9DQSwyQkFFRSxnQkFBQSxDQURBLFdEbURGLENDaERFLGlDQUNFLDZCQUFBLENBQ0EsUURrREosQ0NoREksbUNBQ0UscUJEa0ROLENDL0NJLG1DQUNFLGlCRGlETixDQzlDSSwwRUFDRSxZQUFBLENBQ0EscUJBQUEsQ0FDQSxPRGdETixDQzVDTSwwRkFDRSxlRDhDUixDQzVDUSx3R0FDRSxZRDhDVixDQzFDUSx5RkFDRSxhRDRDVixDQ3hDSSx5RUFDRSxzREQwQ04sQ0VqRUksb0NEZEosMkJBMENJLFdEeUNGLENBQ0YsQ0N0Q0EsNkJBQ0UseUNBQUEsQ0FBQSxpQ0FBQSxDQUNBLGtERHlDRiIsInNvdXJjZXNDb250ZW50IjpbIi5uZWV0by1maWx0ZXJzLWJhciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogd3JhcDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcblxuICAmX19ibG9jayB7XG4gICAgcGFkZGluZzogNHB4IDhweDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBnYXA6IDRweDtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1uZWV0by11aS1yb3VuZGVkKTtcbiAgICB0cmFuc2l0aW9uOiB2YXIoLS1uZWV0by11aS10cmFuc2l0aW9uKTtcbiAgICBtYXJnaW46IDRweCAwO1xuICAgIG1heC13aWR0aDogMzg0cHg7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gICAgcDpmaXJzdC1jaGlsZCB7XG4gICAgICBjb2xvcjogcmdiKHZhcigtLW5lZXRvLXVpLWdyYXktNzAwKSk7XG4gICAgfVxuXG4gICAgJi1jbG9zZSB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDA7XG4gICAgICByaWdodDogMDtcbiAgICAgIHBhZGRpbmc6IDhweDtcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgICBjb2xvcjogcmdiKHZhcigtLW5lZXRvLXVpLWdyYXktODAwKSk7XG4gICAgICB0cmFuc2l0aW9uOiB2YXIoLS1uZWV0by11aS10cmFuc2l0aW9uKTtcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudChcbiAgICAgICAgOTBkZWcsXG4gICAgICAgIHJnYmEodmFyKC0tbmVldG8tdWktZ3JheS0yMDApLCAwLjUpIDAlLFxuICAgICAgICByZ2JhKHZhcigtLW5lZXRvLXVpLWdyYXktMjAwKSwgMSkgMjUlXG4gICAgICApO1xuICAgIH1cblxuICAgICY6aG92ZXIsXG4gICAgJjphY3RpdmUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKHZhcigtLW5lZXRvLXVpLWdyYXktMjAwKSk7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG5cbiAgICAgIC5uZWV0by1maWx0ZXJzLWJhcl9fYmxvY2stY2xvc2Uge1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICBjb2xvcjogcmdiKHZhcigtLW5lZXRvLXVpLWJsYWNrKSk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW5lZXRvLXVpLXJvdW5kZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgICY6Zm9jdXMge1xuICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCByZ2JhKHZhcigtLW5lZXRvLXVpLWdyYXktODAwKSwgMTUlKTtcbiAgICB9XG4gIH1cblxuICAmLS1zZXBhcmF0b3Ige1xuICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgcmdiKHZhcigtLW5lZXRvLXVpLWdyYXktNDAwKSk7XG4gICAgbWFyZ2luOiAxMnB4IDhweDtcbiAgICBhbGlnbi1zZWxmOiBzdHJldGNoO1xuICB9XG59XG4iLCIubmVldG8tZmlsdGVycy1iYXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG4ubmVldG8tZmlsdGVycy1iYXJfX2Jsb2NrIHtcbiAgcGFkZGluZzogNHB4IDhweDtcbiAgZGlzcGxheTogZmxleDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBnYXA6IDRweDtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tbmVldG8tdWktcm91bmRlZCk7XG4gIHRyYW5zaXRpb246IHZhcigtLW5lZXRvLXVpLXRyYW5zaXRpb24pO1xuICBtYXJnaW46IDRweCAwO1xuICBtYXgtd2lkdGg6IDM4NHB4O1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm5lZXRvLWZpbHRlcnMtYmFyX19ibG9jayBwOmZpcnN0LWNoaWxkIHtcbiAgY29sb3I6IHJnYih2YXIoLS1uZWV0by11aS1ncmF5LTcwMCkpO1xufVxuLm5lZXRvLWZpbHRlcnMtYmFyX19ibG9jay1jbG9zZSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICByaWdodDogMDtcbiAgcGFkZGluZzogOHB4O1xuICBvcGFjaXR5OiAwO1xuICBjb2xvcjogcmdiKHZhcigtLW5lZXRvLXVpLWdyYXktODAwKSk7XG4gIHRyYW5zaXRpb246IHZhcigtLW5lZXRvLXVpLXRyYW5zaXRpb24pO1xuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsIHJnYmEodmFyKC0tbmVldG8tdWktZ3JheS0yMDApLCAwLjUpIDAlLCByZ2JhKHZhcigtLW5lZXRvLXVpLWdyYXktMjAwKSwgMSkgMjUlKTtcbn1cbi5uZWV0by1maWx0ZXJzLWJhcl9fYmxvY2s6aG92ZXIsIC5uZWV0by1maWx0ZXJzLWJhcl9fYmxvY2s6YWN0aXZlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiKHZhcigtLW5lZXRvLXVpLWdyYXktMjAwKSk7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5uZWV0by1maWx0ZXJzLWJhcl9fYmxvY2s6aG92ZXIgLm5lZXRvLWZpbHRlcnMtYmFyX19ibG9jay1jbG9zZSwgLm5lZXRvLWZpbHRlcnMtYmFyX19ibG9jazphY3RpdmUgLm5lZXRvLWZpbHRlcnMtYmFyX19ibG9jay1jbG9zZSB7XG4gIG9wYWNpdHk6IDE7XG4gIGNvbG9yOiByZ2IodmFyKC0tbmVldG8tdWktYmxhY2spKTtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tbmVldG8tdWktcm91bmRlZCk7XG59XG4ubmVldG8tZmlsdGVycy1iYXJfX2Jsb2NrOmZvY3VzIHtcbiAgb3V0bGluZTogbm9uZTtcbiAgYm94LXNoYWRvdzogMCAwIDAgM3B4IHJnYmEodmFyKC0tbmVldG8tdWktZ3JheS04MDApLCAxNSUpO1xufVxuLm5lZXRvLWZpbHRlcnMtYmFyLS1zZXBhcmF0b3Ige1xuICBib3JkZXItbGVmdDogMXB4IHNvbGlkIHJnYih2YXIoLS1uZWV0by11aS1ncmF5LTQwMCkpO1xuICBtYXJnaW46IDEycHggOHB4O1xuICBhbGlnbi1zZWxmOiBzdHJldGNoO1xufVxuXG4ubmVldG8tZmlsdGVycy1wYW5lLWZpbHRlciB7XG4gIHdpZHRoOiAzNjBweDtcbiAgb3ZlcmZsb3c6IHZpc2libGU7XG59XG4ubmVldG8tZmlsdGVycy1wYW5lLWZpbHRlcl9fYm9keSB7XG4gIGFsaWduLWl0ZW1zOiBzdHJldGNoICFpbXBvcnRhbnQ7XG4gIGdhcDogMjBweDtcbn1cbi5uZWV0by1maWx0ZXJzLXBhbmUtZmlsdGVyX19ib2R5ID4gKiB7XG4gIGZsZXgtZ3JvdzogMCAhaW1wb3J0YW50O1xufVxuLm5lZXRvLWZpbHRlcnMtcGFuZS1maWx0ZXJfX2JvZHkgcCB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbi5uZWV0by1maWx0ZXJzLXBhbmUtZmlsdGVyX19ib2R5IC5uZWV0by1maWx0ZXJzLXBhbmUtZmlsdGVyX19pdGVtLXdyYXBwZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBnYXA6IDhweDtcbn1cbi5uZWV0by1maWx0ZXJzLXBhbmUtZmlsdGVyX19ib2R5IC5hY2NvcmRpb25faXRlbSAubmVldG8tZmlsdGVycy1wYW5lLWZpbHRlcl9faXRlbS13cmFwcGVyIHtcbiAgbWFyZ2luLXRvcDogMTZweDtcbn1cbi5uZWV0by1maWx0ZXJzLXBhbmUtZmlsdGVyX19ib2R5IC5hY2NvcmRpb25faXRlbSAubmVldG8tZmlsdGVycy1wYW5lLWZpbHRlcl9faXRlbS13cmFwcGVyOmZpcnN0LW9mLXR5cGUge1xuICBtYXJnaW4tdG9wOiAwO1xufVxuLm5lZXRvLWZpbHRlcnMtcGFuZS1maWx0ZXJfX2JvZHkgLmFjY29yZGlvbl9pdGVtOmZpcnN0LW9mLXR5cGUgLm5lZXRvLXVpLWFjY29yZGlvbl9faXRlbSB7XG4gIHBhZGRpbmctdG9wOiAwO1xufVxuLm5lZXRvLWZpbHRlcnMtcGFuZS1maWx0ZXJfX2JvZHkgLm5lZXRvLXVpLWFjY29yZGlvbl9fd3JhcHBlci0tbGFzdC1pdGVtIHtcbiAgYm9yZGVyLWJvdHRvbTogdGhpbiBzb2xpZCByZ2IodmFyKC0tbmVldG8tdWktZ3JheS0zMDApKTtcbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gIC5uZWV0by1maWx0ZXJzLXBhbmUtZmlsdGVyIHtcbiAgICB3aWR0aDogMTAwdnc7XG4gIH1cbn1cblxuLm5lZXRvLWZpbHRlcnMtcGFuZS1iYWNrZHJvcCB7XG4gIGJhY2tkcm9wLWZpbHRlcjogYmx1cigwcHgpICFpbXBvcnRhbnQ7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEodmFyKC0tbmVldG8tdWktZ3JheS03MDApLCAwLjIpO1xufSIsIi5uZWV0by1maWx0ZXJzLXBhbmUtZmlsdGVyIHtcbiAgd2lkdGg6IDM2MHB4O1xuICBvdmVyZmxvdzogdmlzaWJsZTtcblxuICAmX19ib2R5IHtcbiAgICBhbGlnbi1pdGVtczogc3RyZXRjaCAhaW1wb3J0YW50O1xuICAgIGdhcDogMjBweDtcblxuICAgID4gKiB7XG4gICAgICBmbGV4LWdyb3c6IDAgIWltcG9ydGFudDtcbiAgICB9XG5cbiAgICBwIHtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB9XG5cbiAgICAubmVldG8tZmlsdGVycy1wYW5lLWZpbHRlcl9faXRlbS13cmFwcGVyIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgZ2FwOiA4cHg7XG4gICAgfVxuXG4gICAgLmFjY29yZGlvbl9pdGVtIHtcbiAgICAgIC5uZWV0by1maWx0ZXJzLXBhbmUtZmlsdGVyX19pdGVtLXdyYXBwZXIge1xuICAgICAgICBtYXJnaW4tdG9wOiAxNnB4O1xuXG4gICAgICAgICY6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgJjpmaXJzdC1vZi10eXBlIHtcbiAgICAgICAgLm5lZXRvLXVpLWFjY29yZGlvbl9faXRlbSB7XG4gICAgICAgICAgcGFkZGluZy10b3A6IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgLm5lZXRvLXVpLWFjY29yZGlvbl9fd3JhcHBlci0tbGFzdC1pdGVtIHtcbiAgICAgIGJvcmRlci1ib3R0b206IHRoaW4gc29saWQgcmdiKHZhcigtLW5lZXRvLXVpLWdyYXktMzAwKSk7XG4gICAgfVxuICB9XG5cbiAgQGluY2x1ZGUgdmlld3BvcnQobW9iKSB7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICB9XG59XG5cbi5uZWV0by1maWx0ZXJzLXBhbmUtYmFja2Ryb3Age1xuICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMHB4KSAhaW1wb3J0YW50O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKHZhcigtLW5lZXRvLXVpLWdyYXktNzAwKSwgMC4yKTtcbn1cbiIsIkBtaXhpbiB2aWV3cG9ydCgkbWVkaWEpIHtcbiAgQGlmICRtZWRpYT09ZGVzayB7XG4gICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTIwMHB4KSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH0gQGVsc2UgaWYgJG1lZGlhPT10YWItbWluIHtcbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMDI0cHgpIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfSBAZWxzZSBpZiAkbWVkaWE9PXRhYi1vbmx5IHtcbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkgYW5kIChtYXgtd2lkdGg6IDEwMjNweCkge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9IEBlbHNlIGlmICRtZWRpYT09bW9iIHtcbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9IEBlbHNlIGlmICRtZWRpYT09eHMtbW9iIHtcbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA0NzlweCkge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9XG59XG4iXX0= */";
2984
+ var css = ".neeto-filters-bar{align-items:center;display:flex;flex-wrap:wrap}.neeto-filters-bar__block{border-radius:var(--neeto-ui-rounded);display:flex;gap:4px;margin:4px 0;max-width:384px;overflow:hidden;padding:4px 8px;position:relative;transition:var(--neeto-ui-transition);white-space:nowrap}.neeto-filters-bar__block p:first-child{color:rgb(var(--neeto-ui-gray-700))}.neeto-filters-bar__block-close{background-image:linear-gradient(90deg,rgba(var(--neeto-ui-gray-200),.5) 0,rgba(var(--neeto-ui-gray-200),1) 25%);color:rgb(var(--neeto-ui-gray-800));opacity:0;padding:8px;position:absolute;right:0;top:0;transition:var(--neeto-ui-transition)}.neeto-filters-bar__block:active,.neeto-filters-bar__block:hover{background-color:rgb(var(--neeto-ui-gray-200));cursor:pointer}.neeto-filters-bar__block:active .neeto-filters-bar__block-close,.neeto-filters-bar__block:hover .neeto-filters-bar__block-close{border-radius:var(--neeto-ui-rounded);color:rgb(var(--neeto-ui-black));opacity:1}.neeto-filters-bar__block:focus{box-shadow:0 0 0 3px rgba(var(--neeto-ui-gray-800),15%);outline:none}.neeto-filters-bar--separator{align-self:stretch;border-left:1px solid rgb(var(--neeto-ui-gray-400));margin:12px 8px}.neeto-filters-pane-filter{overflow:visible;width:360px}.neeto-filters-pane-filter__body{align-items:stretch!important;gap:20px}.neeto-filters-pane-filter__body>*{flex-grow:0!important}.neeto-filters-pane-filter__body p{text-align:center}.neeto-filters-pane-filter__body .neeto-filters-pane-filter__item-wrapper{display:flex;flex:1;flex-direction:column;gap:8px}.neeto-filters-pane-filter__body .accordion_item .neeto-filters-pane-filter__item-wrapper{flex:1;margin-top:16px}.neeto-filters-pane-filter__body .accordion_item .neeto-filters-pane-filter__item-wrapper:first-of-type{margin-top:0}.neeto-filters-pane-filter__body .accordion_item:first-of-type .neeto-ui-accordion__item{padding-top:0}.neeto-filters-pane-filter__body .neeto-ui-accordion__wrapper--last-item{border-bottom:thin solid rgb(var(--neeto-ui-gray-300))}@media screen and (max-width:767px){.neeto-filters-pane-filter{width:100vw}}.neeto-filters-pane-backdrop{-webkit-backdrop-filter:blur(0)!important;backdrop-filter:blur(0)!important;background-color:rgba(var(--neeto-ui-gray-700),.2)}.neeto-filters-segment--active{border-color:rgb(var(--neeto-ui-primary-500))!important;box-shadow:0 0 0 1px rgb(var(--neeto-ui-primary-500))!important}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFwcC9qYXZhc2NyaXB0L3NyYy9zdHlsZXNoZWV0cy9jb21wb25lbnRzL19iYXIuc2NzcyIsImFwcC9qYXZhc2NyaXB0L3NyYy9zdHlsZXNoZWV0cy9pbmRleC5zY3NzIiwiYXBwL2phdmFzY3JpcHQvc3JjL3N0eWxlc2hlZXRzL2NvbXBvbmVudHMvX2ZpbHRlcnMuc2NzcyIsImFwcC9qYXZhc2NyaXB0L3NyYy9zdHlsZXNoZWV0cy9hYnN0cmFjdHMvX21peGlucy5zY3NzIiwiYXBwL2phdmFzY3JpcHQvc3JjL3N0eWxlc2hlZXRzL2NvbXBvbmVudHMvX3NlZ21lbnRzLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUJBR0Usa0JBQUEsQ0FGQSxZQUFBLENBQ0EsY0NFRixDRENFLDBCQUtFLHFDQUFBLENBSEEsWUFBQSxDQUVBLE9BQUEsQ0FHQSxZQUFBLENBQ0EsZUFBQSxDQUVBLGVBQUEsQ0FUQSxlQUFBLENBRUEsaUJBQUEsQ0FHQSxxQ0FBQSxDQUdBLGtCQ0VKLENEQ0ksd0NBQ0UsbUNDQ04sQ0RFSSxnQ0FRRSxnSEFBQSxDQUZBLG1DQUFBLENBREEsU0FBQSxDQURBLFdBQUEsQ0FIQSxpQkFBQSxDQUVBLE9BQUEsQ0FEQSxLQUFBLENBS0EscUNDQ04sQ0RPSSxpRUFFRSw4Q0FBQSxDQUNBLGNDTk4sQ0RRTSxpSUFHRSxxQ0FBQSxDQURBLGdDQUFBLENBREEsU0NKUixDRFVJLGdDQUVFLHVEQUFBLENBREEsWUNQTixDRFlFLDhCQUdFLGtCQUFBLENBRkEsbURBQUEsQ0FDQSxlQ1RKLENDL0NBLDJCQUVFLGdCQUFBLENBREEsV0RtREYsQ0NoREUsaUNBQ0UsNkJBQUEsQ0FDQSxRRGtESixDQ2hESSxtQ0FDRSxxQkRrRE4sQ0MvQ0ksbUNBQ0UsaUJEaUROLENDOUNJLDBFQUNFLFlBQUEsQ0FHQSxNQUFBLENBRkEscUJBQUEsQ0FDQSxPRGlETixDQzVDTSwwRkFFRSxNQUFBLENBREEsZUQrQ1IsQ0M1Q1Esd0dBQ0UsWUQ4Q1YsQ0MxQ1EseUZBQ0UsYUQ0Q1YsQ0N4Q0kseUVBQ0Usc0REMENOLENFbkVJLG9DRGRKLDJCQTRDSSxXRHlDRixDQUNGLENDdENBLDZCQUNFLHlDQUFBLENBQUEsaUNBQUEsQ0FDQSxrRER5Q0YsQ0czRkEsK0JBQ0UsdURBQUEsQ0FDQSwrREg4RkYiLCJzb3VyY2VzQ29udGVudCI6WyIubmVldG8tZmlsdGVycy1iYXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cbiAgJl9fYmxvY2sge1xuICAgIHBhZGRpbmc6IDRweCA4cHg7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgZ2FwOiA0cHg7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbmVldG8tdWktcm91bmRlZCk7XG4gICAgdHJhbnNpdGlvbjogdmFyKC0tbmVldG8tdWktdHJhbnNpdGlvbik7XG4gICAgbWFyZ2luOiA0cHggMDtcbiAgICBtYXgtd2lkdGg6IDM4NHB4O1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAgIHA6Zmlyc3QtY2hpbGQge1xuICAgICAgY29sb3I6IHJnYih2YXIoLS1uZWV0by11aS1ncmF5LTcwMCkpO1xuICAgIH1cblxuICAgICYtY2xvc2Uge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAwO1xuICAgICAgcmlnaHQ6IDA7XG4gICAgICBwYWRkaW5nOiA4cHg7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgICAgY29sb3I6IHJnYih2YXIoLS1uZWV0by11aS1ncmF5LTgwMCkpO1xuICAgICAgdHJhbnNpdGlvbjogdmFyKC0tbmVldG8tdWktdHJhbnNpdGlvbik7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoXG4gICAgICAgIDkwZGVnLFxuICAgICAgICByZ2JhKHZhcigtLW5lZXRvLXVpLWdyYXktMjAwKSwgMC41KSAwJSxcbiAgICAgICAgcmdiYSh2YXIoLS1uZWV0by11aS1ncmF5LTIwMCksIDEpIDI1JVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAmOmhvdmVyLFxuICAgICY6YWN0aXZlIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYih2YXIoLS1uZWV0by11aS1ncmF5LTIwMCkpO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuXG4gICAgICAubmVldG8tZmlsdGVycy1iYXJfX2Jsb2NrLWNsb3NlIHtcbiAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgY29sb3I6IHJnYih2YXIoLS1uZWV0by11aS1ibGFjaykpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1uZWV0by11aS1yb3VuZGVkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmOmZvY3VzIHtcbiAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggcmdiYSh2YXIoLS1uZWV0by11aS1ncmF5LTgwMCksIDE1JSk7XG4gICAgfVxuICB9XG5cbiAgJi0tc2VwYXJhdG9yIHtcbiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIHJnYih2YXIoLS1uZWV0by11aS1ncmF5LTQwMCkpO1xuICAgIG1hcmdpbjogMTJweCA4cHg7XG4gICAgYWxpZ24tc2VsZjogc3RyZXRjaDtcbiAgfVxufVxuIiwiLm5lZXRvLWZpbHRlcnMtYmFyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC13cmFwOiB3cmFwO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuLm5lZXRvLWZpbHRlcnMtYmFyX19ibG9jayB7XG4gIHBhZGRpbmc6IDRweCA4cHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZ2FwOiA0cHg7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLW5lZXRvLXVpLXJvdW5kZWQpO1xuICB0cmFuc2l0aW9uOiB2YXIoLS1uZWV0by11aS10cmFuc2l0aW9uKTtcbiAgbWFyZ2luOiA0cHggMDtcbiAgbWF4LXdpZHRoOiAzODRweDtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5uZWV0by1maWx0ZXJzLWJhcl9fYmxvY2sgcDpmaXJzdC1jaGlsZCB7XG4gIGNvbG9yOiByZ2IodmFyKC0tbmVldG8tdWktZ3JheS03MDApKTtcbn1cbi5uZWV0by1maWx0ZXJzLWJhcl9fYmxvY2stY2xvc2Uge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIHBhZGRpbmc6IDhweDtcbiAgb3BhY2l0eTogMDtcbiAgY29sb3I6IHJnYih2YXIoLS1uZWV0by11aS1ncmF5LTgwMCkpO1xuICB0cmFuc2l0aW9uOiB2YXIoLS1uZWV0by11aS10cmFuc2l0aW9uKTtcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDkwZGVnLCByZ2JhKHZhcigtLW5lZXRvLXVpLWdyYXktMjAwKSwgMC41KSAwJSwgcmdiYSh2YXIoLS1uZWV0by11aS1ncmF5LTIwMCksIDEpIDI1JSk7XG59XG4ubmVldG8tZmlsdGVycy1iYXJfX2Jsb2NrOmhvdmVyLCAubmVldG8tZmlsdGVycy1iYXJfX2Jsb2NrOmFjdGl2ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYih2YXIoLS1uZWV0by11aS1ncmF5LTIwMCkpO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4ubmVldG8tZmlsdGVycy1iYXJfX2Jsb2NrOmhvdmVyIC5uZWV0by1maWx0ZXJzLWJhcl9fYmxvY2stY2xvc2UsIC5uZWV0by1maWx0ZXJzLWJhcl9fYmxvY2s6YWN0aXZlIC5uZWV0by1maWx0ZXJzLWJhcl9fYmxvY2stY2xvc2Uge1xuICBvcGFjaXR5OiAxO1xuICBjb2xvcjogcmdiKHZhcigtLW5lZXRvLXVpLWJsYWNrKSk7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLW5lZXRvLXVpLXJvdW5kZWQpO1xufVxuLm5lZXRvLWZpbHRlcnMtYmFyX19ibG9jazpmb2N1cyB7XG4gIG91dGxpbmU6IG5vbmU7XG4gIGJveC1zaGFkb3c6IDAgMCAwIDNweCByZ2JhKHZhcigtLW5lZXRvLXVpLWdyYXktODAwKSwgMTUlKTtcbn1cbi5uZWV0by1maWx0ZXJzLWJhci0tc2VwYXJhdG9yIHtcbiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCByZ2IodmFyKC0tbmVldG8tdWktZ3JheS00MDApKTtcbiAgbWFyZ2luOiAxMnB4IDhweDtcbiAgYWxpZ24tc2VsZjogc3RyZXRjaDtcbn1cblxuLm5lZXRvLWZpbHRlcnMtcGFuZS1maWx0ZXIge1xuICB3aWR0aDogMzYwcHg7XG4gIG92ZXJmbG93OiB2aXNpYmxlO1xufVxuLm5lZXRvLWZpbHRlcnMtcGFuZS1maWx0ZXJfX2JvZHkge1xuICBhbGlnbi1pdGVtczogc3RyZXRjaCAhaW1wb3J0YW50O1xuICBnYXA6IDIwcHg7XG59XG4ubmVldG8tZmlsdGVycy1wYW5lLWZpbHRlcl9fYm9keSA+ICoge1xuICBmbGV4LWdyb3c6IDAgIWltcG9ydGFudDtcbn1cbi5uZWV0by1maWx0ZXJzLXBhbmUtZmlsdGVyX19ib2R5IHAge1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4ubmVldG8tZmlsdGVycy1wYW5lLWZpbHRlcl9fYm9keSAubmVldG8tZmlsdGVycy1wYW5lLWZpbHRlcl9faXRlbS13cmFwcGVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZ2FwOiA4cHg7XG4gIGZsZXg6IDE7XG59XG4ubmVldG8tZmlsdGVycy1wYW5lLWZpbHRlcl9fYm9keSAuYWNjb3JkaW9uX2l0ZW0gLm5lZXRvLWZpbHRlcnMtcGFuZS1maWx0ZXJfX2l0ZW0td3JhcHBlciB7XG4gIG1hcmdpbi10b3A6IDE2cHg7XG4gIGZsZXg6IDE7XG59XG4ubmVldG8tZmlsdGVycy1wYW5lLWZpbHRlcl9fYm9keSAuYWNjb3JkaW9uX2l0ZW0gLm5lZXRvLWZpbHRlcnMtcGFuZS1maWx0ZXJfX2l0ZW0td3JhcHBlcjpmaXJzdC1vZi10eXBlIHtcbiAgbWFyZ2luLXRvcDogMDtcbn1cbi5uZWV0by1maWx0ZXJzLXBhbmUtZmlsdGVyX19ib2R5IC5hY2NvcmRpb25faXRlbTpmaXJzdC1vZi10eXBlIC5uZWV0by11aS1hY2NvcmRpb25fX2l0ZW0ge1xuICBwYWRkaW5nLXRvcDogMDtcbn1cbi5uZWV0by1maWx0ZXJzLXBhbmUtZmlsdGVyX19ib2R5IC5uZWV0by11aS1hY2NvcmRpb25fX3dyYXBwZXItLWxhc3QtaXRlbSB7XG4gIGJvcmRlci1ib3R0b206IHRoaW4gc29saWQgcmdiKHZhcigtLW5lZXRvLXVpLWdyYXktMzAwKSk7XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjdweCkge1xuICAubmVldG8tZmlsdGVycy1wYW5lLWZpbHRlciB7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICB9XG59XG5cbi5uZWV0by1maWx0ZXJzLXBhbmUtYmFja2Ryb3Age1xuICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMHB4KSAhaW1wb3J0YW50O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKHZhcigtLW5lZXRvLXVpLWdyYXktNzAwKSwgMC4yKTtcbn1cblxuLm5lZXRvLWZpbHRlcnMtc2VnbWVudC0tYWN0aXZlIHtcbiAgYm9yZGVyLWNvbG9yOiByZ2IodmFyKC0tbmVldG8tdWktcHJpbWFyeS01MDApKSAhaW1wb3J0YW50O1xuICBib3gtc2hhZG93OiAwIDAgMCAxcHggcmdiKHZhcigtLW5lZXRvLXVpLXByaW1hcnktNTAwKSkgIWltcG9ydGFudDtcbn0iLCIubmVldG8tZmlsdGVycy1wYW5lLWZpbHRlciB7XG4gIHdpZHRoOiAzNjBweDtcbiAgb3ZlcmZsb3c6IHZpc2libGU7XG5cbiAgJl9fYm9keSB7XG4gICAgYWxpZ24taXRlbXM6IHN0cmV0Y2ggIWltcG9ydGFudDtcbiAgICBnYXA6IDIwcHg7XG5cbiAgICA+ICoge1xuICAgICAgZmxleC1ncm93OiAwICFpbXBvcnRhbnQ7XG4gICAgfVxuXG4gICAgcCB7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgfVxuXG4gICAgLm5lZXRvLWZpbHRlcnMtcGFuZS1maWx0ZXJfX2l0ZW0td3JhcHBlciB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIGdhcDogOHB4O1xuICAgICAgZmxleDogMTtcbiAgICB9XG5cbiAgICAuYWNjb3JkaW9uX2l0ZW0ge1xuICAgICAgLm5lZXRvLWZpbHRlcnMtcGFuZS1maWx0ZXJfX2l0ZW0td3JhcHBlciB7XG4gICAgICAgIG1hcmdpbi10b3A6IDE2cHg7XG4gICAgICAgIGZsZXg6IDE7XG5cbiAgICAgICAgJjpmaXJzdC1vZi10eXBlIHtcbiAgICAgICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAmOmZpcnN0LW9mLXR5cGUge1xuICAgICAgICAubmVldG8tdWktYWNjb3JkaW9uX19pdGVtIHtcbiAgICAgICAgICBwYWRkaW5nLXRvcDogMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAubmVldG8tdWktYWNjb3JkaW9uX193cmFwcGVyLS1sYXN0LWl0ZW0ge1xuICAgICAgYm9yZGVyLWJvdHRvbTogdGhpbiBzb2xpZCByZ2IodmFyKC0tbmVldG8tdWktZ3JheS0zMDApKTtcbiAgICB9XG4gIH1cblxuICBAaW5jbHVkZSB2aWV3cG9ydChtb2IpIHtcbiAgICB3aWR0aDogMTAwdnc7XG4gIH1cbn1cblxuLm5lZXRvLWZpbHRlcnMtcGFuZS1iYWNrZHJvcCB7XG4gIGJhY2tkcm9wLWZpbHRlcjogYmx1cigwcHgpICFpbXBvcnRhbnQ7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEodmFyKC0tbmVldG8tdWktZ3JheS03MDApLCAwLjIpO1xufVxuIiwiQG1peGluIHZpZXdwb3J0KCRtZWRpYSkge1xuICBAaWYgJG1lZGlhPT1kZXNrIHtcbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMjAwcHgpIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfSBAZWxzZSBpZiAkbWVkaWE9PXRhYi1taW4ge1xuICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDEwMjRweCkge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9IEBlbHNlIGlmICRtZWRpYT09dGFiLW9ubHkge1xuICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSBhbmQgKG1heC13aWR0aDogMTAyM3B4KSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH0gQGVsc2UgaWYgJG1lZGlhPT1tb2Ige1xuICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH0gQGVsc2UgaWYgJG1lZGlhPT14cy1tb2Ige1xuICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ3OXB4KSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH1cbn1cbiIsIi5uZWV0by1maWx0ZXJzLXNlZ21lbnQtLWFjdGl2ZSB7XG4gIGJvcmRlci1jb2xvcjogcmdiKHZhcigtLW5lZXRvLXVpLXByaW1hcnktNTAwKSkgIWltcG9ydGFudDtcbiAgYm94LXNoYWRvdzogMCAwIDAgMXB4IHJnYih2YXIoLS1uZWV0by11aS1wcmltYXJ5LTUwMCkpICFpbXBvcnRhbnQ7XG59XG4iXX0= */";
2576
2985
  n(css,{});
2577
2986
 
2578
2987
  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; }
@@ -2628,14 +3037,22 @@ var Filters = withT(function (_ref) {
2628
3037
  }, paneProps)), children));
2629
3038
  });
2630
3039
 
2631
- var DeleteAlert = function DeleteAlert(_ref) {
3040
+ var ITEMS_MAX_COUNT = 20;
3041
+ var SEGMENT_ACTIONS = {
3042
+ EDIT: "edit",
3043
+ DELETE: "delete"
3044
+ };
3045
+
3046
+ var Delete = function Delete(_ref) {
2632
3047
  var isOpen = _ref.isOpen,
2633
3048
  onClose = _ref.onClose,
2634
- segment = _ref.segment,
2635
- columns = _ref.columns;
3049
+ _ref$segment = _ref.segment,
3050
+ segment = _ref$segment === void 0 ? {} : _ref$segment,
3051
+ _ref$columns = _ref.columns,
3052
+ columns = _ref$columns === void 0 ? [] : _ref$columns;
2636
3053
  var _useTranslation = useTranslation(),
2637
3054
  t = _useTranslation.t;
2638
- var history = useHistory();
3055
+ var history = useHistory$1();
2639
3056
  var _getQueryParams = getQueryParams(),
2640
3057
  segmentId = _getQueryParams.segmentId;
2641
3058
  var _useDestroySegment = useDestroySegment(),
@@ -2673,162 +3090,56 @@ var DeleteAlert = function DeleteAlert(_ref) {
2673
3090
  });
2674
3091
  };
2675
3092
 
2676
- var Card = function Card(_ref) {
2677
- var segment = _ref.segment,
2678
- columns = _ref.columns,
2679
- defaultSegmentName = _ref.defaultSegmentName;
2680
- var _useState = useState(false),
2681
- _useState2 = _slicedToArray(_useState, 2),
2682
- isEditing = _useState2[0],
2683
- setIsEditing = _useState2[1];
2684
- var _useState3 = useState(false),
2685
- _useState4 = _slicedToArray(_useState3, 2),
2686
- isDeleteAlertOpen = _useState4[0],
2687
- setIsDeleteAlertOpen = _useState4[1];
2688
- var _useTranslation = useTranslation(),
2689
- t = _useTranslation.t;
2690
- var Menu = Dropdown$2.Menu,
2691
- MenuItem = Dropdown$2.MenuItem;
2692
- var _useUpdateSegment = useUpdateSegment(),
2693
- updateSegment = _useUpdateSegment.mutate;
2694
- var handleRename = function handleRename(values) {
2695
- return updateSegment({
2696
- id: segment.id,
2697
- payload: values
2698
- }, {
2699
- onSuccess: function onSuccess() {
2700
- return setIsEditing(false);
2701
- }
2702
- });
2703
- };
2704
- return /*#__PURE__*/React.createElement(Form, {
2705
- className: "neeto-ui-rounded-md flex w-full items-center justify-between border p-2",
2706
- formProps: {
2707
- noValidate: true
2708
- },
2709
- formikProps: {
2710
- initialValues: segment,
2711
- validateOnChange: true,
2712
- validateOnBlur: true,
2713
- validationSchema: buildSegmentsValidationSchema(defaultSegmentName),
2714
- onSubmit: handleRename,
2715
- enableReinitialize: true
2716
- }
2717
- }, function (_ref2) {
2718
- var resetForm = _ref2.resetForm;
2719
- return /*#__PURE__*/React.createElement(React.Fragment, null, isEditing ? /*#__PURE__*/React.createElement(FormikInlineInput, {
2720
- autoFocus: true,
2721
- nakedInput: true,
2722
- handleCancel: function handleCancel() {
2723
- return setIsEditing(false);
2724
- },
2725
- name: "name",
2726
- placeholder: t("neetoFilters.segments.name")
2727
- }) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Typography, {
2728
- style: "body2"
2729
- }, segment.name), /*#__PURE__*/React.createElement(Dropdown$2, {
2730
- buttonStyle: "text",
2731
- disabled: isNotPresent(segment.id),
2732
- icon: MenuHorizontal,
2733
- size: "small"
2734
- }, /*#__PURE__*/React.createElement(Menu, null, /*#__PURE__*/React.createElement(MenuItem.Button, {
2735
- onClick: function onClick() {
2736
- setIsEditing(true);
2737
- resetForm();
2738
- }
2739
- }, t("neetoFilters.common.rename")), /*#__PURE__*/React.createElement(MenuItem.Button, {
2740
- onClick: function onClick() {
2741
- return setIsDeleteAlertOpen(true);
2742
- }
2743
- }, t("neetoFilters.common.delete"))))), /*#__PURE__*/React.createElement(DeleteAlert, {
2744
- columns: columns,
2745
- segment: segment,
2746
- isOpen: isDeleteAlertOpen,
2747
- onClose: function onClose() {
2748
- return setIsDeleteAlertOpen(false);
2749
- }
2750
- }));
2751
- });
2752
- };
2753
- var Card$1 = /*#__PURE__*/React.memo(Card);
2754
-
2755
- var ManagePane = function ManagePane(_ref) {
2756
- var isOpen = _ref.isOpen,
2757
- onClose = _ref.onClose,
2758
- entity = _ref.entity,
2759
- columns = _ref.columns,
2760
- defaultSegmentName = _ref.defaultSegmentName;
2761
- var _useState = useState(""),
2762
- _useState2 = _slicedToArray(_useState, 2),
2763
- searchTerm = _useState2[0],
2764
- setSearchTerm = _useState2[1];
2765
- var inputRef = useRef(null);
2766
- var _useTranslation = useTranslation(),
2767
- t = _useTranslation.t;
2768
- var debouncedSearchTerm = useDebounce(searchTerm);
2769
- var _useFetchSegments = useFetchSegments({
2770
- entity: entity,
2771
- searchTerm: debouncedSearchTerm
2772
- }),
2773
- _useFetchSegments$dat = _useFetchSegments.data,
2774
- segments = _useFetchSegments$dat === void 0 ? [] : _useFetchSegments$dat,
2775
- isLoading = _useFetchSegments.isLoading;
2776
- return /*#__PURE__*/React.createElement(Pane$1, {
2777
- isOpen: isOpen,
2778
- onClose: onClose,
2779
- initialFocusRef: inputRef
2780
- }, /*#__PURE__*/React.createElement(Pane$1.Header, null, /*#__PURE__*/React.createElement(Typography, {
2781
- style: "h2"
2782
- }, t("neetoFilters.segments.manageSegments"))), /*#__PURE__*/React.createElement(Pane$1.Body, {
2783
- className: "max-h-full gap-4 overflow-scroll"
2784
- }, /*#__PURE__*/React.createElement(Search, {
2785
- className: "w-full flex-grow-0",
2786
- placeholder: t("neetoFilters.segments.searchSegments"),
2787
- ref: inputRef,
2788
- onSearch: function onSearch(value) {
2789
- return setSearchTerm(value);
2790
- }
2791
- }), isLoading ? /*#__PURE__*/React.createElement(Spinner, {
2792
- className: "mx-auto mt-4"
2793
- }) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Card$1, {
2794
- segment: {
2795
- name: defaultSegmentName
2796
- }
2797
- }), isEmpty(segments) ? /*#__PURE__*/React.createElement(Typography, {
2798
- className: "mx-auto",
2799
- style: "body2"
2800
- }, t("neetoFilters.segments.noSegmentsFound")) : segments.map(function (segment) {
2801
- return /*#__PURE__*/React.createElement(Card$1, {
2802
- columns: columns,
2803
- defaultSegmentName: defaultSegmentName,
2804
- segment: segment,
2805
- key: segment.id
2806
- });
2807
- }))));
3093
+ var reorderList = function reorderList(list, startIndex, endIndex) {
3094
+ var result = Array.from(list);
3095
+ var _result$splice = result.splice(startIndex, 1),
3096
+ _result$splice2 = _slicedToArray(_result$splice, 1),
3097
+ removed = _result$splice2[0];
3098
+ result.splice(endIndex, 0, removed);
3099
+ return result;
2808
3100
  };
2809
3101
 
2810
- var ITEMS_MAX_COUNT = 20;
2811
-
2812
- var MenuBlocks = function MenuBlocks(_ref) {
3102
+ var useSegments = function useSegments(_ref) {
2813
3103
  var entity = _ref.entity,
2814
3104
  columns = _ref.columns,
2815
- defaultSegmentName = _ref.defaultSegmentName;
2816
- var _useState = useState(false),
2817
- _useState2 = _slicedToArray(_useState, 2),
2818
- showAll = _useState2[0],
2819
- setShowAll = _useState2[1];
2820
- var history = useHistory();
3105
+ appliedFilters = _ref.appliedFilters,
3106
+ childrenKeys = _ref.childrenKeys;
2821
3107
  var _useTranslation = useTranslation(),
2822
3108
  t = _useTranslation.t;
2823
- var _getQueryParams = getQueryParams(),
2824
- segmentId = _getQueryParams.segmentId;
2825
- var appliedFilters = buildFiltersFromURL(columns);
3109
+ var history = useHistory$1();
3110
+ var _useState = useState([]),
3111
+ _useState2 = _slicedToArray(_useState, 2),
3112
+ segments = _useState2[0],
3113
+ setSegments = _useState2[1];
2826
3114
  var _useFetchSegments = useFetchSegments({
2827
3115
  entity: entity
2828
3116
  }),
2829
- _useFetchSegments$dat = _useFetchSegments.data,
2830
- segments = _useFetchSegments$dat === void 0 ? [] : _useFetchSegments$dat,
3117
+ fetchedSegments = _useFetchSegments.data,
2831
3118
  isLoading = _useFetchSegments.isLoading;
3119
+ var _useUpdateSegment = useUpdateSegment(),
3120
+ updateSegment = _useUpdateSegment.mutate,
3121
+ isUpdating = _useUpdateSegment.isLoading;
3122
+ var _useState3 = useState({
3123
+ action: "",
3124
+ segment: undefined
3125
+ }),
3126
+ _useState4 = _slicedToArray(_useState3, 2),
3127
+ confirmAction = _useState4[0],
3128
+ setConfirmAction = _useState4[1];
3129
+ var handleSegmentsReorder = function handleSegmentsReorder(_ref2) {
3130
+ var source = _ref2.source,
3131
+ destination = _ref2.destination;
3132
+ if (!destination || source.index === destination.index) return;
3133
+ var reorderedSegments = reorderList(segments, source.index, destination.index);
3134
+ updateSegment({
3135
+ id: segments[source.index].id,
3136
+ payload: {
3137
+ position: destination.index + 1
3138
+ },
3139
+ showToastr: false
3140
+ });
3141
+ setSegments(reorderedSegments);
3142
+ };
2832
3143
  var clearAppliedFilters = function clearAppliedFilters() {
2833
3144
  var _filters$, _filters$2;
2834
3145
  var filters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : appliedFilters;
@@ -2843,10 +3154,10 @@ var MenuBlocks = function MenuBlocks(_ref) {
2843
3154
  })
2844
3155
  });
2845
3156
  };
2846
- var applySelectedSegment = function applySelectedSegment(_ref2) {
3157
+ var handleSelectSegment = function handleSelectSegment(_ref3) {
2847
3158
  var _filters$3;
2848
- var id = _ref2.id,
2849
- filters = _ref2.filters;
3159
+ var id = _ref3.id,
3160
+ filters = _ref3.filters;
2850
3161
  history.push({
2851
3162
  search: buildUrlFromSegment({
2852
3163
  columns: columns,
@@ -2855,14 +3166,9 @@ var MenuBlocks = function MenuBlocks(_ref) {
2855
3166
  })
2856
3167
  });
2857
3168
  };
2858
- var handleSelectSegment = function handleSelectSegment(_ref3) {
2859
- var id = _ref3.id,
2860
- filters = _ref3.filters;
2861
- return equals(id, segmentId) ? clearAppliedFilters(filters) : applySelectedSegment({
2862
- id: id,
2863
- filters: filters
2864
- });
2865
- };
3169
+ useEffect(function () {
3170
+ setSegments(fetchedSegments);
3171
+ }, [fetchedSegments]);
2866
3172
  if (isLoading) {
2867
3173
  return /*#__PURE__*/React.createElement(Spinner, null);
2868
3174
  }
@@ -2871,6 +3177,139 @@ var MenuBlocks = function MenuBlocks(_ref) {
2871
3177
  style: "body2"
2872
3178
  }, t("neetoFilters.segments.noSegmentsFound"));
2873
3179
  }
3180
+ var handleUpdate = function handleUpdate(_ref4, _ref5) {
3181
+ var name = _ref4.name;
3182
+ var setFieldError = _ref5.setFieldError;
3183
+ var filtersPayload = buildSegmentsPayload(filters, childrenKeys);
3184
+ updateSegment({
3185
+ id: confirmAction.segment.id,
3186
+ payload: {
3187
+ name: name,
3188
+ filters: filtersPayload
3189
+ },
3190
+ showToastr: false
3191
+ }, {
3192
+ onSuccess: function onSuccess() {
3193
+ showThumbsUpToastr();
3194
+ setConfirmAction({
3195
+ action: "",
3196
+ segment: undefined
3197
+ });
3198
+ },
3199
+ onError: function onError(error) {
3200
+ return setFieldError("name", error.response.data.error);
3201
+ }
3202
+ });
3203
+ };
3204
+ var filters = buildFiltersFromSearchParams(columns);
3205
+ return {
3206
+ segments: segments,
3207
+ clearAppliedFilters: clearAppliedFilters,
3208
+ handleSelectSegment: handleSelectSegment,
3209
+ handleSegmentsReorder: handleSegmentsReorder,
3210
+ setConfirmAction: setConfirmAction,
3211
+ isUpdating: isUpdating,
3212
+ handleUpdate: handleUpdate,
3213
+ filters: filters,
3214
+ onClose: function onClose() {
3215
+ return setConfirmAction({
3216
+ action: "",
3217
+ segment: undefined
3218
+ });
3219
+ },
3220
+ selectedSegment: confirmAction.segment,
3221
+ isDeleteAlertOpen: confirmAction.action === SEGMENT_ACTIONS.DELETE,
3222
+ isEditPaneOpen: confirmAction.action === SEGMENT_ACTIONS.EDIT
3223
+ };
3224
+ };
3225
+
3226
+ var Segment = function Segment(_ref) {
3227
+ var id = _ref.id,
3228
+ isActive = _ref.isActive,
3229
+ label = _ref.label,
3230
+ onClick = _ref.onClick,
3231
+ _ref$shouldShowDropdo = _ref.shouldShowDropdown,
3232
+ shouldShowDropdown = _ref$shouldShowDropdo === void 0 ? false : _ref$shouldShowDropdo,
3233
+ segments = _ref.segments,
3234
+ setConfirmAction = _ref.setConfirmAction;
3235
+ var _useTranslation = useTranslation(),
3236
+ t = _useTranslation.t;
3237
+ var menuItems = [{
3238
+ key: "edit",
3239
+ label: t("neetoFilters.common.edit"),
3240
+ onClick: function onClick() {
3241
+ return setConfirmAction({
3242
+ action: SEGMENT_ACTIONS.EDIT,
3243
+ segment: findById(id, segments)
3244
+ });
3245
+ }
3246
+ }, {
3247
+ key: "delete",
3248
+ label: t("neetoFilters.common.delete"),
3249
+ onClick: function onClick() {
3250
+ return setConfirmAction({
3251
+ action: SEGMENT_ACTIONS.DELETE,
3252
+ segment: findById(id, segments)
3253
+ });
3254
+ }
3255
+ }];
3256
+ return /*#__PURE__*/React.createElement("div", {
3257
+ onClick: onClick,
3258
+ "data-cy": "neeto-filters-segment-block-".concat(hyphenate(label)),
3259
+ className: classnames("neeto-ui-border-gray-400 neeto-ui-bg-white hover:neeto-ui-bg-gray-200 neeto-ui-rounded-lg mb-2 flex h-10 cursor-pointer items-center gap-2 border p-3 transition-all duration-300 ease-in-out", {
3260
+ "neeto-filters-segment--active": isActive
3261
+ })
3262
+ }, /*#__PURE__*/React.createElement("div", {
3263
+ className: "flex flex-grow items-center gap-2 overflow-hidden",
3264
+ "data-cy": "new-element-field"
3265
+ }, /*#__PURE__*/React.createElement(Typography, {
3266
+ className: "truncate leading-snug",
3267
+ "data-cy": hyphenate(label),
3268
+ style: "body2"
3269
+ }, label)), shouldShowDropdown && /*#__PURE__*/React.createElement(MoreDropdown, {
3270
+ menuItems: menuItems,
3271
+ dropdownButtonProps: {
3272
+ className: "min-h-0 flex-shrink-0",
3273
+ "data-cy": "".concat(hyphenate(label), "-more-dropdown")
3274
+ }
3275
+ }));
3276
+ };
3277
+
3278
+ var MenuBlocks = function MenuBlocks(_ref) {
3279
+ var entity = _ref.entity,
3280
+ columns = _ref.columns,
3281
+ defaultSegmentName = _ref.defaultSegmentName,
3282
+ childrenKeys = _ref.childrenKeys,
3283
+ customFilters = _ref.customFilters;
3284
+ var _useTranslation = useTranslation(),
3285
+ t = _useTranslation.t;
3286
+ var segmentFormInitialRef = useRef(null);
3287
+ var _useState = useState(false),
3288
+ _useState2 = _slicedToArray(_useState, 2),
3289
+ showAll = _useState2[0],
3290
+ setShowAll = _useState2[1];
3291
+ var _getQueryParams = getQueryParams(),
3292
+ segmentId = _getQueryParams.segmentId;
3293
+ var appliedFilters = buildFiltersFromURL(columns);
3294
+ var _useSegments = useSegments({
3295
+ entity: entity,
3296
+ columns: columns,
3297
+ appliedFilters: appliedFilters,
3298
+ childrenKeys: childrenKeys
3299
+ }),
3300
+ _useSegments$segments = _useSegments.segments,
3301
+ segments = _useSegments$segments === void 0 ? [] : _useSegments$segments,
3302
+ clearAppliedFilters = _useSegments.clearAppliedFilters,
3303
+ handleSelectSegment = _useSegments.handleSelectSegment,
3304
+ handleSegmentsReorder = _useSegments.handleSegmentsReorder,
3305
+ onClose = _useSegments.onClose,
3306
+ setConfirmAction = _useSegments.setConfirmAction,
3307
+ selectedSegment = _useSegments.selectedSegment,
3308
+ isDeleteAlertOpen = _useSegments.isDeleteAlertOpen,
3309
+ isEditPaneOpen = _useSegments.isEditPaneOpen,
3310
+ isUpdating = _useSegments.isUpdating,
3311
+ handleUpdate = _useSegments.handleUpdate,
3312
+ filters = _useSegments.filters;
2874
3313
  return /*#__PURE__*/React.createElement(React.Fragment, null, segments.length > ITEMS_MAX_COUNT && /*#__PURE__*/React.createElement(Button, {
2875
3314
  icon: Down,
2876
3315
  style: "link",
@@ -2882,72 +3321,90 @@ var MenuBlocks = function MenuBlocks(_ref) {
2882
3321
  return !open;
2883
3322
  });
2884
3323
  }
2885
- }), /*#__PURE__*/React.createElement(MenuBar.Block, {
2886
- active: isEmpty(appliedFilters),
3324
+ }), /*#__PURE__*/React.createElement(Segment, {
3325
+ isActive: isEmpty(appliedFilters),
2887
3326
  label: defaultSegmentName,
2888
3327
  onClick: clearAppliedFilters
2889
- }), segments.slice(0, showAll ? segments.length : ITEMS_MAX_COUNT).map(function (segment) {
2890
- return /*#__PURE__*/React.createElement(MenuBar.Block, {
2891
- active: segment.id === segmentId,
2892
- count: segment.count,
2893
- "data-cy": "neeto-filters-segment-block-".concat(hyphenate(segment.name)),
2894
- key: segment.id,
2895
- label: segment.name,
2896
- onClick: function onClick() {
2897
- return handleSelectSegment(segment);
2898
- }
2899
- });
3328
+ }), /*#__PURE__*/React.createElement(DragDropContext, {
3329
+ onDragEnd: handleSegmentsReorder
3330
+ }, /*#__PURE__*/React.createElement(Droppable, {
3331
+ droppableId: "neeto-filters-segments-".concat(entity)
3332
+ }, function (_ref2) {
3333
+ var innerRef = _ref2.innerRef,
3334
+ droppableProps = _ref2.droppableProps,
3335
+ placeholder = _ref2.placeholder;
3336
+ return /*#__PURE__*/React.createElement("div", _extends({
3337
+ ref: innerRef
3338
+ }, droppableProps), segments.slice(0, showAll ? segments.length : ITEMS_MAX_COUNT).map(function (segment, index) {
3339
+ return /*#__PURE__*/React.createElement(Draggable, {
3340
+ index: index,
3341
+ draggableId: segment.id.toString(),
3342
+ isDragDisabled: isUpdating,
3343
+ key: segment.id.toString()
3344
+ }, function (_ref3) {
3345
+ var innerRef = _ref3.innerRef,
3346
+ draggableProps = _ref3.draggableProps,
3347
+ dragHandleProps = _ref3.dragHandleProps;
3348
+ return /*#__PURE__*/React.createElement("div", _extends({
3349
+ ref: innerRef
3350
+ }, draggableProps, dragHandleProps), /*#__PURE__*/React.createElement(Segment, {
3351
+ segments: segments,
3352
+ setConfirmAction: setConfirmAction,
3353
+ shouldShowDropdown: true,
3354
+ id: segment.id,
3355
+ isActive: segment.id === segmentId,
3356
+ key: segment.id,
3357
+ label: segment.name,
3358
+ onClick: function onClick() {
3359
+ return handleSelectSegment(segment);
3360
+ }
3361
+ }));
3362
+ });
3363
+ }), placeholder);
3364
+ })), /*#__PURE__*/React.createElement(SegmentForm, {
3365
+ childrenKeys: childrenKeys,
3366
+ columns: columns,
3367
+ customFilters: customFilters,
3368
+ defaultSegmentName: defaultSegmentName,
3369
+ filters: filters,
3370
+ onClose: onClose,
3371
+ segmentFormInitialRef: segmentFormInitialRef,
3372
+ isEdit: true,
3373
+ handleSubmit: handleUpdate,
3374
+ initialValues: selectedSegment,
3375
+ isOpen: isEditPaneOpen,
3376
+ isSubmitting: isUpdating
3377
+ }), /*#__PURE__*/React.createElement(Delete, {
3378
+ columns: columns,
3379
+ onClose: onClose,
3380
+ isOpen: isDeleteAlertOpen,
3381
+ segment: selectedSegment
2900
3382
  }));
2901
3383
  };
2902
3384
  var MenuBlocks$1 = /*#__PURE__*/React.memo(MenuBlocks);
2903
3385
 
2904
- var Segments = function Segments(_ref) {
2905
- var entity = _ref.entity,
3386
+ var Segments = withT(function (_ref) {
3387
+ var t = _ref.t,
3388
+ entity = _ref.entity,
2906
3389
  columns = _ref.columns,
2907
- _ref$setIsFilterPaneO = _ref.setIsFilterPaneOpen,
2908
- setIsFilterPaneOpen = _ref$setIsFilterPaneO === void 0 ? noop : _ref$setIsFilterPaneO,
2909
3390
  _ref$defaultSegmentNa = _ref.defaultSegmentName,
2910
- defaultSegmentName = _ref$defaultSegmentNa === void 0 ? t$1("neetoFilters.common.allResults") : _ref$defaultSegmentNa;
2911
- return function () {
2912
- var _useState = useState(false),
2913
- _useState2 = _slicedToArray(_useState, 2),
2914
- isSegmentsPaneOpen = _useState2[0],
2915
- setIsSegmentsPaneOpen = _useState2[1];
2916
- var _useTranslation = useTranslation(),
2917
- t = _useTranslation.t;
2918
- var iconProps = [{
2919
- icon: Settings,
2920
- onClick: function onClick() {
2921
- setIsFilterPaneOpen(false);
2922
- setIsSegmentsPaneOpen(true);
2923
- },
2924
- tooltipProps: {
2925
- content: t("neetoFilters.segments.manageSegments"),
2926
- position: "top"
2927
- }
2928
- }];
2929
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(MenuBar.SubTitle, {
2930
- iconProps: iconProps
2931
- }, /*#__PURE__*/React.createElement(Typography, {
2932
- component: "h4",
2933
- style: "h5",
2934
- textTransform: "uppercase",
2935
- weight: "bold"
2936
- }, t("neetoFilters.common.segments"))), /*#__PURE__*/React.createElement(MenuBlocks$1, {
2937
- columns: columns,
2938
- defaultSegmentName: defaultSegmentName,
2939
- entity: entity
2940
- }), /*#__PURE__*/React.createElement(ManagePane, {
2941
- columns: columns,
2942
- defaultSegmentName: defaultSegmentName,
2943
- entity: entity,
2944
- isOpen: isSegmentsPaneOpen,
2945
- onClose: function onClose() {
2946
- return setIsSegmentsPaneOpen(false);
2947
- }
2948
- }));
2949
- }();
2950
- };
3391
+ defaultSegmentName = _ref$defaultSegmentNa === void 0 ? t("neetoFilters.common.allResults") : _ref$defaultSegmentNa,
3392
+ customFilters = _ref.customFilters,
3393
+ _ref$childrenKeys = _ref.childrenKeys,
3394
+ childrenKeys = _ref$childrenKeys === void 0 ? [] : _ref$childrenKeys;
3395
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(MenuBar.SubTitle, null, /*#__PURE__*/React.createElement(Typography, {
3396
+ component: "h4",
3397
+ style: "h5",
3398
+ textTransform: "uppercase",
3399
+ weight: "bold"
3400
+ }, t("neetoFilters.common.segments"))), /*#__PURE__*/React.createElement(MenuBlocks$1, {
3401
+ childrenKeys: childrenKeys,
3402
+ columns: columns,
3403
+ customFilters: customFilters,
3404
+ defaultSegmentName: defaultSegmentName,
3405
+ entity: entity
3406
+ }));
3407
+ });
2951
3408
  var index = /*#__PURE__*/React.memo(Segments);
2952
3409
 
2953
3410
  export { Bar, Filters, index as Segments, buildFilterColumnsFromFields, buildFiltersFromURL, buildSelectorsFromURL, buildUrlFromFilters, buildUrlFromSegment, useDestroySegment, useFetchSegments, useUpdateSegment };