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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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-600",
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,132 @@ 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;
1429
+ }
1430
+ if (childrenKeys.includes(key)) {
1431
+ var _params = omit([key], getSnakeCasedQueryParams());
1432
+ var _pathname = window.location.pathname;
1433
+ history.push(buildUrl(_pathname, _params));
2622
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
+ }), /*#__PURE__*/React.createElement("div", {
1493
+ className: "flex items-center gap-x-2"
1494
+ }, isNotNil(entity) && /*#__PURE__*/React.createElement(Segment, {
1495
+ childrenKeys: childrenKeys,
1496
+ columns: columns,
1497
+ defaultSegmentName: defaultSegmentName,
1498
+ entity: entity,
1499
+ filters: filters,
1500
+ setIsFilterPaneOpen: setIsPaneOpen
1501
+ }), !hideClearButton && /*#__PURE__*/React.createElement(Button, {
1502
+ "data-cy": "neeto-filters-bar-clear-btn",
1503
+ label: t("neetoFilters.common.clearFilters"),
1504
+ style: "text",
1505
+ onClick: handleClearAll
1506
+ })));
1507
+ }();
2629
1508
  };
2630
1509
 
2631
1510
  function _extends() {
@@ -2656,940 +1535,840 @@ function _objectWithoutPropertiesLoose(source, excluded) {
2656
1535
  return target;
2657
1536
  }
2658
1537
 
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);
1538
+ function _objectWithoutProperties(source, excluded) {
1539
+ if (source == null) return {};
1540
+ var target = _objectWithoutPropertiesLoose(source, excluded);
1541
+ var key, i;
1542
+ if (Object.getOwnPropertySymbols) {
1543
+ var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
1544
+ for (i = 0; i < sourceSymbolKeys.length; i++) {
1545
+ key = sourceSymbolKeys[i];
1546
+ if (excluded.indexOf(key) >= 0) continue;
1547
+ if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
1548
+ target[key] = source[key];
1549
+ }
1550
+ }
1551
+ return target;
2693
1552
  }
2694
1553
 
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
- */
1554
+ var useFilters = function useFilters(_ref) {
1555
+ var onFiltersChange = _ref.onFiltersChange,
1556
+ columns = _ref.columns,
1557
+ keywordFilter = _ref.keywordFilter,
1558
+ onSelectorsChange = _ref.onSelectorsChange;
1559
+ var _useTransition = useTransition(),
1560
+ _useTransition2 = _slicedToArray(_useTransition, 2);
1561
+ _useTransition2[0];
1562
+ var startTransition = _useTransition2[1];
1563
+ var initialRender = useRef(true);
1564
+ var prevFilters = useRef([]);
1565
+ var location = useLocation();
1566
+ var filters = buildFiltersFromSearchParams(columns, false);
1567
+ var history = useHistory();
1568
+ var defaultValuesOfColumns = JSON.stringify(pluck("defaultValue", columns));
1569
+ var handlePrecenseOfDefaultFilters = function handlePrecenseOfDefaultFilters(defaultFilters) {
1570
+ var params = buildUrlFromFilters({
1571
+ columns: columns,
1572
+ filters: isKeywordFilterPresent(keywordFilter) && isNotEmpty(getSearchTermFromUrl()) ? [].concat(_toConsumableArray(defaultFilters), [keywordFilter]) : defaultFilters
1573
+ });
1574
+ history.replace({
1575
+ search: params
1576
+ });
1577
+ };
1578
+ var handleFiltersChange = function handleFiltersChange(filtersPayload) {
1579
+ startTransition(function () {
1580
+ onFiltersChange(buildFiltersPayload(filtersPayload.filter(function (filter) {
1581
+ return !isNil(filter.node);
1582
+ })));
1583
+ });
1584
+ };
2704
1585
 
1586
+ //This function sends the updated filters to host via callbacks.
1587
+ var sendUpdatedFilters = function sendUpdatedFilters() {
1588
+ if (compareFilters(append(keywordFilter, filters), prevFilters.current)) {
1589
+ return;
1590
+ }
1591
+ var newFilters = buildFiltersFromSearchParams(columns);
1592
+ var filtersPayload = isKeywordFilterPresent(keywordFilter) && isNotEmpty(getSearchTermFromUrl()) ? append(keywordFilter, newFilters) : newFilters;
1593
+ handleFiltersChange(filtersPayload);
1594
+ onSelectorsChange(buildSelectorsFromURL(columns));
1595
+ };
1596
+ var handleChangesInURL = function handleChangesInURL() {
1597
+ var defaultFilters = buildDefaultFilters(columns, filters);
1598
+ var searchParams = getSnakeCasedQueryParams();
1599
+ var keys = pluck("key", append(keywordFilter, columns));
1600
+ if (keys.every(function (key) {
1601
+ return isNil(searchParams[key]);
1602
+ }) && !isEmpty(defaultFilters)) {
1603
+ history.replace({
1604
+ search: buildUrlFromFilters({
1605
+ columns: columns,
1606
+ filters: concat(defaultFilters, filters)
1607
+ })
1608
+ });
1609
+ filters = buildFiltersFromSearchParams(columns, false);
1610
+ }
1611
+ };
1612
+ useEffect(function () {
1613
+ if (initialRender.current) {
1614
+ initialRender.current = false;
1615
+ var keywordValue = getSearchTermFromUrl();
1616
+ var defaultFilters = buildDefaultFilters(columns, filters);
1617
+ isNotEmpty(defaultFilters) && handlePrecenseOfDefaultFilters(defaultFilters);
1618
+ prevFilters.current = append(mergeRight(keywordFilter, {
1619
+ value: keywordValue
1620
+ }), filters);
1621
+ } else {
1622
+ handleChangesInURL();
1623
+ sendUpdatedFilters();
1624
+ prevFilters.current = append(keywordFilter, filters);
1625
+ }
1626
+ }, [location.search, defaultValuesOfColumns]);
1627
+ return filters;
1628
+ };
2705
1629
 
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));
1630
+ var buildDropdownValue = function buildDropdownValue(_ref) {
1631
+ var defaultType = _ref.defaultType,
1632
+ filter = _ref.filter,
1633
+ options = _ref.options;
1634
+ if (!filter) return null;
1635
+ if (isMulti(defaultType)) {
1636
+ return options.filter(function (_ref2) {
1637
+ var value = _ref2.value;
1638
+ return filter.value.includes(value);
1639
+ });
1640
+ }
1641
+ return findBy({
1642
+ value: filter.value
1643
+ }, options);
1644
+ };
1645
+ var buildSingleTimeValue = function buildSingleTimeValue(filter) {
1646
+ var _findBy2;
1647
+ if (!filter) return null;
1648
+ return (_findBy2 = findBy({
1649
+ value: filter.value
1650
+ }, TIME_OPTIONS)) !== null && _findBy2 !== void 0 ? _findBy2 : last(TIME_OPTIONS);
1651
+ };
1652
+ var getOtherProps = function getOtherProps(props) {
1653
+ return omit(["key", "node", "label", "type", "values", "model", "showRuleSelector"], props);
1654
+ };
1655
+ var buildDropdownOptions = function buildDropdownOptions(_ref3) {
1656
+ var defaultType = _ref3.defaultType,
1657
+ filter = _ref3.filter,
1658
+ options = _ref3.options;
1659
+ options = options.map(modify("value", function (value) {
1660
+ return value === null || value === void 0 ? void 0 : value.toString();
1661
+ }));
1662
+ if (!filter) return options;
1663
+ if (isMulti(defaultType)) {
1664
+ var selectedOptions = filter.value.map(function (value) {
1665
+ return findBy({
1666
+ value: value
1667
+ }, options) || toLabelAndValue(value);
1668
+ });
1669
+ var nonSelectedOptions = options.filter(function (option) {
1670
+ return !filter.value.includes(option.value);
1671
+ });
1672
+ return concat(selectedOptions, nonSelectedOptions);
1673
+ }
1674
+ if (!findBy({
1675
+ value: filter.value
1676
+ }, options)) {
1677
+ return append(toLabelAndValue(filter.value), options);
1678
+ }
1679
+ return options;
1680
+ };
1681
+ var initializeDateRule = function initializeDateRule(filter) {
1682
+ return filter ? findBy({
1683
+ value: filter === null || filter === void 0 ? void 0 : filter.value
1684
+ }, DATE_OPTIONS) || findDateOption(filter, DATE_OPTIONS) : {};
1685
+ };
1686
+ var getDateValue = function getDateValue(value, rule) {
1687
+ if (isEmpty(value) || isNil(value)) {
1688
+ return null;
1689
+ }
1690
+ if (rule.value === "custom-date-range") {
1691
+ return value;
1692
+ }
1693
+ return rule.value === "before" ? dayjs(value[1]).add(1, "day") : dayjs(value[0]).subtract(1, "day");
1694
+ };
1695
+ var findDateOption = function findDateOption(filter, options) {
1696
+ var value = filter.value;
1697
+ var isBeforeOrAfter = dayjs(value[1]).diff(dayjs(value[0]), "year") >= 90;
1698
+ if (not(isBeforeOrAfter)) {
1699
+ return last(options);
1700
+ }
1701
+ var currentMoment = dayjs();
1702
+ var diffWithStart = Math.abs(currentMoment.diff(dayjs(value[0]), "year"));
1703
+ var diffWithEnd = Math.abs(currentMoment.diff(dayjs(value[1]), "year"));
1704
+ return diffWithStart < diffWithEnd ? findBy({
1705
+ value: "after"
1706
+ }, options) : findBy({
1707
+ value: "before"
1708
+ }, options);
1709
+ };
1710
+ var buildDateValues = function buildDateValues(dates, selectedRule) {
1711
+ if (selectedRule.value === "after") {
1712
+ return [dates.add(1, "day"), dates.add(100, "year")];
1713
+ } else if (selectedRule.value === "before") {
1714
+ return [dates.subtract(100, "year"), dates.subtract(1, "day")];
2713
1715
  }
2714
- }
2715
-
2716
- var config = {
2717
- disabled: false
1716
+ return dates;
2718
1717
  };
2719
-
2720
- var TransitionGroupContext = React.createContext(null);
2721
-
2722
- var forceReflow = function forceReflow(node) {
2723
- return node.scrollTop;
1718
+ var buildHelpIconProps = function buildHelpIconProps(helpIconProps) {
1719
+ return mergeDeepRight(DEFAULT_HELP_ICON_PROPS, helpIconProps);
2724
1720
  };
2725
1721
 
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
- };
1722
+ var Boolean = function Boolean(_ref) {
1723
+ var column = _ref.column,
1724
+ filter = _ref.filter,
1725
+ handleApplyFilter = _ref.handleApplyFilter,
1726
+ autoFocus = _ref.autoFocus;
1727
+ var key = column.key,
1728
+ _column$defaultType = column.defaultType,
1729
+ defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
1730
+ label = column.label,
1731
+ values = column.values,
1732
+ _column$helpIconProps = column.helpIconProps,
1733
+ helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
1734
+ var options = isNil(values) || isEmpty(values) ? DEFAULT_BOOLEAN_OPTIONS : values;
1735
+ var otherProps = getOtherProps(column);
1736
+ var value = buildDropdownValue({
1737
+ defaultType: defaultType,
1738
+ filter: filter,
1739
+ options: options
1740
+ });
1741
+ var _useTranslation = useTranslation(),
1742
+ t = _useTranslation.t;
1743
+ var handleChange = function handleChange(option) {
1744
+ if (isEmpty(option) || isNil(option)) {
1745
+ handleApplyFilter({
1746
+ _delete: true
1747
+ });
1748
+ return;
2865
1749
  }
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);
1750
+ var updatedFilter = buildUpdatedFilter({
1751
+ column: column,
1752
+ defaultType: defaultType,
1753
+ option: option
1754
+ });
1755
+ handleApplyFilter(updatedFilter);
2890
1756
  };
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
- }
1757
+ return /*#__PURE__*/React.createElement("div", {
1758
+ className: "neeto-filters-pane-filter__item-wrapper"
1759
+ }, /*#__PURE__*/React.createElement(Select, _extends({
1760
+ autoFocus: autoFocus,
1761
+ label: label,
1762
+ options: options,
1763
+ value: value,
1764
+ isClearable: true
1765
+ }, isNotEmpty(helpIconProps) && {
1766
+ labelProps: {
1767
+ helpIconProps: buildHelpIconProps(helpIconProps)
2907
1768
  }
1769
+ }, {
1770
+ "data-cy": "neeto-filters-".concat(hyphenate(key), "-filter"),
1771
+ strategy: "fixed",
1772
+ placeholder: t("neetoFilters.messages.selectOption", {
1773
+ resource: label
1774
+ }),
1775
+ onChange: handleChange
1776
+ }, otherProps)));
1777
+ };
1778
+ var Boolean$1 = /*#__PURE__*/React.memo(Boolean);
2908
1779
 
2909
- this.updateStatus(false, nextStatus);
2910
- };
2911
-
2912
- _proto.componentWillUnmount = function componentWillUnmount() {
2913
- this.cancelNextCallback();
1780
+ var Datetime = function Datetime(_ref) {
1781
+ var column = _ref.column,
1782
+ filter = _ref.filter,
1783
+ handleApplyFilter = _ref.handleApplyFilter,
1784
+ autoFocus = _ref.autoFocus;
1785
+ var _useState = useState(initializeDateRule(filter)),
1786
+ _useState2 = _slicedToArray(_useState, 2),
1787
+ selectedRule = _useState2[0],
1788
+ setSelectedRule = _useState2[1];
1789
+ var _useTranslation = useTranslation(),
1790
+ t = _useTranslation.t;
1791
+ var key = column.key,
1792
+ _column$defaultType = column.defaultType,
1793
+ defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
1794
+ label = column.label,
1795
+ _column$helpIconProps = column.helpIconProps,
1796
+ helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
1797
+ var isDatePickerShown = filter && isCustomDateRange(filter.value);
1798
+ var otherProps = getOtherProps(column);
1799
+ var handleChange = function handleChange(option) {
1800
+ if (isEmpty(option) || isNil(option)) {
1801
+ handleApplyFilter({
1802
+ _delete: true
1803
+ });
1804
+ setSelectedRule({});
1805
+ return;
1806
+ }
1807
+ setSelectedRule(option);
1808
+ var updatedFilter = buildUpdatedFilter({
1809
+ column: column,
1810
+ defaultType: defaultType,
1811
+ option: option
1812
+ });
1813
+ handleApplyFilter(updatedFilter);
2914
1814
  };
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;
1815
+ var handleDateRangeChange = function handleDateRangeChange(dates) {
1816
+ if (isEmpty(dates) || isNil(dates)) {
1817
+ handleApplyFilter({
1818
+ _delete: true
1819
+ });
1820
+ setSelectedRule({});
1821
+ return;
2926
1822
  }
2927
-
2928
- return {
2929
- exit: exit,
2930
- enter: enter,
2931
- appear: appear
2932
- };
1823
+ var updatedFilter = buildUpdatedFilter({
1824
+ column: column,
1825
+ defaultType: defaultType,
1826
+ option: {
1827
+ value: pluck("$d", buildDateValues(dates, selectedRule)).map(function (date) {
1828
+ return date.toISOString();
1829
+ })
1830
+ }
1831
+ });
1832
+ handleApplyFilter(updatedFilter);
2933
1833
  };
2934
-
2935
- _proto.updateStatus = function updateStatus(mounting, nextStatus) {
2936
- if (mounting === void 0) {
2937
- mounting = false;
1834
+ useEffect(function () {
1835
+ isNil(filter) && setSelectedRule({});
1836
+ }, [filter]);
1837
+ return /*#__PURE__*/React.createElement("div", {
1838
+ className: "neeto-filters-pane-filter__item-wrapper"
1839
+ }, /*#__PURE__*/React.createElement(Select, _extends({
1840
+ autoFocus: autoFocus,
1841
+ label: label,
1842
+ isClearable: true,
1843
+ "data-cy": "neeto-filters-".concat(hyphenate(key), "-filter"),
1844
+ options: DATE_OPTIONS,
1845
+ strategy: "fixed",
1846
+ value: selectedRule,
1847
+ placeholder: t("neetoFilters.messages.selectResource", {
1848
+ resource: label
1849
+ })
1850
+ }, isNotEmpty(helpIconProps) && {
1851
+ labelProps: {
1852
+ helpIconProps: buildHelpIconProps(helpIconProps)
2938
1853
  }
1854
+ }, {
1855
+ onChange: handleChange
1856
+ })), isDatePickerShown && /*#__PURE__*/React.createElement(DatePicker, _extends({
1857
+ "data-cy": "neeto-filters-".concat(hyphenate(key), "-date-range"),
1858
+ getPopupContainer: prop("parentNode"),
1859
+ type: (selectedRule === null || selectedRule === void 0 ? void 0 : selectedRule.value) === "custom-date-range" ? "range" : "date",
1860
+ value: getDateValue(filter === null || filter === void 0 ? void 0 : filter.value, selectedRule),
1861
+ onChange: handleDateRangeChange
1862
+ }, otherProps)));
1863
+ };
1864
+ var Datetime$1 = /*#__PURE__*/React.memo(Datetime);
2939
1865
 
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
1866
+ var Dropdown = function Dropdown(_ref) {
1867
+ var column = _ref.column,
1868
+ filter = _ref.filter,
1869
+ handleApplyFilter = _ref.handleApplyFilter,
1870
+ autoFocus = _ref.autoFocus;
1871
+ var key = column.key,
1872
+ label = column.label,
1873
+ values = column.values,
1874
+ defaultValue = column.defaultValue,
1875
+ _column$defaultType = column.defaultType,
1876
+ defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
1877
+ _column$isClearable = column.isClearable,
1878
+ isClearable = _column$isClearable === void 0 ? true : _column$isClearable,
1879
+ _column$helpIconProps = column.helpIconProps,
1880
+ helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
1881
+ var otherProps = getOtherProps(column);
1882
+ var options = buildDropdownOptions({
1883
+ defaultType: defaultType,
1884
+ filter: filter,
1885
+ options: values
1886
+ });
1887
+ var value = buildDropdownValue({
1888
+ defaultType: defaultType,
1889
+ filter: filter,
1890
+ options: options
1891
+ });
1892
+ var _useTranslation = useTranslation(),
1893
+ t = _useTranslation.t;
1894
+ var handleChange = function handleChange(option) {
1895
+ if (isEmpty(option) || isNil(option)) {
1896
+ handleApplyFilter({
1897
+ _delete: true
2960
1898
  });
1899
+ return;
2961
1900
  }
1901
+ var updatedFilter = buildUpdatedFilter({
1902
+ column: column,
1903
+ defaultType: defaultType,
1904
+ option: option
1905
+ });
1906
+ handleApplyFilter(updatedFilter);
2962
1907
  };
1908
+ return /*#__PURE__*/React.createElement("div", {
1909
+ className: "neeto-filters-pane-filter__item-wrapper"
1910
+ }, /*#__PURE__*/React.createElement(Select, _extends({
1911
+ autoFocus: autoFocus,
1912
+ label: label,
1913
+ options: options,
1914
+ value: value,
1915
+ "data-cy": "neeto-filters-".concat(hyphenate(key), "-filter"),
1916
+ isClearable: !defaultValue && isClearable,
1917
+ isMulti: isMulti(defaultType),
1918
+ strategy: "fixed",
1919
+ placeholder: t("neetoFilters.messages.selectResource", {
1920
+ resource: label
1921
+ })
1922
+ }, isNotEmpty(helpIconProps) && {
1923
+ labelProps: {
1924
+ helpIconProps: buildHelpIconProps(helpIconProps)
1925
+ }
1926
+ }, {
1927
+ onChange: handleChange
1928
+ }, otherProps)));
1929
+ };
1930
+ var Dropdown$1 = /*#__PURE__*/React.memo(Dropdown);
2963
1931
 
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];
1932
+ var SingleDatetime = function SingleDatetime(_ref) {
1933
+ var column = _ref.column,
1934
+ filter = _ref.filter,
1935
+ filters = _ref.filters,
1936
+ handleApplyFilter = _ref.handleApplyFilter,
1937
+ autoFocus = _ref.autoFocus;
1938
+ var _useState = useState(function () {
1939
+ return findBy({
1940
+ value: filter === null || filter === void 0 ? void 0 : filter.rule
1941
+ }, SINGLE_DATE_OPTIONS) || SINGLE_DATE_OPTIONS[0];
1942
+ }),
1943
+ _useState2 = _slicedToArray(_useState, 2),
1944
+ selectedRule = _useState2[0],
1945
+ setSelectedRule = _useState2[1];
1946
+ var key = column.key,
1947
+ _column$defaultType = column.defaultType,
1948
+ defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
1949
+ label = column.label,
1950
+ _column$helpIconProps = column.helpIconProps,
1951
+ helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
1952
+ var otherProps = getOtherProps(column);
1953
+ var datePickerType = selectedRule.value === "between" ? "range" : "date";
1954
+ var value = filter === null || filter === void 0 ? void 0 : filter.value;
2973
1955
 
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
1956
+ // Reset states when "Clear filters" button is clicked.
1957
+ useEffect(function () {
1958
+ if (!isEmpty(filters)) return;
1959
+ setSelectedRule(SINGLE_DATE_OPTIONS[0]);
1960
+ }, [filters]);
1961
+ var handleRuleChange = function handleRuleChange(ruleOption) {
1962
+ setSelectedRule(ruleOption);
2977
1963
 
2978
- if (!mounting && !enter || config.disabled) {
2979
- this.safeSetState({
2980
- status: ENTERED
2981
- }, function () {
2982
- _this2.props.onEntered(maybeNode);
2983
- });
2984
- return;
1964
+ // Clear value if switched between incompatable types
1965
+ var updateValue = value;
1966
+ if (datePickerType === "range" && ruleOption.value !== "between" || datePickerType === "date" && ruleOption.value === "between") {
1967
+ updateValue = "";
2985
1968
  }
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
- });
1969
+ var updatedFilter = buildUpdatedFilter({
1970
+ column: column,
1971
+ defaultType: defaultType,
1972
+ option: {},
1973
+ rule: ruleOption.value,
1974
+ value: updateValue
3000
1975
  });
1976
+ handleApplyFilter(updatedFilter);
3001
1977
  };
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);
1978
+ var handleChange = function handleChange(dates) {
1979
+ if (isEmpty(dates) || isNil(dates)) {
1980
+ handleApplyFilter({
1981
+ _delete: true
3015
1982
  });
3016
1983
  return;
3017
1984
  }
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
- });
1985
+ var value = datePickerType === "range" ? pluck("$d", dates).map(function (date) {
1986
+ return date.toISOString();
1987
+ }) : dates["$d"];
1988
+ var updatedFilter = buildUpdatedFilter({
1989
+ column: column,
1990
+ defaultType: defaultType,
1991
+ option: {},
1992
+ rule: selectedRule.value,
1993
+ value: value
3032
1994
  });
1995
+ handleApplyFilter(updatedFilter);
3033
1996
  };
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;
1997
+ return /*#__PURE__*/React.createElement("div", {
1998
+ className: "neeto-filters-pane-filter__item-wrapper"
1999
+ }, /*#__PURE__*/React.createElement(Select, _extends({
2000
+ label: label,
2001
+ "data-cy": "neeto-filters-".concat(hyphenate(key), "-filter-rule"),
2002
+ defaultValue: SINGLE_DATE_OPTIONS[0],
2003
+ options: SINGLE_DATE_OPTIONS,
2004
+ strategy: "fixed",
2005
+ value: selectedRule
2006
+ }, isNotEmpty(helpIconProps) && {
2007
+ labelProps: {
2008
+ helpIconProps: buildHelpIconProps(helpIconProps)
3078
2009
  }
2010
+ }, {
2011
+ onChange: handleRuleChange
2012
+ })), /*#__PURE__*/React.createElement(DatePicker, _extends({
2013
+ autoFocus: autoFocus,
2014
+ value: value,
2015
+ "data-cy": "neeto-filters-".concat(hyphenate(key), "-filter"),
2016
+ getPopupContainer: prop("parentNode"),
2017
+ type: datePickerType,
2018
+ onChange: handleChange
2019
+ }, otherProps)));
2020
+ };
3079
2021
 
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
- }
2022
+ var SingleTime = function SingleTime(_ref) {
2023
+ var column = _ref.column,
2024
+ filter = _ref.filter,
2025
+ filters = _ref.filters,
2026
+ handleApplyFilter = _ref.handleApplyFilter,
2027
+ autoFocus = _ref.autoFocus;
2028
+ var _useState = useState(function () {
2029
+ return findBy({
2030
+ value: filter === null || filter === void 0 ? void 0 : filter.rule
2031
+ }, SINGLE_TIME_OPTIONS) || SINGLE_TIME_OPTIONS[0];
2032
+ }),
2033
+ _useState2 = _slicedToArray(_useState, 2),
2034
+ selectedRule = _useState2[0],
2035
+ setSelectedRule = _useState2[1];
2036
+ var key = column.key,
2037
+ _column$defaultType = column.defaultType,
2038
+ defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
2039
+ label = column.label,
2040
+ _column$helpIconProps = column.helpIconProps,
2041
+ helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
2042
+ var otherProps = getOtherProps(column);
2043
+ var timePickerType = selectedRule.value === "between" ? "range" : "time";
2044
+ var value = filter === null || filter === void 0 ? void 0 : filter.value;
2045
+ useEffect(function () {
2046
+ if (!isEmpty(filters)) return;
2047
+ setSelectedRule(SINGLE_TIME_OPTIONS[0]);
2048
+ }, [filters]);
2049
+ var handleRuleChange = function handleRuleChange(ruleOption) {
2050
+ setSelectedRule(ruleOption);
3087
2051
 
3088
- if (timeout != null) {
3089
- setTimeout(this.nextCallback, timeout);
2052
+ // Clear value if switched between incompatible types
2053
+ var updateValue = value;
2054
+ if (timePickerType === "range" && ruleOption.value !== "between" || timePickerType === "time" && ruleOption.value === "between") {
2055
+ updateValue = "";
3090
2056
  }
2057
+ var updatedFilter = buildUpdatedFilter({
2058
+ column: column,
2059
+ defaultType: defaultType,
2060
+ option: {},
2061
+ rule: ruleOption.value,
2062
+ value: updateValue
2063
+ });
2064
+ handleApplyFilter(updatedFilter);
3091
2065
  };
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
- );
2066
+ var handleChange = function handleChange(times) {
2067
+ var value = timePickerType === "range" ? pluck("$d", times).map(function (time) {
2068
+ return time.toISOString();
2069
+ }) : times["$d"].toISOString();
2070
+ var updatedFilter = buildUpdatedFilter({
2071
+ column: column,
2072
+ defaultType: defaultType,
2073
+ option: {},
2074
+ rule: selectedRule.value,
2075
+ value: value
2076
+ });
2077
+ handleApplyFilter(updatedFilter);
3126
2078
  };
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);
2079
+ return /*#__PURE__*/React.createElement("div", {
2080
+ className: "neeto-filters-pane-filter__item-wrapper"
2081
+ }, /*#__PURE__*/React.createElement(Select, _extends({
2082
+ label: label,
2083
+ defaultValue: SINGLE_TIME_OPTIONS[0],
2084
+ options: SINGLE_TIME_OPTIONS,
2085
+ strategy: "fixed",
2086
+ value: selectedRule
2087
+ }, isNotEmpty(helpIconProps) && {
2088
+ labelProps: {
2089
+ helpIconProps: buildHelpIconProps(helpIconProps)
3377
2090
  }
2091
+ }, {
2092
+ onChange: handleRuleChange
2093
+ })), /*#__PURE__*/React.createElement(TimePicker, _extends({
2094
+ autoFocus: autoFocus,
2095
+ value: value,
2096
+ use12Hours: true,
2097
+ className: "w-full",
2098
+ "data-cy": "neeto-filters-".concat(hyphenate(key), "-filter"),
2099
+ format: "h:mm A",
2100
+ getPopupContainer: prop("parentNode"),
2101
+ type: timePickerType,
2102
+ onChange: handleChange
2103
+ }, otherProps)));
2104
+ };
3378
2105
 
3379
- if (className) {
3380
- this.appliedClasses[type][phase] = className;
3381
-
3382
- _addClass(node, className);
3383
- }
2106
+ var Text = function Text(_ref) {
2107
+ var column = _ref.column,
2108
+ filter = _ref.filter,
2109
+ filters = _ref.filters,
2110
+ handleApplyFilter = _ref.handleApplyFilter,
2111
+ autoFocus = _ref.autoFocus,
2112
+ onClose = _ref.onClose;
2113
+ var key = column.key,
2114
+ _column$defaultType = column.defaultType,
2115
+ defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
2116
+ label = column.label,
2117
+ _column$showRuleSelec = column.showRuleSelector,
2118
+ showRuleSelector = _column$showRuleSelec === void 0 ? false : _column$showRuleSelec,
2119
+ _column$helpIconProps = column.helpIconProps,
2120
+ helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
2121
+ var otherProps = getOtherProps(column);
2122
+ var ruleOptions = buildRuleOptions({
2123
+ defaultType: defaultType
2124
+ });
2125
+ var inputType = defaultType === "text" || defaultType === "custom.text" ? "text" : "number";
2126
+ var _useState = useState(filter === null || filter === void 0 ? void 0 : filter.value),
2127
+ _useState2 = _slicedToArray(_useState, 2),
2128
+ inputValue = _useState2[0],
2129
+ setInputValue = _useState2[1];
2130
+ var _useState3 = useState(function () {
2131
+ return findBy({
2132
+ value: filter === null || filter === void 0 ? void 0 : filter.rule
2133
+ }, ruleOptions) || ruleOptions[0];
2134
+ }),
2135
+ _useState4 = _slicedToArray(_useState3, 2),
2136
+ selectedRule = _useState4[0],
2137
+ setSelectedRule = _useState4[1];
2138
+ var debouncedInputValue = useDebounce(inputValue);
2139
+ var _useTranslation = useTranslation(),
2140
+ t = _useTranslation.t;
2141
+ var handleUpdateAndApplyFilter = function handleUpdateAndApplyFilter() {
2142
+ var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : debouncedInputValue;
2143
+ var rule = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : selectedRule;
2144
+ if (equals(filter === null || filter === void 0 ? void 0 : filter.value, value) && equals(selectedRule, rule)) return;
2145
+ var updatedFilter = buildUpdatedFilter({
2146
+ column: column,
2147
+ defaultType: defaultType,
2148
+ option: {},
2149
+ rule: rule.value,
2150
+ value: value.trim()
2151
+ });
2152
+ handleApplyFilter(updatedFilter);
2153
+ };
2154
+ var handleKeydown = function handleKeydown(e) {
2155
+ if (!(e.key === "Enter")) return;
2156
+ handleUpdateAndApplyFilter(inputValue);
2157
+ onClose();
2158
+ };
2159
+ var handleRuleChange = function handleRuleChange(ruleOption) {
2160
+ setSelectedRule(ruleOption);
2161
+ if (!debouncedInputValue) return;
2162
+ handleUpdateAndApplyFilter(debouncedInputValue, ruleOption);
3384
2163
  };
3385
2164
 
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);
2165
+ // Reset states when "Clear filters" button is clicked.
2166
+ useEffect(function () {
2167
+ (isEmpty(filters) || isNil(filter)) && setInputValue("");
2168
+ }, [filter]);
2169
+ useEffect(function () {
2170
+ if (!debouncedInputValue) {
2171
+ !isUndefinedOrEmpty(filter) && handleApplyFilter({
2172
+ _delete: true
2173
+ });
2174
+ return;
3395
2175
  }
3396
-
3397
- if (activeClassName) {
3398
- removeClass(node, activeClassName);
2176
+ handleUpdateAndApplyFilter();
2177
+ }, [debouncedInputValue]);
2178
+ return /*#__PURE__*/React.createElement("div", {
2179
+ className: "neeto-filters-pane-filter__item-wrapper"
2180
+ }, showRuleSelector && /*#__PURE__*/React.createElement(Select, _extends({
2181
+ label: label,
2182
+ "data-cy": "neeto-filters-".concat(hyphenate(key), "-filter-rule"),
2183
+ defaultValue: ruleOptions[0],
2184
+ options: ruleOptions,
2185
+ strategy: "fixed",
2186
+ value: selectedRule,
2187
+ onChange: handleRuleChange
2188
+ }, isNotEmpty(helpIconProps) && {
2189
+ labelProps: {
2190
+ helpIconProps: buildHelpIconProps(helpIconProps)
2191
+ }
2192
+ })), /*#__PURE__*/React.createElement(Input$1, _extends({
2193
+ autoFocus: autoFocus,
2194
+ "data-cy": "neeto-filters-".concat(hyphenate(key), "-filter"),
2195
+ label: !showRuleSelector && label,
2196
+ type: inputType,
2197
+ value: inputValue
2198
+ }, isNotEmpty(helpIconProps) && {
2199
+ labelProps: {
2200
+ helpIconProps: buildHelpIconProps(helpIconProps)
3399
2201
  }
2202
+ }, {
2203
+ placeholder: t("neetoFilters.messages.enterResource", {
2204
+ resource: label
2205
+ }),
2206
+ onChange: function onChange(event) {
2207
+ return setInputValue(event.target.value);
2208
+ },
2209
+ onKeyDown: handleKeydown
2210
+ }, otherProps)));
2211
+ };
3400
2212
 
3401
- if (doneClassName) {
3402
- removeClass(node, doneClassName);
2213
+ var Time = function Time(_ref) {
2214
+ var column = _ref.column,
2215
+ filter = _ref.filter,
2216
+ handleApplyFilter = _ref.handleApplyFilter,
2217
+ autoFocus = _ref.autoFocus;
2218
+ var key = column.key,
2219
+ _column$defaultType = column.defaultType,
2220
+ defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
2221
+ label = column.label,
2222
+ _column$helpIconProps = column.helpIconProps,
2223
+ helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
2224
+ var otherProps = getOtherProps(column);
2225
+ var value = buildSingleTimeValue(filter);
2226
+ var isCustomTimeRangeShown = filter && isCustomTimeRange(filter.value);
2227
+ var _useTranslation = useTranslation(),
2228
+ t = _useTranslation.t;
2229
+ var handleChange = function handleChange(option) {
2230
+ if (isEmpty(option) || isNil(option)) {
2231
+ handleApplyFilter({
2232
+ _delete: true
2233
+ });
2234
+ return;
3403
2235
  }
2236
+ var updatedFilter = buildUpdatedFilter({
2237
+ column: column,
2238
+ defaultType: defaultType,
2239
+ option: option
2240
+ });
2241
+ handleApplyFilter(updatedFilter);
3404
2242
  };
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
- }));
2243
+ var handleTimeRangeChange = function handleTimeRangeChange(times) {
2244
+ var updatedFilter = buildUpdatedFilter({
2245
+ column: column,
2246
+ defaultType: defaultType,
2247
+ option: {
2248
+ value: pluck("$d", times).map(function (time) {
2249
+ return time.toISOString();
2250
+ })
2251
+ }
2252
+ });
2253
+ handleApplyFilter(updatedFilter);
3419
2254
  };
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
2255
  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))));
2256
+ className: "neeto-filters-pane-filter__item-wrapper"
2257
+ }, /*#__PURE__*/React.createElement(Select, _extends({
2258
+ autoFocus: autoFocus,
2259
+ label: label,
2260
+ value: value,
2261
+ isClearable: true,
2262
+ "data-cy": "neeto-filters-".concat(hyphenate(key), "-filter"),
2263
+ options: TIME_OPTIONS,
2264
+ strategy: "fixed",
2265
+ placeholder: t("neetoFilters.messages.selectResource", {
2266
+ resource: label
2267
+ })
2268
+ }, isNotEmpty(helpIconProps) && {
2269
+ labelProps: {
2270
+ helpIconProps: buildHelpIconProps(helpIconProps)
2271
+ }
2272
+ }, {
2273
+ onChange: handleChange
2274
+ })), isCustomTimeRangeShown && /*#__PURE__*/React.createElement(TimePicker, _extends({
2275
+ use12Hours: true,
2276
+ "data-cy": "neeto-filters-".concat(hyphenate(key), "-date-range"),
2277
+ format: "h:mm A",
2278
+ getPopupContainer: prop("parentNode"),
2279
+ type: "range",
2280
+ value: filter.value,
2281
+ onChange: handleTimeRangeChange
2282
+ }, otherProps)));
3506
2283
  };
3507
- Slider.Header = Header;
3508
- Slider.Body = Body;
3509
- Slider.Footer = Footer;
2284
+ var Time$1 = /*#__PURE__*/React.memo(Time);
3510
2285
 
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
2286
+ var Item = function Item(_ref) {
2287
+ var column = _ref.column,
2288
+ filters = _ref.filters,
2289
+ onChange = _ref.onChange,
2290
+ autoFocus = _ref.autoFocus,
2291
+ onClose = _ref.onClose;
2292
+ var key = column.key,
2293
+ _column$defaultType = column.defaultType,
2294
+ defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType;
2295
+ var filter = useMemo(function () {
2296
+ return findBy({
2297
+ key: key
2298
+ }, filters);
2299
+ }, [filters, key]);
2300
+ var handleApplyFilter = function handleApplyFilter(updatedFilter) {
2301
+ if (updatedFilter._delete) onChange(removeBy({
2302
+ key: key
2303
+ }, filters));else if (!filter) onChange(append(updatedFilter, filters));else onChange(replaceBy({
2304
+ key: key
2305
+ }, updatedFilter, filters));
2306
+ };
2307
+ if (isText(defaultType) || isDigit(defaultType)) {
2308
+ return /*#__PURE__*/React.createElement(Text, {
2309
+ autoFocus: autoFocus,
2310
+ column: column,
2311
+ filter: filter,
2312
+ filters: filters,
2313
+ handleApplyFilter: handleApplyFilter,
2314
+ onClose: onClose
2315
+ });
2316
+ }
2317
+ if (isDate(defaultType)) {
2318
+ return /*#__PURE__*/React.createElement(Datetime$1, {
2319
+ autoFocus: autoFocus,
2320
+ column: column,
2321
+ filter: filter,
2322
+ handleApplyFilter: handleApplyFilter
2323
+ });
2324
+ }
2325
+ if (isTime(defaultType)) {
2326
+ return /*#__PURE__*/React.createElement(Time$1, {
2327
+ autoFocus: autoFocus,
2328
+ column: column,
2329
+ filter: filter,
2330
+ handleApplyFilter: handleApplyFilter
2331
+ });
2332
+ }
2333
+ if (isSingleDate(defaultType)) {
2334
+ return /*#__PURE__*/React.createElement(SingleDatetime, {
2335
+ autoFocus: autoFocus,
2336
+ column: column,
2337
+ filter: filter,
2338
+ filters: filters,
2339
+ handleApplyFilter: handleApplyFilter
3530
2340
  });
3531
- history.replace({
3532
- search: params
2341
+ }
2342
+ if (isSingleTime(defaultType)) {
2343
+ return /*#__PURE__*/React.createElement(SingleTime, {
2344
+ autoFocus: autoFocus,
2345
+ column: column,
2346
+ filter: filter,
2347
+ filters: filters,
2348
+ handleApplyFilter: handleApplyFilter
3533
2349
  });
3534
- };
3535
- var handleFiltersChange = function handleFiltersChange(filtersPayload) {
3536
- startTransition(function () {
3537
- onFiltersChange(buildFiltersPayload(filtersPayload.filter(function (filter) {
3538
- return !isNil(filter.node);
3539
- })));
2350
+ }
2351
+ if (isBoolean(defaultType) || isCheckbox(defaultType)) {
2352
+ return /*#__PURE__*/React.createElement(Boolean$1, {
2353
+ autoFocus: autoFocus,
2354
+ column: column,
2355
+ filter: filter,
2356
+ handleApplyFilter: handleApplyFilter
3540
2357
  });
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;
2358
+ }
2359
+ return /*#__PURE__*/React.createElement(Dropdown$1, {
2360
+ autoFocus: autoFocus,
2361
+ column: column,
2362
+ filter: filter,
2363
+ handleApplyFilter: handleApplyFilter
2364
+ });
3585
2365
  };
3586
2366
 
3587
- var _excluded = ["size", "isOpen", "onClose", "columns", "onChange", "isSearchable", "keyword", "onSelectorsChange", "childrenKeys", "children"];
2367
+ var _excluded = ["isOpen", "onClose", "columns", "onChange", "isSearchable", "keyword", "onSelectorsChange", "childrenKeys", "children", "className"];
3588
2368
  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
2369
  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
2370
  var Pane = function Pane(_ref) {
3591
- var size = _ref.size,
3592
- isOpen = _ref.isOpen,
2371
+ var isOpen = _ref.isOpen,
3593
2372
  onClose = _ref.onClose,
3594
2373
  columns = _ref.columns,
3595
2374
  onChange = _ref.onChange,
@@ -3599,6 +2378,7 @@ var Pane = function Pane(_ref) {
3599
2378
  _ref$childrenKeys = _ref.childrenKeys,
3600
2379
  childrenKeys = _ref$childrenKeys === void 0 ? [] : _ref$childrenKeys,
3601
2380
  children = _ref.children,
2381
+ className = _ref.className,
3602
2382
  otherProps = _objectWithoutProperties(_ref, _excluded);
3603
2383
  var searchParams = useQueryParams({
3604
2384
  toCamelCase: false
@@ -3607,7 +2387,7 @@ var Pane = function Pane(_ref) {
3607
2387
  _useState2 = _slicedToArray(_useState, 2),
3608
2388
  searchTerm = _useState2[0],
3609
2389
  setSearchTerm = _useState2[1];
3610
- var history = useHistory$1();
2390
+ var history = useHistory();
3611
2391
  var _useTranslation = useTranslation(),
3612
2392
  t = _useTranslation.t;
3613
2393
  columns = useMemo(function () {
@@ -3675,19 +2455,17 @@ var Pane = function Pane(_ref) {
3675
2455
  }) && !childrenKeys.some(function (key) {
3676
2456
  return searchParams[key];
3677
2457
  });
3678
- return /*#__PURE__*/React.createElement(Portal, {
3679
- rootId: "neeto-filters-portal"
3680
- }, /*#__PURE__*/React.createElement(Slider, _extends$1({
2458
+ return /*#__PURE__*/React.createElement(Pane$1, _extends({
3681
2459
  isOpen: isOpen,
3682
- size: size,
2460
+ backdropClassName: "neeto-filters-pane-backdrop",
2461
+ className: classnames("neeto-filters-pane-filter", _defineProperty({}, className, className)),
3683
2462
  onClose: handleClose
3684
- }, otherProps), /*#__PURE__*/React.createElement(Slider.Header, {
3685
- className: "neeto-filters-pane-filter__header",
2463
+ }, otherProps), /*#__PURE__*/React.createElement(Pane$1.Header, {
3686
2464
  "data-cy": "neeto-filters-pane-header"
3687
2465
  }, /*#__PURE__*/React.createElement(Typography, {
3688
2466
  style: "h2",
3689
2467
  weight: "semibold"
3690
- }, t("neetoFilters.common.filters"))), /*#__PURE__*/React.createElement(Slider.Body, {
2468
+ }, t("neetoFilters.common.filters"))), /*#__PURE__*/React.createElement(Pane$1.Body, {
3691
2469
  className: "neeto-filters-pane-filter__body neeto-ui-pt-2"
3692
2470
  }, isSearchable && /*#__PURE__*/React.createElement(Search, {
3693
2471
  "data-cy": "neeto-filters-column-search",
@@ -3734,9 +2512,9 @@ var Pane = function Pane(_ref) {
3734
2512
  style: "body2"
3735
2513
  }, t("neetoFilters.messages.noResourcesFound", {
3736
2514
  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, {
2515
+ })), children), /*#__PURE__*/React.createElement(Pane$1.Footer, {
2516
+ className: "gap-x-2"
2517
+ }, /*#__PURE__*/React.createElement(Button, {
3740
2518
  "data-cy": "neeto-filters-done-btn",
3741
2519
  label: t("neetoFilters.common.done"),
3742
2520
  onClick: handleClearTermAndClose
@@ -3746,19 +2524,18 @@ var Pane = function Pane(_ref) {
3746
2524
  label: t("neetoFilters.common.clearFilters"),
3747
2525
  style: "text",
3748
2526
  onClick: handleClearAll
3749
- })))));
2527
+ })));
3750
2528
  };
3751
2529
 
3752
2530
  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
2531
 
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= */";
2532
+ 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
2533
  n(css,{});
3756
2534
 
3757
2535
  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
2536
  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
2537
  var Filters = withT(function (_ref) {
3760
2538
  var t = _ref.t,
3761
- size = _ref.size,
3762
2539
  _ref$isOpen = _ref.isOpen,
3763
2540
  isOpen = _ref$isOpen === void 0 ? false : _ref$isOpen,
3764
2541
  _ref$setIsOpen = _ref.setIsOpen,
@@ -3775,25 +2552,25 @@ var Filters = withT(function (_ref) {
3775
2552
  isSearchable = _ref$isSearchable === void 0 ? false : _ref$isSearchable,
3776
2553
  className = _ref.className,
3777
2554
  _ref$onSelectorsChang = _ref.onSelectorsChange,
3778
- onSelectorsChange = _ref$onSelectorsChang === void 0 ? noop$1 : _ref$onSelectorsChang,
2555
+ onSelectorsChange = _ref$onSelectorsChang === void 0 ? noop : _ref$onSelectorsChang,
3779
2556
  _ref$keyword = _ref.keyword,
3780
2557
  keyword = _ref$keyword === void 0 ? {
3781
2558
  node: "",
3782
2559
  value: "",
3783
- setValue: noop$1
2560
+ setValue: noop
3784
2561
  } : _ref$keyword,
3785
2562
  childrenKeys = _ref.childrenKeys,
3786
2563
  children = _ref.children;
3787
2564
  return /*#__PURE__*/React.createElement("span", {
3788
2565
  className: classnames(_defineProperty({}, className, className))
3789
- }, /*#__PURE__*/React.createElement(Button, _extends$1({
2566
+ }, /*#__PURE__*/React.createElement(Button, _extends({
3790
2567
  "data-cy": "neeto-filters-toggle-btn",
3791
2568
  label: t("neetoFilters.common.filter"),
3792
2569
  style: "secondary",
3793
2570
  onClick: function onClick() {
3794
2571
  return setIsOpen(true);
3795
2572
  }
3796
- }, buttonProps)), /*#__PURE__*/React.createElement(Pane, _extends$1({
2573
+ }, buttonProps)), /*#__PURE__*/React.createElement(Pane, _extends({
3797
2574
  onClose: function onClose() {
3798
2575
  return setIsOpen(false);
3799
2576
  }
@@ -3804,27 +2581,18 @@ var Filters = withT(function (_ref) {
3804
2581
  isSearchable: isSearchable,
3805
2582
  keyword: keyword,
3806
2583
  onChange: onChange,
3807
- onSelectorsChange: onSelectorsChange,
3808
- size: size
2584
+ onSelectorsChange: onSelectorsChange
3809
2585
  }, paneProps)), children));
3810
2586
  });
3811
2587
 
3812
- var ITEMS_MAX_COUNT = 20;
3813
- var SEGMENT_ACTIONS = {
3814
- EDIT: "edit",
3815
- DELETE: "delete"
3816
- };
3817
-
3818
- var Delete = function Delete(_ref) {
2588
+ var DeleteAlert = function DeleteAlert(_ref) {
3819
2589
  var isOpen = _ref.isOpen,
3820
2590
  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;
2591
+ segment = _ref.segment,
2592
+ columns = _ref.columns;
3825
2593
  var _useTranslation = useTranslation(),
3826
2594
  t = _useTranslation.t;
3827
- var history = useHistory$1();
2595
+ var history = useHistory();
3828
2596
  var _getQueryParams = getQueryParams(),
3829
2597
  segmentId = _getQueryParams.segmentId;
3830
2598
  var _useDestroySegment = useDestroySegment(),
@@ -3862,30 +2630,162 @@ var Delete = function Delete(_ref) {
3862
2630
  });
3863
2631
  };
3864
2632
 
3865
- var useSegments = function useSegments(_ref) {
2633
+ var Card = function Card(_ref) {
2634
+ var segment = _ref.segment,
2635
+ columns = _ref.columns,
2636
+ defaultSegmentName = _ref.defaultSegmentName;
2637
+ var _useState = useState(false),
2638
+ _useState2 = _slicedToArray(_useState, 2),
2639
+ isEditing = _useState2[0],
2640
+ setIsEditing = _useState2[1];
2641
+ var _useState3 = useState(false),
2642
+ _useState4 = _slicedToArray(_useState3, 2),
2643
+ isDeleteAlertOpen = _useState4[0],
2644
+ setIsDeleteAlertOpen = _useState4[1];
2645
+ var _useTranslation = useTranslation(),
2646
+ t = _useTranslation.t;
2647
+ var Menu = Dropdown$2.Menu,
2648
+ MenuItem = Dropdown$2.MenuItem;
2649
+ var _useUpdateSegment = useUpdateSegment(),
2650
+ updateSegment = _useUpdateSegment.mutate;
2651
+ var handleRename = function handleRename(values) {
2652
+ return updateSegment({
2653
+ id: segment.id,
2654
+ payload: values
2655
+ }, {
2656
+ onSuccess: function onSuccess() {
2657
+ return setIsEditing(false);
2658
+ }
2659
+ });
2660
+ };
2661
+ return /*#__PURE__*/React.createElement(Form, {
2662
+ className: "neeto-ui-rounded-md flex w-full items-center justify-between border p-2",
2663
+ formProps: {
2664
+ noValidate: true
2665
+ },
2666
+ formikProps: {
2667
+ initialValues: segment,
2668
+ validateOnChange: true,
2669
+ validateOnBlur: true,
2670
+ validationSchema: buildSegmentsValidationSchema(defaultSegmentName),
2671
+ onSubmit: handleRename,
2672
+ enableReinitialize: true
2673
+ }
2674
+ }, function (_ref2) {
2675
+ var resetForm = _ref2.resetForm;
2676
+ return /*#__PURE__*/React.createElement(React.Fragment, null, isEditing ? /*#__PURE__*/React.createElement(FormikInlineInput, {
2677
+ autoFocus: true,
2678
+ nakedInput: true,
2679
+ handleCancel: function handleCancel() {
2680
+ return setIsEditing(false);
2681
+ },
2682
+ name: "name",
2683
+ placeholder: t("neetoFilters.segments.name")
2684
+ }) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Typography, {
2685
+ style: "body2"
2686
+ }, segment.name), /*#__PURE__*/React.createElement(Dropdown$2, {
2687
+ buttonStyle: "text",
2688
+ disabled: isNotPresent(segment.id),
2689
+ icon: MenuHorizontal,
2690
+ size: "small"
2691
+ }, /*#__PURE__*/React.createElement(Menu, null, /*#__PURE__*/React.createElement(MenuItem.Button, {
2692
+ onClick: function onClick() {
2693
+ setIsEditing(true);
2694
+ resetForm();
2695
+ }
2696
+ }, t("neetoFilters.common.rename")), /*#__PURE__*/React.createElement(MenuItem.Button, {
2697
+ onClick: function onClick() {
2698
+ return setIsDeleteAlertOpen(true);
2699
+ }
2700
+ }, t("neetoFilters.common.delete"))))), /*#__PURE__*/React.createElement(DeleteAlert, {
2701
+ columns: columns,
2702
+ segment: segment,
2703
+ isOpen: isDeleteAlertOpen,
2704
+ onClose: function onClose() {
2705
+ return setIsDeleteAlertOpen(false);
2706
+ }
2707
+ }));
2708
+ });
2709
+ };
2710
+ var Card$1 = /*#__PURE__*/React.memo(Card);
2711
+
2712
+ var ManagePane = function ManagePane(_ref) {
2713
+ var isOpen = _ref.isOpen,
2714
+ onClose = _ref.onClose,
2715
+ entity = _ref.entity,
2716
+ columns = _ref.columns,
2717
+ defaultSegmentName = _ref.defaultSegmentName;
2718
+ var _useState = useState(""),
2719
+ _useState2 = _slicedToArray(_useState, 2),
2720
+ searchTerm = _useState2[0],
2721
+ setSearchTerm = _useState2[1];
2722
+ var inputRef = useRef(null);
2723
+ var _useTranslation = useTranslation(),
2724
+ t = _useTranslation.t;
2725
+ var debouncedSearchTerm = useDebounce(searchTerm);
2726
+ var _useFetchSegments = useFetchSegments({
2727
+ entity: entity,
2728
+ searchTerm: debouncedSearchTerm
2729
+ }),
2730
+ _useFetchSegments$dat = _useFetchSegments.data,
2731
+ segments = _useFetchSegments$dat === void 0 ? [] : _useFetchSegments$dat,
2732
+ isLoading = _useFetchSegments.isLoading;
2733
+ return /*#__PURE__*/React.createElement(Pane$1, {
2734
+ isOpen: isOpen,
2735
+ onClose: onClose,
2736
+ initialFocusRef: inputRef
2737
+ }, /*#__PURE__*/React.createElement(Pane$1.Header, null, /*#__PURE__*/React.createElement(Typography, {
2738
+ style: "h2"
2739
+ }, t("neetoFilters.segments.manageSegments"))), /*#__PURE__*/React.createElement(Pane$1.Body, {
2740
+ className: "max-h-full gap-4 overflow-scroll"
2741
+ }, /*#__PURE__*/React.createElement(Search, {
2742
+ className: "w-full flex-grow-0",
2743
+ placeholder: t("neetoFilters.segments.searchSegments"),
2744
+ ref: inputRef,
2745
+ onSearch: function onSearch(value) {
2746
+ return setSearchTerm(value);
2747
+ }
2748
+ }), isLoading ? /*#__PURE__*/React.createElement(Spinner, {
2749
+ className: "mx-auto mt-4"
2750
+ }) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Card$1, {
2751
+ segment: {
2752
+ name: defaultSegmentName
2753
+ }
2754
+ }), isEmpty(segments) ? /*#__PURE__*/React.createElement(Typography, {
2755
+ className: "mx-auto",
2756
+ style: "body2"
2757
+ }, t("neetoFilters.segments.noSegmentsFound")) : segments.map(function (segment) {
2758
+ return /*#__PURE__*/React.createElement(Card$1, {
2759
+ columns: columns,
2760
+ defaultSegmentName: defaultSegmentName,
2761
+ segment: segment,
2762
+ key: segment.id
2763
+ });
2764
+ }))));
2765
+ };
2766
+
2767
+ var ITEMS_MAX_COUNT = 20;
2768
+
2769
+ var MenuBlocks = function MenuBlocks(_ref) {
3866
2770
  var entity = _ref.entity,
3867
2771
  columns = _ref.columns,
3868
- appliedFilters = _ref.appliedFilters,
3869
- childrenKeys = _ref.childrenKeys;
2772
+ defaultSegmentName = _ref.defaultSegmentName;
2773
+ var _useState = useState(false),
2774
+ _useState2 = _slicedToArray(_useState, 2),
2775
+ showAll = _useState2[0],
2776
+ setShowAll = _useState2[1];
2777
+ var history = useHistory();
3870
2778
  var _useTranslation = useTranslation(),
3871
2779
  t = _useTranslation.t;
3872
- var history = useHistory$1();
2780
+ var _getQueryParams = getQueryParams(),
2781
+ segmentId = _getQueryParams.segmentId;
2782
+ var appliedFilters = buildFiltersFromURL(columns);
3873
2783
  var _useFetchSegments = useFetchSegments({
3874
2784
  entity: entity
3875
2785
  }),
3876
2786
  _useFetchSegments$dat = _useFetchSegments.data,
3877
2787
  segments = _useFetchSegments$dat === void 0 ? [] : _useFetchSegments$dat,
3878
2788
  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
2789
  var clearAppliedFilters = function clearAppliedFilters() {
3890
2790
  var _filters$, _filters$2;
3891
2791
  var filters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : appliedFilters;
@@ -3900,7 +2800,7 @@ var useSegments = function useSegments(_ref) {
3900
2800
  })
3901
2801
  });
3902
2802
  };
3903
- var handleSelectSegment = function handleSelectSegment(_ref2) {
2803
+ var applySelectedSegment = function applySelectedSegment(_ref2) {
3904
2804
  var _filters$3;
3905
2805
  var id = _ref2.id,
3906
2806
  filters = _ref2.filters;
@@ -3912,6 +2812,14 @@ var useSegments = function useSegments(_ref) {
3912
2812
  })
3913
2813
  });
3914
2814
  };
2815
+ var handleSelectSegment = function handleSelectSegment(_ref3) {
2816
+ var id = _ref3.id,
2817
+ filters = _ref3.filters;
2818
+ return equals(id, segmentId) ? clearAppliedFilters(filters) : applySelectedSegment({
2819
+ id: id,
2820
+ filters: filters
2821
+ });
2822
+ };
3915
2823
  if (isLoading) {
3916
2824
  return /*#__PURE__*/React.createElement(Spinner, null);
3917
2825
  }
@@ -3920,136 +2828,6 @@ var useSegments = function useSegments(_ref) {
3920
2828
  style: "body2"
3921
2829
  }, t("neetoFilters.segments.noSegmentsFound"));
3922
2830
  }
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
2831
  return /*#__PURE__*/React.createElement(React.Fragment, null, segments.length > ITEMS_MAX_COUNT && /*#__PURE__*/React.createElement(Button, {
4054
2832
  icon: Down,
4055
2833
  style: "link",
@@ -4061,67 +2839,71 @@ var MenuBlocks = function MenuBlocks(_ref) {
4061
2839
  return !open;
4062
2840
  });
4063
2841
  }
4064
- }), /*#__PURE__*/React.createElement(Segment, {
4065
- isActive: isEmpty(appliedFilters),
2842
+ }), /*#__PURE__*/React.createElement(MenuBar.Block, {
2843
+ active: isEmpty(appliedFilters),
4066
2844
  label: defaultSegmentName,
4067
2845
  onClick: clearAppliedFilters
4068
2846
  }), 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,
2847
+ return /*#__PURE__*/React.createElement(MenuBar.Block, {
2848
+ active: segment.id === segmentId,
2849
+ count: segment.count,
4075
2850
  key: segment.id,
4076
2851
  label: segment.name,
4077
2852
  onClick: function onClick() {
4078
2853
  return handleSelectSegment(segment);
4079
2854
  }
4080
2855
  });
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
2856
  }));
4100
2857
  };
4101
2858
  var MenuBlocks$1 = /*#__PURE__*/React.memo(MenuBlocks);
4102
2859
 
4103
- var Segments = withT(function (_ref) {
4104
- var t = _ref.t,
4105
- entity = _ref.entity,
2860
+ var Segments = function Segments(_ref) {
2861
+ var entity = _ref.entity,
4106
2862
  columns = _ref.columns,
2863
+ _ref$setIsFilterPaneO = _ref.setIsFilterPaneOpen,
2864
+ setIsFilterPaneOpen = _ref$setIsFilterPaneO === void 0 ? noop : _ref$setIsFilterPaneO,
4107
2865
  _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
- });
2866
+ defaultSegmentName = _ref$defaultSegmentNa === void 0 ? t$1("neetoFilters.common.allResults") : _ref$defaultSegmentNa;
2867
+ return function () {
2868
+ var _useState = useState(false),
2869
+ _useState2 = _slicedToArray(_useState, 2),
2870
+ isSegmentsPaneOpen = _useState2[0],
2871
+ setIsSegmentsPaneOpen = _useState2[1];
2872
+ var _useTranslation = useTranslation(),
2873
+ t = _useTranslation.t;
2874
+ var iconProps = [{
2875
+ icon: Settings,
2876
+ onClick: function onClick() {
2877
+ setIsFilterPaneOpen(false);
2878
+ setIsSegmentsPaneOpen(true);
2879
+ },
2880
+ tooltipProps: {
2881
+ content: t("neetoFilters.segments.manageSegments"),
2882
+ position: "top"
2883
+ }
2884
+ }];
2885
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(MenuBar.SubTitle, {
2886
+ iconProps: iconProps
2887
+ }, /*#__PURE__*/React.createElement(Typography, {
2888
+ component: "h4",
2889
+ style: "h5",
2890
+ textTransform: "uppercase",
2891
+ weight: "bold"
2892
+ }, t("neetoFilters.common.segments"))), /*#__PURE__*/React.createElement(MenuBlocks$1, {
2893
+ columns: columns,
2894
+ defaultSegmentName: defaultSegmentName,
2895
+ entity: entity
2896
+ }), /*#__PURE__*/React.createElement(ManagePane, {
2897
+ columns: columns,
2898
+ defaultSegmentName: defaultSegmentName,
2899
+ entity: entity,
2900
+ isOpen: isSegmentsPaneOpen,
2901
+ onClose: function onClose() {
2902
+ return setIsSegmentsPaneOpen(false);
2903
+ }
2904
+ }));
2905
+ }();
2906
+ };
4125
2907
  var index = /*#__PURE__*/React.memo(Segments);
4126
2908
 
4127
2909
  export { Bar, Filters, index as Segments, buildFilterColumnsFromFields, buildFiltersFromURL, buildSelectorsFromURL, buildUrlFromFilters, buildUrlFromSegment, useDestroySegment, useFetchSegments, useUpdateSegment };