@bigbinary/neeto-filters-frontend 3.2.0-beta.1 → 3.2.0

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,65 +1,22 @@
1
- import React, { useState, useEffect, useMemo, useRef, useTransition } from 'react';
1
+ import React, { useState, useRef, useEffect, useTransition, useMemo } from 'react';
2
2
  import classnames from 'classnames';
3
3
  import i18next, { t as t$1 } from 'i18next';
4
- import { findBy, isNotEmpty, capitalize, removeBy, toLabelAndValue, hyphenate, noop as noop$1, replaceBy, isNotPresent, 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, toLower, mergeLeft, 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, IndeterminateCircle, Plus, Close, Down } from '@bigbinary/neeto-icons';
9
- import { Select, DatePicker, TimePicker, 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';
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 { getQueryParams, dateFormat, buildUrl } from '@bigbinary/neeto-commons-frontend/utils';
7
+ import { Tooltip, Typography, Dropdown as Dropdown$2, Button, Pane as Pane$1, Alert, Select, DatePicker, TimePicker, Input as Input$1, Accordion, Spinner } from '@bigbinary/neetoui';
8
+ import { groupBy, anyPass, isNil, isEmpty, any, concat, omit, toLower, mergeLeft, identity, mergeRight, toPairs, not, pluck, either, has, equals, pick, modify, prop, isNotNil, append, last, mergeDeepRight } from 'ramda';
11
9
  import { useTranslation, Trans } from 'react-i18next';
12
- import { useHistory } from 'react-router-dom/cjs/react-router-dom.min';
13
- import { getQueryParams, dateFormat, buildUrl, showThumbsUpToastr } from '@bigbinary/neeto-commons-frontend/utils';
14
- import * as yup from 'yup';
10
+ import { useHistory, useLocation } from 'react-router-dom';
15
11
  import useHotkeys from '@bigbinary/neeto-hotkeys';
16
- import { useHistory as useHistory$1, useLocation } from 'react-router-dom';
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';
17
15
  import axios from 'axios';
16
+ import * as yup from 'yup';
18
17
  import Search from '@bigbinary/neeto-molecules/Search';
19
- import ReactDOM, { createPortal } from 'react-dom';
20
18
  import MenuBar from '@bigbinary/neeto-molecules/MenuBar';
21
- import MoreDropdown from '@bigbinary/neeto-molecules/MoreDropdown';
22
-
23
- function _typeof(o) {
24
- "@babel/helpers - typeof";
25
-
26
- return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
27
- return typeof o;
28
- } : function (o) {
29
- return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
30
- }, _typeof(o);
31
- }
32
-
33
- function _toPrimitive(input, hint) {
34
- if (_typeof(input) !== "object" || input === null) return input;
35
- var prim = input[Symbol.toPrimitive];
36
- if (prim !== undefined) {
37
- var res = prim.call(input, hint || "default");
38
- if (_typeof(res) !== "object") return res;
39
- throw new TypeError("@@toPrimitive must return a primitive value.");
40
- }
41
- return (hint === "string" ? String : Number)(input);
42
- }
43
-
44
- function _toPropertyKey(arg) {
45
- var key = _toPrimitive(arg, "string");
46
- return _typeof(key) === "symbol" ? key : String(key);
47
- }
48
-
49
- function _defineProperty(obj, key, value) {
50
- key = _toPropertyKey(key);
51
- if (key in obj) {
52
- Object.defineProperty(obj, key, {
53
- value: value,
54
- enumerable: true,
55
- configurable: true,
56
- writable: true
57
- });
58
- } else {
59
- obj[key] = value;
60
- }
61
- return obj;
62
- }
19
+ import { FormikInlineInput } from '@bigbinary/neeto-molecules/InlineInput';
63
20
 
64
21
  function _arrayLikeToArray(arr, len) {
65
22
  if (len == null || len > arr.length) len = arr.length;
@@ -92,59 +49,45 @@ function _toConsumableArray(arr) {
92
49
  return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
93
50
  }
94
51
 
95
- function _extends$1() {
96
- _extends$1 = 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$1.apply(this, arguments);
108
- }
52
+ function _typeof(o) {
53
+ "@babel/helpers - typeof";
109
54
 
110
- function _arrayWithHoles(arr) {
111
- if (Array.isArray(arr)) return arr;
55
+ return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
56
+ return typeof o;
57
+ } : function (o) {
58
+ return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
59
+ }, _typeof(o);
112
60
  }
113
61
 
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;
62
+ function _toPrimitive(input, hint) {
63
+ if (_typeof(input) !== "object" || input === null) return input;
64
+ var prim = input[Symbol.toPrimitive];
65
+ if (prim !== undefined) {
66
+ var res = prim.call(input, hint || "default");
67
+ if (_typeof(res) !== "object") return res;
68
+ throw new TypeError("@@toPrimitive must return a primitive value.");
139
69
  }
70
+ return (hint === "string" ? String : Number)(input);
140
71
  }
141
72
 
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.");
73
+ function _toPropertyKey(arg) {
74
+ var key = _toPrimitive(arg, "string");
75
+ return _typeof(key) === "symbol" ? key : String(key);
144
76
  }
145
77
 
146
- function _slicedToArray(arr, i) {
147
- return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
78
+ function _defineProperty(obj, key, value) {
79
+ key = _toPropertyKey(key);
80
+ if (key in obj) {
81
+ Object.defineProperty(obj, key, {
82
+ value: value,
83
+ enumerable: true,
84
+ configurable: true,
85
+ writable: true
86
+ });
87
+ } else {
88
+ obj[key] = value;
89
+ }
90
+ return obj;
148
91
  }
149
92
 
150
93
  var SEGMENTS_BASE_URL = "/neeto_filters/segments";
@@ -229,6 +172,21 @@ var DATE_RULES = {
229
172
  var SEARCH_TERM_KEY = "search_term";
230
173
  var SEGMENT_ID_KEY = "segment_id";
231
174
 
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
+
232
190
  var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
233
191
 
234
192
  function getDefaultExportFromCjs (x) {
@@ -246,44 +204,6 @@ dayjs_min.exports;
246
204
  var dayjs_minExports = dayjs_min.exports;
247
205
  var dayjs = /*@__PURE__*/getDefaultExportFromCjs(dayjs_minExports);
248
206
 
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
-
287
207
  var NUMBER_RULES = [{
288
208
  label: t$1("neetoFilters.rules.is"),
289
209
  value: "is"
@@ -336,8 +256,86 @@ var DEFAULT_HELP_ICON_PROPS = {
336
256
  }
337
257
  };
338
258
 
339
- 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; }
340
- 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; }
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; }
341
339
  var groupByGroup = groupBy(function (_ref) {
342
340
  var group = _ref.group;
343
341
  return group || "individual";
@@ -636,7 +634,7 @@ var buildDatePayload = function buildDatePayload(value) {
636
634
  var buildSingleDatePayload = function buildSingleDatePayload(filter) {
637
635
  var value = filter.value;
638
636
  var filterValue = Array.isArray(value) ? value.join(",") : value;
639
- return _objectSpread$5(_objectSpread$5({}, filter), {}, {
637
+ return _objectSpread$4(_objectSpread$4({}, filter), {}, {
640
638
  value: filterValue,
641
639
  type: "date"
642
640
  });
@@ -644,7 +642,7 @@ var buildSingleDatePayload = function buildSingleDatePayload(filter) {
644
642
  var buildSingleTimePayload = function buildSingleTimePayload(filter) {
645
643
  var value = filter.value;
646
644
  var filterValue = Array.isArray(value) ? value.join(",") : value;
647
- return _objectSpread$5(_objectSpread$5({}, filter), {}, {
645
+ return _objectSpread$4(_objectSpread$4({}, filter), {}, {
648
646
  value: filterValue,
649
647
  type: "time"
650
648
  });
@@ -895,7 +893,7 @@ var buildUrlFromSegment = function buildUrlFromSegment(_ref19) {
895
893
  });
896
894
  return acc;
897
895
  }, isNotEmpty(id) ? _defineProperty({}, SEGMENT_ID_KEY, id) : {});
898
- return new URLSearchParams(_objectSpread$5(_objectSpread$5({}, searchParams), newSearchParams)).toString();
896
+ return new URLSearchParams(_objectSpread$4(_objectSpread$4({}, searchParams), newSearchParams)).toString();
899
897
  };
900
898
  var getSearchTermFromUrl = function getSearchTermFromUrl() {
901
899
  return getQueryParams().searchTerm || "";
@@ -912,7 +910,7 @@ var buildFilterColumnsFromFields = function buildFilterColumnsFromFields(_ref22)
912
910
  var id = field.id,
913
911
  name = field.name,
914
912
  kind = field.kind;
915
- var column = _objectSpread$5({
913
+ var column = _objectSpread$4({
916
914
  key: toLower(name),
917
915
  node: "".concat(name, ":").concat(id),
918
916
  label: capitalize(name),
@@ -936,7 +934,7 @@ var buildFilterColumnsFromFields = function buildFilterColumnsFromFields(_ref22)
936
934
  };
937
935
  var getColumnsWithStandardizedType = function getColumnsWithStandardizedType(columns) {
938
936
  return columns.map(function (column) {
939
- return _objectSpread$5(_objectSpread$5({}, column), {}, {
937
+ return _objectSpread$4(_objectSpread$4({}, column), {}, {
940
938
  type: standardizeColumnType(column.type)
941
939
  });
942
940
  });
@@ -945,1176 +943,142 @@ var isKeywordFilterPresent = function isKeywordFilterPresent(keyworFilter) {
945
943
  return not(isEmpty(keyworFilter.node));
946
944
  };
947
945
 
948
- var buildDropdownValue = function buildDropdownValue(_ref) {
949
- var defaultType = _ref.defaultType,
950
- filter = _ref.filter,
951
- options = _ref.options;
952
- if (!filter) return null;
953
- if (isMulti(defaultType)) {
954
- return options.filter(function (_ref2) {
955
- var value = _ref2.value;
956
- return filter.value.includes(value);
957
- });
946
+ var buildCustomDateValue = function buildCustomDateValue(value) {
947
+ var isBeforeOrAfter = Math.abs(dayjs(value[1]).diff(dayjs(value[0]), "year")) >= 90;
948
+ if (isBeforeOrAfter) {
949
+ var currentMoment = dayjs();
950
+ var diffWithStart = Math.abs(currentMoment.diff(dayjs(value[0]), "year"));
951
+ var diffWithEnd = Math.abs(currentMoment.diff(dayjs(value[1]), "year"));
952
+ return diffWithStart < diffWithEnd ? "after-".concat(dateFormat.date(dayjs(value[0]).subtract(1, "day"))) : "before-".concat(dateFormat.date(dayjs(value[1]).add(1, "day")));
958
953
  }
959
- return findBy({
960
- value: filter.value
961
- }, options);
954
+ return value.map(dateFormat.date).join(" - ");
962
955
  };
963
- var buildSingleTimeValue = function buildSingleTimeValue(filter) {
956
+ var buildFilterValue = function buildFilterValue(filter) {
964
957
  var _findBy2;
965
- if (!filter) return null;
966
- return (_findBy2 = findBy({
967
- value: filter.value
968
- }, TIME_OPTIONS)) !== null && _findBy2 !== void 0 ? _findBy2 : last(TIME_OPTIONS);
969
- };
970
- var getOtherProps = function getOtherProps(props) {
971
- return omit(["key", "node", "label", "type", "values", "model", "showRuleSelector"], props);
972
- };
973
- var buildDropdownOptions = function buildDropdownOptions(_ref3) {
974
- var defaultType = _ref3.defaultType,
975
- filter = _ref3.filter,
976
- options = _ref3.options;
977
- options = options.map(modify("value", function (value) {
978
- return value === null || value === void 0 ? void 0 : value.toString();
958
+ var _filter$defaultType = filter.defaultType,
959
+ defaultType = _filter$defaultType === void 0 ? filter.type : _filter$defaultType,
960
+ value = filter.value,
961
+ rule = filter.rule,
962
+ _filter$values = filter.values,
963
+ initialValues = _filter$values === void 0 ? [] : _filter$values;
964
+ var values = initialValues.map(modify("value", function (value) {
965
+ return value.toString();
979
966
  }));
980
- if (!filter) return options;
981
- if (isMulti(defaultType)) {
982
- var selectedOptions = filter.value.map(function (value) {
983
- return findBy({
967
+ if (isDate(defaultType) && isCustomDateRange(value)) {
968
+ return buildCustomDateValue(value);
969
+ } else if (isTime(defaultType) && isCustomTimeRange(value)) {
970
+ return value.map(dateFormat.time).join(" - ");
971
+ } else if (isDate(defaultType) || isTime(defaultType)) {
972
+ return humanize(value);
973
+ } else if (isMulti(defaultType)) {
974
+ return value.map(function (value) {
975
+ var _findBy;
976
+ return ((_findBy = findBy({
984
977
  value: value
985
- }, options) || toLabelAndValue(value);
986
- });
987
- var nonSelectedOptions = options.filter(function (option) {
988
- return !filter.value.includes(option.value);
978
+ }, values)) === null || _findBy === void 0 ? void 0 : _findBy.label) || value;
979
+ }).join(", ");
980
+ } else if (isSingleDate(defaultType)) {
981
+ return rule === "between" ? value.map(dateFormat.date).join(" - ") : dateFormat.date(value);
982
+ } else if (isSingleTime(defaultType)) {
983
+ return rule === "between" ? value.map(dateFormat.time).join(" - ") : dateFormat.time(value);
984
+ } else if (isBoolean(defaultType)) {
985
+ return getLabelFromBool({
986
+ value: value,
987
+ values: values
989
988
  });
990
- return concat(selectedOptions, nonSelectedOptions);
991
- }
992
- if (!findBy({
993
- value: filter.value
994
- }, options)) {
995
- return append(toLabelAndValue(filter.value), options);
996
- }
997
- return options;
998
- };
999
- var initializeDateRule = function initializeDateRule(filter) {
1000
- return filter ? findBy({
1001
- value: filter === null || filter === void 0 ? void 0 : filter.value
1002
- }, DATE_OPTIONS) || findDateOption(filter, DATE_OPTIONS) : {};
1003
- };
1004
- var getDateValue = function getDateValue(value, rule) {
1005
- if (isEmpty(value) || isNil(value)) {
1006
- return null;
1007
- }
1008
- if (rule.value === "custom-date-range") {
1009
- return value;
1010
- }
1011
- return rule.value === "before" ? dayjs(value[1]).add(1, "day") : dayjs(value[0]).subtract(1, "day");
1012
- };
1013
- var findDateOption = function findDateOption(filter, options) {
1014
- var value = filter.value;
1015
- var isBeforeOrAfter = dayjs(value[1]).diff(dayjs(value[0]), "year") >= 90;
1016
- if (not(isBeforeOrAfter)) {
1017
- return last(options);
1018
989
  }
1019
- var currentMoment = dayjs();
1020
- var diffWithStart = Math.abs(currentMoment.diff(dayjs(value[0]), "year"));
1021
- var diffWithEnd = Math.abs(currentMoment.diff(dayjs(value[1]), "year"));
1022
- return diffWithStart < diffWithEnd ? findBy({
1023
- value: "after"
1024
- }, options) : findBy({
1025
- value: "before"
1026
- }, options);
990
+ return ((_findBy2 = findBy({
991
+ value: value
992
+ }, values)) === null || _findBy2 === void 0 ? void 0 : _findBy2.label) || value;
1027
993
  };
1028
- var buildDateValues = function buildDateValues(dates, selectedRule) {
1029
- if (selectedRule.value === "after") {
1030
- return [dates.add(1, "day"), dates.add(100, "year")];
1031
- } else if (selectedRule.value === "before") {
1032
- return [dates.subtract(100, "year"), dates.subtract(1, "day")];
994
+ var buildRuleValue = function buildRuleValue(_ref) {
995
+ var rule = _ref.rule,
996
+ defaultType = _ref.defaultType;
997
+ if (isText(defaultType)) {
998
+ return findBy({
999
+ value: rule
1000
+ }, TEXT_RULES).label;
1001
+ } else if (isDigit(defaultType)) {
1002
+ return findBy({
1003
+ value: rule
1004
+ }, NUMBER_RULES).label;
1005
+ } else if (isSingleDate(defaultType)) {
1006
+ return findBy({
1007
+ value: rule
1008
+ }, SINGLE_DATE_OPTIONS).label;
1009
+ } else if (isSingleTime(defaultType)) {
1010
+ return findBy({
1011
+ value: rule
1012
+ }, SINGLE_TIME_OPTIONS).label;
1033
1013
  }
1034
- return dates;
1014
+ return "";
1035
1015
  };
1036
- var buildHelpIconProps = function buildHelpIconProps(helpIconProps) {
1037
- return mergeDeepRight(DEFAULT_HELP_ICON_PROPS, helpIconProps);
1016
+ var hasOnlyKeywordFilter = function hasOnlyKeywordFilter(filters) {
1017
+ return filters.length === 1 && filters[0].key === SEARCH_TERM_KEY;
1038
1018
  };
1039
1019
 
1040
- var Boolean = function Boolean(_ref) {
1041
- var column = _ref.column,
1042
- filter = _ref.filter,
1043
- handleApplyFilter = _ref.handleApplyFilter,
1044
- autoFocus = _ref.autoFocus;
1045
- var key = column.key,
1046
- _column$defaultType = column.defaultType,
1047
- defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
1048
- label = column.label,
1049
- values = column.values,
1050
- _column$helpIconProps = column.helpIconProps,
1051
- helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
1052
- var options = isNil(values) || isEmpty(values) ? DEFAULT_BOOLEAN_OPTIONS : values;
1053
- var otherProps = getOtherProps(column);
1054
- var value = buildDropdownValue({
1055
- defaultType: defaultType,
1056
- filter: filter,
1057
- options: options
1020
+ var Block = function Block(_ref) {
1021
+ var filter = _ref.filter,
1022
+ handleDelete = _ref.handleDelete,
1023
+ setIsPaneOpen = _ref.setIsPaneOpen;
1024
+ var key = filter.key,
1025
+ _filter$defaultType = filter.defaultType,
1026
+ defaultType = _filter$defaultType === void 0 ? filter.type : _filter$defaultType,
1027
+ label = filter.label,
1028
+ rule = filter.rule,
1029
+ defaultValue = filter.defaultValue;
1030
+ var filterValue = buildFilterValue(filter);
1031
+ var ruleContent = buildRuleValue({
1032
+ rule: rule,
1033
+ defaultType: defaultType
1058
1034
  });
1059
- var _useTranslation = useTranslation(),
1060
- t = _useTranslation.t;
1061
- var handleChange = function handleChange(option) {
1062
- if (isEmpty(option) || isNil(option)) {
1063
- handleApplyFilter({
1064
- _delete: true
1065
- });
1066
- return;
1035
+ var blockLength = label.length + ruleContent.length + filterValue.length;
1036
+ var toolTipDisabled = blockLength <= 50;
1037
+ var blockContent = !toolTipDisabled ? "".concat(filterValue.slice(0, 50 - blockLength), "...") : filterValue;
1038
+ var deleteBlockHotKeyRef = useHotkeys(SHORTCUTS.deleteBlock.sequence, function () {
1039
+ return handleDelete(key);
1040
+ }, {
1041
+ mode: "scoped"
1042
+ });
1043
+ var openFilterPaneHotKeyRef = useHotkeys(SHORTCUTS.openFilterPane.sequence, function () {
1044
+ return setIsPaneOpen(key);
1045
+ }, {
1046
+ mode: "scoped"
1047
+ });
1048
+ return /*#__PURE__*/React.createElement(Tooltip, {
1049
+ content: filterValue,
1050
+ disabled: toolTipDisabled,
1051
+ position: "bottom",
1052
+ theme: "light"
1053
+ }, /*#__PURE__*/React.createElement("div", {
1054
+ className: "neeto-filters-bar__block",
1055
+ "data-cy": "neeto-filters-".concat(hyphenate(key), "-block"),
1056
+ tabIndex: 0,
1057
+ ref: function ref(node) {
1058
+ deleteBlockHotKeyRef.current = node;
1059
+ openFilterPaneHotKeyRef.current = node;
1060
+ },
1061
+ onClick: function onClick() {
1062
+ return setIsPaneOpen(key);
1067
1063
  }
1068
- var updatedFilter = buildUpdatedFilter({
1069
- column: column,
1070
- defaultType: defaultType,
1071
- option: option
1072
- });
1073
- handleApplyFilter(updatedFilter);
1074
- };
1075
- return /*#__PURE__*/React.createElement("div", {
1076
- className: "neeto-filters-pane-filter__item-wrapper"
1077
- }, /*#__PURE__*/React.createElement(Select, _extends$1({
1078
- autoFocus: autoFocus,
1079
- label: label,
1080
- options: options,
1081
- value: value,
1082
- isClearable: true
1083
- }, isNotEmpty(helpIconProps) && {
1084
- labelProps: {
1085
- helpIconProps: buildHelpIconProps(helpIconProps)
1064
+ }, /*#__PURE__*/React.createElement(Typography, {
1065
+ style: "body2"
1066
+ }, label, ":"), /*#__PURE__*/React.createElement(Typography, {
1067
+ className: "neeto-ui-text-gray-500",
1068
+ style: "body2"
1069
+ }, ruleContent), /*#__PURE__*/React.createElement(Typography, {
1070
+ style: "body2"
1071
+ }, blockContent), !defaultValue && /*#__PURE__*/React.createElement("div", {
1072
+ className: "neeto-filters-bar__block-close"
1073
+ }, /*#__PURE__*/React.createElement(Close, {
1074
+ "data-cy": "neeto-filters-".concat(hyphenate(key), "-block-close-btn"),
1075
+ size: 16,
1076
+ strokeWidth: 2,
1077
+ onClick: function onClick(event) {
1078
+ event.stopPropagation();
1079
+ handleDelete(key);
1086
1080
  }
1087
- }, {
1088
- "data-cy": "neeto-filters-".concat(hyphenate(key), "-filter"),
1089
- strategy: "fixed",
1090
- placeholder: t("neetoFilters.messages.selectOption", {
1091
- resource: label
1092
- }),
1093
- onChange: handleChange
1094
- }, otherProps)));
1095
- };
1096
- var Boolean$1 = /*#__PURE__*/React.memo(Boolean);
1097
-
1098
- var Datetime = function Datetime(_ref) {
1099
- var column = _ref.column,
1100
- filter = _ref.filter,
1101
- handleApplyFilter = _ref.handleApplyFilter,
1102
- autoFocus = _ref.autoFocus;
1103
- var _useState = useState(initializeDateRule(filter)),
1104
- _useState2 = _slicedToArray(_useState, 2),
1105
- selectedRule = _useState2[0],
1106
- setSelectedRule = _useState2[1];
1107
- var _useTranslation = useTranslation(),
1108
- t = _useTranslation.t;
1109
- var key = column.key,
1110
- _column$defaultType = column.defaultType,
1111
- defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
1112
- label = column.label,
1113
- _column$helpIconProps = column.helpIconProps,
1114
- helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
1115
- var isDatePickerShown = filter && isCustomDateRange(filter.value);
1116
- var otherProps = getOtherProps(column);
1117
- var handleChange = function handleChange(option) {
1118
- if (isEmpty(option) || isNil(option)) {
1119
- handleApplyFilter({
1120
- _delete: true
1121
- });
1122
- setSelectedRule({});
1123
- return;
1124
- }
1125
- setSelectedRule(option);
1126
- var updatedFilter = buildUpdatedFilter({
1127
- column: column,
1128
- defaultType: defaultType,
1129
- option: option
1130
- });
1131
- handleApplyFilter(updatedFilter);
1132
- };
1133
- var handleDateRangeChange = function handleDateRangeChange(dates) {
1134
- if (isEmpty(dates) || isNil(dates)) {
1135
- handleApplyFilter({
1136
- _delete: true
1137
- });
1138
- setSelectedRule({});
1139
- return;
1140
- }
1141
- var updatedFilter = buildUpdatedFilter({
1142
- column: column,
1143
- defaultType: defaultType,
1144
- option: {
1145
- value: pluck("$d", buildDateValues(dates, selectedRule)).map(function (date) {
1146
- return date.toISOString();
1147
- })
1148
- }
1149
- });
1150
- handleApplyFilter(updatedFilter);
1151
- };
1152
- useEffect(function () {
1153
- isNil(filter) && setSelectedRule({});
1154
- }, [filter]);
1155
- return /*#__PURE__*/React.createElement("div", {
1156
- className: "neeto-filters-pane-filter__item-wrapper"
1157
- }, /*#__PURE__*/React.createElement(Select, _extends$1({
1158
- autoFocus: autoFocus,
1159
- label: label,
1160
- isClearable: true,
1161
- "data-cy": "neeto-filters-".concat(hyphenate(key), "-filter"),
1162
- options: DATE_OPTIONS,
1163
- strategy: "fixed",
1164
- value: selectedRule,
1165
- placeholder: t("neetoFilters.messages.selectResource", {
1166
- resource: label
1167
- })
1168
- }, isNotEmpty(helpIconProps) && {
1169
- labelProps: {
1170
- helpIconProps: buildHelpIconProps(helpIconProps)
1171
- }
1172
- }, {
1173
- onChange: handleChange
1174
- })), isDatePickerShown && /*#__PURE__*/React.createElement(DatePicker, _extends$1({
1175
- "data-cy": "neeto-filters-".concat(hyphenate(key), "-date-range"),
1176
- getPopupContainer: prop("parentNode"),
1177
- type: (selectedRule === null || selectedRule === void 0 ? void 0 : selectedRule.value) === "custom-date-range" ? "range" : "date",
1178
- value: getDateValue(filter === null || filter === void 0 ? void 0 : filter.value, selectedRule),
1179
- onChange: handleDateRangeChange
1180
- }, otherProps)));
1181
- };
1182
- var Datetime$1 = /*#__PURE__*/React.memo(Datetime);
1183
-
1184
- var Dropdown = function Dropdown(_ref) {
1185
- var column = _ref.column,
1186
- filter = _ref.filter,
1187
- handleApplyFilter = _ref.handleApplyFilter,
1188
- autoFocus = _ref.autoFocus;
1189
- var key = column.key,
1190
- label = column.label,
1191
- values = column.values,
1192
- defaultValue = column.defaultValue,
1193
- _column$defaultType = column.defaultType,
1194
- defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
1195
- _column$isClearable = column.isClearable,
1196
- isClearable = _column$isClearable === void 0 ? true : _column$isClearable,
1197
- _column$helpIconProps = column.helpIconProps,
1198
- helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
1199
- var otherProps = getOtherProps(column);
1200
- var options = buildDropdownOptions({
1201
- defaultType: defaultType,
1202
- filter: filter,
1203
- options: values
1204
- });
1205
- var value = buildDropdownValue({
1206
- defaultType: defaultType,
1207
- filter: filter,
1208
- options: options
1209
- });
1210
- var _useTranslation = useTranslation(),
1211
- t = _useTranslation.t;
1212
- var handleChange = function handleChange(option) {
1213
- if (isEmpty(option) || isNil(option)) {
1214
- handleApplyFilter({
1215
- _delete: true
1216
- });
1217
- return;
1218
- }
1219
- var updatedFilter = buildUpdatedFilter({
1220
- column: column,
1221
- defaultType: defaultType,
1222
- option: option
1223
- });
1224
- handleApplyFilter(updatedFilter);
1225
- };
1226
- return /*#__PURE__*/React.createElement("div", {
1227
- className: "neeto-filters-pane-filter__item-wrapper"
1228
- }, /*#__PURE__*/React.createElement(Select, _extends$1({
1229
- autoFocus: autoFocus,
1230
- label: label,
1231
- options: options,
1232
- value: value,
1233
- "data-cy": "neeto-filters-".concat(hyphenate(key), "-filter"),
1234
- isClearable: !defaultValue && isClearable,
1235
- isMulti: isMulti(defaultType),
1236
- strategy: "fixed",
1237
- placeholder: t("neetoFilters.messages.selectResource", {
1238
- resource: label
1239
- })
1240
- }, isNotEmpty(helpIconProps) && {
1241
- labelProps: {
1242
- helpIconProps: buildHelpIconProps(helpIconProps)
1243
- }
1244
- }, {
1245
- onChange: handleChange
1246
- }, otherProps)));
1247
- };
1248
- var Dropdown$1 = /*#__PURE__*/React.memo(Dropdown);
1249
-
1250
- var SingleDatetime = function SingleDatetime(_ref) {
1251
- var column = _ref.column,
1252
- filter = _ref.filter,
1253
- filters = _ref.filters,
1254
- handleApplyFilter = _ref.handleApplyFilter,
1255
- autoFocus = _ref.autoFocus;
1256
- var _useState = useState(function () {
1257
- return findBy({
1258
- value: filter === null || filter === void 0 ? void 0 : filter.rule
1259
- }, SINGLE_DATE_OPTIONS) || SINGLE_DATE_OPTIONS[0];
1260
- }),
1261
- _useState2 = _slicedToArray(_useState, 2),
1262
- selectedRule = _useState2[0],
1263
- setSelectedRule = _useState2[1];
1264
- var key = column.key,
1265
- _column$defaultType = column.defaultType,
1266
- defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
1267
- label = column.label,
1268
- _column$helpIconProps = column.helpIconProps,
1269
- helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
1270
- var otherProps = getOtherProps(column);
1271
- var datePickerType = selectedRule.value === "between" ? "range" : "date";
1272
- var value = filter === null || filter === void 0 ? void 0 : filter.value;
1273
-
1274
- // Reset states when "Clear filters" button is clicked.
1275
- useEffect(function () {
1276
- if (!isEmpty(filters)) return;
1277
- setSelectedRule(SINGLE_DATE_OPTIONS[0]);
1278
- }, [filters]);
1279
- var handleRuleChange = function handleRuleChange(ruleOption) {
1280
- setSelectedRule(ruleOption);
1281
-
1282
- // Clear value if switched between incompatable types
1283
- var updateValue = value;
1284
- if (datePickerType === "range" && ruleOption.value !== "between" || datePickerType === "date" && ruleOption.value === "between") {
1285
- updateValue = "";
1286
- }
1287
- var updatedFilter = buildUpdatedFilter({
1288
- column: column,
1289
- defaultType: defaultType,
1290
- option: {},
1291
- rule: ruleOption.value,
1292
- value: updateValue
1293
- });
1294
- handleApplyFilter(updatedFilter);
1295
- };
1296
- var handleChange = function handleChange(dates) {
1297
- if (isEmpty(dates) || isNil(dates)) {
1298
- handleApplyFilter({
1299
- _delete: true
1300
- });
1301
- return;
1302
- }
1303
- var value = datePickerType === "range" ? pluck("$d", dates).map(function (date) {
1304
- return date.toISOString();
1305
- }) : dates["$d"];
1306
- var updatedFilter = buildUpdatedFilter({
1307
- column: column,
1308
- defaultType: defaultType,
1309
- option: {},
1310
- rule: selectedRule.value,
1311
- value: value
1312
- });
1313
- handleApplyFilter(updatedFilter);
1314
- };
1315
- return /*#__PURE__*/React.createElement("div", {
1316
- className: "neeto-filters-pane-filter__item-wrapper"
1317
- }, /*#__PURE__*/React.createElement(Select, _extends$1({
1318
- label: label,
1319
- "data-cy": "neeto-filters-".concat(hyphenate(key), "-filter-rule"),
1320
- defaultValue: SINGLE_DATE_OPTIONS[0],
1321
- options: SINGLE_DATE_OPTIONS,
1322
- strategy: "fixed",
1323
- value: selectedRule
1324
- }, isNotEmpty(helpIconProps) && {
1325
- labelProps: {
1326
- helpIconProps: buildHelpIconProps(helpIconProps)
1327
- }
1328
- }, {
1329
- onChange: handleRuleChange
1330
- })), /*#__PURE__*/React.createElement(DatePicker, _extends$1({
1331
- autoFocus: autoFocus,
1332
- value: value,
1333
- "data-cy": "neeto-filters-".concat(hyphenate(key), "-filter"),
1334
- getPopupContainer: prop("parentNode"),
1335
- type: datePickerType,
1336
- onChange: handleChange
1337
- }, otherProps)));
1338
- };
1339
-
1340
- var SingleTime = function SingleTime(_ref) {
1341
- var column = _ref.column,
1342
- filter = _ref.filter,
1343
- filters = _ref.filters,
1344
- handleApplyFilter = _ref.handleApplyFilter,
1345
- autoFocus = _ref.autoFocus;
1346
- var _useState = useState(function () {
1347
- return findBy({
1348
- value: filter === null || filter === void 0 ? void 0 : filter.rule
1349
- }, SINGLE_TIME_OPTIONS) || SINGLE_TIME_OPTIONS[0];
1350
- }),
1351
- _useState2 = _slicedToArray(_useState, 2),
1352
- selectedRule = _useState2[0],
1353
- setSelectedRule = _useState2[1];
1354
- var key = column.key,
1355
- _column$defaultType = column.defaultType,
1356
- defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
1357
- label = column.label,
1358
- _column$helpIconProps = column.helpIconProps,
1359
- helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
1360
- var otherProps = getOtherProps(column);
1361
- var timePickerType = selectedRule.value === "between" ? "range" : "time";
1362
- var value = filter === null || filter === void 0 ? void 0 : filter.value;
1363
- useEffect(function () {
1364
- if (!isEmpty(filters)) return;
1365
- setSelectedRule(SINGLE_TIME_OPTIONS[0]);
1366
- }, [filters]);
1367
- var handleRuleChange = function handleRuleChange(ruleOption) {
1368
- setSelectedRule(ruleOption);
1369
-
1370
- // Clear value if switched between incompatible types
1371
- var updateValue = value;
1372
- if (timePickerType === "range" && ruleOption.value !== "between" || timePickerType === "time" && ruleOption.value === "between") {
1373
- updateValue = "";
1374
- }
1375
- var updatedFilter = buildUpdatedFilter({
1376
- column: column,
1377
- defaultType: defaultType,
1378
- option: {},
1379
- rule: ruleOption.value,
1380
- value: updateValue
1381
- });
1382
- handleApplyFilter(updatedFilter);
1383
- };
1384
- var handleChange = function handleChange(times) {
1385
- var value = timePickerType === "range" ? pluck("$d", times).map(function (time) {
1386
- return time.toISOString();
1387
- }) : times["$d"].toISOString();
1388
- var updatedFilter = buildUpdatedFilter({
1389
- column: column,
1390
- defaultType: defaultType,
1391
- option: {},
1392
- rule: selectedRule.value,
1393
- value: value
1394
- });
1395
- handleApplyFilter(updatedFilter);
1396
- };
1397
- return /*#__PURE__*/React.createElement("div", {
1398
- className: "neeto-filters-pane-filter__item-wrapper"
1399
- }, /*#__PURE__*/React.createElement(Select, _extends$1({
1400
- label: label,
1401
- defaultValue: SINGLE_TIME_OPTIONS[0],
1402
- options: SINGLE_TIME_OPTIONS,
1403
- strategy: "fixed",
1404
- value: selectedRule
1405
- }, isNotEmpty(helpIconProps) && {
1406
- labelProps: {
1407
- helpIconProps: buildHelpIconProps(helpIconProps)
1408
- }
1409
- }, {
1410
- onChange: handleRuleChange
1411
- })), /*#__PURE__*/React.createElement(TimePicker, _extends$1({
1412
- autoFocus: autoFocus,
1413
- value: value,
1414
- use12Hours: true,
1415
- className: "w-full",
1416
- "data-cy": "neeto-filters-".concat(hyphenate(key), "-filter"),
1417
- format: "h:mm A",
1418
- getPopupContainer: prop("parentNode"),
1419
- type: timePickerType,
1420
- onChange: handleChange
1421
- }, otherProps)));
1422
- };
1423
-
1424
- var Text = function Text(_ref) {
1425
- var column = _ref.column,
1426
- filter = _ref.filter,
1427
- filters = _ref.filters,
1428
- handleApplyFilter = _ref.handleApplyFilter,
1429
- autoFocus = _ref.autoFocus,
1430
- onClose = _ref.onClose;
1431
- var key = column.key,
1432
- _column$defaultType = column.defaultType,
1433
- defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
1434
- label = column.label,
1435
- _column$showRuleSelec = column.showRuleSelector,
1436
- showRuleSelector = _column$showRuleSelec === void 0 ? false : _column$showRuleSelec,
1437
- _column$helpIconProps = column.helpIconProps,
1438
- helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
1439
- var otherProps = getOtherProps(column);
1440
- var ruleOptions = buildRuleOptions({
1441
- defaultType: defaultType
1442
- });
1443
- var inputType = defaultType === "text" || defaultType === "custom.text" ? "text" : "number";
1444
- var _useState = useState(filter === null || filter === void 0 ? void 0 : filter.value),
1445
- _useState2 = _slicedToArray(_useState, 2),
1446
- inputValue = _useState2[0],
1447
- setInputValue = _useState2[1];
1448
- var _useState3 = useState(function () {
1449
- return findBy({
1450
- value: filter === null || filter === void 0 ? void 0 : filter.rule
1451
- }, ruleOptions) || ruleOptions[0];
1452
- }),
1453
- _useState4 = _slicedToArray(_useState3, 2),
1454
- selectedRule = _useState4[0],
1455
- setSelectedRule = _useState4[1];
1456
- var debouncedInputValue = useDebounce(inputValue);
1457
- var _useTranslation = useTranslation(),
1458
- t = _useTranslation.t;
1459
- var handleUpdateAndApplyFilter = function handleUpdateAndApplyFilter() {
1460
- var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : debouncedInputValue;
1461
- var rule = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : selectedRule;
1462
- if (equals(filter === null || filter === void 0 ? void 0 : filter.value, value) && equals(selectedRule, rule)) return;
1463
- var updatedFilter = buildUpdatedFilter({
1464
- column: column,
1465
- defaultType: defaultType,
1466
- option: {},
1467
- rule: rule.value,
1468
- value: value.trim()
1469
- });
1470
- handleApplyFilter(updatedFilter);
1471
- };
1472
- var handleKeydown = function handleKeydown(e) {
1473
- if (!(e.key === "Enter")) return;
1474
- handleUpdateAndApplyFilter(inputValue);
1475
- onClose();
1476
- };
1477
- var handleRuleChange = function handleRuleChange(ruleOption) {
1478
- setSelectedRule(ruleOption);
1479
- if (!debouncedInputValue) return;
1480
- handleUpdateAndApplyFilter(debouncedInputValue, ruleOption);
1481
- };
1482
-
1483
- // Reset states when "Clear filters" button is clicked.
1484
- useEffect(function () {
1485
- (isEmpty(filters) || isNil(filter)) && setInputValue("");
1486
- }, [filter]);
1487
- useEffect(function () {
1488
- if (!debouncedInputValue) {
1489
- !isUndefinedOrEmpty(filter) && handleApplyFilter({
1490
- _delete: true
1491
- });
1492
- return;
1493
- }
1494
- handleUpdateAndApplyFilter();
1495
- }, [debouncedInputValue]);
1496
- return /*#__PURE__*/React.createElement("div", {
1497
- className: "neeto-filters-pane-filter__item-wrapper"
1498
- }, showRuleSelector && /*#__PURE__*/React.createElement(Select, _extends$1({
1499
- label: label,
1500
- "data-cy": "neeto-filters-".concat(hyphenate(key), "-filter-rule"),
1501
- defaultValue: ruleOptions[0],
1502
- options: ruleOptions,
1503
- strategy: "fixed",
1504
- value: selectedRule,
1505
- onChange: handleRuleChange
1506
- }, isNotEmpty(helpIconProps) && {
1507
- labelProps: {
1508
- helpIconProps: buildHelpIconProps(helpIconProps)
1509
- }
1510
- })), /*#__PURE__*/React.createElement(Input, _extends$1({
1511
- autoFocus: autoFocus,
1512
- "data-cy": "neeto-filters-".concat(hyphenate(key), "-filter"),
1513
- label: !showRuleSelector && label,
1514
- type: inputType,
1515
- value: inputValue
1516
- }, isNotEmpty(helpIconProps) && {
1517
- labelProps: {
1518
- helpIconProps: buildHelpIconProps(helpIconProps)
1519
- }
1520
- }, {
1521
- placeholder: t("neetoFilters.messages.enterResource", {
1522
- resource: label
1523
- }),
1524
- onChange: function onChange(event) {
1525
- return setInputValue(event.target.value);
1526
- },
1527
- onKeyDown: handleKeydown
1528
- }, otherProps)));
1529
- };
1530
-
1531
- var Time = function Time(_ref) {
1532
- var column = _ref.column,
1533
- filter = _ref.filter,
1534
- handleApplyFilter = _ref.handleApplyFilter,
1535
- autoFocus = _ref.autoFocus;
1536
- var key = column.key,
1537
- _column$defaultType = column.defaultType,
1538
- defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
1539
- label = column.label,
1540
- _column$helpIconProps = column.helpIconProps,
1541
- helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
1542
- var otherProps = getOtherProps(column);
1543
- var value = buildSingleTimeValue(filter);
1544
- var isCustomTimeRangeShown = filter && isCustomTimeRange(filter.value);
1545
- var _useTranslation = useTranslation(),
1546
- t = _useTranslation.t;
1547
- var handleChange = function handleChange(option) {
1548
- if (isEmpty(option) || isNil(option)) {
1549
- handleApplyFilter({
1550
- _delete: true
1551
- });
1552
- return;
1553
- }
1554
- var updatedFilter = buildUpdatedFilter({
1555
- column: column,
1556
- defaultType: defaultType,
1557
- option: option
1558
- });
1559
- handleApplyFilter(updatedFilter);
1560
- };
1561
- var handleTimeRangeChange = function handleTimeRangeChange(times) {
1562
- var updatedFilter = buildUpdatedFilter({
1563
- column: column,
1564
- defaultType: defaultType,
1565
- option: {
1566
- value: pluck("$d", times).map(function (time) {
1567
- return time.toISOString();
1568
- })
1569
- }
1570
- });
1571
- handleApplyFilter(updatedFilter);
1572
- };
1573
- return /*#__PURE__*/React.createElement("div", {
1574
- className: "neeto-filters-pane-filter__item-wrapper"
1575
- }, /*#__PURE__*/React.createElement(Select, _extends$1({
1576
- autoFocus: autoFocus,
1577
- label: label,
1578
- value: value,
1579
- isClearable: true,
1580
- "data-cy": "neeto-filters-".concat(hyphenate(key), "-filter"),
1581
- options: TIME_OPTIONS,
1582
- strategy: "fixed",
1583
- placeholder: t("neetoFilters.messages.selectResource", {
1584
- resource: label
1585
- })
1586
- }, isNotEmpty(helpIconProps) && {
1587
- labelProps: {
1588
- helpIconProps: buildHelpIconProps(helpIconProps)
1589
- }
1590
- }, {
1591
- onChange: handleChange
1592
- })), isCustomTimeRangeShown && /*#__PURE__*/React.createElement(TimePicker, _extends$1({
1593
- use12Hours: true,
1594
- "data-cy": "neeto-filters-".concat(hyphenate(key), "-date-range"),
1595
- format: "h:mm A",
1596
- getPopupContainer: prop("parentNode"),
1597
- type: "range",
1598
- value: filter.value,
1599
- onChange: handleTimeRangeChange
1600
- }, otherProps)));
1601
- };
1602
- var Time$1 = /*#__PURE__*/React.memo(Time);
1603
-
1604
- var Item = function Item(_ref) {
1605
- var column = _ref.column,
1606
- filters = _ref.filters,
1607
- onChange = _ref.onChange,
1608
- autoFocus = _ref.autoFocus,
1609
- _ref$onClose = _ref.onClose,
1610
- onClose = _ref$onClose === void 0 ? noop$1 : _ref$onClose;
1611
- var key = column.key,
1612
- _column$defaultType = column.defaultType,
1613
- defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType;
1614
- var filter = useMemo(function () {
1615
- return findBy({
1616
- key: key
1617
- }, filters);
1618
- }, [filters, key]);
1619
- var handleApplyFilter = function handleApplyFilter(updatedFilter) {
1620
- if (updatedFilter._delete) onChange(removeBy({
1621
- key: key
1622
- }, filters));else if (!filter) onChange(append(updatedFilter, filters));else onChange(replaceBy({
1623
- key: key
1624
- }, updatedFilter, filters));
1625
- };
1626
- if (isText(defaultType) || isDigit(defaultType)) {
1627
- return /*#__PURE__*/React.createElement(Text, {
1628
- autoFocus: autoFocus,
1629
- column: column,
1630
- filter: filter,
1631
- filters: filters,
1632
- handleApplyFilter: handleApplyFilter,
1633
- onClose: onClose
1634
- });
1635
- }
1636
- if (isDate(defaultType)) {
1637
- return /*#__PURE__*/React.createElement(Datetime$1, {
1638
- autoFocus: autoFocus,
1639
- column: column,
1640
- filter: filter,
1641
- handleApplyFilter: handleApplyFilter
1642
- });
1643
- }
1644
- if (isTime(defaultType)) {
1645
- return /*#__PURE__*/React.createElement(Time$1, {
1646
- autoFocus: autoFocus,
1647
- column: column,
1648
- filter: filter,
1649
- handleApplyFilter: handleApplyFilter
1650
- });
1651
- }
1652
- if (isSingleDate(defaultType)) {
1653
- return /*#__PURE__*/React.createElement(SingleDatetime, {
1654
- autoFocus: autoFocus,
1655
- column: column,
1656
- filter: filter,
1657
- filters: filters,
1658
- handleApplyFilter: handleApplyFilter
1659
- });
1660
- }
1661
- if (isSingleTime(defaultType)) {
1662
- return /*#__PURE__*/React.createElement(SingleTime, {
1663
- autoFocus: autoFocus,
1664
- column: column,
1665
- filter: filter,
1666
- filters: filters,
1667
- handleApplyFilter: handleApplyFilter
1668
- });
1669
- }
1670
- if (isBoolean(defaultType) || isCheckbox(defaultType)) {
1671
- return /*#__PURE__*/React.createElement(Boolean$1, {
1672
- autoFocus: autoFocus,
1673
- column: column,
1674
- filter: filter,
1675
- handleApplyFilter: handleApplyFilter
1676
- });
1677
- }
1678
- return /*#__PURE__*/React.createElement(Dropdown$1, {
1679
- autoFocus: autoFocus,
1680
- column: column,
1681
- filter: filter,
1682
- handleApplyFilter: handleApplyFilter
1683
- });
1684
- };
1685
-
1686
- var STEPS = {
1687
- ADD: "add",
1688
- COLUMN: "column",
1689
- VALUE: "value"
1690
- };
1691
-
1692
- var AddFilter = function AddFilter(_ref) {
1693
- var _findBy;
1694
- var columns = _ref.columns,
1695
- filters = _ref.filters,
1696
- handleChange = _ref.handleChange,
1697
- handleClearFilter = _ref.handleClearFilter,
1698
- _ref$disabled = _ref.disabled,
1699
- disabled = _ref$disabled === void 0 ? false : _ref$disabled;
1700
- var _useTranslation = useTranslation(),
1701
- t = _useTranslation.t;
1702
- var _useState = useState({
1703
- step: STEPS.ADD,
1704
- column: {}
1705
- }),
1706
- _useState2 = _slicedToArray(_useState, 2),
1707
- selectedColumn = _useState2[0],
1708
- setSelectedColumn = _useState2[1];
1709
-
1710
- // Disable the add button when
1711
- // 1. No value is entered for previous filter
1712
- // 2. There are no more columns
1713
- var disableAddButton = selectedColumn.step !== STEPS.ADD && isNotPresent((_findBy = findBy({
1714
- key: selectedColumn.column.key
1715
- }, filters)) === null || _findBy === void 0 ? void 0 : _findBy.value) || isEmpty(columns);
1716
- return /*#__PURE__*/React.createElement(React.Fragment, null, selectedColumn.step !== STEPS.ADD ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
1717
- className: "flex w-full gap-4"
1718
- }, selectedColumn.step === STEPS.COLUMN && /*#__PURE__*/React.createElement(Select, {
1719
- isSearchable: true,
1720
- label: t("neetoFilters.segments.newFilter"),
1721
- optionRemapping: {
1722
- label: "label",
1723
- value: "key"
1724
- },
1725
- options: columns,
1726
- placeholder: t("neetoFilters.segments.selectFilter"),
1727
- onChange: function onChange(column) {
1728
- return setSelectedColumn({
1729
- step: STEPS.VALUE,
1730
- column: column
1731
- });
1732
- }
1733
- }), selectedColumn.step === STEPS.VALUE && /*#__PURE__*/React.createElement(Item, {
1734
- filters: filters,
1735
- autoFocus: true,
1736
- column: selectedColumn.column,
1737
- onChange: handleChange
1738
- }), /*#__PURE__*/React.createElement(Button, {
1739
- className: "mt-6 self-center",
1740
- icon: IndeterminateCircle,
1741
- style: "text",
1742
- onClick: function onClick() {
1743
- handleClearFilter(selectedColumn.column);
1744
- setSelectedColumn(assoc("step", STEPS.ADD));
1745
- }
1746
- })), /*#__PURE__*/React.createElement(AddFilter, {
1747
- filters: filters,
1748
- handleChange: handleChange,
1749
- handleClearFilter: handleClearFilter,
1750
- columns: columns.filter(function (_ref2) {
1751
- var key = _ref2.key;
1752
- return !existsBy({
1753
- key: key
1754
- }, filters);
1755
- }),
1756
- disabled: disableAddButton
1757
- })) : /*#__PURE__*/React.createElement(Button, {
1758
- disabled: disabled,
1759
- className: "self-start",
1760
- icon: Plus,
1761
- iconPosition: "left",
1762
- label: t("neetoFilters.segments.addFilter"),
1763
- style: "link",
1764
- onClick: function onClick() {
1765
- return setSelectedColumn(assoc("step", STEPS.COLUMN));
1766
- }
1767
- }));
1768
- };
1769
-
1770
- var buildSegmentsValidationSchema = function buildSegmentsValidationSchema(defaultSegmentName) {
1771
- return yup.object({
1772
- name: yup.string().trim().required(t$1("neetoFilters.segments.nameIsRequired")).test({
1773
- name: "not-default-segment-name",
1774
- test: function test(value) {
1775
- return (value === null || value === void 0 ? void 0 : value.toLocaleLowerCase()) !== defaultSegmentName.toLocaleLowerCase();
1776
- },
1777
- message: t$1("neetoFilters.segments.reservedNameErrorMessage")
1778
- })
1779
- });
1780
- };
1781
-
1782
- 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; }
1783
- 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; }
1784
- var SegmentForm = function SegmentForm(_ref) {
1785
- var _ref$isEdit = _ref.isEdit,
1786
- isEdit = _ref$isEdit === void 0 ? false : _ref$isEdit,
1787
- segmentFormInitialRef = _ref.segmentFormInitialRef,
1788
- isOpen = _ref.isOpen,
1789
- onClose = _ref.onClose,
1790
- isSubmitting = _ref.isSubmitting,
1791
- handleSubmit = _ref.handleSubmit,
1792
- defaultSegmentName = _ref.defaultSegmentName,
1793
- initialValues = _ref.initialValues,
1794
- customFilters = _ref.customFilters,
1795
- columns = _ref.columns,
1796
- filters = _ref.filters,
1797
- childrenKeys = _ref.childrenKeys;
1798
- var history = useHistory();
1799
- var _useTranslation = useTranslation(),
1800
- t = _useTranslation.t;
1801
- var _buildFilteredColumns = buildFilteredColumns({
1802
- searchTerm: "",
1803
- columns: columns
1804
- }),
1805
- _buildFilteredColumns2 = _buildFilteredColumns.groupedColumns,
1806
- groupedColumns = _buildFilteredColumns2 === void 0 ? [] : _buildFilteredColumns2,
1807
- _buildFilteredColumns3 = _buildFilteredColumns.ungroupedColumns,
1808
- ungroupedColumns = _buildFilteredColumns3 === void 0 ? [] : _buildFilteredColumns3;
1809
- var handleChange = function handleChange(newFilters) {
1810
- var isClearAll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
1811
- var params = buildUrlFromFilters(_objectSpread$4({
1812
- columns: columns,
1813
- filters: newFilters
1814
- }, isClearAll && {
1815
- isClearAll: true,
1816
- childrenKeys: childrenKeys
1817
- }));
1818
- history.push({
1819
- search: params
1820
- });
1821
- };
1822
- var handleClearFilter = function handleClearFilter(column, values, setFieldValue) {
1823
- var formState = [{
1824
- conditions: removeBy({
1825
- key: column.key
1826
- }, values.filters[0].conditions)
1827
- }];
1828
- var globalState = removeBy({
1829
- key: column.key
1830
- }, filters);
1831
- setFieldValue("filters", formState);
1832
- handleChange(globalState);
1833
- };
1834
- return /*#__PURE__*/React.createElement(Pane$1, {
1835
- isOpen: isOpen,
1836
- onClose: onClose,
1837
- initialFocusRef: segmentFormInitialRef
1838
- }, /*#__PURE__*/React.createElement(Pane$1.Header, null, /*#__PURE__*/React.createElement(Typography, {
1839
- style: "h2",
1840
- weight: "semibold"
1841
- }, isEdit ? t("neetoFilters.segments.editSegment") : t("neetoFilters.segments.addNewSegment"))), /*#__PURE__*/React.createElement(Form, {
1842
- className: "w-full",
1843
- formProps: {
1844
- noValidate: true
1845
- },
1846
- formikProps: {
1847
- initialValues: initialValues,
1848
- validateOnChange: true,
1849
- validateOnBlur: true,
1850
- validationSchema: buildSegmentsValidationSchema(defaultSegmentName),
1851
- onSubmit: handleSubmit
1852
- }
1853
- }, function (_ref2) {
1854
- var errors = _ref2.errors,
1855
- values = _ref2.values,
1856
- setFieldValue = _ref2.setFieldValue;
1857
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Pane$1.Body, null, /*#__PURE__*/React.createElement(Input$1, {
1858
- className: "w-full flex-grow-0",
1859
- error: errors.name,
1860
- label: t("neetoFilters.segments.name"),
1861
- name: "name",
1862
- placeholder: t("neetoFilters.segments.segmentName"),
1863
- ref: segmentFormInitialRef
1864
- }), /*#__PURE__*/React.createElement(Typography, {
1865
- className: "mb-2 mt-4",
1866
- style: "h4"
1867
- }, t("neetoFilters.common.filters")), /*#__PURE__*/React.createElement("div", {
1868
- className: "neeto-filters-pane-filter__body flex w-full flex-col gap-5"
1869
- }, ungroupedColumns.filter(function (_ref3) {
1870
- var key = _ref3.key;
1871
- return _existsBy({
1872
- key: key
1873
- }, values.filters[0].conditions);
1874
- }).map(function (column) {
1875
- return /*#__PURE__*/React.createElement("div", {
1876
- className: "flex w-full gap-4",
1877
- key: column.key
1878
- }, /*#__PURE__*/React.createElement(Item, {
1879
- column: column,
1880
- filters: filters,
1881
- autoFocus: column.key === isOpen,
1882
- onChange: function onChange(filters) {
1883
- setFieldValue("filters", [{
1884
- conditions: filters
1885
- }]);
1886
- handleChange(filters);
1887
- }
1888
- }), /*#__PURE__*/React.createElement(Button, {
1889
- className: "mt-6 self-center",
1890
- icon: IndeterminateCircle,
1891
- style: "text",
1892
- onClick: function onClick() {
1893
- return handleClearFilter(column, values, setFieldValue);
1894
- }
1895
- }));
1896
- }), isPresent(groupedColumns) && /*#__PURE__*/React.createElement(Accordion, null, groupedColumns.map(function (_ref4) {
1897
- var group = _ref4.group,
1898
- columns = _ref4.columns;
1899
- return /*#__PURE__*/React.createElement(Accordion.Item, {
1900
- className: "accordion_item",
1901
- key: group,
1902
- title: group
1903
- }, columns.map(function (column) {
1904
- return /*#__PURE__*/React.createElement(Item, {
1905
- column: column,
1906
- filters: filters,
1907
- autoFocus: column.key === isOpen,
1908
- key: column.key,
1909
- onChange: handleChange
1910
- });
1911
- }));
1912
- })), isEmpty([].concat(_toConsumableArray(groupedColumns), _toConsumableArray(ungroupedColumns))) && /*#__PURE__*/React.createElement(Typography, {
1913
- style: "body2"
1914
- }, t("neetoFilters.messages.noResourcesFound", {
1915
- resources: t("neetoFilters.common.columns")
1916
- })), customFilters, /*#__PURE__*/React.createElement(AddFilter, {
1917
- filters: filters,
1918
- handleChange: handleChange,
1919
- columns: ungroupedColumns.filter(function (_ref5) {
1920
- var key = _ref5.key;
1921
- return !existsBy({
1922
- key: key
1923
- }, filters);
1924
- }),
1925
- handleClearFilter: function handleClearFilter(_ref6) {
1926
- var key = _ref6.key;
1927
- return handleChange(removeBy({
1928
- key: key
1929
- }, filters));
1930
- }
1931
- }))), /*#__PURE__*/React.createElement(Pane$1.Footer, {
1932
- className: "flex items-center space-x-2"
1933
- }, /*#__PURE__*/React.createElement(ActionBlock, {
1934
- cancelButtonProps: {
1935
- onClick: onClose,
1936
- disabled: false
1937
- },
1938
- submitButtonProps: {
1939
- disabled: isSubmitting || isEmpty(filters),
1940
- loading: isSubmitting
1941
- }
1942
- })));
1943
- }));
1944
- };
1945
-
1946
- var QUERY_KEYS = {
1947
- SEGMENTS_LIST: "segments-list"
1948
- };
1949
- var SEGMENTS_STALE_TIME = 900000; // 15 mins
1950
-
1951
- var DEFAULT_SEGMENTS_CACHE = {
1952
- segments: []
1953
- };
1954
- var SEGMENT_ACTIONS$1 = {
1955
- EDIT: "edit",
1956
- CREATE: "create"
1957
- };
1958
-
1959
- var SHORTCUTS = {
1960
- closePane: {
1961
- sequence: "escape",
1962
- description: t$1("neetoFilters.shortcuts.closePane")
1963
- },
1964
- deleteBlock: {
1965
- sequence: "backspace",
1966
- description: t$1("neetoFilters.shortcuts.deleteBlock")
1967
- },
1968
- openFilterPane: {
1969
- sequence: "enter",
1970
- description: t$1("neetoFilters.shortcuts.openFilterPane")
1971
- }
1972
- };
1973
-
1974
- var buildCustomDateValue = function buildCustomDateValue(value) {
1975
- var isBeforeOrAfter = Math.abs(dayjs(value[1]).diff(dayjs(value[0]), "year")) >= 90;
1976
- if (isBeforeOrAfter) {
1977
- var currentMoment = dayjs();
1978
- var diffWithStart = Math.abs(currentMoment.diff(dayjs(value[0]), "year"));
1979
- var diffWithEnd = Math.abs(currentMoment.diff(dayjs(value[1]), "year"));
1980
- return diffWithStart < diffWithEnd ? "after-".concat(dateFormat.date(dayjs(value[0]).subtract(1, "day"))) : "before-".concat(dateFormat.date(dayjs(value[1]).add(1, "day")));
1981
- }
1982
- return value.map(dateFormat.date).join(" - ");
1983
- };
1984
- var buildFilterValue = function buildFilterValue(filter) {
1985
- var _findBy2;
1986
- var _filter$defaultType = filter.defaultType,
1987
- defaultType = _filter$defaultType === void 0 ? filter.type : _filter$defaultType,
1988
- value = filter.value,
1989
- rule = filter.rule,
1990
- _filter$values = filter.values,
1991
- initialValues = _filter$values === void 0 ? [] : _filter$values;
1992
- var values = initialValues.map(modify("value", function (value) {
1993
- return value.toString();
1994
- }));
1995
- if (isDate(defaultType) && isCustomDateRange(value)) {
1996
- return buildCustomDateValue(value);
1997
- } else if (isTime(defaultType) && isCustomTimeRange(value)) {
1998
- return value.map(dateFormat.time).join(" - ");
1999
- } else if (isDate(defaultType) || isTime(defaultType)) {
2000
- return humanize(value);
2001
- } else if (isMulti(defaultType)) {
2002
- return value.map(function (value) {
2003
- var _findBy;
2004
- return ((_findBy = findBy({
2005
- value: value
2006
- }, values)) === null || _findBy === void 0 ? void 0 : _findBy.label) || value;
2007
- }).join(", ");
2008
- } else if (isSingleDate(defaultType)) {
2009
- return rule === "between" ? value.map(dateFormat.date).join(" - ") : dateFormat.date(value);
2010
- } else if (isSingleTime(defaultType)) {
2011
- return rule === "between" ? value.map(dateFormat.time).join(" - ") : dateFormat.time(value);
2012
- } else if (isBoolean(defaultType)) {
2013
- return getLabelFromBool({
2014
- value: value,
2015
- values: values
2016
- });
2017
- }
2018
- return ((_findBy2 = findBy({
2019
- value: value
2020
- }, values)) === null || _findBy2 === void 0 ? void 0 : _findBy2.label) || value;
2021
- };
2022
- var buildRuleValue = function buildRuleValue(_ref) {
2023
- var rule = _ref.rule,
2024
- defaultType = _ref.defaultType;
2025
- if (isText(defaultType)) {
2026
- return findBy({
2027
- value: rule
2028
- }, TEXT_RULES).label;
2029
- } else if (isDigit(defaultType)) {
2030
- return findBy({
2031
- value: rule
2032
- }, NUMBER_RULES).label;
2033
- } else if (isSingleDate(defaultType)) {
2034
- return findBy({
2035
- value: rule
2036
- }, SINGLE_DATE_OPTIONS).label;
2037
- } else if (isSingleTime(defaultType)) {
2038
- return findBy({
2039
- value: rule
2040
- }, SINGLE_TIME_OPTIONS).label;
2041
- }
2042
- return "";
2043
- };
2044
- var hasOnlyKeywordFilter = function hasOnlyKeywordFilter(filters) {
2045
- return filters.length === 1 && filters[0].key === SEARCH_TERM_KEY;
2046
- };
2047
- var deepCompare = function deepCompare(filters1, filters2) {
2048
- var comparisonHelper = function comparisonHelper(filters) {
2049
- return sortBy(prop("key"), removeBy({
2050
- key: SEARCH_TERM_KEY
2051
- }, project(["key", "rule", "value"], filters)));
2052
- };
2053
- return notEqualsDeep(comparisonHelper(filters1), comparisonHelper(filters2));
2054
- };
2055
-
2056
- var Block = function Block(_ref) {
2057
- var filter = _ref.filter,
2058
- handleDelete = _ref.handleDelete,
2059
- setIsPaneOpen = _ref.setIsPaneOpen;
2060
- var key = filter.key,
2061
- _filter$defaultType = filter.defaultType,
2062
- defaultType = _filter$defaultType === void 0 ? filter.type : _filter$defaultType,
2063
- label = filter.label,
2064
- rule = filter.rule,
2065
- defaultValue = filter.defaultValue;
2066
- var filterValue = buildFilterValue(filter);
2067
- var ruleContent = buildRuleValue({
2068
- rule: rule,
2069
- defaultType: defaultType
2070
- });
2071
- var blockLength = label.length + ruleContent.length + filterValue.length;
2072
- var toolTipDisabled = blockLength <= 50;
2073
- var blockContent = !toolTipDisabled ? "".concat(filterValue.slice(0, 50 - blockLength), "...") : filterValue;
2074
- var deleteBlockHotKeyRef = useHotkeys(SHORTCUTS.deleteBlock.sequence, function () {
2075
- return handleDelete(key);
2076
- }, {
2077
- mode: "scoped"
2078
- });
2079
- var openFilterPaneHotKeyRef = useHotkeys(SHORTCUTS.openFilterPane.sequence, function () {
2080
- return setIsPaneOpen(key);
2081
- }, {
2082
- mode: "scoped"
2083
- });
2084
- return /*#__PURE__*/React.createElement(Tooltip, {
2085
- content: filterValue,
2086
- disabled: toolTipDisabled,
2087
- position: "bottom",
2088
- theme: "light"
2089
- }, /*#__PURE__*/React.createElement("div", {
2090
- className: "neeto-filters-bar__block",
2091
- "data-cy": "neeto-filters-".concat(hyphenate(key), "-block"),
2092
- tabIndex: 0,
2093
- ref: function ref(node) {
2094
- deleteBlockHotKeyRef.current = node;
2095
- openFilterPaneHotKeyRef.current = node;
2096
- },
2097
- onClick: function onClick() {
2098
- return setIsPaneOpen(key);
2099
- }
2100
- }, /*#__PURE__*/React.createElement(Typography, {
2101
- style: "body2"
2102
- }, label, ":"), /*#__PURE__*/React.createElement(Typography, {
2103
- className: "neeto-ui-text-gray-500",
2104
- style: "body2"
2105
- }, ruleContent), /*#__PURE__*/React.createElement(Typography, {
2106
- style: "body2"
2107
- }, blockContent), !defaultValue && /*#__PURE__*/React.createElement("div", {
2108
- className: "neeto-filters-bar__block-close"
2109
- }, /*#__PURE__*/React.createElement(Close, {
2110
- "data-cy": "neeto-filters-".concat(hyphenate(key), "-block-close-btn"),
2111
- size: 16,
2112
- strokeWidth: 2,
2113
- onClick: function onClick(event) {
2114
- event.stopPropagation();
2115
- handleDelete(key);
2116
- }
2117
- }))));
1081
+ }))));
2118
1082
  };
2119
1083
 
2120
1084
  var ChildBlock = function ChildBlock(_ref) {
@@ -2158,89 +1122,6 @@ var ChildBlock = function ChildBlock(_ref) {
2158
1122
  })));
2159
1123
  };
2160
1124
 
2161
- var FilterBar = function FilterBar(_ref) {
2162
- var filters = _ref.filters,
2163
- setIsSavePaneOpen = _ref.setIsSavePaneOpen,
2164
- setIsPaneOpen = _ref.setIsPaneOpen,
2165
- childrenKeys = _ref.childrenKeys,
2166
- nonHiddenFilters = _ref.nonHiddenFilters,
2167
- childrenFiltersApplied = _ref.childrenFiltersApplied,
2168
- keywordFilter = _ref.keywordFilter,
2169
- handleApplyFilters = _ref.handleApplyFilters;
2170
- var _useTranslation = useTranslation(),
2171
- t = _useTranslation.t;
2172
- var history = useHistory();
2173
- var searchParams = useQueryParams({
2174
- toCamelCase: false
2175
- });
2176
- var handleDelete = function handleDelete(key) {
2177
- if (key === SEARCH_TERM_KEY) {
2178
- var params = omit([SEARCH_TERM_KEY], getSnakeCasedQueryParams());
2179
- var pathname = window.location.pathname;
2180
- history.push(buildUrl(pathname, params));
2181
- return;
2182
- }
2183
- if (childrenKeys.includes(key)) {
2184
- var _params = omit([key], getSnakeCasedQueryParams());
2185
- var _pathname = window.location.pathname;
2186
- history.push(buildUrl(_pathname, _params));
2187
- }
2188
- var newFilters = removeBy({
2189
- key: key
2190
- }, filters);
2191
- handleApplyFilters(newFilters);
2192
- };
2193
- var handleClearAll = function handleClearAll() {
2194
- var params = isKeywordFilterPresent(keywordFilter) ? omit([SEARCH_TERM_KEY], getSnakeCasedQueryParams()) : getSnakeCasedQueryParams();
2195
- var pathname = window.location.pathname;
2196
- history.push(buildUrl(pathname, params));
2197
- handleApplyFilters([], true);
2198
- };
2199
- var hideClearButton = nonHiddenFilters.every(function (_ref2) {
2200
- var defaultValue = _ref2.defaultValue,
2201
- isClearable = _ref2.isClearable;
2202
- return defaultValue && !isClearable;
2203
- }) && !childrenFiltersApplied;
2204
- return /*#__PURE__*/React.createElement(React.Fragment, null, nonHiddenFilters.map(function (filter) {
2205
- var _filter$suffixCompone;
2206
- return /*#__PURE__*/React.createElement(React.Fragment, {
2207
- key: filter.key
2208
- }, /*#__PURE__*/React.createElement(Block, {
2209
- filter: filter,
2210
- handleDelete: handleDelete,
2211
- setIsPaneOpen: setIsPaneOpen
2212
- }), (_filter$suffixCompone = filter.suffixComponent) === null || _filter$suffixCompone === void 0 ? void 0 : _filter$suffixCompone.call(filter), /*#__PURE__*/React.createElement("div", {
2213
- className: "neeto-filters-bar--separator"
2214
- }));
2215
- }), childrenKeys.filter(function (childKey) {
2216
- return has(childKey, searchParams);
2217
- }).map(function (childKey) {
2218
- return /*#__PURE__*/React.createElement(React.Fragment, {
2219
- key: childKey
2220
- }, /*#__PURE__*/React.createElement(ChildBlock, {
2221
- childKey: childKey,
2222
- handleDelete: handleDelete,
2223
- setIsPaneOpen: setIsPaneOpen
2224
- }), /*#__PURE__*/React.createElement("div", {
2225
- className: "neeto-filters-bar--separator"
2226
- }));
2227
- }), !hasOnlyKeywordFilter(filters) && /*#__PURE__*/React.createElement(Button, {
2228
- label: t("neetoFilters.segments.saveAsNewSegment"),
2229
- style: "secondary",
2230
- onClick: function onClick() {
2231
- setIsPaneOpen(false);
2232
- setIsSavePaneOpen({
2233
- action: SEGMENT_ACTIONS$1.CREATE
2234
- });
2235
- }
2236
- }), !hideClearButton && /*#__PURE__*/React.createElement(Button, {
2237
- "data-cy": "neeto-filters-bar-clear-btn",
2238
- label: t("neetoFilters.common.clearFilters"),
2239
- style: "text",
2240
- onClick: handleClearAll
2241
- }));
2242
- };
2243
-
2244
1125
  var fetch = function fetch(params) {
2245
1126
  return axios.get(SEGMENTS_BASE_URL, {
2246
1127
  params: params
@@ -2254,8 +1135,6 @@ var show = function show(id) {
2254
1135
  var create = function create(payload) {
2255
1136
  return axios.post(SEGMENTS_BASE_URL, {
2256
1137
  segment: payload
2257
- }, {
2258
- showToastr: false
2259
1138
  });
2260
1139
  };
2261
1140
  var update = function update(_ref) {
@@ -2278,6 +1157,11 @@ var segmentsApi = {
2278
1157
  destroy: destroy
2279
1158
  };
2280
1159
 
1160
+ var QUERY_KEYS = {
1161
+ SEGMENTS_LIST: "segments-list"
1162
+ };
1163
+ var SEGMENTS_STALE_TIME = 900000; // 15 mins
1164
+
2281
1165
  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; }
2282
1166
  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; }
2283
1167
  var SEGMENTS_LIST = QUERY_KEYS.SEGMENTS_LIST;
@@ -2296,6 +1180,15 @@ var useFetchSegments = function useFetchSegments(_ref) {
2296
1180
  select: prop("segments")
2297
1181
  }, options));
2298
1182
  };
1183
+ var useShowSegment = function useShowSegment(id) {
1184
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1185
+ return useQuery([SEGMENTS_LIST, id], function () {
1186
+ return segmentsApi.show(id);
1187
+ }, mergeRight({
1188
+ staleTime: SEGMENTS_STALE_TIME,
1189
+ select: prop("segment")
1190
+ }, options));
1191
+ };
2299
1192
  var useCreateSegment = function useCreateSegment(options) {
2300
1193
  return useMutationWithInvalidation(segmentsApi.create, _objectSpread$3({
2301
1194
  keysToInvalidate: [SEGMENTS_LIST]
@@ -2312,25 +1205,47 @@ var useDestroySegment = function useDestroySegment(options) {
2312
1205
  }, options));
2313
1206
  };
2314
1207
 
2315
- 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; }
2316
- 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; }
2317
- var useSegment = function useSegment(_ref) {
1208
+ var buildSegmentsValidationSchema = function buildSegmentsValidationSchema(defaultSegmentName) {
1209
+ return yup.object({
1210
+ name: yup.string().trim().required().test({
1211
+ name: "not-default-segment-name",
1212
+ test: function test(value) {
1213
+ return (value === null || value === void 0 ? void 0 : value.toLocaleLowerCase()) !== defaultSegmentName.toLocaleLowerCase();
1214
+ },
1215
+ message: t$1("neetoFilters.segments.reservedNameErrorMessage")
1216
+ })
1217
+ });
1218
+ };
1219
+
1220
+ var Menu = Dropdown$2.Menu,
1221
+ MenuItem = Dropdown$2.MenuItem;
1222
+ var Segment = function Segment(_ref) {
2318
1223
  var entity = _ref.entity,
2319
- keyword = _ref.keyword,
1224
+ filters = _ref.filters,
2320
1225
  columns = _ref.columns,
2321
- childrenKeys = _ref.childrenKeys;
2322
- var history = useHistory$1();
2323
- var _useTranslation = useTranslation(),
2324
- t = _useTranslation.t;
2325
- var initialRenderRef = useRef(true);
2326
- var _useQueryParams = useQueryParams(),
2327
- segmentId = _useQueryParams.segmentId;
2328
- var _useState = useState({
2329
- action: undefined
2330
- }),
1226
+ childrenKeys = _ref.childrenKeys,
1227
+ setIsFilterPaneOpen = _ref.setIsFilterPaneOpen,
1228
+ defaultSegmentName = _ref.defaultSegmentName;
1229
+ var _useState = useState(false),
2331
1230
  _useState2 = _slicedToArray(_useState, 2),
2332
1231
  isSavePaneOpen = _useState2[0],
2333
1232
  setIsSavePaneOpen = _useState2[1];
1233
+ var _useState3 = useState(false),
1234
+ _useState4 = _slicedToArray(_useState3, 2),
1235
+ isUpdateAlertOpen = _useState4[0],
1236
+ setIsUpdateAlertOpen = _useState4[1];
1237
+ var inputRef = useRef(null);
1238
+ var _useTranslation = useTranslation(),
1239
+ t = _useTranslation.t;
1240
+ var history = useHistory();
1241
+ var filtersPayload = buildSegmentsPayload(filters, childrenKeys);
1242
+ var _getQueryParams = getQueryParams(),
1243
+ segmentId = _getQueryParams.segmentId;
1244
+ var _useShowSegment = useShowSegment(segmentId, {
1245
+ enabled: isNotNil(segmentId)
1246
+ }),
1247
+ _useShowSegment$data = _useShowSegment.data,
1248
+ selectedSegment = _useShowSegment$data === void 0 ? {} : _useShowSegment$data;
2334
1249
  var _useCreateSegment = useCreateSegment(),
2335
1250
  createSegment = _useCreateSegment.mutate,
2336
1251
  isCreating = _useCreateSegment.isLoading;
@@ -2338,50 +1253,18 @@ var useSegment = function useSegment(_ref) {
2338
1253
  updateSegment = _useUpdateSegment.mutate,
2339
1254
  isUpdating = _useUpdateSegment.isLoading;
2340
1255
  var isSubmitting = isCreating || isUpdating;
2341
- var searchParams = useQueryParams({
2342
- toCamelCase: false
2343
- });
2344
- var keywordValue = searchParams[SEARCH_TERM_KEY] || "";
2345
- var isEdit = isSavePaneOpen.action === SEGMENT_ACTIONS$1.EDIT;
2346
- var keywordFilter = _objectSpread$2(_objectSpread$2({
2347
- type: "text",
2348
- rule: "contains",
2349
- label: t("neetoFilters.common.searchTerm")
2350
- }, keyword), {}, {
2351
- key: SEARCH_TERM_KEY,
2352
- value: keywordValue
2353
- });
2354
- var filters = buildFiltersFromSearchParams(isKeywordFilterPresent(keywordFilter) && isNotEmpty(keywordValue) ? [keywordFilter].concat(_toConsumableArray(columns)) : columns);
2355
- var nonHiddenFilters = removeBy({
2356
- hidden: true
2357
- }, filters);
2358
- var handleApplyFilters = function handleApplyFilters(newFilters, isClearAll) {
2359
- var params = buildUrlFromFilters(_objectSpread$2({
2360
- columns: columns,
2361
- filters: isKeywordFilterPresent(keywordFilter) && isNotEmpty(getSearchTermFromUrl()) ? [].concat(_toConsumableArray(newFilters), [keywordFilter]) : newFilters
2362
- }, isClearAll && {
2363
- isClearAll: true,
2364
- childrenKeys: childrenKeys
2365
- }));
2366
- history.push({
2367
- search: params
1256
+ var handleUpdate = function handleUpdate() {
1257
+ return updateSegment({
1258
+ id: segmentId,
1259
+ payload: {
1260
+ filters: filtersPayload
1261
+ }
1262
+ }, {
1263
+ onSuccess: function onSuccess() {
1264
+ return setIsUpdateAlertOpen(false);
1265
+ }
2368
1266
  });
2369
1267
  };
2370
- var childrenFiltersApplied = childrenKeys.some(function (key) {
2371
- return has(key, searchParams);
2372
- });
2373
- useEffect(function () {
2374
- if (initialRenderRef.current) {
2375
- initialRenderRef.current = false;
2376
- return noop$1;
2377
- }
2378
- var handler = setTimeout(function () {
2379
- handleApplyFilters(filters);
2380
- }, 500);
2381
- return function () {
2382
- return clearTimeout(handler);
2383
- };
2384
- }, [keywordValue]);
2385
1268
  var handleCreateSuccess = function handleCreateSuccess(_ref2) {
2386
1269
  var _filters$;
2387
1270
  var _ref2$segment = _ref2.segment,
@@ -2394,101 +1277,99 @@ var useSegment = function useSegment(_ref) {
2394
1277
  id: id
2395
1278
  })
2396
1279
  });
2397
- setIsSavePaneOpen({
2398
- action: undefined
2399
- });
2400
- showThumbsUpToastr();
1280
+ setIsSavePaneOpen(false);
2401
1281
  };
2402
- var handleCreate = function handleCreate(_ref3, _ref4) {
1282
+ var handleSubmit = function handleSubmit(_ref3) {
2403
1283
  var name = _ref3.name;
2404
- var setFieldError = _ref4.setFieldError;
2405
- var filtersPayload = buildSegmentsPayload(filters, childrenKeys);
2406
- createSegment({
1284
+ return createSegment({
2407
1285
  name: name,
2408
1286
  entity: entity,
2409
1287
  filters: filtersPayload
2410
1288
  }, {
2411
- onSuccess: handleCreateSuccess,
2412
- onError: function onError(error) {
2413
- return setFieldError("name", error.response.data.error);
2414
- }
2415
- });
2416
- };
2417
- var handleUpdate = function handleUpdate(_ref5, _ref6) {
2418
- var name = _ref5.name;
2419
- var setFieldError = _ref6.setFieldError;
2420
- var filtersPayload = buildSegmentsPayload(filters, childrenKeys);
2421
- updateSegment({
2422
- id: segmentId,
2423
- payload: {
2424
- name: name,
2425
- filters: filtersPayload
2426
- }
2427
- }, {
2428
- onSuccess: function onSuccess() {
2429
- setIsSavePaneOpen({
2430
- action: undefined
2431
- });
2432
- showThumbsUpToastr();
2433
- },
2434
- onError: function onError(error) {
2435
- return setFieldError("name", error.response.data.error);
2436
- }
1289
+ onSuccess: handleCreateSuccess
2437
1290
  });
2438
1291
  };
2439
- return {
2440
- isEdit: isEdit,
2441
- filters: filters,
2442
- keywordFilter: keywordFilter,
2443
- isSubmitting: isSubmitting,
2444
- nonHiddenFilters: nonHiddenFilters,
2445
- isSavePaneOpen: isSavePaneOpen,
2446
- setIsSavePaneOpen: setIsSavePaneOpen,
2447
- handleApplyFilters: handleApplyFilters,
2448
- childrenFiltersApplied: childrenFiltersApplied,
2449
- handleSubmit: isEdit ? handleUpdate : handleCreate
2450
- };
2451
- };
2452
-
2453
- var Menu = Dropdown$2.Menu,
2454
- MenuItem = Dropdown$2.MenuItem;
2455
- var SegmentBar = function SegmentBar(_ref) {
2456
- var entity = _ref.entity,
2457
- filters = _ref.filters,
2458
- setIsSavePaneOpen = _ref.setIsSavePaneOpen,
2459
- setIsPaneOpen = _ref.setIsPaneOpen;
2460
- var _useTranslation = useTranslation(),
2461
- t = _useTranslation.t;
2462
- var _useQueryParams = useQueryParams(),
2463
- segmentId = _useQueryParams.segmentId;
2464
- var queryClient = useQueryClient();
2465
- var cachedSegments = queryClient.getQueryData([QUERY_KEYS.SEGMENTS_LIST, entity, ""]) || DEFAULT_SEGMENTS_CACHE;
2466
- var segment = findById(segmentId, cachedSegments.segments);
2467
- if (isNotPresent(segment)) return null;
2468
- var newChangesExists = deepCompare(segment.filters[0].conditions, filters);
2469
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Typography, {
2470
- className: "neeto-ui-text-gray-600 mr-4",
2471
- "data-cy": "neeto-filters-segment-name",
2472
- style: "h4"
2473
- }, segment.name), newChangesExists && /*#__PURE__*/React.createElement(Dropdown$2, {
1292
+ return /*#__PURE__*/React.createElement(React.Fragment, null, isNil(segmentId) ? /*#__PURE__*/React.createElement(Button, {
1293
+ disabled: hasOnlyKeywordFilter(filters),
1294
+ label: t("neetoFilters.segments.saveAsSegment"),
1295
+ style: "secondary",
1296
+ onClick: function onClick() {
1297
+ setIsFilterPaneOpen(false);
1298
+ setIsSavePaneOpen(true);
1299
+ }
1300
+ }) : /*#__PURE__*/React.createElement(Dropdown$2, {
2474
1301
  buttonStyle: "secondary",
2475
- label: t("neetoFilters.segments.updateSegment")
1302
+ label: t("neetoFilters.segments.saveSegment")
2476
1303
  }, /*#__PURE__*/React.createElement(Menu, null, /*#__PURE__*/React.createElement(MenuItem.Button, {
1304
+ isDisabled: equals(filtersPayload, selectedSegment === null || selectedSegment === void 0 ? void 0 : selectedSegment.filters),
1305
+ onClick: setIsUpdateAlertOpen
1306
+ }, t("neetoFilters.segments.saveSegment")), /*#__PURE__*/React.createElement(MenuItem.Button, {
2477
1307
  onClick: function onClick() {
2478
- return setIsSavePaneOpen({
2479
- action: SEGMENT_ACTIONS$1.EDIT
2480
- });
1308
+ setIsFilterPaneOpen(false);
1309
+ setIsSavePaneOpen(true);
2481
1310
  }
2482
- }, t("neetoFilters.segments.updateSegment")), /*#__PURE__*/React.createElement(MenuItem.Button, {
2483
- onClick: function onClick() {
2484
- setIsPaneOpen(false);
2485
- setIsSavePaneOpen({
2486
- action: SEGMENT_ACTIONS$1.CREATE
2487
- });
1311
+ }, t("neetoFilters.segments.saveAsNewSegment")))), /*#__PURE__*/React.createElement(Pane$1, {
1312
+ initialFocusRef: inputRef,
1313
+ isOpen: isSavePaneOpen,
1314
+ onClose: function onClose() {
1315
+ return setIsSavePaneOpen(false);
1316
+ }
1317
+ }, /*#__PURE__*/React.createElement(Pane$1.Header, null, /*#__PURE__*/React.createElement(Typography, {
1318
+ style: "h2",
1319
+ weight: "semibold"
1320
+ }, t("neetoFilters.segments.addNewSegment"))), /*#__PURE__*/React.createElement(Form, {
1321
+ className: "w-full",
1322
+ formProps: {
1323
+ noValidate: true
1324
+ },
1325
+ formikProps: {
1326
+ initialValues: {
1327
+ name: ""
1328
+ },
1329
+ validateOnChange: true,
1330
+ validateOnBlur: true,
1331
+ validationSchema: buildSegmentsValidationSchema(defaultSegmentName),
1332
+ onSubmit: handleSubmit
2488
1333
  }
2489
- }, t("neetoFilters.segments.saveAsNewSegment")))));
1334
+ }, /*#__PURE__*/React.createElement(Pane$1.Body, null, /*#__PURE__*/React.createElement(Input, {
1335
+ className: "w-full",
1336
+ label: t("neetoFilters.segments.name"),
1337
+ name: "name",
1338
+ placeholder: t("neetoFilters.segments.segmentName"),
1339
+ ref: inputRef
1340
+ })), /*#__PURE__*/React.createElement(Pane$1.Footer, {
1341
+ className: "flex items-center space-x-2"
1342
+ }, /*#__PURE__*/React.createElement(ActionBlock, {
1343
+ cancelButtonProps: {
1344
+ onClick: function onClick() {
1345
+ return setIsSavePaneOpen(false);
1346
+ },
1347
+ disabled: false
1348
+ },
1349
+ submitButtonProps: {
1350
+ disabled: isSubmitting,
1351
+ loading: isSubmitting
1352
+ }
1353
+ })))), /*#__PURE__*/React.createElement(Alert, {
1354
+ isOpen: isUpdateAlertOpen,
1355
+ isSubmitting: isUpdating,
1356
+ submitButtonLabel: t("neetoFilters.common.update"),
1357
+ title: t("neetoFilters.segments.updateSegment"),
1358
+ message: /*#__PURE__*/React.createElement(Trans, {
1359
+ i18nKey: "neetoFilters.segments.updateSegmentMessage",
1360
+ values: {
1361
+ entity: selectedSegment === null || selectedSegment === void 0 ? void 0 : selectedSegment.name
1362
+ }
1363
+ }),
1364
+ onClose: function onClose() {
1365
+ return setIsUpdateAlertOpen(false);
1366
+ },
1367
+ onSubmit: handleUpdate
1368
+ }));
2490
1369
  };
2491
1370
 
1371
+ 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; }
1372
+ 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; }
2492
1373
  var Bar = function Bar(_ref) {
2493
1374
  var entity = _ref.entity,
2494
1375
  className = _ref.className,
@@ -2498,134 +1379,130 @@ var Bar = function Bar(_ref) {
2498
1379
  keyword = _ref$keyword === void 0 ? {
2499
1380
  node: "",
2500
1381
  value: "",
2501
- setValue: noop$1
1382
+ setValue: noop
2502
1383
  } : _ref$keyword,
2503
1384
  _ref$setIsPaneOpen = _ref.setIsPaneOpen,
2504
1385
  setIsPaneOpen = _ref$setIsPaneOpen === void 0 ? identity : _ref$setIsPaneOpen,
2505
1386
  _ref$childrenKeys = _ref.childrenKeys,
2506
1387
  childrenKeys = _ref$childrenKeys === void 0 ? [] : _ref$childrenKeys,
2507
1388
  _ref$defaultSegmentNa = _ref.defaultSegmentName,
2508
- defaultSegmentName = _ref$defaultSegmentNa === void 0 ? t$1("neetoFilters.common.allResults") : _ref$defaultSegmentNa,
2509
- customFilters = _ref.customFilters;
2510
- var queryClient = useQueryClient();
2511
- var _useQueryParams = useQueryParams(),
2512
- segmentId = _useQueryParams.segmentId;
2513
- var segmentFormInitialRef = useRef(null);
2514
- var _useSegment = useSegment({
2515
- entity: entity,
2516
- keyword: keyword,
2517
- columns: columns,
2518
- childrenKeys: childrenKeys
2519
- }),
2520
- isEdit = _useSegment.isEdit,
2521
- filters = _useSegment.filters,
2522
- handleSubmit = _useSegment.handleSubmit,
2523
- isSubmitting = _useSegment.isSubmitting,
2524
- keywordFilter = _useSegment.keywordFilter,
2525
- isSavePaneOpen = _useSegment.isSavePaneOpen,
2526
- nonHiddenFilters = _useSegment.nonHiddenFilters,
2527
- setIsSavePaneOpen = _useSegment.setIsSavePaneOpen,
2528
- handleApplyFilters = _useSegment.handleApplyFilters,
2529
- childrenFiltersApplied = _useSegment.childrenFiltersApplied;
2530
- var BarComponent = segmentId ? SegmentBar : FilterBar;
2531
- var cachedSegments = queryClient.getQueryData([QUERY_KEYS.SEGMENTS_LIST, entity, ""]) || DEFAULT_SEGMENTS_CACHE;
2532
- var segment = findById(segmentId, cachedSegments.segments);
2533
- if (isEmpty(nonHiddenFilters) && !childrenFiltersApplied) return null;
2534
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
2535
- className: classnames("neeto-filters-bar", _defineProperty({}, className, className))
2536
- }, /*#__PURE__*/React.createElement(BarComponent, {
2537
- childrenFiltersApplied: childrenFiltersApplied,
2538
- childrenKeys: childrenKeys,
2539
- entity: entity,
2540
- filters: filters,
2541
- handleApplyFilters: handleApplyFilters,
2542
- keywordFilter: keywordFilter,
2543
- nonHiddenFilters: nonHiddenFilters,
2544
- setIsPaneOpen: setIsPaneOpen,
2545
- setIsSavePaneOpen: setIsSavePaneOpen
2546
- })), /*#__PURE__*/React.createElement(SegmentForm, {
2547
- childrenKeys: childrenKeys,
2548
- columns: columns,
2549
- customFilters: customFilters,
2550
- defaultSegmentName: defaultSegmentName,
2551
- filters: filters,
2552
- handleSubmit: handleSubmit,
2553
- isEdit: isEdit,
2554
- isSubmitting: isSubmitting,
2555
- keywordFilter: keywordFilter,
2556
- segmentFormInitialRef: segmentFormInitialRef,
2557
- isOpen: isPresent(isSavePaneOpen.action),
2558
- initialValues: isEdit ? assoc("filters", [{
2559
- conditions: filters
2560
- }], segment) : {
2561
- name: "",
2562
- filters: [{
2563
- conditions: filters
2564
- }]
2565
- },
2566
- onClose: function onClose() {
2567
- return setIsSavePaneOpen({
2568
- action: undefined
1389
+ defaultSegmentName = _ref$defaultSegmentNa === void 0 ? t$1("neetoFilters.common.allResults") : _ref$defaultSegmentNa;
1390
+ return function () {
1391
+ var _useTranslation = useTranslation(),
1392
+ t = _useTranslation.t;
1393
+ var initialRenderRef = useRef(true);
1394
+ var searchParams = useQueryParams({
1395
+ toCamelCase: false
1396
+ });
1397
+ var keywordValue = searchParams[SEARCH_TERM_KEY] || "";
1398
+ var keywordFilter = _objectSpread$2(_objectSpread$2({
1399
+ type: "text",
1400
+ rule: "contains",
1401
+ label: t("neetoFilters.common.searchTerm")
1402
+ }, keyword), {}, {
1403
+ key: SEARCH_TERM_KEY,
1404
+ value: keywordValue
1405
+ });
1406
+ var filters = buildFiltersFromSearchParams(isKeywordFilterPresent(keywordFilter) && isNotEmpty(keywordValue) ? [keywordFilter].concat(_toConsumableArray(columns)) : columns);
1407
+ var nonHiddenFilters = removeBy({
1408
+ hidden: true
1409
+ }, filters);
1410
+ var history = useHistory();
1411
+ var handleSubmit = function handleSubmit(newFilters, isClearAll) {
1412
+ var params = buildUrlFromFilters(_objectSpread$2({
1413
+ columns: columns,
1414
+ filters: isKeywordFilterPresent(keywordFilter) && isNotEmpty(getSearchTermFromUrl()) ? [].concat(_toConsumableArray(newFilters), [keywordFilter]) : newFilters
1415
+ }, isClearAll && {
1416
+ isClearAll: true,
1417
+ childrenKeys: childrenKeys
1418
+ }));
1419
+ history.push({
1420
+ search: params
2569
1421
  });
2570
- }
2571
- }));
2572
- };
2573
-
2574
- function _objectWithoutPropertiesLoose$1(source, excluded) {
2575
- if (source == null) return {};
2576
- var target = {};
2577
- var sourceKeys = Object.keys(source);
2578
- var key, i;
2579
- for (i = 0; i < sourceKeys.length; i++) {
2580
- key = sourceKeys[i];
2581
- if (excluded.indexOf(key) >= 0) continue;
2582
- target[key] = source[key];
2583
- }
2584
- return target;
2585
- }
2586
-
2587
- function _objectWithoutProperties(source, excluded) {
2588
- if (source == null) return {};
2589
- var target = _objectWithoutPropertiesLoose$1(source, excluded);
2590
- var key, i;
2591
- if (Object.getOwnPropertySymbols) {
2592
- var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
2593
- for (i = 0; i < sourceSymbolKeys.length; i++) {
2594
- key = sourceSymbolKeys[i];
2595
- if (excluded.indexOf(key) >= 0) continue;
2596
- if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
2597
- target[key] = source[key];
2598
- }
2599
- }
2600
- return target;
2601
- }
2602
-
2603
- var Portal = function Portal(_ref) {
2604
- var children = _ref.children,
2605
- _ref$rootId = _ref.rootId,
2606
- rootId = _ref$rootId === void 0 ? "neeto-filters-portal" : _ref$rootId,
2607
- _ref$element = _ref.element,
2608
- element = _ref$element === void 0 ? "div" : _ref$element;
2609
- var target = useRef(null);
2610
- useEffect(function () {
2611
- var container = document.getElementById(rootId);
2612
- if (!container) {
2613
- container = document.createElement(element);
2614
- container.setAttribute("id", rootId);
2615
- document.body.appendChild(container);
2616
- }
2617
- container.appendChild(target.current);
2618
- return function () {
2619
- target.current.remove();
2620
- if (isEmpty(container.childNodes)) {
2621
- container.remove();
1422
+ };
1423
+ var handleDelete = function handleDelete(key) {
1424
+ if (key === SEARCH_TERM_KEY) {
1425
+ var params = omit([SEARCH_TERM_KEY], getSnakeCasedQueryParams());
1426
+ var pathname = window.location.pathname;
1427
+ history.push(buildUrl(pathname, params));
1428
+ return;
2622
1429
  }
1430
+ if (childrenKeys.includes(key)) {
1431
+ var _params = omit([key], getSnakeCasedQueryParams());
1432
+ var _pathname = window.location.pathname;
1433
+ history.push(buildUrl(_pathname, _params));
1434
+ }
1435
+ var newFilters = removeBy({
1436
+ key: key
1437
+ }, filters);
1438
+ handleSubmit(newFilters);
2623
1439
  };
2624
- }, [rootId]);
2625
- if (!target.current) {
2626
- target.current = document.createElement(element);
2627
- }
2628
- return /*#__PURE__*/createPortal(children, target.current);
1440
+ var handleClearAll = function handleClearAll() {
1441
+ var params = isKeywordFilterPresent(keywordFilter) ? omit([SEARCH_TERM_KEY], getSnakeCasedQueryParams()) : getSnakeCasedQueryParams();
1442
+ var pathname = window.location.pathname;
1443
+ history.push(buildUrl(pathname, params));
1444
+ handleSubmit([], true);
1445
+ };
1446
+ var childrenFiltersApplied = childrenKeys.some(function (key) {
1447
+ return has(key, searchParams);
1448
+ });
1449
+ var hideClearButton = nonHiddenFilters.every(function (_ref2) {
1450
+ var defaultValue = _ref2.defaultValue,
1451
+ isClearable = _ref2.isClearable;
1452
+ return defaultValue && !isClearable;
1453
+ }) && !childrenFiltersApplied;
1454
+ useEffect(function () {
1455
+ if (initialRenderRef.current) {
1456
+ initialRenderRef.current = false;
1457
+ return noop;
1458
+ }
1459
+ var handler = setTimeout(function () {
1460
+ handleSubmit(filters);
1461
+ }, 500);
1462
+ return function () {
1463
+ return clearTimeout(handler);
1464
+ };
1465
+ }, [keywordValue]);
1466
+ if (isEmpty(nonHiddenFilters) && !childrenFiltersApplied) return null;
1467
+ return /*#__PURE__*/React.createElement("div", {
1468
+ className: classnames("neeto-filters-bar", _defineProperty({}, className, className))
1469
+ }, nonHiddenFilters.map(function (filter) {
1470
+ var _filter$suffixCompone;
1471
+ return /*#__PURE__*/React.createElement(React.Fragment, {
1472
+ key: filter.key
1473
+ }, /*#__PURE__*/React.createElement(Block, {
1474
+ filter: filter,
1475
+ handleDelete: handleDelete,
1476
+ setIsPaneOpen: setIsPaneOpen
1477
+ }), (_filter$suffixCompone = filter.suffixComponent) === null || _filter$suffixCompone === void 0 ? void 0 : _filter$suffixCompone.call(filter), /*#__PURE__*/React.createElement("div", {
1478
+ className: "neeto-filters-bar--separator"
1479
+ }));
1480
+ }), childrenKeys.filter(function (childKey) {
1481
+ return has(childKey, searchParams);
1482
+ }).map(function (childKey) {
1483
+ return /*#__PURE__*/React.createElement(React.Fragment, {
1484
+ key: childKey
1485
+ }, /*#__PURE__*/React.createElement(ChildBlock, {
1486
+ childKey: childKey,
1487
+ handleDelete: handleDelete,
1488
+ setIsPaneOpen: setIsPaneOpen
1489
+ }), /*#__PURE__*/React.createElement("div", {
1490
+ className: "neeto-filters-bar--separator"
1491
+ }));
1492
+ }), isNotNil(entity) && /*#__PURE__*/React.createElement(Segment, {
1493
+ childrenKeys: childrenKeys,
1494
+ columns: columns,
1495
+ defaultSegmentName: defaultSegmentName,
1496
+ entity: entity,
1497
+ filters: filters,
1498
+ setIsFilterPaneOpen: setIsPaneOpen
1499
+ }), !hideClearButton && /*#__PURE__*/React.createElement(Button, {
1500
+ "data-cy": "neeto-filters-bar-clear-btn",
1501
+ label: t("neetoFilters.common.clearFilters"),
1502
+ style: "text",
1503
+ onClick: handleClearAll
1504
+ }));
1505
+ }();
2629
1506
  };
2630
1507
 
2631
1508
  function _extends() {
@@ -2656,940 +1533,840 @@ function _objectWithoutPropertiesLoose(source, excluded) {
2656
1533
  return target;
2657
1534
  }
2658
1535
 
2659
- function _setPrototypeOf(o, p) {
2660
- _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {
2661
- o.__proto__ = p;
2662
- return o;
2663
- };
2664
- return _setPrototypeOf(o, p);
2665
- }
2666
-
2667
- function _inheritsLoose(subClass, superClass) {
2668
- subClass.prototype = Object.create(superClass.prototype);
2669
- subClass.prototype.constructor = subClass;
2670
- _setPrototypeOf(subClass, superClass);
2671
- }
2672
-
2673
- /**
2674
- * Checks if a given element has a CSS class.
2675
- *
2676
- * @param element the element
2677
- * @param className the CSS class name
2678
- */
2679
- function hasClass(element, className) {
2680
- if (element.classList) return !!className && element.classList.contains(className);
2681
- return (" " + (element.className.baseVal || element.className) + " ").indexOf(" " + className + " ") !== -1;
2682
- }
2683
-
2684
- /**
2685
- * Adds a CSS class to a given element.
2686
- *
2687
- * @param element the element
2688
- * @param className the CSS class name
2689
- */
2690
-
2691
- function addClass(element, className) {
2692
- if (element.classList) element.classList.add(className);else if (!hasClass(element, className)) if (typeof element.className === 'string') element.className = element.className + " " + className;else element.setAttribute('class', (element.className && element.className.baseVal || '') + " " + className);
1536
+ function _objectWithoutProperties(source, excluded) {
1537
+ if (source == null) return {};
1538
+ var target = _objectWithoutPropertiesLoose(source, excluded);
1539
+ var key, i;
1540
+ if (Object.getOwnPropertySymbols) {
1541
+ var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
1542
+ for (i = 0; i < sourceSymbolKeys.length; i++) {
1543
+ key = sourceSymbolKeys[i];
1544
+ if (excluded.indexOf(key) >= 0) continue;
1545
+ if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
1546
+ target[key] = source[key];
1547
+ }
1548
+ }
1549
+ return target;
2693
1550
  }
2694
1551
 
2695
- function replaceClassName(origClass, classToRemove) {
2696
- return origClass.replace(new RegExp("(^|\\s)" + classToRemove + "(?:\\s|$)", 'g'), '$1').replace(/\s+/g, ' ').replace(/^\s*|\s*$/g, '');
2697
- }
2698
- /**
2699
- * Removes a CSS class from a given element.
2700
- *
2701
- * @param element the element
2702
- * @param className the CSS class name
2703
- */
1552
+ var useFilters = function useFilters(_ref) {
1553
+ var onFiltersChange = _ref.onFiltersChange,
1554
+ columns = _ref.columns,
1555
+ keywordFilter = _ref.keywordFilter,
1556
+ onSelectorsChange = _ref.onSelectorsChange;
1557
+ var _useTransition = useTransition(),
1558
+ _useTransition2 = _slicedToArray(_useTransition, 2);
1559
+ _useTransition2[0];
1560
+ var startTransition = _useTransition2[1];
1561
+ var initialRender = useRef(true);
1562
+ var prevFilters = useRef([]);
1563
+ var location = useLocation();
1564
+ var filters = buildFiltersFromSearchParams(columns, false);
1565
+ var history = useHistory();
1566
+ var defaultValuesOfColumns = JSON.stringify(pluck("defaultValue", columns));
1567
+ var handlePrecenseOfDefaultFilters = function handlePrecenseOfDefaultFilters(defaultFilters) {
1568
+ var params = buildUrlFromFilters({
1569
+ columns: columns,
1570
+ filters: isKeywordFilterPresent(keywordFilter) && isNotEmpty(getSearchTermFromUrl()) ? [].concat(_toConsumableArray(defaultFilters), [keywordFilter]) : defaultFilters
1571
+ });
1572
+ history.replace({
1573
+ search: params
1574
+ });
1575
+ };
1576
+ var handleFiltersChange = function handleFiltersChange(filtersPayload) {
1577
+ startTransition(function () {
1578
+ onFiltersChange(buildFiltersPayload(filtersPayload.filter(function (filter) {
1579
+ return !isNil(filter.node);
1580
+ })));
1581
+ });
1582
+ };
2704
1583
 
1584
+ //This function sends the updated filters to host via callbacks.
1585
+ var sendUpdatedFilters = function sendUpdatedFilters() {
1586
+ if (compareFilters(append(keywordFilter, filters), prevFilters.current)) {
1587
+ return;
1588
+ }
1589
+ var newFilters = buildFiltersFromSearchParams(columns);
1590
+ var filtersPayload = isKeywordFilterPresent(keywordFilter) && isNotEmpty(getSearchTermFromUrl()) ? append(keywordFilter, newFilters) : newFilters;
1591
+ handleFiltersChange(filtersPayload);
1592
+ onSelectorsChange(buildSelectorsFromURL(columns));
1593
+ };
1594
+ var handleChangesInURL = function handleChangesInURL() {
1595
+ var defaultFilters = buildDefaultFilters(columns, filters);
1596
+ var searchParams = getSnakeCasedQueryParams();
1597
+ var keys = pluck("key", append(keywordFilter, columns));
1598
+ if (keys.every(function (key) {
1599
+ return isNil(searchParams[key]);
1600
+ }) && !isEmpty(defaultFilters)) {
1601
+ history.replace({
1602
+ search: buildUrlFromFilters({
1603
+ columns: columns,
1604
+ filters: concat(defaultFilters, filters)
1605
+ })
1606
+ });
1607
+ filters = buildFiltersFromSearchParams(columns, false);
1608
+ }
1609
+ };
1610
+ useEffect(function () {
1611
+ if (initialRender.current) {
1612
+ initialRender.current = false;
1613
+ var keywordValue = getSearchTermFromUrl();
1614
+ var defaultFilters = buildDefaultFilters(columns, filters);
1615
+ isNotEmpty(defaultFilters) && handlePrecenseOfDefaultFilters(defaultFilters);
1616
+ prevFilters.current = append(mergeRight(keywordFilter, {
1617
+ value: keywordValue
1618
+ }), filters);
1619
+ } else {
1620
+ handleChangesInURL();
1621
+ sendUpdatedFilters();
1622
+ prevFilters.current = append(keywordFilter, filters);
1623
+ }
1624
+ }, [location.search, defaultValuesOfColumns]);
1625
+ return filters;
1626
+ };
2705
1627
 
2706
- function removeClass$1(element, className) {
2707
- if (element.classList) {
2708
- element.classList.remove(className);
2709
- } else if (typeof element.className === 'string') {
2710
- element.className = replaceClassName(element.className, className);
2711
- } else {
2712
- element.setAttribute('class', replaceClassName(element.className && element.className.baseVal || '', className));
1628
+ var buildDropdownValue = function buildDropdownValue(_ref) {
1629
+ var defaultType = _ref.defaultType,
1630
+ filter = _ref.filter,
1631
+ options = _ref.options;
1632
+ if (!filter) return null;
1633
+ if (isMulti(defaultType)) {
1634
+ return options.filter(function (_ref2) {
1635
+ var value = _ref2.value;
1636
+ return filter.value.includes(value);
1637
+ });
1638
+ }
1639
+ return findBy({
1640
+ value: filter.value
1641
+ }, options);
1642
+ };
1643
+ var buildSingleTimeValue = function buildSingleTimeValue(filter) {
1644
+ var _findBy2;
1645
+ if (!filter) return null;
1646
+ return (_findBy2 = findBy({
1647
+ value: filter.value
1648
+ }, TIME_OPTIONS)) !== null && _findBy2 !== void 0 ? _findBy2 : last(TIME_OPTIONS);
1649
+ };
1650
+ var getOtherProps = function getOtherProps(props) {
1651
+ return omit(["key", "node", "label", "type", "values", "model", "showRuleSelector"], props);
1652
+ };
1653
+ var buildDropdownOptions = function buildDropdownOptions(_ref3) {
1654
+ var defaultType = _ref3.defaultType,
1655
+ filter = _ref3.filter,
1656
+ options = _ref3.options;
1657
+ options = options.map(modify("value", function (value) {
1658
+ return value === null || value === void 0 ? void 0 : value.toString();
1659
+ }));
1660
+ if (!filter) return options;
1661
+ if (isMulti(defaultType)) {
1662
+ var selectedOptions = filter.value.map(function (value) {
1663
+ return findBy({
1664
+ value: value
1665
+ }, options) || toLabelAndValue(value);
1666
+ });
1667
+ var nonSelectedOptions = options.filter(function (option) {
1668
+ return !filter.value.includes(option.value);
1669
+ });
1670
+ return concat(selectedOptions, nonSelectedOptions);
1671
+ }
1672
+ if (!findBy({
1673
+ value: filter.value
1674
+ }, options)) {
1675
+ return append(toLabelAndValue(filter.value), options);
1676
+ }
1677
+ return options;
1678
+ };
1679
+ var initializeDateRule = function initializeDateRule(filter) {
1680
+ return filter ? findBy({
1681
+ value: filter === null || filter === void 0 ? void 0 : filter.value
1682
+ }, DATE_OPTIONS) || findDateOption(filter, DATE_OPTIONS) : {};
1683
+ };
1684
+ var getDateValue = function getDateValue(value, rule) {
1685
+ if (isEmpty(value) || isNil(value)) {
1686
+ return null;
1687
+ }
1688
+ if (rule.value === "custom-date-range") {
1689
+ return value;
1690
+ }
1691
+ return rule.value === "before" ? dayjs(value[1]).add(1, "day") : dayjs(value[0]).subtract(1, "day");
1692
+ };
1693
+ var findDateOption = function findDateOption(filter, options) {
1694
+ var value = filter.value;
1695
+ var isBeforeOrAfter = dayjs(value[1]).diff(dayjs(value[0]), "year") >= 90;
1696
+ if (not(isBeforeOrAfter)) {
1697
+ return last(options);
1698
+ }
1699
+ var currentMoment = dayjs();
1700
+ var diffWithStart = Math.abs(currentMoment.diff(dayjs(value[0]), "year"));
1701
+ var diffWithEnd = Math.abs(currentMoment.diff(dayjs(value[1]), "year"));
1702
+ return diffWithStart < diffWithEnd ? findBy({
1703
+ value: "after"
1704
+ }, options) : findBy({
1705
+ value: "before"
1706
+ }, options);
1707
+ };
1708
+ var buildDateValues = function buildDateValues(dates, selectedRule) {
1709
+ if (selectedRule.value === "after") {
1710
+ return [dates.add(1, "day"), dates.add(100, "year")];
1711
+ } else if (selectedRule.value === "before") {
1712
+ return [dates.subtract(100, "year"), dates.subtract(1, "day")];
2713
1713
  }
2714
- }
2715
-
2716
- var config = {
2717
- disabled: false
1714
+ return dates;
2718
1715
  };
2719
-
2720
- var TransitionGroupContext = React.createContext(null);
2721
-
2722
- var forceReflow = function forceReflow(node) {
2723
- return node.scrollTop;
1716
+ var buildHelpIconProps = function buildHelpIconProps(helpIconProps) {
1717
+ return mergeDeepRight(DEFAULT_HELP_ICON_PROPS, helpIconProps);
2724
1718
  };
2725
1719
 
2726
- var UNMOUNTED = 'unmounted';
2727
- var EXITED = 'exited';
2728
- var ENTERING = 'entering';
2729
- var ENTERED = 'entered';
2730
- var EXITING = 'exiting';
2731
- /**
2732
- * The Transition component lets you describe a transition from one component
2733
- * state to another _over time_ with a simple declarative API. Most commonly
2734
- * it's used to animate the mounting and unmounting of a component, but can also
2735
- * be used to describe in-place transition states as well.
2736
- *
2737
- * ---
2738
- *
2739
- * **Note**: `Transition` is a platform-agnostic base component. If you're using
2740
- * transitions in CSS, you'll probably want to use
2741
- * [`CSSTransition`](https://reactcommunity.org/react-transition-group/css-transition)
2742
- * instead. It inherits all the features of `Transition`, but contains
2743
- * additional features necessary to play nice with CSS transitions (hence the
2744
- * name of the component).
2745
- *
2746
- * ---
2747
- *
2748
- * By default the `Transition` component does not alter the behavior of the
2749
- * component it renders, it only tracks "enter" and "exit" states for the
2750
- * components. It's up to you to give meaning and effect to those states. For
2751
- * example we can add styles to a component when it enters or exits:
2752
- *
2753
- * ```jsx
2754
- * import { Transition } from 'react-transition-group';
2755
- *
2756
- * const duration = 300;
2757
- *
2758
- * const defaultStyle = {
2759
- * transition: `opacity ${duration}ms ease-in-out`,
2760
- * opacity: 0,
2761
- * }
2762
- *
2763
- * const transitionStyles = {
2764
- * entering: { opacity: 1 },
2765
- * entered: { opacity: 1 },
2766
- * exiting: { opacity: 0 },
2767
- * exited: { opacity: 0 },
2768
- * };
2769
- *
2770
- * const Fade = ({ in: inProp }) => (
2771
- * <Transition in={inProp} timeout={duration}>
2772
- * {state => (
2773
- * <div style={{
2774
- * ...defaultStyle,
2775
- * ...transitionStyles[state]
2776
- * }}>
2777
- * I'm a fade Transition!
2778
- * </div>
2779
- * )}
2780
- * </Transition>
2781
- * );
2782
- * ```
2783
- *
2784
- * There are 4 main states a Transition can be in:
2785
- * - `'entering'`
2786
- * - `'entered'`
2787
- * - `'exiting'`
2788
- * - `'exited'`
2789
- *
2790
- * Transition state is toggled via the `in` prop. When `true` the component
2791
- * begins the "Enter" stage. During this stage, the component will shift from
2792
- * its current transition state, to `'entering'` for the duration of the
2793
- * transition and then to the `'entered'` stage once it's complete. Let's take
2794
- * the following example (we'll use the
2795
- * [useState](https://reactjs.org/docs/hooks-reference.html#usestate) hook):
2796
- *
2797
- * ```jsx
2798
- * function App() {
2799
- * const [inProp, setInProp] = useState(false);
2800
- * return (
2801
- * <div>
2802
- * <Transition in={inProp} timeout={500}>
2803
- * {state => (
2804
- * // ...
2805
- * )}
2806
- * </Transition>
2807
- * <button onClick={() => setInProp(true)}>
2808
- * Click to Enter
2809
- * </button>
2810
- * </div>
2811
- * );
2812
- * }
2813
- * ```
2814
- *
2815
- * When the button is clicked the component will shift to the `'entering'` state
2816
- * and stay there for 500ms (the value of `timeout`) before it finally switches
2817
- * to `'entered'`.
2818
- *
2819
- * When `in` is `false` the same thing happens except the state moves from
2820
- * `'exiting'` to `'exited'`.
2821
- */
2822
-
2823
- var Transition = /*#__PURE__*/function (_React$Component) {
2824
- _inheritsLoose(Transition, _React$Component);
2825
-
2826
- function Transition(props, context) {
2827
- var _this;
2828
-
2829
- _this = _React$Component.call(this, props, context) || this;
2830
- var parentGroup = context; // In the context of a TransitionGroup all enters are really appears
2831
-
2832
- var appear = parentGroup && !parentGroup.isMounting ? props.enter : props.appear;
2833
- var initialStatus;
2834
- _this.appearStatus = null;
2835
-
2836
- if (props.in) {
2837
- if (appear) {
2838
- initialStatus = EXITED;
2839
- _this.appearStatus = ENTERING;
2840
- } else {
2841
- initialStatus = ENTERED;
2842
- }
2843
- } else {
2844
- if (props.unmountOnExit || props.mountOnEnter) {
2845
- initialStatus = UNMOUNTED;
2846
- } else {
2847
- initialStatus = EXITED;
2848
- }
2849
- }
2850
-
2851
- _this.state = {
2852
- status: initialStatus
2853
- };
2854
- _this.nextCallback = null;
2855
- return _this;
2856
- }
2857
-
2858
- Transition.getDerivedStateFromProps = function getDerivedStateFromProps(_ref, prevState) {
2859
- var nextIn = _ref.in;
2860
-
2861
- if (nextIn && prevState.status === UNMOUNTED) {
2862
- return {
2863
- status: EXITED
2864
- };
1720
+ var Boolean = function Boolean(_ref) {
1721
+ var column = _ref.column,
1722
+ filter = _ref.filter,
1723
+ handleApplyFilter = _ref.handleApplyFilter,
1724
+ autoFocus = _ref.autoFocus;
1725
+ var key = column.key,
1726
+ _column$defaultType = column.defaultType,
1727
+ defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
1728
+ label = column.label,
1729
+ values = column.values,
1730
+ _column$helpIconProps = column.helpIconProps,
1731
+ helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
1732
+ var options = isNil(values) || isEmpty(values) ? DEFAULT_BOOLEAN_OPTIONS : values;
1733
+ var otherProps = getOtherProps(column);
1734
+ var value = buildDropdownValue({
1735
+ defaultType: defaultType,
1736
+ filter: filter,
1737
+ options: options
1738
+ });
1739
+ var _useTranslation = useTranslation(),
1740
+ t = _useTranslation.t;
1741
+ var handleChange = function handleChange(option) {
1742
+ if (isEmpty(option) || isNil(option)) {
1743
+ handleApplyFilter({
1744
+ _delete: true
1745
+ });
1746
+ return;
2865
1747
  }
2866
-
2867
- return null;
2868
- } // getSnapshotBeforeUpdate(prevProps) {
2869
- // let nextStatus = null
2870
- // if (prevProps !== this.props) {
2871
- // const { status } = this.state
2872
- // if (this.props.in) {
2873
- // if (status !== ENTERING && status !== ENTERED) {
2874
- // nextStatus = ENTERING
2875
- // }
2876
- // } else {
2877
- // if (status === ENTERING || status === ENTERED) {
2878
- // nextStatus = EXITING
2879
- // }
2880
- // }
2881
- // }
2882
- // return { nextStatus }
2883
- // }
2884
- ;
2885
-
2886
- var _proto = Transition.prototype;
2887
-
2888
- _proto.componentDidMount = function componentDidMount() {
2889
- this.updateStatus(true, this.appearStatus);
1748
+ var updatedFilter = buildUpdatedFilter({
1749
+ column: column,
1750
+ defaultType: defaultType,
1751
+ option: option
1752
+ });
1753
+ handleApplyFilter(updatedFilter);
2890
1754
  };
2891
-
2892
- _proto.componentDidUpdate = function componentDidUpdate(prevProps) {
2893
- var nextStatus = null;
2894
-
2895
- if (prevProps !== this.props) {
2896
- var status = this.state.status;
2897
-
2898
- if (this.props.in) {
2899
- if (status !== ENTERING && status !== ENTERED) {
2900
- nextStatus = ENTERING;
2901
- }
2902
- } else {
2903
- if (status === ENTERING || status === ENTERED) {
2904
- nextStatus = EXITING;
2905
- }
2906
- }
1755
+ return /*#__PURE__*/React.createElement("div", {
1756
+ className: "neeto-filters-pane-filter__item-wrapper"
1757
+ }, /*#__PURE__*/React.createElement(Select, _extends({
1758
+ autoFocus: autoFocus,
1759
+ label: label,
1760
+ options: options,
1761
+ value: value,
1762
+ isClearable: true
1763
+ }, isNotEmpty(helpIconProps) && {
1764
+ labelProps: {
1765
+ helpIconProps: buildHelpIconProps(helpIconProps)
2907
1766
  }
1767
+ }, {
1768
+ "data-cy": "neeto-filters-".concat(hyphenate(key), "-filter"),
1769
+ strategy: "fixed",
1770
+ placeholder: t("neetoFilters.messages.selectOption", {
1771
+ resource: label
1772
+ }),
1773
+ onChange: handleChange
1774
+ }, otherProps)));
1775
+ };
1776
+ var Boolean$1 = /*#__PURE__*/React.memo(Boolean);
2908
1777
 
2909
- this.updateStatus(false, nextStatus);
2910
- };
2911
-
2912
- _proto.componentWillUnmount = function componentWillUnmount() {
2913
- this.cancelNextCallback();
1778
+ var Datetime = function Datetime(_ref) {
1779
+ var column = _ref.column,
1780
+ filter = _ref.filter,
1781
+ handleApplyFilter = _ref.handleApplyFilter,
1782
+ autoFocus = _ref.autoFocus;
1783
+ var _useState = useState(initializeDateRule(filter)),
1784
+ _useState2 = _slicedToArray(_useState, 2),
1785
+ selectedRule = _useState2[0],
1786
+ setSelectedRule = _useState2[1];
1787
+ var _useTranslation = useTranslation(),
1788
+ t = _useTranslation.t;
1789
+ var key = column.key,
1790
+ _column$defaultType = column.defaultType,
1791
+ defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
1792
+ label = column.label,
1793
+ _column$helpIconProps = column.helpIconProps,
1794
+ helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
1795
+ var isDatePickerShown = filter && isCustomDateRange(filter.value);
1796
+ var otherProps = getOtherProps(column);
1797
+ var handleChange = function handleChange(option) {
1798
+ if (isEmpty(option) || isNil(option)) {
1799
+ handleApplyFilter({
1800
+ _delete: true
1801
+ });
1802
+ setSelectedRule({});
1803
+ return;
1804
+ }
1805
+ setSelectedRule(option);
1806
+ var updatedFilter = buildUpdatedFilter({
1807
+ column: column,
1808
+ defaultType: defaultType,
1809
+ option: option
1810
+ });
1811
+ handleApplyFilter(updatedFilter);
2914
1812
  };
2915
-
2916
- _proto.getTimeouts = function getTimeouts() {
2917
- var timeout = this.props.timeout;
2918
- var exit, enter, appear;
2919
- exit = enter = appear = timeout;
2920
-
2921
- if (timeout != null && typeof timeout !== 'number') {
2922
- exit = timeout.exit;
2923
- enter = timeout.enter; // TODO: remove fallback for next major
2924
-
2925
- appear = timeout.appear !== undefined ? timeout.appear : enter;
1813
+ var handleDateRangeChange = function handleDateRangeChange(dates) {
1814
+ if (isEmpty(dates) || isNil(dates)) {
1815
+ handleApplyFilter({
1816
+ _delete: true
1817
+ });
1818
+ setSelectedRule({});
1819
+ return;
2926
1820
  }
2927
-
2928
- return {
2929
- exit: exit,
2930
- enter: enter,
2931
- appear: appear
2932
- };
1821
+ var updatedFilter = buildUpdatedFilter({
1822
+ column: column,
1823
+ defaultType: defaultType,
1824
+ option: {
1825
+ value: pluck("$d", buildDateValues(dates, selectedRule)).map(function (date) {
1826
+ return date.toISOString();
1827
+ })
1828
+ }
1829
+ });
1830
+ handleApplyFilter(updatedFilter);
2933
1831
  };
2934
-
2935
- _proto.updateStatus = function updateStatus(mounting, nextStatus) {
2936
- if (mounting === void 0) {
2937
- mounting = false;
1832
+ useEffect(function () {
1833
+ isNil(filter) && setSelectedRule({});
1834
+ }, [filter]);
1835
+ return /*#__PURE__*/React.createElement("div", {
1836
+ className: "neeto-filters-pane-filter__item-wrapper"
1837
+ }, /*#__PURE__*/React.createElement(Select, _extends({
1838
+ autoFocus: autoFocus,
1839
+ label: label,
1840
+ isClearable: true,
1841
+ "data-cy": "neeto-filters-".concat(hyphenate(key), "-filter"),
1842
+ options: DATE_OPTIONS,
1843
+ strategy: "fixed",
1844
+ value: selectedRule,
1845
+ placeholder: t("neetoFilters.messages.selectResource", {
1846
+ resource: label
1847
+ })
1848
+ }, isNotEmpty(helpIconProps) && {
1849
+ labelProps: {
1850
+ helpIconProps: buildHelpIconProps(helpIconProps)
2938
1851
  }
1852
+ }, {
1853
+ onChange: handleChange
1854
+ })), isDatePickerShown && /*#__PURE__*/React.createElement(DatePicker, _extends({
1855
+ "data-cy": "neeto-filters-".concat(hyphenate(key), "-date-range"),
1856
+ getPopupContainer: prop("parentNode"),
1857
+ type: (selectedRule === null || selectedRule === void 0 ? void 0 : selectedRule.value) === "custom-date-range" ? "range" : "date",
1858
+ value: getDateValue(filter === null || filter === void 0 ? void 0 : filter.value, selectedRule),
1859
+ onChange: handleDateRangeChange
1860
+ }, otherProps)));
1861
+ };
1862
+ var Datetime$1 = /*#__PURE__*/React.memo(Datetime);
2939
1863
 
2940
- if (nextStatus !== null) {
2941
- // nextStatus will always be ENTERING or EXITING.
2942
- this.cancelNextCallback();
2943
-
2944
- if (nextStatus === ENTERING) {
2945
- if (this.props.unmountOnExit || this.props.mountOnEnter) {
2946
- var node = this.props.nodeRef ? this.props.nodeRef.current : ReactDOM.findDOMNode(this); // https://github.com/reactjs/react-transition-group/pull/749
2947
- // With unmountOnExit or mountOnEnter, the enter animation should happen at the transition between `exited` and `entering`.
2948
- // To make the animation happen, we have to separate each rendering and avoid being processed as batched.
2949
-
2950
- if (node) forceReflow(node);
2951
- }
2952
-
2953
- this.performEnter(mounting);
2954
- } else {
2955
- this.performExit();
2956
- }
2957
- } else if (this.props.unmountOnExit && this.state.status === EXITED) {
2958
- this.setState({
2959
- status: UNMOUNTED
1864
+ var Dropdown = function Dropdown(_ref) {
1865
+ var column = _ref.column,
1866
+ filter = _ref.filter,
1867
+ handleApplyFilter = _ref.handleApplyFilter,
1868
+ autoFocus = _ref.autoFocus;
1869
+ var key = column.key,
1870
+ label = column.label,
1871
+ values = column.values,
1872
+ defaultValue = column.defaultValue,
1873
+ _column$defaultType = column.defaultType,
1874
+ defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
1875
+ _column$isClearable = column.isClearable,
1876
+ isClearable = _column$isClearable === void 0 ? true : _column$isClearable,
1877
+ _column$helpIconProps = column.helpIconProps,
1878
+ helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
1879
+ var otherProps = getOtherProps(column);
1880
+ var options = buildDropdownOptions({
1881
+ defaultType: defaultType,
1882
+ filter: filter,
1883
+ options: values
1884
+ });
1885
+ var value = buildDropdownValue({
1886
+ defaultType: defaultType,
1887
+ filter: filter,
1888
+ options: options
1889
+ });
1890
+ var _useTranslation = useTranslation(),
1891
+ t = _useTranslation.t;
1892
+ var handleChange = function handleChange(option) {
1893
+ if (isEmpty(option) || isNil(option)) {
1894
+ handleApplyFilter({
1895
+ _delete: true
2960
1896
  });
1897
+ return;
2961
1898
  }
1899
+ var updatedFilter = buildUpdatedFilter({
1900
+ column: column,
1901
+ defaultType: defaultType,
1902
+ option: option
1903
+ });
1904
+ handleApplyFilter(updatedFilter);
2962
1905
  };
1906
+ return /*#__PURE__*/React.createElement("div", {
1907
+ className: "neeto-filters-pane-filter__item-wrapper"
1908
+ }, /*#__PURE__*/React.createElement(Select, _extends({
1909
+ autoFocus: autoFocus,
1910
+ label: label,
1911
+ options: options,
1912
+ value: value,
1913
+ "data-cy": "neeto-filters-".concat(hyphenate(key), "-filter"),
1914
+ isClearable: !defaultValue && isClearable,
1915
+ isMulti: isMulti(defaultType),
1916
+ strategy: "fixed",
1917
+ placeholder: t("neetoFilters.messages.selectResource", {
1918
+ resource: label
1919
+ })
1920
+ }, isNotEmpty(helpIconProps) && {
1921
+ labelProps: {
1922
+ helpIconProps: buildHelpIconProps(helpIconProps)
1923
+ }
1924
+ }, {
1925
+ onChange: handleChange
1926
+ }, otherProps)));
1927
+ };
1928
+ var Dropdown$1 = /*#__PURE__*/React.memo(Dropdown);
2963
1929
 
2964
- _proto.performEnter = function performEnter(mounting) {
2965
- var _this2 = this;
2966
-
2967
- var enter = this.props.enter;
2968
- var appearing = this.context ? this.context.isMounting : mounting;
2969
-
2970
- var _ref2 = this.props.nodeRef ? [appearing] : [ReactDOM.findDOMNode(this), appearing],
2971
- maybeNode = _ref2[0],
2972
- maybeAppearing = _ref2[1];
1930
+ var SingleDatetime = function SingleDatetime(_ref) {
1931
+ var column = _ref.column,
1932
+ filter = _ref.filter,
1933
+ filters = _ref.filters,
1934
+ handleApplyFilter = _ref.handleApplyFilter,
1935
+ autoFocus = _ref.autoFocus;
1936
+ var _useState = useState(function () {
1937
+ return findBy({
1938
+ value: filter === null || filter === void 0 ? void 0 : filter.rule
1939
+ }, SINGLE_DATE_OPTIONS) || SINGLE_DATE_OPTIONS[0];
1940
+ }),
1941
+ _useState2 = _slicedToArray(_useState, 2),
1942
+ selectedRule = _useState2[0],
1943
+ setSelectedRule = _useState2[1];
1944
+ var key = column.key,
1945
+ _column$defaultType = column.defaultType,
1946
+ defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
1947
+ label = column.label,
1948
+ _column$helpIconProps = column.helpIconProps,
1949
+ helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
1950
+ var otherProps = getOtherProps(column);
1951
+ var datePickerType = selectedRule.value === "between" ? "range" : "date";
1952
+ var value = filter === null || filter === void 0 ? void 0 : filter.value;
2973
1953
 
2974
- var timeouts = this.getTimeouts();
2975
- var enterTimeout = appearing ? timeouts.appear : timeouts.enter; // no enter animation skip right to ENTERED
2976
- // if we are mounting and running this it means appear _must_ be set
1954
+ // Reset states when "Clear filters" button is clicked.
1955
+ useEffect(function () {
1956
+ if (!isEmpty(filters)) return;
1957
+ setSelectedRule(SINGLE_DATE_OPTIONS[0]);
1958
+ }, [filters]);
1959
+ var handleRuleChange = function handleRuleChange(ruleOption) {
1960
+ setSelectedRule(ruleOption);
2977
1961
 
2978
- if (!mounting && !enter || config.disabled) {
2979
- this.safeSetState({
2980
- status: ENTERED
2981
- }, function () {
2982
- _this2.props.onEntered(maybeNode);
2983
- });
2984
- return;
1962
+ // Clear value if switched between incompatable types
1963
+ var updateValue = value;
1964
+ if (datePickerType === "range" && ruleOption.value !== "between" || datePickerType === "date" && ruleOption.value === "between") {
1965
+ updateValue = "";
2985
1966
  }
2986
-
2987
- this.props.onEnter(maybeNode, maybeAppearing);
2988
- this.safeSetState({
2989
- status: ENTERING
2990
- }, function () {
2991
- _this2.props.onEntering(maybeNode, maybeAppearing);
2992
-
2993
- _this2.onTransitionEnd(enterTimeout, function () {
2994
- _this2.safeSetState({
2995
- status: ENTERED
2996
- }, function () {
2997
- _this2.props.onEntered(maybeNode, maybeAppearing);
2998
- });
2999
- });
1967
+ var updatedFilter = buildUpdatedFilter({
1968
+ column: column,
1969
+ defaultType: defaultType,
1970
+ option: {},
1971
+ rule: ruleOption.value,
1972
+ value: updateValue
3000
1973
  });
1974
+ handleApplyFilter(updatedFilter);
3001
1975
  };
3002
-
3003
- _proto.performExit = function performExit() {
3004
- var _this3 = this;
3005
-
3006
- var exit = this.props.exit;
3007
- var timeouts = this.getTimeouts();
3008
- var maybeNode = this.props.nodeRef ? undefined : ReactDOM.findDOMNode(this); // no exit animation skip right to EXITED
3009
-
3010
- if (!exit || config.disabled) {
3011
- this.safeSetState({
3012
- status: EXITED
3013
- }, function () {
3014
- _this3.props.onExited(maybeNode);
1976
+ var handleChange = function handleChange(dates) {
1977
+ if (isEmpty(dates) || isNil(dates)) {
1978
+ handleApplyFilter({
1979
+ _delete: true
3015
1980
  });
3016
1981
  return;
3017
1982
  }
3018
-
3019
- this.props.onExit(maybeNode);
3020
- this.safeSetState({
3021
- status: EXITING
3022
- }, function () {
3023
- _this3.props.onExiting(maybeNode);
3024
-
3025
- _this3.onTransitionEnd(timeouts.exit, function () {
3026
- _this3.safeSetState({
3027
- status: EXITED
3028
- }, function () {
3029
- _this3.props.onExited(maybeNode);
3030
- });
3031
- });
1983
+ var value = datePickerType === "range" ? pluck("$d", dates).map(function (date) {
1984
+ return date.toISOString();
1985
+ }) : dates["$d"];
1986
+ var updatedFilter = buildUpdatedFilter({
1987
+ column: column,
1988
+ defaultType: defaultType,
1989
+ option: {},
1990
+ rule: selectedRule.value,
1991
+ value: value
3032
1992
  });
1993
+ handleApplyFilter(updatedFilter);
3033
1994
  };
3034
-
3035
- _proto.cancelNextCallback = function cancelNextCallback() {
3036
- if (this.nextCallback !== null) {
3037
- this.nextCallback.cancel();
3038
- this.nextCallback = null;
3039
- }
3040
- };
3041
-
3042
- _proto.safeSetState = function safeSetState(nextState, callback) {
3043
- // This shouldn't be necessary, but there are weird race conditions with
3044
- // setState callbacks and unmounting in testing, so always make sure that
3045
- // we can cancel any pending setState callbacks after we unmount.
3046
- callback = this.setNextCallback(callback);
3047
- this.setState(nextState, callback);
3048
- };
3049
-
3050
- _proto.setNextCallback = function setNextCallback(callback) {
3051
- var _this4 = this;
3052
-
3053
- var active = true;
3054
-
3055
- this.nextCallback = function (event) {
3056
- if (active) {
3057
- active = false;
3058
- _this4.nextCallback = null;
3059
- callback(event);
3060
- }
3061
- };
3062
-
3063
- this.nextCallback.cancel = function () {
3064
- active = false;
3065
- };
3066
-
3067
- return this.nextCallback;
3068
- };
3069
-
3070
- _proto.onTransitionEnd = function onTransitionEnd(timeout, handler) {
3071
- this.setNextCallback(handler);
3072
- var node = this.props.nodeRef ? this.props.nodeRef.current : ReactDOM.findDOMNode(this);
3073
- var doesNotHaveTimeoutOrListener = timeout == null && !this.props.addEndListener;
3074
-
3075
- if (!node || doesNotHaveTimeoutOrListener) {
3076
- setTimeout(this.nextCallback, 0);
3077
- return;
1995
+ return /*#__PURE__*/React.createElement("div", {
1996
+ className: "neeto-filters-pane-filter__item-wrapper"
1997
+ }, /*#__PURE__*/React.createElement(Select, _extends({
1998
+ label: label,
1999
+ "data-cy": "neeto-filters-".concat(hyphenate(key), "-filter-rule"),
2000
+ defaultValue: SINGLE_DATE_OPTIONS[0],
2001
+ options: SINGLE_DATE_OPTIONS,
2002
+ strategy: "fixed",
2003
+ value: selectedRule
2004
+ }, isNotEmpty(helpIconProps) && {
2005
+ labelProps: {
2006
+ helpIconProps: buildHelpIconProps(helpIconProps)
3078
2007
  }
2008
+ }, {
2009
+ onChange: handleRuleChange
2010
+ })), /*#__PURE__*/React.createElement(DatePicker, _extends({
2011
+ autoFocus: autoFocus,
2012
+ value: value,
2013
+ "data-cy": "neeto-filters-".concat(hyphenate(key), "-filter"),
2014
+ getPopupContainer: prop("parentNode"),
2015
+ type: datePickerType,
2016
+ onChange: handleChange
2017
+ }, otherProps)));
2018
+ };
3079
2019
 
3080
- if (this.props.addEndListener) {
3081
- var _ref3 = this.props.nodeRef ? [this.nextCallback] : [node, this.nextCallback],
3082
- maybeNode = _ref3[0],
3083
- maybeNextCallback = _ref3[1];
3084
-
3085
- this.props.addEndListener(maybeNode, maybeNextCallback);
3086
- }
2020
+ var SingleTime = function SingleTime(_ref) {
2021
+ var column = _ref.column,
2022
+ filter = _ref.filter,
2023
+ filters = _ref.filters,
2024
+ handleApplyFilter = _ref.handleApplyFilter,
2025
+ autoFocus = _ref.autoFocus;
2026
+ var _useState = useState(function () {
2027
+ return findBy({
2028
+ value: filter === null || filter === void 0 ? void 0 : filter.rule
2029
+ }, SINGLE_TIME_OPTIONS) || SINGLE_TIME_OPTIONS[0];
2030
+ }),
2031
+ _useState2 = _slicedToArray(_useState, 2),
2032
+ selectedRule = _useState2[0],
2033
+ setSelectedRule = _useState2[1];
2034
+ var key = column.key,
2035
+ _column$defaultType = column.defaultType,
2036
+ defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
2037
+ label = column.label,
2038
+ _column$helpIconProps = column.helpIconProps,
2039
+ helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
2040
+ var otherProps = getOtherProps(column);
2041
+ var timePickerType = selectedRule.value === "between" ? "range" : "time";
2042
+ var value = filter === null || filter === void 0 ? void 0 : filter.value;
2043
+ useEffect(function () {
2044
+ if (!isEmpty(filters)) return;
2045
+ setSelectedRule(SINGLE_TIME_OPTIONS[0]);
2046
+ }, [filters]);
2047
+ var handleRuleChange = function handleRuleChange(ruleOption) {
2048
+ setSelectedRule(ruleOption);
3087
2049
 
3088
- if (timeout != null) {
3089
- setTimeout(this.nextCallback, timeout);
2050
+ // Clear value if switched between incompatible types
2051
+ var updateValue = value;
2052
+ if (timePickerType === "range" && ruleOption.value !== "between" || timePickerType === "time" && ruleOption.value === "between") {
2053
+ updateValue = "";
3090
2054
  }
2055
+ var updatedFilter = buildUpdatedFilter({
2056
+ column: column,
2057
+ defaultType: defaultType,
2058
+ option: {},
2059
+ rule: ruleOption.value,
2060
+ value: updateValue
2061
+ });
2062
+ handleApplyFilter(updatedFilter);
3091
2063
  };
3092
-
3093
- _proto.render = function render() {
3094
- var status = this.state.status;
3095
-
3096
- if (status === UNMOUNTED) {
3097
- return null;
3098
- }
3099
-
3100
- var _this$props = this.props,
3101
- children = _this$props.children;
3102
- _this$props.in;
3103
- _this$props.mountOnEnter;
3104
- _this$props.unmountOnExit;
3105
- _this$props.appear;
3106
- _this$props.enter;
3107
- _this$props.exit;
3108
- _this$props.timeout;
3109
- _this$props.addEndListener;
3110
- _this$props.onEnter;
3111
- _this$props.onEntering;
3112
- _this$props.onEntered;
3113
- _this$props.onExit;
3114
- _this$props.onExiting;
3115
- _this$props.onExited;
3116
- _this$props.nodeRef;
3117
- var childProps = _objectWithoutPropertiesLoose(_this$props, ["children", "in", "mountOnEnter", "unmountOnExit", "appear", "enter", "exit", "timeout", "addEndListener", "onEnter", "onEntering", "onEntered", "onExit", "onExiting", "onExited", "nodeRef"]);
3118
-
3119
- return (
3120
- /*#__PURE__*/
3121
- // allows for nested Transitions
3122
- React.createElement(TransitionGroupContext.Provider, {
3123
- value: null
3124
- }, typeof children === 'function' ? children(status, childProps) : React.cloneElement(React.Children.only(children), childProps))
3125
- );
2064
+ var handleChange = function handleChange(times) {
2065
+ var value = timePickerType === "range" ? pluck("$d", times).map(function (time) {
2066
+ return time.toISOString();
2067
+ }) : times["$d"].toISOString();
2068
+ var updatedFilter = buildUpdatedFilter({
2069
+ column: column,
2070
+ defaultType: defaultType,
2071
+ option: {},
2072
+ rule: selectedRule.value,
2073
+ value: value
2074
+ });
2075
+ handleApplyFilter(updatedFilter);
3126
2076
  };
3127
-
3128
- return Transition;
3129
- }(React.Component);
3130
-
3131
- Transition.contextType = TransitionGroupContext;
3132
- Transition.propTypes = {}; // Name the function so it is clearer in the documentation
3133
-
3134
- function noop() {}
3135
-
3136
- Transition.defaultProps = {
3137
- in: false,
3138
- mountOnEnter: false,
3139
- unmountOnExit: false,
3140
- appear: false,
3141
- enter: true,
3142
- exit: true,
3143
- onEnter: noop,
3144
- onEntering: noop,
3145
- onEntered: noop,
3146
- onExit: noop,
3147
- onExiting: noop,
3148
- onExited: noop
3149
- };
3150
- Transition.UNMOUNTED = UNMOUNTED;
3151
- Transition.EXITED = EXITED;
3152
- Transition.ENTERING = ENTERING;
3153
- Transition.ENTERED = ENTERED;
3154
- Transition.EXITING = EXITING;
3155
- var Transition$1 = Transition;
3156
-
3157
- var _addClass = function addClass$1(node, classes) {
3158
- return node && classes && classes.split(' ').forEach(function (c) {
3159
- return addClass(node, c);
3160
- });
3161
- };
3162
-
3163
- var removeClass = function removeClass(node, classes) {
3164
- return node && classes && classes.split(' ').forEach(function (c) {
3165
- return removeClass$1(node, c);
3166
- });
3167
- };
3168
- /**
3169
- * A transition component inspired by the excellent
3170
- * [ng-animate](https://docs.angularjs.org/api/ngAnimate) library, you should
3171
- * use it if you're using CSS transitions or animations. It's built upon the
3172
- * [`Transition`](https://reactcommunity.org/react-transition-group/transition)
3173
- * component, so it inherits all of its props.
3174
- *
3175
- * `CSSTransition` applies a pair of class names during the `appear`, `enter`,
3176
- * and `exit` states of the transition. The first class is applied and then a
3177
- * second `*-active` class in order to activate the CSS transition. After the
3178
- * transition, matching `*-done` class names are applied to persist the
3179
- * transition state.
3180
- *
3181
- * ```jsx
3182
- * function App() {
3183
- * const [inProp, setInProp] = useState(false);
3184
- * return (
3185
- * <div>
3186
- * <CSSTransition in={inProp} timeout={200} classNames="my-node">
3187
- * <div>
3188
- * {"I'll receive my-node-* classes"}
3189
- * </div>
3190
- * </CSSTransition>
3191
- * <button type="button" onClick={() => setInProp(true)}>
3192
- * Click to Enter
3193
- * </button>
3194
- * </div>
3195
- * );
3196
- * }
3197
- * ```
3198
- *
3199
- * When the `in` prop is set to `true`, the child component will first receive
3200
- * the class `example-enter`, then the `example-enter-active` will be added in
3201
- * the next tick. `CSSTransition` [forces a
3202
- * reflow](https://github.com/reactjs/react-transition-group/blob/5007303e729a74be66a21c3e2205e4916821524b/src/CSSTransition.js#L208-L215)
3203
- * between before adding the `example-enter-active`. This is an important trick
3204
- * because it allows us to transition between `example-enter` and
3205
- * `example-enter-active` even though they were added immediately one after
3206
- * another. Most notably, this is what makes it possible for us to animate
3207
- * _appearance_.
3208
- *
3209
- * ```css
3210
- * .my-node-enter {
3211
- * opacity: 0;
3212
- * }
3213
- * .my-node-enter-active {
3214
- * opacity: 1;
3215
- * transition: opacity 200ms;
3216
- * }
3217
- * .my-node-exit {
3218
- * opacity: 1;
3219
- * }
3220
- * .my-node-exit-active {
3221
- * opacity: 0;
3222
- * transition: opacity 200ms;
3223
- * }
3224
- * ```
3225
- *
3226
- * `*-active` classes represent which styles you want to animate **to**, so it's
3227
- * important to add `transition` declaration only to them, otherwise transitions
3228
- * might not behave as intended! This might not be obvious when the transitions
3229
- * are symmetrical, i.e. when `*-enter-active` is the same as `*-exit`, like in
3230
- * the example above (minus `transition`), but it becomes apparent in more
3231
- * complex transitions.
3232
- *
3233
- * **Note**: If you're using the
3234
- * [`appear`](http://reactcommunity.org/react-transition-group/transition#Transition-prop-appear)
3235
- * prop, make sure to define styles for `.appear-*` classes as well.
3236
- */
3237
-
3238
-
3239
- var CSSTransition = /*#__PURE__*/function (_React$Component) {
3240
- _inheritsLoose(CSSTransition, _React$Component);
3241
-
3242
- function CSSTransition() {
3243
- var _this;
3244
-
3245
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
3246
- args[_key] = arguments[_key];
3247
- }
3248
-
3249
- _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;
3250
- _this.appliedClasses = {
3251
- appear: {},
3252
- enter: {},
3253
- exit: {}
3254
- };
3255
-
3256
- _this.onEnter = function (maybeNode, maybeAppearing) {
3257
- var _this$resolveArgument = _this.resolveArguments(maybeNode, maybeAppearing),
3258
- node = _this$resolveArgument[0],
3259
- appearing = _this$resolveArgument[1];
3260
-
3261
- _this.removeClasses(node, 'exit');
3262
-
3263
- _this.addClass(node, appearing ? 'appear' : 'enter', 'base');
3264
-
3265
- if (_this.props.onEnter) {
3266
- _this.props.onEnter(maybeNode, maybeAppearing);
3267
- }
3268
- };
3269
-
3270
- _this.onEntering = function (maybeNode, maybeAppearing) {
3271
- var _this$resolveArgument2 = _this.resolveArguments(maybeNode, maybeAppearing),
3272
- node = _this$resolveArgument2[0],
3273
- appearing = _this$resolveArgument2[1];
3274
-
3275
- var type = appearing ? 'appear' : 'enter';
3276
-
3277
- _this.addClass(node, type, 'active');
3278
-
3279
- if (_this.props.onEntering) {
3280
- _this.props.onEntering(maybeNode, maybeAppearing);
3281
- }
3282
- };
3283
-
3284
- _this.onEntered = function (maybeNode, maybeAppearing) {
3285
- var _this$resolveArgument3 = _this.resolveArguments(maybeNode, maybeAppearing),
3286
- node = _this$resolveArgument3[0],
3287
- appearing = _this$resolveArgument3[1];
3288
-
3289
- var type = appearing ? 'appear' : 'enter';
3290
-
3291
- _this.removeClasses(node, type);
3292
-
3293
- _this.addClass(node, type, 'done');
3294
-
3295
- if (_this.props.onEntered) {
3296
- _this.props.onEntered(maybeNode, maybeAppearing);
3297
- }
3298
- };
3299
-
3300
- _this.onExit = function (maybeNode) {
3301
- var _this$resolveArgument4 = _this.resolveArguments(maybeNode),
3302
- node = _this$resolveArgument4[0];
3303
-
3304
- _this.removeClasses(node, 'appear');
3305
-
3306
- _this.removeClasses(node, 'enter');
3307
-
3308
- _this.addClass(node, 'exit', 'base');
3309
-
3310
- if (_this.props.onExit) {
3311
- _this.props.onExit(maybeNode);
3312
- }
3313
- };
3314
-
3315
- _this.onExiting = function (maybeNode) {
3316
- var _this$resolveArgument5 = _this.resolveArguments(maybeNode),
3317
- node = _this$resolveArgument5[0];
3318
-
3319
- _this.addClass(node, 'exit', 'active');
3320
-
3321
- if (_this.props.onExiting) {
3322
- _this.props.onExiting(maybeNode);
3323
- }
3324
- };
3325
-
3326
- _this.onExited = function (maybeNode) {
3327
- var _this$resolveArgument6 = _this.resolveArguments(maybeNode),
3328
- node = _this$resolveArgument6[0];
3329
-
3330
- _this.removeClasses(node, 'exit');
3331
-
3332
- _this.addClass(node, 'exit', 'done');
3333
-
3334
- if (_this.props.onExited) {
3335
- _this.props.onExited(maybeNode);
3336
- }
3337
- };
3338
-
3339
- _this.resolveArguments = function (maybeNode, maybeAppearing) {
3340
- return _this.props.nodeRef ? [_this.props.nodeRef.current, maybeNode] // here `maybeNode` is actually `appearing`
3341
- : [maybeNode, maybeAppearing];
3342
- };
3343
-
3344
- _this.getClassNames = function (type) {
3345
- var classNames = _this.props.classNames;
3346
- var isStringClassNames = typeof classNames === 'string';
3347
- var prefix = isStringClassNames && classNames ? classNames + "-" : '';
3348
- var baseClassName = isStringClassNames ? "" + prefix + type : classNames[type];
3349
- var activeClassName = isStringClassNames ? baseClassName + "-active" : classNames[type + "Active"];
3350
- var doneClassName = isStringClassNames ? baseClassName + "-done" : classNames[type + "Done"];
3351
- return {
3352
- baseClassName: baseClassName,
3353
- activeClassName: activeClassName,
3354
- doneClassName: doneClassName
3355
- };
3356
- };
3357
-
3358
- return _this;
3359
- }
3360
-
3361
- var _proto = CSSTransition.prototype;
3362
-
3363
- _proto.addClass = function addClass(node, type, phase) {
3364
- var className = this.getClassNames(type)[phase + "ClassName"];
3365
-
3366
- var _this$getClassNames = this.getClassNames('enter'),
3367
- doneClassName = _this$getClassNames.doneClassName;
3368
-
3369
- if (type === 'appear' && phase === 'done' && doneClassName) {
3370
- className += " " + doneClassName;
3371
- } // This is to force a repaint,
3372
- // which is necessary in order to transition styles when adding a class name.
3373
-
3374
-
3375
- if (phase === 'active') {
3376
- if (node) forceReflow(node);
2077
+ return /*#__PURE__*/React.createElement("div", {
2078
+ className: "neeto-filters-pane-filter__item-wrapper"
2079
+ }, /*#__PURE__*/React.createElement(Select, _extends({
2080
+ label: label,
2081
+ defaultValue: SINGLE_TIME_OPTIONS[0],
2082
+ options: SINGLE_TIME_OPTIONS,
2083
+ strategy: "fixed",
2084
+ value: selectedRule
2085
+ }, isNotEmpty(helpIconProps) && {
2086
+ labelProps: {
2087
+ helpIconProps: buildHelpIconProps(helpIconProps)
3377
2088
  }
2089
+ }, {
2090
+ onChange: handleRuleChange
2091
+ })), /*#__PURE__*/React.createElement(TimePicker, _extends({
2092
+ autoFocus: autoFocus,
2093
+ value: value,
2094
+ use12Hours: true,
2095
+ className: "w-full",
2096
+ "data-cy": "neeto-filters-".concat(hyphenate(key), "-filter"),
2097
+ format: "h:mm A",
2098
+ getPopupContainer: prop("parentNode"),
2099
+ type: timePickerType,
2100
+ onChange: handleChange
2101
+ }, otherProps)));
2102
+ };
3378
2103
 
3379
- if (className) {
3380
- this.appliedClasses[type][phase] = className;
3381
-
3382
- _addClass(node, className);
3383
- }
2104
+ var Text = function Text(_ref) {
2105
+ var column = _ref.column,
2106
+ filter = _ref.filter,
2107
+ filters = _ref.filters,
2108
+ handleApplyFilter = _ref.handleApplyFilter,
2109
+ autoFocus = _ref.autoFocus,
2110
+ onClose = _ref.onClose;
2111
+ var key = column.key,
2112
+ _column$defaultType = column.defaultType,
2113
+ defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
2114
+ label = column.label,
2115
+ _column$showRuleSelec = column.showRuleSelector,
2116
+ showRuleSelector = _column$showRuleSelec === void 0 ? false : _column$showRuleSelec,
2117
+ _column$helpIconProps = column.helpIconProps,
2118
+ helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
2119
+ var otherProps = getOtherProps(column);
2120
+ var ruleOptions = buildRuleOptions({
2121
+ defaultType: defaultType
2122
+ });
2123
+ var inputType = defaultType === "text" || defaultType === "custom.text" ? "text" : "number";
2124
+ var _useState = useState(filter === null || filter === void 0 ? void 0 : filter.value),
2125
+ _useState2 = _slicedToArray(_useState, 2),
2126
+ inputValue = _useState2[0],
2127
+ setInputValue = _useState2[1];
2128
+ var _useState3 = useState(function () {
2129
+ return findBy({
2130
+ value: filter === null || filter === void 0 ? void 0 : filter.rule
2131
+ }, ruleOptions) || ruleOptions[0];
2132
+ }),
2133
+ _useState4 = _slicedToArray(_useState3, 2),
2134
+ selectedRule = _useState4[0],
2135
+ setSelectedRule = _useState4[1];
2136
+ var debouncedInputValue = useDebounce(inputValue);
2137
+ var _useTranslation = useTranslation(),
2138
+ t = _useTranslation.t;
2139
+ var handleUpdateAndApplyFilter = function handleUpdateAndApplyFilter() {
2140
+ var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : debouncedInputValue;
2141
+ var rule = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : selectedRule;
2142
+ if (equals(filter === null || filter === void 0 ? void 0 : filter.value, value) && equals(selectedRule, rule)) return;
2143
+ var updatedFilter = buildUpdatedFilter({
2144
+ column: column,
2145
+ defaultType: defaultType,
2146
+ option: {},
2147
+ rule: rule.value,
2148
+ value: value.trim()
2149
+ });
2150
+ handleApplyFilter(updatedFilter);
2151
+ };
2152
+ var handleKeydown = function handleKeydown(e) {
2153
+ if (!(e.key === "Enter")) return;
2154
+ handleUpdateAndApplyFilter(inputValue);
2155
+ onClose();
2156
+ };
2157
+ var handleRuleChange = function handleRuleChange(ruleOption) {
2158
+ setSelectedRule(ruleOption);
2159
+ if (!debouncedInputValue) return;
2160
+ handleUpdateAndApplyFilter(debouncedInputValue, ruleOption);
3384
2161
  };
3385
2162
 
3386
- _proto.removeClasses = function removeClasses(node, type) {
3387
- var _this$appliedClasses$ = this.appliedClasses[type],
3388
- baseClassName = _this$appliedClasses$.base,
3389
- activeClassName = _this$appliedClasses$.active,
3390
- doneClassName = _this$appliedClasses$.done;
3391
- this.appliedClasses[type] = {};
3392
-
3393
- if (baseClassName) {
3394
- removeClass(node, baseClassName);
2163
+ // Reset states when "Clear filters" button is clicked.
2164
+ useEffect(function () {
2165
+ (isEmpty(filters) || isNil(filter)) && setInputValue("");
2166
+ }, [filter]);
2167
+ useEffect(function () {
2168
+ if (!debouncedInputValue) {
2169
+ !isUndefinedOrEmpty(filter) && handleApplyFilter({
2170
+ _delete: true
2171
+ });
2172
+ return;
3395
2173
  }
3396
-
3397
- if (activeClassName) {
3398
- removeClass(node, activeClassName);
2174
+ handleUpdateAndApplyFilter();
2175
+ }, [debouncedInputValue]);
2176
+ return /*#__PURE__*/React.createElement("div", {
2177
+ className: "neeto-filters-pane-filter__item-wrapper"
2178
+ }, showRuleSelector && /*#__PURE__*/React.createElement(Select, _extends({
2179
+ label: label,
2180
+ "data-cy": "neeto-filters-".concat(hyphenate(key), "-filter-rule"),
2181
+ defaultValue: ruleOptions[0],
2182
+ options: ruleOptions,
2183
+ strategy: "fixed",
2184
+ value: selectedRule,
2185
+ onChange: handleRuleChange
2186
+ }, isNotEmpty(helpIconProps) && {
2187
+ labelProps: {
2188
+ helpIconProps: buildHelpIconProps(helpIconProps)
2189
+ }
2190
+ })), /*#__PURE__*/React.createElement(Input$1, _extends({
2191
+ autoFocus: autoFocus,
2192
+ "data-cy": "neeto-filters-".concat(hyphenate(key), "-filter"),
2193
+ label: !showRuleSelector && label,
2194
+ type: inputType,
2195
+ value: inputValue
2196
+ }, isNotEmpty(helpIconProps) && {
2197
+ labelProps: {
2198
+ helpIconProps: buildHelpIconProps(helpIconProps)
3399
2199
  }
2200
+ }, {
2201
+ placeholder: t("neetoFilters.messages.enterResource", {
2202
+ resource: label
2203
+ }),
2204
+ onChange: function onChange(event) {
2205
+ return setInputValue(event.target.value);
2206
+ },
2207
+ onKeyDown: handleKeydown
2208
+ }, otherProps)));
2209
+ };
3400
2210
 
3401
- if (doneClassName) {
3402
- removeClass(node, doneClassName);
2211
+ var Time = function Time(_ref) {
2212
+ var column = _ref.column,
2213
+ filter = _ref.filter,
2214
+ handleApplyFilter = _ref.handleApplyFilter,
2215
+ autoFocus = _ref.autoFocus;
2216
+ var key = column.key,
2217
+ _column$defaultType = column.defaultType,
2218
+ defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
2219
+ label = column.label,
2220
+ _column$helpIconProps = column.helpIconProps,
2221
+ helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
2222
+ var otherProps = getOtherProps(column);
2223
+ var value = buildSingleTimeValue(filter);
2224
+ var isCustomTimeRangeShown = filter && isCustomTimeRange(filter.value);
2225
+ var _useTranslation = useTranslation(),
2226
+ t = _useTranslation.t;
2227
+ var handleChange = function handleChange(option) {
2228
+ if (isEmpty(option) || isNil(option)) {
2229
+ handleApplyFilter({
2230
+ _delete: true
2231
+ });
2232
+ return;
3403
2233
  }
2234
+ var updatedFilter = buildUpdatedFilter({
2235
+ column: column,
2236
+ defaultType: defaultType,
2237
+ option: option
2238
+ });
2239
+ handleApplyFilter(updatedFilter);
3404
2240
  };
3405
-
3406
- _proto.render = function render() {
3407
- var _this$props = this.props;
3408
- _this$props.classNames;
3409
- var props = _objectWithoutPropertiesLoose(_this$props, ["classNames"]);
3410
-
3411
- return /*#__PURE__*/React.createElement(Transition$1, _extends({}, props, {
3412
- onEnter: this.onEnter,
3413
- onEntered: this.onEntered,
3414
- onEntering: this.onEntering,
3415
- onExit: this.onExit,
3416
- onExiting: this.onExiting,
3417
- onExited: this.onExited
3418
- }));
2241
+ var handleTimeRangeChange = function handleTimeRangeChange(times) {
2242
+ var updatedFilter = buildUpdatedFilter({
2243
+ column: column,
2244
+ defaultType: defaultType,
2245
+ option: {
2246
+ value: pluck("$d", times).map(function (time) {
2247
+ return time.toISOString();
2248
+ })
2249
+ }
2250
+ });
2251
+ handleApplyFilter(updatedFilter);
3419
2252
  };
3420
-
3421
- return CSSTransition;
3422
- }(React.Component);
3423
-
3424
- CSSTransition.defaultProps = {
3425
- classNames: ''
3426
- };
3427
- CSSTransition.propTypes = {};
3428
- var CSSTransition$1 = CSSTransition;
3429
-
3430
- var Body = function Body(_ref) {
3431
- var children = _ref.children,
3432
- _ref$className = _ref.className,
3433
- className = _ref$className === void 0 ? "" : _ref$className,
3434
- _ref$hasFooter = _ref.hasFooter,
3435
- hasFooter = _ref$hasFooter === void 0 ? true : _ref$hasFooter;
3436
- return /*#__PURE__*/React.createElement("div", {
3437
- className: classnames("neeto-filters-slider__body neeto-ui-flex neeto-ui-flex-col neeto-ui-items-start neeto-ui-justify-start", _defineProperty({
3438
- "neeto-filters-slider__body--has-footer": hasFooter
3439
- }, className, className))
3440
- }, children);
3441
- };
3442
-
3443
- var SIZES = {
3444
- xsmall: "xsmall",
3445
- small: "small",
3446
- large: "large"
3447
- };
3448
-
3449
- var Footer = function Footer(_ref) {
3450
- var children = _ref.children,
3451
- _ref$className = _ref.className,
3452
- className = _ref$className === void 0 ? "" : _ref$className;
3453
2253
  return /*#__PURE__*/React.createElement("div", {
3454
- className: classnames("neeto-filters-slider__footer neeto-ui-shadow-m neeto-ui-flex neeto-ui-items-center", className)
3455
- }, children);
3456
- };
3457
-
3458
- var Header = function Header(_ref) {
3459
- var _ref$children = _ref.children,
3460
- children = _ref$children === void 0 ? "" : _ref$children,
3461
- className = _ref.className;
3462
- return /*#__PURE__*/React.createElement("div", {
3463
- className: classnames("neeto-filters-slider__header", className)
3464
- }, children);
3465
- };
3466
-
3467
- var _excluded$1 = ["size", "isOpen", "onClose", "className", "children"];
3468
- var Slider = function Slider(_ref) {
3469
- var _ref$size = _ref.size,
3470
- size = _ref$size === void 0 ? SIZES.xsmall : _ref$size,
3471
- isOpen = _ref.isOpen,
3472
- onClose = _ref.onClose,
3473
- _ref$className = _ref.className,
3474
- className = _ref$className === void 0 ? "" : _ref$className,
3475
- children = _ref.children,
3476
- otherProps = _objectWithoutProperties(_ref, _excluded$1);
3477
- useHotkeys(SHORTCUTS.closePane.sequence, onClose, {
3478
- mode: "global"
3479
- });
3480
- return /*#__PURE__*/React.createElement(Portal, {
3481
- rootId: "neeto-filters-portal"
3482
- }, /*#__PURE__*/React.createElement(CSSTransition$1, {
3483
- unmountOnExit: true,
3484
- appear: isOpen,
3485
- classNames: "neeto-filters-slider",
3486
- "in": isOpen,
3487
- timeout: 300
3488
- }, /*#__PURE__*/React.createElement("div", {
3489
- className: "neeto-filters-slider__pane"
3490
- }, /*#__PURE__*/React.createElement("div", _extends$1({
3491
- className: classnames("neeto-filters-slider__wrapper", _defineProperty({
3492
- "neeto-filters-slider__wrapper--xsmall": size === SIZES.xsmall,
3493
- "neeto-filters-slider__wrapper--small": size === SIZES.small,
3494
- "neeto-filters-slider__wrapper--large": size === SIZES.large
3495
- }, className, className))
3496
- }, otherProps), /*#__PURE__*/React.createElement(Button, {
3497
- "aria-label": "Close",
3498
- className: "neeto-filters-slider__close",
3499
- "data-cy": "neeto-filters-close-button",
3500
- "data-testid": "close-button",
3501
- icon: Close,
3502
- size: "small",
3503
- style: "text",
3504
- onClick: onClose
3505
- }), children))));
2254
+ className: "neeto-filters-pane-filter__item-wrapper"
2255
+ }, /*#__PURE__*/React.createElement(Select, _extends({
2256
+ autoFocus: autoFocus,
2257
+ label: label,
2258
+ value: value,
2259
+ isClearable: true,
2260
+ "data-cy": "neeto-filters-".concat(hyphenate(key), "-filter"),
2261
+ options: TIME_OPTIONS,
2262
+ strategy: "fixed",
2263
+ placeholder: t("neetoFilters.messages.selectResource", {
2264
+ resource: label
2265
+ })
2266
+ }, isNotEmpty(helpIconProps) && {
2267
+ labelProps: {
2268
+ helpIconProps: buildHelpIconProps(helpIconProps)
2269
+ }
2270
+ }, {
2271
+ onChange: handleChange
2272
+ })), isCustomTimeRangeShown && /*#__PURE__*/React.createElement(TimePicker, _extends({
2273
+ use12Hours: true,
2274
+ "data-cy": "neeto-filters-".concat(hyphenate(key), "-date-range"),
2275
+ format: "h:mm A",
2276
+ getPopupContainer: prop("parentNode"),
2277
+ type: "range",
2278
+ value: filter.value,
2279
+ onChange: handleTimeRangeChange
2280
+ }, otherProps)));
3506
2281
  };
3507
- Slider.Header = Header;
3508
- Slider.Body = Body;
3509
- Slider.Footer = Footer;
2282
+ var Time$1 = /*#__PURE__*/React.memo(Time);
3510
2283
 
3511
- var useFilters = function useFilters(_ref) {
3512
- var onFiltersChange = _ref.onFiltersChange,
3513
- columns = _ref.columns,
3514
- keywordFilter = _ref.keywordFilter,
3515
- onSelectorsChange = _ref.onSelectorsChange;
3516
- var _useTransition = useTransition(),
3517
- _useTransition2 = _slicedToArray(_useTransition, 2);
3518
- _useTransition2[0];
3519
- var startTransition = _useTransition2[1];
3520
- var initialRender = useRef(true);
3521
- var prevFilters = useRef([]);
3522
- var location = useLocation();
3523
- var filters = buildFiltersFromSearchParams(columns, false);
3524
- var history = useHistory$1();
3525
- var defaultValuesOfColumns = JSON.stringify(pluck("defaultValue", columns));
3526
- var handlePrecenseOfDefaultFilters = function handlePrecenseOfDefaultFilters(defaultFilters) {
3527
- var params = buildUrlFromFilters({
3528
- columns: columns,
3529
- filters: isKeywordFilterPresent(keywordFilter) && isNotEmpty(getSearchTermFromUrl()) ? [].concat(_toConsumableArray(defaultFilters), [keywordFilter]) : defaultFilters
2284
+ var Item = function Item(_ref) {
2285
+ var column = _ref.column,
2286
+ filters = _ref.filters,
2287
+ onChange = _ref.onChange,
2288
+ autoFocus = _ref.autoFocus,
2289
+ onClose = _ref.onClose;
2290
+ var key = column.key,
2291
+ _column$defaultType = column.defaultType,
2292
+ defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType;
2293
+ var filter = useMemo(function () {
2294
+ return findBy({
2295
+ key: key
2296
+ }, filters);
2297
+ }, [filters, key]);
2298
+ var handleApplyFilter = function handleApplyFilter(updatedFilter) {
2299
+ if (updatedFilter._delete) onChange(removeBy({
2300
+ key: key
2301
+ }, filters));else if (!filter) onChange(append(updatedFilter, filters));else onChange(replaceBy({
2302
+ key: key
2303
+ }, updatedFilter, filters));
2304
+ };
2305
+ if (isText(defaultType) || isDigit(defaultType)) {
2306
+ return /*#__PURE__*/React.createElement(Text, {
2307
+ autoFocus: autoFocus,
2308
+ column: column,
2309
+ filter: filter,
2310
+ filters: filters,
2311
+ handleApplyFilter: handleApplyFilter,
2312
+ onClose: onClose
2313
+ });
2314
+ }
2315
+ if (isDate(defaultType)) {
2316
+ return /*#__PURE__*/React.createElement(Datetime$1, {
2317
+ autoFocus: autoFocus,
2318
+ column: column,
2319
+ filter: filter,
2320
+ handleApplyFilter: handleApplyFilter
2321
+ });
2322
+ }
2323
+ if (isTime(defaultType)) {
2324
+ return /*#__PURE__*/React.createElement(Time$1, {
2325
+ autoFocus: autoFocus,
2326
+ column: column,
2327
+ filter: filter,
2328
+ handleApplyFilter: handleApplyFilter
2329
+ });
2330
+ }
2331
+ if (isSingleDate(defaultType)) {
2332
+ return /*#__PURE__*/React.createElement(SingleDatetime, {
2333
+ autoFocus: autoFocus,
2334
+ column: column,
2335
+ filter: filter,
2336
+ filters: filters,
2337
+ handleApplyFilter: handleApplyFilter
3530
2338
  });
3531
- history.replace({
3532
- search: params
2339
+ }
2340
+ if (isSingleTime(defaultType)) {
2341
+ return /*#__PURE__*/React.createElement(SingleTime, {
2342
+ autoFocus: autoFocus,
2343
+ column: column,
2344
+ filter: filter,
2345
+ filters: filters,
2346
+ handleApplyFilter: handleApplyFilter
3533
2347
  });
3534
- };
3535
- var handleFiltersChange = function handleFiltersChange(filtersPayload) {
3536
- startTransition(function () {
3537
- onFiltersChange(buildFiltersPayload(filtersPayload.filter(function (filter) {
3538
- return !isNil(filter.node);
3539
- })));
2348
+ }
2349
+ if (isBoolean(defaultType) || isCheckbox(defaultType)) {
2350
+ return /*#__PURE__*/React.createElement(Boolean$1, {
2351
+ autoFocus: autoFocus,
2352
+ column: column,
2353
+ filter: filter,
2354
+ handleApplyFilter: handleApplyFilter
3540
2355
  });
3541
- };
3542
-
3543
- //This function sends the updated filters to host via callbacks.
3544
- var sendUpdatedFilters = function sendUpdatedFilters() {
3545
- if (compareFilters(append(keywordFilter, filters), prevFilters.current)) {
3546
- return;
3547
- }
3548
- var newFilters = buildFiltersFromSearchParams(columns);
3549
- var filtersPayload = isKeywordFilterPresent(keywordFilter) && isNotEmpty(getSearchTermFromUrl()) ? append(keywordFilter, newFilters) : newFilters;
3550
- handleFiltersChange(filtersPayload);
3551
- onSelectorsChange(buildSelectorsFromURL(columns));
3552
- };
3553
- var handleChangesInURL = function handleChangesInURL() {
3554
- var defaultFilters = buildDefaultFilters(columns, filters);
3555
- var searchParams = getSnakeCasedQueryParams();
3556
- var keys = pluck("key", append(keywordFilter, columns));
3557
- if (keys.every(function (key) {
3558
- return isNil(searchParams[key]);
3559
- }) && !isEmpty(defaultFilters)) {
3560
- history.replace({
3561
- search: buildUrlFromFilters({
3562
- columns: columns,
3563
- filters: concat(defaultFilters, filters)
3564
- })
3565
- });
3566
- filters = buildFiltersFromSearchParams(columns, false);
3567
- }
3568
- };
3569
- useEffect(function () {
3570
- if (initialRender.current) {
3571
- initialRender.current = false;
3572
- var keywordValue = getSearchTermFromUrl();
3573
- var defaultFilters = buildDefaultFilters(columns, filters);
3574
- isNotEmpty(defaultFilters) && handlePrecenseOfDefaultFilters(defaultFilters);
3575
- prevFilters.current = append(mergeRight(keywordFilter, {
3576
- value: keywordValue
3577
- }), filters);
3578
- } else {
3579
- handleChangesInURL();
3580
- sendUpdatedFilters();
3581
- prevFilters.current = append(keywordFilter, filters);
3582
- }
3583
- }, [location.search, defaultValuesOfColumns]);
3584
- return filters;
2356
+ }
2357
+ return /*#__PURE__*/React.createElement(Dropdown$1, {
2358
+ autoFocus: autoFocus,
2359
+ column: column,
2360
+ filter: filter,
2361
+ handleApplyFilter: handleApplyFilter
2362
+ });
3585
2363
  };
3586
2364
 
3587
- var _excluded = ["size", "isOpen", "onClose", "columns", "onChange", "isSearchable", "keyword", "onSelectorsChange", "childrenKeys", "children"];
2365
+ var _excluded = ["isOpen", "onClose", "columns", "onChange", "isSearchable", "keyword", "onSelectorsChange", "childrenKeys", "children", "className"];
3588
2366
  function ownKeys$1(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; }
3589
2367
  function _objectSpread$1(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
3590
2368
  var Pane = function Pane(_ref) {
3591
- var size = _ref.size,
3592
- isOpen = _ref.isOpen,
2369
+ var isOpen = _ref.isOpen,
3593
2370
  onClose = _ref.onClose,
3594
2371
  columns = _ref.columns,
3595
2372
  onChange = _ref.onChange,
@@ -3599,6 +2376,7 @@ var Pane = function Pane(_ref) {
3599
2376
  _ref$childrenKeys = _ref.childrenKeys,
3600
2377
  childrenKeys = _ref$childrenKeys === void 0 ? [] : _ref$childrenKeys,
3601
2378
  children = _ref.children,
2379
+ className = _ref.className,
3602
2380
  otherProps = _objectWithoutProperties(_ref, _excluded);
3603
2381
  var searchParams = useQueryParams({
3604
2382
  toCamelCase: false
@@ -3607,7 +2385,7 @@ var Pane = function Pane(_ref) {
3607
2385
  _useState2 = _slicedToArray(_useState, 2),
3608
2386
  searchTerm = _useState2[0],
3609
2387
  setSearchTerm = _useState2[1];
3610
- var history = useHistory$1();
2388
+ var history = useHistory();
3611
2389
  var _useTranslation = useTranslation(),
3612
2390
  t = _useTranslation.t;
3613
2391
  columns = useMemo(function () {
@@ -3675,19 +2453,17 @@ var Pane = function Pane(_ref) {
3675
2453
  }) && !childrenKeys.some(function (key) {
3676
2454
  return searchParams[key];
3677
2455
  });
3678
- return /*#__PURE__*/React.createElement(Portal, {
3679
- rootId: "neeto-filters-portal"
3680
- }, /*#__PURE__*/React.createElement(Slider, _extends$1({
2456
+ return /*#__PURE__*/React.createElement(Pane$1, _extends({
3681
2457
  isOpen: isOpen,
3682
- size: size,
2458
+ backdropClassName: "neeto-filters-pane-backdrop",
2459
+ className: classnames("neeto-filters-pane-filter", _defineProperty({}, className, className)),
3683
2460
  onClose: handleClose
3684
- }, otherProps), /*#__PURE__*/React.createElement(Slider.Header, {
3685
- className: "neeto-filters-pane-filter__header",
2461
+ }, otherProps), /*#__PURE__*/React.createElement(Pane$1.Header, {
3686
2462
  "data-cy": "neeto-filters-pane-header"
3687
2463
  }, /*#__PURE__*/React.createElement(Typography, {
3688
2464
  style: "h2",
3689
2465
  weight: "semibold"
3690
- }, t("neetoFilters.common.filters"))), /*#__PURE__*/React.createElement(Slider.Body, {
2466
+ }, t("neetoFilters.common.filters"))), /*#__PURE__*/React.createElement(Pane$1.Body, {
3691
2467
  className: "neeto-filters-pane-filter__body neeto-ui-pt-2"
3692
2468
  }, isSearchable && /*#__PURE__*/React.createElement(Search, {
3693
2469
  "data-cy": "neeto-filters-column-search",
@@ -3734,9 +2510,7 @@ var Pane = function Pane(_ref) {
3734
2510
  style: "body2"
3735
2511
  }, t("neetoFilters.messages.noResourcesFound", {
3736
2512
  resources: t("neetoFilters.common.columns")
3737
- })), children), /*#__PURE__*/React.createElement(Slider.Footer, {
3738
- className: "neeto-filters-pane-filter__footer"
3739
- }, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Button, {
2513
+ })), children), /*#__PURE__*/React.createElement(Pane$1.Footer, null, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Button, {
3740
2514
  "data-cy": "neeto-filters-done-btn",
3741
2515
  label: t("neetoFilters.common.done"),
3742
2516
  onClick: handleClearTermAndClose
@@ -3746,19 +2520,18 @@ var Pane = function Pane(_ref) {
3746
2520
  label: t("neetoFilters.common.clearFilters"),
3747
2521
  style: "text",
3748
2522
  onClick: handleClearAll
3749
- })))));
2523
+ }))));
3750
2524
  };
3751
2525
 
3752
2526
  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}}
3753
2527
 
3754
- 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-slider__pane{border-radius:12px 0 0 12px;position:fixed;right:0;top:0;z-index:99998}.neeto-filters-slider__wrapper{background-color:rgb(var(--neeto-ui-white));box-shadow:var(--neeto-ui-shadow-m);height:100vh;max-width:100%;transform:translateX(100%);transition:all .3s}.neeto-filters-slider__wrapper--xsmall{width:360px}.neeto-filters-slider__wrapper--small{width:480px}.neeto-filters-slider__wrapper--large{width:50vw}@media screen and (max-width:767px){.neeto-filters-slider__wrapper{width:100vw}}.neeto-filters-slider__close{position:absolute!important;right:24px;top:24px}.neeto-filters-slider__header{padding:24px 60px 24px 24px;width:100%}.neeto-filters-slider__body{font-size:var(--neeto-ui-text-sm);height:calc(100vh - var(--neeto-ui-pane-header-height));overflow-y:auto;padding:0 24px;width:100%}.neeto-filters-slider__body.neeto-filters-slider__body--has-footer{height:calc(100vh - var(--neeto-ui-pane-header-height) - var(--neeto-ui-pane-footer-height))}.neeto-filters-slider__footer{background-color:rgb(var(--neeto-ui-white));min-height:var(--neeto-ui-pane-footer-height);padding:24px;width:100%}.neeto-filters-slider__footer.neeto-filters-slider__footer__absolute{bottom:0;left:0;position:absolute;width:100%}.neeto-filters-slider-enter .neeto-filters-slider__wrapper{transform:translateX(100%)}.neeto-filters-slider-enter-active .neeto-filters-slider__wrapper,.neeto-filters-slider-enter-done .neeto-filters-slider__wrapper{transform:translateX(0)}.neeto-filters-slider-exit .neeto-filters-slider__wrapper,.neeto-filters-slider-exit-active .neeto-filters-slider__wrapper{transform:translateX(100%)}.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))}.neeto-filters-pane-filter__footer{justify-content:space-between}.neeto-filters-pane-filter__footer div{display:flex;gap:8px}.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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFwcC9qYXZhc2NyaXB0L3NyYy9zdHlsZXNoZWV0cy9jb21wb25lbnRzL19iYXIuc2NzcyIsImFwcC9qYXZhc2NyaXB0L3NyYy9zdHlsZXNoZWV0cy9pbmRleC5zY3NzIiwiYXBwL2phdmFzY3JpcHQvc3JjL3N0eWxlc2hlZXRzL2NvbXBvbmVudHMvX3NsaWRlci5zY3NzIiwiYXBwL2phdmFzY3JpcHQvc3JjL3N0eWxlc2hlZXRzL2Fic3RyYWN0cy9fbWl4aW5zLnNjc3MiLCJhcHAvamF2YXNjcmlwdC9zcmMvc3R5bGVzaGVldHMvY29tcG9uZW50cy9fZmlsdGVycy5zY3NzIiwiYXBwL2phdmFzY3JpcHQvc3JjL3N0eWxlc2hlZXRzL2NvbXBvbmVudHMvX3NlZ21lbnRzLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUJBR0Usa0JBQUEsQ0FGQSxZQUFBLENBQ0EsY0NFRixDRENFLDBCQUtFLHFDQUFBLENBSEEsWUFBQSxDQUVBLE9BQUEsQ0FHQSxZQUFBLENBQ0EsZUFBQSxDQUVBLGVBQUEsQ0FUQSxlQUFBLENBRUEsaUJBQUEsQ0FHQSxxQ0FBQSxDQUdBLGtCQ0VKLENEQ0ksd0NBQ0UsbUNDQ04sQ0RFSSxnQ0FRRSxnSEFBQSxDQUZBLG1DQUFBLENBREEsU0FBQSxDQURBLFdBQUEsQ0FIQSxpQkFBQSxDQUVBLE9BQUEsQ0FEQSxLQUFBLENBS0EscUNDQ04sQ0RPSSxpRUFFRSw4Q0FBQSxDQUNBLGNDTk4sQ0RRTSxpSUFHRSxxQ0FBQSxDQURBLGdDQUFBLENBREEsU0NKUixDRFVJLGdDQUVFLHVEQUFBLENBREEsWUNQTixDRFlFLDhCQUdFLGtCQUFBLENBRkEsbURBQUEsQ0FDQSxlQ1RKLENDOUNFLDRCQUlFLDJCQUFBLENBSEEsY0FBQSxDQUVBLE9BQUEsQ0FEQSxLQUFBLENBR0EsYURpREosQ0MvQ0UsK0JBR0UsMkNBQUEsQ0FDQSxtQ0FBQSxDQUZBLFlBQUEsQ0FEQSxjQUFBLENBS0EsMEJBQUEsQ0FDQSxrQkRnREosQ0M5Q0ksdUNBQ0UsV0RnRE4sQ0M3Q0ksc0NBQ0UsV0QrQ04sQ0M1Q0ksc0NBQ0UsVUQ4Q04sQ0UxREksb0NETkYsK0JBc0JJLFdEOENKLENBQ0YsQ0M1Q0UsNkJBQ0UsMkJBQUEsQ0FFQSxVQUFBLENBREEsUUQrQ0osQ0MzQ0UsOEJBR0UsMkJBQUEsQ0FGQSxVRCtDSixDQzFDRSw0QkFJRSxpQ0FBQSxDQUZBLHVEQUFBLENBR0EsZUFBQSxDQUZBLGNBQUEsQ0FGQSxVRGdESixDQzFDSSxtRUFDRSw0RkQ0Q04sQ0NyQ0UsOEJBR0UsMkNBQUEsQ0FDQSw2Q0FBQSxDQUZBLFlBQUEsQ0FEQSxVRDBDSixDQ3JDSSxxRUFJRSxRQUFBLENBREEsTUFBQSxDQURBLGlCQUFBLENBREEsVUQwQ04sQ0MvQkUsMkRBQ0UsMEJEa0NKLENDN0JFLGtJQUNFLHVCRGlDSixDQ3hCRSwySEFDRSwwQkQrQkosQ0c3SEUsaUNBQ0UsNkJBQUEsQ0FDQSxRSGdJSixDRzlISSxtQ0FDRSxxQkhnSU4sQ0c3SEksbUNBQ0UsaUJIK0hOLENHNUhJLDBFQUNFLFlBQUEsQ0FHQSxNQUFBLENBRkEscUJBQUEsQ0FDQSxPSCtITixDRzFITSwwRkFFRSxNQUFBLENBREEsZUg2SFIsQ0cxSFEsd0dBQ0UsWUg0SFYsQ0d4SFEseUZBQ0UsYUgwSFYsQ0d0SEkseUVBQ0Usc0RId0hOLENHcEhFLG1DQUNFLDZCSHNISixDR3BISSx1Q0FDRSxZQUFBLENBQ0EsT0hzSE4sQ0luS0EsK0JBQ0UsdURBQUEsQ0FDQSwrREpzS0YiLCJzb3VyY2VzQ29udGVudCI6WyIubmVldG8tZmlsdGVycy1iYXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cbiAgJl9fYmxvY2sge1xuICAgIHBhZGRpbmc6IDRweCA4cHg7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgZ2FwOiA0cHg7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbmVldG8tdWktcm91bmRlZCk7XG4gICAgdHJhbnNpdGlvbjogdmFyKC0tbmVldG8tdWktdHJhbnNpdGlvbik7XG4gICAgbWFyZ2luOiA0cHggMDtcbiAgICBtYXgtd2lkdGg6IDM4NHB4O1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAgIHA6Zmlyc3QtY2hpbGQge1xuICAgICAgY29sb3I6IHJnYih2YXIoLS1uZWV0by11aS1ncmF5LTcwMCkpO1xuICAgIH1cblxuICAgICYtY2xvc2Uge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAwO1xuICAgICAgcmlnaHQ6IDA7XG4gICAgICBwYWRkaW5nOiA4cHg7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgICAgY29sb3I6IHJnYih2YXIoLS1uZWV0by11aS1ncmF5LTgwMCkpO1xuICAgICAgdHJhbnNpdGlvbjogdmFyKC0tbmVldG8tdWktdHJhbnNpdGlvbik7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoXG4gICAgICAgIDkwZGVnLFxuICAgICAgICByZ2JhKHZhcigtLW5lZXRvLXVpLWdyYXktMjAwKSwgMC41KSAwJSxcbiAgICAgICAgcmdiYSh2YXIoLS1uZWV0by11aS1ncmF5LTIwMCksIDEpIDI1JVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAmOmhvdmVyLFxuICAgICY6YWN0aXZlIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYih2YXIoLS1uZWV0by11aS1ncmF5LTIwMCkpO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuXG4gICAgICAubmVldG8tZmlsdGVycy1iYXJfX2Jsb2NrLWNsb3NlIHtcbiAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgY29sb3I6IHJnYih2YXIoLS1uZWV0by11aS1ibGFjaykpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1uZWV0by11aS1yb3VuZGVkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmOmZvY3VzIHtcbiAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggcmdiYSh2YXIoLS1uZWV0by11aS1ncmF5LTgwMCksIDE1JSk7XG4gICAgfVxuICB9XG5cbiAgJi0tc2VwYXJhdG9yIHtcbiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIHJnYih2YXIoLS1uZWV0by11aS1ncmF5LTQwMCkpO1xuICAgIG1hcmdpbjogMTJweCA4cHg7XG4gICAgYWxpZ24tc2VsZjogc3RyZXRjaDtcbiAgfVxufVxuIiwiLm5lZXRvLWZpbHRlcnMtYmFyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC13cmFwOiB3cmFwO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuLm5lZXRvLWZpbHRlcnMtYmFyX19ibG9jayB7XG4gIHBhZGRpbmc6IDRweCA4cHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZ2FwOiA0cHg7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLW5lZXRvLXVpLXJvdW5kZWQpO1xuICB0cmFuc2l0aW9uOiB2YXIoLS1uZWV0by11aS10cmFuc2l0aW9uKTtcbiAgbWFyZ2luOiA0cHggMDtcbiAgbWF4LXdpZHRoOiAzODRweDtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5uZWV0by1maWx0ZXJzLWJhcl9fYmxvY2sgcDpmaXJzdC1jaGlsZCB7XG4gIGNvbG9yOiByZ2IodmFyKC0tbmVldG8tdWktZ3JheS03MDApKTtcbn1cbi5uZWV0by1maWx0ZXJzLWJhcl9fYmxvY2stY2xvc2Uge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIHBhZGRpbmc6IDhweDtcbiAgb3BhY2l0eTogMDtcbiAgY29sb3I6IHJnYih2YXIoLS1uZWV0by11aS1ncmF5LTgwMCkpO1xuICB0cmFuc2l0aW9uOiB2YXIoLS1uZWV0by11aS10cmFuc2l0aW9uKTtcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDkwZGVnLCByZ2JhKHZhcigtLW5lZXRvLXVpLWdyYXktMjAwKSwgMC41KSAwJSwgcmdiYSh2YXIoLS1uZWV0by11aS1ncmF5LTIwMCksIDEpIDI1JSk7XG59XG4ubmVldG8tZmlsdGVycy1iYXJfX2Jsb2NrOmhvdmVyLCAubmVldG8tZmlsdGVycy1iYXJfX2Jsb2NrOmFjdGl2ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYih2YXIoLS1uZWV0by11aS1ncmF5LTIwMCkpO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4ubmVldG8tZmlsdGVycy1iYXJfX2Jsb2NrOmhvdmVyIC5uZWV0by1maWx0ZXJzLWJhcl9fYmxvY2stY2xvc2UsIC5uZWV0by1maWx0ZXJzLWJhcl9fYmxvY2s6YWN0aXZlIC5uZWV0by1maWx0ZXJzLWJhcl9fYmxvY2stY2xvc2Uge1xuICBvcGFjaXR5OiAxO1xuICBjb2xvcjogcmdiKHZhcigtLW5lZXRvLXVpLWJsYWNrKSk7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLW5lZXRvLXVpLXJvdW5kZWQpO1xufVxuLm5lZXRvLWZpbHRlcnMtYmFyX19ibG9jazpmb2N1cyB7XG4gIG91dGxpbmU6IG5vbmU7XG4gIGJveC1zaGFkb3c6IDAgMCAwIDNweCByZ2JhKHZhcigtLW5lZXRvLXVpLWdyYXktODAwKSwgMTUlKTtcbn1cbi5uZWV0by1maWx0ZXJzLWJhci0tc2VwYXJhdG9yIHtcbiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCByZ2IodmFyKC0tbmVldG8tdWktZ3JheS00MDApKTtcbiAgbWFyZ2luOiAxMnB4IDhweDtcbiAgYWxpZ24tc2VsZjogc3RyZXRjaDtcbn1cblxuLm5lZXRvLWZpbHRlcnMtc2xpZGVyX19wYW5lIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICBib3JkZXItcmFkaXVzOiAxMnB4IDBweCAwcHggMTJweDtcbiAgei1pbmRleDogOTk5OTg7XG59XG4ubmVldG8tZmlsdGVycy1zbGlkZXJfX3dyYXBwZXIge1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwdmg7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYih2YXIoLS1uZWV0by11aS13aGl0ZSkpO1xuICBib3gtc2hhZG93OiB2YXIoLS1uZWV0by11aS1zaGFkb3ctbSk7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTtcbiAgdHJhbnNpdGlvbjogYWxsIDAuM3M7XG59XG4ubmVldG8tZmlsdGVycy1zbGlkZXJfX3dyYXBwZXItLXhzbWFsbCB7XG4gIHdpZHRoOiAzNjBweDtcbn1cbi5uZWV0by1maWx0ZXJzLXNsaWRlcl9fd3JhcHBlci0tc21hbGwge1xuICB3aWR0aDogNDgwcHg7XG59XG4ubmVldG8tZmlsdGVycy1zbGlkZXJfX3dyYXBwZXItLWxhcmdlIHtcbiAgd2lkdGg6IDUwdnc7XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjdweCkge1xuICAubmVldG8tZmlsdGVycy1zbGlkZXJfX3dyYXBwZXIge1xuICAgIHdpZHRoOiAxMDB2dztcbiAgfVxufVxuLm5lZXRvLWZpbHRlcnMtc2xpZGVyX19jbG9zZSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50O1xuICB0b3A6IDI0cHg7XG4gIHJpZ2h0OiAyNHB4O1xufVxuLm5lZXRvLWZpbHRlcnMtc2xpZGVyX19oZWFkZXIge1xuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogMjRweDtcbiAgcGFkZGluZy1yaWdodDogNjBweDtcbn1cbi5uZWV0by1maWx0ZXJzLXNsaWRlcl9fYm9keSB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IGNhbGMoMTAwdmggLSB2YXIoLS1uZWV0by11aS1wYW5lLWhlYWRlci1oZWlnaHQpKTtcbiAgcGFkZGluZzogMCAyNHB4O1xuICBmb250LXNpemU6IHZhcigtLW5lZXRvLXVpLXRleHQtc20pO1xuICBvdmVyZmxvdy15OiBhdXRvO1xufVxuLm5lZXRvLWZpbHRlcnMtc2xpZGVyX19ib2R5Lm5lZXRvLWZpbHRlcnMtc2xpZGVyX19ib2R5LS1oYXMtZm9vdGVyIHtcbiAgaGVpZ2h0OiBjYWxjKDEwMHZoIC0gdmFyKC0tbmVldG8tdWktcGFuZS1oZWFkZXItaGVpZ2h0KSAtIHZhcigtLW5lZXRvLXVpLXBhbmUtZm9vdGVyLWhlaWdodCkpO1xufVxuLm5lZXRvLWZpbHRlcnMtc2xpZGVyX19mb290ZXIge1xuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogMjRweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiKHZhcigtLW5lZXRvLXVpLXdoaXRlKSk7XG4gIG1pbi1oZWlnaHQ6IHZhcigtLW5lZXRvLXVpLXBhbmUtZm9vdGVyLWhlaWdodCk7XG59XG4ubmVldG8tZmlsdGVycy1zbGlkZXJfX2Zvb3Rlci5uZWV0by1maWx0ZXJzLXNsaWRlcl9fZm9vdGVyX19hYnNvbHV0ZSB7XG4gIHdpZHRoOiAxMDAlO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDA7XG4gIGJvdHRvbTogMDtcbn1cblxuLm5lZXRvLWZpbHRlcnMtc2xpZGVyLWVudGVyIC5uZWV0by1maWx0ZXJzLXNsaWRlcl9fd3JhcHBlciB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTtcbn1cblxuLm5lZXRvLWZpbHRlcnMtc2xpZGVyLWVudGVyLWFjdGl2ZSAubmVldG8tZmlsdGVycy1zbGlkZXJfX3dyYXBwZXIsXG4ubmVldG8tZmlsdGVycy1zbGlkZXItZW50ZXItZG9uZSAubmVldG8tZmlsdGVycy1zbGlkZXJfX3dyYXBwZXIge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XG59XG5cbi5uZWV0by1maWx0ZXJzLXNsaWRlci1leGl0IC5uZWV0by1maWx0ZXJzLXNsaWRlcl9fd3JhcHBlciB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTtcbn1cblxuLm5lZXRvLWZpbHRlcnMtc2xpZGVyLWV4aXQtYWN0aXZlIC5uZWV0by1maWx0ZXJzLXNsaWRlcl9fd3JhcHBlciB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTtcbn1cblxuLm5lZXRvLWZpbHRlcnMtcGFuZS1maWx0ZXJfX2JvZHkge1xuICBhbGlnbi1pdGVtczogc3RyZXRjaCAhaW1wb3J0YW50O1xuICBnYXA6IDIwcHg7XG59XG4ubmVldG8tZmlsdGVycy1wYW5lLWZpbHRlcl9fYm9keSA+ICoge1xuICBmbGV4LWdyb3c6IDAgIWltcG9ydGFudDtcbn1cbi5uZWV0by1maWx0ZXJzLXBhbmUtZmlsdGVyX19ib2R5IHAge1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4ubmVldG8tZmlsdGVycy1wYW5lLWZpbHRlcl9fYm9keSAubmVldG8tZmlsdGVycy1wYW5lLWZpbHRlcl9faXRlbS13cmFwcGVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZ2FwOiA4cHg7XG4gIGZsZXg6IDE7XG59XG4ubmVldG8tZmlsdGVycy1wYW5lLWZpbHRlcl9fYm9keSAuYWNjb3JkaW9uX2l0ZW0gLm5lZXRvLWZpbHRlcnMtcGFuZS1maWx0ZXJfX2l0ZW0td3JhcHBlciB7XG4gIG1hcmdpbi10b3A6IDE2cHg7XG4gIGZsZXg6IDE7XG59XG4ubmVldG8tZmlsdGVycy1wYW5lLWZpbHRlcl9fYm9keSAuYWNjb3JkaW9uX2l0ZW0gLm5lZXRvLWZpbHRlcnMtcGFuZS1maWx0ZXJfX2l0ZW0td3JhcHBlcjpmaXJzdC1vZi10eXBlIHtcbiAgbWFyZ2luLXRvcDogMDtcbn1cbi5uZWV0by1maWx0ZXJzLXBhbmUtZmlsdGVyX19ib2R5IC5hY2NvcmRpb25faXRlbTpmaXJzdC1vZi10eXBlIC5uZWV0by11aS1hY2NvcmRpb25fX2l0ZW0ge1xuICBwYWRkaW5nLXRvcDogMDtcbn1cbi5uZWV0by1maWx0ZXJzLXBhbmUtZmlsdGVyX19ib2R5IC5uZWV0by11aS1hY2NvcmRpb25fX3dyYXBwZXItLWxhc3QtaXRlbSB7XG4gIGJvcmRlci1ib3R0b206IHRoaW4gc29saWQgcmdiKHZhcigtLW5lZXRvLXVpLWdyYXktMzAwKSk7XG59XG4ubmVldG8tZmlsdGVycy1wYW5lLWZpbHRlcl9fZm9vdGVyIHtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xufVxuLm5lZXRvLWZpbHRlcnMtcGFuZS1maWx0ZXJfX2Zvb3RlciBkaXYge1xuICBkaXNwbGF5OiBmbGV4O1xuICBnYXA6IDhweDtcbn1cblxuLm5lZXRvLWZpbHRlcnMtc2VnbWVudC0tYWN0aXZlIHtcbiAgYm9yZGVyLWNvbG9yOiByZ2IodmFyKC0tbmVldG8tdWktcHJpbWFyeS01MDApKSAhaW1wb3J0YW50O1xuICBib3gtc2hhZG93OiAwIDAgMCAxcHggcmdiKHZhcigtLW5lZXRvLXVpLXByaW1hcnktNTAwKSkgIWltcG9ydGFudDtcbn0iLCIubmVldG8tZmlsdGVycy1zbGlkZXIge1xuICAmX19wYW5lIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgdG9wOiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIGJvcmRlci1yYWRpdXM6IDEycHggMHB4IDBweCAxMnB4O1xuICAgIHotaW5kZXg6IDk5OTk4O1xuICB9XG4gICZfX3dyYXBwZXIge1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMHZoO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYih2YXIoLS1uZWV0by11aS13aGl0ZSkpO1xuICAgIGJveC1zaGFkb3c6IHZhcigtLW5lZXRvLXVpLXNoYWRvdy1tKTtcblxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTtcbiAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcztcblxuICAgICYtLXhzbWFsbCB7XG4gICAgICB3aWR0aDogMzYwcHg7XG4gICAgfVxuXG4gICAgJi0tc21hbGwge1xuICAgICAgd2lkdGg6IDQ4MHB4O1xuICAgIH1cblxuICAgICYtLWxhcmdlIHtcbiAgICAgIHdpZHRoOiA1MHZ3O1xuICAgIH1cblxuICAgIEBpbmNsdWRlIHZpZXdwb3J0KG1vYikge1xuICAgICAgd2lkdGg6IDEwMHZ3O1xuICAgIH1cbiAgfVxuICAmX19jbG9zZSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlICFpbXBvcnRhbnQ7XG4gICAgdG9wOiAyNHB4O1xuICAgIHJpZ2h0OiAyNHB4O1xuICB9XG5cbiAgJl9faGVhZGVyIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBwYWRkaW5nOiAyNHB4O1xuICAgIHBhZGRpbmctcmlnaHQ6IDYwcHg7XG4gIH1cblxuICAmX19ib2R5IHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IGNhbGMoMTAwdmggLSB2YXIoLS1uZWV0by11aS1wYW5lLWhlYWRlci1oZWlnaHQpKTtcbiAgICBwYWRkaW5nOiAwIDI0cHg7XG4gICAgZm9udC1zaXplOiB2YXIoLS1uZWV0by11aS10ZXh0LXNtKTtcbiAgICBvdmVyZmxvdy15OiBhdXRvO1xuXG4gICAgJi5uZWV0by1maWx0ZXJzLXNsaWRlcl9fYm9keS0taGFzLWZvb3RlciB7XG4gICAgICBoZWlnaHQ6IGNhbGMoXG4gICAgICAgIDEwMHZoIC0gdmFyKC0tbmVldG8tdWktcGFuZS1oZWFkZXItaGVpZ2h0KSAtXG4gICAgICAgICAgdmFyKC0tbmVldG8tdWktcGFuZS1mb290ZXItaGVpZ2h0KVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAmX19mb290ZXIge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHBhZGRpbmc6IDI0cHg7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKHZhcigtLW5lZXRvLXVpLXdoaXRlKSk7XG4gICAgbWluLWhlaWdodDogdmFyKC0tbmVldG8tdWktcGFuZS1mb290ZXItaGVpZ2h0KTtcblxuICAgICYubmVldG8tZmlsdGVycy1zbGlkZXJfX2Zvb3Rlcl9fYWJzb2x1dGUge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgYm90dG9tOiAwO1xuICAgIH1cbiAgfVxufVxuXG4vLyBDU1MgdHJhbnNpdGlvbiBncm91cFxuXG4ubmVldG8tZmlsdGVycy1zbGlkZXItZW50ZXIge1xuICAubmVldG8tZmlsdGVycy1zbGlkZXJfX3dyYXBwZXIge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTtcbiAgfVxufVxuLm5lZXRvLWZpbHRlcnMtc2xpZGVyLWVudGVyLWFjdGl2ZSxcbi5uZWV0by1maWx0ZXJzLXNsaWRlci1lbnRlci1kb25lIHtcbiAgLm5lZXRvLWZpbHRlcnMtc2xpZGVyX193cmFwcGVyIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XG4gIH1cbn1cbi5uZWV0by1maWx0ZXJzLXNsaWRlci1leGl0IHtcbiAgLm5lZXRvLWZpbHRlcnMtc2xpZGVyX193cmFwcGVyIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAwJSk7XG4gIH1cbn1cbi5uZWV0by1maWx0ZXJzLXNsaWRlci1leGl0LWFjdGl2ZSB7XG4gIC5uZWV0by1maWx0ZXJzLXNsaWRlcl9fd3JhcHBlciB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwMCUpO1xuICB9XG59XG4iLCJAbWl4aW4gdmlld3BvcnQoJG1lZGlhKSB7XG4gIEBpZiAkbWVkaWE9PWRlc2sge1xuICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEyMDBweCkge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9IEBlbHNlIGlmICRtZWRpYT09dGFiLW1pbiB7XG4gICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogMTAyNHB4KSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH0gQGVsc2UgaWYgJG1lZGlhPT10YWItb25seSB7XG4gICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIGFuZCAobWF4LXdpZHRoOiAxMDIzcHgpIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfSBAZWxzZSBpZiAkbWVkaWE9PW1vYiB7XG4gICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfSBAZWxzZSBpZiAkbWVkaWE9PXhzLW1vYiB7XG4gICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDc5cHgpIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfVxufVxuIiwiLm5lZXRvLWZpbHRlcnMtcGFuZS1maWx0ZXIge1xuICAmX19ib2R5IHtcbiAgICBhbGlnbi1pdGVtczogc3RyZXRjaCAhaW1wb3J0YW50O1xuICAgIGdhcDogMjBweDtcblxuICAgID4gKiB7XG4gICAgICBmbGV4LWdyb3c6IDAgIWltcG9ydGFudDtcbiAgICB9XG5cbiAgICBwIHtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB9XG5cbiAgICAubmVldG8tZmlsdGVycy1wYW5lLWZpbHRlcl9faXRlbS13cmFwcGVyIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgZ2FwOiA4cHg7XG4gICAgICBmbGV4OiAxO1xuICAgIH1cblxuICAgIC5hY2NvcmRpb25faXRlbSB7XG4gICAgICAubmVldG8tZmlsdGVycy1wYW5lLWZpbHRlcl9faXRlbS13cmFwcGVyIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMTZweDtcbiAgICAgICAgZmxleDogMTtcblxuICAgICAgICAmOmZpcnN0LW9mLXR5cGUge1xuICAgICAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgICY6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgICAgIC5uZWV0by11aS1hY2NvcmRpb25fX2l0ZW0ge1xuICAgICAgICAgIHBhZGRpbmctdG9wOiAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC5uZWV0by11aS1hY2NvcmRpb25fX3dyYXBwZXItLWxhc3QtaXRlbSB7XG4gICAgICBib3JkZXItYm90dG9tOiB0aGluIHNvbGlkIHJnYih2YXIoLS1uZWV0by11aS1ncmF5LTMwMCkpO1xuICAgIH1cbiAgfVxuXG4gICZfX2Zvb3RlciB7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuXG4gICAgZGl2IHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBnYXA6IDhweDtcbiAgICB9XG4gIH1cbn1cbiIsIi5uZWV0by1maWx0ZXJzLXNlZ21lbnQtLWFjdGl2ZSB7XG4gIGJvcmRlci1jb2xvcjogcmdiKHZhcigtLW5lZXRvLXVpLXByaW1hcnktNTAwKSkgIWltcG9ydGFudDtcbiAgYm94LXNoYWRvdzogMCAwIDAgMXB4IHJnYih2YXIoLS1uZWV0by11aS1wcmltYXJ5LTUwMCkpICFpbXBvcnRhbnQ7XG59XG4iXX0= */";
2528
+ 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{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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFwcC9qYXZhc2NyaXB0L3NyYy9zdHlsZXNoZWV0cy9jb21wb25lbnRzL19iYXIuc2NzcyIsImFwcC9qYXZhc2NyaXB0L3NyYy9zdHlsZXNoZWV0cy9pbmRleC5zY3NzIiwiYXBwL2phdmFzY3JpcHQvc3JjL3N0eWxlc2hlZXRzL2NvbXBvbmVudHMvX2ZpbHRlcnMuc2NzcyIsImFwcC9qYXZhc2NyaXB0L3NyYy9zdHlsZXNoZWV0cy9hYnN0cmFjdHMvX21peGlucy5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUdFLGtCQUFBLENBRkEsWUFBQSxDQUNBLGNDRUYsQ0RDRSwwQkFLRSxxQ0FBQSxDQUhBLFlBQUEsQ0FFQSxPQUFBLENBR0EsWUFBQSxDQUNBLGVBQUEsQ0FFQSxlQUFBLENBVEEsZUFBQSxDQUVBLGlCQUFBLENBR0EscUNBQUEsQ0FHQSxrQkNFSixDRENJLHdDQUNFLG1DQ0NOLENERUksZ0NBUUUsZ0hBQUEsQ0FGQSxtQ0FBQSxDQURBLFNBQUEsQ0FEQSxXQUFBLENBSEEsaUJBQUEsQ0FFQSxPQUFBLENBREEsS0FBQSxDQUtBLHFDQ0NOLENET0ksaUVBRUUsOENBQUEsQ0FDQSxjQ05OLENEUU0saUlBR0UscUNBQUEsQ0FEQSxnQ0FBQSxDQURBLFNDSlIsQ0RVSSxnQ0FFRSx1REFBQSxDQURBLFlDUE4sQ0RZRSw4QkFHRSxrQkFBQSxDQUZBLG1EQUFBLENBQ0EsZUNUSixDQy9DQSwyQkFDRSxXRGtERixDQ2hERSxpQ0FDRSw2QkFBQSxDQUNBLFFEa0RKLENDaERJLG1DQUNFLHFCRGtETixDQy9DSSxtQ0FDRSxpQkRpRE4sQ0M5Q0ksMEVBQ0UsWUFBQSxDQUNBLHFCQUFBLENBQ0EsT0RnRE4sQ0M1Q00sMEZBQ0UsZUQ4Q1IsQ0M1Q1Esd0dBQ0UsWUQ4Q1YsQ0MxQ1EseUZBQ0UsYUQ0Q1YsQ0N4Q0kseUVBQ0Usc0REMENOLENFaEVJLG9DRGRKLDJCQXlDSSxXRHlDRixDQUNGLENDdENBLDZCQUNFLHlDQUFBLENBQUEsaUNBQUEsQ0FDQSxrRER5Q0YiLCJzb3VyY2VzQ29udGVudCI6WyIubmVldG8tZmlsdGVycy1iYXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cbiAgJl9fYmxvY2sge1xuICAgIHBhZGRpbmc6IDRweCA4cHg7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgZ2FwOiA0cHg7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbmVldG8tdWktcm91bmRlZCk7XG4gICAgdHJhbnNpdGlvbjogdmFyKC0tbmVldG8tdWktdHJhbnNpdGlvbik7XG4gICAgbWFyZ2luOiA0cHggMDtcbiAgICBtYXgtd2lkdGg6IDM4NHB4O1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAgIHA6Zmlyc3QtY2hpbGQge1xuICAgICAgY29sb3I6IHJnYih2YXIoLS1uZWV0by11aS1ncmF5LTcwMCkpO1xuICAgIH1cblxuICAgICYtY2xvc2Uge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAwO1xuICAgICAgcmlnaHQ6IDA7XG4gICAgICBwYWRkaW5nOiA4cHg7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgICAgY29sb3I6IHJnYih2YXIoLS1uZWV0by11aS1ncmF5LTgwMCkpO1xuICAgICAgdHJhbnNpdGlvbjogdmFyKC0tbmVldG8tdWktdHJhbnNpdGlvbik7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoXG4gICAgICAgIDkwZGVnLFxuICAgICAgICByZ2JhKHZhcigtLW5lZXRvLXVpLWdyYXktMjAwKSwgMC41KSAwJSxcbiAgICAgICAgcmdiYSh2YXIoLS1uZWV0by11aS1ncmF5LTIwMCksIDEpIDI1JVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAmOmhvdmVyLFxuICAgICY6YWN0aXZlIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYih2YXIoLS1uZWV0by11aS1ncmF5LTIwMCkpO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuXG4gICAgICAubmVldG8tZmlsdGVycy1iYXJfX2Jsb2NrLWNsb3NlIHtcbiAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgY29sb3I6IHJnYih2YXIoLS1uZWV0by11aS1ibGFjaykpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1uZWV0by11aS1yb3VuZGVkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmOmZvY3VzIHtcbiAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggcmdiYSh2YXIoLS1uZWV0by11aS1ncmF5LTgwMCksIDE1JSk7XG4gICAgfVxuICB9XG5cbiAgJi0tc2VwYXJhdG9yIHtcbiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIHJnYih2YXIoLS1uZWV0by11aS1ncmF5LTQwMCkpO1xuICAgIG1hcmdpbjogMTJweCA4cHg7XG4gICAgYWxpZ24tc2VsZjogc3RyZXRjaDtcbiAgfVxufVxuIiwiLm5lZXRvLWZpbHRlcnMtYmFyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC13cmFwOiB3cmFwO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuLm5lZXRvLWZpbHRlcnMtYmFyX19ibG9jayB7XG4gIHBhZGRpbmc6IDRweCA4cHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZ2FwOiA0cHg7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLW5lZXRvLXVpLXJvdW5kZWQpO1xuICB0cmFuc2l0aW9uOiB2YXIoLS1uZWV0by11aS10cmFuc2l0aW9uKTtcbiAgbWFyZ2luOiA0cHggMDtcbiAgbWF4LXdpZHRoOiAzODRweDtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5uZWV0by1maWx0ZXJzLWJhcl9fYmxvY2sgcDpmaXJzdC1jaGlsZCB7XG4gIGNvbG9yOiByZ2IodmFyKC0tbmVldG8tdWktZ3JheS03MDApKTtcbn1cbi5uZWV0by1maWx0ZXJzLWJhcl9fYmxvY2stY2xvc2Uge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIHBhZGRpbmc6IDhweDtcbiAgb3BhY2l0eTogMDtcbiAgY29sb3I6IHJnYih2YXIoLS1uZWV0by11aS1ncmF5LTgwMCkpO1xuICB0cmFuc2l0aW9uOiB2YXIoLS1uZWV0by11aS10cmFuc2l0aW9uKTtcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDkwZGVnLCByZ2JhKHZhcigtLW5lZXRvLXVpLWdyYXktMjAwKSwgMC41KSAwJSwgcmdiYSh2YXIoLS1uZWV0by11aS1ncmF5LTIwMCksIDEpIDI1JSk7XG59XG4ubmVldG8tZmlsdGVycy1iYXJfX2Jsb2NrOmhvdmVyLCAubmVldG8tZmlsdGVycy1iYXJfX2Jsb2NrOmFjdGl2ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYih2YXIoLS1uZWV0by11aS1ncmF5LTIwMCkpO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4ubmVldG8tZmlsdGVycy1iYXJfX2Jsb2NrOmhvdmVyIC5uZWV0by1maWx0ZXJzLWJhcl9fYmxvY2stY2xvc2UsIC5uZWV0by1maWx0ZXJzLWJhcl9fYmxvY2s6YWN0aXZlIC5uZWV0by1maWx0ZXJzLWJhcl9fYmxvY2stY2xvc2Uge1xuICBvcGFjaXR5OiAxO1xuICBjb2xvcjogcmdiKHZhcigtLW5lZXRvLXVpLWJsYWNrKSk7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLW5lZXRvLXVpLXJvdW5kZWQpO1xufVxuLm5lZXRvLWZpbHRlcnMtYmFyX19ibG9jazpmb2N1cyB7XG4gIG91dGxpbmU6IG5vbmU7XG4gIGJveC1zaGFkb3c6IDAgMCAwIDNweCByZ2JhKHZhcigtLW5lZXRvLXVpLWdyYXktODAwKSwgMTUlKTtcbn1cbi5uZWV0by1maWx0ZXJzLWJhci0tc2VwYXJhdG9yIHtcbiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCByZ2IodmFyKC0tbmVldG8tdWktZ3JheS00MDApKTtcbiAgbWFyZ2luOiAxMnB4IDhweDtcbiAgYWxpZ24tc2VsZjogc3RyZXRjaDtcbn1cblxuLm5lZXRvLWZpbHRlcnMtcGFuZS1maWx0ZXIge1xuICB3aWR0aDogMzYwcHg7XG59XG4ubmVldG8tZmlsdGVycy1wYW5lLWZpbHRlcl9fYm9keSB7XG4gIGFsaWduLWl0ZW1zOiBzdHJldGNoICFpbXBvcnRhbnQ7XG4gIGdhcDogMjBweDtcbn1cbi5uZWV0by1maWx0ZXJzLXBhbmUtZmlsdGVyX19ib2R5ID4gKiB7XG4gIGZsZXgtZ3JvdzogMCAhaW1wb3J0YW50O1xufVxuLm5lZXRvLWZpbHRlcnMtcGFuZS1maWx0ZXJfX2JvZHkgcCB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbi5uZWV0by1maWx0ZXJzLXBhbmUtZmlsdGVyX19ib2R5IC5uZWV0by1maWx0ZXJzLXBhbmUtZmlsdGVyX19pdGVtLXdyYXBwZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBnYXA6IDhweDtcbn1cbi5uZWV0by1maWx0ZXJzLXBhbmUtZmlsdGVyX19ib2R5IC5hY2NvcmRpb25faXRlbSAubmVldG8tZmlsdGVycy1wYW5lLWZpbHRlcl9faXRlbS13cmFwcGVyIHtcbiAgbWFyZ2luLXRvcDogMTZweDtcbn1cbi5uZWV0by1maWx0ZXJzLXBhbmUtZmlsdGVyX19ib2R5IC5hY2NvcmRpb25faXRlbSAubmVldG8tZmlsdGVycy1wYW5lLWZpbHRlcl9faXRlbS13cmFwcGVyOmZpcnN0LW9mLXR5cGUge1xuICBtYXJnaW4tdG9wOiAwO1xufVxuLm5lZXRvLWZpbHRlcnMtcGFuZS1maWx0ZXJfX2JvZHkgLmFjY29yZGlvbl9pdGVtOmZpcnN0LW9mLXR5cGUgLm5lZXRvLXVpLWFjY29yZGlvbl9faXRlbSB7XG4gIHBhZGRpbmctdG9wOiAwO1xufVxuLm5lZXRvLWZpbHRlcnMtcGFuZS1maWx0ZXJfX2JvZHkgLm5lZXRvLXVpLWFjY29yZGlvbl9fd3JhcHBlci0tbGFzdC1pdGVtIHtcbiAgYm9yZGVyLWJvdHRvbTogdGhpbiBzb2xpZCByZ2IodmFyKC0tbmVldG8tdWktZ3JheS0zMDApKTtcbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gIC5uZWV0by1maWx0ZXJzLXBhbmUtZmlsdGVyIHtcbiAgICB3aWR0aDogMTAwdnc7XG4gIH1cbn1cblxuLm5lZXRvLWZpbHRlcnMtcGFuZS1iYWNrZHJvcCB7XG4gIGJhY2tkcm9wLWZpbHRlcjogYmx1cigwcHgpICFpbXBvcnRhbnQ7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEodmFyKC0tbmVldG8tdWktZ3JheS03MDApLCAwLjIpO1xufSIsIi5uZWV0by1maWx0ZXJzLXBhbmUtZmlsdGVyIHtcbiAgd2lkdGg6IDM2MHB4O1xuXG4gICZfX2JvZHkge1xuICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoICFpbXBvcnRhbnQ7XG4gICAgZ2FwOiAyMHB4O1xuXG4gICAgPiAqIHtcbiAgICAgIGZsZXgtZ3JvdzogMCAhaW1wb3J0YW50O1xuICAgIH1cblxuICAgIHAge1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIH1cblxuICAgIC5uZWV0by1maWx0ZXJzLXBhbmUtZmlsdGVyX19pdGVtLXdyYXBwZXIge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBnYXA6IDhweDtcbiAgICB9XG5cbiAgICAuYWNjb3JkaW9uX2l0ZW0ge1xuICAgICAgLm5lZXRvLWZpbHRlcnMtcGFuZS1maWx0ZXJfX2l0ZW0td3JhcHBlciB7XG4gICAgICAgIG1hcmdpbi10b3A6IDE2cHg7XG5cbiAgICAgICAgJjpmaXJzdC1vZi10eXBlIHtcbiAgICAgICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAmOmZpcnN0LW9mLXR5cGUge1xuICAgICAgICAubmVldG8tdWktYWNjb3JkaW9uX19pdGVtIHtcbiAgICAgICAgICBwYWRkaW5nLXRvcDogMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAubmVldG8tdWktYWNjb3JkaW9uX193cmFwcGVyLS1sYXN0LWl0ZW0ge1xuICAgICAgYm9yZGVyLWJvdHRvbTogdGhpbiBzb2xpZCByZ2IodmFyKC0tbmVldG8tdWktZ3JheS0zMDApKTtcbiAgICB9XG4gIH1cblxuICBAaW5jbHVkZSB2aWV3cG9ydChtb2IpIHtcbiAgICB3aWR0aDogMTAwdnc7XG4gIH1cbn1cblxuLm5lZXRvLWZpbHRlcnMtcGFuZS1iYWNrZHJvcCB7XG4gIGJhY2tkcm9wLWZpbHRlcjogYmx1cigwcHgpICFpbXBvcnRhbnQ7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEodmFyKC0tbmVldG8tdWktZ3JheS03MDApLCAwLjIpO1xufVxuIiwiQG1peGluIHZpZXdwb3J0KCRtZWRpYSkge1xuICBAaWYgJG1lZGlhPT1kZXNrIHtcbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMjAwcHgpIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfSBAZWxzZSBpZiAkbWVkaWE9PXRhYi1taW4ge1xuICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDEwMjRweCkge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9IEBlbHNlIGlmICRtZWRpYT09dGFiLW9ubHkge1xuICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSBhbmQgKG1heC13aWR0aDogMTAyM3B4KSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH0gQGVsc2UgaWYgJG1lZGlhPT1tb2Ige1xuICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH0gQGVsc2UgaWYgJG1lZGlhPT14cy1tb2Ige1xuICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ3OXB4KSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH1cbn1cbiJdfQ== */";
3755
2529
  n(css,{});
3756
2530
 
3757
2531
  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; }
3758
2532
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
3759
2533
  var Filters = withT(function (_ref) {
3760
2534
  var t = _ref.t,
3761
- size = _ref.size,
3762
2535
  _ref$isOpen = _ref.isOpen,
3763
2536
  isOpen = _ref$isOpen === void 0 ? false : _ref$isOpen,
3764
2537
  _ref$setIsOpen = _ref.setIsOpen,
@@ -3775,25 +2548,25 @@ var Filters = withT(function (_ref) {
3775
2548
  isSearchable = _ref$isSearchable === void 0 ? false : _ref$isSearchable,
3776
2549
  className = _ref.className,
3777
2550
  _ref$onSelectorsChang = _ref.onSelectorsChange,
3778
- onSelectorsChange = _ref$onSelectorsChang === void 0 ? noop$1 : _ref$onSelectorsChang,
2551
+ onSelectorsChange = _ref$onSelectorsChang === void 0 ? noop : _ref$onSelectorsChang,
3779
2552
  _ref$keyword = _ref.keyword,
3780
2553
  keyword = _ref$keyword === void 0 ? {
3781
2554
  node: "",
3782
2555
  value: "",
3783
- setValue: noop$1
2556
+ setValue: noop
3784
2557
  } : _ref$keyword,
3785
2558
  childrenKeys = _ref.childrenKeys,
3786
2559
  children = _ref.children;
3787
2560
  return /*#__PURE__*/React.createElement("span", {
3788
2561
  className: classnames(_defineProperty({}, className, className))
3789
- }, /*#__PURE__*/React.createElement(Button, _extends$1({
2562
+ }, /*#__PURE__*/React.createElement(Button, _extends({
3790
2563
  "data-cy": "neeto-filters-toggle-btn",
3791
2564
  label: t("neetoFilters.common.filter"),
3792
2565
  style: "secondary",
3793
2566
  onClick: function onClick() {
3794
2567
  return setIsOpen(true);
3795
2568
  }
3796
- }, buttonProps)), /*#__PURE__*/React.createElement(Pane, _extends$1({
2569
+ }, buttonProps)), /*#__PURE__*/React.createElement(Pane, _extends({
3797
2570
  onClose: function onClose() {
3798
2571
  return setIsOpen(false);
3799
2572
  }
@@ -3804,27 +2577,18 @@ var Filters = withT(function (_ref) {
3804
2577
  isSearchable: isSearchable,
3805
2578
  keyword: keyword,
3806
2579
  onChange: onChange,
3807
- onSelectorsChange: onSelectorsChange,
3808
- size: size
2580
+ onSelectorsChange: onSelectorsChange
3809
2581
  }, paneProps)), children));
3810
2582
  });
3811
2583
 
3812
- var ITEMS_MAX_COUNT = 20;
3813
- var SEGMENT_ACTIONS = {
3814
- EDIT: "edit",
3815
- DELETE: "delete"
3816
- };
3817
-
3818
- var Delete = function Delete(_ref) {
2584
+ var DeleteAlert = function DeleteAlert(_ref) {
3819
2585
  var isOpen = _ref.isOpen,
3820
2586
  onClose = _ref.onClose,
3821
- _ref$segment = _ref.segment,
3822
- segment = _ref$segment === void 0 ? {} : _ref$segment,
3823
- _ref$columns = _ref.columns,
3824
- columns = _ref$columns === void 0 ? [] : _ref$columns;
2587
+ segment = _ref.segment,
2588
+ columns = _ref.columns;
3825
2589
  var _useTranslation = useTranslation(),
3826
2590
  t = _useTranslation.t;
3827
- var history = useHistory$1();
2591
+ var history = useHistory();
3828
2592
  var _getQueryParams = getQueryParams(),
3829
2593
  segmentId = _getQueryParams.segmentId;
3830
2594
  var _useDestroySegment = useDestroySegment(),
@@ -3862,30 +2626,162 @@ var Delete = function Delete(_ref) {
3862
2626
  });
3863
2627
  };
3864
2628
 
3865
- var useSegments = function useSegments(_ref) {
2629
+ var Card = function Card(_ref) {
2630
+ var segment = _ref.segment,
2631
+ columns = _ref.columns,
2632
+ defaultSegmentName = _ref.defaultSegmentName;
2633
+ var _useState = useState(false),
2634
+ _useState2 = _slicedToArray(_useState, 2),
2635
+ isEditing = _useState2[0],
2636
+ setIsEditing = _useState2[1];
2637
+ var _useState3 = useState(false),
2638
+ _useState4 = _slicedToArray(_useState3, 2),
2639
+ isDeleteAlertOpen = _useState4[0],
2640
+ setIsDeleteAlertOpen = _useState4[1];
2641
+ var _useTranslation = useTranslation(),
2642
+ t = _useTranslation.t;
2643
+ var Menu = Dropdown$2.Menu,
2644
+ MenuItem = Dropdown$2.MenuItem;
2645
+ var _useUpdateSegment = useUpdateSegment(),
2646
+ updateSegment = _useUpdateSegment.mutate;
2647
+ var handleRename = function handleRename(values) {
2648
+ return updateSegment({
2649
+ id: segment.id,
2650
+ payload: values
2651
+ }, {
2652
+ onSuccess: function onSuccess() {
2653
+ return setIsEditing(false);
2654
+ }
2655
+ });
2656
+ };
2657
+ return /*#__PURE__*/React.createElement(Form, {
2658
+ className: "neeto-ui-rounded-md flex w-full items-center justify-between border p-2",
2659
+ formProps: {
2660
+ noValidate: true
2661
+ },
2662
+ formikProps: {
2663
+ initialValues: segment,
2664
+ validateOnChange: true,
2665
+ validateOnBlur: true,
2666
+ validationSchema: buildSegmentsValidationSchema(defaultSegmentName),
2667
+ onSubmit: handleRename,
2668
+ enableReinitialize: true
2669
+ }
2670
+ }, function (_ref2) {
2671
+ var resetForm = _ref2.resetForm;
2672
+ return /*#__PURE__*/React.createElement(React.Fragment, null, isEditing ? /*#__PURE__*/React.createElement(FormikInlineInput, {
2673
+ autoFocus: true,
2674
+ nakedInput: true,
2675
+ handleCancel: function handleCancel() {
2676
+ return setIsEditing(false);
2677
+ },
2678
+ name: "name",
2679
+ placeholder: t("neetoFilters.segments.name")
2680
+ }) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Typography, {
2681
+ style: "body2"
2682
+ }, segment.name), /*#__PURE__*/React.createElement(Dropdown$2, {
2683
+ buttonStyle: "text",
2684
+ disabled: isNotPresent(segment.id),
2685
+ icon: MenuHorizontal,
2686
+ size: "small"
2687
+ }, /*#__PURE__*/React.createElement(Menu, null, /*#__PURE__*/React.createElement(MenuItem.Button, {
2688
+ onClick: function onClick() {
2689
+ setIsEditing(true);
2690
+ resetForm();
2691
+ }
2692
+ }, t("neetoFilters.common.rename")), /*#__PURE__*/React.createElement(MenuItem.Button, {
2693
+ onClick: function onClick() {
2694
+ return setIsDeleteAlertOpen(true);
2695
+ }
2696
+ }, t("neetoFilters.common.delete"))))), /*#__PURE__*/React.createElement(DeleteAlert, {
2697
+ columns: columns,
2698
+ segment: segment,
2699
+ isOpen: isDeleteAlertOpen,
2700
+ onClose: function onClose() {
2701
+ return setIsDeleteAlertOpen(false);
2702
+ }
2703
+ }));
2704
+ });
2705
+ };
2706
+ var Card$1 = /*#__PURE__*/React.memo(Card);
2707
+
2708
+ var ManagePane = function ManagePane(_ref) {
2709
+ var isOpen = _ref.isOpen,
2710
+ onClose = _ref.onClose,
2711
+ entity = _ref.entity,
2712
+ columns = _ref.columns,
2713
+ defaultSegmentName = _ref.defaultSegmentName;
2714
+ var _useState = useState(""),
2715
+ _useState2 = _slicedToArray(_useState, 2),
2716
+ searchTerm = _useState2[0],
2717
+ setSearchTerm = _useState2[1];
2718
+ var inputRef = useRef(null);
2719
+ var _useTranslation = useTranslation(),
2720
+ t = _useTranslation.t;
2721
+ var debouncedSearchTerm = useDebounce(searchTerm);
2722
+ var _useFetchSegments = useFetchSegments({
2723
+ entity: entity,
2724
+ searchTerm: debouncedSearchTerm
2725
+ }),
2726
+ _useFetchSegments$dat = _useFetchSegments.data,
2727
+ segments = _useFetchSegments$dat === void 0 ? [] : _useFetchSegments$dat,
2728
+ isLoading = _useFetchSegments.isLoading;
2729
+ return /*#__PURE__*/React.createElement(Pane$1, {
2730
+ isOpen: isOpen,
2731
+ onClose: onClose,
2732
+ initialFocusRef: inputRef
2733
+ }, /*#__PURE__*/React.createElement(Pane$1.Header, null, /*#__PURE__*/React.createElement(Typography, {
2734
+ style: "h2"
2735
+ }, t("neetoFilters.segments.manageSegments"))), /*#__PURE__*/React.createElement(Pane$1.Body, {
2736
+ className: "max-h-full gap-4 overflow-scroll"
2737
+ }, /*#__PURE__*/React.createElement(Search, {
2738
+ className: "w-full flex-grow-0",
2739
+ placeholder: t("neetoFilters.segments.searchSegments"),
2740
+ ref: inputRef,
2741
+ onSearch: function onSearch(value) {
2742
+ return setSearchTerm(value);
2743
+ }
2744
+ }), isLoading ? /*#__PURE__*/React.createElement(Spinner, {
2745
+ className: "mx-auto mt-4"
2746
+ }) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Card$1, {
2747
+ segment: {
2748
+ name: defaultSegmentName
2749
+ }
2750
+ }), isEmpty(segments) ? /*#__PURE__*/React.createElement(Typography, {
2751
+ className: "mx-auto",
2752
+ style: "body2"
2753
+ }, t("neetoFilters.segments.noSegmentsFound")) : segments.map(function (segment) {
2754
+ return /*#__PURE__*/React.createElement(Card$1, {
2755
+ columns: columns,
2756
+ defaultSegmentName: defaultSegmentName,
2757
+ segment: segment,
2758
+ key: segment.id
2759
+ });
2760
+ }))));
2761
+ };
2762
+
2763
+ var ITEMS_MAX_COUNT = 20;
2764
+
2765
+ var MenuBlocks = function MenuBlocks(_ref) {
3866
2766
  var entity = _ref.entity,
3867
2767
  columns = _ref.columns,
3868
- appliedFilters = _ref.appliedFilters,
3869
- childrenKeys = _ref.childrenKeys;
2768
+ defaultSegmentName = _ref.defaultSegmentName;
2769
+ var _useState = useState(false),
2770
+ _useState2 = _slicedToArray(_useState, 2),
2771
+ showAll = _useState2[0],
2772
+ setShowAll = _useState2[1];
2773
+ var history = useHistory();
3870
2774
  var _useTranslation = useTranslation(),
3871
2775
  t = _useTranslation.t;
3872
- var history = useHistory$1();
2776
+ var _getQueryParams = getQueryParams(),
2777
+ segmentId = _getQueryParams.segmentId;
2778
+ var appliedFilters = buildFiltersFromURL(columns);
3873
2779
  var _useFetchSegments = useFetchSegments({
3874
2780
  entity: entity
3875
2781
  }),
3876
2782
  _useFetchSegments$dat = _useFetchSegments.data,
3877
2783
  segments = _useFetchSegments$dat === void 0 ? [] : _useFetchSegments$dat,
3878
2784
  isLoading = _useFetchSegments.isLoading;
3879
- var _useUpdateSegment = useUpdateSegment(),
3880
- updateSegment = _useUpdateSegment.mutate,
3881
- isUpdating = _useUpdateSegment.isLoading;
3882
- var _useState = useState({
3883
- action: "",
3884
- segment: undefined
3885
- }),
3886
- _useState2 = _slicedToArray(_useState, 2),
3887
- confirmAction = _useState2[0],
3888
- setConfirmAction = _useState2[1];
3889
2785
  var clearAppliedFilters = function clearAppliedFilters() {
3890
2786
  var _filters$, _filters$2;
3891
2787
  var filters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : appliedFilters;
@@ -3900,7 +2796,7 @@ var useSegments = function useSegments(_ref) {
3900
2796
  })
3901
2797
  });
3902
2798
  };
3903
- var handleSelectSegment = function handleSelectSegment(_ref2) {
2799
+ var applySelectedSegment = function applySelectedSegment(_ref2) {
3904
2800
  var _filters$3;
3905
2801
  var id = _ref2.id,
3906
2802
  filters = _ref2.filters;
@@ -3912,6 +2808,14 @@ var useSegments = function useSegments(_ref) {
3912
2808
  })
3913
2809
  });
3914
2810
  };
2811
+ var handleSelectSegment = function handleSelectSegment(_ref3) {
2812
+ var id = _ref3.id,
2813
+ filters = _ref3.filters;
2814
+ return equals(id, segmentId) ? clearAppliedFilters(filters) : applySelectedSegment({
2815
+ id: id,
2816
+ filters: filters
2817
+ });
2818
+ };
3915
2819
  if (isLoading) {
3916
2820
  return /*#__PURE__*/React.createElement(Spinner, null);
3917
2821
  }
@@ -3920,136 +2824,6 @@ var useSegments = function useSegments(_ref) {
3920
2824
  style: "body2"
3921
2825
  }, t("neetoFilters.segments.noSegmentsFound"));
3922
2826
  }
3923
- var handleUpdate = function handleUpdate(_ref3, _ref4) {
3924
- var name = _ref3.name;
3925
- var setFieldError = _ref4.setFieldError;
3926
- var filtersPayload = buildSegmentsPayload(filters, childrenKeys);
3927
- updateSegment({
3928
- id: confirmAction.segment.id,
3929
- payload: {
3930
- name: name,
3931
- filters: filtersPayload
3932
- },
3933
- showToastr: false
3934
- }, {
3935
- onSuccess: function onSuccess() {
3936
- showThumbsUpToastr();
3937
- setConfirmAction({
3938
- action: "",
3939
- segment: undefined
3940
- });
3941
- },
3942
- onError: function onError(error) {
3943
- return setFieldError("name", error.response.data.error);
3944
- }
3945
- });
3946
- };
3947
- var filters = buildFiltersFromSearchParams(columns);
3948
- return {
3949
- segments: segments,
3950
- clearAppliedFilters: clearAppliedFilters,
3951
- handleSelectSegment: handleSelectSegment,
3952
- setConfirmAction: setConfirmAction,
3953
- isUpdating: isUpdating,
3954
- handleUpdate: handleUpdate,
3955
- filters: filters,
3956
- onClose: function onClose() {
3957
- return setConfirmAction({
3958
- action: "",
3959
- segment: undefined
3960
- });
3961
- },
3962
- selectedSegment: confirmAction.segment,
3963
- isDeleteAlertOpen: confirmAction.action === SEGMENT_ACTIONS.DELETE,
3964
- isEditPaneOpen: confirmAction.action === SEGMENT_ACTIONS.EDIT
3965
- };
3966
- };
3967
-
3968
- var Segment = function Segment(_ref) {
3969
- var id = _ref.id,
3970
- isActive = _ref.isActive,
3971
- label = _ref.label,
3972
- onClick = _ref.onClick,
3973
- _ref$shouldShowDropdo = _ref.shouldShowDropdown,
3974
- shouldShowDropdown = _ref$shouldShowDropdo === void 0 ? false : _ref$shouldShowDropdo,
3975
- segments = _ref.segments,
3976
- setConfirmAction = _ref.setConfirmAction;
3977
- var _useTranslation = useTranslation(),
3978
- t = _useTranslation.t;
3979
- var menuItems = [{
3980
- key: "edit",
3981
- label: t("neetoFilters.common.edit"),
3982
- onClick: function onClick() {
3983
- return setConfirmAction({
3984
- action: SEGMENT_ACTIONS.EDIT,
3985
- segment: findById(id, segments)
3986
- });
3987
- }
3988
- }, {
3989
- key: "delete",
3990
- label: t("neetoFilters.common.delete"),
3991
- onClick: function onClick() {
3992
- return setConfirmAction({
3993
- action: SEGMENT_ACTIONS.DELETE,
3994
- segment: findById(id, segments)
3995
- });
3996
- }
3997
- }];
3998
- return /*#__PURE__*/React.createElement("div", {
3999
- onClick: onClick,
4000
- 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", {
4001
- "neeto-filters-segment--active": isActive
4002
- })
4003
- }, /*#__PURE__*/React.createElement("div", {
4004
- className: "flex flex-grow items-center gap-2 overflow-hidden",
4005
- "data-cy": "new-element-field"
4006
- }, /*#__PURE__*/React.createElement(Typography, {
4007
- className: "truncate leading-snug",
4008
- "data-cy": hyphenate(label),
4009
- style: "body2"
4010
- }, label)), shouldShowDropdown && /*#__PURE__*/React.createElement(MoreDropdown, {
4011
- menuItems: menuItems,
4012
- dropdownButtonProps: {
4013
- className: "min-h-0 flex-shrink-0",
4014
- "data-cy": "".concat(hyphenate(label), "-more-dropdown")
4015
- }
4016
- }));
4017
- };
4018
-
4019
- var MenuBlocks = function MenuBlocks(_ref) {
4020
- var entity = _ref.entity,
4021
- columns = _ref.columns,
4022
- defaultSegmentName = _ref.defaultSegmentName,
4023
- childrenKeys = _ref.childrenKeys,
4024
- customFilters = _ref.customFilters;
4025
- var _useTranslation = useTranslation(),
4026
- t = _useTranslation.t;
4027
- var segmentFormInitialRef = useRef(null);
4028
- var _useState = useState(false),
4029
- _useState2 = _slicedToArray(_useState, 2),
4030
- showAll = _useState2[0],
4031
- setShowAll = _useState2[1];
4032
- var _getQueryParams = getQueryParams(),
4033
- segmentId = _getQueryParams.segmentId;
4034
- var appliedFilters = buildFiltersFromURL(columns);
4035
- var _useSegments = useSegments({
4036
- entity: entity,
4037
- columns: columns,
4038
- appliedFilters: appliedFilters,
4039
- childrenKeys: childrenKeys
4040
- }),
4041
- _useSegments$segments = _useSegments.segments,
4042
- segments = _useSegments$segments === void 0 ? [] : _useSegments$segments,
4043
- clearAppliedFilters = _useSegments.clearAppliedFilters,
4044
- handleSelectSegment = _useSegments.handleSelectSegment,
4045
- onClose = _useSegments.onClose,
4046
- setConfirmAction = _useSegments.setConfirmAction,
4047
- selectedSegment = _useSegments.selectedSegment,
4048
- isDeleteAlertOpen = _useSegments.isDeleteAlertOpen,
4049
- isEditPaneOpen = _useSegments.isEditPaneOpen,
4050
- isUpdating = _useSegments.isUpdating,
4051
- handleUpdate = _useSegments.handleUpdate,
4052
- filters = _useSegments.filters;
4053
2827
  return /*#__PURE__*/React.createElement(React.Fragment, null, segments.length > ITEMS_MAX_COUNT && /*#__PURE__*/React.createElement(Button, {
4054
2828
  icon: Down,
4055
2829
  style: "link",
@@ -4061,67 +2835,71 @@ var MenuBlocks = function MenuBlocks(_ref) {
4061
2835
  return !open;
4062
2836
  });
4063
2837
  }
4064
- }), /*#__PURE__*/React.createElement(Segment, {
4065
- isActive: isEmpty(appliedFilters),
2838
+ }), /*#__PURE__*/React.createElement(MenuBar.Block, {
2839
+ active: isEmpty(appliedFilters),
4066
2840
  label: defaultSegmentName,
4067
2841
  onClick: clearAppliedFilters
4068
2842
  }), segments.slice(0, showAll ? segments.length : ITEMS_MAX_COUNT).map(function (segment) {
4069
- return /*#__PURE__*/React.createElement(Segment, {
4070
- segments: segments,
4071
- setConfirmAction: setConfirmAction,
4072
- shouldShowDropdown: true,
4073
- id: segment.id,
4074
- isActive: segment.id === segmentId,
2843
+ return /*#__PURE__*/React.createElement(MenuBar.Block, {
2844
+ active: segment.id === segmentId,
2845
+ count: segment.count,
4075
2846
  key: segment.id,
4076
2847
  label: segment.name,
4077
2848
  onClick: function onClick() {
4078
2849
  return handleSelectSegment(segment);
4079
2850
  }
4080
2851
  });
4081
- }), /*#__PURE__*/React.createElement(SegmentForm, {
4082
- childrenKeys: childrenKeys,
4083
- columns: columns,
4084
- customFilters: customFilters,
4085
- defaultSegmentName: defaultSegmentName,
4086
- filters: filters,
4087
- onClose: onClose,
4088
- segmentFormInitialRef: segmentFormInitialRef,
4089
- isEdit: true,
4090
- handleSubmit: handleUpdate,
4091
- initialValues: selectedSegment,
4092
- isOpen: isEditPaneOpen,
4093
- isSubmitting: isUpdating
4094
- }), /*#__PURE__*/React.createElement(Delete, {
4095
- columns: columns,
4096
- onClose: onClose,
4097
- isOpen: isDeleteAlertOpen,
4098
- segment: selectedSegment
4099
2852
  }));
4100
2853
  };
4101
2854
  var MenuBlocks$1 = /*#__PURE__*/React.memo(MenuBlocks);
4102
2855
 
4103
- var Segments = withT(function (_ref) {
4104
- var t = _ref.t,
4105
- entity = _ref.entity,
2856
+ var Segments = function Segments(_ref) {
2857
+ var entity = _ref.entity,
4106
2858
  columns = _ref.columns,
2859
+ _ref$setIsFilterPaneO = _ref.setIsFilterPaneOpen,
2860
+ setIsFilterPaneOpen = _ref$setIsFilterPaneO === void 0 ? noop : _ref$setIsFilterPaneO,
4107
2861
  _ref$defaultSegmentNa = _ref.defaultSegmentName,
4108
- defaultSegmentName = _ref$defaultSegmentNa === void 0 ? t("neetoFilters.common.allResults") : _ref$defaultSegmentNa,
4109
- customFilters = _ref.customFilters,
4110
- _ref$childrenKeys = _ref.childrenKeys,
4111
- childrenKeys = _ref$childrenKeys === void 0 ? [] : _ref$childrenKeys;
4112
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(MenuBar.SubTitle, null, /*#__PURE__*/React.createElement(Typography, {
4113
- component: "h4",
4114
- style: "h5",
4115
- textTransform: "uppercase",
4116
- weight: "bold"
4117
- }, t("neetoFilters.common.segments"))), /*#__PURE__*/React.createElement(MenuBlocks$1, {
4118
- childrenKeys: childrenKeys,
4119
- columns: columns,
4120
- customFilters: customFilters,
4121
- defaultSegmentName: defaultSegmentName,
4122
- entity: entity
4123
- }));
4124
- });
2862
+ defaultSegmentName = _ref$defaultSegmentNa === void 0 ? t$1("neetoFilters.common.allResults") : _ref$defaultSegmentNa;
2863
+ return function () {
2864
+ var _useState = useState(false),
2865
+ _useState2 = _slicedToArray(_useState, 2),
2866
+ isSegmentsPaneOpen = _useState2[0],
2867
+ setIsSegmentsPaneOpen = _useState2[1];
2868
+ var _useTranslation = useTranslation(),
2869
+ t = _useTranslation.t;
2870
+ var iconProps = [{
2871
+ icon: Settings,
2872
+ onClick: function onClick() {
2873
+ setIsFilterPaneOpen(false);
2874
+ setIsSegmentsPaneOpen(true);
2875
+ },
2876
+ tooltipProps: {
2877
+ content: t("neetoFilters.segments.manageSegments"),
2878
+ position: "top"
2879
+ }
2880
+ }];
2881
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(MenuBar.SubTitle, {
2882
+ iconProps: iconProps
2883
+ }, /*#__PURE__*/React.createElement(Typography, {
2884
+ component: "h4",
2885
+ style: "h5",
2886
+ textTransform: "uppercase",
2887
+ weight: "bold"
2888
+ }, t("neetoFilters.common.segments"))), /*#__PURE__*/React.createElement(MenuBlocks$1, {
2889
+ columns: columns,
2890
+ defaultSegmentName: defaultSegmentName,
2891
+ entity: entity
2892
+ }), /*#__PURE__*/React.createElement(ManagePane, {
2893
+ columns: columns,
2894
+ defaultSegmentName: defaultSegmentName,
2895
+ entity: entity,
2896
+ isOpen: isSegmentsPaneOpen,
2897
+ onClose: function onClose() {
2898
+ return setIsSegmentsPaneOpen(false);
2899
+ }
2900
+ }));
2901
+ }();
2902
+ };
4125
2903
  var index = /*#__PURE__*/React.memo(Segments);
4126
2904
 
4127
2905
  export { Bar, Filters, index as Segments, buildFilterColumnsFromFields, buildFiltersFromURL, buildSelectorsFromURL, buildUrlFromFilters, buildUrlFromSegment, useDestroySegment, useFetchSegments, useUpdateSegment };