@bigbinary/neeto-filters-frontend 3.2.3 → 3.3.0-beta.2

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,21 @@ 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');
13
- var reactI18next = require('react-i18next');
14
- var reactRouterDom = require('react-router-dom');
15
- var useHotkeys = require('@bigbinary/neeto-hotkeys');
11
+ var reactQuery = require('react-query');
16
12
  var neetoIcons = require('@bigbinary/neeto-icons');
13
+ var neetoui = require('@bigbinary/neetoui');
17
14
  var formik = require('@bigbinary/neetoui/formik');
18
- var reactQuery = require('react-query');
19
- var axios = require('axios');
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');
20
18
  var yup = require('yup');
19
+ var useHotkeys = require('@bigbinary/neeto-hotkeys');
20
+ var reactRouterDom = require('react-router-dom');
21
+ var axios = require('axios');
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 MoreDropdown = require('@bigbinary/neeto-molecules/MoreDropdown');
24
25
 
25
26
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
26
27
 
@@ -45,42 +46,12 @@ function _interopNamespace(e) {
45
46
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
46
47
  var classnames__default = /*#__PURE__*/_interopDefaultLegacy(classnames);
47
48
  var i18next__default = /*#__PURE__*/_interopDefaultLegacy(i18next);
49
+ var yup__namespace = /*#__PURE__*/_interopNamespace(yup);
48
50
  var useHotkeys__default = /*#__PURE__*/_interopDefaultLegacy(useHotkeys);
49
51
  var axios__default = /*#__PURE__*/_interopDefaultLegacy(axios);
50
- var yup__namespace = /*#__PURE__*/_interopNamespace(yup);
51
52
  var Search__default = /*#__PURE__*/_interopDefaultLegacy(Search);
52
53
  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
- }
54
+ var MoreDropdown__default = /*#__PURE__*/_interopDefaultLegacy(MoreDropdown);
84
55
 
85
56
  function _typeof(o) {
86
57
  "@babel/helpers - typeof";
@@ -123,6 +94,92 @@ function _defineProperty(obj, key, value) {
123
94
  return obj;
124
95
  }
125
96
 
97
+ function _arrayLikeToArray(arr, len) {
98
+ if (len == null || len > arr.length) len = arr.length;
99
+ for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
100
+ return arr2;
101
+ }
102
+
103
+ function _arrayWithoutHoles(arr) {
104
+ if (Array.isArray(arr)) return _arrayLikeToArray(arr);
105
+ }
106
+
107
+ function _iterableToArray(iter) {
108
+ if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
109
+ }
110
+
111
+ function _unsupportedIterableToArray(o, minLen) {
112
+ if (!o) return;
113
+ if (typeof o === "string") return _arrayLikeToArray(o, minLen);
114
+ var n = Object.prototype.toString.call(o).slice(8, -1);
115
+ if (n === "Object" && o.constructor) n = o.constructor.name;
116
+ if (n === "Map" || n === "Set") return Array.from(o);
117
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
118
+ }
119
+
120
+ function _nonIterableSpread() {
121
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
122
+ }
123
+
124
+ function _toConsumableArray(arr) {
125
+ return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
126
+ }
127
+
128
+ function _extends() {
129
+ _extends = Object.assign ? Object.assign.bind() : function (target) {
130
+ for (var i = 1; i < arguments.length; i++) {
131
+ var source = arguments[i];
132
+ for (var key in source) {
133
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
134
+ target[key] = source[key];
135
+ }
136
+ }
137
+ }
138
+ return target;
139
+ };
140
+ return _extends.apply(this, arguments);
141
+ }
142
+
143
+ function _arrayWithHoles(arr) {
144
+ if (Array.isArray(arr)) return arr;
145
+ }
146
+
147
+ function _iterableToArrayLimit(r, l) {
148
+ var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
149
+ if (null != t) {
150
+ var e,
151
+ n,
152
+ i,
153
+ u,
154
+ a = [],
155
+ f = !0,
156
+ o = !1;
157
+ try {
158
+ if (i = (t = t.call(r)).next, 0 === l) {
159
+ if (Object(t) !== t) return;
160
+ f = !1;
161
+ } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);
162
+ } catch (r) {
163
+ o = !0, n = r;
164
+ } finally {
165
+ try {
166
+ if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return;
167
+ } finally {
168
+ if (o) throw n;
169
+ }
170
+ }
171
+ return a;
172
+ }
173
+ }
174
+
175
+ function _nonIterableRest() {
176
+ throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
177
+ }
178
+
179
+ function _slicedToArray(arr, i) {
180
+ return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
181
+ }
182
+
126
183
  var SEGMENTS_BASE_URL = "/neeto_filters/segments";
127
184
  var DATE_OPTIONS = [{
128
185
  label: "Today",
@@ -205,21 +262,6 @@ var DATE_RULES = {
205
262
  var SEARCH_TERM_KEY = "search_term";
206
263
  var SEGMENT_ID_KEY = "segment_id";
207
264
 
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
265
  var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
224
266
 
225
267
  function getDefaultExportFromCjs (x) {
@@ -237,6 +279,44 @@ dayjs_min.exports;
237
279
  var dayjs_minExports = dayjs_min.exports;
238
280
  var dayjs = /*@__PURE__*/getDefaultExportFromCjs(dayjs_minExports);
239
281
 
282
+ var timezone$1 = {exports: {}};
283
+
284
+ timezone$1.exports;
285
+
286
+ (function (module, exports) {
287
+ !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;};}}));
288
+ } (timezone$1, timezone$1.exports));
289
+
290
+ var timezoneExports = timezone$1.exports;
291
+ var timezone = /*@__PURE__*/getDefaultExportFromCjs(timezoneExports);
292
+
293
+ var utc$1 = {exports: {}};
294
+
295
+ utc$1.exports;
296
+
297
+ (function (module, exports) {
298
+ !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)};}}));
299
+ } (utc$1, utc$1.exports));
300
+
301
+ var utcExports = utc$1.exports;
302
+ var utc = /*@__PURE__*/getDefaultExportFromCjs(utcExports);
303
+
304
+ var weekday$1 = {exports: {}};
305
+
306
+ weekday$1.exports;
307
+
308
+ (function (module, exports) {
309
+ !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")};}}));
310
+ } (weekday$1, weekday$1.exports));
311
+
312
+ var weekdayExports = weekday$1.exports;
313
+ var weekday = /*@__PURE__*/getDefaultExportFromCjs(weekdayExports);
314
+
315
+ dayjs.extend(utc);
316
+ dayjs.extend(timezone);
317
+ dayjs.extend(weekday);
318
+ dayjs.Ls.en.weekStart = 1;
319
+
240
320
  var NUMBER_RULES = [{
241
321
  label: i18next.t("neetoFilters.rules.is"),
242
322
  value: "is"
@@ -289,94 +369,16 @@ var DEFAULT_HELP_ICON_PROPS = {
289
369
  }
290
370
  };
291
371
 
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";
372
+ 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; }
373
+ 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; }
374
+ var groupByGroup = ramda.groupBy(function (_ref) {
375
+ var group = _ref.group;
376
+ return group || "individual";
377
+ });
378
+ var standardizeColumnType = function standardizeColumnType(kind) {
379
+ // neeto-fields-nano supports `monetary` and `number` as type of fields, which will be acting as `decimal` in action.
380
+ if (["custom.monetary", "custom.number"].includes(kind)) {
381
+ return "custom.decimal";
380
382
  }
381
383
  return kind;
382
384
  };
@@ -667,7 +669,7 @@ var buildDatePayload = function buildDatePayload(value) {
667
669
  var buildSingleDatePayload = function buildSingleDatePayload(filter) {
668
670
  var value = filter.value;
669
671
  var filterValue = Array.isArray(value) ? value.join(",") : value;
670
- return _objectSpread$4(_objectSpread$4({}, filter), {}, {
672
+ return _objectSpread$5(_objectSpread$5({}, filter), {}, {
671
673
  value: filterValue,
672
674
  type: "date"
673
675
  });
@@ -675,7 +677,7 @@ var buildSingleDatePayload = function buildSingleDatePayload(filter) {
675
677
  var buildSingleTimePayload = function buildSingleTimePayload(filter) {
676
678
  var value = filter.value;
677
679
  var filterValue = Array.isArray(value) ? value.join(",") : value;
678
- return _objectSpread$4(_objectSpread$4({}, filter), {}, {
680
+ return _objectSpread$5(_objectSpread$5({}, filter), {}, {
679
681
  value: filterValue,
680
682
  type: "time"
681
683
  });
@@ -943,7 +945,7 @@ var buildFilterColumnsFromFields = function buildFilterColumnsFromFields(_ref22)
943
945
  var id = field.id,
944
946
  name = field.name,
945
947
  kind = field.kind;
946
- var column = _objectSpread$4({
948
+ var column = _objectSpread$5({
947
949
  key: ramda.toLower(name),
948
950
  node: "".concat(name, ":").concat(id),
949
951
  label: neetoCist.capitalize(name),
@@ -967,7 +969,7 @@ var buildFilterColumnsFromFields = function buildFilterColumnsFromFields(_ref22)
967
969
  };
968
970
  var getColumnsWithStandardizedType = function getColumnsWithStandardizedType(columns) {
969
971
  return columns.map(function (column) {
970
- return _objectSpread$4(_objectSpread$4({}, column), {}, {
972
+ return _objectSpread$5(_objectSpread$5({}, column), {}, {
971
973
  type: standardizeColumnType(column.type)
972
974
  });
973
975
  });
@@ -976,271 +978,831 @@ var isKeywordFilterPresent = function isKeywordFilterPresent(keyworFilter) {
976
978
  return ramda.not(ramda.isEmpty(keyworFilter.node));
977
979
  };
978
980
 
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")));
981
+ var buildDropdownValue = function buildDropdownValue(_ref) {
982
+ var defaultType = _ref.defaultType,
983
+ filter = _ref.filter,
984
+ options = _ref.options;
985
+ if (!filter) return null;
986
+ if (isMulti(defaultType)) {
987
+ return options.filter(function (_ref2) {
988
+ var value = _ref2.value;
989
+ return filter.value.includes(value);
990
+ });
986
991
  }
987
- return value.map(utils.dateFormat.date).join(" - ");
992
+ return neetoCist.findBy({
993
+ value: filter.value
994
+ }, options);
988
995
  };
989
- var buildFilterValue = function buildFilterValue(filter) {
996
+ var buildSingleTimeValue = function buildSingleTimeValue(filter) {
990
997
  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();
998
+ if (!filter) return null;
999
+ return (_findBy2 = neetoCist.findBy({
1000
+ value: filter.value
1001
+ }, TIME_OPTIONS)) !== null && _findBy2 !== void 0 ? _findBy2 : ramda.last(TIME_OPTIONS);
1002
+ };
1003
+ var getOtherProps = function getOtherProps(props) {
1004
+ return ramda.omit(["key", "node", "label", "type", "values", "model", "showRuleSelector"], props);
1005
+ };
1006
+ var buildDropdownOptions = function buildDropdownOptions(_ref3) {
1007
+ var defaultType = _ref3.defaultType,
1008
+ filter = _ref3.filter,
1009
+ options = _ref3.options;
1010
+ options = options.map(ramda.modify("value", function (value) {
1011
+ return value === null || value === void 0 ? void 0 : value.toString();
999
1012
  }));
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({
1013
+ if (!filter) return options;
1014
+ if (isMulti(defaultType)) {
1015
+ var selectedOptions = filter.value.map(function (value) {
1016
+ return neetoCist.findBy({
1010
1017
  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
1018
+ }, options) || neetoCist.toLabelAndValue(value);
1021
1019
  });
1020
+ var nonSelectedOptions = options.filter(function (option) {
1021
+ return !filter.value.includes(option.value);
1022
+ });
1023
+ return ramda.concat(selectedOptions, nonSelectedOptions);
1022
1024
  }
1023
- return ((_findBy2 = neetoCist.findBy({
1024
- value: value
1025
- }, values)) === null || _findBy2 === void 0 ? void 0 : _findBy2.label) || value;
1025
+ if (!neetoCist.findBy({
1026
+ value: filter.value
1027
+ }, options)) {
1028
+ return ramda.append(neetoCist.toLabelAndValue(filter.value), options);
1029
+ }
1030
+ return options;
1026
1031
  };
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;
1032
+ var initializeDateRule = function initializeDateRule(filter) {
1033
+ return filter ? neetoCist.findBy({
1034
+ value: filter === null || filter === void 0 ? void 0 : filter.value
1035
+ }, DATE_OPTIONS) || findDateOption(filter, DATE_OPTIONS) : {};
1036
+ };
1037
+ var getDateValue = function getDateValue(value, rule) {
1038
+ if (ramda.isEmpty(value) || ramda.isNil(value)) {
1039
+ return null;
1046
1040
  }
1047
- return "";
1041
+ if (rule.value === "custom-date-range") {
1042
+ return value;
1043
+ }
1044
+ return rule.value === "before" ? dayjs(value[1]).add(1, "day") : dayjs(value[0]).subtract(1, "day");
1048
1045
  };
1049
- var hasOnlyKeywordFilter = function hasOnlyKeywordFilter(filters) {
1050
- return filters.length === 1 && filters[0].key === SEARCH_TERM_KEY;
1046
+ var findDateOption = function findDateOption(filter, options) {
1047
+ var value = filter.value;
1048
+ var isBeforeOrAfter = dayjs(value[1]).diff(dayjs(value[0]), "year") >= 90;
1049
+ if (ramda.not(isBeforeOrAfter)) {
1050
+ return ramda.last(options);
1051
+ }
1052
+ var currentMoment = dayjs();
1053
+ var diffWithStart = Math.abs(currentMoment.diff(dayjs(value[0]), "year"));
1054
+ var diffWithEnd = Math.abs(currentMoment.diff(dayjs(value[1]), "year"));
1055
+ return diffWithStart < diffWithEnd ? neetoCist.findBy({
1056
+ value: "after"
1057
+ }, options) : neetoCist.findBy({
1058
+ value: "before"
1059
+ }, options);
1051
1060
  };
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"
1075
- });
1076
- var openFilterPaneHotKeyRef = useHotkeys__default["default"](SHORTCUTS.openFilterPane.sequence, function () {
1077
- return setIsPaneOpen(key);
1078
- }, {
1079
- mode: "scoped"
1080
- });
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);
1096
- }
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);
1113
- }
1114
- }))));
1061
+ var buildDateValues = function buildDateValues(dates, selectedRule) {
1062
+ if (selectedRule.value === "after") {
1063
+ return [dates.add(1, "day"), dates.add(100, "year")];
1064
+ } else if (selectedRule.value === "before") {
1065
+ return [dates.subtract(100, "year"), dates.subtract(1, "day")];
1066
+ }
1067
+ return dates;
1068
+ };
1069
+ var buildHelpIconProps = function buildHelpIconProps(helpIconProps) {
1070
+ return ramda.mergeDeepRight(DEFAULT_HELP_ICON_PROPS, helpIconProps);
1115
1071
  };
1116
1072
 
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);
1123
- }, {
1124
- mode: "scoped"
1073
+ var Boolean = function Boolean(_ref) {
1074
+ var column = _ref.column,
1075
+ filter = _ref.filter,
1076
+ handleApplyFilter = _ref.handleApplyFilter,
1077
+ autoFocus = _ref.autoFocus;
1078
+ var key = column.key,
1079
+ _column$defaultType = column.defaultType,
1080
+ defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
1081
+ label = column.label,
1082
+ values = column.values,
1083
+ _column$helpIconProps = column.helpIconProps,
1084
+ helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
1085
+ var options = ramda.isNil(values) || ramda.isEmpty(values) ? DEFAULT_BOOLEAN_OPTIONS : values;
1086
+ var otherProps = getOtherProps(column);
1087
+ var value = buildDropdownValue({
1088
+ defaultType: defaultType,
1089
+ filter: filter,
1090
+ options: options
1125
1091
  });
1126
- var openFilterPaneHotKeyRef = useHotkeys__default["default"](SHORTCUTS.openFilterPane.sequence, function () {
1127
- return setIsPaneOpen(childKey);
1092
+ var _useTranslation = reactI18next.useTranslation(),
1093
+ t = _useTranslation.t;
1094
+ var handleChange = function handleChange(option) {
1095
+ if (ramda.isEmpty(option) || ramda.isNil(option)) {
1096
+ handleApplyFilter({
1097
+ _delete: true
1098
+ });
1099
+ return;
1100
+ }
1101
+ var updatedFilter = buildUpdatedFilter({
1102
+ column: column,
1103
+ defaultType: defaultType,
1104
+ option: option
1105
+ });
1106
+ handleApplyFilter(updatedFilter);
1107
+ };
1108
+ return /*#__PURE__*/React__default["default"].createElement("div", {
1109
+ className: "neeto-filters-pane-filter__item-wrapper"
1110
+ }, /*#__PURE__*/React__default["default"].createElement(neetoui.Select, _extends({
1111
+ autoFocus: autoFocus,
1112
+ label: label,
1113
+ options: options,
1114
+ value: value,
1115
+ isClearable: true
1116
+ }, neetoCist.isNotEmpty(helpIconProps) && {
1117
+ labelProps: {
1118
+ helpIconProps: buildHelpIconProps(helpIconProps)
1119
+ }
1120
+ }, {
1121
+ "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(key), "-filter"),
1122
+ strategy: "fixed",
1123
+ placeholder: t("neetoFilters.messages.selectOption", {
1124
+ resource: label
1125
+ }),
1126
+ onChange: handleChange
1127
+ }, otherProps)));
1128
+ };
1129
+ var Boolean$1 = /*#__PURE__*/React__default["default"].memo(Boolean);
1130
+
1131
+ var Datetime = function Datetime(_ref) {
1132
+ var column = _ref.column,
1133
+ filter = _ref.filter,
1134
+ handleApplyFilter = _ref.handleApplyFilter,
1135
+ autoFocus = _ref.autoFocus;
1136
+ var _useState = React.useState(initializeDateRule(filter)),
1137
+ _useState2 = _slicedToArray(_useState, 2),
1138
+ selectedRule = _useState2[0],
1139
+ setSelectedRule = _useState2[1];
1140
+ var _useTranslation = reactI18next.useTranslation(),
1141
+ t = _useTranslation.t;
1142
+ var key = column.key,
1143
+ _column$defaultType = column.defaultType,
1144
+ defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
1145
+ label = column.label,
1146
+ _column$helpIconProps = column.helpIconProps,
1147
+ helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
1148
+ var isDatePickerShown = filter && isCustomDateRange(filter.value);
1149
+ var otherProps = getOtherProps(column);
1150
+ var handleChange = function handleChange(option) {
1151
+ if (ramda.isEmpty(option) || ramda.isNil(option)) {
1152
+ handleApplyFilter({
1153
+ _delete: true
1154
+ });
1155
+ setSelectedRule({});
1156
+ return;
1157
+ }
1158
+ setSelectedRule(option);
1159
+ var updatedFilter = buildUpdatedFilter({
1160
+ column: column,
1161
+ defaultType: defaultType,
1162
+ option: option
1163
+ });
1164
+ handleApplyFilter(updatedFilter);
1165
+ };
1166
+ var handleDateRangeChange = function handleDateRangeChange(dates) {
1167
+ if (ramda.isEmpty(dates) || ramda.isNil(dates)) {
1168
+ handleApplyFilter({
1169
+ _delete: true
1170
+ });
1171
+ setSelectedRule({});
1172
+ return;
1173
+ }
1174
+ var updatedFilter = buildUpdatedFilter({
1175
+ column: column,
1176
+ defaultType: defaultType,
1177
+ option: {
1178
+ value: ramda.pluck("$d", buildDateValues(dates, selectedRule)).map(function (date) {
1179
+ return date.toISOString();
1180
+ })
1181
+ }
1182
+ });
1183
+ handleApplyFilter(updatedFilter);
1184
+ };
1185
+ React.useEffect(function () {
1186
+ ramda.isNil(filter) && setSelectedRule({});
1187
+ }, [filter]);
1188
+ return /*#__PURE__*/React__default["default"].createElement("div", {
1189
+ className: "neeto-filters-pane-filter__item-wrapper"
1190
+ }, /*#__PURE__*/React__default["default"].createElement(neetoui.Select, _extends({
1191
+ autoFocus: autoFocus,
1192
+ label: label,
1193
+ isClearable: true,
1194
+ "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(key), "-filter"),
1195
+ options: DATE_OPTIONS,
1196
+ strategy: "fixed",
1197
+ value: selectedRule,
1198
+ placeholder: t("neetoFilters.messages.selectResource", {
1199
+ resource: label
1200
+ })
1201
+ }, neetoCist.isNotEmpty(helpIconProps) && {
1202
+ labelProps: {
1203
+ helpIconProps: buildHelpIconProps(helpIconProps)
1204
+ }
1205
+ }, {
1206
+ onChange: handleChange
1207
+ })), isDatePickerShown && /*#__PURE__*/React__default["default"].createElement(neetoui.DatePicker, _extends({
1208
+ "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(key), "-date-range"),
1209
+ getPopupContainer: ramda.prop("parentNode"),
1210
+ type: (selectedRule === null || selectedRule === void 0 ? void 0 : selectedRule.value) === "custom-date-range" ? "range" : "date",
1211
+ value: getDateValue(filter === null || filter === void 0 ? void 0 : filter.value, selectedRule),
1212
+ onChange: handleDateRangeChange
1213
+ }, otherProps)));
1214
+ };
1215
+ var Datetime$1 = /*#__PURE__*/React__default["default"].memo(Datetime);
1216
+
1217
+ var Dropdown = function Dropdown(_ref) {
1218
+ var column = _ref.column,
1219
+ filter = _ref.filter,
1220
+ handleApplyFilter = _ref.handleApplyFilter,
1221
+ autoFocus = _ref.autoFocus;
1222
+ var key = column.key,
1223
+ label = column.label,
1224
+ values = column.values,
1225
+ defaultValue = column.defaultValue,
1226
+ _column$defaultType = column.defaultType,
1227
+ defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
1228
+ _column$isClearable = column.isClearable,
1229
+ isClearable = _column$isClearable === void 0 ? true : _column$isClearable,
1230
+ _column$helpIconProps = column.helpIconProps,
1231
+ helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
1232
+ var otherProps = getOtherProps(column);
1233
+ var options = buildDropdownOptions({
1234
+ defaultType: defaultType,
1235
+ filter: filter,
1236
+ options: values
1237
+ });
1238
+ var value = buildDropdownValue({
1239
+ defaultType: defaultType,
1240
+ filter: filter,
1241
+ options: options
1242
+ });
1243
+ var _useTranslation = reactI18next.useTranslation(),
1244
+ t = _useTranslation.t;
1245
+ var handleChange = function handleChange(option) {
1246
+ if (ramda.isEmpty(option) || ramda.isNil(option)) {
1247
+ handleApplyFilter({
1248
+ _delete: true
1249
+ });
1250
+ return;
1251
+ }
1252
+ var updatedFilter = buildUpdatedFilter({
1253
+ column: column,
1254
+ defaultType: defaultType,
1255
+ option: option
1256
+ });
1257
+ handleApplyFilter(updatedFilter);
1258
+ };
1259
+ return /*#__PURE__*/React__default["default"].createElement("div", {
1260
+ className: "neeto-filters-pane-filter__item-wrapper"
1261
+ }, /*#__PURE__*/React__default["default"].createElement(neetoui.Select, _extends({
1262
+ autoFocus: autoFocus,
1263
+ label: label,
1264
+ options: options,
1265
+ value: value,
1266
+ "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(key), "-filter"),
1267
+ isClearable: !defaultValue && isClearable,
1268
+ isMulti: isMulti(defaultType),
1269
+ strategy: "fixed",
1270
+ placeholder: t("neetoFilters.messages.selectResource", {
1271
+ resource: label
1272
+ })
1273
+ }, neetoCist.isNotEmpty(helpIconProps) && {
1274
+ labelProps: {
1275
+ helpIconProps: buildHelpIconProps(helpIconProps)
1276
+ }
1277
+ }, {
1278
+ onChange: handleChange
1279
+ }, otherProps)));
1280
+ };
1281
+ var Dropdown$1 = /*#__PURE__*/React__default["default"].memo(Dropdown);
1282
+
1283
+ var SingleDatetime = function SingleDatetime(_ref) {
1284
+ var column = _ref.column,
1285
+ filter = _ref.filter,
1286
+ filters = _ref.filters,
1287
+ handleApplyFilter = _ref.handleApplyFilter,
1288
+ autoFocus = _ref.autoFocus;
1289
+ var _useState = React.useState(function () {
1290
+ return neetoCist.findBy({
1291
+ value: filter === null || filter === void 0 ? void 0 : filter.rule
1292
+ }, SINGLE_DATE_OPTIONS) || SINGLE_DATE_OPTIONS[0];
1293
+ }),
1294
+ _useState2 = _slicedToArray(_useState, 2),
1295
+ selectedRule = _useState2[0],
1296
+ setSelectedRule = _useState2[1];
1297
+ var key = column.key,
1298
+ _column$defaultType = column.defaultType,
1299
+ defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
1300
+ label = column.label,
1301
+ _column$helpIconProps = column.helpIconProps,
1302
+ helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
1303
+ var otherProps = getOtherProps(column);
1304
+ var datePickerType = selectedRule.value === "between" ? "range" : "date";
1305
+ var value = filter === null || filter === void 0 ? void 0 : filter.value;
1306
+
1307
+ // Reset states when "Clear filters" button is clicked.
1308
+ React.useEffect(function () {
1309
+ if (!ramda.isEmpty(filters)) return;
1310
+ setSelectedRule(SINGLE_DATE_OPTIONS[0]);
1311
+ }, [filters]);
1312
+ var handleRuleChange = function handleRuleChange(ruleOption) {
1313
+ setSelectedRule(ruleOption);
1314
+
1315
+ // Clear value if switched between incompatable types
1316
+ var updateValue = value;
1317
+ if (datePickerType === "range" && ruleOption.value !== "between" || datePickerType === "date" && ruleOption.value === "between") {
1318
+ updateValue = "";
1319
+ }
1320
+ var updatedFilter = buildUpdatedFilter({
1321
+ column: column,
1322
+ defaultType: defaultType,
1323
+ option: {},
1324
+ rule: ruleOption.value,
1325
+ value: updateValue
1326
+ });
1327
+ handleApplyFilter(updatedFilter);
1328
+ };
1329
+ var handleChange = function handleChange(dates) {
1330
+ if (ramda.isEmpty(dates) || ramda.isNil(dates)) {
1331
+ handleApplyFilter({
1332
+ _delete: true
1333
+ });
1334
+ return;
1335
+ }
1336
+ var value = datePickerType === "range" ? ramda.pluck("$d", dates).map(function (date) {
1337
+ return date.toISOString();
1338
+ }) : dates["$d"];
1339
+ var updatedFilter = buildUpdatedFilter({
1340
+ column: column,
1341
+ defaultType: defaultType,
1342
+ option: {},
1343
+ rule: selectedRule.value,
1344
+ value: value
1345
+ });
1346
+ handleApplyFilter(updatedFilter);
1347
+ };
1348
+ return /*#__PURE__*/React__default["default"].createElement("div", {
1349
+ className: "neeto-filters-pane-filter__item-wrapper"
1350
+ }, /*#__PURE__*/React__default["default"].createElement(neetoui.Select, _extends({
1351
+ label: label,
1352
+ "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(key), "-filter-rule"),
1353
+ defaultValue: SINGLE_DATE_OPTIONS[0],
1354
+ options: SINGLE_DATE_OPTIONS,
1355
+ strategy: "fixed",
1356
+ value: selectedRule
1357
+ }, neetoCist.isNotEmpty(helpIconProps) && {
1358
+ labelProps: {
1359
+ helpIconProps: buildHelpIconProps(helpIconProps)
1360
+ }
1361
+ }, {
1362
+ onChange: handleRuleChange
1363
+ })), /*#__PURE__*/React__default["default"].createElement(neetoui.DatePicker, _extends({
1364
+ autoFocus: autoFocus,
1365
+ value: value,
1366
+ "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(key), "-filter"),
1367
+ getPopupContainer: ramda.prop("parentNode"),
1368
+ type: datePickerType,
1369
+ onChange: handleChange
1370
+ }, otherProps)));
1371
+ };
1372
+
1373
+ var SingleTime = function SingleTime(_ref) {
1374
+ var column = _ref.column,
1375
+ filter = _ref.filter,
1376
+ filters = _ref.filters,
1377
+ handleApplyFilter = _ref.handleApplyFilter,
1378
+ autoFocus = _ref.autoFocus;
1379
+ var _useState = React.useState(function () {
1380
+ return neetoCist.findBy({
1381
+ value: filter === null || filter === void 0 ? void 0 : filter.rule
1382
+ }, SINGLE_TIME_OPTIONS) || SINGLE_TIME_OPTIONS[0];
1383
+ }),
1384
+ _useState2 = _slicedToArray(_useState, 2),
1385
+ selectedRule = _useState2[0],
1386
+ setSelectedRule = _useState2[1];
1387
+ var key = column.key,
1388
+ _column$defaultType = column.defaultType,
1389
+ defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
1390
+ label = column.label,
1391
+ _column$helpIconProps = column.helpIconProps,
1392
+ helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
1393
+ var otherProps = getOtherProps(column);
1394
+ var timePickerType = selectedRule.value === "between" ? "range" : "time";
1395
+ var value = filter === null || filter === void 0 ? void 0 : filter.value;
1396
+ React.useEffect(function () {
1397
+ if (!ramda.isEmpty(filters)) return;
1398
+ setSelectedRule(SINGLE_TIME_OPTIONS[0]);
1399
+ }, [filters]);
1400
+ var handleRuleChange = function handleRuleChange(ruleOption) {
1401
+ setSelectedRule(ruleOption);
1402
+
1403
+ // Clear value if switched between incompatible types
1404
+ var updateValue = value;
1405
+ if (timePickerType === "range" && ruleOption.value !== "between" || timePickerType === "time" && ruleOption.value === "between") {
1406
+ updateValue = "";
1407
+ }
1408
+ var updatedFilter = buildUpdatedFilter({
1409
+ column: column,
1410
+ defaultType: defaultType,
1411
+ option: {},
1412
+ rule: ruleOption.value,
1413
+ value: updateValue
1414
+ });
1415
+ handleApplyFilter(updatedFilter);
1416
+ };
1417
+ var handleChange = function handleChange(times) {
1418
+ var value = timePickerType === "range" ? ramda.pluck("$d", times).map(function (time) {
1419
+ return time.toISOString();
1420
+ }) : times["$d"].toISOString();
1421
+ var updatedFilter = buildUpdatedFilter({
1422
+ column: column,
1423
+ defaultType: defaultType,
1424
+ option: {},
1425
+ rule: selectedRule.value,
1426
+ value: value
1427
+ });
1428
+ handleApplyFilter(updatedFilter);
1429
+ };
1430
+ return /*#__PURE__*/React__default["default"].createElement("div", {
1431
+ className: "neeto-filters-pane-filter__item-wrapper"
1432
+ }, /*#__PURE__*/React__default["default"].createElement(neetoui.Select, _extends({
1433
+ label: label,
1434
+ defaultValue: SINGLE_TIME_OPTIONS[0],
1435
+ options: SINGLE_TIME_OPTIONS,
1436
+ strategy: "fixed",
1437
+ value: selectedRule
1438
+ }, neetoCist.isNotEmpty(helpIconProps) && {
1439
+ labelProps: {
1440
+ helpIconProps: buildHelpIconProps(helpIconProps)
1441
+ }
1128
1442
  }, {
1129
- mode: "scoped"
1443
+ onChange: handleRuleChange
1444
+ })), /*#__PURE__*/React__default["default"].createElement(neetoui.TimePicker, _extends({
1445
+ autoFocus: autoFocus,
1446
+ value: value,
1447
+ use12Hours: true,
1448
+ className: "w-full",
1449
+ "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(key), "-filter"),
1450
+ format: "h:mm A",
1451
+ getPopupContainer: ramda.prop("parentNode"),
1452
+ type: timePickerType,
1453
+ onChange: handleChange
1454
+ }, otherProps)));
1455
+ };
1456
+
1457
+ var Text = function Text(_ref) {
1458
+ var column = _ref.column,
1459
+ filter = _ref.filter,
1460
+ filters = _ref.filters,
1461
+ handleApplyFilter = _ref.handleApplyFilter,
1462
+ autoFocus = _ref.autoFocus,
1463
+ onClose = _ref.onClose;
1464
+ var key = column.key,
1465
+ _column$defaultType = column.defaultType,
1466
+ defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
1467
+ label = column.label,
1468
+ _column$showRuleSelec = column.showRuleSelector,
1469
+ showRuleSelector = _column$showRuleSelec === void 0 ? false : _column$showRuleSelec,
1470
+ _column$helpIconProps = column.helpIconProps,
1471
+ helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
1472
+ var otherProps = getOtherProps(column);
1473
+ var ruleOptions = buildRuleOptions({
1474
+ defaultType: defaultType
1130
1475
  });
1476
+ var inputType = defaultType === "text" || defaultType === "custom.text" ? "text" : "number";
1477
+ var _useState = React.useState(filter === null || filter === void 0 ? void 0 : filter.value),
1478
+ _useState2 = _slicedToArray(_useState, 2),
1479
+ inputValue = _useState2[0],
1480
+ setInputValue = _useState2[1];
1481
+ var _useState3 = React.useState(function () {
1482
+ return neetoCist.findBy({
1483
+ value: filter === null || filter === void 0 ? void 0 : filter.rule
1484
+ }, ruleOptions) || ruleOptions[0];
1485
+ }),
1486
+ _useState4 = _slicedToArray(_useState3, 2),
1487
+ selectedRule = _useState4[0],
1488
+ setSelectedRule = _useState4[1];
1489
+ var debouncedInputValue = reactUtils.useDebounce(inputValue);
1490
+ var _useTranslation = reactI18next.useTranslation(),
1491
+ t = _useTranslation.t;
1492
+ var handleUpdateAndApplyFilter = function handleUpdateAndApplyFilter() {
1493
+ var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : debouncedInputValue;
1494
+ var rule = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : selectedRule;
1495
+ if (ramda.equals(filter === null || filter === void 0 ? void 0 : filter.value, value) && ramda.equals(selectedRule, rule)) return;
1496
+ var updatedFilter = buildUpdatedFilter({
1497
+ column: column,
1498
+ defaultType: defaultType,
1499
+ option: {},
1500
+ rule: rule.value,
1501
+ value: value.trim()
1502
+ });
1503
+ handleApplyFilter(updatedFilter);
1504
+ };
1505
+ var handleKeydown = function handleKeydown(e) {
1506
+ if (!(e.key === "Enter")) return;
1507
+ handleUpdateAndApplyFilter(inputValue);
1508
+ onClose();
1509
+ };
1510
+ var handleRuleChange = function handleRuleChange(ruleOption) {
1511
+ setSelectedRule(ruleOption);
1512
+ if (!debouncedInputValue) return;
1513
+ handleUpdateAndApplyFilter(debouncedInputValue, ruleOption);
1514
+ };
1515
+
1516
+ // Reset states when "Clear filters" button is clicked.
1517
+ React.useEffect(function () {
1518
+ (ramda.isEmpty(filters) || ramda.isNil(filter)) && setInputValue("");
1519
+ }, [filter]);
1520
+ React.useEffect(function () {
1521
+ if (!debouncedInputValue) {
1522
+ !isUndefinedOrEmpty(filter) && handleApplyFilter({
1523
+ _delete: true
1524
+ });
1525
+ return;
1526
+ }
1527
+ handleUpdateAndApplyFilter();
1528
+ }, [debouncedInputValue]);
1131
1529
  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;
1530
+ className: "neeto-filters-pane-filter__item-wrapper"
1531
+ }, showRuleSelector && /*#__PURE__*/React__default["default"].createElement(neetoui.Select, _extends({
1532
+ label: label,
1533
+ "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(key), "-filter-rule"),
1534
+ defaultValue: ruleOptions[0],
1535
+ options: ruleOptions,
1536
+ strategy: "fixed",
1537
+ value: selectedRule,
1538
+ onChange: handleRuleChange
1539
+ }, neetoCist.isNotEmpty(helpIconProps) && {
1540
+ labelProps: {
1541
+ helpIconProps: buildHelpIconProps(helpIconProps)
1542
+ }
1543
+ })), /*#__PURE__*/React__default["default"].createElement(neetoui.Input, _extends({
1544
+ autoFocus: autoFocus,
1545
+ "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(key), "-filter"),
1546
+ label: !showRuleSelector && label,
1547
+ type: inputType,
1548
+ value: inputValue
1549
+ }, neetoCist.isNotEmpty(helpIconProps) && {
1550
+ labelProps: {
1551
+ helpIconProps: buildHelpIconProps(helpIconProps)
1552
+ }
1553
+ }, {
1554
+ placeholder: t("neetoFilters.messages.enterResource", {
1555
+ resource: label
1556
+ }),
1557
+ onChange: function onChange(event) {
1558
+ return setInputValue(event.target.value);
1138
1559
  },
1139
- onClick: function onClick() {
1140
- return setIsPaneOpen(childKey);
1560
+ onKeyDown: handleKeydown
1561
+ }, otherProps)));
1562
+ };
1563
+
1564
+ var Time = function Time(_ref) {
1565
+ var column = _ref.column,
1566
+ filter = _ref.filter,
1567
+ handleApplyFilter = _ref.handleApplyFilter,
1568
+ autoFocus = _ref.autoFocus;
1569
+ var key = column.key,
1570
+ _column$defaultType = column.defaultType,
1571
+ defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
1572
+ label = column.label,
1573
+ _column$helpIconProps = column.helpIconProps,
1574
+ helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
1575
+ var otherProps = getOtherProps(column);
1576
+ var value = buildSingleTimeValue(filter);
1577
+ var isCustomTimeRangeShown = filter && isCustomTimeRange(filter.value);
1578
+ var _useTranslation = reactI18next.useTranslation(),
1579
+ t = _useTranslation.t;
1580
+ var handleChange = function handleChange(option) {
1581
+ if (ramda.isEmpty(option) || ramda.isNil(option)) {
1582
+ handleApplyFilter({
1583
+ _delete: true
1584
+ });
1585
+ return;
1141
1586
  }
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);
1587
+ var updatedFilter = buildUpdatedFilter({
1588
+ column: column,
1589
+ defaultType: defaultType,
1590
+ option: option
1591
+ });
1592
+ handleApplyFilter(updatedFilter);
1593
+ };
1594
+ var handleTimeRangeChange = function handleTimeRangeChange(times) {
1595
+ var updatedFilter = buildUpdatedFilter({
1596
+ column: column,
1597
+ defaultType: defaultType,
1598
+ option: {
1599
+ value: ramda.pluck("$d", times).map(function (time) {
1600
+ return time.toISOString();
1601
+ })
1602
+ }
1603
+ });
1604
+ handleApplyFilter(updatedFilter);
1605
+ };
1606
+ return /*#__PURE__*/React__default["default"].createElement("div", {
1607
+ className: "neeto-filters-pane-filter__item-wrapper"
1608
+ }, /*#__PURE__*/React__default["default"].createElement(neetoui.Select, _extends({
1609
+ autoFocus: autoFocus,
1610
+ label: label,
1611
+ value: value,
1612
+ isClearable: true,
1613
+ "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(key), "-filter"),
1614
+ options: TIME_OPTIONS,
1615
+ strategy: "fixed",
1616
+ placeholder: t("neetoFilters.messages.selectResource", {
1617
+ resource: label
1618
+ })
1619
+ }, neetoCist.isNotEmpty(helpIconProps) && {
1620
+ labelProps: {
1621
+ helpIconProps: buildHelpIconProps(helpIconProps)
1154
1622
  }
1155
- })));
1623
+ }, {
1624
+ onChange: handleChange
1625
+ })), isCustomTimeRangeShown && /*#__PURE__*/React__default["default"].createElement(neetoui.TimePicker, _extends({
1626
+ use12Hours: true,
1627
+ "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(key), "-date-range"),
1628
+ format: "h:mm A",
1629
+ getPopupContainer: ramda.prop("parentNode"),
1630
+ type: "range",
1631
+ value: filter.value,
1632
+ onChange: handleTimeRangeChange
1633
+ }, otherProps)));
1156
1634
  };
1635
+ var Time$1 = /*#__PURE__*/React__default["default"].memo(Time);
1157
1636
 
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
1637
+ var Item = function Item(_ref) {
1638
+ var column = _ref.column,
1639
+ filters = _ref.filters,
1640
+ onChange = _ref.onChange,
1641
+ autoFocus = _ref.autoFocus,
1642
+ _ref$onClose = _ref.onClose,
1643
+ onClose = _ref$onClose === void 0 ? neetoCist.noop : _ref$onClose;
1644
+ var key = column.key,
1645
+ _column$defaultType = column.defaultType,
1646
+ defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType;
1647
+ var filter = React.useMemo(function () {
1648
+ return neetoCist.findBy({
1649
+ key: key
1650
+ }, filters);
1651
+ }, [filters, key]);
1652
+ var handleApplyFilter = function handleApplyFilter(updatedFilter) {
1653
+ if (updatedFilter._delete) onChange(neetoCist.removeBy({
1654
+ key: key
1655
+ }, filters));else if (!filter) onChange(ramda.append(updatedFilter, filters));else onChange(neetoCist.replaceBy({
1656
+ key: key
1657
+ }, updatedFilter, filters));
1658
+ };
1659
+ if (isText(defaultType) || isDigit(defaultType)) {
1660
+ return /*#__PURE__*/React__default["default"].createElement(Text, {
1661
+ autoFocus: autoFocus,
1662
+ column: column,
1663
+ filter: filter,
1664
+ filters: filters,
1665
+ handleApplyFilter: handleApplyFilter,
1666
+ onClose: onClose
1667
+ });
1668
+ }
1669
+ if (isDate(defaultType)) {
1670
+ return /*#__PURE__*/React__default["default"].createElement(Datetime$1, {
1671
+ autoFocus: autoFocus,
1672
+ column: column,
1673
+ filter: filter,
1674
+ handleApplyFilter: handleApplyFilter
1675
+ });
1676
+ }
1677
+ if (isTime(defaultType)) {
1678
+ return /*#__PURE__*/React__default["default"].createElement(Time$1, {
1679
+ autoFocus: autoFocus,
1680
+ column: column,
1681
+ filter: filter,
1682
+ handleApplyFilter: handleApplyFilter
1683
+ });
1684
+ }
1685
+ if (isSingleDate(defaultType)) {
1686
+ return /*#__PURE__*/React__default["default"].createElement(SingleDatetime, {
1687
+ autoFocus: autoFocus,
1688
+ column: column,
1689
+ filter: filter,
1690
+ filters: filters,
1691
+ handleApplyFilter: handleApplyFilter
1692
+ });
1693
+ }
1694
+ if (isSingleTime(defaultType)) {
1695
+ return /*#__PURE__*/React__default["default"].createElement(SingleTime, {
1696
+ autoFocus: autoFocus,
1697
+ column: column,
1698
+ filter: filter,
1699
+ filters: filters,
1700
+ handleApplyFilter: handleApplyFilter
1701
+ });
1702
+ }
1703
+ if (isBoolean(defaultType) || isCheckbox(defaultType)) {
1704
+ return /*#__PURE__*/React__default["default"].createElement(Boolean$1, {
1705
+ autoFocus: autoFocus,
1706
+ column: column,
1707
+ filter: filter,
1708
+ handleApplyFilter: handleApplyFilter
1709
+ });
1710
+ }
1711
+ return /*#__PURE__*/React__default["default"].createElement(Dropdown$1, {
1712
+ autoFocus: autoFocus,
1713
+ column: column,
1714
+ filter: filter,
1715
+ handleApplyFilter: handleApplyFilter
1180
1716
  });
1181
1717
  };
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
1718
 
1193
- var QUERY_KEYS = {
1194
- SEGMENTS_LIST: "segments-list"
1719
+ var STEPS = {
1720
+ ADD: "add",
1721
+ COLUMN: "column",
1722
+ VALUE: "value"
1195
1723
  };
1196
- var SEGMENTS_STALE_TIME = 900000; // 15 mins
1197
1724
 
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));
1725
+ var AddFilter = function AddFilter(_ref) {
1726
+ var _findBy;
1727
+ var columns = _ref.columns,
1728
+ filters = _ref.filters,
1729
+ handleChange = _ref.handleChange,
1730
+ handleClearFilter = _ref.handleClearFilter,
1731
+ _ref$disabled = _ref.disabled,
1732
+ disabled = _ref$disabled === void 0 ? false : _ref$disabled;
1733
+ var _useTranslation = reactI18next.useTranslation(),
1734
+ t = _useTranslation.t;
1735
+ var _useState = React.useState({
1736
+ step: STEPS.ADD,
1737
+ column: {}
1738
+ }),
1739
+ _useState2 = _slicedToArray(_useState, 2),
1740
+ selectedColumn = _useState2[0],
1741
+ setSelectedColumn = _useState2[1];
1742
+
1743
+ // Disable the add button when
1744
+ // 1. No value is entered for previous filter
1745
+ // 2. There are no more columns
1746
+ var disableAddButton = selectedColumn.step !== STEPS.ADD && neetoCist.isNotPresent((_findBy = neetoCist.findBy({
1747
+ key: selectedColumn.column.key
1748
+ }, filters)) === null || _findBy === void 0 ? void 0 : _findBy.value) || ramda.isEmpty(columns);
1749
+ 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", {
1750
+ className: "flex w-full gap-4"
1751
+ }, selectedColumn.step === STEPS.COLUMN && /*#__PURE__*/React__default["default"].createElement(neetoui.Select, {
1752
+ isSearchable: true,
1753
+ label: t("neetoFilters.segments.newFilter"),
1754
+ optionRemapping: {
1755
+ label: "label",
1756
+ value: "key"
1757
+ },
1758
+ options: columns,
1759
+ placeholder: t("neetoFilters.segments.selectFilter"),
1760
+ onChange: function onChange(column) {
1761
+ return setSelectedColumn({
1762
+ step: STEPS.VALUE,
1763
+ column: column
1764
+ });
1765
+ }
1766
+ }), selectedColumn.step === STEPS.VALUE && /*#__PURE__*/React__default["default"].createElement(Item, {
1767
+ filters: filters,
1768
+ autoFocus: true,
1769
+ column: selectedColumn.column,
1770
+ onChange: handleChange
1771
+ }), /*#__PURE__*/React__default["default"].createElement(neetoui.Button, {
1772
+ className: "mt-6 self-center",
1773
+ icon: neetoIcons.Delete,
1774
+ style: "text",
1775
+ onClick: function onClick() {
1776
+ handleClearFilter(selectedColumn.column);
1777
+ setSelectedColumn(ramda.assoc("step", STEPS.ADD));
1778
+ }
1779
+ })), /*#__PURE__*/React__default["default"].createElement(AddFilter, {
1780
+ filters: filters,
1781
+ handleChange: handleChange,
1782
+ handleClearFilter: handleClearFilter,
1783
+ columns: columns.filter(function (_ref2) {
1784
+ var key = _ref2.key;
1785
+ return !neetoCist.existsBy({
1786
+ key: key
1787
+ }, filters);
1788
+ }),
1789
+ disabled: disableAddButton
1790
+ })) : /*#__PURE__*/React__default["default"].createElement(neetoui.Button, {
1791
+ disabled: disabled,
1792
+ className: "self-start",
1793
+ icon: neetoIcons.Plus,
1794
+ iconPosition: "left",
1795
+ label: t("neetoFilters.segments.addFilter"),
1796
+ style: "link",
1797
+ onClick: function onClick() {
1798
+ return setSelectedColumn(ramda.assoc("step", STEPS.COLUMN));
1799
+ }
1800
+ }));
1239
1801
  };
1240
1802
 
1241
1803
  var buildSegmentsValidationSchema = function buildSegmentsValidationSchema(defaultSegmentName) {
1242
1804
  return yup__namespace.object({
1243
- name: yup__namespace.string().trim().required().test({
1805
+ name: yup__namespace.string().trim().required(i18next.t("neetoFilters.segments.nameIsRequired")).test({
1244
1806
  name: "not-default-segment-name",
1245
1807
  test: function test(value) {
1246
1808
  return (value === null || value === void 0 ? void 0 : value.toLocaleLowerCase()) !== defaultSegmentName.toLocaleLowerCase();
@@ -1250,1151 +1812,904 @@ var buildSegmentsValidationSchema = function buildSegmentsValidationSchema(defau
1250
1812
  });
1251
1813
  };
1252
1814
 
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,
1815
+ 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; }
1816
+ 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; }
1817
+ var SegmentForm = function SegmentForm(_ref) {
1818
+ var _ref$isEdit = _ref.isEdit,
1819
+ isEdit = _ref$isEdit === void 0 ? false : _ref$isEdit,
1820
+ segmentFormInitialRef = _ref.segmentFormInitialRef,
1821
+ isOpen = _ref.isOpen,
1822
+ onClose = _ref.onClose,
1823
+ isSubmitting = _ref.isSubmitting,
1824
+ handleSubmit = _ref.handleSubmit,
1825
+ defaultSegmentName = _ref.defaultSegmentName,
1826
+ initialValues = _ref.initialValues,
1827
+ customFilters = _ref.customFilters,
1258
1828
  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);
1829
+ filters = _ref.filters,
1830
+ childrenKeys = _ref.childrenKeys;
1831
+ var history = reactRouterDom_min.useHistory();
1271
1832
  var _useTranslation = reactI18next.useTranslation(),
1272
1833
  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)
1834
+ var _buildFilteredColumns = buildFilteredColumns({
1835
+ searchTerm: "",
1836
+ columns: columns
1279
1837
  }),
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;
1838
+ _buildFilteredColumns2 = _buildFilteredColumns.groupedColumns,
1839
+ groupedColumns = _buildFilteredColumns2 === void 0 ? [] : _buildFilteredColumns2,
1840
+ _buildFilteredColumns3 = _buildFilteredColumns.ungroupedColumns,
1841
+ ungroupedColumns = _buildFilteredColumns3 === void 0 ? [] : _buildFilteredColumns3;
1842
+ var handleChange = function handleChange(newFilters) {
1843
+ var isClearAll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
1844
+ var params = buildUrlFromFilters(_objectSpread$4({
1845
+ columns: columns,
1846
+ filters: newFilters
1847
+ }, isClearAll && {
1848
+ isClearAll: true,
1849
+ childrenKeys: childrenKeys
1850
+ }));
1306
1851
  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
- })
1852
+ search: params
1312
1853
  });
1313
- setIsSavePaneOpen(false);
1314
1854
  };
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
1323
- });
1855
+ var handleClearFilter = function handleClearFilter(column, values, setFieldValue) {
1856
+ var formState = [{
1857
+ conditions: neetoCist.removeBy({
1858
+ key: column.key
1859
+ }, values.filters[0].conditions)
1860
+ }];
1861
+ var globalState = neetoCist.removeBy({
1862
+ key: column.key
1863
+ }, filters);
1864
+ setFieldValue("filters", formState);
1865
+ handleChange(globalState);
1324
1866
  };
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
- }
1867
+ return /*#__PURE__*/React__default["default"].createElement(neetoui.Pane, {
1868
+ isOpen: isOpen,
1869
+ onClose: onClose,
1870
+ initialFocusRef: segmentFormInitialRef
1350
1871
  }, /*#__PURE__*/React__default["default"].createElement(neetoui.Pane.Header, null, /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
1351
1872
  style: "h2",
1352
1873
  weight: "semibold"
1353
- }, t("neetoFilters.segments.addNewSegment"))), /*#__PURE__*/React__default["default"].createElement(formik.Form, {
1874
+ }, isEdit ? t("neetoFilters.segments.editSegment") : t("neetoFilters.segments.addNewSegment"))), /*#__PURE__*/React__default["default"].createElement(formik.Form, {
1354
1875
  className: "w-full",
1355
1876
  formProps: {
1356
1877
  noValidate: true
1357
1878
  },
1358
1879
  formikProps: {
1359
- initialValues: {
1360
- name: ""
1361
- },
1880
+ initialValues: initialValues,
1362
1881
  validateOnChange: true,
1363
1882
  validateOnBlur: true,
1364
1883
  validationSchema: buildSegmentsValidationSchema(defaultSegmentName),
1365
1884
  onSubmit: handleSubmit
1366
1885
  }
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({
1886
+ }, function (_ref2) {
1887
+ var errors = _ref2.errors,
1888
+ values = _ref2.values,
1889
+ setFieldValue = _ref2.setFieldValue;
1890
+ 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, {
1891
+ className: "w-full flex-grow-0",
1892
+ error: errors.name,
1893
+ label: t("neetoFilters.segments.name"),
1894
+ name: "name",
1895
+ placeholder: t("neetoFilters.segments.segmentName"),
1896
+ ref: segmentFormInitialRef
1897
+ }), /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
1898
+ className: "mb-2 mt-4",
1899
+ style: "h4"
1900
+ }, t("neetoFilters.common.filters")), /*#__PURE__*/React__default["default"].createElement("div", {
1901
+ className: "neeto-filters-pane-filter__body flex w-full flex-col gap-5"
1902
+ }, ungroupedColumns.filter(function (_ref3) {
1903
+ var key = _ref3.key;
1904
+ return neetoCist._existsBy({
1469
1905
  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"
1906
+ }, values.filters[0].conditions);
1907
+ }).map(function (column) {
1908
+ return /*#__PURE__*/React__default["default"].createElement("div", {
1909
+ className: "flex w-full gap-4",
1910
+ key: column.key
1911
+ }, /*#__PURE__*/React__default["default"].createElement(Item, {
1912
+ column: column,
1913
+ filters: filters,
1914
+ autoFocus: column.key === isOpen,
1915
+ onChange: function onChange(filters) {
1916
+ setFieldValue("filters", [{
1917
+ conditions: filters
1918
+ }]);
1919
+ handleChange(filters);
1920
+ }
1921
+ }), /*#__PURE__*/React__default["default"].createElement(neetoui.Button, {
1922
+ className: "mt-6 self-center",
1923
+ icon: neetoIcons.Delete,
1924
+ style: "text",
1925
+ onClick: function onClick() {
1926
+ return handleClearFilter(column, values, setFieldValue);
1927
+ }
1512
1928
  }));
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"
1929
+ }), neetoCist.isPresent(groupedColumns) && /*#__PURE__*/React__default["default"].createElement(neetoui.Accordion, null, groupedColumns.map(function (_ref4) {
1930
+ var group = _ref4.group,
1931
+ columns = _ref4.columns;
1932
+ return /*#__PURE__*/React__default["default"].createElement(neetoui.Accordion.Item, {
1933
+ className: "accordion_item",
1934
+ key: group,
1935
+ title: group
1936
+ }, columns.map(function (column) {
1937
+ return /*#__PURE__*/React__default["default"].createElement(Item, {
1938
+ column: column,
1939
+ filters: filters,
1940
+ autoFocus: column.key === isOpen,
1941
+ key: column.key,
1942
+ onChange: handleChange
1943
+ });
1524
1944
  }));
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,
1945
+ })), ramda.isEmpty([].concat(_toConsumableArray(groupedColumns), _toConsumableArray(ungroupedColumns))) && /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
1946
+ style: "body2"
1947
+ }, t("neetoFilters.messages.noResourcesFound", {
1948
+ resources: t("neetoFilters.common.columns")
1949
+ })), customFilters, /*#__PURE__*/React__default["default"].createElement(AddFilter, {
1532
1950
  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
1539
- })));
1540
- }();
1541
- };
1542
-
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
- }
1951
+ handleChange: handleChange,
1952
+ columns: ungroupedColumns.filter(function (_ref5) {
1953
+ var key = _ref5.key;
1954
+ return !neetoCist.existsBy({
1955
+ key: key
1956
+ }, filters);
1957
+ }),
1958
+ handleClearFilter: function handleClearFilter(_ref6) {
1959
+ var key = _ref6.key;
1960
+ return handleChange(neetoCist.removeBy({
1961
+ key: key
1962
+ }, filters));
1551
1963
  }
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;
1964
+ }))), /*#__PURE__*/React__default["default"].createElement(neetoui.Pane.Footer, {
1965
+ className: "flex items-center space-x-2"
1966
+ }, /*#__PURE__*/React__default["default"].createElement(formik.ActionBlock, {
1967
+ cancelButtonProps: {
1968
+ onClick: onClose,
1969
+ disabled: false
1970
+ },
1971
+ submitButtonProps: {
1972
+ disabled: isSubmitting || ramda.isEmpty(filters),
1973
+ loading: isSubmitting
1974
+ }
1975
+ })));
1976
+ }));
1661
1977
  };
1662
1978
 
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;
1979
+ var QUERY_KEYS = {
1980
+ SEGMENTS_LIST: "segments-list"
1713
1981
  };
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) : {};
1982
+ var SEGMENTS_STALE_TIME = 900000; // 15 mins
1983
+
1984
+ var DEFAULT_SEGMENTS_CACHE = {
1985
+ segments: []
1718
1986
  };
1719
- var getDateValue = function getDateValue(value, rule) {
1720
- if (ramda.isEmpty(value) || ramda.isNil(value)) {
1721
- return null;
1987
+ var SEGMENT_ACTIONS$1 = {
1988
+ EDIT: "edit",
1989
+ CREATE: "create"
1990
+ };
1991
+
1992
+ var SHORTCUTS = {
1993
+ closePane: {
1994
+ sequence: "escape",
1995
+ description: i18next.t("neetoFilters.shortcuts.closePane")
1996
+ },
1997
+ deleteBlock: {
1998
+ sequence: "backspace",
1999
+ description: i18next.t("neetoFilters.shortcuts.deleteBlock")
2000
+ },
2001
+ openFilterPane: {
2002
+ sequence: "enter",
2003
+ description: i18next.t("neetoFilters.shortcuts.openFilterPane")
1722
2004
  }
1723
- if (rule.value === "custom-date-range") {
1724
- return value;
2005
+ };
2006
+
2007
+ var buildCustomDateValue = function buildCustomDateValue(value) {
2008
+ var isBeforeOrAfter = Math.abs(dayjs(value[1]).diff(dayjs(value[0]), "year")) >= 90;
2009
+ if (isBeforeOrAfter) {
2010
+ var currentMoment = dayjs();
2011
+ var diffWithStart = Math.abs(currentMoment.diff(dayjs(value[0]), "year"));
2012
+ var diffWithEnd = Math.abs(currentMoment.diff(dayjs(value[1]), "year"));
2013
+ 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
2014
  }
1726
- return rule.value === "before" ? dayjs(value[1]).add(1, "day") : dayjs(value[0]).subtract(1, "day");
2015
+ return value.map(utils.dateFormat.date).join(" - ");
1727
2016
  };
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);
2017
+ var buildFilterValue = function buildFilterValue(filter) {
2018
+ var _findBy2;
2019
+ var _filter$defaultType = filter.defaultType,
2020
+ defaultType = _filter$defaultType === void 0 ? filter.type : _filter$defaultType,
2021
+ value = filter.value,
2022
+ rule = filter.rule,
2023
+ _filter$values = filter.values,
2024
+ initialValues = _filter$values === void 0 ? [] : _filter$values;
2025
+ var values = initialValues.map(ramda.modify("value", function (value) {
2026
+ return value.toString();
2027
+ }));
2028
+ if (isDate(defaultType) && isCustomDateRange(value)) {
2029
+ return buildCustomDateValue(value);
2030
+ } else if (isTime(defaultType) && isCustomTimeRange(value)) {
2031
+ return value.map(utils.dateFormat.time).join(" - ");
2032
+ } else if (isDate(defaultType) || isTime(defaultType)) {
2033
+ return neetoCist.humanize(value);
2034
+ } else if (isMulti(defaultType)) {
2035
+ return value.map(function (value) {
2036
+ var _findBy;
2037
+ return ((_findBy = neetoCist.findBy({
2038
+ value: value
2039
+ }, values)) === null || _findBy === void 0 ? void 0 : _findBy.label) || value;
2040
+ }).join(", ");
2041
+ } else if (isSingleDate(defaultType)) {
2042
+ return rule === "between" ? value.map(utils.dateFormat.date).join(" - ") : utils.dateFormat.date(value);
2043
+ } else if (isSingleTime(defaultType)) {
2044
+ return rule === "between" ? value.map(utils.dateFormat.time).join(" - ") : utils.dateFormat.time(value);
2045
+ } else if (isBoolean(defaultType)) {
2046
+ return getLabelFromBool({
2047
+ value: value,
2048
+ values: values
2049
+ });
1733
2050
  }
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);
2051
+ return ((_findBy2 = neetoCist.findBy({
2052
+ value: value
2053
+ }, values)) === null || _findBy2 === void 0 ? void 0 : _findBy2.label) || value;
1742
2054
  };
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")];
2055
+ var buildRuleValue = function buildRuleValue(_ref) {
2056
+ var rule = _ref.rule,
2057
+ defaultType = _ref.defaultType;
2058
+ if (isText(defaultType)) {
2059
+ return neetoCist.findBy({
2060
+ value: rule
2061
+ }, TEXT_RULES).label;
2062
+ } else if (isDigit(defaultType)) {
2063
+ return neetoCist.findBy({
2064
+ value: rule
2065
+ }, NUMBER_RULES).label;
2066
+ } else if (isSingleDate(defaultType)) {
2067
+ return neetoCist.findBy({
2068
+ value: rule
2069
+ }, SINGLE_DATE_OPTIONS).label;
2070
+ } else if (isSingleTime(defaultType)) {
2071
+ return neetoCist.findBy({
2072
+ value: rule
2073
+ }, SINGLE_TIME_OPTIONS).label;
1748
2074
  }
1749
- return dates;
2075
+ return "";
1750
2076
  };
1751
- var buildHelpIconProps = function buildHelpIconProps(helpIconProps) {
1752
- return ramda.mergeDeepRight(DEFAULT_HELP_ICON_PROPS, helpIconProps);
2077
+ var hasOnlyKeywordFilter = function hasOnlyKeywordFilter(filters) {
2078
+ return filters.length === 1 && filters[0].key === SEARCH_TERM_KEY;
1753
2079
  };
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);
2080
+ var deepCompare = function deepCompare(filters1, filters2) {
2081
+ var comparisonHelper = function comparisonHelper(filters) {
2082
+ return ramda.sortBy(ramda.prop("key"), neetoCist.removeBy({
2083
+ key: SEARCH_TERM_KEY
2084
+ }, ramda.project(["key", "rule", "value"], filters)));
1789
2085
  };
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)));
2086
+ return neetoCist.notEqualsDeep(comparisonHelper(filters1), comparisonHelper(filters2));
1810
2087
  };
1811
- var Boolean$1 = /*#__PURE__*/React__default["default"].memo(Boolean);
1812
2088
 
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
- }
2089
+ var Block = function Block(_ref) {
2090
+ var filter = _ref.filter,
2091
+ handleDelete = _ref.handleDelete,
2092
+ setIsPaneOpen = _ref.setIsPaneOpen;
2093
+ var key = filter.key,
2094
+ _filter$defaultType = filter.defaultType,
2095
+ defaultType = _filter$defaultType === void 0 ? filter.type : _filter$defaultType,
2096
+ label = filter.label,
2097
+ rule = filter.rule,
2098
+ defaultValue = filter.defaultValue;
2099
+ var filterValue = buildFilterValue(filter);
2100
+ var ruleContent = buildRuleValue({
2101
+ rule: rule,
2102
+ defaultType: defaultType
2103
+ });
2104
+ var blockLength = label.length + ruleContent.length + filterValue.length;
2105
+ var toolTipDisabled = blockLength <= 50;
2106
+ var blockContent = !toolTipDisabled ? "".concat(filterValue.slice(0, 50 - blockLength), "...") : filterValue;
2107
+ var deleteBlockHotKeyRef = useHotkeys__default["default"](SHORTCUTS.deleteBlock.sequence, function () {
2108
+ return handleDelete(key);
1887
2109
  }, {
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)));
2110
+ mode: "scoped"
2111
+ });
2112
+ var openFilterPaneHotKeyRef = useHotkeys__default["default"](SHORTCUTS.openFilterPane.sequence, function () {
2113
+ return setIsPaneOpen(key);
2114
+ }, {
2115
+ mode: "scoped"
2116
+ });
2117
+ return /*#__PURE__*/React__default["default"].createElement(neetoui.Tooltip, {
2118
+ content: filterValue,
2119
+ disabled: toolTipDisabled,
2120
+ position: "bottom",
2121
+ theme: "light"
2122
+ }, /*#__PURE__*/React__default["default"].createElement("div", {
2123
+ className: "neeto-filters-bar__block",
2124
+ "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(key), "-block"),
2125
+ tabIndex: 0,
2126
+ ref: function ref(node) {
2127
+ deleteBlockHotKeyRef.current = node;
2128
+ openFilterPaneHotKeyRef.current = node;
2129
+ },
2130
+ onClick: function onClick() {
2131
+ return setIsPaneOpen(key);
2132
+ }
2133
+ }, /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
2134
+ style: "body2"
2135
+ }, label, ":"), /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
2136
+ className: "neeto-ui-text-gray-600",
2137
+ style: "body2"
2138
+ }, ruleContent), /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
2139
+ style: "body2"
2140
+ }, blockContent), !defaultValue && /*#__PURE__*/React__default["default"].createElement("div", {
2141
+ className: "neeto-filters-bar__block-close"
2142
+ }, /*#__PURE__*/React__default["default"].createElement(neetoIcons.Close, {
2143
+ "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(key), "-block-close-btn"),
2144
+ size: 16,
2145
+ strokeWidth: 2,
2146
+ onClick: function onClick(event) {
2147
+ event.stopPropagation();
2148
+ handleDelete(key);
2149
+ }
2150
+ }))));
1896
2151
  };
1897
- var Datetime$1 = /*#__PURE__*/React__default["default"].memo(Datetime);
1898
2152
 
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
2153
+ var ChildBlock = function ChildBlock(_ref) {
2154
+ var childKey = _ref.childKey,
2155
+ setIsPaneOpen = _ref.setIsPaneOpen,
2156
+ handleDelete = _ref.handleDelete;
2157
+ var deleteBlockHotKeyRef = useHotkeys__default["default"](SHORTCUTS.deleteBlock.sequence, function () {
2158
+ return handleDelete(childKey);
2159
+ }, {
2160
+ mode: "scoped"
1919
2161
  });
1920
- var value = buildDropdownValue({
1921
- defaultType: defaultType,
1922
- filter: filter,
1923
- options: options
2162
+ var openFilterPaneHotKeyRef = useHotkeys__default["default"](SHORTCUTS.openFilterPane.sequence, function () {
2163
+ return setIsPaneOpen(childKey);
2164
+ }, {
2165
+ mode: "scoped"
1924
2166
  });
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
2167
  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)
2168
+ className: "neeto-filters-bar__block",
2169
+ "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(childKey), "-block"),
2170
+ tabIndex: 0,
2171
+ ref: function ref(node) {
2172
+ deleteBlockHotKeyRef.current = node;
2173
+ openFilterPaneHotKeyRef.current = node;
2174
+ },
2175
+ onClick: function onClick() {
2176
+ return setIsPaneOpen(childKey);
1958
2177
  }
1959
- }, {
1960
- onChange: handleChange
1961
- }, otherProps)));
2178
+ }, /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
2179
+ style: "body2",
2180
+ weight: "medium"
2181
+ }, childKey), /*#__PURE__*/React__default["default"].createElement("div", {
2182
+ className: "neeto-filters-bar__block-close"
2183
+ }, /*#__PURE__*/React__default["default"].createElement(neetoIcons.Close, {
2184
+ "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(childKey), "-block-close-btn"),
2185
+ size: 16,
2186
+ strokeWidth: 2,
2187
+ onClick: function onClick(event) {
2188
+ event.stopPropagation();
2189
+ handleDelete(childKey);
2190
+ }
2191
+ })));
1962
2192
  };
1963
- var Dropdown$1 = /*#__PURE__*/React__default["default"].memo(Dropdown);
1964
2193
 
1965
- var SingleDatetime = function SingleDatetime(_ref) {
1966
- var column = _ref.column,
1967
- filter = _ref.filter,
2194
+ var FilterBar = function FilterBar(_ref) {
2195
+ var entity = _ref.entity,
1968
2196
  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
- });
2197
+ setIsSavePaneOpen = _ref.setIsSavePaneOpen,
2198
+ setIsPaneOpen = _ref.setIsPaneOpen,
2199
+ childrenKeys = _ref.childrenKeys,
2200
+ nonHiddenFilters = _ref.nonHiddenFilters,
2201
+ childrenFiltersApplied = _ref.childrenFiltersApplied,
2202
+ keywordFilter = _ref.keywordFilter,
2203
+ handleApplyFilters = _ref.handleApplyFilters;
2204
+ var _useTranslation = reactI18next.useTranslation(),
2205
+ t = _useTranslation.t;
2206
+ var history = reactRouterDom_min.useHistory();
2207
+ var searchParams = reactUtils.useQueryParams({
2208
+ toCamelCase: false
2209
+ });
2210
+ var handleDelete = function handleDelete(key) {
2211
+ if (key === SEARCH_TERM_KEY) {
2212
+ var params = ramda.omit([SEARCH_TERM_KEY], getSnakeCasedQueryParams());
2213
+ var pathname = window.location.pathname;
2214
+ history.push(utils.buildUrl(pathname, params));
2016
2215
  return;
2017
2216
  }
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);
2217
+ if (childrenKeys.includes(key)) {
2218
+ var _params = ramda.omit([key], getSnakeCasedQueryParams());
2219
+ var _pathname = window.location.pathname;
2220
+ history.push(utils.buildUrl(_pathname, _params));
2221
+ }
2222
+ var newFilters = neetoCist.removeBy({
2223
+ key: key
2224
+ }, filters);
2225
+ handleApplyFilters(newFilters);
2029
2226
  };
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)
2227
+ var handleClearAll = function handleClearAll() {
2228
+ var params = isKeywordFilterPresent(keywordFilter) ? ramda.omit([SEARCH_TERM_KEY], getSnakeCasedQueryParams()) : getSnakeCasedQueryParams();
2229
+ var pathname = window.location.pathname;
2230
+ history.push(utils.buildUrl(pathname, params));
2231
+ handleApplyFilters([], true);
2232
+ };
2233
+ var hideClearButton = nonHiddenFilters.every(function (_ref2) {
2234
+ var defaultValue = _ref2.defaultValue,
2235
+ isClearable = _ref2.isClearable;
2236
+ return defaultValue && !isClearable;
2237
+ }) && !childrenFiltersApplied;
2238
+ return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, nonHiddenFilters.map(function (filter) {
2239
+ var _filter$suffixCompone;
2240
+ return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, {
2241
+ key: filter.key
2242
+ }, /*#__PURE__*/React__default["default"].createElement(Block, {
2243
+ filter: filter,
2244
+ handleDelete: handleDelete,
2245
+ setIsPaneOpen: setIsPaneOpen
2246
+ }), (_filter$suffixCompone = filter.suffixComponent) === null || _filter$suffixCompone === void 0 ? void 0 : _filter$suffixCompone.call(filter), /*#__PURE__*/React__default["default"].createElement("div", {
2247
+ className: "neeto-filters-bar--separator"
2248
+ }));
2249
+ }), childrenKeys.filter(function (childKey) {
2250
+ return ramda.has(childKey, searchParams);
2251
+ }).map(function (childKey) {
2252
+ return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, {
2253
+ key: childKey
2254
+ }, /*#__PURE__*/React__default["default"].createElement(ChildBlock, {
2255
+ childKey: childKey,
2256
+ handleDelete: handleDelete,
2257
+ setIsPaneOpen: setIsPaneOpen
2258
+ }), /*#__PURE__*/React__default["default"].createElement("div", {
2259
+ className: "neeto-filters-bar--separator"
2260
+ }));
2261
+ }), /*#__PURE__*/React__default["default"].createElement("div", {
2262
+ className: "flex items-center gap-x-2"
2263
+ }, neetoCist.isPresent(entity) && !hasOnlyKeywordFilter(filters) && /*#__PURE__*/React__default["default"].createElement(neetoui.Button, {
2264
+ label: t("neetoFilters.segments.saveAsNewSegment"),
2265
+ style: "secondary",
2266
+ onClick: function onClick() {
2267
+ setIsPaneOpen(false);
2268
+ setIsSavePaneOpen({
2269
+ action: SEGMENT_ACTIONS$1.CREATE
2270
+ });
2042
2271
  }
2272
+ }), !hideClearButton && /*#__PURE__*/React__default["default"].createElement(neetoui.Button, {
2273
+ "data-cy": "neeto-filters-bar-clear-btn",
2274
+ label: t("neetoFilters.common.clearFilters"),
2275
+ style: "text",
2276
+ onClick: handleClearAll
2277
+ })));
2278
+ };
2279
+
2280
+ var fetch = function fetch(params) {
2281
+ return axios__default["default"].get(SEGMENTS_BASE_URL, {
2282
+ params: params
2283
+ });
2284
+ };
2285
+ var show = function show(id) {
2286
+ return axios__default["default"].get("".concat(SEGMENTS_BASE_URL, "/").concat(id), {
2287
+ transformResponseCase: false
2288
+ });
2289
+ };
2290
+ var create = function create(payload) {
2291
+ return axios__default["default"].post(SEGMENTS_BASE_URL, {
2292
+ segment: payload
2043
2293
  }, {
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)));
2294
+ showToastr: false
2295
+ });
2296
+ };
2297
+ var update = function update(_ref) {
2298
+ var id = _ref.id,
2299
+ payload = _ref.payload,
2300
+ _ref$showToastr = _ref.showToastr,
2301
+ showToastr = _ref$showToastr === void 0 ? true : _ref$showToastr;
2302
+ return axios__default["default"].put("".concat(SEGMENTS_BASE_URL, "/").concat(id), payload, {
2303
+ showToastr: showToastr
2304
+ });
2305
+ };
2306
+ var destroy = function destroy(id) {
2307
+ return axios__default["default"]["delete"]("".concat(SEGMENTS_BASE_URL, "/").concat(id));
2308
+ };
2309
+ var segmentsApi = {
2310
+ fetch: fetch,
2311
+ show: show,
2312
+ create: create,
2313
+ update: update,
2314
+ destroy: destroy
2053
2315
  };
2054
2316
 
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];
2317
+ 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; }
2318
+ 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; }
2319
+ var SEGMENTS_LIST = QUERY_KEYS.SEGMENTS_LIST;
2320
+ var useFetchSegments = function useFetchSegments(_ref) {
2321
+ var entity = _ref.entity,
2322
+ _ref$searchTerm = _ref.searchTerm,
2323
+ searchTerm = _ref$searchTerm === void 0 ? "" : _ref$searchTerm;
2324
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
2325
+ return reactQuery.useQuery([SEGMENTS_LIST, entity, searchTerm], function () {
2326
+ return segmentsApi.fetch({
2327
+ entity: entity,
2328
+ searchTerm: searchTerm
2329
+ });
2330
+ }, ramda.mergeRight({
2331
+ staleTime: SEGMENTS_STALE_TIME,
2332
+ select: ramda.prop("segments")
2333
+ }, options));
2334
+ };
2335
+ var useCreateSegment = function useCreateSegment(options) {
2336
+ return reactUtils.useMutationWithInvalidation(segmentsApi.create, _objectSpread$3({
2337
+ keysToInvalidate: [SEGMENTS_LIST]
2338
+ }, options));
2339
+ };
2340
+ var useUpdateSegment = function useUpdateSegment(options) {
2341
+ return reactUtils.useMutationWithInvalidation(segmentsApi.update, _objectSpread$3({
2342
+ keysToInvalidate: [SEGMENTS_LIST]
2343
+ }, options));
2344
+ };
2345
+ var useDestroySegment = function useDestroySegment(options) {
2346
+ return reactUtils.useMutationWithInvalidation(segmentsApi.destroy, _objectSpread$3({
2347
+ keysToInvalidate: [SEGMENTS_LIST]
2348
+ }, options));
2349
+ };
2350
+
2351
+ 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; }
2352
+ 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; }
2353
+ var useSegment = function useSegment(_ref) {
2354
+ var entity = _ref.entity,
2355
+ keyword = _ref.keyword,
2356
+ columns = _ref.columns,
2357
+ childrenKeys = _ref.childrenKeys;
2358
+ var history = reactRouterDom.useHistory();
2359
+ var _useTranslation = reactI18next.useTranslation(),
2360
+ t = _useTranslation.t;
2361
+ var initialRenderRef = React.useRef(true);
2362
+ var _useQueryParams = reactUtils.useQueryParams(),
2363
+ segmentId = _useQueryParams.segmentId;
2364
+ var _useState = React.useState({
2365
+ action: undefined
2065
2366
  }),
2066
2367
  _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;
2368
+ isSavePaneOpen = _useState2[0],
2369
+ setIsSavePaneOpen = _useState2[1];
2370
+ var _useCreateSegment = useCreateSegment(),
2371
+ createSegment = _useCreateSegment.mutate,
2372
+ isCreating = _useCreateSegment.isLoading;
2373
+ var _useUpdateSegment = useUpdateSegment(),
2374
+ updateSegment = _useUpdateSegment.mutate,
2375
+ isUpdating = _useUpdateSegment.isLoading;
2376
+ var isSubmitting = isCreating || isUpdating;
2377
+ var searchParams = reactUtils.useQueryParams({
2378
+ toCamelCase: false
2379
+ });
2380
+ var keywordValue = searchParams[SEARCH_TERM_KEY] || "";
2381
+ var isEdit = isSavePaneOpen.action === SEGMENT_ACTIONS$1.EDIT;
2382
+ var keywordFilter = _objectSpread$2(_objectSpread$2({
2383
+ type: "text",
2384
+ rule: "contains",
2385
+ label: t("neetoFilters.common.searchTerm")
2386
+ }, keyword), {}, {
2387
+ key: SEARCH_TERM_KEY,
2388
+ value: keywordValue
2389
+ });
2390
+ var filters = buildFiltersFromSearchParams(isKeywordFilterPresent(keywordFilter) && neetoCist.isNotEmpty(keywordValue) ? [keywordFilter].concat(_toConsumableArray(columns)) : columns);
2391
+ var nonHiddenFilters = neetoCist.removeBy({
2392
+ hidden: true
2393
+ }, filters);
2394
+ var handleApplyFilters = function handleApplyFilters(newFilters, isClearAll) {
2395
+ var params = buildUrlFromFilters(_objectSpread$2({
2396
+ columns: columns,
2397
+ filters: isKeywordFilterPresent(keywordFilter) && neetoCist.isNotEmpty(getSearchTermFromUrl()) ? [].concat(_toConsumableArray(newFilters), [keywordFilter]) : newFilters
2398
+ }, isClearAll && {
2399
+ isClearAll: true,
2400
+ childrenKeys: childrenKeys
2401
+ }));
2402
+ history.push({
2403
+ search: params
2404
+ });
2405
+ };
2406
+ var childrenFiltersApplied = childrenKeys.some(function (key) {
2407
+ return ramda.has(key, searchParams);
2408
+ });
2078
2409
  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 = "";
2410
+ if (initialRenderRef.current) {
2411
+ initialRenderRef.current = false;
2412
+ return neetoCist.noop;
2089
2413
  }
2090
- var updatedFilter = buildUpdatedFilter({
2091
- column: column,
2092
- defaultType: defaultType,
2093
- option: {},
2094
- rule: ruleOption.value,
2095
- value: updateValue
2414
+ var handler = setTimeout(function () {
2415
+ handleApplyFilters(filters);
2416
+ }, 500);
2417
+ return function () {
2418
+ return clearTimeout(handler);
2419
+ };
2420
+ }, [keywordValue]);
2421
+ var handleCreateSuccess = function handleCreateSuccess(_ref2) {
2422
+ var _filters$;
2423
+ var _ref2$segment = _ref2.segment,
2424
+ id = _ref2$segment.id,
2425
+ filters = _ref2$segment.filters;
2426
+ history.push({
2427
+ search: buildUrlFromSegment({
2428
+ columns: columns,
2429
+ filters: (_filters$ = filters[0]) === null || _filters$ === void 0 ? void 0 : _filters$.conditions,
2430
+ id: id
2431
+ })
2096
2432
  });
2097
- handleApplyFilter(updatedFilter);
2433
+ setIsSavePaneOpen({
2434
+ action: undefined
2435
+ });
2436
+ utils.showThumbsUpToastr();
2098
2437
  };
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
2438
+ var handleCreate = function handleCreate(_ref3, _ref4) {
2439
+ var name = _ref3.name;
2440
+ var setFieldError = _ref4.setFieldError;
2441
+ var filtersPayload = buildSegmentsPayload(filters, childrenKeys);
2442
+ createSegment({
2443
+ name: name,
2444
+ entity: entity,
2445
+ filters: filtersPayload
2446
+ }, {
2447
+ onSuccess: handleCreateSuccess,
2448
+ onError: function onError(error) {
2449
+ return setFieldError("name", error.response.data.error);
2450
+ }
2109
2451
  });
2110
- handleApplyFilter(updatedFilter);
2111
2452
  };
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()
2453
+ var handleUpdate = function handleUpdate(_ref5, _ref6) {
2454
+ var name = _ref5.name;
2455
+ var setFieldError = _ref6.setFieldError;
2456
+ var filtersPayload = buildSegmentsPayload(filters, childrenKeys);
2457
+ updateSegment({
2458
+ id: segmentId,
2459
+ payload: {
2460
+ name: name,
2461
+ filters: filtersPayload
2462
+ }
2463
+ }, {
2464
+ onSuccess: function onSuccess() {
2465
+ setIsSavePaneOpen({
2466
+ action: undefined
2467
+ });
2468
+ utils.showThumbsUpToastr();
2469
+ },
2470
+ onError: function onError(error) {
2471
+ return setFieldError("name", error.response.data.error);
2472
+ }
2184
2473
  });
2185
- handleApplyFilter(updatedFilter);
2186
- };
2187
- var handleKeydown = function handleKeydown(e) {
2188
- if (!(e.key === "Enter")) return;
2189
- handleUpdateAndApplyFilter(inputValue);
2190
- onClose();
2191
2474
  };
2192
- var handleRuleChange = function handleRuleChange(ruleOption) {
2193
- setSelectedRule(ruleOption);
2194
- if (!debouncedInputValue) return;
2195
- handleUpdateAndApplyFilter(debouncedInputValue, ruleOption);
2475
+ return {
2476
+ isEdit: isEdit,
2477
+ filters: filters,
2478
+ keywordFilter: keywordFilter,
2479
+ isSubmitting: isSubmitting,
2480
+ nonHiddenFilters: nonHiddenFilters,
2481
+ isSavePaneOpen: isSavePaneOpen,
2482
+ setIsSavePaneOpen: setIsSavePaneOpen,
2483
+ handleApplyFilters: handleApplyFilters,
2484
+ childrenFiltersApplied: childrenFiltersApplied,
2485
+ handleSubmit: isEdit ? handleUpdate : handleCreate
2196
2486
  };
2487
+ };
2197
2488
 
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
2489
+ var Menu = neetoui.Dropdown.Menu,
2490
+ MenuItem = neetoui.Dropdown.MenuItem;
2491
+ var SegmentBar = function SegmentBar(_ref) {
2492
+ var entity = _ref.entity,
2493
+ filters = _ref.filters,
2494
+ setIsSavePaneOpen = _ref.setIsSavePaneOpen,
2495
+ setIsPaneOpen = _ref.setIsPaneOpen;
2496
+ var _useTranslation = reactI18next.useTranslation(),
2497
+ t = _useTranslation.t;
2498
+ var _useQueryParams = reactUtils.useQueryParams(),
2499
+ segmentId = _useQueryParams.segmentId;
2500
+ var queryClient = reactQuery.useQueryClient();
2501
+ var cachedSegments = queryClient.getQueryData([QUERY_KEYS.SEGMENTS_LIST, entity, ""]) || DEFAULT_SEGMENTS_CACHE;
2502
+ var segment = neetoCist.findById(segmentId, cachedSegments.segments);
2503
+ if (neetoCist.isNotPresent(segment)) return null;
2504
+ var newChangesExists = deepCompare(segment.filters[0].conditions, filters);
2505
+ return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
2506
+ className: "neeto-ui-text-gray-600 mr-4",
2507
+ "data-cy": "neeto-filters-segment-name",
2508
+ style: "h4"
2509
+ }, segment.name), newChangesExists && /*#__PURE__*/React__default["default"].createElement(neetoui.Dropdown, {
2510
+ buttonStyle: "secondary",
2511
+ label: t("neetoFilters.segments.updateSegment")
2512
+ }, /*#__PURE__*/React__default["default"].createElement(Menu, null, /*#__PURE__*/React__default["default"].createElement(MenuItem.Button, {
2513
+ onClick: function onClick() {
2514
+ return setIsSavePaneOpen({
2515
+ action: SEGMENT_ACTIONS$1.EDIT
2206
2516
  });
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
2517
  }
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)
2518
+ }, t("neetoFilters.segments.updateSegment")), /*#__PURE__*/React__default["default"].createElement(MenuItem.Button, {
2519
+ onClick: function onClick() {
2520
+ setIsPaneOpen(false);
2521
+ setIsSavePaneOpen({
2522
+ action: SEGMENT_ACTIONS$1.CREATE
2523
+ });
2234
2524
  }
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)));
2525
+ }, t("neetoFilters.segments.saveAsNewSegment")))));
2244
2526
  };
2245
2527
 
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
2528
+ var Bar = function Bar(_ref) {
2529
+ var entity = _ref.entity,
2530
+ className = _ref.className,
2531
+ _ref$columns = _ref.columns,
2532
+ columns = _ref$columns === void 0 ? [] : _ref$columns,
2533
+ _ref$keyword = _ref.keyword,
2534
+ keyword = _ref$keyword === void 0 ? {
2535
+ node: "",
2536
+ value: "",
2537
+ setValue: neetoCist.noop
2538
+ } : _ref$keyword,
2539
+ _ref$setIsPaneOpen = _ref.setIsPaneOpen,
2540
+ setIsPaneOpen = _ref$setIsPaneOpen === void 0 ? ramda.identity : _ref$setIsPaneOpen,
2541
+ _ref$childrenKeys = _ref.childrenKeys,
2542
+ childrenKeys = _ref$childrenKeys === void 0 ? [] : _ref$childrenKeys,
2543
+ _ref$defaultSegmentNa = _ref.defaultSegmentName,
2544
+ defaultSegmentName = _ref$defaultSegmentNa === void 0 ? i18next.t("neetoFilters.common.allResults") : _ref$defaultSegmentNa,
2545
+ customFilters = _ref.customFilters;
2546
+ var queryClient = reactQuery.useQueryClient();
2547
+ var _useQueryParams = reactUtils.useQueryParams(),
2548
+ segmentId = _useQueryParams.segmentId;
2549
+ var segmentFormInitialRef = React.useRef(null);
2550
+ var _useSegment = useSegment({
2551
+ entity: entity,
2552
+ keyword: keyword,
2553
+ columns: columns,
2554
+ childrenKeys: childrenKeys
2555
+ }),
2556
+ isEdit = _useSegment.isEdit,
2557
+ filters = _useSegment.filters,
2558
+ handleSubmit = _useSegment.handleSubmit,
2559
+ isSubmitting = _useSegment.isSubmitting,
2560
+ keywordFilter = _useSegment.keywordFilter,
2561
+ isSavePaneOpen = _useSegment.isSavePaneOpen,
2562
+ nonHiddenFilters = _useSegment.nonHiddenFilters,
2563
+ setIsSavePaneOpen = _useSegment.setIsSavePaneOpen,
2564
+ handleApplyFilters = _useSegment.handleApplyFilters,
2565
+ childrenFiltersApplied = _useSegment.childrenFiltersApplied;
2566
+ var BarComponent = segmentId ? SegmentBar : FilterBar;
2567
+ var cachedSegments = queryClient.getQueryData([QUERY_KEYS.SEGMENTS_LIST, entity, ""]) || DEFAULT_SEGMENTS_CACHE;
2568
+ var segment = neetoCist.findById(segmentId, cachedSegments.segments);
2569
+ if (ramda.isEmpty(nonHiddenFilters) && !childrenFiltersApplied) return null;
2570
+ return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement("div", {
2571
+ className: classnames__default["default"]("neeto-filters-bar", _defineProperty({}, className, className))
2572
+ }, /*#__PURE__*/React__default["default"].createElement(BarComponent, {
2573
+ childrenFiltersApplied: childrenFiltersApplied,
2574
+ childrenKeys: childrenKeys,
2575
+ entity: entity,
2576
+ filters: filters,
2577
+ handleApplyFilters: handleApplyFilters,
2578
+ keywordFilter: keywordFilter,
2579
+ nonHiddenFilters: nonHiddenFilters,
2580
+ setIsPaneOpen: setIsPaneOpen,
2581
+ setIsSavePaneOpen: setIsSavePaneOpen
2582
+ })), /*#__PURE__*/React__default["default"].createElement(SegmentForm, {
2583
+ childrenKeys: childrenKeys,
2584
+ columns: columns,
2585
+ customFilters: customFilters,
2586
+ defaultSegmentName: defaultSegmentName,
2587
+ filters: filters,
2588
+ handleSubmit: handleSubmit,
2589
+ isEdit: isEdit,
2590
+ isSubmitting: isSubmitting,
2591
+ keywordFilter: keywordFilter,
2592
+ segmentFormInitialRef: segmentFormInitialRef,
2593
+ isOpen: neetoCist.isPresent(isSavePaneOpen.action),
2594
+ initialValues: isEdit ? ramda.assoc("filters", [{
2595
+ conditions: filters
2596
+ }], segment) : {
2597
+ name: "",
2598
+ filters: [{
2599
+ conditions: filters
2600
+ }]
2601
+ },
2602
+ onClose: function onClose() {
2603
+ return setIsSavePaneOpen({
2604
+ action: undefined
2266
2605
  });
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
2606
  }
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)));
2607
+ }));
2316
2608
  };
2317
- var Time$1 = /*#__PURE__*/React__default["default"].memo(Time);
2318
2609
 
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
- });
2610
+ function _objectWithoutPropertiesLoose(source, excluded) {
2611
+ if (source == null) return {};
2612
+ var target = {};
2613
+ var sourceKeys = Object.keys(source);
2614
+ var key, i;
2615
+ for (i = 0; i < sourceKeys.length; i++) {
2616
+ key = sourceKeys[i];
2617
+ if (excluded.indexOf(key) >= 0) continue;
2618
+ target[key] = source[key];
2357
2619
  }
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
- });
2620
+ return target;
2621
+ }
2622
+
2623
+ function _objectWithoutProperties(source, excluded) {
2624
+ if (source == null) return {};
2625
+ var target = _objectWithoutPropertiesLoose(source, excluded);
2626
+ var key, i;
2627
+ if (Object.getOwnPropertySymbols) {
2628
+ var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
2629
+ for (i = 0; i < sourceSymbolKeys.length; i++) {
2630
+ key = sourceSymbolKeys[i];
2631
+ if (excluded.indexOf(key) >= 0) continue;
2632
+ if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
2633
+ target[key] = source[key];
2634
+ }
2365
2635
  }
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
2636
+ return target;
2637
+ }
2638
+
2639
+ var useFilters = function useFilters(_ref) {
2640
+ var onFiltersChange = _ref.onFiltersChange,
2641
+ columns = _ref.columns,
2642
+ keywordFilter = _ref.keywordFilter,
2643
+ onSelectorsChange = _ref.onSelectorsChange;
2644
+ var _useTransition = React.useTransition(),
2645
+ _useTransition2 = _slicedToArray(_useTransition, 2);
2646
+ _useTransition2[0];
2647
+ var startTransition = _useTransition2[1];
2648
+ var initialRender = React.useRef(true);
2649
+ var prevFilters = React.useRef([]);
2650
+ var location = reactRouterDom.useLocation();
2651
+ var filters = buildFiltersFromSearchParams(columns, false);
2652
+ var history = reactRouterDom.useHistory();
2653
+ var defaultValuesOfColumns = JSON.stringify(ramda.pluck("defaultValue", columns));
2654
+ var handlePrecenseOfDefaultFilters = function handlePrecenseOfDefaultFilters(defaultFilters) {
2655
+ var params = buildUrlFromFilters({
2656
+ columns: columns,
2657
+ filters: isKeywordFilterPresent(keywordFilter) && neetoCist.isNotEmpty(getSearchTermFromUrl()) ? [].concat(_toConsumableArray(defaultFilters), [keywordFilter]) : defaultFilters
2373
2658
  });
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
2659
+ history.replace({
2660
+ search: params
2382
2661
  });
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
2662
+ };
2663
+ var handleFiltersChange = function handleFiltersChange(filtersPayload) {
2664
+ startTransition(function () {
2665
+ onFiltersChange(buildFiltersPayload(filtersPayload.filter(function (filter) {
2666
+ return !ramda.isNil(filter.node);
2667
+ })));
2390
2668
  });
2391
- }
2392
- return /*#__PURE__*/React__default["default"].createElement(Dropdown$1, {
2393
- autoFocus: autoFocus,
2394
- column: column,
2395
- filter: filter,
2396
- handleApplyFilter: handleApplyFilter
2397
- });
2669
+ };
2670
+
2671
+ //This function sends the updated filters to host via callbacks.
2672
+ var sendUpdatedFilters = function sendUpdatedFilters() {
2673
+ if (compareFilters(ramda.append(keywordFilter, filters), prevFilters.current)) {
2674
+ return;
2675
+ }
2676
+ var newFilters = buildFiltersFromSearchParams(columns);
2677
+ var filtersPayload = isKeywordFilterPresent(keywordFilter) && neetoCist.isNotEmpty(getSearchTermFromUrl()) ? ramda.append(keywordFilter, newFilters) : newFilters;
2678
+ handleFiltersChange(filtersPayload);
2679
+ onSelectorsChange(buildSelectorsFromURL(columns));
2680
+ };
2681
+ var handleChangesInURL = function handleChangesInURL() {
2682
+ var defaultFilters = buildDefaultFilters(columns, filters);
2683
+ var searchParams = getSnakeCasedQueryParams();
2684
+ var keys = ramda.pluck("key", ramda.append(keywordFilter, columns));
2685
+ if (keys.every(function (key) {
2686
+ return ramda.isNil(searchParams[key]);
2687
+ }) && !ramda.isEmpty(defaultFilters)) {
2688
+ history.replace({
2689
+ search: buildUrlFromFilters({
2690
+ columns: columns,
2691
+ filters: ramda.concat(defaultFilters, filters)
2692
+ })
2693
+ });
2694
+ filters = buildFiltersFromSearchParams(columns, false);
2695
+ }
2696
+ };
2697
+ React.useEffect(function () {
2698
+ if (initialRender.current) {
2699
+ initialRender.current = false;
2700
+ var keywordValue = getSearchTermFromUrl();
2701
+ var defaultFilters = buildDefaultFilters(columns, filters);
2702
+ neetoCist.isNotEmpty(defaultFilters) && handlePrecenseOfDefaultFilters(defaultFilters);
2703
+ prevFilters.current = ramda.append(ramda.mergeRight(keywordFilter, {
2704
+ value: keywordValue
2705
+ }), filters);
2706
+ } else {
2707
+ handleChangesInURL();
2708
+ sendUpdatedFilters();
2709
+ prevFilters.current = ramda.append(keywordFilter, filters);
2710
+ }
2711
+ }, [location.search, defaultValuesOfColumns]);
2712
+ return filters;
2398
2713
  };
2399
2714
 
2400
2715
  var _excluded = ["isOpen", "onClose", "columns", "onChange", "isSearchable", "keyword", "onSelectorsChange", "childrenKeys", "children", "className"];
@@ -2562,7 +2877,7 @@ var Pane = function Pane(_ref) {
2562
2877
 
2563
2878
  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
2879
 
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= */";
2880
+ 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
2881
  n(css,{});
2567
2882
 
2568
2883
  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 +2933,19 @@ var Filters = reactUtils.withT(function (_ref) {
2618
2933
  }, paneProps)), children));
2619
2934
  });
2620
2935
 
2621
- var DeleteAlert = function DeleteAlert(_ref) {
2936
+ var ITEMS_MAX_COUNT = 20;
2937
+ var SEGMENT_ACTIONS = {
2938
+ EDIT: "edit",
2939
+ DELETE: "delete"
2940
+ };
2941
+
2942
+ var Delete = function Delete(_ref) {
2622
2943
  var isOpen = _ref.isOpen,
2623
2944
  onClose = _ref.onClose,
2624
- segment = _ref.segment,
2625
- columns = _ref.columns;
2945
+ _ref$segment = _ref.segment,
2946
+ segment = _ref$segment === void 0 ? {} : _ref$segment,
2947
+ _ref$columns = _ref.columns,
2948
+ columns = _ref$columns === void 0 ? [] : _ref$columns;
2626
2949
  var _useTranslation = reactI18next.useTranslation(),
2627
2950
  t = _useTranslation.t;
2628
2951
  var history = reactRouterDom.useHistory();
@@ -2663,162 +2986,30 @@ var DeleteAlert = function DeleteAlert(_ref) {
2663
2986
  });
2664
2987
  };
2665
2988
 
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
- }))));
2798
- };
2799
-
2800
- var ITEMS_MAX_COUNT = 20;
2801
-
2802
- var MenuBlocks = function MenuBlocks(_ref) {
2989
+ var useSegments = function useSegments(_ref) {
2803
2990
  var entity = _ref.entity,
2804
2991
  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();
2992
+ appliedFilters = _ref.appliedFilters,
2993
+ childrenKeys = _ref.childrenKeys;
2811
2994
  var _useTranslation = reactI18next.useTranslation(),
2812
2995
  t = _useTranslation.t;
2813
- var _getQueryParams = utils.getQueryParams(),
2814
- segmentId = _getQueryParams.segmentId;
2815
- var appliedFilters = buildFiltersFromURL(columns);
2996
+ var history = reactRouterDom.useHistory();
2816
2997
  var _useFetchSegments = useFetchSegments({
2817
2998
  entity: entity
2818
2999
  }),
2819
3000
  _useFetchSegments$dat = _useFetchSegments.data,
2820
3001
  segments = _useFetchSegments$dat === void 0 ? [] : _useFetchSegments$dat,
2821
3002
  isLoading = _useFetchSegments.isLoading;
3003
+ var _useUpdateSegment = useUpdateSegment(),
3004
+ updateSegment = _useUpdateSegment.mutate,
3005
+ isUpdating = _useUpdateSegment.isLoading;
3006
+ var _useState = React.useState({
3007
+ action: "",
3008
+ segment: undefined
3009
+ }),
3010
+ _useState2 = _slicedToArray(_useState, 2),
3011
+ confirmAction = _useState2[0],
3012
+ setConfirmAction = _useState2[1];
2822
3013
  var clearAppliedFilters = function clearAppliedFilters() {
2823
3014
  var _filters$, _filters$2;
2824
3015
  var filters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : appliedFilters;
@@ -2833,7 +3024,7 @@ var MenuBlocks = function MenuBlocks(_ref) {
2833
3024
  })
2834
3025
  });
2835
3026
  };
2836
- var applySelectedSegment = function applySelectedSegment(_ref2) {
3027
+ var handleSelectSegment = function handleSelectSegment(_ref2) {
2837
3028
  var _filters$3;
2838
3029
  var id = _ref2.id,
2839
3030
  filters = _ref2.filters;
@@ -2845,14 +3036,6 @@ var MenuBlocks = function MenuBlocks(_ref) {
2845
3036
  })
2846
3037
  });
2847
3038
  };
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
- };
2856
3039
  if (isLoading) {
2857
3040
  return /*#__PURE__*/React__default["default"].createElement(neetoui.Spinner, null);
2858
3041
  }
@@ -2861,6 +3044,136 @@ var MenuBlocks = function MenuBlocks(_ref) {
2861
3044
  style: "body2"
2862
3045
  }, t("neetoFilters.segments.noSegmentsFound"));
2863
3046
  }
3047
+ var handleUpdate = function handleUpdate(_ref3, _ref4) {
3048
+ var name = _ref3.name;
3049
+ var setFieldError = _ref4.setFieldError;
3050
+ var filtersPayload = buildSegmentsPayload(filters, childrenKeys);
3051
+ updateSegment({
3052
+ id: confirmAction.segment.id,
3053
+ payload: {
3054
+ name: name,
3055
+ filters: filtersPayload
3056
+ },
3057
+ showToastr: false
3058
+ }, {
3059
+ onSuccess: function onSuccess() {
3060
+ utils.showThumbsUpToastr();
3061
+ setConfirmAction({
3062
+ action: "",
3063
+ segment: undefined
3064
+ });
3065
+ },
3066
+ onError: function onError(error) {
3067
+ return setFieldError("name", error.response.data.error);
3068
+ }
3069
+ });
3070
+ };
3071
+ var filters = buildFiltersFromSearchParams(columns);
3072
+ return {
3073
+ segments: segments,
3074
+ clearAppliedFilters: clearAppliedFilters,
3075
+ handleSelectSegment: handleSelectSegment,
3076
+ setConfirmAction: setConfirmAction,
3077
+ isUpdating: isUpdating,
3078
+ handleUpdate: handleUpdate,
3079
+ filters: filters,
3080
+ onClose: function onClose() {
3081
+ return setConfirmAction({
3082
+ action: "",
3083
+ segment: undefined
3084
+ });
3085
+ },
3086
+ selectedSegment: confirmAction.segment,
3087
+ isDeleteAlertOpen: confirmAction.action === SEGMENT_ACTIONS.DELETE,
3088
+ isEditPaneOpen: confirmAction.action === SEGMENT_ACTIONS.EDIT
3089
+ };
3090
+ };
3091
+
3092
+ var Segment = function Segment(_ref) {
3093
+ var id = _ref.id,
3094
+ isActive = _ref.isActive,
3095
+ label = _ref.label,
3096
+ onClick = _ref.onClick,
3097
+ _ref$shouldShowDropdo = _ref.shouldShowDropdown,
3098
+ shouldShowDropdown = _ref$shouldShowDropdo === void 0 ? false : _ref$shouldShowDropdo,
3099
+ segments = _ref.segments,
3100
+ setConfirmAction = _ref.setConfirmAction;
3101
+ var _useTranslation = reactI18next.useTranslation(),
3102
+ t = _useTranslation.t;
3103
+ var menuItems = [{
3104
+ key: "edit",
3105
+ label: t("neetoFilters.common.edit"),
3106
+ onClick: function onClick() {
3107
+ return setConfirmAction({
3108
+ action: SEGMENT_ACTIONS.EDIT,
3109
+ segment: neetoCist.findById(id, segments)
3110
+ });
3111
+ }
3112
+ }, {
3113
+ key: "delete",
3114
+ label: t("neetoFilters.common.delete"),
3115
+ onClick: function onClick() {
3116
+ return setConfirmAction({
3117
+ action: SEGMENT_ACTIONS.DELETE,
3118
+ segment: neetoCist.findById(id, segments)
3119
+ });
3120
+ }
3121
+ }];
3122
+ return /*#__PURE__*/React__default["default"].createElement("div", {
3123
+ onClick: onClick,
3124
+ 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", {
3125
+ "neeto-filters-segment--active": isActive
3126
+ })
3127
+ }, /*#__PURE__*/React__default["default"].createElement("div", {
3128
+ className: "flex flex-grow items-center gap-2 overflow-hidden",
3129
+ "data-cy": "new-element-field"
3130
+ }, /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
3131
+ className: "truncate leading-snug",
3132
+ "data-cy": neetoCist.hyphenate(label),
3133
+ style: "body2"
3134
+ }, label)), shouldShowDropdown && /*#__PURE__*/React__default["default"].createElement(MoreDropdown__default["default"], {
3135
+ menuItems: menuItems,
3136
+ dropdownButtonProps: {
3137
+ className: "min-h-0 flex-shrink-0",
3138
+ "data-cy": "".concat(neetoCist.hyphenate(label), "-more-dropdown")
3139
+ }
3140
+ }));
3141
+ };
3142
+
3143
+ var MenuBlocks = function MenuBlocks(_ref) {
3144
+ var entity = _ref.entity,
3145
+ columns = _ref.columns,
3146
+ defaultSegmentName = _ref.defaultSegmentName,
3147
+ childrenKeys = _ref.childrenKeys,
3148
+ customFilters = _ref.customFilters;
3149
+ var _useTranslation = reactI18next.useTranslation(),
3150
+ t = _useTranslation.t;
3151
+ var segmentFormInitialRef = React.useRef(null);
3152
+ var _useState = React.useState(false),
3153
+ _useState2 = _slicedToArray(_useState, 2),
3154
+ showAll = _useState2[0],
3155
+ setShowAll = _useState2[1];
3156
+ var _getQueryParams = utils.getQueryParams(),
3157
+ segmentId = _getQueryParams.segmentId;
3158
+ var appliedFilters = buildFiltersFromURL(columns);
3159
+ var _useSegments = useSegments({
3160
+ entity: entity,
3161
+ columns: columns,
3162
+ appliedFilters: appliedFilters,
3163
+ childrenKeys: childrenKeys
3164
+ }),
3165
+ _useSegments$segments = _useSegments.segments,
3166
+ segments = _useSegments$segments === void 0 ? [] : _useSegments$segments,
3167
+ clearAppliedFilters = _useSegments.clearAppliedFilters,
3168
+ handleSelectSegment = _useSegments.handleSelectSegment,
3169
+ onClose = _useSegments.onClose,
3170
+ setConfirmAction = _useSegments.setConfirmAction,
3171
+ selectedSegment = _useSegments.selectedSegment,
3172
+ isDeleteAlertOpen = _useSegments.isDeleteAlertOpen,
3173
+ isEditPaneOpen = _useSegments.isEditPaneOpen,
3174
+ isUpdating = _useSegments.isUpdating,
3175
+ handleUpdate = _useSegments.handleUpdate,
3176
+ filters = _useSegments.filters;
2864
3177
  return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, segments.length > ITEMS_MAX_COUNT && /*#__PURE__*/React__default["default"].createElement(neetoui.Button, {
2865
3178
  icon: neetoIcons.Down,
2866
3179
  style: "link",
@@ -2872,71 +3185,67 @@ var MenuBlocks = function MenuBlocks(_ref) {
2872
3185
  return !open;
2873
3186
  });
2874
3187
  }
2875
- }), /*#__PURE__*/React__default["default"].createElement(MenuBar__default["default"].Block, {
2876
- active: ramda.isEmpty(appliedFilters),
3188
+ }), /*#__PURE__*/React__default["default"].createElement(Segment, {
3189
+ isActive: ramda.isEmpty(appliedFilters),
2877
3190
  label: defaultSegmentName,
2878
3191
  onClick: clearAppliedFilters
2879
3192
  }), 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,
3193
+ return /*#__PURE__*/React__default["default"].createElement(Segment, {
3194
+ segments: segments,
3195
+ setConfirmAction: setConfirmAction,
3196
+ shouldShowDropdown: true,
3197
+ id: segment.id,
3198
+ isActive: segment.id === segmentId,
2883
3199
  key: segment.id,
2884
3200
  label: segment.name,
2885
3201
  onClick: function onClick() {
2886
3202
  return handleSelectSegment(segment);
2887
3203
  }
2888
3204
  });
3205
+ }), /*#__PURE__*/React__default["default"].createElement(SegmentForm, {
3206
+ childrenKeys: childrenKeys,
3207
+ columns: columns,
3208
+ customFilters: customFilters,
3209
+ defaultSegmentName: defaultSegmentName,
3210
+ filters: filters,
3211
+ onClose: onClose,
3212
+ segmentFormInitialRef: segmentFormInitialRef,
3213
+ isEdit: true,
3214
+ handleSubmit: handleUpdate,
3215
+ initialValues: selectedSegment,
3216
+ isOpen: isEditPaneOpen,
3217
+ isSubmitting: isUpdating
3218
+ }), /*#__PURE__*/React__default["default"].createElement(Delete, {
3219
+ columns: columns,
3220
+ onClose: onClose,
3221
+ isOpen: isDeleteAlertOpen,
3222
+ segment: selectedSegment
2889
3223
  }));
2890
3224
  };
2891
3225
  var MenuBlocks$1 = /*#__PURE__*/React__default["default"].memo(MenuBlocks);
2892
3226
 
2893
- var Segments = function Segments(_ref) {
2894
- var entity = _ref.entity,
3227
+ var Segments = reactUtils.withT(function (_ref) {
3228
+ var t = _ref.t,
3229
+ entity = _ref.entity,
2895
3230
  columns = _ref.columns,
2896
- _ref$setIsFilterPaneO = _ref.setIsFilterPaneOpen,
2897
- setIsFilterPaneOpen = _ref$setIsFilterPaneO === void 0 ? neetoCist.noop : _ref$setIsFilterPaneO,
2898
3231
  _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
- };
3232
+ defaultSegmentName = _ref$defaultSegmentNa === void 0 ? t("neetoFilters.common.allResults") : _ref$defaultSegmentNa,
3233
+ customFilters = _ref.customFilters,
3234
+ _ref$childrenKeys = _ref.childrenKeys,
3235
+ childrenKeys = _ref$childrenKeys === void 0 ? [] : _ref$childrenKeys;
3236
+ 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, {
3237
+ component: "h4",
3238
+ style: "h5",
3239
+ textTransform: "uppercase",
3240
+ weight: "bold"
3241
+ }, t("neetoFilters.common.segments"))), /*#__PURE__*/React__default["default"].createElement(MenuBlocks$1, {
3242
+ childrenKeys: childrenKeys,
3243
+ columns: columns,
3244
+ customFilters: customFilters,
3245
+ defaultSegmentName: defaultSegmentName,
3246
+ entity: entity
3247
+ }));
3248
+ });
2940
3249
  var index = /*#__PURE__*/React__default["default"].memo(Segments);
2941
3250
 
2942
3251
  exports.Bar = Bar;