@bigbinary/neeto-filters-frontend 3.2.3 → 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.split(",")
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,7 +1013,7 @@ 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
  });
@@ -975,272 +1021,923 @@ var getColumnsWithStandardizedType = function getColumnsWithStandardizedType(col
975
1021
  var isKeywordFilterPresent = function isKeywordFilterPresent(keyworFilter) {
976
1022
  return ramda.not(ramda.isEmpty(keyworFilter.node));
977
1023
  };
1024
+ var isNilOrEmpty = function isNilOrEmpty(param) {
1025
+ return ramda.isNil(param) || ramda.isEmpty(param);
1026
+ };
978
1027
 
979
- var buildCustomDateValue = function buildCustomDateValue(value) {
980
- var isBeforeOrAfter = Math.abs(dayjs(value[1]).diff(dayjs(value[0]), "year")) >= 90;
981
- if (isBeforeOrAfter) {
982
- var currentMoment = dayjs();
983
- var diffWithStart = Math.abs(currentMoment.diff(dayjs(value[0]), "year"));
984
- var diffWithEnd = Math.abs(currentMoment.diff(dayjs(value[1]), "year"));
985
- 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
+ });
986
1038
  }
987
- return value.map(utils.dateFormat.date).join(" - ");
1039
+ return neetoCist.findBy({
1040
+ value: filter.value
1041
+ }, options);
988
1042
  };
989
- var buildFilterValue = function buildFilterValue(filter) {
1043
+ var buildSingleTimeValue = function buildSingleTimeValue(filter) {
990
1044
  var _findBy2;
991
- var _filter$defaultType = filter.defaultType,
992
- defaultType = _filter$defaultType === void 0 ? filter.type : _filter$defaultType,
993
- value = filter.value,
994
- rule = filter.rule,
995
- _filter$values = filter.values,
996
- initialValues = _filter$values === void 0 ? [] : _filter$values;
997
- var values = initialValues.map(ramda.modify("value", function (value) {
998
- 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();
999
1059
  }));
1000
- if (isDate(defaultType) && isCustomDateRange(value)) {
1001
- return buildCustomDateValue(value);
1002
- } else if (isTime(defaultType) && isCustomTimeRange(value)) {
1003
- return value.map(utils.dateFormat.time).join(" - ");
1004
- } else if (isDate(defaultType) || isTime(defaultType)) {
1005
- return neetoCist.humanize(value);
1006
- } else if (isMulti(defaultType)) {
1007
- return value.map(function (value) {
1008
- var _findBy;
1009
- 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({
1010
1064
  value: value
1011
- }, values)) === null || _findBy === void 0 ? void 0 : _findBy.label) || value;
1012
- }).join(", ");
1013
- } else if (isSingleDate(defaultType)) {
1014
- return rule === "between" ? value.map(utils.dateFormat.date).join(" - ") : utils.dateFormat.date(value);
1015
- } else if (isSingleTime(defaultType)) {
1016
- return rule === "between" ? value.map(utils.dateFormat.time).join(" - ") : utils.dateFormat.time(value);
1017
- } else if (isBoolean(defaultType)) {
1018
- return getLabelFromBool({
1019
- value: value,
1020
- values: values
1065
+ }, options) || neetoCist.toLabelAndValue(value);
1066
+ });
1067
+ var nonSelectedOptions = options.filter(function (option) {
1068
+ return !filter.value.includes(option.value);
1021
1069
  });
1070
+ return ramda.concat(selectedOptions, nonSelectedOptions);
1022
1071
  }
1023
- return ((_findBy2 = neetoCist.findBy({
1024
- value: value
1025
- }, 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;
1026
1078
  };
1027
- var buildRuleValue = function buildRuleValue(_ref) {
1028
- var rule = _ref.rule,
1029
- defaultType = _ref.defaultType;
1030
- if (isText(defaultType)) {
1031
- return neetoCist.findBy({
1032
- value: rule
1033
- }, TEXT_RULES).label;
1034
- } else if (isDigit(defaultType)) {
1035
- return neetoCist.findBy({
1036
- value: rule
1037
- }, NUMBER_RULES).label;
1038
- } else if (isSingleDate(defaultType)) {
1039
- return neetoCist.findBy({
1040
- value: rule
1041
- }, SINGLE_DATE_OPTIONS).label;
1042
- } else if (isSingleTime(defaultType)) {
1043
- return neetoCist.findBy({
1044
- value: rule
1045
- }, 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;
1046
1087
  }
1047
- 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");
1048
1092
  };
1049
- var hasOnlyKeywordFilter = function hasOnlyKeywordFilter(filters) {
1050
- 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);
1051
1107
  };
1052
-
1053
- var Block = function Block(_ref) {
1054
- var filter = _ref.filter,
1055
- handleDelete = _ref.handleDelete,
1056
- setIsPaneOpen = _ref.setIsPaneOpen;
1057
- var key = filter.key,
1058
- _filter$defaultType = filter.defaultType,
1059
- defaultType = _filter$defaultType === void 0 ? filter.type : _filter$defaultType,
1060
- label = filter.label,
1061
- rule = filter.rule,
1062
- defaultValue = filter.defaultValue;
1063
- var filterValue = buildFilterValue(filter);
1064
- var ruleContent = buildRuleValue({
1065
- rule: rule,
1066
- defaultType: defaultType
1067
- });
1068
- var blockLength = label.length + ruleContent.length + filterValue.length;
1069
- var toolTipDisabled = blockLength <= 50;
1070
- var blockContent = !toolTipDisabled ? "".concat(filterValue.slice(0, 50 - blockLength), "...") : filterValue;
1071
- var deleteBlockHotKeyRef = useHotkeys__default["default"](SHORTCUTS.deleteBlock.sequence, function () {
1072
- return handleDelete(key);
1073
- }, {
1074
- 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();
1075
1130
  });
1076
- var openFilterPaneHotKeyRef = useHotkeys__default["default"](SHORTCUTS.openFilterPane.sequence, function () {
1077
- return setIsPaneOpen(key);
1078
- }, {
1079
- mode: "scoped"
1131
+ };
1132
+
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");
1136
+ };
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);
1143
+ };
1144
+ var isRuleEmpty = function isRuleEmpty(rule) {
1145
+ return ramda.equals(rule, "is_unknown");
1146
+ };
1147
+
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
1080
1166
  });
1081
- return /*#__PURE__*/React__default["default"].createElement(neetoui.Tooltip, {
1082
- content: filterValue,
1083
- disabled: toolTipDisabled,
1084
- position: "bottom",
1085
- theme: "light"
1086
- }, /*#__PURE__*/React__default["default"].createElement("div", {
1087
- className: "neeto-filters-bar__block",
1088
- "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(key), "-block"),
1089
- tabIndex: 0,
1090
- ref: function ref(node) {
1091
- deleteBlockHotKeyRef.current = node;
1092
- openFilterPaneHotKeyRef.current = node;
1093
- },
1094
- onClick: function onClick() {
1095
- return setIsPaneOpen(key);
1167
+ var _useTranslation = reactI18next.useTranslation(),
1168
+ t = _useTranslation.t;
1169
+ var handleChange = function handleChange(option) {
1170
+ if (ramda.isEmpty(option) || ramda.isNil(option)) {
1171
+ handleApplyFilter({
1172
+ _delete: true
1173
+ });
1174
+ return;
1096
1175
  }
1097
- }, /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
1098
- style: "body2"
1099
- }, label, ":"), /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
1100
- className: "neeto-ui-text-gray-600",
1101
- style: "body2"
1102
- }, ruleContent), /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
1103
- style: "body2"
1104
- }, blockContent), !defaultValue && /*#__PURE__*/React__default["default"].createElement("div", {
1105
- className: "neeto-filters-bar__block-close"
1106
- }, /*#__PURE__*/React__default["default"].createElement(neetoIcons.Close, {
1107
- "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(key), "-block-close-btn"),
1108
- size: 16,
1109
- strokeWidth: 2,
1110
- onClick: function onClick(event) {
1111
- event.stopPropagation();
1112
- handleDelete(key);
1176
+ var updatedFilter = buildUpdatedFilter({
1177
+ column: column,
1178
+ defaultType: defaultType,
1179
+ option: option
1180
+ });
1181
+ handleApplyFilter(updatedFilter);
1182
+ };
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)
1113
1194
  }
1114
- }))));
1195
+ }, {
1196
+ "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(key), "-filter"),
1197
+ strategy: "fixed",
1198
+ placeholder: t("neetoFilters.messages.selectOption", {
1199
+ resource: label
1200
+ }),
1201
+ onChange: handleChange
1202
+ }, otherProps)));
1115
1203
  };
1204
+ var Boolean$1 = /*#__PURE__*/React__default["default"].memo(Boolean);
1116
1205
 
1117
- var ChildBlock = function ChildBlock(_ref) {
1118
- var childKey = _ref.childKey,
1119
- setIsPaneOpen = _ref.setIsPaneOpen,
1120
- handleDelete = _ref.handleDelete;
1121
- var deleteBlockHotKeyRef = useHotkeys__default["default"](SHORTCUTS.deleteBlock.sequence, function () {
1122
- return handleDelete(childKey);
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
1229
+ });
1230
+ setSelectedRule({});
1231
+ return;
1232
+ }
1233
+ setSelectedRule(option);
1234
+ var updatedFilter = buildUpdatedFilter({
1235
+ column: column,
1236
+ defaultType: defaultType,
1237
+ option: option
1238
+ });
1239
+ handleApplyFilter(updatedFilter);
1240
+ };
1241
+ var handleDateRangeChange = function handleDateRangeChange(dates) {
1242
+ if (ramda.isEmpty(dates) || ramda.isNil(dates)) {
1243
+ handleApplyFilter({
1244
+ _delete: true
1245
+ });
1246
+ setSelectedRule({});
1247
+ return;
1248
+ }
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();
1255
+ })
1256
+ }
1257
+ });
1258
+ handleApplyFilter(updatedFilter);
1259
+ };
1260
+ React.useEffect(function () {
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)
1279
+ }
1123
1280
  }, {
1124
- mode: "scoped"
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)));
1289
+ };
1290
+ var Datetime$1 = /*#__PURE__*/React__default["default"].memo(Datetime);
1291
+
1292
+ var Dropdown = function Dropdown(_ref) {
1293
+ var column = _ref.column,
1294
+ filter = _ref.filter,
1295
+ handleApplyFilter = _ref.handleApplyFilter,
1296
+ autoFocus = _ref.autoFocus,
1297
+ filters = _ref.filters;
1298
+ var key = column.key,
1299
+ label = column.label,
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,
1308
+ _column$helpIconProps = column.helpIconProps,
1309
+ helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
1310
+ var otherProps = getOtherProps(column);
1311
+ var options = buildDropdownOptions({
1312
+ defaultType: defaultType,
1313
+ filter: filter,
1314
+ options: values
1125
1315
  });
1126
- var openFilterPaneHotKeyRef = useHotkeys__default["default"](SHORTCUTS.openFilterPane.sequence, function () {
1127
- return setIsPaneOpen(childKey);
1128
- }, {
1129
- mode: "scoped"
1316
+ var dropdownRules = isMulti(defaultType) ? MULTI_DROPDOWN_RULES : SINGLE_DROPDOWN_RULES;
1317
+ var value = buildDropdownValue({
1318
+ defaultType: defaultType,
1319
+ filter: filter,
1320
+ options: options
1130
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];
1328
+ var _useTranslation = reactI18next.useTranslation(),
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
+ };
1354
+ var handleChange = function handleChange(option) {
1355
+ if (ramda.isEmpty(option) || ramda.isNil(option)) {
1356
+ handleApplyFilter({
1357
+ _delete: true
1358
+ });
1359
+ return;
1360
+ }
1361
+ var updatedFilter = buildUpdatedFilter({
1362
+ column: column,
1363
+ defaultType: defaultType,
1364
+ option: option,
1365
+ rule: selectedRule.value
1366
+ });
1367
+ handleApplyFilter(updatedFilter);
1368
+ };
1369
+ React.useEffect(function () {
1370
+ if (!ramda.isEmpty(filters)) return;
1371
+ setSelectedRule(dropdownRules[0]);
1372
+ }, [filters]);
1131
1373
  return /*#__PURE__*/React__default["default"].createElement("div", {
1132
- className: "neeto-filters-bar__block",
1133
- "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(childKey), "-block"),
1134
- tabIndex: 0,
1135
- ref: function ref(node) {
1136
- deleteBlockHotKeyRef.current = node;
1137
- openFilterPaneHotKeyRef.current = node;
1138
- },
1139
- onClick: function onClick() {
1140
- return setIsPaneOpen(childKey);
1374
+ className: "neeto-filters-pane-filter__item-wrapper"
1375
+ }, showRuleSelector && /*#__PURE__*/React__default["default"].createElement(neetoui.Select, {
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,
1383
+ options: options,
1384
+ value: value,
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
+ })
1393
+ }, neetoCist.isNotEmpty(helpIconProps) && {
1394
+ labelProps: {
1395
+ helpIconProps: buildHelpIconProps(helpIconProps)
1141
1396
  }
1142
- }, /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
1143
- style: "body2",
1144
- weight: "medium"
1145
- }, childKey), /*#__PURE__*/React__default["default"].createElement("div", {
1146
- className: "neeto-filters-bar__block-close"
1147
- }, /*#__PURE__*/React__default["default"].createElement(neetoIcons.Close, {
1148
- "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(childKey), "-block-close-btn"),
1149
- size: 16,
1150
- strokeWidth: 2,
1151
- onClick: function onClick(event) {
1152
- event.stopPropagation();
1153
- handleDelete(childKey);
1397
+ }, {
1398
+ onChange: handleChange
1399
+ }, otherProps)));
1400
+ };
1401
+ var Dropdown$1 = /*#__PURE__*/React__default["default"].memo(Dropdown);
1402
+
1403
+ var SingleDatetime = function SingleDatetime(_ref) {
1404
+ var column = _ref.column,
1405
+ filter = _ref.filter,
1406
+ filters = _ref.filters,
1407
+ handleApplyFilter = _ref.handleApplyFilter,
1408
+ autoFocus = _ref.autoFocus;
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
+ }),
1414
+ _useState2 = _slicedToArray(_useState, 2),
1415
+ selectedRule = _useState2[0],
1416
+ setSelectedRule = _useState2[1];
1417
+ var key = column.key,
1418
+ _column$defaultType = column.defaultType,
1419
+ defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
1420
+ label = column.label,
1421
+ _column$helpIconProps = column.helpIconProps,
1422
+ helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
1423
+ var otherProps = getOtherProps(column);
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 = "";
1439
+ }
1440
+ var updatedFilter = buildUpdatedFilter({
1441
+ column: column,
1442
+ defaultType: defaultType,
1443
+ option: {},
1444
+ rule: ruleOption.value,
1445
+ value: updateValue
1446
+ });
1447
+ handleApplyFilter(updatedFilter);
1448
+ };
1449
+ var handleChange = function handleChange(dates) {
1450
+ if (ramda.isEmpty(dates) || ramda.isNil(dates)) {
1451
+ handleApplyFilter({
1452
+ _delete: true
1453
+ });
1454
+ return;
1455
+ }
1456
+ var value = datePickerType === "range" ? ramda.pluck("$d", dates).map(function (date) {
1457
+ return date.toISOString();
1458
+ }) : dates["$d"];
1459
+ var updatedFilter = buildUpdatedFilter({
1460
+ column: column,
1461
+ defaultType: defaultType,
1462
+ option: {},
1463
+ rule: selectedRule.value,
1464
+ value: value
1465
+ });
1466
+ handleApplyFilter(updatedFilter);
1467
+ };
1468
+ return /*#__PURE__*/React__default["default"].createElement("div", {
1469
+ className: "neeto-filters-pane-filter__item-wrapper"
1470
+ }, /*#__PURE__*/React__default["default"].createElement(neetoui.Select, _extends({
1471
+ label: label,
1472
+ "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(key), "-filter-rule"),
1473
+ defaultValue: SINGLE_DATE_OPTIONS[0],
1474
+ options: SINGLE_DATE_OPTIONS,
1475
+ strategy: "fixed",
1476
+ value: selectedRule
1477
+ }, neetoCist.isNotEmpty(helpIconProps) && {
1478
+ labelProps: {
1479
+ helpIconProps: buildHelpIconProps(helpIconProps)
1480
+ }
1481
+ }, {
1482
+ onChange: handleRuleChange
1483
+ })), /*#__PURE__*/React__default["default"].createElement(neetoui.DatePicker, _extends({
1484
+ autoFocus: autoFocus,
1485
+ value: value,
1486
+ "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(key), "-filter"),
1487
+ getPopupContainer: ramda.prop("parentNode"),
1488
+ type: datePickerType,
1489
+ onChange: handleChange
1490
+ }, otherProps)));
1491
+ };
1492
+
1493
+ var SingleTime = function SingleTime(_ref) {
1494
+ var column = _ref.column,
1495
+ filter = _ref.filter,
1496
+ filters = _ref.filters,
1497
+ handleApplyFilter = _ref.handleApplyFilter,
1498
+ autoFocus = _ref.autoFocus;
1499
+ var _useState = React.useState(function () {
1500
+ return neetoCist.findBy({
1501
+ value: filter === null || filter === void 0 ? void 0 : filter.rule
1502
+ }, SINGLE_TIME_OPTIONS) || SINGLE_TIME_OPTIONS[0];
1503
+ }),
1504
+ _useState2 = _slicedToArray(_useState, 2),
1505
+ selectedRule = _useState2[0],
1506
+ setSelectedRule = _useState2[1];
1507
+ var key = column.key,
1508
+ _column$defaultType = column.defaultType,
1509
+ defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
1510
+ label = column.label,
1511
+ _column$helpIconProps = column.helpIconProps,
1512
+ helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
1513
+ var otherProps = getOtherProps(column);
1514
+ var timePickerType = selectedRule.value === "between" ? "range" : "time";
1515
+ var value = filter === null || filter === void 0 ? void 0 : filter.value;
1516
+ React.useEffect(function () {
1517
+ if (!ramda.isEmpty(filters)) return;
1518
+ setSelectedRule(SINGLE_TIME_OPTIONS[0]);
1519
+ }, [filters]);
1520
+ var handleRuleChange = function handleRuleChange(ruleOption) {
1521
+ setSelectedRule(ruleOption);
1522
+
1523
+ // Clear value if switched between incompatible types
1524
+ var updateValue = value;
1525
+ if (timePickerType === "range" && ruleOption.value !== "between" || timePickerType === "time" && ruleOption.value === "between") {
1526
+ updateValue = "";
1527
+ }
1528
+ var updatedFilter = buildUpdatedFilter({
1529
+ column: column,
1530
+ defaultType: defaultType,
1531
+ option: {},
1532
+ rule: ruleOption.value,
1533
+ value: updateValue
1534
+ });
1535
+ handleApplyFilter(updatedFilter);
1536
+ };
1537
+ var handleChange = function handleChange(times) {
1538
+ if (hasInvalidTimes(times)) {
1539
+ handleApplyFilter({
1540
+ _delete: true
1541
+ });
1542
+ return;
1543
+ }
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();
1550
+ var updatedFilter = buildUpdatedFilter({
1551
+ column: column,
1552
+ defaultType: defaultType,
1553
+ option: {},
1554
+ rule: selectedRule.value,
1555
+ value: value
1556
+ });
1557
+ handleApplyFilter(updatedFilter);
1558
+ };
1559
+ var formattedTime = formatTime(value, timePickerType);
1560
+ return /*#__PURE__*/React__default["default"].createElement("div", {
1561
+ className: "neeto-filters-pane-filter__item-wrapper"
1562
+ }, /*#__PURE__*/React__default["default"].createElement(neetoui.Select, _extends({
1563
+ label: label,
1564
+ defaultValue: SINGLE_TIME_OPTIONS[0],
1565
+ options: SINGLE_TIME_OPTIONS,
1566
+ strategy: "fixed",
1567
+ value: selectedRule
1568
+ }, neetoCist.isNotEmpty(helpIconProps) && {
1569
+ labelProps: {
1570
+ helpIconProps: buildHelpIconProps(helpIconProps)
1571
+ }
1572
+ }, {
1573
+ onChange: handleRuleChange
1574
+ })), /*#__PURE__*/React__default["default"].createElement(neetoui.TimePickerInput, _extends({
1575
+ autoFocus: autoFocus,
1576
+ className: "w-full",
1577
+ "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(key), "-filter"),
1578
+ type: timePickerType,
1579
+ value: formattedTime,
1580
+ onChange: handleChange
1581
+ }, otherProps)));
1582
+ };
1583
+
1584
+ var Text = function Text(_ref) {
1585
+ var column = _ref.column,
1586
+ filter = _ref.filter,
1587
+ filters = _ref.filters,
1588
+ handleApplyFilter = _ref.handleApplyFilter,
1589
+ autoFocus = _ref.autoFocus,
1590
+ onClose = _ref.onClose;
1591
+ var key = column.key,
1592
+ _column$defaultType = column.defaultType,
1593
+ defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
1594
+ label = column.label,
1595
+ _column$showRuleSelec = column.showRuleSelector,
1596
+ showRuleSelector = _column$showRuleSelec === void 0 ? false : _column$showRuleSelec,
1597
+ _column$helpIconProps = column.helpIconProps,
1598
+ helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
1599
+ var otherProps = getOtherProps(column);
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
+ };
1637
+ var handleRuleChange = function handleRuleChange(ruleOption) {
1638
+ setSelectedRule(ruleOption);
1639
+ if (!debouncedInputValue) return;
1640
+ handleUpdateAndApplyFilter(debouncedInputValue, ruleOption);
1641
+ };
1642
+
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;
1713
+ }
1714
+ var updatedFilter = buildUpdatedFilter({
1715
+ column: column,
1716
+ defaultType: defaultType,
1717
+ option: option
1718
+ });
1719
+ handleApplyFilter(updatedFilter);
1720
+ };
1721
+ var handleTimeRangeChange = function handleTimeRangeChange(times) {
1722
+ if (hasInvalidTimes(times)) {
1723
+ handleApplyFilter({
1724
+ _delete: true
1725
+ });
1726
+ return;
1727
+ }
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)
1154
1758
  }
1155
- })));
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)));
1156
1768
  };
1769
+ var Time$1 = /*#__PURE__*/React__default["default"].memo(Time);
1157
1770
 
1158
- var fetch = function fetch(params) {
1159
- return axios__default["default"].get(SEGMENTS_BASE_URL, {
1160
- params: params
1161
- });
1162
- };
1163
- var show = function show(id) {
1164
- return axios__default["default"].get("".concat(SEGMENTS_BASE_URL, "/").concat(id), {
1165
- transformResponseCase: false
1166
- });
1167
- };
1168
- var create = function create(payload) {
1169
- return axios__default["default"].post(SEGMENTS_BASE_URL, {
1170
- segment: payload
1171
- });
1172
- };
1173
- var update = function update(_ref) {
1174
- var id = _ref.id,
1175
- payload = _ref.payload,
1176
- _ref$showToastr = _ref.showToastr,
1177
- showToastr = _ref$showToastr === void 0 ? true : _ref$showToastr;
1178
- return axios__default["default"].put("".concat(SEGMENTS_BASE_URL, "/").concat(id), payload, {
1179
- showToastr: showToastr
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
1180
1851
  });
1181
1852
  };
1182
- var destroy = function destroy(id) {
1183
- return axios__default["default"]["delete"]("".concat(SEGMENTS_BASE_URL, "/").concat(id));
1184
- };
1185
- var segmentsApi = {
1186
- fetch: fetch,
1187
- show: show,
1188
- create: create,
1189
- update: update,
1190
- destroy: destroy
1191
- };
1192
1853
 
1193
- var QUERY_KEYS = {
1194
- SEGMENTS_LIST: "segments-list"
1854
+ var STEPS = {
1855
+ ADD: "add",
1856
+ COLUMN: "column",
1857
+ VALUE: "value"
1195
1858
  };
1196
- var SEGMENTS_STALE_TIME = 900000; // 15 mins
1197
1859
 
1198
- 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; }
1199
- 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; }
1200
- var SEGMENTS_LIST = QUERY_KEYS.SEGMENTS_LIST;
1201
- var useFetchSegments = function useFetchSegments(_ref) {
1202
- var entity = _ref.entity,
1203
- _ref$searchTerm = _ref.searchTerm,
1204
- searchTerm = _ref$searchTerm === void 0 ? "" : _ref$searchTerm;
1205
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1206
- return reactQuery.useQuery([SEGMENTS_LIST, entity, searchTerm], function () {
1207
- return segmentsApi.fetch({
1208
- entity: entity,
1209
- searchTerm: searchTerm
1210
- });
1211
- }, ramda.mergeRight({
1212
- staleTime: SEGMENTS_STALE_TIME,
1213
- select: ramda.prop("segments")
1214
- }, options));
1215
- };
1216
- var useShowSegment = function useShowSegment(id) {
1217
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1218
- return reactQuery.useQuery([SEGMENTS_LIST, id], function () {
1219
- return segmentsApi.show(id);
1220
- }, ramda.mergeRight({
1221
- staleTime: SEGMENTS_STALE_TIME,
1222
- select: ramda.prop("segment")
1223
- }, options));
1224
- };
1225
- var useCreateSegment = function useCreateSegment(options) {
1226
- return reactUtils.useMutationWithInvalidation(segmentsApi.create, _objectSpread$3({
1227
- keysToInvalidate: [SEGMENTS_LIST]
1228
- }, options));
1229
- };
1230
- var useUpdateSegment = function useUpdateSegment(options) {
1231
- return reactUtils.useMutationWithInvalidation(segmentsApi.update, _objectSpread$3({
1232
- keysToInvalidate: [SEGMENTS_LIST]
1233
- }, options));
1234
- };
1235
- var useDestroySegment = function useDestroySegment(options) {
1236
- return reactUtils.useMutationWithInvalidation(segmentsApi.destroy, _objectSpread$3({
1237
- keysToInvalidate: [SEGMENTS_LIST]
1238
- }, options));
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
+ }));
1239
1936
  };
1240
1937
 
1241
1938
  var buildSegmentsValidationSchema = function buildSegmentsValidationSchema(defaultSegmentName) {
1242
1939
  return yup__namespace.object({
1243
- name: yup__namespace.string().trim().required().test({
1940
+ name: yup__namespace.string().trim().required(i18next.t("neetoFilters.segments.nameIsRequired")).test({
1244
1941
  name: "not-default-segment-name",
1245
1942
  test: function test(value) {
1246
1943
  return (value === null || value === void 0 ? void 0 : value.toLocaleLowerCase()) !== defaultSegmentName.toLocaleLowerCase();
@@ -1250,1151 +1947,907 @@ var buildSegmentsValidationSchema = function buildSegmentsValidationSchema(defau
1250
1947
  });
1251
1948
  };
1252
1949
 
1253
- var Menu = neetoui.Dropdown.Menu,
1254
- MenuItem = neetoui.Dropdown.MenuItem;
1255
- var Segment = function Segment(_ref) {
1256
- var entity = _ref.entity,
1257
- filters = _ref.filters,
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,
1258
1963
  columns = _ref.columns,
1259
- childrenKeys = _ref.childrenKeys,
1260
- setIsFilterPaneOpen = _ref.setIsFilterPaneOpen,
1261
- defaultSegmentName = _ref.defaultSegmentName;
1262
- var _useState = React.useState(false),
1263
- _useState2 = _slicedToArray(_useState, 2),
1264
- isSavePaneOpen = _useState2[0],
1265
- setIsSavePaneOpen = _useState2[1];
1266
- var _useState3 = React.useState(false),
1267
- _useState4 = _slicedToArray(_useState3, 2),
1268
- isUpdateAlertOpen = _useState4[0],
1269
- setIsUpdateAlertOpen = _useState4[1];
1270
- var inputRef = React.useRef(null);
1964
+ filters = _ref.filters,
1965
+ childrenKeys = _ref.childrenKeys;
1966
+ var history = reactRouterDom_min.useHistory();
1271
1967
  var _useTranslation = reactI18next.useTranslation(),
1272
1968
  t = _useTranslation.t;
1273
- var history = reactRouterDom.useHistory();
1274
- var filtersPayload = buildSegmentsPayload(filters, childrenKeys);
1275
- var _getQueryParams = utils.getQueryParams(),
1276
- segmentId = _getQueryParams.segmentId;
1277
- var _useShowSegment = useShowSegment(segmentId, {
1278
- enabled: ramda.isNotNil(segmentId)
1969
+ var _buildFilteredColumns = buildFilteredColumns({
1970
+ searchTerm: "",
1971
+ columns: columns
1279
1972
  }),
1280
- _useShowSegment$data = _useShowSegment.data,
1281
- selectedSegment = _useShowSegment$data === void 0 ? {} : _useShowSegment$data;
1282
- var _useCreateSegment = useCreateSegment(),
1283
- createSegment = _useCreateSegment.mutate,
1284
- isCreating = _useCreateSegment.isLoading;
1285
- var _useUpdateSegment = useUpdateSegment(),
1286
- updateSegment = _useUpdateSegment.mutate,
1287
- isUpdating = _useUpdateSegment.isLoading;
1288
- var isSubmitting = isCreating || isUpdating;
1289
- var handleUpdate = function handleUpdate() {
1290
- return updateSegment({
1291
- id: segmentId,
1292
- payload: {
1293
- filters: filtersPayload
1294
- }
1295
- }, {
1296
- onSuccess: function onSuccess() {
1297
- return setIsUpdateAlertOpen(false);
1298
- }
1299
- });
1300
- };
1301
- var handleCreateSuccess = function handleCreateSuccess(_ref2) {
1302
- var _filters$;
1303
- var _ref2$segment = _ref2.segment,
1304
- id = _ref2$segment.id,
1305
- filters = _ref2$segment.filters;
1306
- history.push({
1307
- search: buildUrlFromSegment({
1308
- columns: columns,
1309
- filters: (_filters$ = filters[0]) === null || _filters$ === void 0 ? void 0 : _filters$.conditions,
1310
- id: id
1311
- })
1312
- });
1313
- setIsSavePaneOpen(false);
1314
- };
1315
- var handleSubmit = function handleSubmit(_ref3) {
1316
- var name = _ref3.name;
1317
- return createSegment({
1318
- name: name,
1319
- entity: entity,
1320
- filters: filtersPayload
1321
- }, {
1322
- onSuccess: handleCreateSuccess
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
1323
1988
  });
1324
1989
  };
1325
- return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, ramda.isNil(segmentId) ? /*#__PURE__*/React__default["default"].createElement(neetoui.Button, {
1326
- disabled: hasOnlyKeywordFilter(filters),
1327
- label: t("neetoFilters.segments.saveAsSegment"),
1328
- style: "secondary",
1329
- onClick: function onClick() {
1330
- setIsFilterPaneOpen(false);
1331
- setIsSavePaneOpen(true);
1332
- }
1333
- }) : /*#__PURE__*/React__default["default"].createElement(neetoui.Dropdown, {
1334
- buttonStyle: "secondary",
1335
- label: t("neetoFilters.segments.saveSegment")
1336
- }, /*#__PURE__*/React__default["default"].createElement(Menu, null, /*#__PURE__*/React__default["default"].createElement(MenuItem.Button, {
1337
- isDisabled: ramda.equals(filtersPayload, selectedSegment === null || selectedSegment === void 0 ? void 0 : selectedSegment.filters),
1338
- onClick: setIsUpdateAlertOpen
1339
- }, t("neetoFilters.segments.saveSegment")), /*#__PURE__*/React__default["default"].createElement(MenuItem.Button, {
1340
- onClick: function onClick() {
1341
- setIsFilterPaneOpen(false);
1342
- setIsSavePaneOpen(true);
1343
- }
1344
- }, t("neetoFilters.segments.saveAsNewSegment")))), /*#__PURE__*/React__default["default"].createElement(neetoui.Pane, {
1345
- initialFocusRef: inputRef,
1346
- isOpen: isSavePaneOpen,
1347
- onClose: function onClose() {
1348
- return setIsSavePaneOpen(false);
1349
- }
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
1350
2006
  }, /*#__PURE__*/React__default["default"].createElement(neetoui.Pane.Header, null, /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
1351
2007
  style: "h2",
1352
2008
  weight: "semibold"
1353
- }, t("neetoFilters.segments.addNewSegment"))), /*#__PURE__*/React__default["default"].createElement(formik.Form, {
2009
+ }, isEdit ? t("neetoFilters.segments.editSegment") : t("neetoFilters.segments.addNewSegment"))), /*#__PURE__*/React__default["default"].createElement(formik.Form, {
1354
2010
  className: "w-full",
1355
2011
  formProps: {
1356
2012
  noValidate: true
1357
2013
  },
1358
2014
  formikProps: {
1359
- initialValues: {
1360
- name: ""
1361
- },
2015
+ initialValues: initialValues,
1362
2016
  validateOnChange: true,
1363
2017
  validateOnBlur: true,
1364
2018
  validationSchema: buildSegmentsValidationSchema(defaultSegmentName),
1365
2019
  onSubmit: handleSubmit
1366
2020
  }
1367
- }, /*#__PURE__*/React__default["default"].createElement(neetoui.Pane.Body, null, /*#__PURE__*/React__default["default"].createElement(formik.Input, {
1368
- className: "w-full",
1369
- label: t("neetoFilters.segments.name"),
1370
- name: "name",
1371
- placeholder: t("neetoFilters.segments.segmentName"),
1372
- ref: inputRef
1373
- })), /*#__PURE__*/React__default["default"].createElement(neetoui.Pane.Footer, {
1374
- className: "flex items-center space-x-2"
1375
- }, /*#__PURE__*/React__default["default"].createElement(formik.ActionBlock, {
1376
- cancelButtonProps: {
1377
- onClick: function onClick() {
1378
- return setIsSavePaneOpen(false);
1379
- },
1380
- disabled: false
1381
- },
1382
- submitButtonProps: {
1383
- disabled: isSubmitting,
1384
- loading: isSubmitting
1385
- }
1386
- })))), /*#__PURE__*/React__default["default"].createElement(neetoui.Alert, {
1387
- isOpen: isUpdateAlertOpen,
1388
- isSubmitting: isUpdating,
1389
- submitButtonLabel: t("neetoFilters.common.update"),
1390
- title: t("neetoFilters.segments.updateSegment"),
1391
- message: /*#__PURE__*/React__default["default"].createElement(reactI18next.Trans, {
1392
- i18nKey: "neetoFilters.segments.updateSegmentMessage",
1393
- values: {
1394
- entity: selectedSegment === null || selectedSegment === void 0 ? void 0 : selectedSegment.name
1395
- }
1396
- }),
1397
- onClose: function onClose() {
1398
- return setIsUpdateAlertOpen(false);
1399
- },
1400
- onSubmit: handleUpdate
1401
- }));
1402
- };
1403
-
1404
- 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; }
1405
- 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; }
1406
- var Bar = function Bar(_ref) {
1407
- var entity = _ref.entity,
1408
- className = _ref.className,
1409
- _ref$columns = _ref.columns,
1410
- columns = _ref$columns === void 0 ? [] : _ref$columns,
1411
- _ref$keyword = _ref.keyword,
1412
- keyword = _ref$keyword === void 0 ? {
1413
- node: "",
1414
- value: "",
1415
- setValue: neetoCist.noop
1416
- } : _ref$keyword,
1417
- _ref$setIsPaneOpen = _ref.setIsPaneOpen,
1418
- setIsPaneOpen = _ref$setIsPaneOpen === void 0 ? ramda.identity : _ref$setIsPaneOpen,
1419
- _ref$childrenKeys = _ref.childrenKeys,
1420
- childrenKeys = _ref$childrenKeys === void 0 ? [] : _ref$childrenKeys,
1421
- _ref$defaultSegmentNa = _ref.defaultSegmentName,
1422
- defaultSegmentName = _ref$defaultSegmentNa === void 0 ? i18next.t("neetoFilters.common.allResults") : _ref$defaultSegmentNa;
1423
- return function () {
1424
- var _useTranslation = reactI18next.useTranslation(),
1425
- t = _useTranslation.t;
1426
- var initialRenderRef = React.useRef(true);
1427
- var searchParams = reactUtils.useQueryParams({
1428
- toCamelCase: false
1429
- });
1430
- var keywordValue = searchParams[SEARCH_TERM_KEY] || "";
1431
- var keywordFilter = _objectSpread$2(_objectSpread$2({
1432
- type: "text",
1433
- rule: "contains",
1434
- label: t("neetoFilters.common.searchTerm")
1435
- }, keyword), {}, {
1436
- key: SEARCH_TERM_KEY,
1437
- value: keywordValue
1438
- });
1439
- var filters = buildFiltersFromSearchParams(isKeywordFilterPresent(keywordFilter) && neetoCist.isNotEmpty(keywordValue) ? [keywordFilter].concat(_toConsumableArray(columns)) : columns);
1440
- var nonHiddenFilters = neetoCist.removeBy({
1441
- hidden: true
1442
- }, filters);
1443
- var history = reactRouterDom.useHistory();
1444
- var handleSubmit = function handleSubmit(newFilters, isClearAll) {
1445
- var params = buildUrlFromFilters(_objectSpread$2({
1446
- columns: columns,
1447
- filters: isKeywordFilterPresent(keywordFilter) && neetoCist.isNotEmpty(getSearchTermFromUrl()) ? [].concat(_toConsumableArray(newFilters), [keywordFilter]) : newFilters
1448
- }, isClearAll && {
1449
- isClearAll: true,
1450
- childrenKeys: childrenKeys
1451
- }));
1452
- history.push({
1453
- search: params
1454
- });
1455
- };
1456
- var handleDelete = function handleDelete(key) {
1457
- if (key === SEARCH_TERM_KEY) {
1458
- var params = ramda.omit([SEARCH_TERM_KEY], getSnakeCasedQueryParams());
1459
- var pathname = window.location.pathname;
1460
- history.push(utils.buildUrl(pathname, params));
1461
- return;
1462
- }
1463
- if (childrenKeys.includes(key)) {
1464
- var _params = ramda.omit([key], getSnakeCasedQueryParams());
1465
- var _pathname = window.location.pathname;
1466
- history.push(utils.buildUrl(_pathname, _params));
1467
- }
1468
- var newFilters = neetoCist.removeBy({
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({
1469
2040
  key: key
1470
- }, filters);
1471
- handleSubmit(newFilters);
1472
- };
1473
- var handleClearAll = function handleClearAll() {
1474
- var params = isKeywordFilterPresent(keywordFilter) ? ramda.omit([SEARCH_TERM_KEY], getSnakeCasedQueryParams()) : getSnakeCasedQueryParams();
1475
- var pathname = window.location.pathname;
1476
- history.push(utils.buildUrl(pathname, params));
1477
- handleSubmit([], true);
1478
- };
1479
- var childrenFiltersApplied = childrenKeys.some(function (key) {
1480
- return ramda.has(key, searchParams);
1481
- });
1482
- var hideClearButton = nonHiddenFilters.every(function (_ref2) {
1483
- var defaultValue = _ref2.defaultValue,
1484
- isClearable = _ref2.isClearable;
1485
- return defaultValue && !isClearable;
1486
- }) && !childrenFiltersApplied;
1487
- React.useEffect(function () {
1488
- if (initialRenderRef.current) {
1489
- initialRenderRef.current = false;
1490
- return neetoCist.noop;
1491
- }
1492
- var handler = setTimeout(function () {
1493
- handleSubmit(filters);
1494
- }, 500);
1495
- return function () {
1496
- return clearTimeout(handler);
1497
- };
1498
- }, [keywordValue]);
1499
- if (ramda.isEmpty(nonHiddenFilters) && !childrenFiltersApplied) return null;
1500
- return /*#__PURE__*/React__default["default"].createElement("div", {
1501
- className: classnames__default["default"]("neeto-filters-bar", _defineProperty({}, className, className))
1502
- }, nonHiddenFilters.map(function (filter) {
1503
- var _filter$suffixCompone;
1504
- return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, {
1505
- key: filter.key
1506
- }, /*#__PURE__*/React__default["default"].createElement(Block, {
1507
- filter: filter,
1508
- handleDelete: handleDelete,
1509
- setIsPaneOpen: setIsPaneOpen
1510
- }), (_filter$suffixCompone = filter.suffixComponent) === null || _filter$suffixCompone === void 0 ? void 0 : _filter$suffixCompone.call(filter), /*#__PURE__*/React__default["default"].createElement("div", {
1511
- className: "neeto-filters-bar--separator"
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
+ }
1512
2063
  }));
1513
- }), childrenKeys.filter(function (childKey) {
1514
- return ramda.has(childKey, searchParams);
1515
- }).map(function (childKey) {
1516
- return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, {
1517
- key: childKey
1518
- }, /*#__PURE__*/React__default["default"].createElement(ChildBlock, {
1519
- childKey: childKey,
1520
- handleDelete: handleDelete,
1521
- setIsPaneOpen: setIsPaneOpen
1522
- }), /*#__PURE__*/React__default["default"].createElement("div", {
1523
- className: "neeto-filters-bar--separator"
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
+ });
1524
2079
  }));
1525
- }), /*#__PURE__*/React__default["default"].createElement("div", {
1526
- className: "flex items-center gap-x-2"
1527
- }, ramda.isNotNil(entity) && /*#__PURE__*/React__default["default"].createElement(Segment, {
1528
- childrenKeys: childrenKeys,
1529
- columns: columns,
1530
- defaultSegmentName: defaultSegmentName,
1531
- entity: entity,
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, {
1532
2085
  filters: filters,
1533
- setIsFilterPaneOpen: setIsPaneOpen
1534
- }), !hideClearButton && /*#__PURE__*/React__default["default"].createElement(neetoui.Button, {
1535
- "data-cy": "neeto-filters-bar-clear-btn",
1536
- label: t("neetoFilters.common.clearFilters"),
1537
- style: "text",
1538
- onClick: handleClearAll
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
+ }
1539
2110
  })));
1540
- }();
2111
+ }));
1541
2112
  };
1542
2113
 
1543
- function _extends() {
1544
- _extends = Object.assign ? Object.assign.bind() : function (target) {
1545
- for (var i = 1; i < arguments.length; i++) {
1546
- var source = arguments[i];
1547
- for (var key in source) {
1548
- if (Object.prototype.hasOwnProperty.call(source, key)) {
1549
- target[key] = source[key];
1550
- }
1551
- }
1552
- }
1553
- return target;
1554
- };
1555
- return _extends.apply(this, arguments);
1556
- }
1557
-
1558
- function _objectWithoutPropertiesLoose(source, excluded) {
1559
- if (source == null) return {};
1560
- var target = {};
1561
- var sourceKeys = Object.keys(source);
1562
- var key, i;
1563
- for (i = 0; i < sourceKeys.length; i++) {
1564
- key = sourceKeys[i];
1565
- if (excluded.indexOf(key) >= 0) continue;
1566
- target[key] = source[key];
1567
- }
1568
- return target;
1569
- }
1570
-
1571
- function _objectWithoutProperties(source, excluded) {
1572
- if (source == null) return {};
1573
- var target = _objectWithoutPropertiesLoose(source, excluded);
1574
- var key, i;
1575
- if (Object.getOwnPropertySymbols) {
1576
- var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
1577
- for (i = 0; i < sourceSymbolKeys.length; i++) {
1578
- key = sourceSymbolKeys[i];
1579
- if (excluded.indexOf(key) >= 0) continue;
1580
- if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
1581
- target[key] = source[key];
1582
- }
1583
- }
1584
- return target;
1585
- }
1586
-
1587
- var useFilters = function useFilters(_ref) {
1588
- var onFiltersChange = _ref.onFiltersChange,
1589
- columns = _ref.columns,
1590
- keywordFilter = _ref.keywordFilter,
1591
- onSelectorsChange = _ref.onSelectorsChange;
1592
- var _useTransition = React.useTransition(),
1593
- _useTransition2 = _slicedToArray(_useTransition, 2);
1594
- _useTransition2[0];
1595
- var startTransition = _useTransition2[1];
1596
- var initialRender = React.useRef(true);
1597
- var prevFilters = React.useRef([]);
1598
- var location = reactRouterDom.useLocation();
1599
- var filters = buildFiltersFromSearchParams(columns, false);
1600
- var history = reactRouterDom.useHistory();
1601
- var defaultValuesOfColumns = JSON.stringify(ramda.pluck("defaultValue", columns));
1602
- var handlePrecenseOfDefaultFilters = function handlePrecenseOfDefaultFilters(defaultFilters) {
1603
- var params = buildUrlFromFilters({
1604
- columns: columns,
1605
- filters: isKeywordFilterPresent(keywordFilter) && neetoCist.isNotEmpty(getSearchTermFromUrl()) ? [].concat(_toConsumableArray(defaultFilters), [keywordFilter]) : defaultFilters
1606
- });
1607
- history.replace({
1608
- search: params
1609
- });
1610
- };
1611
- var handleFiltersChange = function handleFiltersChange(filtersPayload) {
1612
- startTransition(function () {
1613
- onFiltersChange(buildFiltersPayload(filtersPayload.filter(function (filter) {
1614
- return !ramda.isNil(filter.node);
1615
- })));
1616
- });
1617
- };
1618
-
1619
- //This function sends the updated filters to host via callbacks.
1620
- var sendUpdatedFilters = function sendUpdatedFilters() {
1621
- if (compareFilters(ramda.append(keywordFilter, filters), prevFilters.current)) {
1622
- return;
1623
- }
1624
- var newFilters = buildFiltersFromSearchParams(columns);
1625
- var filtersPayload = isKeywordFilterPresent(keywordFilter) && neetoCist.isNotEmpty(getSearchTermFromUrl()) ? ramda.append(keywordFilter, newFilters) : newFilters;
1626
- handleFiltersChange(filtersPayload);
1627
- onSelectorsChange(buildSelectorsFromURL(columns));
1628
- };
1629
- var handleChangesInURL = function handleChangesInURL() {
1630
- var defaultFilters = buildDefaultFilters(columns, filters);
1631
- var searchParams = getSnakeCasedQueryParams();
1632
- var keys = ramda.pluck("key", ramda.append(keywordFilter, columns));
1633
- if (keys.every(function (key) {
1634
- return ramda.isNil(searchParams[key]);
1635
- }) && !ramda.isEmpty(defaultFilters)) {
1636
- history.replace({
1637
- search: buildUrlFromFilters({
1638
- columns: columns,
1639
- filters: ramda.concat(defaultFilters, filters)
1640
- })
1641
- });
1642
- filters = buildFiltersFromSearchParams(columns, false);
1643
- }
1644
- };
1645
- React.useEffect(function () {
1646
- if (initialRender.current) {
1647
- initialRender.current = false;
1648
- var keywordValue = getSearchTermFromUrl();
1649
- var defaultFilters = buildDefaultFilters(columns, filters);
1650
- neetoCist.isNotEmpty(defaultFilters) && handlePrecenseOfDefaultFilters(defaultFilters);
1651
- prevFilters.current = ramda.append(ramda.mergeRight(keywordFilter, {
1652
- value: keywordValue
1653
- }), filters);
1654
- } else {
1655
- handleChangesInURL();
1656
- sendUpdatedFilters();
1657
- prevFilters.current = ramda.append(keywordFilter, filters);
1658
- }
1659
- }, [location.search, defaultValuesOfColumns]);
1660
- return filters;
2114
+ var QUERY_KEYS = {
2115
+ SEGMENTS_LIST: "segments-list"
1661
2116
  };
2117
+ var SEGMENTS_STALE_TIME = 900000; // 15 mins
1662
2118
 
1663
- var buildDropdownValue = function buildDropdownValue(_ref) {
1664
- var defaultType = _ref.defaultType,
1665
- filter = _ref.filter,
1666
- options = _ref.options;
1667
- if (!filter) return null;
1668
- if (isMulti(defaultType)) {
1669
- return options.filter(function (_ref2) {
1670
- var value = _ref2.value;
1671
- return filter.value.includes(value);
1672
- });
1673
- }
1674
- return neetoCist.findBy({
1675
- value: filter.value
1676
- }, options);
1677
- };
1678
- var buildSingleTimeValue = function buildSingleTimeValue(filter) {
1679
- var _findBy2;
1680
- if (!filter) return null;
1681
- return (_findBy2 = neetoCist.findBy({
1682
- value: filter.value
1683
- }, TIME_OPTIONS)) !== null && _findBy2 !== void 0 ? _findBy2 : ramda.last(TIME_OPTIONS);
1684
- };
1685
- var getOtherProps = function getOtherProps(props) {
1686
- return ramda.omit(["key", "node", "label", "type", "values", "model", "showRuleSelector"], props);
1687
- };
1688
- var buildDropdownOptions = function buildDropdownOptions(_ref3) {
1689
- var defaultType = _ref3.defaultType,
1690
- filter = _ref3.filter,
1691
- options = _ref3.options;
1692
- options = options.map(ramda.modify("value", function (value) {
1693
- return value === null || value === void 0 ? void 0 : value.toString();
1694
- }));
1695
- if (!filter) return options;
1696
- if (isMulti(defaultType)) {
1697
- var selectedOptions = filter.value.map(function (value) {
1698
- return neetoCist.findBy({
1699
- value: value
1700
- }, options) || neetoCist.toLabelAndValue(value);
1701
- });
1702
- var nonSelectedOptions = options.filter(function (option) {
1703
- return !filter.value.includes(option.value);
1704
- });
1705
- return ramda.concat(selectedOptions, nonSelectedOptions);
1706
- }
1707
- if (!neetoCist.findBy({
1708
- value: filter.value
1709
- }, options)) {
1710
- return ramda.append(neetoCist.toLabelAndValue(filter.value), options);
1711
- }
1712
- return options;
2119
+ var DEFAULT_SEGMENTS_CACHE = {
2120
+ segments: []
1713
2121
  };
1714
- var initializeDateRule = function initializeDateRule(filter) {
1715
- return filter ? neetoCist.findBy({
1716
- value: filter === null || filter === void 0 ? void 0 : filter.value
1717
- }, DATE_OPTIONS) || findDateOption(filter, DATE_OPTIONS) : {};
2122
+ var SEGMENT_ACTIONS$1 = {
2123
+ EDIT: "edit",
2124
+ CREATE: "create"
1718
2125
  };
1719
- var getDateValue = function getDateValue(value, rule) {
1720
- if (ramda.isEmpty(value) || ramda.isNil(value)) {
1721
- return null;
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")
1722
2139
  }
1723
- if (rule.value === "custom-date-range") {
1724
- return value;
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")));
1725
2149
  }
1726
- return rule.value === "before" ? dayjs(value[1]).add(1, "day") : dayjs(value[0]).subtract(1, "day");
2150
+ return value.map(utils.dateFormat.date).join(" - ");
1727
2151
  };
1728
- var findDateOption = function findDateOption(filter, options) {
1729
- var value = filter.value;
1730
- var isBeforeOrAfter = dayjs(value[1]).diff(dayjs(value[0]), "year") >= 90;
1731
- if (ramda.not(isBeforeOrAfter)) {
1732
- return ramda.last(options);
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
+ });
1733
2185
  }
1734
- var currentMoment = dayjs();
1735
- var diffWithStart = Math.abs(currentMoment.diff(dayjs(value[0]), "year"));
1736
- var diffWithEnd = Math.abs(currentMoment.diff(dayjs(value[1]), "year"));
1737
- return diffWithStart < diffWithEnd ? neetoCist.findBy({
1738
- value: "after"
1739
- }, options) : neetoCist.findBy({
1740
- value: "before"
1741
- }, options);
2186
+ return ((_findBy2 = neetoCist.findBy({
2187
+ value: value
2188
+ }, values)) === null || _findBy2 === void 0 ? void 0 : _findBy2.label) || value;
1742
2189
  };
1743
- var buildDateValues = function buildDateValues(dates, selectedRule) {
1744
- if (selectedRule.value === "after") {
1745
- return [dates.add(1, "day"), dates.add(100, "year")];
1746
- } else if (selectedRule.value === "before") {
1747
- return [dates.subtract(100, "year"), dates.subtract(1, "day")];
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") : "";
1748
2211
  }
1749
- return dates;
2212
+ return "";
1750
2213
  };
1751
- var buildHelpIconProps = function buildHelpIconProps(helpIconProps) {
1752
- return ramda.mergeDeepRight(DEFAULT_HELP_ICON_PROPS, helpIconProps);
2214
+ var hasOnlyKeywordFilter = function hasOnlyKeywordFilter(filters) {
2215
+ return filters.length === 1 && filters[0].key === SEARCH_TERM_KEY;
1753
2216
  };
1754
-
1755
- var Boolean = function Boolean(_ref) {
1756
- var column = _ref.column,
1757
- filter = _ref.filter,
1758
- handleApplyFilter = _ref.handleApplyFilter,
1759
- autoFocus = _ref.autoFocus;
1760
- var key = column.key,
1761
- _column$defaultType = column.defaultType,
1762
- defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
1763
- label = column.label,
1764
- values = column.values,
1765
- _column$helpIconProps = column.helpIconProps,
1766
- helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
1767
- var options = ramda.isNil(values) || ramda.isEmpty(values) ? DEFAULT_BOOLEAN_OPTIONS : values;
1768
- var otherProps = getOtherProps(column);
1769
- var value = buildDropdownValue({
1770
- defaultType: defaultType,
1771
- filter: filter,
1772
- options: options
1773
- });
1774
- var _useTranslation = reactI18next.useTranslation(),
1775
- t = _useTranslation.t;
1776
- var handleChange = function handleChange(option) {
1777
- if (ramda.isEmpty(option) || ramda.isNil(option)) {
1778
- handleApplyFilter({
1779
- _delete: true
1780
- });
1781
- return;
1782
- }
1783
- var updatedFilter = buildUpdatedFilter({
1784
- column: column,
1785
- defaultType: defaultType,
1786
- option: option
1787
- });
1788
- handleApplyFilter(updatedFilter);
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)));
1789
2222
  };
1790
- return /*#__PURE__*/React__default["default"].createElement("div", {
1791
- className: "neeto-filters-pane-filter__item-wrapper"
1792
- }, /*#__PURE__*/React__default["default"].createElement(neetoui.Select, _extends({
1793
- autoFocus: autoFocus,
1794
- label: label,
1795
- options: options,
1796
- value: value,
1797
- isClearable: true
1798
- }, neetoCist.isNotEmpty(helpIconProps) && {
1799
- labelProps: {
1800
- helpIconProps: buildHelpIconProps(helpIconProps)
1801
- }
1802
- }, {
1803
- "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(key), "-filter"),
1804
- strategy: "fixed",
1805
- placeholder: t("neetoFilters.messages.selectOption", {
1806
- resource: label
1807
- }),
1808
- onChange: handleChange
1809
- }, otherProps)));
2223
+ return neetoCist.notEqualsDeep(comparisonHelper(filters1), comparisonHelper(filters2));
1810
2224
  };
1811
- var Boolean$1 = /*#__PURE__*/React__default["default"].memo(Boolean);
1812
2225
 
1813
- var Datetime = function Datetime(_ref) {
1814
- var column = _ref.column,
1815
- filter = _ref.filter,
1816
- handleApplyFilter = _ref.handleApplyFilter,
1817
- autoFocus = _ref.autoFocus;
1818
- var _useState = React.useState(initializeDateRule(filter)),
1819
- _useState2 = _slicedToArray(_useState, 2),
1820
- selectedRule = _useState2[0],
1821
- setSelectedRule = _useState2[1];
1822
- var _useTranslation = reactI18next.useTranslation(),
1823
- t = _useTranslation.t;
1824
- var key = column.key,
1825
- _column$defaultType = column.defaultType,
1826
- defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
1827
- label = column.label,
1828
- _column$helpIconProps = column.helpIconProps,
1829
- helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
1830
- var isDatePickerShown = filter && isCustomDateRange(filter.value);
1831
- var otherProps = getOtherProps(column);
1832
- var handleChange = function handleChange(option) {
1833
- if (ramda.isEmpty(option) || ramda.isNil(option)) {
1834
- handleApplyFilter({
1835
- _delete: true
1836
- });
1837
- setSelectedRule({});
1838
- return;
1839
- }
1840
- setSelectedRule(option);
1841
- var updatedFilter = buildUpdatedFilter({
1842
- column: column,
1843
- defaultType: defaultType,
1844
- option: option
1845
- });
1846
- handleApplyFilter(updatedFilter);
1847
- };
1848
- var handleDateRangeChange = function handleDateRangeChange(dates) {
1849
- if (ramda.isEmpty(dates) || ramda.isNil(dates)) {
1850
- handleApplyFilter({
1851
- _delete: true
1852
- });
1853
- setSelectedRule({});
1854
- return;
1855
- }
1856
- var updatedFilter = buildUpdatedFilter({
1857
- column: column,
1858
- defaultType: defaultType,
1859
- option: {
1860
- value: ramda.pluck("$d", buildDateValues(dates, selectedRule)).map(function (date) {
1861
- return date.toISOString();
1862
- })
1863
- }
1864
- });
1865
- handleApplyFilter(updatedFilter);
1866
- };
1867
- React.useEffect(function () {
1868
- ramda.isNil(filter) && setSelectedRule({});
1869
- }, [filter]);
1870
- return /*#__PURE__*/React__default["default"].createElement("div", {
1871
- className: "neeto-filters-pane-filter__item-wrapper"
1872
- }, /*#__PURE__*/React__default["default"].createElement(neetoui.Select, _extends({
1873
- autoFocus: autoFocus,
1874
- label: label,
1875
- isClearable: true,
1876
- "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(key), "-filter"),
1877
- options: DATE_OPTIONS,
1878
- strategy: "fixed",
1879
- value: selectedRule,
1880
- placeholder: t("neetoFilters.messages.selectResource", {
1881
- resource: label
1882
- })
1883
- }, neetoCist.isNotEmpty(helpIconProps) && {
1884
- labelProps: {
1885
- helpIconProps: buildHelpIconProps(helpIconProps)
1886
- }
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);
1887
2246
  }, {
1888
- onChange: handleChange
1889
- })), isDatePickerShown && /*#__PURE__*/React__default["default"].createElement(neetoui.DatePicker, _extends({
1890
- "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(key), "-date-range"),
1891
- getPopupContainer: ramda.prop("parentNode"),
1892
- type: (selectedRule === null || selectedRule === void 0 ? void 0 : selectedRule.value) === "custom-date-range" ? "range" : "date",
1893
- value: getDateValue(filter === null || filter === void 0 ? void 0 : filter.value, selectedRule),
1894
- onChange: handleDateRangeChange
1895
- }, otherProps)));
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
+ }))));
1896
2288
  };
1897
- var Datetime$1 = /*#__PURE__*/React__default["default"].memo(Datetime);
1898
2289
 
1899
- var Dropdown = function Dropdown(_ref) {
1900
- var column = _ref.column,
1901
- filter = _ref.filter,
1902
- handleApplyFilter = _ref.handleApplyFilter,
1903
- autoFocus = _ref.autoFocus;
1904
- var key = column.key,
1905
- label = column.label,
1906
- values = column.values,
1907
- defaultValue = column.defaultValue,
1908
- _column$defaultType = column.defaultType,
1909
- defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
1910
- _column$isClearable = column.isClearable,
1911
- isClearable = _column$isClearable === void 0 ? true : _column$isClearable,
1912
- _column$helpIconProps = column.helpIconProps,
1913
- helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
1914
- var otherProps = getOtherProps(column);
1915
- var options = buildDropdownOptions({
1916
- defaultType: defaultType,
1917
- filter: filter,
1918
- options: values
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"
1919
2298
  });
1920
- var value = buildDropdownValue({
1921
- defaultType: defaultType,
1922
- filter: filter,
1923
- options: options
2299
+ var openFilterPaneHotKeyRef = useHotkeys__default["default"](SHORTCUTS.openFilterPane.sequence, function () {
2300
+ return setIsPaneOpen(childKey);
2301
+ }, {
2302
+ mode: "scoped"
1924
2303
  });
1925
- var _useTranslation = reactI18next.useTranslation(),
1926
- t = _useTranslation.t;
1927
- var handleChange = function handleChange(option) {
1928
- if (ramda.isEmpty(option) || ramda.isNil(option)) {
1929
- handleApplyFilter({
1930
- _delete: true
1931
- });
1932
- return;
1933
- }
1934
- var updatedFilter = buildUpdatedFilter({
1935
- column: column,
1936
- defaultType: defaultType,
1937
- option: option
1938
- });
1939
- handleApplyFilter(updatedFilter);
1940
- };
1941
2304
  return /*#__PURE__*/React__default["default"].createElement("div", {
1942
- className: "neeto-filters-pane-filter__item-wrapper"
1943
- }, /*#__PURE__*/React__default["default"].createElement(neetoui.Select, _extends({
1944
- autoFocus: autoFocus,
1945
- label: label,
1946
- options: options,
1947
- value: value,
1948
- "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(key), "-filter"),
1949
- isClearable: !defaultValue && isClearable,
1950
- isMulti: isMulti(defaultType),
1951
- strategy: "fixed",
1952
- placeholder: t("neetoFilters.messages.selectResource", {
1953
- resource: label
1954
- })
1955
- }, neetoCist.isNotEmpty(helpIconProps) && {
1956
- labelProps: {
1957
- helpIconProps: buildHelpIconProps(helpIconProps)
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);
1958
2314
  }
1959
- }, {
1960
- onChange: handleChange
1961
- }, otherProps)));
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
+ })));
1962
2329
  };
1963
- var Dropdown$1 = /*#__PURE__*/React__default["default"].memo(Dropdown);
1964
2330
 
1965
- var SingleDatetime = function SingleDatetime(_ref) {
1966
- var column = _ref.column,
1967
- filter = _ref.filter,
2331
+ var FilterBar = function FilterBar(_ref) {
2332
+ var entity = _ref.entity,
1968
2333
  filters = _ref.filters,
1969
- handleApplyFilter = _ref.handleApplyFilter,
1970
- autoFocus = _ref.autoFocus;
1971
- var _useState = React.useState(function () {
1972
- return neetoCist.findBy({
1973
- value: filter === null || filter === void 0 ? void 0 : filter.rule
1974
- }, SINGLE_DATE_OPTIONS) || SINGLE_DATE_OPTIONS[0];
1975
- }),
1976
- _useState2 = _slicedToArray(_useState, 2),
1977
- selectedRule = _useState2[0],
1978
- setSelectedRule = _useState2[1];
1979
- var key = column.key,
1980
- _column$defaultType = column.defaultType,
1981
- defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
1982
- label = column.label,
1983
- _column$helpIconProps = column.helpIconProps,
1984
- helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
1985
- var otherProps = getOtherProps(column);
1986
- var datePickerType = selectedRule.value === "between" ? "range" : "date";
1987
- var value = filter === null || filter === void 0 ? void 0 : filter.value;
1988
-
1989
- // Reset states when "Clear filters" button is clicked.
1990
- React.useEffect(function () {
1991
- if (!ramda.isEmpty(filters)) return;
1992
- setSelectedRule(SINGLE_DATE_OPTIONS[0]);
1993
- }, [filters]);
1994
- var handleRuleChange = function handleRuleChange(ruleOption) {
1995
- setSelectedRule(ruleOption);
1996
-
1997
- // Clear value if switched between incompatable types
1998
- var updateValue = value;
1999
- if (datePickerType === "range" && ruleOption.value !== "between" || datePickerType === "date" && ruleOption.value === "between") {
2000
- updateValue = "";
2001
- }
2002
- var updatedFilter = buildUpdatedFilter({
2003
- column: column,
2004
- defaultType: defaultType,
2005
- option: {},
2006
- rule: ruleOption.value,
2007
- value: updateValue
2008
- });
2009
- handleApplyFilter(updatedFilter);
2010
- };
2011
- var handleChange = function handleChange(dates) {
2012
- if (ramda.isEmpty(dates) || ramda.isNil(dates)) {
2013
- handleApplyFilter({
2014
- _delete: true
2015
- });
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));
2016
2352
  return;
2017
2353
  }
2018
- var value = datePickerType === "range" ? ramda.pluck("$d", dates).map(function (date) {
2019
- return date.toISOString();
2020
- }) : dates["$d"];
2021
- var updatedFilter = buildUpdatedFilter({
2022
- column: column,
2023
- defaultType: defaultType,
2024
- option: {},
2025
- rule: selectedRule.value,
2026
- value: value
2027
- });
2028
- 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);
2029
2363
  };
2030
- return /*#__PURE__*/React__default["default"].createElement("div", {
2031
- className: "neeto-filters-pane-filter__item-wrapper"
2032
- }, /*#__PURE__*/React__default["default"].createElement(neetoui.Select, _extends({
2033
- label: label,
2034
- "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(key), "-filter-rule"),
2035
- defaultValue: SINGLE_DATE_OPTIONS[0],
2036
- options: SINGLE_DATE_OPTIONS,
2037
- strategy: "fixed",
2038
- value: selectedRule
2039
- }, neetoCist.isNotEmpty(helpIconProps) && {
2040
- labelProps: {
2041
- 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
+ });
2042
2409
  }
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
+ })));
2416
+ };
2417
+
2418
+ var fetch = function fetch(params) {
2419
+ return axios__default["default"].get(SEGMENTS_BASE_URL, {
2420
+ params: params
2421
+ });
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
2043
2431
  }, {
2044
- onChange: handleRuleChange
2045
- })), /*#__PURE__*/React__default["default"].createElement(neetoui.DatePicker, _extends({
2046
- autoFocus: autoFocus,
2047
- value: value,
2048
- "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(key), "-filter"),
2049
- getPopupContainer: ramda.prop("parentNode"),
2050
- type: datePickerType,
2051
- onChange: handleChange
2052
- }, otherProps)));
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
2053
2453
  };
2054
2454
 
2055
- var SingleTime = function SingleTime(_ref) {
2056
- var column = _ref.column,
2057
- filter = _ref.filter,
2058
- filters = _ref.filters,
2059
- handleApplyFilter = _ref.handleApplyFilter,
2060
- autoFocus = _ref.autoFocus;
2061
- var _useState = React.useState(function () {
2062
- return neetoCist.findBy({
2063
- value: filter === null || filter === void 0 ? void 0 : filter.rule
2064
- }, SINGLE_TIME_OPTIONS) || SINGLE_TIME_OPTIONS[0];
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();
2497
+ var _useTranslation = reactI18next.useTranslation(),
2498
+ t = _useTranslation.t;
2499
+ var initialRenderRef = React.useRef(true);
2500
+ var _useQueryParams = reactUtils.useQueryParams(),
2501
+ segmentId = _useQueryParams.segmentId;
2502
+ var _useState = React.useState({
2503
+ action: undefined
2065
2504
  }),
2066
2505
  _useState2 = _slicedToArray(_useState, 2),
2067
- selectedRule = _useState2[0],
2068
- setSelectedRule = _useState2[1];
2069
- var key = column.key,
2070
- _column$defaultType = column.defaultType,
2071
- defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
2072
- label = column.label,
2073
- _column$helpIconProps = column.helpIconProps,
2074
- helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
2075
- var otherProps = getOtherProps(column);
2076
- var timePickerType = selectedRule.value === "between" ? "range" : "time";
2077
- var value = filter === null || filter === void 0 ? void 0 : filter.value;
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
2542
+ });
2543
+ };
2544
+ var childrenFiltersApplied = childrenKeys.some(function (key) {
2545
+ return ramda.has(key, searchParams);
2546
+ });
2078
2547
  React.useEffect(function () {
2079
- if (!ramda.isEmpty(filters)) return;
2080
- setSelectedRule(SINGLE_TIME_OPTIONS[0]);
2081
- }, [filters]);
2082
- var handleRuleChange = function handleRuleChange(ruleOption) {
2083
- setSelectedRule(ruleOption);
2084
-
2085
- // Clear value if switched between incompatible types
2086
- var updateValue = value;
2087
- if (timePickerType === "range" && ruleOption.value !== "between" || timePickerType === "time" && ruleOption.value === "between") {
2088
- updateValue = "";
2548
+ if (initialRenderRef.current) {
2549
+ initialRenderRef.current = false;
2550
+ return neetoCist.noop;
2089
2551
  }
2090
- var updatedFilter = buildUpdatedFilter({
2091
- column: column,
2092
- defaultType: defaultType,
2093
- option: {},
2094
- rule: ruleOption.value,
2095
- value: updateValue
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
+ })
2096
2570
  });
2097
- handleApplyFilter(updatedFilter);
2571
+ setIsSavePaneOpen({
2572
+ action: undefined
2573
+ });
2574
+ utils.showThumbsUpToastr();
2098
2575
  };
2099
- var handleChange = function handleChange(times) {
2100
- var value = timePickerType === "range" ? ramda.pluck("$d", times).map(function (time) {
2101
- return time.toISOString();
2102
- }) : times["$d"].toISOString();
2103
- var updatedFilter = buildUpdatedFilter({
2104
- column: column,
2105
- defaultType: defaultType,
2106
- option: {},
2107
- rule: selectedRule.value,
2108
- value: value
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
+ }
2109
2589
  });
2110
- handleApplyFilter(updatedFilter);
2111
2590
  };
2112
- return /*#__PURE__*/React__default["default"].createElement("div", {
2113
- className: "neeto-filters-pane-filter__item-wrapper"
2114
- }, /*#__PURE__*/React__default["default"].createElement(neetoui.Select, _extends({
2115
- label: label,
2116
- defaultValue: SINGLE_TIME_OPTIONS[0],
2117
- options: SINGLE_TIME_OPTIONS,
2118
- strategy: "fixed",
2119
- value: selectedRule
2120
- }, neetoCist.isNotEmpty(helpIconProps) && {
2121
- labelProps: {
2122
- helpIconProps: buildHelpIconProps(helpIconProps)
2123
- }
2124
- }, {
2125
- onChange: handleRuleChange
2126
- })), /*#__PURE__*/React__default["default"].createElement(neetoui.TimePicker, _extends({
2127
- autoFocus: autoFocus,
2128
- value: value,
2129
- use12Hours: true,
2130
- className: "w-full",
2131
- "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(key), "-filter"),
2132
- format: "h:mm A",
2133
- getPopupContainer: ramda.prop("parentNode"),
2134
- type: timePickerType,
2135
- onChange: handleChange
2136
- }, otherProps)));
2137
- };
2138
-
2139
- var Text = function Text(_ref) {
2140
- var column = _ref.column,
2141
- filter = _ref.filter,
2142
- filters = _ref.filters,
2143
- handleApplyFilter = _ref.handleApplyFilter,
2144
- autoFocus = _ref.autoFocus,
2145
- onClose = _ref.onClose;
2146
- var key = column.key,
2147
- _column$defaultType = column.defaultType,
2148
- defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
2149
- label = column.label,
2150
- _column$showRuleSelec = column.showRuleSelector,
2151
- showRuleSelector = _column$showRuleSelec === void 0 ? false : _column$showRuleSelec,
2152
- _column$helpIconProps = column.helpIconProps,
2153
- helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
2154
- var otherProps = getOtherProps(column);
2155
- var ruleOptions = buildRuleOptions({
2156
- defaultType: defaultType
2157
- });
2158
- var inputType = defaultType === "text" || defaultType === "custom.text" ? "text" : "number";
2159
- var _useState = React.useState(filter === null || filter === void 0 ? void 0 : filter.value),
2160
- _useState2 = _slicedToArray(_useState, 2),
2161
- inputValue = _useState2[0],
2162
- setInputValue = _useState2[1];
2163
- var _useState3 = React.useState(function () {
2164
- return neetoCist.findBy({
2165
- value: filter === null || filter === void 0 ? void 0 : filter.rule
2166
- }, ruleOptions) || ruleOptions[0];
2167
- }),
2168
- _useState4 = _slicedToArray(_useState3, 2),
2169
- selectedRule = _useState4[0],
2170
- setSelectedRule = _useState4[1];
2171
- var debouncedInputValue = reactUtils.useDebounce(inputValue);
2172
- var _useTranslation = reactI18next.useTranslation(),
2173
- t = _useTranslation.t;
2174
- var handleUpdateAndApplyFilter = function handleUpdateAndApplyFilter() {
2175
- var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : debouncedInputValue;
2176
- var rule = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : selectedRule;
2177
- if (ramda.equals(filter === null || filter === void 0 ? void 0 : filter.value, value) && ramda.equals(selectedRule, rule)) return;
2178
- var updatedFilter = buildUpdatedFilter({
2179
- column: column,
2180
- defaultType: defaultType,
2181
- option: {},
2182
- rule: rule.value,
2183
- value: value.trim()
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
+ }
2184
2611
  });
2185
- handleApplyFilter(updatedFilter);
2186
- };
2187
- var handleKeydown = function handleKeydown(e) {
2188
- if (!(e.key === "Enter")) return;
2189
- handleUpdateAndApplyFilter(inputValue);
2190
- onClose();
2191
2612
  };
2192
- var handleRuleChange = function handleRuleChange(ruleOption) {
2193
- setSelectedRule(ruleOption);
2194
- if (!debouncedInputValue) return;
2195
- 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
2196
2624
  };
2625
+ };
2197
2626
 
2198
- // Reset states when "Clear filters" button is clicked.
2199
- React.useEffect(function () {
2200
- (ramda.isEmpty(filters) || ramda.isNil(filter)) && setInputValue("");
2201
- }, [filter]);
2202
- React.useEffect(function () {
2203
- if (!debouncedInputValue) {
2204
- !isUndefinedOrEmpty(filter) && handleApplyFilter({
2205
- _delete: true
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;
2634
+ var _useTranslation = reactI18next.useTranslation(),
2635
+ t = _useTranslation.t;
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
2206
2654
  });
2207
- return;
2208
- }
2209
- handleUpdateAndApplyFilter();
2210
- }, [debouncedInputValue]);
2211
- return /*#__PURE__*/React__default["default"].createElement("div", {
2212
- className: "neeto-filters-pane-filter__item-wrapper"
2213
- }, showRuleSelector && /*#__PURE__*/React__default["default"].createElement(neetoui.Select, _extends({
2214
- label: label,
2215
- "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(key), "-filter-rule"),
2216
- defaultValue: ruleOptions[0],
2217
- options: ruleOptions,
2218
- strategy: "fixed",
2219
- value: selectedRule,
2220
- onChange: handleRuleChange
2221
- }, neetoCist.isNotEmpty(helpIconProps) && {
2222
- labelProps: {
2223
- helpIconProps: buildHelpIconProps(helpIconProps)
2224
2655
  }
2225
- })), /*#__PURE__*/React__default["default"].createElement(neetoui.Input, _extends({
2226
- autoFocus: autoFocus,
2227
- "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(key), "-filter"),
2228
- label: !showRuleSelector && label,
2229
- type: inputType,
2230
- value: inputValue
2231
- }, neetoCist.isNotEmpty(helpIconProps) && {
2232
- labelProps: {
2233
- helpIconProps: buildHelpIconProps(helpIconProps)
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
2661
+ });
2234
2662
  }
2235
- }, {
2236
- placeholder: t("neetoFilters.messages.enterResource", {
2237
- resource: label
2238
- }),
2239
- onChange: function onChange(event) {
2240
- return setInputValue(event.target.value);
2241
- },
2242
- onKeyDown: handleKeydown
2243
- }, otherProps)));
2663
+ }, t("neetoFilters.segments.saveAsNewSegment")))));
2244
2664
  };
2245
2665
 
2246
- var Time = function Time(_ref) {
2247
- var column = _ref.column,
2248
- filter = _ref.filter,
2249
- handleApplyFilter = _ref.handleApplyFilter,
2250
- autoFocus = _ref.autoFocus;
2251
- var key = column.key,
2252
- _column$defaultType = column.defaultType,
2253
- defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
2254
- label = column.label,
2255
- _column$helpIconProps = column.helpIconProps,
2256
- helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
2257
- var otherProps = getOtherProps(column);
2258
- var value = buildSingleTimeValue(filter);
2259
- var isCustomTimeRangeShown = filter && isCustomTimeRange(filter.value);
2260
- var _useTranslation = reactI18next.useTranslation(),
2261
- t = _useTranslation.t;
2262
- var handleChange = function handleChange(option) {
2263
- if (ramda.isEmpty(option) || ramda.isNil(option)) {
2264
- handleApplyFilter({
2265
- _delete: true
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
2266
2743
  });
2267
- return;
2268
- }
2269
- var updatedFilter = buildUpdatedFilter({
2270
- column: column,
2271
- defaultType: defaultType,
2272
- option: option
2273
- });
2274
- handleApplyFilter(updatedFilter);
2275
- };
2276
- var handleTimeRangeChange = function handleTimeRangeChange(times) {
2277
- var updatedFilter = buildUpdatedFilter({
2278
- column: column,
2279
- defaultType: defaultType,
2280
- option: {
2281
- value: ramda.pluck("$d", times).map(function (time) {
2282
- return time.toISOString();
2283
- })
2284
- }
2285
- });
2286
- handleApplyFilter(updatedFilter);
2287
- };
2288
- return /*#__PURE__*/React__default["default"].createElement("div", {
2289
- className: "neeto-filters-pane-filter__item-wrapper"
2290
- }, /*#__PURE__*/React__default["default"].createElement(neetoui.Select, _extends({
2291
- autoFocus: autoFocus,
2292
- label: label,
2293
- value: value,
2294
- isClearable: true,
2295
- "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(key), "-filter"),
2296
- options: TIME_OPTIONS,
2297
- strategy: "fixed",
2298
- placeholder: t("neetoFilters.messages.selectResource", {
2299
- resource: label
2300
- })
2301
- }, neetoCist.isNotEmpty(helpIconProps) && {
2302
- labelProps: {
2303
- helpIconProps: buildHelpIconProps(helpIconProps)
2304
2744
  }
2305
- }, {
2306
- onChange: handleChange
2307
- })), isCustomTimeRangeShown && /*#__PURE__*/React__default["default"].createElement(neetoui.TimePicker, _extends({
2308
- use12Hours: true,
2309
- "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(key), "-date-range"),
2310
- format: "h:mm A",
2311
- getPopupContainer: ramda.prop("parentNode"),
2312
- type: "range",
2313
- value: filter.value,
2314
- onChange: handleTimeRangeChange
2315
- }, otherProps)));
2745
+ }));
2316
2746
  };
2317
- var Time$1 = /*#__PURE__*/React__default["default"].memo(Time);
2318
2747
 
2319
- var Item = function Item(_ref) {
2320
- var column = _ref.column,
2321
- filters = _ref.filters,
2322
- onChange = _ref.onChange,
2323
- autoFocus = _ref.autoFocus,
2324
- onClose = _ref.onClose;
2325
- var key = column.key,
2326
- _column$defaultType = column.defaultType,
2327
- defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType;
2328
- var filter = React.useMemo(function () {
2329
- return neetoCist.findBy({
2330
- key: key
2331
- }, filters);
2332
- }, [filters, key]);
2333
- var handleApplyFilter = function handleApplyFilter(updatedFilter) {
2334
- if (updatedFilter._delete) onChange(neetoCist.removeBy({
2335
- key: key
2336
- }, filters));else if (!filter) onChange(ramda.append(updatedFilter, filters));else onChange(neetoCist.replaceBy({
2337
- key: key
2338
- }, updatedFilter, filters));
2339
- };
2340
- if (isText(defaultType) || isDigit(defaultType)) {
2341
- return /*#__PURE__*/React__default["default"].createElement(Text, {
2342
- autoFocus: autoFocus,
2343
- column: column,
2344
- filter: filter,
2345
- filters: filters,
2346
- handleApplyFilter: handleApplyFilter,
2347
- onClose: onClose
2348
- });
2349
- }
2350
- if (isDate(defaultType)) {
2351
- return /*#__PURE__*/React__default["default"].createElement(Datetime$1, {
2352
- autoFocus: autoFocus,
2353
- column: column,
2354
- filter: filter,
2355
- handleApplyFilter: handleApplyFilter
2356
- });
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];
2357
2757
  }
2358
- if (isTime(defaultType)) {
2359
- return /*#__PURE__*/React__default["default"].createElement(Time$1, {
2360
- autoFocus: autoFocus,
2361
- column: column,
2362
- filter: filter,
2363
- handleApplyFilter: handleApplyFilter
2364
- });
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
+ }
2365
2773
  }
2366
- if (isSingleDate(defaultType)) {
2367
- return /*#__PURE__*/React__default["default"].createElement(SingleDatetime, {
2368
- autoFocus: autoFocus,
2369
- column: column,
2370
- filter: filter,
2371
- filters: filters,
2372
- 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
2373
2796
  });
2374
- }
2375
- if (isSingleTime(defaultType)) {
2376
- return /*#__PURE__*/React__default["default"].createElement(SingleTime, {
2377
- autoFocus: autoFocus,
2378
- column: column,
2379
- filter: filter,
2380
- filters: filters,
2381
- handleApplyFilter: handleApplyFilter
2797
+ history.replace({
2798
+ search: params
2382
2799
  });
2383
- }
2384
- if (isBoolean(defaultType) || isCheckbox(defaultType)) {
2385
- return /*#__PURE__*/React__default["default"].createElement(Boolean$1, {
2386
- autoFocus: autoFocus,
2387
- column: column,
2388
- filter: filter,
2389
- 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
+ })));
2390
2806
  });
2391
- }
2392
- return /*#__PURE__*/React__default["default"].createElement(Dropdown$1, {
2393
- autoFocus: autoFocus,
2394
- column: column,
2395
- filter: filter,
2396
- handleApplyFilter: handleApplyFilter
2397
- });
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;
2398
2851
  };
2399
2852
 
2400
2853
  var _excluded = ["isOpen", "onClose", "columns", "onChange", "isSearchable", "keyword", "onSelectorsChange", "childrenKeys", "children", "className"];
@@ -2562,7 +3015,7 @@ var Pane = function Pane(_ref) {
2562
3015
 
2563
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}}
2564
3017
 
2565
- 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= */";
2566
3019
  n(css,{});
2567
3020
 
2568
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; }
@@ -2618,11 +3071,19 @@ var Filters = reactUtils.withT(function (_ref) {
2618
3071
  }, paneProps)), children));
2619
3072
  });
2620
3073
 
2621
- 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) {
2622
3081
  var isOpen = _ref.isOpen,
2623
3082
  onClose = _ref.onClose,
2624
- segment = _ref.segment,
2625
- 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;
2626
3087
  var _useTranslation = reactI18next.useTranslation(),
2627
3088
  t = _useTranslation.t;
2628
3089
  var history = reactRouterDom.useHistory();
@@ -2663,162 +3124,56 @@ var DeleteAlert = function DeleteAlert(_ref) {
2663
3124
  });
2664
3125
  };
2665
3126
 
2666
- var Card = function Card(_ref) {
2667
- var segment = _ref.segment,
2668
- columns = _ref.columns,
2669
- defaultSegmentName = _ref.defaultSegmentName;
2670
- var _useState = React.useState(false),
2671
- _useState2 = _slicedToArray(_useState, 2),
2672
- isEditing = _useState2[0],
2673
- setIsEditing = _useState2[1];
2674
- var _useState3 = React.useState(false),
2675
- _useState4 = _slicedToArray(_useState3, 2),
2676
- isDeleteAlertOpen = _useState4[0],
2677
- setIsDeleteAlertOpen = _useState4[1];
2678
- var _useTranslation = reactI18next.useTranslation(),
2679
- t = _useTranslation.t;
2680
- var Menu = neetoui.Dropdown.Menu,
2681
- MenuItem = neetoui.Dropdown.MenuItem;
2682
- var _useUpdateSegment = useUpdateSegment(),
2683
- updateSegment = _useUpdateSegment.mutate;
2684
- var handleRename = function handleRename(values) {
2685
- return updateSegment({
2686
- id: segment.id,
2687
- payload: values
2688
- }, {
2689
- onSuccess: function onSuccess() {
2690
- return setIsEditing(false);
2691
- }
2692
- });
2693
- };
2694
- return /*#__PURE__*/React__default["default"].createElement(formik.Form, {
2695
- className: "neeto-ui-rounded-md flex w-full items-center justify-between border p-2",
2696
- formProps: {
2697
- noValidate: true
2698
- },
2699
- formikProps: {
2700
- initialValues: segment,
2701
- validateOnChange: true,
2702
- validateOnBlur: true,
2703
- validationSchema: buildSegmentsValidationSchema(defaultSegmentName),
2704
- onSubmit: handleRename,
2705
- enableReinitialize: true
2706
- }
2707
- }, function (_ref2) {
2708
- var resetForm = _ref2.resetForm;
2709
- return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, isEditing ? /*#__PURE__*/React__default["default"].createElement(InlineInput.FormikInlineInput, {
2710
- autoFocus: true,
2711
- nakedInput: true,
2712
- handleCancel: function handleCancel() {
2713
- return setIsEditing(false);
2714
- },
2715
- name: "name",
2716
- placeholder: t("neetoFilters.segments.name")
2717
- }) : /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
2718
- style: "body2"
2719
- }, segment.name), /*#__PURE__*/React__default["default"].createElement(neetoui.Dropdown, {
2720
- buttonStyle: "text",
2721
- disabled: neetoCist.isNotPresent(segment.id),
2722
- icon: neetoIcons.MenuHorizontal,
2723
- size: "small"
2724
- }, /*#__PURE__*/React__default["default"].createElement(Menu, null, /*#__PURE__*/React__default["default"].createElement(MenuItem.Button, {
2725
- onClick: function onClick() {
2726
- setIsEditing(true);
2727
- resetForm();
2728
- }
2729
- }, t("neetoFilters.common.rename")), /*#__PURE__*/React__default["default"].createElement(MenuItem.Button, {
2730
- onClick: function onClick() {
2731
- return setIsDeleteAlertOpen(true);
2732
- }
2733
- }, t("neetoFilters.common.delete"))))), /*#__PURE__*/React__default["default"].createElement(DeleteAlert, {
2734
- columns: columns,
2735
- segment: segment,
2736
- isOpen: isDeleteAlertOpen,
2737
- onClose: function onClose() {
2738
- return setIsDeleteAlertOpen(false);
2739
- }
2740
- }));
2741
- });
2742
- };
2743
- var Card$1 = /*#__PURE__*/React__default["default"].memo(Card);
2744
-
2745
- var ManagePane = function ManagePane(_ref) {
2746
- var isOpen = _ref.isOpen,
2747
- onClose = _ref.onClose,
2748
- entity = _ref.entity,
2749
- columns = _ref.columns,
2750
- defaultSegmentName = _ref.defaultSegmentName;
2751
- var _useState = React.useState(""),
2752
- _useState2 = _slicedToArray(_useState, 2),
2753
- searchTerm = _useState2[0],
2754
- setSearchTerm = _useState2[1];
2755
- var inputRef = React.useRef(null);
2756
- var _useTranslation = reactI18next.useTranslation(),
2757
- t = _useTranslation.t;
2758
- var debouncedSearchTerm = reactUtils.useDebounce(searchTerm);
2759
- var _useFetchSegments = useFetchSegments({
2760
- entity: entity,
2761
- searchTerm: debouncedSearchTerm
2762
- }),
2763
- _useFetchSegments$dat = _useFetchSegments.data,
2764
- segments = _useFetchSegments$dat === void 0 ? [] : _useFetchSegments$dat,
2765
- isLoading = _useFetchSegments.isLoading;
2766
- return /*#__PURE__*/React__default["default"].createElement(neetoui.Pane, {
2767
- isOpen: isOpen,
2768
- onClose: onClose,
2769
- initialFocusRef: inputRef
2770
- }, /*#__PURE__*/React__default["default"].createElement(neetoui.Pane.Header, null, /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
2771
- style: "h2"
2772
- }, t("neetoFilters.segments.manageSegments"))), /*#__PURE__*/React__default["default"].createElement(neetoui.Pane.Body, {
2773
- className: "max-h-full gap-4 overflow-scroll"
2774
- }, /*#__PURE__*/React__default["default"].createElement(Search__default["default"], {
2775
- className: "w-full flex-grow-0",
2776
- placeholder: t("neetoFilters.segments.searchSegments"),
2777
- ref: inputRef,
2778
- onSearch: function onSearch(value) {
2779
- return setSearchTerm(value);
2780
- }
2781
- }), isLoading ? /*#__PURE__*/React__default["default"].createElement(neetoui.Spinner, {
2782
- className: "mx-auto mt-4"
2783
- }) : /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(Card$1, {
2784
- segment: {
2785
- name: defaultSegmentName
2786
- }
2787
- }), ramda.isEmpty(segments) ? /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
2788
- className: "mx-auto",
2789
- style: "body2"
2790
- }, t("neetoFilters.segments.noSegmentsFound")) : segments.map(function (segment) {
2791
- return /*#__PURE__*/React__default["default"].createElement(Card$1, {
2792
- columns: columns,
2793
- defaultSegmentName: defaultSegmentName,
2794
- segment: segment,
2795
- key: segment.id
2796
- });
2797
- }))));
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;
2798
3134
  };
2799
3135
 
2800
- var ITEMS_MAX_COUNT = 20;
2801
-
2802
- var MenuBlocks = function MenuBlocks(_ref) {
3136
+ var useSegments = function useSegments(_ref) {
2803
3137
  var entity = _ref.entity,
2804
3138
  columns = _ref.columns,
2805
- defaultSegmentName = _ref.defaultSegmentName;
2806
- var _useState = React.useState(false),
2807
- _useState2 = _slicedToArray(_useState, 2),
2808
- showAll = _useState2[0],
2809
- setShowAll = _useState2[1];
2810
- var history = reactRouterDom.useHistory();
3139
+ appliedFilters = _ref.appliedFilters,
3140
+ childrenKeys = _ref.childrenKeys;
2811
3141
  var _useTranslation = reactI18next.useTranslation(),
2812
3142
  t = _useTranslation.t;
2813
- var _getQueryParams = utils.getQueryParams(),
2814
- segmentId = _getQueryParams.segmentId;
2815
- 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];
2816
3148
  var _useFetchSegments = useFetchSegments({
2817
3149
  entity: entity
2818
3150
  }),
2819
- _useFetchSegments$dat = _useFetchSegments.data,
2820
- segments = _useFetchSegments$dat === void 0 ? [] : _useFetchSegments$dat,
3151
+ fetchedSegments = _useFetchSegments.data,
2821
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
+ };
2822
3177
  var clearAppliedFilters = function clearAppliedFilters() {
2823
3178
  var _filters$, _filters$2;
2824
3179
  var filters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : appliedFilters;
@@ -2833,10 +3188,10 @@ var MenuBlocks = function MenuBlocks(_ref) {
2833
3188
  })
2834
3189
  });
2835
3190
  };
2836
- var applySelectedSegment = function applySelectedSegment(_ref2) {
3191
+ var handleSelectSegment = function handleSelectSegment(_ref3) {
2837
3192
  var _filters$3;
2838
- var id = _ref2.id,
2839
- filters = _ref2.filters;
3193
+ var id = _ref3.id,
3194
+ filters = _ref3.filters;
2840
3195
  history.push({
2841
3196
  search: buildUrlFromSegment({
2842
3197
  columns: columns,
@@ -2845,14 +3200,9 @@ var MenuBlocks = function MenuBlocks(_ref) {
2845
3200
  })
2846
3201
  });
2847
3202
  };
2848
- var handleSelectSegment = function handleSelectSegment(_ref3) {
2849
- var id = _ref3.id,
2850
- filters = _ref3.filters;
2851
- return ramda.equals(id, segmentId) ? clearAppliedFilters(filters) : applySelectedSegment({
2852
- id: id,
2853
- filters: filters
2854
- });
2855
- };
3203
+ React.useEffect(function () {
3204
+ setSegments(fetchedSegments);
3205
+ }, [fetchedSegments]);
2856
3206
  if (isLoading) {
2857
3207
  return /*#__PURE__*/React__default["default"].createElement(neetoui.Spinner, null);
2858
3208
  }
@@ -2861,6 +3211,139 @@ var MenuBlocks = function MenuBlocks(_ref) {
2861
3211
  style: "body2"
2862
3212
  }, t("neetoFilters.segments.noSegmentsFound"));
2863
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;
2864
3347
  return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, segments.length > ITEMS_MAX_COUNT && /*#__PURE__*/React__default["default"].createElement(neetoui.Button, {
2865
3348
  icon: neetoIcons.Down,
2866
3349
  style: "link",
@@ -2872,71 +3355,90 @@ var MenuBlocks = function MenuBlocks(_ref) {
2872
3355
  return !open;
2873
3356
  });
2874
3357
  }
2875
- }), /*#__PURE__*/React__default["default"].createElement(MenuBar__default["default"].Block, {
2876
- active: ramda.isEmpty(appliedFilters),
3358
+ }), /*#__PURE__*/React__default["default"].createElement(Segment, {
3359
+ isActive: ramda.isEmpty(appliedFilters),
2877
3360
  label: defaultSegmentName,
2878
3361
  onClick: clearAppliedFilters
2879
- }), segments.slice(0, showAll ? segments.length : ITEMS_MAX_COUNT).map(function (segment) {
2880
- return /*#__PURE__*/React__default["default"].createElement(MenuBar__default["default"].Block, {
2881
- active: segment.id === segmentId,
2882
- count: segment.count,
2883
- key: segment.id,
2884
- label: segment.name,
2885
- onClick: function onClick() {
2886
- return handleSelectSegment(segment);
2887
- }
2888
- });
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
2889
3416
  }));
2890
3417
  };
2891
3418
  var MenuBlocks$1 = /*#__PURE__*/React__default["default"].memo(MenuBlocks);
2892
3419
 
2893
- var Segments = function Segments(_ref) {
2894
- var entity = _ref.entity,
3420
+ var Segments = reactUtils.withT(function (_ref) {
3421
+ var t = _ref.t,
3422
+ entity = _ref.entity,
2895
3423
  columns = _ref.columns,
2896
- _ref$setIsFilterPaneO = _ref.setIsFilterPaneOpen,
2897
- setIsFilterPaneOpen = _ref$setIsFilterPaneO === void 0 ? neetoCist.noop : _ref$setIsFilterPaneO,
2898
3424
  _ref$defaultSegmentNa = _ref.defaultSegmentName,
2899
- defaultSegmentName = _ref$defaultSegmentNa === void 0 ? i18next.t("neetoFilters.common.allResults") : _ref$defaultSegmentNa;
2900
- return function () {
2901
- var _useState = React.useState(false),
2902
- _useState2 = _slicedToArray(_useState, 2),
2903
- isSegmentsPaneOpen = _useState2[0],
2904
- setIsSegmentsPaneOpen = _useState2[1];
2905
- var _useTranslation = reactI18next.useTranslation(),
2906
- t = _useTranslation.t;
2907
- var iconProps = [{
2908
- icon: neetoIcons.Settings,
2909
- onClick: function onClick() {
2910
- setIsFilterPaneOpen(false);
2911
- setIsSegmentsPaneOpen(true);
2912
- },
2913
- tooltipProps: {
2914
- content: t("neetoFilters.segments.manageSegments"),
2915
- position: "top"
2916
- }
2917
- }];
2918
- return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(MenuBar__default["default"].SubTitle, {
2919
- iconProps: iconProps
2920
- }, /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
2921
- component: "h4",
2922
- style: "h5",
2923
- textTransform: "uppercase",
2924
- weight: "bold"
2925
- }, t("neetoFilters.common.segments"))), /*#__PURE__*/React__default["default"].createElement(MenuBlocks$1, {
2926
- columns: columns,
2927
- defaultSegmentName: defaultSegmentName,
2928
- entity: entity
2929
- }), /*#__PURE__*/React__default["default"].createElement(ManagePane, {
2930
- columns: columns,
2931
- defaultSegmentName: defaultSegmentName,
2932
- entity: entity,
2933
- isOpen: isSegmentsPaneOpen,
2934
- onClose: function onClose() {
2935
- return setIsSegmentsPaneOpen(false);
2936
- }
2937
- }));
2938
- }();
2939
- };
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
+ });
2940
3442
  var index = /*#__PURE__*/React__default["default"].memo(Segments);
2941
3443
 
2942
3444
  exports.Bar = Bar;