@bigbinary/neeto-filters-frontend 3.2.4 → 3.2.5

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