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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.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
  });
@@ -926,7 +928,7 @@ var buildUrlFromSegment = function buildUrlFromSegment(_ref19) {
926
928
  });
927
929
  return acc;
928
930
  }, neetoCist.isNotEmpty(id) ? _defineProperty({}, SEGMENT_ID_KEY, id) : {});
929
- return new URLSearchParams(_objectSpread$4(_objectSpread$4({}, searchParams), newSearchParams)).toString();
931
+ return new URLSearchParams(_objectSpread$5(_objectSpread$5({}, searchParams), newSearchParams)).toString();
930
932
  };
931
933
  var getSearchTermFromUrl = function getSearchTermFromUrl() {
932
934
  return utils.getQueryParams().searchTerm || "";
@@ -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-500",
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,1149 +1812,902 @@ 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;
1306
- history.push({
1307
- search: buildUrlFromSegment({
1308
- columns: columns,
1309
- filters: (_filters$ = filters[0]) === null || _filters$ === void 0 ? void 0 : _filters$.conditions,
1310
- id: id
1311
- })
1312
- });
1313
- setIsSavePaneOpen(false);
1314
- };
1315
- var handleSubmit = function handleSubmit(_ref3) {
1316
- var name = _ref3.name;
1317
- return createSegment({
1318
- name: name,
1319
- entity: entity,
1320
- filters: filtersPayload
1321
- }, {
1322
- onSuccess: handleCreateSuccess
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
+ }));
1851
+ history.push({
1852
+ search: params
1323
1853
  });
1324
1854
  };
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
- }
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);
1866
+ };
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
- }), ramda.isNotNil(entity) && /*#__PURE__*/React__default["default"].createElement(Segment, {
1526
- childrenKeys: childrenKeys,
1527
- columns: columns,
1528
- defaultSegmentName: defaultSegmentName,
1529
- 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, {
1530
1950
  filters: filters,
1531
- setIsFilterPaneOpen: setIsPaneOpen
1532
- }), !hideClearButton && /*#__PURE__*/React__default["default"].createElement(neetoui.Button, {
1533
- "data-cy": "neeto-filters-bar-clear-btn",
1534
- label: t("neetoFilters.common.clearFilters"),
1535
- style: "text",
1536
- onClick: handleClearAll
1537
- }));
1538
- }();
1539
- };
1540
-
1541
- function _extends() {
1542
- _extends = Object.assign ? Object.assign.bind() : function (target) {
1543
- for (var i = 1; i < arguments.length; i++) {
1544
- var source = arguments[i];
1545
- for (var key in source) {
1546
- if (Object.prototype.hasOwnProperty.call(source, key)) {
1547
- target[key] = source[key];
1548
- }
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));
1549
1963
  }
1550
- }
1551
- return target;
1552
- };
1553
- return _extends.apply(this, arguments);
1554
- }
1555
-
1556
- function _objectWithoutPropertiesLoose(source, excluded) {
1557
- if (source == null) return {};
1558
- var target = {};
1559
- var sourceKeys = Object.keys(source);
1560
- var key, i;
1561
- for (i = 0; i < sourceKeys.length; i++) {
1562
- key = sourceKeys[i];
1563
- if (excluded.indexOf(key) >= 0) continue;
1564
- target[key] = source[key];
1565
- }
1566
- return target;
1567
- }
1568
-
1569
- function _objectWithoutProperties(source, excluded) {
1570
- if (source == null) return {};
1571
- var target = _objectWithoutPropertiesLoose(source, excluded);
1572
- var key, i;
1573
- if (Object.getOwnPropertySymbols) {
1574
- var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
1575
- for (i = 0; i < sourceSymbolKeys.length; i++) {
1576
- key = sourceSymbolKeys[i];
1577
- if (excluded.indexOf(key) >= 0) continue;
1578
- if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
1579
- target[key] = source[key];
1580
- }
1581
- }
1582
- return target;
1583
- }
1584
-
1585
- var useFilters = function useFilters(_ref) {
1586
- var onFiltersChange = _ref.onFiltersChange,
1587
- columns = _ref.columns,
1588
- keywordFilter = _ref.keywordFilter,
1589
- onSelectorsChange = _ref.onSelectorsChange;
1590
- var _useTransition = React.useTransition(),
1591
- _useTransition2 = _slicedToArray(_useTransition, 2);
1592
- _useTransition2[0];
1593
- var startTransition = _useTransition2[1];
1594
- var initialRender = React.useRef(true);
1595
- var prevFilters = React.useRef([]);
1596
- var location = reactRouterDom.useLocation();
1597
- var filters = buildFiltersFromSearchParams(columns, false);
1598
- var history = reactRouterDom.useHistory();
1599
- var defaultValuesOfColumns = JSON.stringify(ramda.pluck("defaultValue", columns));
1600
- var handlePrecenseOfDefaultFilters = function handlePrecenseOfDefaultFilters(defaultFilters) {
1601
- var params = buildUrlFromFilters({
1602
- columns: columns,
1603
- filters: isKeywordFilterPresent(keywordFilter) && neetoCist.isNotEmpty(getSearchTermFromUrl()) ? [].concat(_toConsumableArray(defaultFilters), [keywordFilter]) : defaultFilters
1604
- });
1605
- history.replace({
1606
- search: params
1607
- });
1608
- };
1609
- var handleFiltersChange = function handleFiltersChange(filtersPayload) {
1610
- startTransition(function () {
1611
- onFiltersChange(buildFiltersPayload(filtersPayload.filter(function (filter) {
1612
- return !ramda.isNil(filter.node);
1613
- })));
1614
- });
1615
- };
1616
-
1617
- //This function sends the updated filters to host via callbacks.
1618
- var sendUpdatedFilters = function sendUpdatedFilters() {
1619
- if (compareFilters(ramda.append(keywordFilter, filters), prevFilters.current)) {
1620
- return;
1621
- }
1622
- var newFilters = buildFiltersFromSearchParams(columns);
1623
- var filtersPayload = isKeywordFilterPresent(keywordFilter) && neetoCist.isNotEmpty(getSearchTermFromUrl()) ? ramda.append(keywordFilter, newFilters) : newFilters;
1624
- handleFiltersChange(filtersPayload);
1625
- onSelectorsChange(buildSelectorsFromURL(columns));
1626
- };
1627
- var handleChangesInURL = function handleChangesInURL() {
1628
- var defaultFilters = buildDefaultFilters(columns, filters);
1629
- var searchParams = getSnakeCasedQueryParams();
1630
- var keys = ramda.pluck("key", ramda.append(keywordFilter, columns));
1631
- if (keys.every(function (key) {
1632
- return ramda.isNil(searchParams[key]);
1633
- }) && !ramda.isEmpty(defaultFilters)) {
1634
- history.replace({
1635
- search: buildUrlFromFilters({
1636
- columns: columns,
1637
- filters: ramda.concat(defaultFilters, filters)
1638
- })
1639
- });
1640
- filters = buildFiltersFromSearchParams(columns, false);
1641
- }
1642
- };
1643
- React.useEffect(function () {
1644
- if (initialRender.current) {
1645
- initialRender.current = false;
1646
- var keywordValue = getSearchTermFromUrl();
1647
- var defaultFilters = buildDefaultFilters(columns, filters);
1648
- neetoCist.isNotEmpty(defaultFilters) && handlePrecenseOfDefaultFilters(defaultFilters);
1649
- prevFilters.current = ramda.append(ramda.mergeRight(keywordFilter, {
1650
- value: keywordValue
1651
- }), filters);
1652
- } else {
1653
- handleChangesInURL();
1654
- sendUpdatedFilters();
1655
- prevFilters.current = ramda.append(keywordFilter, filters);
1656
- }
1657
- }, [location.search, defaultValuesOfColumns]);
1658
- 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
+ }));
1659
1977
  };
1660
1978
 
1661
- var buildDropdownValue = function buildDropdownValue(_ref) {
1662
- var defaultType = _ref.defaultType,
1663
- filter = _ref.filter,
1664
- options = _ref.options;
1665
- if (!filter) return null;
1666
- if (isMulti(defaultType)) {
1667
- return options.filter(function (_ref2) {
1668
- var value = _ref2.value;
1669
- return filter.value.includes(value);
1670
- });
1671
- }
1672
- return neetoCist.findBy({
1673
- value: filter.value
1674
- }, options);
1675
- };
1676
- var buildSingleTimeValue = function buildSingleTimeValue(filter) {
1677
- var _findBy2;
1678
- if (!filter) return null;
1679
- return (_findBy2 = neetoCist.findBy({
1680
- value: filter.value
1681
- }, TIME_OPTIONS)) !== null && _findBy2 !== void 0 ? _findBy2 : ramda.last(TIME_OPTIONS);
1682
- };
1683
- var getOtherProps = function getOtherProps(props) {
1684
- return ramda.omit(["key", "node", "label", "type", "values", "model", "showRuleSelector"], props);
1979
+ var QUERY_KEYS = {
1980
+ SEGMENTS_LIST: "segments-list"
1685
1981
  };
1686
- var buildDropdownOptions = function buildDropdownOptions(_ref3) {
1687
- var defaultType = _ref3.defaultType,
1688
- filter = _ref3.filter,
1689
- options = _ref3.options;
1690
- options = options.map(ramda.modify("value", function (value) {
1691
- return value === null || value === void 0 ? void 0 : value.toString();
1692
- }));
1693
- if (!filter) return options;
1694
- if (isMulti(defaultType)) {
1695
- var selectedOptions = filter.value.map(function (value) {
1696
- return neetoCist.findBy({
1697
- value: value
1698
- }, options) || neetoCist.toLabelAndValue(value);
1699
- });
1700
- var nonSelectedOptions = options.filter(function (option) {
1701
- return !filter.value.includes(option.value);
1702
- });
1703
- return ramda.concat(selectedOptions, nonSelectedOptions);
1704
- }
1705
- if (!neetoCist.findBy({
1706
- value: filter.value
1707
- }, options)) {
1708
- return ramda.append(neetoCist.toLabelAndValue(filter.value), options);
1709
- }
1710
- return options;
1982
+ var SEGMENTS_STALE_TIME = 900000; // 15 mins
1983
+
1984
+ var DEFAULT_SEGMENTS_CACHE = {
1985
+ segments: []
1711
1986
  };
1712
- var initializeDateRule = function initializeDateRule(filter) {
1713
- return filter ? neetoCist.findBy({
1714
- value: filter === null || filter === void 0 ? void 0 : filter.value
1715
- }, DATE_OPTIONS) || findDateOption(filter, DATE_OPTIONS) : {};
1987
+ var SEGMENT_ACTIONS$1 = {
1988
+ EDIT: "edit",
1989
+ CREATE: "create"
1716
1990
  };
1717
- var getDateValue = function getDateValue(value, rule) {
1718
- if (ramda.isEmpty(value) || ramda.isNil(value)) {
1719
- return null;
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")
1720
2004
  }
1721
- if (rule.value === "custom-date-range") {
1722
- 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")));
1723
2014
  }
1724
- return rule.value === "before" ? dayjs(value[1]).add(1, "day") : dayjs(value[0]).subtract(1, "day");
2015
+ return value.map(utils.dateFormat.date).join(" - ");
1725
2016
  };
1726
- var findDateOption = function findDateOption(filter, options) {
1727
- var value = filter.value;
1728
- var isBeforeOrAfter = dayjs(value[1]).diff(dayjs(value[0]), "year") >= 90;
1729
- if (ramda.not(isBeforeOrAfter)) {
1730
- 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
+ });
1731
2050
  }
1732
- var currentMoment = dayjs();
1733
- var diffWithStart = Math.abs(currentMoment.diff(dayjs(value[0]), "year"));
1734
- var diffWithEnd = Math.abs(currentMoment.diff(dayjs(value[1]), "year"));
1735
- return diffWithStart < diffWithEnd ? neetoCist.findBy({
1736
- value: "after"
1737
- }, options) : neetoCist.findBy({
1738
- value: "before"
1739
- }, options);
2051
+ return ((_findBy2 = neetoCist.findBy({
2052
+ value: value
2053
+ }, values)) === null || _findBy2 === void 0 ? void 0 : _findBy2.label) || value;
1740
2054
  };
1741
- var buildDateValues = function buildDateValues(dates, selectedRule) {
1742
- if (selectedRule.value === "after") {
1743
- return [dates.add(1, "day"), dates.add(100, "year")];
1744
- } else if (selectedRule.value === "before") {
1745
- 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;
1746
2074
  }
1747
- return dates;
2075
+ return "";
1748
2076
  };
1749
- var buildHelpIconProps = function buildHelpIconProps(helpIconProps) {
1750
- 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;
1751
2079
  };
1752
-
1753
- var Boolean = function Boolean(_ref) {
1754
- var column = _ref.column,
1755
- filter = _ref.filter,
1756
- handleApplyFilter = _ref.handleApplyFilter,
1757
- autoFocus = _ref.autoFocus;
1758
- var key = column.key,
1759
- _column$defaultType = column.defaultType,
1760
- defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
1761
- label = column.label,
1762
- values = column.values,
1763
- _column$helpIconProps = column.helpIconProps,
1764
- helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
1765
- var options = ramda.isNil(values) || ramda.isEmpty(values) ? DEFAULT_BOOLEAN_OPTIONS : values;
1766
- var otherProps = getOtherProps(column);
1767
- var value = buildDropdownValue({
1768
- defaultType: defaultType,
1769
- filter: filter,
1770
- options: options
1771
- });
1772
- var _useTranslation = reactI18next.useTranslation(),
1773
- t = _useTranslation.t;
1774
- var handleChange = function handleChange(option) {
1775
- if (ramda.isEmpty(option) || ramda.isNil(option)) {
1776
- handleApplyFilter({
1777
- _delete: true
1778
- });
1779
- return;
1780
- }
1781
- var updatedFilter = buildUpdatedFilter({
1782
- column: column,
1783
- defaultType: defaultType,
1784
- option: option
1785
- });
1786
- 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)));
1787
2085
  };
1788
- return /*#__PURE__*/React__default["default"].createElement("div", {
1789
- className: "neeto-filters-pane-filter__item-wrapper"
1790
- }, /*#__PURE__*/React__default["default"].createElement(neetoui.Select, _extends({
1791
- autoFocus: autoFocus,
1792
- label: label,
1793
- options: options,
1794
- value: value,
1795
- isClearable: true
1796
- }, neetoCist.isNotEmpty(helpIconProps) && {
1797
- labelProps: {
1798
- helpIconProps: buildHelpIconProps(helpIconProps)
1799
- }
1800
- }, {
1801
- "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(key), "-filter"),
1802
- strategy: "fixed",
1803
- placeholder: t("neetoFilters.messages.selectOption", {
1804
- resource: label
1805
- }),
1806
- onChange: handleChange
1807
- }, otherProps)));
2086
+ return neetoCist.notEqualsDeep(comparisonHelper(filters1), comparisonHelper(filters2));
1808
2087
  };
1809
- var Boolean$1 = /*#__PURE__*/React__default["default"].memo(Boolean);
1810
2088
 
1811
- var Datetime = function Datetime(_ref) {
1812
- var column = _ref.column,
1813
- filter = _ref.filter,
1814
- handleApplyFilter = _ref.handleApplyFilter,
1815
- autoFocus = _ref.autoFocus;
1816
- var _useState = React.useState(initializeDateRule(filter)),
1817
- _useState2 = _slicedToArray(_useState, 2),
1818
- selectedRule = _useState2[0],
1819
- setSelectedRule = _useState2[1];
1820
- var _useTranslation = reactI18next.useTranslation(),
1821
- t = _useTranslation.t;
1822
- var key = column.key,
1823
- _column$defaultType = column.defaultType,
1824
- defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
1825
- label = column.label,
1826
- _column$helpIconProps = column.helpIconProps,
1827
- helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
1828
- var isDatePickerShown = filter && isCustomDateRange(filter.value);
1829
- var otherProps = getOtherProps(column);
1830
- var handleChange = function handleChange(option) {
1831
- if (ramda.isEmpty(option) || ramda.isNil(option)) {
1832
- handleApplyFilter({
1833
- _delete: true
1834
- });
1835
- setSelectedRule({});
1836
- return;
1837
- }
1838
- setSelectedRule(option);
1839
- var updatedFilter = buildUpdatedFilter({
1840
- column: column,
1841
- defaultType: defaultType,
1842
- option: option
1843
- });
1844
- handleApplyFilter(updatedFilter);
1845
- };
1846
- var handleDateRangeChange = function handleDateRangeChange(dates) {
1847
- if (ramda.isEmpty(dates) || ramda.isNil(dates)) {
1848
- handleApplyFilter({
1849
- _delete: true
1850
- });
1851
- setSelectedRule({});
1852
- return;
1853
- }
1854
- var updatedFilter = buildUpdatedFilter({
1855
- column: column,
1856
- defaultType: defaultType,
1857
- option: {
1858
- value: ramda.pluck("$d", buildDateValues(dates, selectedRule)).map(function (date) {
1859
- return date.toISOString();
1860
- })
1861
- }
1862
- });
1863
- handleApplyFilter(updatedFilter);
1864
- };
1865
- React.useEffect(function () {
1866
- ramda.isNil(filter) && setSelectedRule({});
1867
- }, [filter]);
1868
- return /*#__PURE__*/React__default["default"].createElement("div", {
1869
- className: "neeto-filters-pane-filter__item-wrapper"
1870
- }, /*#__PURE__*/React__default["default"].createElement(neetoui.Select, _extends({
1871
- autoFocus: autoFocus,
1872
- label: label,
1873
- isClearable: true,
1874
- "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(key), "-filter"),
1875
- options: DATE_OPTIONS,
1876
- strategy: "fixed",
1877
- value: selectedRule,
1878
- placeholder: t("neetoFilters.messages.selectResource", {
1879
- resource: label
1880
- })
1881
- }, neetoCist.isNotEmpty(helpIconProps) && {
1882
- labelProps: {
1883
- helpIconProps: buildHelpIconProps(helpIconProps)
1884
- }
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);
1885
2109
  }, {
1886
- onChange: handleChange
1887
- })), isDatePickerShown && /*#__PURE__*/React__default["default"].createElement(neetoui.DatePicker, _extends({
1888
- "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(key), "-date-range"),
1889
- getPopupContainer: ramda.prop("parentNode"),
1890
- type: (selectedRule === null || selectedRule === void 0 ? void 0 : selectedRule.value) === "custom-date-range" ? "range" : "date",
1891
- value: getDateValue(filter === null || filter === void 0 ? void 0 : filter.value, selectedRule),
1892
- onChange: handleDateRangeChange
1893
- }, 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-500",
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
+ }))));
1894
2151
  };
1895
- var Datetime$1 = /*#__PURE__*/React__default["default"].memo(Datetime);
1896
2152
 
1897
- var Dropdown = function Dropdown(_ref) {
1898
- var column = _ref.column,
1899
- filter = _ref.filter,
1900
- handleApplyFilter = _ref.handleApplyFilter,
1901
- autoFocus = _ref.autoFocus;
1902
- var key = column.key,
1903
- label = column.label,
1904
- values = column.values,
1905
- defaultValue = column.defaultValue,
1906
- _column$defaultType = column.defaultType,
1907
- defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
1908
- _column$isClearable = column.isClearable,
1909
- isClearable = _column$isClearable === void 0 ? true : _column$isClearable,
1910
- _column$helpIconProps = column.helpIconProps,
1911
- helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
1912
- var otherProps = getOtherProps(column);
1913
- var options = buildDropdownOptions({
1914
- defaultType: defaultType,
1915
- filter: filter,
1916
- 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"
1917
2161
  });
1918
- var value = buildDropdownValue({
1919
- defaultType: defaultType,
1920
- filter: filter,
1921
- options: options
2162
+ var openFilterPaneHotKeyRef = useHotkeys__default["default"](SHORTCUTS.openFilterPane.sequence, function () {
2163
+ return setIsPaneOpen(childKey);
2164
+ }, {
2165
+ mode: "scoped"
1922
2166
  });
1923
- var _useTranslation = reactI18next.useTranslation(),
1924
- t = _useTranslation.t;
1925
- var handleChange = function handleChange(option) {
1926
- if (ramda.isEmpty(option) || ramda.isNil(option)) {
1927
- handleApplyFilter({
1928
- _delete: true
1929
- });
1930
- return;
1931
- }
1932
- var updatedFilter = buildUpdatedFilter({
1933
- column: column,
1934
- defaultType: defaultType,
1935
- option: option
1936
- });
1937
- handleApplyFilter(updatedFilter);
1938
- };
1939
2167
  return /*#__PURE__*/React__default["default"].createElement("div", {
1940
- className: "neeto-filters-pane-filter__item-wrapper"
1941
- }, /*#__PURE__*/React__default["default"].createElement(neetoui.Select, _extends({
1942
- autoFocus: autoFocus,
1943
- label: label,
1944
- options: options,
1945
- value: value,
1946
- "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(key), "-filter"),
1947
- isClearable: !defaultValue && isClearable,
1948
- isMulti: isMulti(defaultType),
1949
- strategy: "fixed",
1950
- placeholder: t("neetoFilters.messages.selectResource", {
1951
- resource: label
1952
- })
1953
- }, neetoCist.isNotEmpty(helpIconProps) && {
1954
- labelProps: {
1955
- 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);
1956
2177
  }
1957
- }, {
1958
- onChange: handleChange
1959
- }, 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
+ })));
1960
2192
  };
1961
- var Dropdown$1 = /*#__PURE__*/React__default["default"].memo(Dropdown);
1962
2193
 
1963
- var SingleDatetime = function SingleDatetime(_ref) {
1964
- var column = _ref.column,
1965
- filter = _ref.filter,
2194
+ var FilterBar = function FilterBar(_ref) {
2195
+ var entity = _ref.entity,
1966
2196
  filters = _ref.filters,
1967
- handleApplyFilter = _ref.handleApplyFilter,
1968
- autoFocus = _ref.autoFocus;
1969
- var _useState = React.useState(function () {
1970
- return neetoCist.findBy({
1971
- value: filter === null || filter === void 0 ? void 0 : filter.rule
1972
- }, SINGLE_DATE_OPTIONS) || SINGLE_DATE_OPTIONS[0];
1973
- }),
1974
- _useState2 = _slicedToArray(_useState, 2),
1975
- selectedRule = _useState2[0],
1976
- setSelectedRule = _useState2[1];
1977
- var key = column.key,
1978
- _column$defaultType = column.defaultType,
1979
- defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
1980
- label = column.label,
1981
- _column$helpIconProps = column.helpIconProps,
1982
- helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
1983
- var otherProps = getOtherProps(column);
1984
- var datePickerType = selectedRule.value === "between" ? "range" : "date";
1985
- var value = filter === null || filter === void 0 ? void 0 : filter.value;
1986
-
1987
- // Reset states when "Clear filters" button is clicked.
1988
- React.useEffect(function () {
1989
- if (!ramda.isEmpty(filters)) return;
1990
- setSelectedRule(SINGLE_DATE_OPTIONS[0]);
1991
- }, [filters]);
1992
- var handleRuleChange = function handleRuleChange(ruleOption) {
1993
- setSelectedRule(ruleOption);
1994
-
1995
- // Clear value if switched between incompatable types
1996
- var updateValue = value;
1997
- if (datePickerType === "range" && ruleOption.value !== "between" || datePickerType === "date" && ruleOption.value === "between") {
1998
- updateValue = "";
1999
- }
2000
- var updatedFilter = buildUpdatedFilter({
2001
- column: column,
2002
- defaultType: defaultType,
2003
- option: {},
2004
- rule: ruleOption.value,
2005
- value: updateValue
2006
- });
2007
- handleApplyFilter(updatedFilter);
2008
- };
2009
- var handleChange = function handleChange(dates) {
2010
- if (ramda.isEmpty(dates) || ramda.isNil(dates)) {
2011
- handleApplyFilter({
2012
- _delete: true
2013
- });
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));
2014
2215
  return;
2015
2216
  }
2016
- var value = datePickerType === "range" ? ramda.pluck("$d", dates).map(function (date) {
2017
- return date.toISOString();
2018
- }) : dates["$d"];
2019
- var updatedFilter = buildUpdatedFilter({
2020
- column: column,
2021
- defaultType: defaultType,
2022
- option: {},
2023
- rule: selectedRule.value,
2024
- value: value
2025
- });
2026
- 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);
2027
2226
  };
2028
- return /*#__PURE__*/React__default["default"].createElement("div", {
2029
- className: "neeto-filters-pane-filter__item-wrapper"
2030
- }, /*#__PURE__*/React__default["default"].createElement(neetoui.Select, _extends({
2031
- label: label,
2032
- "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(key), "-filter-rule"),
2033
- defaultValue: SINGLE_DATE_OPTIONS[0],
2034
- options: SINGLE_DATE_OPTIONS,
2035
- strategy: "fixed",
2036
- value: selectedRule
2037
- }, neetoCist.isNotEmpty(helpIconProps) && {
2038
- labelProps: {
2039
- 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
+ }), neetoCist.isPresent(entity) && !hasOnlyKeywordFilter(filters) && /*#__PURE__*/React__default["default"].createElement(neetoui.Button, {
2262
+ label: t("neetoFilters.segments.saveAsNewSegment"),
2263
+ style: "secondary",
2264
+ onClick: function onClick() {
2265
+ setIsPaneOpen(false);
2266
+ setIsSavePaneOpen({
2267
+ action: SEGMENT_ACTIONS$1.CREATE
2268
+ });
2040
2269
  }
2270
+ }), !hideClearButton && /*#__PURE__*/React__default["default"].createElement(neetoui.Button, {
2271
+ "data-cy": "neeto-filters-bar-clear-btn",
2272
+ label: t("neetoFilters.common.clearFilters"),
2273
+ style: "text",
2274
+ onClick: handleClearAll
2275
+ }));
2276
+ };
2277
+
2278
+ var fetch = function fetch(params) {
2279
+ return axios__default["default"].get(SEGMENTS_BASE_URL, {
2280
+ params: params
2281
+ });
2282
+ };
2283
+ var show = function show(id) {
2284
+ return axios__default["default"].get("".concat(SEGMENTS_BASE_URL, "/").concat(id), {
2285
+ transformResponseCase: false
2286
+ });
2287
+ };
2288
+ var create = function create(payload) {
2289
+ return axios__default["default"].post(SEGMENTS_BASE_URL, {
2290
+ segment: payload
2041
2291
  }, {
2042
- onChange: handleRuleChange
2043
- })), /*#__PURE__*/React__default["default"].createElement(neetoui.DatePicker, _extends({
2044
- autoFocus: autoFocus,
2045
- value: value,
2046
- "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(key), "-filter"),
2047
- getPopupContainer: ramda.prop("parentNode"),
2048
- type: datePickerType,
2049
- onChange: handleChange
2050
- }, otherProps)));
2292
+ showToastr: false
2293
+ });
2294
+ };
2295
+ var update = function update(_ref) {
2296
+ var id = _ref.id,
2297
+ payload = _ref.payload,
2298
+ _ref$showToastr = _ref.showToastr,
2299
+ showToastr = _ref$showToastr === void 0 ? true : _ref$showToastr;
2300
+ return axios__default["default"].put("".concat(SEGMENTS_BASE_URL, "/").concat(id), payload, {
2301
+ showToastr: showToastr
2302
+ });
2303
+ };
2304
+ var destroy = function destroy(id) {
2305
+ return axios__default["default"]["delete"]("".concat(SEGMENTS_BASE_URL, "/").concat(id));
2306
+ };
2307
+ var segmentsApi = {
2308
+ fetch: fetch,
2309
+ show: show,
2310
+ create: create,
2311
+ update: update,
2312
+ destroy: destroy
2051
2313
  };
2052
2314
 
2053
- var SingleTime = function SingleTime(_ref) {
2054
- var column = _ref.column,
2055
- filter = _ref.filter,
2056
- filters = _ref.filters,
2057
- handleApplyFilter = _ref.handleApplyFilter,
2058
- autoFocus = _ref.autoFocus;
2059
- var _useState = React.useState(function () {
2060
- return neetoCist.findBy({
2061
- value: filter === null || filter === void 0 ? void 0 : filter.rule
2062
- }, SINGLE_TIME_OPTIONS) || SINGLE_TIME_OPTIONS[0];
2315
+ 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; }
2316
+ 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; }
2317
+ var SEGMENTS_LIST = QUERY_KEYS.SEGMENTS_LIST;
2318
+ var useFetchSegments = function useFetchSegments(_ref) {
2319
+ var entity = _ref.entity,
2320
+ _ref$searchTerm = _ref.searchTerm,
2321
+ searchTerm = _ref$searchTerm === void 0 ? "" : _ref$searchTerm;
2322
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
2323
+ return reactQuery.useQuery([SEGMENTS_LIST, entity, searchTerm], function () {
2324
+ return segmentsApi.fetch({
2325
+ entity: entity,
2326
+ searchTerm: searchTerm
2327
+ });
2328
+ }, ramda.mergeRight({
2329
+ staleTime: SEGMENTS_STALE_TIME,
2330
+ select: ramda.prop("segments")
2331
+ }, options));
2332
+ };
2333
+ var useCreateSegment = function useCreateSegment(options) {
2334
+ return reactUtils.useMutationWithInvalidation(segmentsApi.create, _objectSpread$3({
2335
+ keysToInvalidate: [SEGMENTS_LIST]
2336
+ }, options));
2337
+ };
2338
+ var useUpdateSegment = function useUpdateSegment(options) {
2339
+ return reactUtils.useMutationWithInvalidation(segmentsApi.update, _objectSpread$3({
2340
+ keysToInvalidate: [SEGMENTS_LIST]
2341
+ }, options));
2342
+ };
2343
+ var useDestroySegment = function useDestroySegment(options) {
2344
+ return reactUtils.useMutationWithInvalidation(segmentsApi.destroy, _objectSpread$3({
2345
+ keysToInvalidate: [SEGMENTS_LIST]
2346
+ }, options));
2347
+ };
2348
+
2349
+ 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; }
2350
+ 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; }
2351
+ var useSegment = function useSegment(_ref) {
2352
+ var entity = _ref.entity,
2353
+ keyword = _ref.keyword,
2354
+ columns = _ref.columns,
2355
+ childrenKeys = _ref.childrenKeys;
2356
+ var history = reactRouterDom.useHistory();
2357
+ var _useTranslation = reactI18next.useTranslation(),
2358
+ t = _useTranslation.t;
2359
+ var initialRenderRef = React.useRef(true);
2360
+ var _useQueryParams = reactUtils.useQueryParams(),
2361
+ segmentId = _useQueryParams.segmentId;
2362
+ var _useState = React.useState({
2363
+ action: undefined
2063
2364
  }),
2064
2365
  _useState2 = _slicedToArray(_useState, 2),
2065
- selectedRule = _useState2[0],
2066
- setSelectedRule = _useState2[1];
2067
- var key = column.key,
2068
- _column$defaultType = column.defaultType,
2069
- defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
2070
- label = column.label,
2071
- _column$helpIconProps = column.helpIconProps,
2072
- helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
2073
- var otherProps = getOtherProps(column);
2074
- var timePickerType = selectedRule.value === "between" ? "range" : "time";
2075
- var value = filter === null || filter === void 0 ? void 0 : filter.value;
2366
+ isSavePaneOpen = _useState2[0],
2367
+ setIsSavePaneOpen = _useState2[1];
2368
+ var _useCreateSegment = useCreateSegment(),
2369
+ createSegment = _useCreateSegment.mutate,
2370
+ isCreating = _useCreateSegment.isLoading;
2371
+ var _useUpdateSegment = useUpdateSegment(),
2372
+ updateSegment = _useUpdateSegment.mutate,
2373
+ isUpdating = _useUpdateSegment.isLoading;
2374
+ var isSubmitting = isCreating || isUpdating;
2375
+ var searchParams = reactUtils.useQueryParams({
2376
+ toCamelCase: false
2377
+ });
2378
+ var keywordValue = searchParams[SEARCH_TERM_KEY] || "";
2379
+ var isEdit = isSavePaneOpen.action === SEGMENT_ACTIONS$1.EDIT;
2380
+ var keywordFilter = _objectSpread$2(_objectSpread$2({
2381
+ type: "text",
2382
+ rule: "contains",
2383
+ label: t("neetoFilters.common.searchTerm")
2384
+ }, keyword), {}, {
2385
+ key: SEARCH_TERM_KEY,
2386
+ value: keywordValue
2387
+ });
2388
+ var filters = buildFiltersFromSearchParams(isKeywordFilterPresent(keywordFilter) && neetoCist.isNotEmpty(keywordValue) ? [keywordFilter].concat(_toConsumableArray(columns)) : columns);
2389
+ var nonHiddenFilters = neetoCist.removeBy({
2390
+ hidden: true
2391
+ }, filters);
2392
+ var handleApplyFilters = function handleApplyFilters(newFilters, isClearAll) {
2393
+ var params = buildUrlFromFilters(_objectSpread$2({
2394
+ columns: columns,
2395
+ filters: isKeywordFilterPresent(keywordFilter) && neetoCist.isNotEmpty(getSearchTermFromUrl()) ? [].concat(_toConsumableArray(newFilters), [keywordFilter]) : newFilters
2396
+ }, isClearAll && {
2397
+ isClearAll: true,
2398
+ childrenKeys: childrenKeys
2399
+ }));
2400
+ history.push({
2401
+ search: params
2402
+ });
2403
+ };
2404
+ var childrenFiltersApplied = childrenKeys.some(function (key) {
2405
+ return ramda.has(key, searchParams);
2406
+ });
2076
2407
  React.useEffect(function () {
2077
- if (!ramda.isEmpty(filters)) return;
2078
- setSelectedRule(SINGLE_TIME_OPTIONS[0]);
2079
- }, [filters]);
2080
- var handleRuleChange = function handleRuleChange(ruleOption) {
2081
- setSelectedRule(ruleOption);
2082
-
2083
- // Clear value if switched between incompatible types
2084
- var updateValue = value;
2085
- if (timePickerType === "range" && ruleOption.value !== "between" || timePickerType === "time" && ruleOption.value === "between") {
2086
- updateValue = "";
2408
+ if (initialRenderRef.current) {
2409
+ initialRenderRef.current = false;
2410
+ return neetoCist.noop;
2087
2411
  }
2088
- var updatedFilter = buildUpdatedFilter({
2089
- column: column,
2090
- defaultType: defaultType,
2091
- option: {},
2092
- rule: ruleOption.value,
2093
- value: updateValue
2412
+ var handler = setTimeout(function () {
2413
+ handleApplyFilters(filters);
2414
+ }, 500);
2415
+ return function () {
2416
+ return clearTimeout(handler);
2417
+ };
2418
+ }, [keywordValue]);
2419
+ var handleCreateSuccess = function handleCreateSuccess(_ref2) {
2420
+ var _filters$;
2421
+ var _ref2$segment = _ref2.segment,
2422
+ id = _ref2$segment.id,
2423
+ filters = _ref2$segment.filters;
2424
+ history.push({
2425
+ search: buildUrlFromSegment({
2426
+ columns: columns,
2427
+ filters: (_filters$ = filters[0]) === null || _filters$ === void 0 ? void 0 : _filters$.conditions,
2428
+ id: id
2429
+ })
2094
2430
  });
2095
- handleApplyFilter(updatedFilter);
2431
+ setIsSavePaneOpen({
2432
+ action: undefined
2433
+ });
2434
+ utils.showThumbsUpToastr();
2096
2435
  };
2097
- var handleChange = function handleChange(times) {
2098
- var value = timePickerType === "range" ? ramda.pluck("$d", times).map(function (time) {
2099
- return time.toISOString();
2100
- }) : times["$d"].toISOString();
2101
- var updatedFilter = buildUpdatedFilter({
2102
- column: column,
2103
- defaultType: defaultType,
2104
- option: {},
2105
- rule: selectedRule.value,
2106
- value: value
2436
+ var handleCreate = function handleCreate(_ref3, _ref4) {
2437
+ var name = _ref3.name;
2438
+ var setFieldError = _ref4.setFieldError;
2439
+ var filtersPayload = buildSegmentsPayload(filters, childrenKeys);
2440
+ createSegment({
2441
+ name: name,
2442
+ entity: entity,
2443
+ filters: filtersPayload
2444
+ }, {
2445
+ onSuccess: handleCreateSuccess,
2446
+ onError: function onError(error) {
2447
+ return setFieldError("name", error.response.data.error);
2448
+ }
2107
2449
  });
2108
- handleApplyFilter(updatedFilter);
2109
2450
  };
2110
- return /*#__PURE__*/React__default["default"].createElement("div", {
2111
- className: "neeto-filters-pane-filter__item-wrapper"
2112
- }, /*#__PURE__*/React__default["default"].createElement(neetoui.Select, _extends({
2113
- label: label,
2114
- defaultValue: SINGLE_TIME_OPTIONS[0],
2115
- options: SINGLE_TIME_OPTIONS,
2116
- strategy: "fixed",
2117
- value: selectedRule
2118
- }, neetoCist.isNotEmpty(helpIconProps) && {
2119
- labelProps: {
2120
- helpIconProps: buildHelpIconProps(helpIconProps)
2121
- }
2122
- }, {
2123
- onChange: handleRuleChange
2124
- })), /*#__PURE__*/React__default["default"].createElement(neetoui.TimePicker, _extends({
2125
- autoFocus: autoFocus,
2126
- value: value,
2127
- use12Hours: true,
2128
- className: "w-full",
2129
- "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(key), "-filter"),
2130
- format: "h:mm A",
2131
- getPopupContainer: ramda.prop("parentNode"),
2132
- type: timePickerType,
2133
- onChange: handleChange
2134
- }, otherProps)));
2135
- };
2136
-
2137
- var Text = function Text(_ref) {
2138
- var column = _ref.column,
2139
- filter = _ref.filter,
2140
- filters = _ref.filters,
2141
- handleApplyFilter = _ref.handleApplyFilter,
2142
- autoFocus = _ref.autoFocus,
2143
- onClose = _ref.onClose;
2144
- var key = column.key,
2145
- _column$defaultType = column.defaultType,
2146
- defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
2147
- label = column.label,
2148
- _column$showRuleSelec = column.showRuleSelector,
2149
- showRuleSelector = _column$showRuleSelec === void 0 ? false : _column$showRuleSelec,
2150
- _column$helpIconProps = column.helpIconProps,
2151
- helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
2152
- var otherProps = getOtherProps(column);
2153
- var ruleOptions = buildRuleOptions({
2154
- defaultType: defaultType
2155
- });
2156
- var inputType = defaultType === "text" || defaultType === "custom.text" ? "text" : "number";
2157
- var _useState = React.useState(filter === null || filter === void 0 ? void 0 : filter.value),
2158
- _useState2 = _slicedToArray(_useState, 2),
2159
- inputValue = _useState2[0],
2160
- setInputValue = _useState2[1];
2161
- var _useState3 = React.useState(function () {
2162
- return neetoCist.findBy({
2163
- value: filter === null || filter === void 0 ? void 0 : filter.rule
2164
- }, ruleOptions) || ruleOptions[0];
2165
- }),
2166
- _useState4 = _slicedToArray(_useState3, 2),
2167
- selectedRule = _useState4[0],
2168
- setSelectedRule = _useState4[1];
2169
- var debouncedInputValue = reactUtils.useDebounce(inputValue);
2170
- var _useTranslation = reactI18next.useTranslation(),
2171
- t = _useTranslation.t;
2172
- var handleUpdateAndApplyFilter = function handleUpdateAndApplyFilter() {
2173
- var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : debouncedInputValue;
2174
- var rule = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : selectedRule;
2175
- if (ramda.equals(filter === null || filter === void 0 ? void 0 : filter.value, value) && ramda.equals(selectedRule, rule)) return;
2176
- var updatedFilter = buildUpdatedFilter({
2177
- column: column,
2178
- defaultType: defaultType,
2179
- option: {},
2180
- rule: rule.value,
2181
- value: value.trim()
2451
+ var handleUpdate = function handleUpdate(_ref5, _ref6) {
2452
+ var name = _ref5.name;
2453
+ var setFieldError = _ref6.setFieldError;
2454
+ var filtersPayload = buildSegmentsPayload(filters, childrenKeys);
2455
+ updateSegment({
2456
+ id: segmentId,
2457
+ payload: {
2458
+ name: name,
2459
+ filters: filtersPayload
2460
+ }
2461
+ }, {
2462
+ onSuccess: function onSuccess() {
2463
+ setIsSavePaneOpen({
2464
+ action: undefined
2465
+ });
2466
+ utils.showThumbsUpToastr();
2467
+ },
2468
+ onError: function onError(error) {
2469
+ return setFieldError("name", error.response.data.error);
2470
+ }
2182
2471
  });
2183
- handleApplyFilter(updatedFilter);
2184
- };
2185
- var handleKeydown = function handleKeydown(e) {
2186
- if (!(e.key === "Enter")) return;
2187
- handleUpdateAndApplyFilter(inputValue);
2188
- onClose();
2189
2472
  };
2190
- var handleRuleChange = function handleRuleChange(ruleOption) {
2191
- setSelectedRule(ruleOption);
2192
- if (!debouncedInputValue) return;
2193
- handleUpdateAndApplyFilter(debouncedInputValue, ruleOption);
2473
+ return {
2474
+ isEdit: isEdit,
2475
+ filters: filters,
2476
+ keywordFilter: keywordFilter,
2477
+ isSubmitting: isSubmitting,
2478
+ nonHiddenFilters: nonHiddenFilters,
2479
+ isSavePaneOpen: isSavePaneOpen,
2480
+ setIsSavePaneOpen: setIsSavePaneOpen,
2481
+ handleApplyFilters: handleApplyFilters,
2482
+ childrenFiltersApplied: childrenFiltersApplied,
2483
+ handleSubmit: isEdit ? handleUpdate : handleCreate
2194
2484
  };
2485
+ };
2195
2486
 
2196
- // Reset states when "Clear filters" button is clicked.
2197
- React.useEffect(function () {
2198
- (ramda.isEmpty(filters) || ramda.isNil(filter)) && setInputValue("");
2199
- }, [filter]);
2200
- React.useEffect(function () {
2201
- if (!debouncedInputValue) {
2202
- !isUndefinedOrEmpty(filter) && handleApplyFilter({
2203
- _delete: true
2487
+ var Menu = neetoui.Dropdown.Menu,
2488
+ MenuItem = neetoui.Dropdown.MenuItem;
2489
+ var SegmentBar = function SegmentBar(_ref) {
2490
+ var entity = _ref.entity,
2491
+ filters = _ref.filters,
2492
+ setIsSavePaneOpen = _ref.setIsSavePaneOpen,
2493
+ setIsPaneOpen = _ref.setIsPaneOpen;
2494
+ var _useTranslation = reactI18next.useTranslation(),
2495
+ t = _useTranslation.t;
2496
+ var _useQueryParams = reactUtils.useQueryParams(),
2497
+ segmentId = _useQueryParams.segmentId;
2498
+ var queryClient = reactQuery.useQueryClient();
2499
+ var cachedSegments = queryClient.getQueryData([QUERY_KEYS.SEGMENTS_LIST, entity, ""]) || DEFAULT_SEGMENTS_CACHE;
2500
+ var segment = neetoCist.findById(segmentId, cachedSegments.segments);
2501
+ if (neetoCist.isNotPresent(segment)) return null;
2502
+ var newChangesExists = deepCompare(segment.filters[0].conditions, filters);
2503
+ return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
2504
+ className: "neeto-ui-text-gray-600 mr-4",
2505
+ "data-cy": "neeto-filters-segment-name",
2506
+ style: "h4"
2507
+ }, segment.name), newChangesExists && /*#__PURE__*/React__default["default"].createElement(neetoui.Dropdown, {
2508
+ buttonStyle: "secondary",
2509
+ label: t("neetoFilters.segments.updateSegment")
2510
+ }, /*#__PURE__*/React__default["default"].createElement(Menu, null, /*#__PURE__*/React__default["default"].createElement(MenuItem.Button, {
2511
+ onClick: function onClick() {
2512
+ return setIsSavePaneOpen({
2513
+ action: SEGMENT_ACTIONS$1.EDIT
2204
2514
  });
2205
- return;
2206
- }
2207
- handleUpdateAndApplyFilter();
2208
- }, [debouncedInputValue]);
2209
- return /*#__PURE__*/React__default["default"].createElement("div", {
2210
- className: "neeto-filters-pane-filter__item-wrapper"
2211
- }, showRuleSelector && /*#__PURE__*/React__default["default"].createElement(neetoui.Select, _extends({
2212
- label: label,
2213
- "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(key), "-filter-rule"),
2214
- defaultValue: ruleOptions[0],
2215
- options: ruleOptions,
2216
- strategy: "fixed",
2217
- value: selectedRule,
2218
- onChange: handleRuleChange
2219
- }, neetoCist.isNotEmpty(helpIconProps) && {
2220
- labelProps: {
2221
- helpIconProps: buildHelpIconProps(helpIconProps)
2222
2515
  }
2223
- })), /*#__PURE__*/React__default["default"].createElement(neetoui.Input, _extends({
2224
- autoFocus: autoFocus,
2225
- "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(key), "-filter"),
2226
- label: !showRuleSelector && label,
2227
- type: inputType,
2228
- value: inputValue
2229
- }, neetoCist.isNotEmpty(helpIconProps) && {
2230
- labelProps: {
2231
- helpIconProps: buildHelpIconProps(helpIconProps)
2516
+ }, t("neetoFilters.segments.updateSegment")), /*#__PURE__*/React__default["default"].createElement(MenuItem.Button, {
2517
+ onClick: function onClick() {
2518
+ setIsPaneOpen(false);
2519
+ setIsSavePaneOpen({
2520
+ action: SEGMENT_ACTIONS$1.CREATE
2521
+ });
2232
2522
  }
2233
- }, {
2234
- placeholder: t("neetoFilters.messages.enterResource", {
2235
- resource: label
2236
- }),
2237
- onChange: function onChange(event) {
2238
- return setInputValue(event.target.value);
2239
- },
2240
- onKeyDown: handleKeydown
2241
- }, otherProps)));
2523
+ }, t("neetoFilters.segments.saveAsNewSegment")))));
2242
2524
  };
2243
2525
 
2244
- var Time = function Time(_ref) {
2245
- var column = _ref.column,
2246
- filter = _ref.filter,
2247
- handleApplyFilter = _ref.handleApplyFilter,
2248
- autoFocus = _ref.autoFocus;
2249
- var key = column.key,
2250
- _column$defaultType = column.defaultType,
2251
- defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
2252
- label = column.label,
2253
- _column$helpIconProps = column.helpIconProps,
2254
- helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
2255
- var otherProps = getOtherProps(column);
2256
- var value = buildSingleTimeValue(filter);
2257
- var isCustomTimeRangeShown = filter && isCustomTimeRange(filter.value);
2258
- var _useTranslation = reactI18next.useTranslation(),
2259
- t = _useTranslation.t;
2260
- var handleChange = function handleChange(option) {
2261
- if (ramda.isEmpty(option) || ramda.isNil(option)) {
2262
- handleApplyFilter({
2263
- _delete: true
2526
+ var Bar = function Bar(_ref) {
2527
+ var entity = _ref.entity,
2528
+ className = _ref.className,
2529
+ _ref$columns = _ref.columns,
2530
+ columns = _ref$columns === void 0 ? [] : _ref$columns,
2531
+ _ref$keyword = _ref.keyword,
2532
+ keyword = _ref$keyword === void 0 ? {
2533
+ node: "",
2534
+ value: "",
2535
+ setValue: neetoCist.noop
2536
+ } : _ref$keyword,
2537
+ _ref$setIsPaneOpen = _ref.setIsPaneOpen,
2538
+ setIsPaneOpen = _ref$setIsPaneOpen === void 0 ? ramda.identity : _ref$setIsPaneOpen,
2539
+ _ref$childrenKeys = _ref.childrenKeys,
2540
+ childrenKeys = _ref$childrenKeys === void 0 ? [] : _ref$childrenKeys,
2541
+ _ref$defaultSegmentNa = _ref.defaultSegmentName,
2542
+ defaultSegmentName = _ref$defaultSegmentNa === void 0 ? i18next.t("neetoFilters.common.allResults") : _ref$defaultSegmentNa,
2543
+ customFilters = _ref.customFilters;
2544
+ var queryClient = reactQuery.useQueryClient();
2545
+ var _useQueryParams = reactUtils.useQueryParams(),
2546
+ segmentId = _useQueryParams.segmentId;
2547
+ var segmentFormInitialRef = React.useRef(null);
2548
+ var _useSegment = useSegment({
2549
+ entity: entity,
2550
+ keyword: keyword,
2551
+ columns: columns,
2552
+ childrenKeys: childrenKeys
2553
+ }),
2554
+ isEdit = _useSegment.isEdit,
2555
+ filters = _useSegment.filters,
2556
+ handleSubmit = _useSegment.handleSubmit,
2557
+ isSubmitting = _useSegment.isSubmitting,
2558
+ keywordFilter = _useSegment.keywordFilter,
2559
+ isSavePaneOpen = _useSegment.isSavePaneOpen,
2560
+ nonHiddenFilters = _useSegment.nonHiddenFilters,
2561
+ setIsSavePaneOpen = _useSegment.setIsSavePaneOpen,
2562
+ handleApplyFilters = _useSegment.handleApplyFilters,
2563
+ childrenFiltersApplied = _useSegment.childrenFiltersApplied;
2564
+ var BarComponent = segmentId ? SegmentBar : FilterBar;
2565
+ var cachedSegments = queryClient.getQueryData([QUERY_KEYS.SEGMENTS_LIST, entity, ""]) || DEFAULT_SEGMENTS_CACHE;
2566
+ var segment = neetoCist.findById(segmentId, cachedSegments.segments);
2567
+ if (ramda.isEmpty(nonHiddenFilters) && !childrenFiltersApplied) return null;
2568
+ return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement("div", {
2569
+ className: classnames__default["default"]("neeto-filters-bar", _defineProperty({}, className, className))
2570
+ }, /*#__PURE__*/React__default["default"].createElement(BarComponent, {
2571
+ childrenFiltersApplied: childrenFiltersApplied,
2572
+ childrenKeys: childrenKeys,
2573
+ entity: entity,
2574
+ filters: filters,
2575
+ handleApplyFilters: handleApplyFilters,
2576
+ keywordFilter: keywordFilter,
2577
+ nonHiddenFilters: nonHiddenFilters,
2578
+ setIsPaneOpen: setIsPaneOpen,
2579
+ setIsSavePaneOpen: setIsSavePaneOpen
2580
+ })), /*#__PURE__*/React__default["default"].createElement(SegmentForm, {
2581
+ childrenKeys: childrenKeys,
2582
+ columns: columns,
2583
+ customFilters: customFilters,
2584
+ defaultSegmentName: defaultSegmentName,
2585
+ filters: filters,
2586
+ handleSubmit: handleSubmit,
2587
+ isEdit: isEdit,
2588
+ isSubmitting: isSubmitting,
2589
+ keywordFilter: keywordFilter,
2590
+ segmentFormInitialRef: segmentFormInitialRef,
2591
+ isOpen: neetoCist.isPresent(isSavePaneOpen.action),
2592
+ initialValues: isEdit ? ramda.assoc("filters", [{
2593
+ conditions: filters
2594
+ }], segment) : {
2595
+ name: "",
2596
+ filters: [{
2597
+ conditions: filters
2598
+ }]
2599
+ },
2600
+ onClose: function onClose() {
2601
+ return setIsSavePaneOpen({
2602
+ action: undefined
2264
2603
  });
2265
- return;
2266
- }
2267
- var updatedFilter = buildUpdatedFilter({
2268
- column: column,
2269
- defaultType: defaultType,
2270
- option: option
2271
- });
2272
- handleApplyFilter(updatedFilter);
2273
- };
2274
- var handleTimeRangeChange = function handleTimeRangeChange(times) {
2275
- var updatedFilter = buildUpdatedFilter({
2276
- column: column,
2277
- defaultType: defaultType,
2278
- option: {
2279
- value: ramda.pluck("$d", times).map(function (time) {
2280
- return time.toISOString();
2281
- })
2282
- }
2283
- });
2284
- handleApplyFilter(updatedFilter);
2285
- };
2286
- return /*#__PURE__*/React__default["default"].createElement("div", {
2287
- className: "neeto-filters-pane-filter__item-wrapper"
2288
- }, /*#__PURE__*/React__default["default"].createElement(neetoui.Select, _extends({
2289
- autoFocus: autoFocus,
2290
- label: label,
2291
- value: value,
2292
- isClearable: true,
2293
- "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(key), "-filter"),
2294
- options: TIME_OPTIONS,
2295
- strategy: "fixed",
2296
- placeholder: t("neetoFilters.messages.selectResource", {
2297
- resource: label
2298
- })
2299
- }, neetoCist.isNotEmpty(helpIconProps) && {
2300
- labelProps: {
2301
- helpIconProps: buildHelpIconProps(helpIconProps)
2302
2604
  }
2303
- }, {
2304
- onChange: handleChange
2305
- })), isCustomTimeRangeShown && /*#__PURE__*/React__default["default"].createElement(neetoui.TimePicker, _extends({
2306
- use12Hours: true,
2307
- "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(key), "-date-range"),
2308
- format: "h:mm A",
2309
- getPopupContainer: ramda.prop("parentNode"),
2310
- type: "range",
2311
- value: filter.value,
2312
- onChange: handleTimeRangeChange
2313
- }, otherProps)));
2605
+ }));
2314
2606
  };
2315
- var Time$1 = /*#__PURE__*/React__default["default"].memo(Time);
2316
2607
 
2317
- var Item = function Item(_ref) {
2318
- var column = _ref.column,
2319
- filters = _ref.filters,
2320
- onChange = _ref.onChange,
2321
- autoFocus = _ref.autoFocus,
2322
- onClose = _ref.onClose;
2323
- var key = column.key,
2324
- _column$defaultType = column.defaultType,
2325
- defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType;
2326
- var filter = React.useMemo(function () {
2327
- return neetoCist.findBy({
2328
- key: key
2329
- }, filters);
2330
- }, [filters, key]);
2331
- var handleApplyFilter = function handleApplyFilter(updatedFilter) {
2332
- if (updatedFilter._delete) onChange(neetoCist.removeBy({
2333
- key: key
2334
- }, filters));else if (!filter) onChange(ramda.append(updatedFilter, filters));else onChange(neetoCist.replaceBy({
2335
- key: key
2336
- }, updatedFilter, filters));
2337
- };
2338
- if (isText(defaultType) || isDigit(defaultType)) {
2339
- return /*#__PURE__*/React__default["default"].createElement(Text, {
2340
- autoFocus: autoFocus,
2341
- column: column,
2342
- filter: filter,
2343
- filters: filters,
2344
- handleApplyFilter: handleApplyFilter,
2345
- onClose: onClose
2346
- });
2347
- }
2348
- if (isDate(defaultType)) {
2349
- return /*#__PURE__*/React__default["default"].createElement(Datetime$1, {
2350
- autoFocus: autoFocus,
2351
- column: column,
2352
- filter: filter,
2353
- handleApplyFilter: handleApplyFilter
2354
- });
2608
+ function _objectWithoutPropertiesLoose(source, excluded) {
2609
+ if (source == null) return {};
2610
+ var target = {};
2611
+ var sourceKeys = Object.keys(source);
2612
+ var key, i;
2613
+ for (i = 0; i < sourceKeys.length; i++) {
2614
+ key = sourceKeys[i];
2615
+ if (excluded.indexOf(key) >= 0) continue;
2616
+ target[key] = source[key];
2355
2617
  }
2356
- if (isTime(defaultType)) {
2357
- return /*#__PURE__*/React__default["default"].createElement(Time$1, {
2358
- autoFocus: autoFocus,
2359
- column: column,
2360
- filter: filter,
2361
- handleApplyFilter: handleApplyFilter
2362
- });
2618
+ return target;
2619
+ }
2620
+
2621
+ function _objectWithoutProperties(source, excluded) {
2622
+ if (source == null) return {};
2623
+ var target = _objectWithoutPropertiesLoose(source, excluded);
2624
+ var key, i;
2625
+ if (Object.getOwnPropertySymbols) {
2626
+ var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
2627
+ for (i = 0; i < sourceSymbolKeys.length; i++) {
2628
+ key = sourceSymbolKeys[i];
2629
+ if (excluded.indexOf(key) >= 0) continue;
2630
+ if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
2631
+ target[key] = source[key];
2632
+ }
2363
2633
  }
2364
- if (isSingleDate(defaultType)) {
2365
- return /*#__PURE__*/React__default["default"].createElement(SingleDatetime, {
2366
- autoFocus: autoFocus,
2367
- column: column,
2368
- filter: filter,
2369
- filters: filters,
2370
- handleApplyFilter: handleApplyFilter
2634
+ return target;
2635
+ }
2636
+
2637
+ var useFilters = function useFilters(_ref) {
2638
+ var onFiltersChange = _ref.onFiltersChange,
2639
+ columns = _ref.columns,
2640
+ keywordFilter = _ref.keywordFilter,
2641
+ onSelectorsChange = _ref.onSelectorsChange;
2642
+ var _useTransition = React.useTransition(),
2643
+ _useTransition2 = _slicedToArray(_useTransition, 2);
2644
+ _useTransition2[0];
2645
+ var startTransition = _useTransition2[1];
2646
+ var initialRender = React.useRef(true);
2647
+ var prevFilters = React.useRef([]);
2648
+ var location = reactRouterDom.useLocation();
2649
+ var filters = buildFiltersFromSearchParams(columns, false);
2650
+ var history = reactRouterDom.useHistory();
2651
+ var defaultValuesOfColumns = JSON.stringify(ramda.pluck("defaultValue", columns));
2652
+ var handlePrecenseOfDefaultFilters = function handlePrecenseOfDefaultFilters(defaultFilters) {
2653
+ var params = buildUrlFromFilters({
2654
+ columns: columns,
2655
+ filters: isKeywordFilterPresent(keywordFilter) && neetoCist.isNotEmpty(getSearchTermFromUrl()) ? [].concat(_toConsumableArray(defaultFilters), [keywordFilter]) : defaultFilters
2371
2656
  });
2372
- }
2373
- if (isSingleTime(defaultType)) {
2374
- return /*#__PURE__*/React__default["default"].createElement(SingleTime, {
2375
- autoFocus: autoFocus,
2376
- column: column,
2377
- filter: filter,
2378
- filters: filters,
2379
- handleApplyFilter: handleApplyFilter
2657
+ history.replace({
2658
+ search: params
2380
2659
  });
2381
- }
2382
- if (isBoolean(defaultType) || isCheckbox(defaultType)) {
2383
- return /*#__PURE__*/React__default["default"].createElement(Boolean$1, {
2384
- autoFocus: autoFocus,
2385
- column: column,
2386
- filter: filter,
2387
- handleApplyFilter: handleApplyFilter
2660
+ };
2661
+ var handleFiltersChange = function handleFiltersChange(filtersPayload) {
2662
+ startTransition(function () {
2663
+ onFiltersChange(buildFiltersPayload(filtersPayload.filter(function (filter) {
2664
+ return !ramda.isNil(filter.node);
2665
+ })));
2388
2666
  });
2389
- }
2390
- return /*#__PURE__*/React__default["default"].createElement(Dropdown$1, {
2391
- autoFocus: autoFocus,
2392
- column: column,
2393
- filter: filter,
2394
- handleApplyFilter: handleApplyFilter
2395
- });
2667
+ };
2668
+
2669
+ //This function sends the updated filters to host via callbacks.
2670
+ var sendUpdatedFilters = function sendUpdatedFilters() {
2671
+ if (compareFilters(ramda.append(keywordFilter, filters), prevFilters.current)) {
2672
+ return;
2673
+ }
2674
+ var newFilters = buildFiltersFromSearchParams(columns);
2675
+ var filtersPayload = isKeywordFilterPresent(keywordFilter) && neetoCist.isNotEmpty(getSearchTermFromUrl()) ? ramda.append(keywordFilter, newFilters) : newFilters;
2676
+ handleFiltersChange(filtersPayload);
2677
+ onSelectorsChange(buildSelectorsFromURL(columns));
2678
+ };
2679
+ var handleChangesInURL = function handleChangesInURL() {
2680
+ var defaultFilters = buildDefaultFilters(columns, filters);
2681
+ var searchParams = getSnakeCasedQueryParams();
2682
+ var keys = ramda.pluck("key", ramda.append(keywordFilter, columns));
2683
+ if (keys.every(function (key) {
2684
+ return ramda.isNil(searchParams[key]);
2685
+ }) && !ramda.isEmpty(defaultFilters)) {
2686
+ history.replace({
2687
+ search: buildUrlFromFilters({
2688
+ columns: columns,
2689
+ filters: ramda.concat(defaultFilters, filters)
2690
+ })
2691
+ });
2692
+ filters = buildFiltersFromSearchParams(columns, false);
2693
+ }
2694
+ };
2695
+ React.useEffect(function () {
2696
+ if (initialRender.current) {
2697
+ initialRender.current = false;
2698
+ var keywordValue = getSearchTermFromUrl();
2699
+ var defaultFilters = buildDefaultFilters(columns, filters);
2700
+ neetoCist.isNotEmpty(defaultFilters) && handlePrecenseOfDefaultFilters(defaultFilters);
2701
+ prevFilters.current = ramda.append(ramda.mergeRight(keywordFilter, {
2702
+ value: keywordValue
2703
+ }), filters);
2704
+ } else {
2705
+ handleChangesInURL();
2706
+ sendUpdatedFilters();
2707
+ prevFilters.current = ramda.append(keywordFilter, filters);
2708
+ }
2709
+ }, [location.search, defaultValuesOfColumns]);
2710
+ return filters;
2396
2711
  };
2397
2712
 
2398
2713
  var _excluded = ["isOpen", "onClose", "columns", "onChange", "isSearchable", "keyword", "onSelectorsChange", "childrenKeys", "children", "className"];
@@ -2558,7 +2873,7 @@ var Pane = function Pane(_ref) {
2558
2873
 
2559
2874
  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}}
2560
2875
 
2561
- var css = ".neeto-filters-bar{align-items:center;display:flex;flex-wrap:wrap}.neeto-filters-bar__block{border-radius:var(--neeto-ui-rounded);display:flex;gap:4px;margin:4px 0;max-width:384px;overflow:hidden;padding:4px 8px;position:relative;transition:var(--neeto-ui-transition);white-space:nowrap}.neeto-filters-bar__block p:first-child{color:rgb(var(--neeto-ui-gray-700))}.neeto-filters-bar__block-close{background-image:linear-gradient(90deg,rgba(var(--neeto-ui-gray-200),.5) 0,rgba(var(--neeto-ui-gray-200),1) 25%);color:rgb(var(--neeto-ui-gray-800));opacity:0;padding:8px;position:absolute;right:0;top:0;transition:var(--neeto-ui-transition)}.neeto-filters-bar__block:active,.neeto-filters-bar__block:hover{background-color:rgb(var(--neeto-ui-gray-200));cursor:pointer}.neeto-filters-bar__block:active .neeto-filters-bar__block-close,.neeto-filters-bar__block:hover .neeto-filters-bar__block-close{border-radius:var(--neeto-ui-rounded);color:rgb(var(--neeto-ui-black));opacity:1}.neeto-filters-bar__block:focus{box-shadow:0 0 0 3px rgba(var(--neeto-ui-gray-800),15%);outline:none}.neeto-filters-bar--separator{align-self:stretch;border-left:1px solid rgb(var(--neeto-ui-gray-400));margin:12px 8px}.neeto-filters-pane-filter{width:360px}.neeto-filters-pane-filter__body{align-items:stretch!important;gap:20px}.neeto-filters-pane-filter__body>*{flex-grow:0!important}.neeto-filters-pane-filter__body p{text-align:center}.neeto-filters-pane-filter__body .neeto-filters-pane-filter__item-wrapper{display:flex;flex-direction:column;gap:8px}.neeto-filters-pane-filter__body .accordion_item .neeto-filters-pane-filter__item-wrapper{margin-top:16px}.neeto-filters-pane-filter__body .accordion_item .neeto-filters-pane-filter__item-wrapper:first-of-type{margin-top:0}.neeto-filters-pane-filter__body .accordion_item:first-of-type .neeto-ui-accordion__item{padding-top:0}.neeto-filters-pane-filter__body .neeto-ui-accordion__wrapper--last-item{border-bottom:thin solid rgb(var(--neeto-ui-gray-300))}@media screen and (max-width:767px){.neeto-filters-pane-filter{width:100vw}}.neeto-filters-pane-backdrop{-webkit-backdrop-filter:blur(0)!important;backdrop-filter:blur(0)!important;background-color:rgba(var(--neeto-ui-gray-700),.2)}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFwcC9qYXZhc2NyaXB0L3NyYy9zdHlsZXNoZWV0cy9jb21wb25lbnRzL19iYXIuc2NzcyIsImFwcC9qYXZhc2NyaXB0L3NyYy9zdHlsZXNoZWV0cy9pbmRleC5zY3NzIiwiYXBwL2phdmFzY3JpcHQvc3JjL3N0eWxlc2hlZXRzL2NvbXBvbmVudHMvX2ZpbHRlcnMuc2NzcyIsImFwcC9qYXZhc2NyaXB0L3NyYy9zdHlsZXNoZWV0cy9hYnN0cmFjdHMvX21peGlucy5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUdFLGtCQUFBLENBRkEsWUFBQSxDQUNBLGNDRUYsQ0RDRSwwQkFLRSxxQ0FBQSxDQUhBLFlBQUEsQ0FFQSxPQUFBLENBR0EsWUFBQSxDQUNBLGVBQUEsQ0FFQSxlQUFBLENBVEEsZUFBQSxDQUVBLGlCQUFBLENBR0EscUNBQUEsQ0FHQSxrQkNFSixDRENJLHdDQUNFLG1DQ0NOLENERUksZ0NBUUUsZ0hBQUEsQ0FGQSxtQ0FBQSxDQURBLFNBQUEsQ0FEQSxXQUFBLENBSEEsaUJBQUEsQ0FFQSxPQUFBLENBREEsS0FBQSxDQUtBLHFDQ0NOLENET0ksaUVBRUUsOENBQUEsQ0FDQSxjQ05OLENEUU0saUlBR0UscUNBQUEsQ0FEQSxnQ0FBQSxDQURBLFNDSlIsQ0RVSSxnQ0FFRSx1REFBQSxDQURBLFlDUE4sQ0RZRSw4QkFHRSxrQkFBQSxDQUZBLG1EQUFBLENBQ0EsZUNUSixDQy9DQSwyQkFDRSxXRGtERixDQ2hERSxpQ0FDRSw2QkFBQSxDQUNBLFFEa0RKLENDaERJLG1DQUNFLHFCRGtETixDQy9DSSxtQ0FDRSxpQkRpRE4sQ0M5Q0ksMEVBQ0UsWUFBQSxDQUNBLHFCQUFBLENBQ0EsT0RnRE4sQ0M1Q00sMEZBQ0UsZUQ4Q1IsQ0M1Q1Esd0dBQ0UsWUQ4Q1YsQ0MxQ1EseUZBQ0UsYUQ0Q1YsQ0N4Q0kseUVBQ0Usc0REMENOLENFaEVJLG9DRGRKLDJCQXlDSSxXRHlDRixDQUNGLENDdENBLDZCQUNFLHlDQUFBLENBQUEsaUNBQUEsQ0FDQSxrRER5Q0YiLCJzb3VyY2VzQ29udGVudCI6WyIubmVldG8tZmlsdGVycy1iYXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cbiAgJl9fYmxvY2sge1xuICAgIHBhZGRpbmc6IDRweCA4cHg7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgZ2FwOiA0cHg7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbmVldG8tdWktcm91bmRlZCk7XG4gICAgdHJhbnNpdGlvbjogdmFyKC0tbmVldG8tdWktdHJhbnNpdGlvbik7XG4gICAgbWFyZ2luOiA0cHggMDtcbiAgICBtYXgtd2lkdGg6IDM4NHB4O1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAgIHA6Zmlyc3QtY2hpbGQge1xuICAgICAgY29sb3I6IHJnYih2YXIoLS1uZWV0by11aS1ncmF5LTcwMCkpO1xuICAgIH1cblxuICAgICYtY2xvc2Uge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAwO1xuICAgICAgcmlnaHQ6IDA7XG4gICAgICBwYWRkaW5nOiA4cHg7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgICAgY29sb3I6IHJnYih2YXIoLS1uZWV0by11aS1ncmF5LTgwMCkpO1xuICAgICAgdHJhbnNpdGlvbjogdmFyKC0tbmVldG8tdWktdHJhbnNpdGlvbik7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoXG4gICAgICAgIDkwZGVnLFxuICAgICAgICByZ2JhKHZhcigtLW5lZXRvLXVpLWdyYXktMjAwKSwgMC41KSAwJSxcbiAgICAgICAgcmdiYSh2YXIoLS1uZWV0by11aS1ncmF5LTIwMCksIDEpIDI1JVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAmOmhvdmVyLFxuICAgICY6YWN0aXZlIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYih2YXIoLS1uZWV0by11aS1ncmF5LTIwMCkpO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuXG4gICAgICAubmVldG8tZmlsdGVycy1iYXJfX2Jsb2NrLWNsb3NlIHtcbiAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgY29sb3I6IHJnYih2YXIoLS1uZWV0by11aS1ibGFjaykpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1uZWV0by11aS1yb3VuZGVkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmOmZvY3VzIHtcbiAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggcmdiYSh2YXIoLS1uZWV0by11aS1ncmF5LTgwMCksIDE1JSk7XG4gICAgfVxuICB9XG5cbiAgJi0tc2VwYXJhdG9yIHtcbiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIHJnYih2YXIoLS1uZWV0by11aS1ncmF5LTQwMCkpO1xuICAgIG1hcmdpbjogMTJweCA4cHg7XG4gICAgYWxpZ24tc2VsZjogc3RyZXRjaDtcbiAgfVxufVxuIiwiLm5lZXRvLWZpbHRlcnMtYmFyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC13cmFwOiB3cmFwO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuLm5lZXRvLWZpbHRlcnMtYmFyX19ibG9jayB7XG4gIHBhZGRpbmc6IDRweCA4cHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZ2FwOiA0cHg7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLW5lZXRvLXVpLXJvdW5kZWQpO1xuICB0cmFuc2l0aW9uOiB2YXIoLS1uZWV0by11aS10cmFuc2l0aW9uKTtcbiAgbWFyZ2luOiA0cHggMDtcbiAgbWF4LXdpZHRoOiAzODRweDtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5uZWV0by1maWx0ZXJzLWJhcl9fYmxvY2sgcDpmaXJzdC1jaGlsZCB7XG4gIGNvbG9yOiByZ2IodmFyKC0tbmVldG8tdWktZ3JheS03MDApKTtcbn1cbi5uZWV0by1maWx0ZXJzLWJhcl9fYmxvY2stY2xvc2Uge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIHBhZGRpbmc6IDhweDtcbiAgb3BhY2l0eTogMDtcbiAgY29sb3I6IHJnYih2YXIoLS1uZWV0by11aS1ncmF5LTgwMCkpO1xuICB0cmFuc2l0aW9uOiB2YXIoLS1uZWV0by11aS10cmFuc2l0aW9uKTtcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDkwZGVnLCByZ2JhKHZhcigtLW5lZXRvLXVpLWdyYXktMjAwKSwgMC41KSAwJSwgcmdiYSh2YXIoLS1uZWV0by11aS1ncmF5LTIwMCksIDEpIDI1JSk7XG59XG4ubmVldG8tZmlsdGVycy1iYXJfX2Jsb2NrOmhvdmVyLCAubmVldG8tZmlsdGVycy1iYXJfX2Jsb2NrOmFjdGl2ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYih2YXIoLS1uZWV0by11aS1ncmF5LTIwMCkpO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4ubmVldG8tZmlsdGVycy1iYXJfX2Jsb2NrOmhvdmVyIC5uZWV0by1maWx0ZXJzLWJhcl9fYmxvY2stY2xvc2UsIC5uZWV0by1maWx0ZXJzLWJhcl9fYmxvY2s6YWN0aXZlIC5uZWV0by1maWx0ZXJzLWJhcl9fYmxvY2stY2xvc2Uge1xuICBvcGFjaXR5OiAxO1xuICBjb2xvcjogcmdiKHZhcigtLW5lZXRvLXVpLWJsYWNrKSk7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLW5lZXRvLXVpLXJvdW5kZWQpO1xufVxuLm5lZXRvLWZpbHRlcnMtYmFyX19ibG9jazpmb2N1cyB7XG4gIG91dGxpbmU6IG5vbmU7XG4gIGJveC1zaGFkb3c6IDAgMCAwIDNweCByZ2JhKHZhcigtLW5lZXRvLXVpLWdyYXktODAwKSwgMTUlKTtcbn1cbi5uZWV0by1maWx0ZXJzLWJhci0tc2VwYXJhdG9yIHtcbiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCByZ2IodmFyKC0tbmVldG8tdWktZ3JheS00MDApKTtcbiAgbWFyZ2luOiAxMnB4IDhweDtcbiAgYWxpZ24tc2VsZjogc3RyZXRjaDtcbn1cblxuLm5lZXRvLWZpbHRlcnMtcGFuZS1maWx0ZXIge1xuICB3aWR0aDogMzYwcHg7XG59XG4ubmVldG8tZmlsdGVycy1wYW5lLWZpbHRlcl9fYm9keSB7XG4gIGFsaWduLWl0ZW1zOiBzdHJldGNoICFpbXBvcnRhbnQ7XG4gIGdhcDogMjBweDtcbn1cbi5uZWV0by1maWx0ZXJzLXBhbmUtZmlsdGVyX19ib2R5ID4gKiB7XG4gIGZsZXgtZ3JvdzogMCAhaW1wb3J0YW50O1xufVxuLm5lZXRvLWZpbHRlcnMtcGFuZS1maWx0ZXJfX2JvZHkgcCB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbi5uZWV0by1maWx0ZXJzLXBhbmUtZmlsdGVyX19ib2R5IC5uZWV0by1maWx0ZXJzLXBhbmUtZmlsdGVyX19pdGVtLXdyYXBwZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBnYXA6IDhweDtcbn1cbi5uZWV0by1maWx0ZXJzLXBhbmUtZmlsdGVyX19ib2R5IC5hY2NvcmRpb25faXRlbSAubmVldG8tZmlsdGVycy1wYW5lLWZpbHRlcl9faXRlbS13cmFwcGVyIHtcbiAgbWFyZ2luLXRvcDogMTZweDtcbn1cbi5uZWV0by1maWx0ZXJzLXBhbmUtZmlsdGVyX19ib2R5IC5hY2NvcmRpb25faXRlbSAubmVldG8tZmlsdGVycy1wYW5lLWZpbHRlcl9faXRlbS13cmFwcGVyOmZpcnN0LW9mLXR5cGUge1xuICBtYXJnaW4tdG9wOiAwO1xufVxuLm5lZXRvLWZpbHRlcnMtcGFuZS1maWx0ZXJfX2JvZHkgLmFjY29yZGlvbl9pdGVtOmZpcnN0LW9mLXR5cGUgLm5lZXRvLXVpLWFjY29yZGlvbl9faXRlbSB7XG4gIHBhZGRpbmctdG9wOiAwO1xufVxuLm5lZXRvLWZpbHRlcnMtcGFuZS1maWx0ZXJfX2JvZHkgLm5lZXRvLXVpLWFjY29yZGlvbl9fd3JhcHBlci0tbGFzdC1pdGVtIHtcbiAgYm9yZGVyLWJvdHRvbTogdGhpbiBzb2xpZCByZ2IodmFyKC0tbmVldG8tdWktZ3JheS0zMDApKTtcbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gIC5uZWV0by1maWx0ZXJzLXBhbmUtZmlsdGVyIHtcbiAgICB3aWR0aDogMTAwdnc7XG4gIH1cbn1cblxuLm5lZXRvLWZpbHRlcnMtcGFuZS1iYWNrZHJvcCB7XG4gIGJhY2tkcm9wLWZpbHRlcjogYmx1cigwcHgpICFpbXBvcnRhbnQ7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEodmFyKC0tbmVldG8tdWktZ3JheS03MDApLCAwLjIpO1xufSIsIi5uZWV0by1maWx0ZXJzLXBhbmUtZmlsdGVyIHtcbiAgd2lkdGg6IDM2MHB4O1xuXG4gICZfX2JvZHkge1xuICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoICFpbXBvcnRhbnQ7XG4gICAgZ2FwOiAyMHB4O1xuXG4gICAgPiAqIHtcbiAgICAgIGZsZXgtZ3JvdzogMCAhaW1wb3J0YW50O1xuICAgIH1cblxuICAgIHAge1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIH1cblxuICAgIC5uZWV0by1maWx0ZXJzLXBhbmUtZmlsdGVyX19pdGVtLXdyYXBwZXIge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBnYXA6IDhweDtcbiAgICB9XG5cbiAgICAuYWNjb3JkaW9uX2l0ZW0ge1xuICAgICAgLm5lZXRvLWZpbHRlcnMtcGFuZS1maWx0ZXJfX2l0ZW0td3JhcHBlciB7XG4gICAgICAgIG1hcmdpbi10b3A6IDE2cHg7XG5cbiAgICAgICAgJjpmaXJzdC1vZi10eXBlIHtcbiAgICAgICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAmOmZpcnN0LW9mLXR5cGUge1xuICAgICAgICAubmVldG8tdWktYWNjb3JkaW9uX19pdGVtIHtcbiAgICAgICAgICBwYWRkaW5nLXRvcDogMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAubmVldG8tdWktYWNjb3JkaW9uX193cmFwcGVyLS1sYXN0LWl0ZW0ge1xuICAgICAgYm9yZGVyLWJvdHRvbTogdGhpbiBzb2xpZCByZ2IodmFyKC0tbmVldG8tdWktZ3JheS0zMDApKTtcbiAgICB9XG4gIH1cblxuICBAaW5jbHVkZSB2aWV3cG9ydChtb2IpIHtcbiAgICB3aWR0aDogMTAwdnc7XG4gIH1cbn1cblxuLm5lZXRvLWZpbHRlcnMtcGFuZS1iYWNrZHJvcCB7XG4gIGJhY2tkcm9wLWZpbHRlcjogYmx1cigwcHgpICFpbXBvcnRhbnQ7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEodmFyKC0tbmVldG8tdWktZ3JheS03MDApLCAwLjIpO1xufVxuIiwiQG1peGluIHZpZXdwb3J0KCRtZWRpYSkge1xuICBAaWYgJG1lZGlhPT1kZXNrIHtcbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMjAwcHgpIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfSBAZWxzZSBpZiAkbWVkaWE9PXRhYi1taW4ge1xuICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDEwMjRweCkge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9IEBlbHNlIGlmICRtZWRpYT09dGFiLW9ubHkge1xuICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSBhbmQgKG1heC13aWR0aDogMTAyM3B4KSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH0gQGVsc2UgaWYgJG1lZGlhPT1tb2Ige1xuICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH0gQGVsc2UgaWYgJG1lZGlhPT14cy1tb2Ige1xuICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ3OXB4KSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH1cbn1cbiJdfQ== */";
2876
+ var css = ".neeto-filters-bar{align-items:center;display:flex;flex-wrap:wrap}.neeto-filters-bar__block{border-radius:var(--neeto-ui-rounded);display:flex;gap:4px;margin:4px 0;max-width:384px;overflow:hidden;padding:4px 8px;position:relative;transition:var(--neeto-ui-transition);white-space:nowrap}.neeto-filters-bar__block p:first-child{color:rgb(var(--neeto-ui-gray-700))}.neeto-filters-bar__block-close{background-image:linear-gradient(90deg,rgba(var(--neeto-ui-gray-200),.5) 0,rgba(var(--neeto-ui-gray-200),1) 25%);color:rgb(var(--neeto-ui-gray-800));opacity:0;padding:8px;position:absolute;right:0;top:0;transition:var(--neeto-ui-transition)}.neeto-filters-bar__block:active,.neeto-filters-bar__block:hover{background-color:rgb(var(--neeto-ui-gray-200));cursor:pointer}.neeto-filters-bar__block:active .neeto-filters-bar__block-close,.neeto-filters-bar__block:hover .neeto-filters-bar__block-close{border-radius:var(--neeto-ui-rounded);color:rgb(var(--neeto-ui-black));opacity:1}.neeto-filters-bar__block:focus{box-shadow:0 0 0 3px rgba(var(--neeto-ui-gray-800),15%);outline:none}.neeto-filters-bar--separator{align-self:stretch;border-left:1px solid rgb(var(--neeto-ui-gray-400));margin:12px 8px}.neeto-filters-pane-filter{width:360px}.neeto-filters-pane-filter__body{align-items:stretch!important;gap:20px}.neeto-filters-pane-filter__body>*{flex-grow:0!important}.neeto-filters-pane-filter__body p{text-align:center}.neeto-filters-pane-filter__body .neeto-filters-pane-filter__item-wrapper{display:flex;flex: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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFwcC9qYXZhc2NyaXB0L3NyYy9zdHlsZXNoZWV0cy9jb21wb25lbnRzL19iYXIuc2NzcyIsImFwcC9qYXZhc2NyaXB0L3NyYy9zdHlsZXNoZWV0cy9pbmRleC5zY3NzIiwiYXBwL2phdmFzY3JpcHQvc3JjL3N0eWxlc2hlZXRzL2NvbXBvbmVudHMvX2ZpbHRlcnMuc2NzcyIsImFwcC9qYXZhc2NyaXB0L3NyYy9zdHlsZXNoZWV0cy9hYnN0cmFjdHMvX21peGlucy5zY3NzIiwiYXBwL2phdmFzY3JpcHQvc3JjL3N0eWxlc2hlZXRzL2NvbXBvbmVudHMvX3NlZ21lbnRzLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUJBR0Usa0JBQUEsQ0FGQSxZQUFBLENBQ0EsY0NFRixDRENFLDBCQUtFLHFDQUFBLENBSEEsWUFBQSxDQUVBLE9BQUEsQ0FHQSxZQUFBLENBQ0EsZUFBQSxDQUVBLGVBQUEsQ0FUQSxlQUFBLENBRUEsaUJBQUEsQ0FHQSxxQ0FBQSxDQUdBLGtCQ0VKLENEQ0ksd0NBQ0UsbUNDQ04sQ0RFSSxnQ0FRRSxnSEFBQSxDQUZBLG1DQUFBLENBREEsU0FBQSxDQURBLFdBQUEsQ0FIQSxpQkFBQSxDQUVBLE9BQUEsQ0FEQSxLQUFBLENBS0EscUNDQ04sQ0RPSSxpRUFFRSw4Q0FBQSxDQUNBLGNDTk4sQ0RRTSxpSUFHRSxxQ0FBQSxDQURBLGdDQUFBLENBREEsU0NKUixDRFVJLGdDQUVFLHVEQUFBLENBREEsWUNQTixDRFlFLDhCQUdFLGtCQUFBLENBRkEsbURBQUEsQ0FDQSxlQ1RKLENDL0NBLDJCQUNFLFdEa0RGLENDaERFLGlDQUNFLDZCQUFBLENBQ0EsUURrREosQ0NoREksbUNBQ0UscUJEa0ROLENDL0NJLG1DQUNFLGlCRGlETixDQzlDSSwwRUFDRSxZQUFBLENBR0EsTUFBQSxDQUZBLHFCQUFBLENBQ0EsT0RpRE4sQ0M1Q00sMEZBRUUsTUFBQSxDQURBLGVEK0NSLENDNUNRLHdHQUNFLFlEOENWLENDMUNRLHlGQUNFLGFENENWLENDeENJLHlFQUNFLHNERDBDTixDRWxFSSxvQ0RkSiwyQkEyQ0ksV0R5Q0YsQ0FDRixDQ3RDQSw2QkFDRSx5Q0FBQSxDQUFBLGlDQUFBLENBQ0Esa0REeUNGLENHMUZBLCtCQUNFLHVEQUFBLENBQ0EsK0RINkZGIiwic291cmNlc0NvbnRlbnQiOlsiLm5lZXRvLWZpbHRlcnMtYmFyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC13cmFwOiB3cmFwO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuXG4gICZfX2Jsb2NrIHtcbiAgICBwYWRkaW5nOiA0cHggOHB4O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGdhcDogNHB4O1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW5lZXRvLXVpLXJvdW5kZWQpO1xuICAgIHRyYW5zaXRpb246IHZhcigtLW5lZXRvLXVpLXRyYW5zaXRpb24pO1xuICAgIG1hcmdpbjogNHB4IDA7XG4gICAgbWF4LXdpZHRoOiAzODRweDtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgICBwOmZpcnN0LWNoaWxkIHtcbiAgICAgIGNvbG9yOiByZ2IodmFyKC0tbmVldG8tdWktZ3JheS03MDApKTtcbiAgICB9XG5cbiAgICAmLWNsb3NlIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMDtcbiAgICAgIHJpZ2h0OiAwO1xuICAgICAgcGFkZGluZzogOHB4O1xuICAgICAgb3BhY2l0eTogMDtcbiAgICAgIGNvbG9yOiByZ2IodmFyKC0tbmVldG8tdWktZ3JheS04MDApKTtcbiAgICAgIHRyYW5zaXRpb246IHZhcigtLW5lZXRvLXVpLXRyYW5zaXRpb24pO1xuICAgICAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KFxuICAgICAgICA5MGRlZyxcbiAgICAgICAgcmdiYSh2YXIoLS1uZWV0by11aS1ncmF5LTIwMCksIDAuNSkgMCUsXG4gICAgICAgIHJnYmEodmFyKC0tbmVldG8tdWktZ3JheS0yMDApLCAxKSAyNSVcbiAgICAgICk7XG4gICAgfVxuXG4gICAgJjpob3ZlcixcbiAgICAmOmFjdGl2ZSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IodmFyKC0tbmVldG8tdWktZ3JheS0yMDApKTtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcblxuICAgICAgLm5lZXRvLWZpbHRlcnMtYmFyX19ibG9jay1jbG9zZSB7XG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgIGNvbG9yOiByZ2IodmFyKC0tbmVldG8tdWktYmxhY2spKTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbmVldG8tdWktcm91bmRlZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJjpmb2N1cyB7XG4gICAgICBvdXRsaW5lOiBub25lO1xuICAgICAgYm94LXNoYWRvdzogMCAwIDAgM3B4IHJnYmEodmFyKC0tbmVldG8tdWktZ3JheS04MDApLCAxNSUpO1xuICAgIH1cbiAgfVxuXG4gICYtLXNlcGFyYXRvciB7XG4gICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCByZ2IodmFyKC0tbmVldG8tdWktZ3JheS00MDApKTtcbiAgICBtYXJnaW46IDEycHggOHB4O1xuICAgIGFsaWduLXNlbGY6IHN0cmV0Y2g7XG4gIH1cbn1cbiIsIi5uZWV0by1maWx0ZXJzLWJhciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogd3JhcDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cbi5uZWV0by1maWx0ZXJzLWJhcl9fYmxvY2sge1xuICBwYWRkaW5nOiA0cHggOHB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGdhcDogNHB4O1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1uZWV0by11aS1yb3VuZGVkKTtcbiAgdHJhbnNpdGlvbjogdmFyKC0tbmVldG8tdWktdHJhbnNpdGlvbik7XG4gIG1hcmdpbjogNHB4IDA7XG4gIG1heC13aWR0aDogMzg0cHg7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ubmVldG8tZmlsdGVycy1iYXJfX2Jsb2NrIHA6Zmlyc3QtY2hpbGQge1xuICBjb2xvcjogcmdiKHZhcigtLW5lZXRvLXVpLWdyYXktNzAwKSk7XG59XG4ubmVldG8tZmlsdGVycy1iYXJfX2Jsb2NrLWNsb3NlIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICBwYWRkaW5nOiA4cHg7XG4gIG9wYWNpdHk6IDA7XG4gIGNvbG9yOiByZ2IodmFyKC0tbmVldG8tdWktZ3JheS04MDApKTtcbiAgdHJhbnNpdGlvbjogdmFyKC0tbmVldG8tdWktdHJhbnNpdGlvbik7XG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgcmdiYSh2YXIoLS1uZWV0by11aS1ncmF5LTIwMCksIDAuNSkgMCUsIHJnYmEodmFyKC0tbmVldG8tdWktZ3JheS0yMDApLCAxKSAyNSUpO1xufVxuLm5lZXRvLWZpbHRlcnMtYmFyX19ibG9jazpob3ZlciwgLm5lZXRvLWZpbHRlcnMtYmFyX19ibG9jazphY3RpdmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IodmFyKC0tbmVldG8tdWktZ3JheS0yMDApKTtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLm5lZXRvLWZpbHRlcnMtYmFyX19ibG9jazpob3ZlciAubmVldG8tZmlsdGVycy1iYXJfX2Jsb2NrLWNsb3NlLCAubmVldG8tZmlsdGVycy1iYXJfX2Jsb2NrOmFjdGl2ZSAubmVldG8tZmlsdGVycy1iYXJfX2Jsb2NrLWNsb3NlIHtcbiAgb3BhY2l0eTogMTtcbiAgY29sb3I6IHJnYih2YXIoLS1uZWV0by11aS1ibGFjaykpO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1uZWV0by11aS1yb3VuZGVkKTtcbn1cbi5uZWV0by1maWx0ZXJzLWJhcl9fYmxvY2s6Zm9jdXMge1xuICBvdXRsaW5lOiBub25lO1xuICBib3gtc2hhZG93OiAwIDAgMCAzcHggcmdiYSh2YXIoLS1uZWV0by11aS1ncmF5LTgwMCksIDE1JSk7XG59XG4ubmVldG8tZmlsdGVycy1iYXItLXNlcGFyYXRvciB7XG4gIGJvcmRlci1sZWZ0OiAxcHggc29saWQgcmdiKHZhcigtLW5lZXRvLXVpLWdyYXktNDAwKSk7XG4gIG1hcmdpbjogMTJweCA4cHg7XG4gIGFsaWduLXNlbGY6IHN0cmV0Y2g7XG59XG5cbi5uZWV0by1maWx0ZXJzLXBhbmUtZmlsdGVyIHtcbiAgd2lkdGg6IDM2MHB4O1xufVxuLm5lZXRvLWZpbHRlcnMtcGFuZS1maWx0ZXJfX2JvZHkge1xuICBhbGlnbi1pdGVtczogc3RyZXRjaCAhaW1wb3J0YW50O1xuICBnYXA6IDIwcHg7XG59XG4ubmVldG8tZmlsdGVycy1wYW5lLWZpbHRlcl9fYm9keSA+ICoge1xuICBmbGV4LWdyb3c6IDAgIWltcG9ydGFudDtcbn1cbi5uZWV0by1maWx0ZXJzLXBhbmUtZmlsdGVyX19ib2R5IHAge1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4ubmVldG8tZmlsdGVycy1wYW5lLWZpbHRlcl9fYm9keSAubmVldG8tZmlsdGVycy1wYW5lLWZpbHRlcl9faXRlbS13cmFwcGVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZ2FwOiA4cHg7XG4gIGZsZXg6IDE7XG59XG4ubmVldG8tZmlsdGVycy1wYW5lLWZpbHRlcl9fYm9keSAuYWNjb3JkaW9uX2l0ZW0gLm5lZXRvLWZpbHRlcnMtcGFuZS1maWx0ZXJfX2l0ZW0td3JhcHBlciB7XG4gIG1hcmdpbi10b3A6IDE2cHg7XG4gIGZsZXg6IDE7XG59XG4ubmVldG8tZmlsdGVycy1wYW5lLWZpbHRlcl9fYm9keSAuYWNjb3JkaW9uX2l0ZW0gLm5lZXRvLWZpbHRlcnMtcGFuZS1maWx0ZXJfX2l0ZW0td3JhcHBlcjpmaXJzdC1vZi10eXBlIHtcbiAgbWFyZ2luLXRvcDogMDtcbn1cbi5uZWV0by1maWx0ZXJzLXBhbmUtZmlsdGVyX19ib2R5IC5hY2NvcmRpb25faXRlbTpmaXJzdC1vZi10eXBlIC5uZWV0by11aS1hY2NvcmRpb25fX2l0ZW0ge1xuICBwYWRkaW5nLXRvcDogMDtcbn1cbi5uZWV0by1maWx0ZXJzLXBhbmUtZmlsdGVyX19ib2R5IC5uZWV0by11aS1hY2NvcmRpb25fX3dyYXBwZXItLWxhc3QtaXRlbSB7XG4gIGJvcmRlci1ib3R0b206IHRoaW4gc29saWQgcmdiKHZhcigtLW5lZXRvLXVpLWdyYXktMzAwKSk7XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjdweCkge1xuICAubmVldG8tZmlsdGVycy1wYW5lLWZpbHRlciB7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICB9XG59XG5cbi5uZWV0by1maWx0ZXJzLXBhbmUtYmFja2Ryb3Age1xuICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMHB4KSAhaW1wb3J0YW50O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKHZhcigtLW5lZXRvLXVpLWdyYXktNzAwKSwgMC4yKTtcbn1cblxuLm5lZXRvLWZpbHRlcnMtc2VnbWVudC0tYWN0aXZlIHtcbiAgYm9yZGVyLWNvbG9yOiByZ2IodmFyKC0tbmVldG8tdWktcHJpbWFyeS01MDApKSAhaW1wb3J0YW50O1xuICBib3gtc2hhZG93OiAwIDAgMCAxcHggcmdiKHZhcigtLW5lZXRvLXVpLXByaW1hcnktNTAwKSkgIWltcG9ydGFudDtcbn0iLCIubmVldG8tZmlsdGVycy1wYW5lLWZpbHRlciB7XG4gIHdpZHRoOiAzNjBweDtcblxuICAmX19ib2R5IHtcbiAgICBhbGlnbi1pdGVtczogc3RyZXRjaCAhaW1wb3J0YW50O1xuICAgIGdhcDogMjBweDtcblxuICAgID4gKiB7XG4gICAgICBmbGV4LWdyb3c6IDAgIWltcG9ydGFudDtcbiAgICB9XG5cbiAgICBwIHtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB9XG5cbiAgICAubmVldG8tZmlsdGVycy1wYW5lLWZpbHRlcl9faXRlbS13cmFwcGVyIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgZ2FwOiA4cHg7XG4gICAgICBmbGV4OiAxO1xuICAgIH1cblxuICAgIC5hY2NvcmRpb25faXRlbSB7XG4gICAgICAubmVldG8tZmlsdGVycy1wYW5lLWZpbHRlcl9faXRlbS13cmFwcGVyIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMTZweDtcbiAgICAgICAgZmxleDogMTtcblxuICAgICAgICAmOmZpcnN0LW9mLXR5cGUge1xuICAgICAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgICY6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgICAgIC5uZWV0by11aS1hY2NvcmRpb25fX2l0ZW0ge1xuICAgICAgICAgIHBhZGRpbmctdG9wOiAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC5uZWV0by11aS1hY2NvcmRpb25fX3dyYXBwZXItLWxhc3QtaXRlbSB7XG4gICAgICBib3JkZXItYm90dG9tOiB0aGluIHNvbGlkIHJnYih2YXIoLS1uZWV0by11aS1ncmF5LTMwMCkpO1xuICAgIH1cbiAgfVxuXG4gIEBpbmNsdWRlIHZpZXdwb3J0KG1vYikge1xuICAgIHdpZHRoOiAxMDB2dztcbiAgfVxufVxuXG4ubmVldG8tZmlsdGVycy1wYW5lLWJhY2tkcm9wIHtcbiAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDBweCkgIWltcG9ydGFudDtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSh2YXIoLS1uZWV0by11aS1ncmF5LTcwMCksIDAuMik7XG59XG4iLCJAbWl4aW4gdmlld3BvcnQoJG1lZGlhKSB7XG4gIEBpZiAkbWVkaWE9PWRlc2sge1xuICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEyMDBweCkge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9IEBlbHNlIGlmICRtZWRpYT09dGFiLW1pbiB7XG4gICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogMTAyNHB4KSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH0gQGVsc2UgaWYgJG1lZGlhPT10YWItb25seSB7XG4gICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIGFuZCAobWF4LXdpZHRoOiAxMDIzcHgpIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfSBAZWxzZSBpZiAkbWVkaWE9PW1vYiB7XG4gICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfSBAZWxzZSBpZiAkbWVkaWE9PXhzLW1vYiB7XG4gICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDc5cHgpIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfVxufVxuIiwiLm5lZXRvLWZpbHRlcnMtc2VnbWVudC0tYWN0aXZlIHtcbiAgYm9yZGVyLWNvbG9yOiByZ2IodmFyKC0tbmVldG8tdWktcHJpbWFyeS01MDApKSAhaW1wb3J0YW50O1xuICBib3gtc2hhZG93OiAwIDAgMCAxcHggcmdiKHZhcigtLW5lZXRvLXVpLXByaW1hcnktNTAwKSkgIWltcG9ydGFudDtcbn1cbiJdfQ== */";
2562
2877
  n(css,{});
2563
2878
 
2564
2879
  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; }
@@ -2614,11 +2929,19 @@ var Filters = reactUtils.withT(function (_ref) {
2614
2929
  }, paneProps)), children));
2615
2930
  });
2616
2931
 
2617
- var DeleteAlert = function DeleteAlert(_ref) {
2932
+ var ITEMS_MAX_COUNT = 20;
2933
+ var SEGMENT_ACTIONS = {
2934
+ EDIT: "edit",
2935
+ DELETE: "delete"
2936
+ };
2937
+
2938
+ var Delete = function Delete(_ref) {
2618
2939
  var isOpen = _ref.isOpen,
2619
2940
  onClose = _ref.onClose,
2620
- segment = _ref.segment,
2621
- columns = _ref.columns;
2941
+ _ref$segment = _ref.segment,
2942
+ segment = _ref$segment === void 0 ? {} : _ref$segment,
2943
+ _ref$columns = _ref.columns,
2944
+ columns = _ref$columns === void 0 ? [] : _ref$columns;
2622
2945
  var _useTranslation = reactI18next.useTranslation(),
2623
2946
  t = _useTranslation.t;
2624
2947
  var history = reactRouterDom.useHistory();
@@ -2659,162 +2982,30 @@ var DeleteAlert = function DeleteAlert(_ref) {
2659
2982
  });
2660
2983
  };
2661
2984
 
2662
- var Card = function Card(_ref) {
2663
- var segment = _ref.segment,
2664
- columns = _ref.columns,
2665
- defaultSegmentName = _ref.defaultSegmentName;
2666
- var _useState = React.useState(false),
2667
- _useState2 = _slicedToArray(_useState, 2),
2668
- isEditing = _useState2[0],
2669
- setIsEditing = _useState2[1];
2670
- var _useState3 = React.useState(false),
2671
- _useState4 = _slicedToArray(_useState3, 2),
2672
- isDeleteAlertOpen = _useState4[0],
2673
- setIsDeleteAlertOpen = _useState4[1];
2674
- var _useTranslation = reactI18next.useTranslation(),
2675
- t = _useTranslation.t;
2676
- var Menu = neetoui.Dropdown.Menu,
2677
- MenuItem = neetoui.Dropdown.MenuItem;
2678
- var _useUpdateSegment = useUpdateSegment(),
2679
- updateSegment = _useUpdateSegment.mutate;
2680
- var handleRename = function handleRename(values) {
2681
- return updateSegment({
2682
- id: segment.id,
2683
- payload: values
2684
- }, {
2685
- onSuccess: function onSuccess() {
2686
- return setIsEditing(false);
2687
- }
2688
- });
2689
- };
2690
- return /*#__PURE__*/React__default["default"].createElement(formik.Form, {
2691
- className: "neeto-ui-rounded-md flex w-full items-center justify-between border p-2",
2692
- formProps: {
2693
- noValidate: true
2694
- },
2695
- formikProps: {
2696
- initialValues: segment,
2697
- validateOnChange: true,
2698
- validateOnBlur: true,
2699
- validationSchema: buildSegmentsValidationSchema(defaultSegmentName),
2700
- onSubmit: handleRename,
2701
- enableReinitialize: true
2702
- }
2703
- }, function (_ref2) {
2704
- var resetForm = _ref2.resetForm;
2705
- return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, isEditing ? /*#__PURE__*/React__default["default"].createElement(InlineInput.FormikInlineInput, {
2706
- autoFocus: true,
2707
- nakedInput: true,
2708
- handleCancel: function handleCancel() {
2709
- return setIsEditing(false);
2710
- },
2711
- name: "name",
2712
- placeholder: t("neetoFilters.segments.name")
2713
- }) : /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
2714
- style: "body2"
2715
- }, segment.name), /*#__PURE__*/React__default["default"].createElement(neetoui.Dropdown, {
2716
- buttonStyle: "text",
2717
- disabled: neetoCist.isNotPresent(segment.id),
2718
- icon: neetoIcons.MenuHorizontal,
2719
- size: "small"
2720
- }, /*#__PURE__*/React__default["default"].createElement(Menu, null, /*#__PURE__*/React__default["default"].createElement(MenuItem.Button, {
2721
- onClick: function onClick() {
2722
- setIsEditing(true);
2723
- resetForm();
2724
- }
2725
- }, t("neetoFilters.common.rename")), /*#__PURE__*/React__default["default"].createElement(MenuItem.Button, {
2726
- onClick: function onClick() {
2727
- return setIsDeleteAlertOpen(true);
2728
- }
2729
- }, t("neetoFilters.common.delete"))))), /*#__PURE__*/React__default["default"].createElement(DeleteAlert, {
2730
- columns: columns,
2731
- segment: segment,
2732
- isOpen: isDeleteAlertOpen,
2733
- onClose: function onClose() {
2734
- return setIsDeleteAlertOpen(false);
2735
- }
2736
- }));
2737
- });
2738
- };
2739
- var Card$1 = /*#__PURE__*/React__default["default"].memo(Card);
2740
-
2741
- var ManagePane = function ManagePane(_ref) {
2742
- var isOpen = _ref.isOpen,
2743
- onClose = _ref.onClose,
2744
- entity = _ref.entity,
2745
- columns = _ref.columns,
2746
- defaultSegmentName = _ref.defaultSegmentName;
2747
- var _useState = React.useState(""),
2748
- _useState2 = _slicedToArray(_useState, 2),
2749
- searchTerm = _useState2[0],
2750
- setSearchTerm = _useState2[1];
2751
- var inputRef = React.useRef(null);
2752
- var _useTranslation = reactI18next.useTranslation(),
2753
- t = _useTranslation.t;
2754
- var debouncedSearchTerm = reactUtils.useDebounce(searchTerm);
2755
- var _useFetchSegments = useFetchSegments({
2756
- entity: entity,
2757
- searchTerm: debouncedSearchTerm
2758
- }),
2759
- _useFetchSegments$dat = _useFetchSegments.data,
2760
- segments = _useFetchSegments$dat === void 0 ? [] : _useFetchSegments$dat,
2761
- isLoading = _useFetchSegments.isLoading;
2762
- return /*#__PURE__*/React__default["default"].createElement(neetoui.Pane, {
2763
- isOpen: isOpen,
2764
- onClose: onClose,
2765
- initialFocusRef: inputRef
2766
- }, /*#__PURE__*/React__default["default"].createElement(neetoui.Pane.Header, null, /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
2767
- style: "h2"
2768
- }, t("neetoFilters.segments.manageSegments"))), /*#__PURE__*/React__default["default"].createElement(neetoui.Pane.Body, {
2769
- className: "max-h-full gap-4 overflow-scroll"
2770
- }, /*#__PURE__*/React__default["default"].createElement(Search__default["default"], {
2771
- className: "w-full flex-grow-0",
2772
- placeholder: t("neetoFilters.segments.searchSegments"),
2773
- ref: inputRef,
2774
- onSearch: function onSearch(value) {
2775
- return setSearchTerm(value);
2776
- }
2777
- }), isLoading ? /*#__PURE__*/React__default["default"].createElement(neetoui.Spinner, {
2778
- className: "mx-auto mt-4"
2779
- }) : /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(Card$1, {
2780
- segment: {
2781
- name: defaultSegmentName
2782
- }
2783
- }), ramda.isEmpty(segments) ? /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
2784
- className: "mx-auto",
2785
- style: "body2"
2786
- }, t("neetoFilters.segments.noSegmentsFound")) : segments.map(function (segment) {
2787
- return /*#__PURE__*/React__default["default"].createElement(Card$1, {
2788
- columns: columns,
2789
- defaultSegmentName: defaultSegmentName,
2790
- segment: segment,
2791
- key: segment.id
2792
- });
2793
- }))));
2794
- };
2795
-
2796
- var ITEMS_MAX_COUNT = 20;
2797
-
2798
- var MenuBlocks = function MenuBlocks(_ref) {
2985
+ var useSegments = function useSegments(_ref) {
2799
2986
  var entity = _ref.entity,
2800
2987
  columns = _ref.columns,
2801
- defaultSegmentName = _ref.defaultSegmentName;
2802
- var _useState = React.useState(false),
2803
- _useState2 = _slicedToArray(_useState, 2),
2804
- showAll = _useState2[0],
2805
- setShowAll = _useState2[1];
2806
- var history = reactRouterDom.useHistory();
2988
+ appliedFilters = _ref.appliedFilters,
2989
+ childrenKeys = _ref.childrenKeys;
2807
2990
  var _useTranslation = reactI18next.useTranslation(),
2808
2991
  t = _useTranslation.t;
2809
- var _getQueryParams = utils.getQueryParams(),
2810
- segmentId = _getQueryParams.segmentId;
2811
- var appliedFilters = buildFiltersFromURL(columns);
2992
+ var history = reactRouterDom.useHistory();
2812
2993
  var _useFetchSegments = useFetchSegments({
2813
2994
  entity: entity
2814
2995
  }),
2815
2996
  _useFetchSegments$dat = _useFetchSegments.data,
2816
2997
  segments = _useFetchSegments$dat === void 0 ? [] : _useFetchSegments$dat,
2817
2998
  isLoading = _useFetchSegments.isLoading;
2999
+ var _useUpdateSegment = useUpdateSegment(),
3000
+ updateSegment = _useUpdateSegment.mutate,
3001
+ isUpdating = _useUpdateSegment.isLoading;
3002
+ var _useState = React.useState({
3003
+ action: "",
3004
+ segment: undefined
3005
+ }),
3006
+ _useState2 = _slicedToArray(_useState, 2),
3007
+ confirmAction = _useState2[0],
3008
+ setConfirmAction = _useState2[1];
2818
3009
  var clearAppliedFilters = function clearAppliedFilters() {
2819
3010
  var _filters$, _filters$2;
2820
3011
  var filters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : appliedFilters;
@@ -2829,7 +3020,7 @@ var MenuBlocks = function MenuBlocks(_ref) {
2829
3020
  })
2830
3021
  });
2831
3022
  };
2832
- var applySelectedSegment = function applySelectedSegment(_ref2) {
3023
+ var handleSelectSegment = function handleSelectSegment(_ref2) {
2833
3024
  var _filters$3;
2834
3025
  var id = _ref2.id,
2835
3026
  filters = _ref2.filters;
@@ -2841,14 +3032,6 @@ var MenuBlocks = function MenuBlocks(_ref) {
2841
3032
  })
2842
3033
  });
2843
3034
  };
2844
- var handleSelectSegment = function handleSelectSegment(_ref3) {
2845
- var id = _ref3.id,
2846
- filters = _ref3.filters;
2847
- return ramda.equals(id, segmentId) ? clearAppliedFilters(filters) : applySelectedSegment({
2848
- id: id,
2849
- filters: filters
2850
- });
2851
- };
2852
3035
  if (isLoading) {
2853
3036
  return /*#__PURE__*/React__default["default"].createElement(neetoui.Spinner, null);
2854
3037
  }
@@ -2857,6 +3040,136 @@ var MenuBlocks = function MenuBlocks(_ref) {
2857
3040
  style: "body2"
2858
3041
  }, t("neetoFilters.segments.noSegmentsFound"));
2859
3042
  }
3043
+ var handleUpdate = function handleUpdate(_ref3, _ref4) {
3044
+ var name = _ref3.name;
3045
+ var setFieldError = _ref4.setFieldError;
3046
+ var filtersPayload = buildSegmentsPayload(filters, childrenKeys);
3047
+ updateSegment({
3048
+ id: confirmAction.segment.id,
3049
+ payload: {
3050
+ name: name,
3051
+ filters: filtersPayload
3052
+ },
3053
+ showToastr: false
3054
+ }, {
3055
+ onSuccess: function onSuccess() {
3056
+ utils.showThumbsUpToastr();
3057
+ setConfirmAction({
3058
+ action: "",
3059
+ segment: undefined
3060
+ });
3061
+ },
3062
+ onError: function onError(error) {
3063
+ return setFieldError("name", error.response.data.error);
3064
+ }
3065
+ });
3066
+ };
3067
+ var filters = buildFiltersFromSearchParams(columns);
3068
+ return {
3069
+ segments: segments,
3070
+ clearAppliedFilters: clearAppliedFilters,
3071
+ handleSelectSegment: handleSelectSegment,
3072
+ setConfirmAction: setConfirmAction,
3073
+ isUpdating: isUpdating,
3074
+ handleUpdate: handleUpdate,
3075
+ filters: filters,
3076
+ onClose: function onClose() {
3077
+ return setConfirmAction({
3078
+ action: "",
3079
+ segment: undefined
3080
+ });
3081
+ },
3082
+ selectedSegment: confirmAction.segment,
3083
+ isDeleteAlertOpen: confirmAction.action === SEGMENT_ACTIONS.DELETE,
3084
+ isEditPaneOpen: confirmAction.action === SEGMENT_ACTIONS.EDIT
3085
+ };
3086
+ };
3087
+
3088
+ var Segment = function Segment(_ref) {
3089
+ var id = _ref.id,
3090
+ isActive = _ref.isActive,
3091
+ label = _ref.label,
3092
+ onClick = _ref.onClick,
3093
+ _ref$shouldShowDropdo = _ref.shouldShowDropdown,
3094
+ shouldShowDropdown = _ref$shouldShowDropdo === void 0 ? false : _ref$shouldShowDropdo,
3095
+ segments = _ref.segments,
3096
+ setConfirmAction = _ref.setConfirmAction;
3097
+ var _useTranslation = reactI18next.useTranslation(),
3098
+ t = _useTranslation.t;
3099
+ var menuItems = [{
3100
+ key: "edit",
3101
+ label: t("neetoFilters.common.edit"),
3102
+ onClick: function onClick() {
3103
+ return setConfirmAction({
3104
+ action: SEGMENT_ACTIONS.EDIT,
3105
+ segment: neetoCist.findById(id, segments)
3106
+ });
3107
+ }
3108
+ }, {
3109
+ key: "delete",
3110
+ label: t("neetoFilters.common.delete"),
3111
+ onClick: function onClick() {
3112
+ return setConfirmAction({
3113
+ action: SEGMENT_ACTIONS.DELETE,
3114
+ segment: neetoCist.findById(id, segments)
3115
+ });
3116
+ }
3117
+ }];
3118
+ return /*#__PURE__*/React__default["default"].createElement("div", {
3119
+ onClick: onClick,
3120
+ 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", {
3121
+ "neeto-filters-segment--active": isActive
3122
+ })
3123
+ }, /*#__PURE__*/React__default["default"].createElement("div", {
3124
+ className: "flex flex-grow items-center gap-2 overflow-hidden",
3125
+ "data-cy": "new-element-field"
3126
+ }, /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
3127
+ className: "truncate leading-snug",
3128
+ "data-cy": neetoCist.hyphenate(label),
3129
+ style: "body2"
3130
+ }, label)), shouldShowDropdown && /*#__PURE__*/React__default["default"].createElement(MoreDropdown__default["default"], {
3131
+ menuItems: menuItems,
3132
+ dropdownButtonProps: {
3133
+ className: "min-h-0 flex-shrink-0",
3134
+ "data-cy": "".concat(neetoCist.hyphenate(label), "-more-dropdown")
3135
+ }
3136
+ }));
3137
+ };
3138
+
3139
+ var MenuBlocks = function MenuBlocks(_ref) {
3140
+ var entity = _ref.entity,
3141
+ columns = _ref.columns,
3142
+ defaultSegmentName = _ref.defaultSegmentName,
3143
+ childrenKeys = _ref.childrenKeys,
3144
+ customFilters = _ref.customFilters;
3145
+ var _useTranslation = reactI18next.useTranslation(),
3146
+ t = _useTranslation.t;
3147
+ var segmentFormInitialRef = React.useRef(null);
3148
+ var _useState = React.useState(false),
3149
+ _useState2 = _slicedToArray(_useState, 2),
3150
+ showAll = _useState2[0],
3151
+ setShowAll = _useState2[1];
3152
+ var _getQueryParams = utils.getQueryParams(),
3153
+ segmentId = _getQueryParams.segmentId;
3154
+ var appliedFilters = buildFiltersFromURL(columns);
3155
+ var _useSegments = useSegments({
3156
+ entity: entity,
3157
+ columns: columns,
3158
+ appliedFilters: appliedFilters,
3159
+ childrenKeys: childrenKeys
3160
+ }),
3161
+ _useSegments$segments = _useSegments.segments,
3162
+ segments = _useSegments$segments === void 0 ? [] : _useSegments$segments,
3163
+ clearAppliedFilters = _useSegments.clearAppliedFilters,
3164
+ handleSelectSegment = _useSegments.handleSelectSegment,
3165
+ onClose = _useSegments.onClose,
3166
+ setConfirmAction = _useSegments.setConfirmAction,
3167
+ selectedSegment = _useSegments.selectedSegment,
3168
+ isDeleteAlertOpen = _useSegments.isDeleteAlertOpen,
3169
+ isEditPaneOpen = _useSegments.isEditPaneOpen,
3170
+ isUpdating = _useSegments.isUpdating,
3171
+ handleUpdate = _useSegments.handleUpdate,
3172
+ filters = _useSegments.filters;
2860
3173
  return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, segments.length > ITEMS_MAX_COUNT && /*#__PURE__*/React__default["default"].createElement(neetoui.Button, {
2861
3174
  icon: neetoIcons.Down,
2862
3175
  style: "link",
@@ -2868,71 +3181,67 @@ var MenuBlocks = function MenuBlocks(_ref) {
2868
3181
  return !open;
2869
3182
  });
2870
3183
  }
2871
- }), /*#__PURE__*/React__default["default"].createElement(MenuBar__default["default"].Block, {
2872
- active: ramda.isEmpty(appliedFilters),
3184
+ }), /*#__PURE__*/React__default["default"].createElement(Segment, {
3185
+ isActive: ramda.isEmpty(appliedFilters),
2873
3186
  label: defaultSegmentName,
2874
3187
  onClick: clearAppliedFilters
2875
3188
  }), segments.slice(0, showAll ? segments.length : ITEMS_MAX_COUNT).map(function (segment) {
2876
- return /*#__PURE__*/React__default["default"].createElement(MenuBar__default["default"].Block, {
2877
- active: segment.id === segmentId,
2878
- count: segment.count,
3189
+ return /*#__PURE__*/React__default["default"].createElement(Segment, {
3190
+ segments: segments,
3191
+ setConfirmAction: setConfirmAction,
3192
+ shouldShowDropdown: true,
3193
+ id: segment.id,
3194
+ isActive: segment.id === segmentId,
2879
3195
  key: segment.id,
2880
3196
  label: segment.name,
2881
3197
  onClick: function onClick() {
2882
3198
  return handleSelectSegment(segment);
2883
3199
  }
2884
3200
  });
3201
+ }), /*#__PURE__*/React__default["default"].createElement(SegmentForm, {
3202
+ childrenKeys: childrenKeys,
3203
+ columns: columns,
3204
+ customFilters: customFilters,
3205
+ defaultSegmentName: defaultSegmentName,
3206
+ filters: filters,
3207
+ onClose: onClose,
3208
+ segmentFormInitialRef: segmentFormInitialRef,
3209
+ isEdit: true,
3210
+ handleSubmit: handleUpdate,
3211
+ initialValues: selectedSegment,
3212
+ isOpen: isEditPaneOpen,
3213
+ isSubmitting: isUpdating
3214
+ }), /*#__PURE__*/React__default["default"].createElement(Delete, {
3215
+ columns: columns,
3216
+ onClose: onClose,
3217
+ isOpen: isDeleteAlertOpen,
3218
+ segment: selectedSegment
2885
3219
  }));
2886
3220
  };
2887
3221
  var MenuBlocks$1 = /*#__PURE__*/React__default["default"].memo(MenuBlocks);
2888
3222
 
2889
- var Segments = function Segments(_ref) {
2890
- var entity = _ref.entity,
3223
+ var Segments = reactUtils.withT(function (_ref) {
3224
+ var t = _ref.t,
3225
+ entity = _ref.entity,
2891
3226
  columns = _ref.columns,
2892
- _ref$setIsFilterPaneO = _ref.setIsFilterPaneOpen,
2893
- setIsFilterPaneOpen = _ref$setIsFilterPaneO === void 0 ? neetoCist.noop : _ref$setIsFilterPaneO,
2894
3227
  _ref$defaultSegmentNa = _ref.defaultSegmentName,
2895
- defaultSegmentName = _ref$defaultSegmentNa === void 0 ? i18next.t("neetoFilters.common.allResults") : _ref$defaultSegmentNa;
2896
- return function () {
2897
- var _useState = React.useState(false),
2898
- _useState2 = _slicedToArray(_useState, 2),
2899
- isSegmentsPaneOpen = _useState2[0],
2900
- setIsSegmentsPaneOpen = _useState2[1];
2901
- var _useTranslation = reactI18next.useTranslation(),
2902
- t = _useTranslation.t;
2903
- var iconProps = [{
2904
- icon: neetoIcons.Settings,
2905
- onClick: function onClick() {
2906
- setIsFilterPaneOpen(false);
2907
- setIsSegmentsPaneOpen(true);
2908
- },
2909
- tooltipProps: {
2910
- content: t("neetoFilters.segments.manageSegments"),
2911
- position: "top"
2912
- }
2913
- }];
2914
- return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(MenuBar__default["default"].SubTitle, {
2915
- iconProps: iconProps
2916
- }, /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
2917
- component: "h4",
2918
- style: "h5",
2919
- textTransform: "uppercase",
2920
- weight: "bold"
2921
- }, t("neetoFilters.common.segments"))), /*#__PURE__*/React__default["default"].createElement(MenuBlocks$1, {
2922
- columns: columns,
2923
- defaultSegmentName: defaultSegmentName,
2924
- entity: entity
2925
- }), /*#__PURE__*/React__default["default"].createElement(ManagePane, {
2926
- columns: columns,
2927
- defaultSegmentName: defaultSegmentName,
2928
- entity: entity,
2929
- isOpen: isSegmentsPaneOpen,
2930
- onClose: function onClose() {
2931
- return setIsSegmentsPaneOpen(false);
2932
- }
2933
- }));
2934
- }();
2935
- };
3228
+ defaultSegmentName = _ref$defaultSegmentNa === void 0 ? t("neetoFilters.common.allResults") : _ref$defaultSegmentNa,
3229
+ customFilters = _ref.customFilters,
3230
+ _ref$childrenKeys = _ref.childrenKeys,
3231
+ childrenKeys = _ref$childrenKeys === void 0 ? [] : _ref$childrenKeys;
3232
+ 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, {
3233
+ component: "h4",
3234
+ style: "h5",
3235
+ textTransform: "uppercase",
3236
+ weight: "bold"
3237
+ }, t("neetoFilters.common.segments"))), /*#__PURE__*/React__default["default"].createElement(MenuBlocks$1, {
3238
+ childrenKeys: childrenKeys,
3239
+ columns: columns,
3240
+ customFilters: customFilters,
3241
+ defaultSegmentName: defaultSegmentName,
3242
+ entity: entity
3243
+ }));
3244
+ });
2936
3245
  var index = /*#__PURE__*/React__default["default"].memo(Segments);
2937
3246
 
2938
3247
  exports.Bar = Bar;