@bigbinary/neeto-filters-frontend 3.2.0-beta.0 → 3.2.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.
@@ -0,0 +1,4173 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var React = require('react');
6
+ var classnames = require('classnames');
7
+ var i18next = require('i18next');
8
+ var neetoCist = require('@bigbinary/neeto-cist');
9
+ var reactUtils = require('@bigbinary/neeto-commons-frontend/react-utils');
10
+ var ramda = require('ramda');
11
+ var reactQuery = require('react-query');
12
+ var neetoIcons = require('@bigbinary/neeto-icons');
13
+ var neetoui = require('@bigbinary/neetoui');
14
+ var formik = require('@bigbinary/neetoui/formik');
15
+ var reactI18next = require('react-i18next');
16
+ var reactRouterDom_min = require('react-router-dom/cjs/react-router-dom.min');
17
+ var utils = require('@bigbinary/neeto-commons-frontend/utils');
18
+ var yup = require('yup');
19
+ var useHotkeys = require('@bigbinary/neeto-hotkeys');
20
+ var reactRouterDom = require('react-router-dom');
21
+ var axios = require('axios');
22
+ var Search = require('@bigbinary/neeto-molecules/Search');
23
+ var ReactDOM = require('react-dom');
24
+ var MenuBar = require('@bigbinary/neeto-molecules/MenuBar');
25
+ var MoreDropdown = require('@bigbinary/neeto-molecules/MoreDropdown');
26
+
27
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
28
+
29
+ function _interopNamespace(e) {
30
+ if (e && e.__esModule) return e;
31
+ var n = Object.create(null);
32
+ if (e) {
33
+ Object.keys(e).forEach(function (k) {
34
+ if (k !== 'default') {
35
+ var d = Object.getOwnPropertyDescriptor(e, k);
36
+ Object.defineProperty(n, k, d.get ? d : {
37
+ enumerable: true,
38
+ get: function () { return e[k]; }
39
+ });
40
+ }
41
+ });
42
+ }
43
+ n["default"] = e;
44
+ return Object.freeze(n);
45
+ }
46
+
47
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
48
+ var classnames__default = /*#__PURE__*/_interopDefaultLegacy(classnames);
49
+ var i18next__default = /*#__PURE__*/_interopDefaultLegacy(i18next);
50
+ var yup__namespace = /*#__PURE__*/_interopNamespace(yup);
51
+ var useHotkeys__default = /*#__PURE__*/_interopDefaultLegacy(useHotkeys);
52
+ var axios__default = /*#__PURE__*/_interopDefaultLegacy(axios);
53
+ var Search__default = /*#__PURE__*/_interopDefaultLegacy(Search);
54
+ var ReactDOM__default = /*#__PURE__*/_interopDefaultLegacy(ReactDOM);
55
+ var MenuBar__default = /*#__PURE__*/_interopDefaultLegacy(MenuBar);
56
+ var MoreDropdown__default = /*#__PURE__*/_interopDefaultLegacy(MoreDropdown);
57
+
58
+ function _typeof(o) {
59
+ "@babel/helpers - typeof";
60
+
61
+ return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
62
+ return typeof o;
63
+ } : function (o) {
64
+ return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
65
+ }, _typeof(o);
66
+ }
67
+
68
+ function _toPrimitive(input, hint) {
69
+ if (_typeof(input) !== "object" || input === null) return input;
70
+ var prim = input[Symbol.toPrimitive];
71
+ if (prim !== undefined) {
72
+ var res = prim.call(input, hint || "default");
73
+ if (_typeof(res) !== "object") return res;
74
+ throw new TypeError("@@toPrimitive must return a primitive value.");
75
+ }
76
+ return (hint === "string" ? String : Number)(input);
77
+ }
78
+
79
+ function _toPropertyKey(arg) {
80
+ var key = _toPrimitive(arg, "string");
81
+ return _typeof(key) === "symbol" ? key : String(key);
82
+ }
83
+
84
+ function _defineProperty(obj, key, value) {
85
+ key = _toPropertyKey(key);
86
+ if (key in obj) {
87
+ Object.defineProperty(obj, key, {
88
+ value: value,
89
+ enumerable: true,
90
+ configurable: true,
91
+ writable: true
92
+ });
93
+ } else {
94
+ obj[key] = value;
95
+ }
96
+ return obj;
97
+ }
98
+
99
+ function _arrayLikeToArray(arr, len) {
100
+ if (len == null || len > arr.length) len = arr.length;
101
+ for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
102
+ return arr2;
103
+ }
104
+
105
+ function _arrayWithoutHoles(arr) {
106
+ if (Array.isArray(arr)) return _arrayLikeToArray(arr);
107
+ }
108
+
109
+ function _iterableToArray(iter) {
110
+ if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
111
+ }
112
+
113
+ function _unsupportedIterableToArray(o, minLen) {
114
+ if (!o) return;
115
+ if (typeof o === "string") return _arrayLikeToArray(o, minLen);
116
+ var n = Object.prototype.toString.call(o).slice(8, -1);
117
+ if (n === "Object" && o.constructor) n = o.constructor.name;
118
+ if (n === "Map" || n === "Set") return Array.from(o);
119
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
120
+ }
121
+
122
+ function _nonIterableSpread() {
123
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
124
+ }
125
+
126
+ function _toConsumableArray(arr) {
127
+ return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
128
+ }
129
+
130
+ function _extends$1() {
131
+ _extends$1 = Object.assign ? Object.assign.bind() : function (target) {
132
+ for (var i = 1; i < arguments.length; i++) {
133
+ var source = arguments[i];
134
+ for (var key in source) {
135
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
136
+ target[key] = source[key];
137
+ }
138
+ }
139
+ }
140
+ return target;
141
+ };
142
+ return _extends$1.apply(this, arguments);
143
+ }
144
+
145
+ function _arrayWithHoles(arr) {
146
+ if (Array.isArray(arr)) return arr;
147
+ }
148
+
149
+ function _iterableToArrayLimit(r, l) {
150
+ var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
151
+ if (null != t) {
152
+ var e,
153
+ n,
154
+ i,
155
+ u,
156
+ a = [],
157
+ f = !0,
158
+ o = !1;
159
+ try {
160
+ if (i = (t = t.call(r)).next, 0 === l) {
161
+ if (Object(t) !== t) return;
162
+ f = !1;
163
+ } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);
164
+ } catch (r) {
165
+ o = !0, n = r;
166
+ } finally {
167
+ try {
168
+ if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return;
169
+ } finally {
170
+ if (o) throw n;
171
+ }
172
+ }
173
+ return a;
174
+ }
175
+ }
176
+
177
+ function _nonIterableRest() {
178
+ throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
179
+ }
180
+
181
+ function _slicedToArray(arr, i) {
182
+ return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
183
+ }
184
+
185
+ var SEGMENTS_BASE_URL = "/neeto_filters/segments";
186
+ var DATE_OPTIONS = [{
187
+ label: "Today",
188
+ value: "today"
189
+ }, {
190
+ label: "Yesterday",
191
+ value: "yesterday"
192
+ }, {
193
+ label: "This week",
194
+ value: "this-week"
195
+ }, {
196
+ label: "Last week",
197
+ value: "last-week"
198
+ }, {
199
+ label: "This month",
200
+ value: "this-month"
201
+ }, {
202
+ label: "Last month",
203
+ value: "last-month"
204
+ }, {
205
+ label: "This year",
206
+ value: "this-year"
207
+ }, {
208
+ label: "Last year",
209
+ value: "last-year"
210
+ }, {
211
+ label: "All time",
212
+ value: "all-time"
213
+ }, {
214
+ label: "After",
215
+ value: "after"
216
+ }, {
217
+ label: "Before",
218
+ value: "before"
219
+ }, {
220
+ label: "Custom date range",
221
+ value: "custom-date-range"
222
+ }];
223
+ var SINGLE_DATE_OPTIONS = [{
224
+ label: "On",
225
+ value: "on"
226
+ }, {
227
+ label: "After",
228
+ value: "after"
229
+ }, {
230
+ label: "Before",
231
+ value: "before"
232
+ }, {
233
+ label: "Between",
234
+ value: "between"
235
+ }];
236
+ var SINGLE_TIME_OPTIONS = [{
237
+ label: "At",
238
+ value: "at"
239
+ }, {
240
+ label: "After",
241
+ value: "after"
242
+ }, {
243
+ label: "Before",
244
+ value: "before"
245
+ }, {
246
+ label: "Between",
247
+ value: "between"
248
+ }];
249
+ var TIME_OPTIONS = [{
250
+ label: "This hour",
251
+ value: "this-hour"
252
+ }, {
253
+ label: "Last hour",
254
+ value: "last-hour"
255
+ }, {
256
+ label: "Custom time range",
257
+ value: "custom-time-range"
258
+ }];
259
+ var DATE_RULES = {
260
+ today: "on",
261
+ yesterday: "on",
262
+ "all-time": "before"
263
+ };
264
+ var SEARCH_TERM_KEY = "search_term";
265
+ var SEGMENT_ID_KEY = "segment_id";
266
+
267
+ var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
268
+
269
+ function getDefaultExportFromCjs (x) {
270
+ return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
271
+ }
272
+
273
+ var dayjs_min = {exports: {}};
274
+
275
+ dayjs_min.exports;
276
+
277
+ (function (module, exports) {
278
+ !function(t,e){module.exports=e();}(commonjsGlobal,(function(){var t=1e3,e=6e4,n=36e5,r="millisecond",i="second",s="minute",u="hour",a="day",o="week",f="month",h="quarter",c="year",d="date",$="Invalid Date",l=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,y=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_")},m=function(t,e,n){var r=String(t);return !r||r.length>=e?t:""+Array(e+1-r.length).join(n)+t},g={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return (e<=0?"+":"-")+m(r,2,"0")+":"+m(i,2,"0")},m:function t(e,n){if(e.date()<n.date())return -t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,f),s=n-i<0,u=e.clone().add(r+(s?-1:1),f);return +(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return {M:f,y:c,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:h}[t]||String(t||"").toLowerCase().replace(/s$/,"")},u:function(t){return void 0===t}},v="en",D={};D[v]=M;var p=function(t){return t instanceof _},S=function t(e,n,r){var i;if(!e)return v;if("string"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split("-");if(!i&&u.length>1)return t(u[0])}else {var a=e.name;D[a]=e,i=a;}return !r&&i&&(v=i),i||!r&&v},w=function(t,e){if(p(t))return t.clone();var n="object"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},O=g;O.l=S,O.i=p,O.w=function(t,e){return w(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=S(t.locale,null,!0),this.parse(t);}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(O.u(e))return new Date;if(e instanceof Date)return new Date(e);if("string"==typeof e&&!/Z$/i.test(e)){var r=e.match(l);if(r){var i=r[2]-1||0,s=(r[7]||"0").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.$x=t.x||{},this.init();},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds();},m.$utils=function(){return O},m.isValid=function(){return !(this.$d.toString()===$)},m.isSame=function(t,e){var n=w(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return w(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<w(t)},m.$g=function(t,e,n){return O.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!O.u(e)||e,h=O.p(t),$=function(t,e){var i=O.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},l=function(t,e){return O.w(n.toDate()[t].apply(n.toDate("s"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,g="set"+(this.$u?"UTC":"");switch(h){case c:return r?$(1,0):$(31,11);case f:return r?$(1,M):$(0,M+1);case o:var v=this.$locale().weekStart||0,D=(y<v?y+7:y)-v;return $(r?m-D:m+(6-D),M);case a:case d:return l(g+"Hours",0);case u:return l(g+"Minutes",1);case s:return l(g+"Seconds",2);case i:return l(g+"Milliseconds",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=O.p(t),h="set"+(this.$u?"UTC":""),$=(n={},n[a]=h+"Date",n[d]=h+"Date",n[f]=h+"Month",n[c]=h+"FullYear",n[u]=h+"Hours",n[s]=h+"Minutes",n[i]=h+"Seconds",n[r]=h+"Milliseconds",n)[o],l=o===a?this.$D+(e-this.$W):e;if(o===f||o===c){var y=this.clone().set(d,1);y.$d[$](l),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d;}else $&&this.$d[$](l);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[O.p(t)]()},m.add=function(r,h){var d,$=this;r=Number(r);var l=O.p(h),y=function(t){var e=w($);return O.w(e.date(e.date()+Math.round(t*r)),$)};if(l===f)return this.set(f,this.$M+r);if(l===c)return this.set(c,this.$y+r);if(l===a)return y(1);if(l===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[l]||1,m=this.$d.getTime()+r*M;return O.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||$;var r=t||"YYYY-MM-DDTHH:mm:ssZ",i=O.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,f=n.months,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},c=function(t){return O.s(s%12||12,t,"0")},d=n.meridiem||function(t,e,n){var r=t<12?"AM":"PM";return n?r.toLowerCase():r},l={YY:String(this.$y).slice(-2),YYYY:this.$y,M:a+1,MM:O.s(a+1,2,"0"),MMM:h(n.monthsShort,a,f,3),MMMM:h(f,a),D:this.$D,DD:O.s(this.$D,2,"0"),d:String(this.$W),dd:h(n.weekdaysMin,this.$W,o,2),ddd:h(n.weekdaysShort,this.$W,o,3),dddd:o[this.$W],H:String(s),HH:O.s(s,2,"0"),h:c(1),hh:c(2),a:d(s,u,!0),A:d(s,u,!1),m:String(u),mm:O.s(u,2,"0"),s:String(this.$s),ss:O.s(this.$s,2,"0"),SSS:O.s(this.$ms,3,"0"),Z:i};return r.replace(y,(function(t,e){return e||l[t]||i.replace(":","")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,$){var l,y=O.p(d),M=w(r),m=(M.utcOffset()-this.utcOffset())*e,g=this-M,v=O.m(this,M);return v=(l={},l[c]=v/12,l[f]=v,l[h]=v/3,l[o]=(g-m)/6048e5,l[a]=(g-m)/864e5,l[u]=g/n,l[s]=g/e,l[i]=g/t,l)[y]||g,$?v:O.a(v)},m.daysInMonth=function(){return this.endOf(f).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=S(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return O.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),T=_.prototype;return w.prototype=T,[["$ms",r],["$s",i],["$m",s],["$H",u],["$W",a],["$M",f],["$y",c],["$D",d]].forEach((function(t){T[t[1]]=function(e){return this.$g(e,t[0],t[1])};})),w.extend=function(t,e){return t.$i||(t(e,_,w),t.$i=!0),w},w.locale=S,w.isDayjs=p,w.unix=function(t){return w(1e3*t)},w.en=D[v],w.Ls=D,w.p={},w}));
279
+ } (dayjs_min, dayjs_min.exports));
280
+
281
+ var dayjs_minExports = dayjs_min.exports;
282
+ var dayjs = /*@__PURE__*/getDefaultExportFromCjs(dayjs_minExports);
283
+
284
+ var timezone$1 = {exports: {}};
285
+
286
+ timezone$1.exports;
287
+
288
+ (function (module, exports) {
289
+ !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;};}}));
290
+ } (timezone$1, timezone$1.exports));
291
+
292
+ var timezoneExports = timezone$1.exports;
293
+ var timezone = /*@__PURE__*/getDefaultExportFromCjs(timezoneExports);
294
+
295
+ var utc$1 = {exports: {}};
296
+
297
+ utc$1.exports;
298
+
299
+ (function (module, exports) {
300
+ !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)};}}));
301
+ } (utc$1, utc$1.exports));
302
+
303
+ var utcExports = utc$1.exports;
304
+ var utc = /*@__PURE__*/getDefaultExportFromCjs(utcExports);
305
+
306
+ var weekday$1 = {exports: {}};
307
+
308
+ weekday$1.exports;
309
+
310
+ (function (module, exports) {
311
+ !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")};}}));
312
+ } (weekday$1, weekday$1.exports));
313
+
314
+ var weekdayExports = weekday$1.exports;
315
+ var weekday = /*@__PURE__*/getDefaultExportFromCjs(weekdayExports);
316
+
317
+ dayjs.extend(utc);
318
+ dayjs.extend(timezone);
319
+ dayjs.extend(weekday);
320
+ dayjs.Ls.en.weekStart = 1;
321
+
322
+ var NUMBER_RULES = [{
323
+ label: i18next.t("neetoFilters.rules.is"),
324
+ value: "is"
325
+ }, {
326
+ label: i18next.t("neetoFilters.rules.isNot"),
327
+ value: "is_not"
328
+ }, {
329
+ label: i18next.t("neetoFilters.rules.greaterThan"),
330
+ value: "greater_than"
331
+ }, {
332
+ label: i18next.t("neetoFilters.rules.lessThan"),
333
+ value: "less_than"
334
+ }];
335
+ var TEXT_RULES = [{
336
+ label: i18next.t("neetoFilters.rules.contains"),
337
+ value: "contains"
338
+ }, {
339
+ label: i18next.t("neetoFilters.rules.doesNotContain"),
340
+ value: "does_not_contain"
341
+ }, {
342
+ label: i18next.t("neetoFilters.rules.is"),
343
+ value: "is"
344
+ }, {
345
+ label: i18next.t("neetoFilters.rules.isNot"),
346
+ value: "is_not"
347
+ }, {
348
+ label: i18next.t("neetoFilters.rules.startsWith"),
349
+ value: "starts_with"
350
+ }, {
351
+ label: i18next.t("neetoFilters.rules.doesNotStartWith"),
352
+ value: "does_not_start_with"
353
+ }, {
354
+ label: i18next.t("neetoFilters.rules.endsWith"),
355
+ value: "ends_with"
356
+ }, {
357
+ label: i18next.t("neetoFilters.rules.doesNotEndWith"),
358
+ value: "does_not_end_with"
359
+ }];
360
+ var DEFAULT_BOOLEAN_OPTIONS = [{
361
+ label: i18next.t("neetoFilters.common.yes"),
362
+ value: "true"
363
+ }, {
364
+ label: i18next.t("neetoFilters.common.no"),
365
+ value: "false"
366
+ }];
367
+ var DEFAULT_HELP_ICON_PROPS = {
368
+ icon: neetoIcons.Help,
369
+ tooltipProps: {
370
+ position: "right"
371
+ }
372
+ };
373
+
374
+ 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; }
375
+ 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; }
376
+ var groupByGroup = ramda.groupBy(function (_ref) {
377
+ var group = _ref.group;
378
+ return group || "individual";
379
+ });
380
+ var standardizeColumnType = function standardizeColumnType(kind) {
381
+ // neeto-fields-nano supports `monetary` and `number` as type of fields, which will be acting as `decimal` in action.
382
+ if (["custom.monetary", "custom.number"].includes(kind)) {
383
+ return "custom.decimal";
384
+ }
385
+ return kind;
386
+ };
387
+ var getSnakeCasedQueryParams = function getSnakeCasedQueryParams() {
388
+ return utils.getQueryParams({
389
+ toCamelCase: false
390
+ });
391
+ };
392
+ var isBoolean = function isBoolean(type) {
393
+ return type === "boolean" || type === "custom.boolean";
394
+ };
395
+ var isCheckbox = function isCheckbox(type) {
396
+ return type === "checkbox" || type === "custom.checkbox";
397
+ };
398
+ var isDate = function isDate(type) {
399
+ return type === "date" || type === "custom.date" || type === "custom.datetime";
400
+ };
401
+ var isSingleDate = function isSingleDate(type) {
402
+ return type === "single_date" || type === "custom.single_date";
403
+ };
404
+ var isSingleTime = function isSingleTime(type) {
405
+ return type === "single_time" || type === "custom.single_time";
406
+ };
407
+ var isTime = function isTime(type) {
408
+ return type === "time" || type === "custom.time";
409
+ };
410
+ var isMulti = function isMulti(type) {
411
+ return type === "multi_option" || type === "custom.multi_option";
412
+ };
413
+ var isText = function isText(type) {
414
+ return type === "text" || type === "custom.text";
415
+ };
416
+ var isDigit = function isDigit(type) {
417
+ return ["number", "decimal", "custom.decimal", "custom.number"].includes(type);
418
+ };
419
+ var isCustomDateRange = function isCustomDateRange(value) {
420
+ return !ramda.pluck("value", DATE_OPTIONS).includes(value);
421
+ };
422
+ var isCustomTimeRange = function isCustomTimeRange(value) {
423
+ return !ramda.pluck("value", TIME_OPTIONS).includes(value);
424
+ };
425
+ var isMultiModelFilter = function isMultiModelFilter(_ref2) {
426
+ var _ref2$model = _ref2.model,
427
+ model = _ref2$model === void 0 ? "" : _ref2$model;
428
+ return model.split(",").length > 1;
429
+ };
430
+ var getTimezone = function getTimezone() {
431
+ return dayjs.tz.guess();
432
+ };
433
+ var getLabelFromBool = function getLabelFromBool(_ref3) {
434
+ var value = _ref3.value,
435
+ values = _ref3.values;
436
+ return neetoCist.findBy({
437
+ value: value
438
+ }, ramda.either(ramda.isEmpty, ramda.isNil)(values) ? DEFAULT_BOOLEAN_OPTIONS : values).label;
439
+ };
440
+ var getBoolFromLabel = function getBoolFromLabel(_ref4) {
441
+ var label = _ref4.label,
442
+ values = _ref4.values;
443
+ return neetoCist.findBy({
444
+ label: label
445
+ }, ramda.either(ramda.isEmpty, ramda.isNil)(values) ? DEFAULT_BOOLEAN_OPTIONS : values).value;
446
+ };
447
+ var buildRuleOptions = function buildRuleOptions(_ref5) {
448
+ var defaultType = _ref5.defaultType;
449
+ if (isText(defaultType)) return TEXT_RULES;else if (isDigit(defaultType)) return NUMBER_RULES;
450
+ return [];
451
+ };
452
+ var getDefaultRuleValue = function getDefaultRuleValue(defaultType) {
453
+ var _buildRuleOptions;
454
+ return ((_buildRuleOptions = buildRuleOptions({
455
+ defaultType: defaultType
456
+ })) === null || _buildRuleOptions === void 0 || (_buildRuleOptions = _buildRuleOptions[0]) === null || _buildRuleOptions === void 0 ? void 0 : _buildRuleOptions.value) || "";
457
+ };
458
+ var isUndefinedOrEmpty = ramda.anyPass([ramda.isNil, ramda.isEmpty, ramda.any(ramda.isNil)]);
459
+
460
+ // Following function split node on comma followed by non-comma characters and a dot
461
+ var splitNode = function splitNode(joinedNodes) {
462
+ return joinedNodes.split(/,(?=[^,]*\.)/);
463
+ };
464
+ var splitFilter = function splitFilter(multiColumnFilter) {
465
+ var splittedNodes = splitNode(multiColumnFilter.node);
466
+ var splittedModels = multiColumnFilter.model.split(",");
467
+ return splittedNodes.map(function (node, index) {
468
+ return ramda.mergeLeft({
469
+ node: node,
470
+ model: splittedModels[index],
471
+ conditions_join_type: index < splittedNodes.length - 1 ? "or" : "and"
472
+ }, ramda.omit(["key", "label", "values", "setValue"], multiColumnFilter));
473
+ });
474
+ };
475
+ var buildDateValue = function buildDateValue(_ref6) {
476
+ var value = _ref6.value;
477
+ var rule = DATE_RULES[value] || "between";
478
+ var dateValue = ["before", "after", "custom-date-range"].includes(value) ? "" : value;
479
+ return {
480
+ value: dateValue,
481
+ rule: rule,
482
+ timezone: getTimezone()
483
+ };
484
+ };
485
+ var buildTimeValue = function buildTimeValue(_ref7) {
486
+ var value = _ref7.value;
487
+ var dateValue = value === "custom-time-range" ? "" : value;
488
+ return {
489
+ value: dateValue,
490
+ rule: "between"
491
+ };
492
+ };
493
+ var buildUpdatedFilter = function buildUpdatedFilter(_ref8) {
494
+ var column = _ref8.column,
495
+ defaultType = _ref8.defaultType,
496
+ option = _ref8.option,
497
+ _ref8$rule = _ref8.rule,
498
+ rule = _ref8$rule === void 0 ? "" : _ref8$rule,
499
+ _ref8$value = _ref8.value,
500
+ value = _ref8$value === void 0 ? "" : _ref8$value;
501
+ var filter = ramda.omit(["values", "preprocessor"], column);
502
+ if (isMulti(defaultType)) {
503
+ return ramda.mergeLeft(filter, {
504
+ value: ramda.pluck("value", option),
505
+ rule: "in"
506
+ });
507
+ } else if (isDate(defaultType)) {
508
+ return ramda.mergeLeft(filter, buildDateValue(option));
509
+ } else if (isSingleDate(defaultType)) {
510
+ return ramda.mergeLeft(filter, {
511
+ value: value,
512
+ rule: rule,
513
+ timezone: getTimezone()
514
+ });
515
+ } else if (isText(defaultType) || isDigit(defaultType)) {
516
+ var _column$preprocessor;
517
+ return ramda.mergeLeft(filter, {
518
+ rule: rule,
519
+ value: (column === null || column === void 0 || (_column$preprocessor = column.preprocessor) === null || _column$preprocessor === void 0 ? void 0 : _column$preprocessor.call(column, value)) || value
520
+ });
521
+ } else if (isSingleTime(defaultType)) {
522
+ return ramda.mergeLeft(filter, {
523
+ value: value,
524
+ rule: rule
525
+ });
526
+ } else if (isTime(defaultType)) {
527
+ return ramda.mergeLeft(filter, buildTimeValue(option));
528
+ }
529
+ return ramda.mergeLeft(filter, {
530
+ value: option.value,
531
+ rule: "is"
532
+ });
533
+ };
534
+ var buildFiltersFromSearchParams = function buildFiltersFromSearchParams(columns) {
535
+ var skipEmpty = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
536
+ var searchParams = getSnakeCasedQueryParams();
537
+ return columns.map(function (column) {
538
+ var value = searchParams[column.key];
539
+ var defaultType = column.defaultType || column.type;
540
+ if (!skipEmpty && value === "") {
541
+ return ramda.mergeLeft({
542
+ value: ""
543
+ }, column);
544
+ } else if (ramda.isNil(value) || value === "" || column.key === "keyword") {
545
+ return null;
546
+ } else if (column.key === SEARCH_TERM_KEY) {
547
+ if (ramda.isNil(column.node)) return null;
548
+ return ramda.mergeLeft({
549
+ value: value,
550
+ type: "text",
551
+ rule: "contains"
552
+ }, column);
553
+ } else if (isDate(defaultType) && isCustomDateRange(value)) {
554
+ return ramda.mergeLeft({
555
+ value: value.split(",")
556
+ }, column);
557
+ } else if (isMulti(defaultType)) {
558
+ return ramda.mergeLeft({
559
+ rule: "in",
560
+ value: value.split("|")
561
+ }, column);
562
+ } else if (isDigit(defaultType) || isText(defaultType)) {
563
+ var _value$split = value.split("+rule-"),
564
+ _value$split2 = _slicedToArray(_value$split, 2),
565
+ filterValue = _value$split2[0],
566
+ rule = _value$split2[1];
567
+ return ramda.mergeLeft({
568
+ rule: rule,
569
+ value: filterValue
570
+ }, column);
571
+ } else if (isTime(defaultType) && isCustomTimeRange(value)) {
572
+ return ramda.mergeLeft({
573
+ value: value.split(",")
574
+ }, column);
575
+ } else if (isSingleDate(defaultType)) {
576
+ var _value$split3 = value.split("+rule-"),
577
+ _value$split4 = _slicedToArray(_value$split3, 2),
578
+ _filterValue = _value$split4[0],
579
+ _rule = _value$split4[1];
580
+ return ramda.mergeLeft({
581
+ rule: _rule,
582
+ value: _rule === "between" ? _filterValue.split(",") : _filterValue
583
+ }, column);
584
+ } else if (isSingleTime(defaultType)) {
585
+ var _value$split5 = value.split("+rule-"),
586
+ _value$split6 = _slicedToArray(_value$split5, 2),
587
+ _filterValue2 = _value$split6[0],
588
+ _rule2 = _value$split6[1];
589
+ return ramda.mergeLeft({
590
+ rule: _rule2,
591
+ value: _rule2 === "between" ? _filterValue2.split(",") : _filterValue2
592
+ }, column);
593
+ } else if (isBoolean(defaultType)) {
594
+ return ramda.mergeLeft({
595
+ rule: "is",
596
+ value: getBoolFromLabel({
597
+ label: value,
598
+ values: column.values
599
+ })
600
+ }, column);
601
+ }
602
+ return ramda.mergeLeft({
603
+ rule: "is",
604
+ value: value
605
+ }, column);
606
+ }).filter(ramda.identity);
607
+ };
608
+ var buildTimePayload = function buildTimePayload(value) {
609
+ var timeValue = {
610
+ "this-hour": [dayjs().startOf("hour"), dayjs().endOf("hour")],
611
+ "last-hour": [dayjs().add(-1, "hour").startOf("hour"), dayjs().add(-1, "hour").endOf("hour")],
612
+ "next-hour": [dayjs().add(1, "hour").startOf("hour"), dayjs().add(1, "hour").endOf("hour")]
613
+ };
614
+ if (isCustomTimeRange(value)) {
615
+ return {
616
+ value: value ? value.join(",") : "",
617
+ rule: "between"
618
+ };
619
+ }
620
+ return {
621
+ value: timeValue[value].map(function (time) {
622
+ return time.toISOString();
623
+ }).join(","),
624
+ rule: "between"
625
+ };
626
+ };
627
+ var buildDatePayload = function buildDatePayload(value) {
628
+ var dateValue = {
629
+ "this-week": [dayjs().startOf("week"), dayjs().endOf("week")],
630
+ "last-week": [dayjs().add(-1, "week").startOf("week"), dayjs().add(-1, "week").endOf("week")],
631
+ "this-month": [dayjs().startOf("month"), dayjs().endOf("month")],
632
+ "last-month": [dayjs().add(-1, "month").startOf("month"), dayjs().add(-1, "month").endOf("month")],
633
+ "this-year": [dayjs().startOf("year"), dayjs().endOf("year")],
634
+ "last-year": [dayjs().add(-1, "year").startOf("year"), dayjs().add(-1, "year").endOf("year")]
635
+ };
636
+ if (value === "today") {
637
+ return {
638
+ value: dayjs().toISOString(),
639
+ rule: "on",
640
+ timezone: getTimezone()
641
+ };
642
+ } else if (value === "yesterday") {
643
+ return {
644
+ value: dayjs().add(-1, "day").toISOString(),
645
+ rule: "on",
646
+ timezone: getTimezone()
647
+ };
648
+ } else if (value === "all-time") {
649
+ return {
650
+ value: dayjs().toISOString(),
651
+ rule: "before",
652
+ timezone: getTimezone(),
653
+ type: "datetime"
654
+ };
655
+ } else if (isCustomDateRange(value)) {
656
+ //custom-date-range
657
+ return {
658
+ value: value ? value.join(",") : "",
659
+ rule: "between",
660
+ timezone: getTimezone()
661
+ };
662
+ }
663
+ return {
664
+ value: dateValue[value].map(function (date) {
665
+ return date.toISOString();
666
+ }).join(","),
667
+ rule: "between",
668
+ timezone: getTimezone()
669
+ };
670
+ };
671
+ var buildSingleDatePayload = function buildSingleDatePayload(filter) {
672
+ var value = filter.value;
673
+ var filterValue = Array.isArray(value) ? value.join(",") : value;
674
+ return _objectSpread$5(_objectSpread$5({}, filter), {}, {
675
+ value: filterValue,
676
+ type: "date"
677
+ });
678
+ };
679
+ var buildSingleTimePayload = function buildSingleTimePayload(filter) {
680
+ var value = filter.value;
681
+ var filterValue = Array.isArray(value) ? value.join(",") : value;
682
+ return _objectSpread$5(_objectSpread$5({}, filter), {}, {
683
+ value: filterValue,
684
+ type: "time"
685
+ });
686
+ };
687
+ var flattenPayload = function flattenPayload(payload) {
688
+ var flattenedPayload = [];
689
+ payload.forEach(function (item) {
690
+ return Array.isArray(item) ? flattenedPayload.unshift.apply(flattenedPayload, _toConsumableArray(item)) : flattenedPayload.push(item);
691
+ }, []);
692
+ return flattenedPayload;
693
+ };
694
+ var buildMultiOptionPayload = function buildMultiOptionPayload(values) {
695
+ return values.map(function (value) {
696
+ return value.toString();
697
+ }).join("|");
698
+ };
699
+ var buildFiltersPayload = function buildFiltersPayload(filters) {
700
+ var payload = neetoCist.removeBy({
701
+ value: ""
702
+ }, filters).map(function (filter) {
703
+ if (filter.key === SEARCH_TERM_KEY && isMultiModelFilter(filter)) {
704
+ return splitFilter(filter);
705
+ }
706
+ var filterPayload = ramda.omit(["key", "label", "values", "setValue"], filter);
707
+ var _filterPayload$defaul = filterPayload.defaultType,
708
+ defaultType = _filterPayload$defaul === void 0 ? filterPayload.type : _filterPayload$defaul,
709
+ value = filterPayload.value;
710
+ if (isMultiModelFilter(filterPayload)) {
711
+ throw i18next__default["default"].t("neetoFilters.errors.cannotPassMultipleModels");
712
+ }
713
+ if (isDate(defaultType)) {
714
+ return ramda.mergeRight(filterPayload, buildDatePayload(value));
715
+ } else if (isMulti(defaultType)) {
716
+ return ramda.mergeRight(filterPayload, {
717
+ value: buildMultiOptionPayload(value)
718
+ });
719
+ } else if (isSingleDate(defaultType)) {
720
+ return ramda.mergeRight(filterPayload, buildSingleDatePayload(filterPayload));
721
+ } else if (isSingleTime(defaultType)) {
722
+ return ramda.mergeRight(filterPayload, buildSingleTimePayload(filterPayload));
723
+ } else if (isTime(defaultType)) {
724
+ return ramda.mergeRight(filterPayload, buildTimePayload(value));
725
+ }
726
+ return filterPayload;
727
+ });
728
+ return ramda.isEmpty(payload) ? [] : [{
729
+ conditions: flattenPayload(payload)
730
+ }];
731
+ };
732
+ var buildSegmentsPayload = function buildSegmentsPayload(filters) {
733
+ var childrenKeys = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
734
+ var payload = neetoCist.removeBy({
735
+ value: ""
736
+ }, filters).map(function (filter) {
737
+ if (filter.key === SEARCH_TERM_KEY) {
738
+ return false;
739
+ }
740
+ var filterPayload = ramda.omit(["label", "values", "setValue", "defaultValue"], filter);
741
+ var _filterPayload$defaul2 = filterPayload.defaultType,
742
+ defaultType = _filterPayload$defaul2 === void 0 ? filterPayload.type : _filterPayload$defaul2,
743
+ value = filterPayload.value;
744
+ if (filter.key !== SEARCH_TERM_KEY && isMultiModelFilter(filterPayload)) {
745
+ throw i18next__default["default"].t("neetoFilters.errors.cannotPassMultipleModels");
746
+ }
747
+ if (isMulti(defaultType)) {
748
+ return ramda.mergeRight(filterPayload, {
749
+ value: buildMultiOptionPayload(value)
750
+ });
751
+ }
752
+ return filterPayload;
753
+ });
754
+ var searchParams = getSnakeCasedQueryParams();
755
+ var modifiedPayload = childrenKeys.reduce(function (acc, key) {
756
+ if (ramda.has(key, searchParams)) {
757
+ var filterPayload = {
758
+ key: key,
759
+ node: "children",
760
+ value: searchParams[key]
761
+ };
762
+ return acc.concat(filterPayload);
763
+ }
764
+ return acc;
765
+ }, payload);
766
+ return ramda.isEmpty(modifiedPayload) ? [] : [{
767
+ conditions: flattenPayload(modifiedPayload)
768
+ }];
769
+ };
770
+ var buildFiltersFromURL = function buildFiltersFromURL(columns) {
771
+ return buildFiltersPayload(buildFiltersFromSearchParams(columns.filter(function (column) {
772
+ return !ramda.isNil(column.node);
773
+ })));
774
+ };
775
+ var buildSelectorsFromURL = function buildSelectorsFromURL(columns) {
776
+ var searchParams = getSnakeCasedQueryParams();
777
+ var selectors = {};
778
+ columns.filter(function (_ref9) {
779
+ var node = _ref9.node;
780
+ return !node;
781
+ }).forEach(function (_ref10) {
782
+ var key = _ref10.key,
783
+ defaultType = _ref10.defaultType,
784
+ type = _ref10.type;
785
+ var value = searchParams[key];
786
+ if (value) {
787
+ selectors[key] = isMulti(defaultType || type) ? value.split("|") : value;
788
+ }
789
+ });
790
+ return selectors;
791
+ };
792
+ var compareFilters = function compareFilters(oldFilters, newFilters) {
793
+ var formatFilters = function formatFilters(filters) {
794
+ return neetoCist.removeBy({
795
+ value: ""
796
+ }, filters).map(ramda.pick(["key", "rule", "value"]));
797
+ };
798
+ return ramda.equals(formatFilters(oldFilters), formatFilters(newFilters));
799
+ };
800
+ var buildFilteredColumns = function buildFilteredColumns(_ref11) {
801
+ var _ref11$searchTerm = _ref11.searchTerm,
802
+ searchTerm = _ref11$searchTerm === void 0 ? "" : _ref11$searchTerm,
803
+ columns = _ref11.columns;
804
+ var groupedColumsObject = groupByGroup(columns.filter(function (_ref12) {
805
+ var label = _ref12.label,
806
+ _ref12$hidden = _ref12.hidden,
807
+ hidden = _ref12$hidden === void 0 ? false : _ref12$hidden;
808
+ return label.toLocaleLowerCase().includes(searchTerm.trim().toLocaleLowerCase()) && !hidden;
809
+ }));
810
+ return {
811
+ groupedColumns: ramda.toPairs(ramda.omit(["individual"], groupedColumsObject)).map(function (_ref13) {
812
+ var _ref14 = _slicedToArray(_ref13, 2),
813
+ group = _ref14[0],
814
+ columns = _ref14[1];
815
+ return {
816
+ group: group,
817
+ columns: columns
818
+ };
819
+ }),
820
+ ungroupedColumns: groupedColumsObject.individual
821
+ };
822
+ };
823
+ var buildDefaultFilters = function buildDefaultFilters(columns, filters) {
824
+ return columns.filter(function (column) {
825
+ return !isUndefinedOrEmpty(column.defaultValue) && !neetoCist.findBy({
826
+ key: column.key
827
+ }, filters);
828
+ }).map(function (column) {
829
+ var defaultType = column.defaultType || column.type;
830
+ return buildUpdatedFilter({
831
+ column: column,
832
+ defaultType: defaultType,
833
+ rule: getDefaultRuleValue(defaultType),
834
+ option: column.defaultValue,
835
+ value: column.defaultValue
836
+ });
837
+ });
838
+ };
839
+ var createUrlParamString = function createUrlParamString(_ref15) {
840
+ var filter = _ref15.filter,
841
+ columns = _ref15.columns;
842
+ var key = filter.key,
843
+ value = filter.value,
844
+ _filter$defaultType = filter.defaultType,
845
+ defaultType = _filter$defaultType === void 0 ? filter.type : _filter$defaultType,
846
+ rule = filter.rule;
847
+ if (key === SEARCH_TERM_KEY) {
848
+ return value;
849
+ } else if (isDigit(defaultType) || isText(defaultType)) {
850
+ return "".concat(value, "+rule-").concat(rule);
851
+ } else if (isSingleDate(defaultType) || isSingleTime(defaultType)) {
852
+ return value && "".concat(value, "+rule-").concat(rule) || value;
853
+ } else if (isMulti(defaultType)) {
854
+ return value.join("|");
855
+ } else if (isBoolean(defaultType)) {
856
+ return getLabelFromBool({
857
+ value: value,
858
+ values: neetoCist.findBy({
859
+ key: key
860
+ }, columns).values
861
+ });
862
+ }
863
+ return value;
864
+ };
865
+ var buildUrlFromFilters = function buildUrlFromFilters(_ref16) {
866
+ var columns = _ref16.columns,
867
+ filters = _ref16.filters,
868
+ _ref16$isClearAll = _ref16.isClearAll,
869
+ isClearAll = _ref16$isClearAll === void 0 ? false : _ref16$isClearAll,
870
+ _ref16$childrenKeys = _ref16.childrenKeys,
871
+ childrenKeys = _ref16$childrenKeys === void 0 ? [] : _ref16$childrenKeys;
872
+ var searchParams = getSnakeCasedQueryParams();
873
+ var isKeywordFilterPresent = neetoCist.findBy({
874
+ key: SEARCH_TERM_KEY
875
+ }, filters);
876
+ columns.forEach(function (_ref17) {
877
+ var key = _ref17.key,
878
+ defaultValue = _ref17.defaultValue;
879
+ return !defaultValue && delete searchParams[key];
880
+ });
881
+ if (isClearAll) {
882
+ childrenKeys.forEach(function (key) {
883
+ return delete searchParams[key];
884
+ });
885
+ delete searchParams[SEGMENT_ID_KEY];
886
+ }
887
+ var defaultFilters = buildDefaultFilters(columns, filters);
888
+ isKeywordFilterPresent && delete searchParams[SEARCH_TERM_KEY];
889
+ ramda.concat(filters, defaultFilters).forEach(function (filter) {
890
+ searchParams[filter.key] = createUrlParamString({
891
+ filter: filter,
892
+ columns: columns
893
+ });
894
+ });
895
+ if (ramda.isEmpty(ramda.omit([SEGMENT_ID_KEY], searchParams))) {
896
+ delete searchParams[SEGMENT_ID_KEY];
897
+ }
898
+ return new URLSearchParams(searchParams).toString();
899
+ };
900
+ var createUrlParamStringForSegments = function createUrlParamStringForSegments(_ref18) {
901
+ var filter = _ref18.filter,
902
+ columns = _ref18.columns;
903
+ var value = filter.value,
904
+ _filter$defaultType2 = filter.defaultType,
905
+ defaultType = _filter$defaultType2 === void 0 ? filter.type : _filter$defaultType2;
906
+ if (isMulti(defaultType)) {
907
+ return value;
908
+ }
909
+ return createUrlParamString({
910
+ filter: filter,
911
+ columns: columns
912
+ });
913
+ };
914
+ var buildUrlFromSegment = function buildUrlFromSegment(_ref19) {
915
+ var columns = _ref19.columns,
916
+ filters = _ref19.filters,
917
+ id = _ref19.id;
918
+ var searchParams = getSnakeCasedQueryParams();
919
+ columns.forEach(function (_ref20) {
920
+ var key = _ref20.key,
921
+ defaultValue = _ref20.defaultValue;
922
+ return !defaultValue && delete searchParams[key];
923
+ });
924
+ delete searchParams[SEARCH_TERM_KEY];
925
+ var defaultFilters = buildDefaultFilters(columns, filters);
926
+ var newSearchParams = ramda.concat(filters, defaultFilters).reduce(function (acc, filter) {
927
+ acc[filter.key] = createUrlParamStringForSegments({
928
+ filter: filter,
929
+ columns: columns
930
+ });
931
+ return acc;
932
+ }, neetoCist.isNotEmpty(id) ? _defineProperty({}, SEGMENT_ID_KEY, id) : {});
933
+ return new URLSearchParams(_objectSpread$5(_objectSpread$5({}, searchParams), newSearchParams)).toString();
934
+ };
935
+ var getSearchTermFromUrl = function getSearchTermFromUrl() {
936
+ return utils.getQueryParams().searchTerm || "";
937
+ };
938
+ var buildFilterColumnsFromFields = function buildFilterColumnsFromFields(_ref22) {
939
+ var fields = _ref22.fields,
940
+ _ref22$selectedFields = _ref22.selectedFields,
941
+ selectedFields = _ref22$selectedFields === void 0 ? [] : _ref22$selectedFields,
942
+ _ref22$showRuleSelect = _ref22.showRuleSelector,
943
+ showRuleSelector = _ref22$showRuleSelect === void 0 ? false : _ref22$showRuleSelect,
944
+ groupName = _ref22.groupName;
945
+ return fields.reduce(function (columns, field) {
946
+ if (ramda.isEmpty(selectedFields) || selectedFields.includes(field.name)) {
947
+ var id = field.id,
948
+ name = field.name,
949
+ kind = field.kind;
950
+ var column = _objectSpread$5({
951
+ key: ramda.toLower(name),
952
+ node: "".concat(name, ":").concat(id),
953
+ label: neetoCist.capitalize(name),
954
+ type: "custom.".concat(kind),
955
+ showRuleSelector: showRuleSelector
956
+ }, groupName && {
957
+ group: groupName
958
+ });
959
+ if (kind === "single_option" || kind === "multi_option") {
960
+ column.values = field.data.map(function (item) {
961
+ return {
962
+ label: neetoCist.capitalize(item.label),
963
+ value: item.id
964
+ };
965
+ });
966
+ }
967
+ columns.push(column);
968
+ }
969
+ return columns;
970
+ }, []);
971
+ };
972
+ var getColumnsWithStandardizedType = function getColumnsWithStandardizedType(columns) {
973
+ return columns.map(function (column) {
974
+ return _objectSpread$5(_objectSpread$5({}, column), {}, {
975
+ type: standardizeColumnType(column.type)
976
+ });
977
+ });
978
+ };
979
+ var isKeywordFilterPresent = function isKeywordFilterPresent(keyworFilter) {
980
+ return ramda.not(ramda.isEmpty(keyworFilter.node));
981
+ };
982
+
983
+ var buildDropdownValue = function buildDropdownValue(_ref) {
984
+ var defaultType = _ref.defaultType,
985
+ filter = _ref.filter,
986
+ options = _ref.options;
987
+ if (!filter) return null;
988
+ if (isMulti(defaultType)) {
989
+ return options.filter(function (_ref2) {
990
+ var value = _ref2.value;
991
+ return filter.value.includes(value);
992
+ });
993
+ }
994
+ return neetoCist.findBy({
995
+ value: filter.value
996
+ }, options);
997
+ };
998
+ var buildSingleTimeValue = function buildSingleTimeValue(filter) {
999
+ var _findBy2;
1000
+ if (!filter) return null;
1001
+ return (_findBy2 = neetoCist.findBy({
1002
+ value: filter.value
1003
+ }, TIME_OPTIONS)) !== null && _findBy2 !== void 0 ? _findBy2 : ramda.last(TIME_OPTIONS);
1004
+ };
1005
+ var getOtherProps = function getOtherProps(props) {
1006
+ return ramda.omit(["key", "node", "label", "type", "values", "model", "showRuleSelector"], props);
1007
+ };
1008
+ var buildDropdownOptions = function buildDropdownOptions(_ref3) {
1009
+ var defaultType = _ref3.defaultType,
1010
+ filter = _ref3.filter,
1011
+ options = _ref3.options;
1012
+ options = options.map(ramda.modify("value", function (value) {
1013
+ return value === null || value === void 0 ? void 0 : value.toString();
1014
+ }));
1015
+ if (!filter) return options;
1016
+ if (isMulti(defaultType)) {
1017
+ var selectedOptions = filter.value.map(function (value) {
1018
+ return neetoCist.findBy({
1019
+ value: value
1020
+ }, options) || neetoCist.toLabelAndValue(value);
1021
+ });
1022
+ var nonSelectedOptions = options.filter(function (option) {
1023
+ return !filter.value.includes(option.value);
1024
+ });
1025
+ return ramda.concat(selectedOptions, nonSelectedOptions);
1026
+ }
1027
+ if (!neetoCist.findBy({
1028
+ value: filter.value
1029
+ }, options)) {
1030
+ return ramda.append(neetoCist.toLabelAndValue(filter.value), options);
1031
+ }
1032
+ return options;
1033
+ };
1034
+ var initializeDateRule = function initializeDateRule(filter) {
1035
+ return filter ? neetoCist.findBy({
1036
+ value: filter === null || filter === void 0 ? void 0 : filter.value
1037
+ }, DATE_OPTIONS) || findDateOption(filter, DATE_OPTIONS) : {};
1038
+ };
1039
+ var getDateValue = function getDateValue(value, rule) {
1040
+ if (ramda.isEmpty(value) || ramda.isNil(value)) {
1041
+ return null;
1042
+ }
1043
+ if (rule.value === "custom-date-range") {
1044
+ return value;
1045
+ }
1046
+ return rule.value === "before" ? dayjs(value[1]).add(1, "day") : dayjs(value[0]).subtract(1, "day");
1047
+ };
1048
+ var findDateOption = function findDateOption(filter, options) {
1049
+ var value = filter.value;
1050
+ var isBeforeOrAfter = dayjs(value[1]).diff(dayjs(value[0]), "year") >= 90;
1051
+ if (ramda.not(isBeforeOrAfter)) {
1052
+ return ramda.last(options);
1053
+ }
1054
+ var currentMoment = dayjs();
1055
+ var diffWithStart = Math.abs(currentMoment.diff(dayjs(value[0]), "year"));
1056
+ var diffWithEnd = Math.abs(currentMoment.diff(dayjs(value[1]), "year"));
1057
+ return diffWithStart < diffWithEnd ? neetoCist.findBy({
1058
+ value: "after"
1059
+ }, options) : neetoCist.findBy({
1060
+ value: "before"
1061
+ }, options);
1062
+ };
1063
+ var buildDateValues = function buildDateValues(dates, selectedRule) {
1064
+ if (selectedRule.value === "after") {
1065
+ return [dates.add(1, "day"), dates.add(100, "year")];
1066
+ } else if (selectedRule.value === "before") {
1067
+ return [dates.subtract(100, "year"), dates.subtract(1, "day")];
1068
+ }
1069
+ return dates;
1070
+ };
1071
+ var buildHelpIconProps = function buildHelpIconProps(helpIconProps) {
1072
+ return ramda.mergeDeepRight(DEFAULT_HELP_ICON_PROPS, helpIconProps);
1073
+ };
1074
+
1075
+ var Boolean = function Boolean(_ref) {
1076
+ var column = _ref.column,
1077
+ filter = _ref.filter,
1078
+ handleApplyFilter = _ref.handleApplyFilter,
1079
+ autoFocus = _ref.autoFocus;
1080
+ var key = column.key,
1081
+ _column$defaultType = column.defaultType,
1082
+ defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
1083
+ label = column.label,
1084
+ values = column.values,
1085
+ _column$helpIconProps = column.helpIconProps,
1086
+ helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
1087
+ var options = ramda.isNil(values) || ramda.isEmpty(values) ? DEFAULT_BOOLEAN_OPTIONS : values;
1088
+ var otherProps = getOtherProps(column);
1089
+ var value = buildDropdownValue({
1090
+ defaultType: defaultType,
1091
+ filter: filter,
1092
+ options: options
1093
+ });
1094
+ var _useTranslation = reactI18next.useTranslation(),
1095
+ t = _useTranslation.t;
1096
+ var handleChange = function handleChange(option) {
1097
+ if (ramda.isEmpty(option) || ramda.isNil(option)) {
1098
+ handleApplyFilter({
1099
+ _delete: true
1100
+ });
1101
+ return;
1102
+ }
1103
+ var updatedFilter = buildUpdatedFilter({
1104
+ column: column,
1105
+ defaultType: defaultType,
1106
+ option: option
1107
+ });
1108
+ handleApplyFilter(updatedFilter);
1109
+ };
1110
+ return /*#__PURE__*/React__default["default"].createElement("div", {
1111
+ className: "neeto-filters-pane-filter__item-wrapper"
1112
+ }, /*#__PURE__*/React__default["default"].createElement(neetoui.Select, _extends$1({
1113
+ autoFocus: autoFocus,
1114
+ label: label,
1115
+ options: options,
1116
+ value: value,
1117
+ isClearable: true
1118
+ }, neetoCist.isNotEmpty(helpIconProps) && {
1119
+ labelProps: {
1120
+ helpIconProps: buildHelpIconProps(helpIconProps)
1121
+ }
1122
+ }, {
1123
+ "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(key), "-filter"),
1124
+ strategy: "fixed",
1125
+ placeholder: t("neetoFilters.messages.selectOption", {
1126
+ resource: label
1127
+ }),
1128
+ onChange: handleChange
1129
+ }, otherProps)));
1130
+ };
1131
+ var Boolean$1 = /*#__PURE__*/React__default["default"].memo(Boolean);
1132
+
1133
+ var Datetime = function Datetime(_ref) {
1134
+ var column = _ref.column,
1135
+ filter = _ref.filter,
1136
+ handleApplyFilter = _ref.handleApplyFilter,
1137
+ autoFocus = _ref.autoFocus;
1138
+ var _useState = React.useState(initializeDateRule(filter)),
1139
+ _useState2 = _slicedToArray(_useState, 2),
1140
+ selectedRule = _useState2[0],
1141
+ setSelectedRule = _useState2[1];
1142
+ var _useTranslation = reactI18next.useTranslation(),
1143
+ t = _useTranslation.t;
1144
+ var key = column.key,
1145
+ _column$defaultType = column.defaultType,
1146
+ defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
1147
+ label = column.label,
1148
+ _column$helpIconProps = column.helpIconProps,
1149
+ helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
1150
+ var isDatePickerShown = filter && isCustomDateRange(filter.value);
1151
+ var otherProps = getOtherProps(column);
1152
+ var handleChange = function handleChange(option) {
1153
+ if (ramda.isEmpty(option) || ramda.isNil(option)) {
1154
+ handleApplyFilter({
1155
+ _delete: true
1156
+ });
1157
+ setSelectedRule({});
1158
+ return;
1159
+ }
1160
+ setSelectedRule(option);
1161
+ var updatedFilter = buildUpdatedFilter({
1162
+ column: column,
1163
+ defaultType: defaultType,
1164
+ option: option
1165
+ });
1166
+ handleApplyFilter(updatedFilter);
1167
+ };
1168
+ var handleDateRangeChange = function handleDateRangeChange(dates) {
1169
+ if (ramda.isEmpty(dates) || ramda.isNil(dates)) {
1170
+ handleApplyFilter({
1171
+ _delete: true
1172
+ });
1173
+ setSelectedRule({});
1174
+ return;
1175
+ }
1176
+ var updatedFilter = buildUpdatedFilter({
1177
+ column: column,
1178
+ defaultType: defaultType,
1179
+ option: {
1180
+ value: ramda.pluck("$d", buildDateValues(dates, selectedRule)).map(function (date) {
1181
+ return date.toISOString();
1182
+ })
1183
+ }
1184
+ });
1185
+ handleApplyFilter(updatedFilter);
1186
+ };
1187
+ React.useEffect(function () {
1188
+ ramda.isNil(filter) && setSelectedRule({});
1189
+ }, [filter]);
1190
+ return /*#__PURE__*/React__default["default"].createElement("div", {
1191
+ className: "neeto-filters-pane-filter__item-wrapper"
1192
+ }, /*#__PURE__*/React__default["default"].createElement(neetoui.Select, _extends$1({
1193
+ autoFocus: autoFocus,
1194
+ label: label,
1195
+ isClearable: true,
1196
+ "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(key), "-filter"),
1197
+ options: DATE_OPTIONS,
1198
+ strategy: "fixed",
1199
+ value: selectedRule,
1200
+ placeholder: t("neetoFilters.messages.selectResource", {
1201
+ resource: label
1202
+ })
1203
+ }, neetoCist.isNotEmpty(helpIconProps) && {
1204
+ labelProps: {
1205
+ helpIconProps: buildHelpIconProps(helpIconProps)
1206
+ }
1207
+ }, {
1208
+ onChange: handleChange
1209
+ })), isDatePickerShown && /*#__PURE__*/React__default["default"].createElement(neetoui.DatePicker, _extends$1({
1210
+ "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(key), "-date-range"),
1211
+ getPopupContainer: ramda.prop("parentNode"),
1212
+ type: (selectedRule === null || selectedRule === void 0 ? void 0 : selectedRule.value) === "custom-date-range" ? "range" : "date",
1213
+ value: getDateValue(filter === null || filter === void 0 ? void 0 : filter.value, selectedRule),
1214
+ onChange: handleDateRangeChange
1215
+ }, otherProps)));
1216
+ };
1217
+ var Datetime$1 = /*#__PURE__*/React__default["default"].memo(Datetime);
1218
+
1219
+ var Dropdown = function Dropdown(_ref) {
1220
+ var column = _ref.column,
1221
+ filter = _ref.filter,
1222
+ handleApplyFilter = _ref.handleApplyFilter,
1223
+ autoFocus = _ref.autoFocus;
1224
+ var key = column.key,
1225
+ label = column.label,
1226
+ values = column.values,
1227
+ defaultValue = column.defaultValue,
1228
+ _column$defaultType = column.defaultType,
1229
+ defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
1230
+ _column$isClearable = column.isClearable,
1231
+ isClearable = _column$isClearable === void 0 ? true : _column$isClearable,
1232
+ _column$helpIconProps = column.helpIconProps,
1233
+ helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
1234
+ var otherProps = getOtherProps(column);
1235
+ var options = buildDropdownOptions({
1236
+ defaultType: defaultType,
1237
+ filter: filter,
1238
+ options: values
1239
+ });
1240
+ var value = buildDropdownValue({
1241
+ defaultType: defaultType,
1242
+ filter: filter,
1243
+ options: options
1244
+ });
1245
+ var _useTranslation = reactI18next.useTranslation(),
1246
+ t = _useTranslation.t;
1247
+ var handleChange = function handleChange(option) {
1248
+ if (ramda.isEmpty(option) || ramda.isNil(option)) {
1249
+ handleApplyFilter({
1250
+ _delete: true
1251
+ });
1252
+ return;
1253
+ }
1254
+ var updatedFilter = buildUpdatedFilter({
1255
+ column: column,
1256
+ defaultType: defaultType,
1257
+ option: option
1258
+ });
1259
+ handleApplyFilter(updatedFilter);
1260
+ };
1261
+ return /*#__PURE__*/React__default["default"].createElement("div", {
1262
+ className: "neeto-filters-pane-filter__item-wrapper"
1263
+ }, /*#__PURE__*/React__default["default"].createElement(neetoui.Select, _extends$1({
1264
+ autoFocus: autoFocus,
1265
+ label: label,
1266
+ options: options,
1267
+ value: value,
1268
+ "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(key), "-filter"),
1269
+ isClearable: !defaultValue && isClearable,
1270
+ isMulti: isMulti(defaultType),
1271
+ strategy: "fixed",
1272
+ placeholder: t("neetoFilters.messages.selectResource", {
1273
+ resource: label
1274
+ })
1275
+ }, neetoCist.isNotEmpty(helpIconProps) && {
1276
+ labelProps: {
1277
+ helpIconProps: buildHelpIconProps(helpIconProps)
1278
+ }
1279
+ }, {
1280
+ onChange: handleChange
1281
+ }, otherProps)));
1282
+ };
1283
+ var Dropdown$1 = /*#__PURE__*/React__default["default"].memo(Dropdown);
1284
+
1285
+ var SingleDatetime = function SingleDatetime(_ref) {
1286
+ var column = _ref.column,
1287
+ filter = _ref.filter,
1288
+ filters = _ref.filters,
1289
+ handleApplyFilter = _ref.handleApplyFilter,
1290
+ autoFocus = _ref.autoFocus;
1291
+ var _useState = React.useState(function () {
1292
+ return neetoCist.findBy({
1293
+ value: filter === null || filter === void 0 ? void 0 : filter.rule
1294
+ }, SINGLE_DATE_OPTIONS) || SINGLE_DATE_OPTIONS[0];
1295
+ }),
1296
+ _useState2 = _slicedToArray(_useState, 2),
1297
+ selectedRule = _useState2[0],
1298
+ setSelectedRule = _useState2[1];
1299
+ var key = column.key,
1300
+ _column$defaultType = column.defaultType,
1301
+ defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
1302
+ label = column.label,
1303
+ _column$helpIconProps = column.helpIconProps,
1304
+ helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
1305
+ var otherProps = getOtherProps(column);
1306
+ var datePickerType = selectedRule.value === "between" ? "range" : "date";
1307
+ var value = filter === null || filter === void 0 ? void 0 : filter.value;
1308
+
1309
+ // Reset states when "Clear filters" button is clicked.
1310
+ React.useEffect(function () {
1311
+ if (!ramda.isEmpty(filters)) return;
1312
+ setSelectedRule(SINGLE_DATE_OPTIONS[0]);
1313
+ }, [filters]);
1314
+ var handleRuleChange = function handleRuleChange(ruleOption) {
1315
+ setSelectedRule(ruleOption);
1316
+
1317
+ // Clear value if switched between incompatable types
1318
+ var updateValue = value;
1319
+ if (datePickerType === "range" && ruleOption.value !== "between" || datePickerType === "date" && ruleOption.value === "between") {
1320
+ updateValue = "";
1321
+ }
1322
+ var updatedFilter = buildUpdatedFilter({
1323
+ column: column,
1324
+ defaultType: defaultType,
1325
+ option: {},
1326
+ rule: ruleOption.value,
1327
+ value: updateValue
1328
+ });
1329
+ handleApplyFilter(updatedFilter);
1330
+ };
1331
+ var handleChange = function handleChange(dates) {
1332
+ if (ramda.isEmpty(dates) || ramda.isNil(dates)) {
1333
+ handleApplyFilter({
1334
+ _delete: true
1335
+ });
1336
+ return;
1337
+ }
1338
+ var value = datePickerType === "range" ? ramda.pluck("$d", dates).map(function (date) {
1339
+ return date.toISOString();
1340
+ }) : dates["$d"];
1341
+ var updatedFilter = buildUpdatedFilter({
1342
+ column: column,
1343
+ defaultType: defaultType,
1344
+ option: {},
1345
+ rule: selectedRule.value,
1346
+ value: value
1347
+ });
1348
+ handleApplyFilter(updatedFilter);
1349
+ };
1350
+ return /*#__PURE__*/React__default["default"].createElement("div", {
1351
+ className: "neeto-filters-pane-filter__item-wrapper"
1352
+ }, /*#__PURE__*/React__default["default"].createElement(neetoui.Select, _extends$1({
1353
+ label: label,
1354
+ "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(key), "-filter-rule"),
1355
+ defaultValue: SINGLE_DATE_OPTIONS[0],
1356
+ options: SINGLE_DATE_OPTIONS,
1357
+ strategy: "fixed",
1358
+ value: selectedRule
1359
+ }, neetoCist.isNotEmpty(helpIconProps) && {
1360
+ labelProps: {
1361
+ helpIconProps: buildHelpIconProps(helpIconProps)
1362
+ }
1363
+ }, {
1364
+ onChange: handleRuleChange
1365
+ })), /*#__PURE__*/React__default["default"].createElement(neetoui.DatePicker, _extends$1({
1366
+ autoFocus: autoFocus,
1367
+ value: value,
1368
+ "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(key), "-filter"),
1369
+ getPopupContainer: ramda.prop("parentNode"),
1370
+ type: datePickerType,
1371
+ onChange: handleChange
1372
+ }, otherProps)));
1373
+ };
1374
+
1375
+ var SingleTime = function SingleTime(_ref) {
1376
+ var column = _ref.column,
1377
+ filter = _ref.filter,
1378
+ filters = _ref.filters,
1379
+ handleApplyFilter = _ref.handleApplyFilter,
1380
+ autoFocus = _ref.autoFocus;
1381
+ var _useState = React.useState(function () {
1382
+ return neetoCist.findBy({
1383
+ value: filter === null || filter === void 0 ? void 0 : filter.rule
1384
+ }, SINGLE_TIME_OPTIONS) || SINGLE_TIME_OPTIONS[0];
1385
+ }),
1386
+ _useState2 = _slicedToArray(_useState, 2),
1387
+ selectedRule = _useState2[0],
1388
+ setSelectedRule = _useState2[1];
1389
+ var key = column.key,
1390
+ _column$defaultType = column.defaultType,
1391
+ defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
1392
+ label = column.label,
1393
+ _column$helpIconProps = column.helpIconProps,
1394
+ helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
1395
+ var otherProps = getOtherProps(column);
1396
+ var timePickerType = selectedRule.value === "between" ? "range" : "time";
1397
+ var value = filter === null || filter === void 0 ? void 0 : filter.value;
1398
+ React.useEffect(function () {
1399
+ if (!ramda.isEmpty(filters)) return;
1400
+ setSelectedRule(SINGLE_TIME_OPTIONS[0]);
1401
+ }, [filters]);
1402
+ var handleRuleChange = function handleRuleChange(ruleOption) {
1403
+ setSelectedRule(ruleOption);
1404
+
1405
+ // Clear value if switched between incompatible types
1406
+ var updateValue = value;
1407
+ if (timePickerType === "range" && ruleOption.value !== "between" || timePickerType === "time" && ruleOption.value === "between") {
1408
+ updateValue = "";
1409
+ }
1410
+ var updatedFilter = buildUpdatedFilter({
1411
+ column: column,
1412
+ defaultType: defaultType,
1413
+ option: {},
1414
+ rule: ruleOption.value,
1415
+ value: updateValue
1416
+ });
1417
+ handleApplyFilter(updatedFilter);
1418
+ };
1419
+ var handleChange = function handleChange(times) {
1420
+ var value = timePickerType === "range" ? ramda.pluck("$d", times).map(function (time) {
1421
+ return time.toISOString();
1422
+ }) : times["$d"].toISOString();
1423
+ var updatedFilter = buildUpdatedFilter({
1424
+ column: column,
1425
+ defaultType: defaultType,
1426
+ option: {},
1427
+ rule: selectedRule.value,
1428
+ value: value
1429
+ });
1430
+ handleApplyFilter(updatedFilter);
1431
+ };
1432
+ return /*#__PURE__*/React__default["default"].createElement("div", {
1433
+ className: "neeto-filters-pane-filter__item-wrapper"
1434
+ }, /*#__PURE__*/React__default["default"].createElement(neetoui.Select, _extends$1({
1435
+ label: label,
1436
+ defaultValue: SINGLE_TIME_OPTIONS[0],
1437
+ options: SINGLE_TIME_OPTIONS,
1438
+ strategy: "fixed",
1439
+ value: selectedRule
1440
+ }, neetoCist.isNotEmpty(helpIconProps) && {
1441
+ labelProps: {
1442
+ helpIconProps: buildHelpIconProps(helpIconProps)
1443
+ }
1444
+ }, {
1445
+ onChange: handleRuleChange
1446
+ })), /*#__PURE__*/React__default["default"].createElement(neetoui.TimePicker, _extends$1({
1447
+ autoFocus: autoFocus,
1448
+ value: value,
1449
+ use12Hours: true,
1450
+ className: "w-full",
1451
+ "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(key), "-filter"),
1452
+ format: "h:mm A",
1453
+ getPopupContainer: ramda.prop("parentNode"),
1454
+ type: timePickerType,
1455
+ onChange: handleChange
1456
+ }, otherProps)));
1457
+ };
1458
+
1459
+ var Text = function Text(_ref) {
1460
+ var column = _ref.column,
1461
+ filter = _ref.filter,
1462
+ filters = _ref.filters,
1463
+ handleApplyFilter = _ref.handleApplyFilter,
1464
+ autoFocus = _ref.autoFocus,
1465
+ onClose = _ref.onClose;
1466
+ var key = column.key,
1467
+ _column$defaultType = column.defaultType,
1468
+ defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
1469
+ label = column.label,
1470
+ _column$showRuleSelec = column.showRuleSelector,
1471
+ showRuleSelector = _column$showRuleSelec === void 0 ? false : _column$showRuleSelec,
1472
+ _column$helpIconProps = column.helpIconProps,
1473
+ helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
1474
+ var otherProps = getOtherProps(column);
1475
+ var ruleOptions = buildRuleOptions({
1476
+ defaultType: defaultType
1477
+ });
1478
+ var inputType = defaultType === "text" || defaultType === "custom.text" ? "text" : "number";
1479
+ var _useState = React.useState(filter === null || filter === void 0 ? void 0 : filter.value),
1480
+ _useState2 = _slicedToArray(_useState, 2),
1481
+ inputValue = _useState2[0],
1482
+ setInputValue = _useState2[1];
1483
+ var _useState3 = React.useState(function () {
1484
+ return neetoCist.findBy({
1485
+ value: filter === null || filter === void 0 ? void 0 : filter.rule
1486
+ }, ruleOptions) || ruleOptions[0];
1487
+ }),
1488
+ _useState4 = _slicedToArray(_useState3, 2),
1489
+ selectedRule = _useState4[0],
1490
+ setSelectedRule = _useState4[1];
1491
+ var debouncedInputValue = reactUtils.useDebounce(inputValue);
1492
+ var _useTranslation = reactI18next.useTranslation(),
1493
+ t = _useTranslation.t;
1494
+ var handleUpdateAndApplyFilter = function handleUpdateAndApplyFilter() {
1495
+ var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : debouncedInputValue;
1496
+ var rule = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : selectedRule;
1497
+ if (ramda.equals(filter === null || filter === void 0 ? void 0 : filter.value, value) && ramda.equals(selectedRule, rule)) return;
1498
+ var updatedFilter = buildUpdatedFilter({
1499
+ column: column,
1500
+ defaultType: defaultType,
1501
+ option: {},
1502
+ rule: rule.value,
1503
+ value: value.trim()
1504
+ });
1505
+ handleApplyFilter(updatedFilter);
1506
+ };
1507
+ var handleKeydown = function handleKeydown(e) {
1508
+ if (!(e.key === "Enter")) return;
1509
+ handleUpdateAndApplyFilter(inputValue);
1510
+ onClose();
1511
+ };
1512
+ var handleRuleChange = function handleRuleChange(ruleOption) {
1513
+ setSelectedRule(ruleOption);
1514
+ if (!debouncedInputValue) return;
1515
+ handleUpdateAndApplyFilter(debouncedInputValue, ruleOption);
1516
+ };
1517
+
1518
+ // Reset states when "Clear filters" button is clicked.
1519
+ React.useEffect(function () {
1520
+ (ramda.isEmpty(filters) || ramda.isNil(filter)) && setInputValue("");
1521
+ }, [filter]);
1522
+ React.useEffect(function () {
1523
+ if (!debouncedInputValue) {
1524
+ !isUndefinedOrEmpty(filter) && handleApplyFilter({
1525
+ _delete: true
1526
+ });
1527
+ return;
1528
+ }
1529
+ handleUpdateAndApplyFilter();
1530
+ }, [debouncedInputValue]);
1531
+ return /*#__PURE__*/React__default["default"].createElement("div", {
1532
+ className: "neeto-filters-pane-filter__item-wrapper"
1533
+ }, showRuleSelector && /*#__PURE__*/React__default["default"].createElement(neetoui.Select, _extends$1({
1534
+ label: label,
1535
+ "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(key), "-filter-rule"),
1536
+ defaultValue: ruleOptions[0],
1537
+ options: ruleOptions,
1538
+ strategy: "fixed",
1539
+ value: selectedRule,
1540
+ onChange: handleRuleChange
1541
+ }, neetoCist.isNotEmpty(helpIconProps) && {
1542
+ labelProps: {
1543
+ helpIconProps: buildHelpIconProps(helpIconProps)
1544
+ }
1545
+ })), /*#__PURE__*/React__default["default"].createElement(neetoui.Input, _extends$1({
1546
+ autoFocus: autoFocus,
1547
+ "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(key), "-filter"),
1548
+ label: !showRuleSelector && label,
1549
+ type: inputType,
1550
+ value: inputValue
1551
+ }, neetoCist.isNotEmpty(helpIconProps) && {
1552
+ labelProps: {
1553
+ helpIconProps: buildHelpIconProps(helpIconProps)
1554
+ }
1555
+ }, {
1556
+ placeholder: t("neetoFilters.messages.enterResource", {
1557
+ resource: label
1558
+ }),
1559
+ onChange: function onChange(event) {
1560
+ return setInputValue(event.target.value);
1561
+ },
1562
+ onKeyDown: handleKeydown
1563
+ }, otherProps)));
1564
+ };
1565
+
1566
+ var Time = function Time(_ref) {
1567
+ var column = _ref.column,
1568
+ filter = _ref.filter,
1569
+ handleApplyFilter = _ref.handleApplyFilter,
1570
+ autoFocus = _ref.autoFocus;
1571
+ var key = column.key,
1572
+ _column$defaultType = column.defaultType,
1573
+ defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType,
1574
+ label = column.label,
1575
+ _column$helpIconProps = column.helpIconProps,
1576
+ helpIconProps = _column$helpIconProps === void 0 ? {} : _column$helpIconProps;
1577
+ var otherProps = getOtherProps(column);
1578
+ var value = buildSingleTimeValue(filter);
1579
+ var isCustomTimeRangeShown = filter && isCustomTimeRange(filter.value);
1580
+ var _useTranslation = reactI18next.useTranslation(),
1581
+ t = _useTranslation.t;
1582
+ var handleChange = function handleChange(option) {
1583
+ if (ramda.isEmpty(option) || ramda.isNil(option)) {
1584
+ handleApplyFilter({
1585
+ _delete: true
1586
+ });
1587
+ return;
1588
+ }
1589
+ var updatedFilter = buildUpdatedFilter({
1590
+ column: column,
1591
+ defaultType: defaultType,
1592
+ option: option
1593
+ });
1594
+ handleApplyFilter(updatedFilter);
1595
+ };
1596
+ var handleTimeRangeChange = function handleTimeRangeChange(times) {
1597
+ var updatedFilter = buildUpdatedFilter({
1598
+ column: column,
1599
+ defaultType: defaultType,
1600
+ option: {
1601
+ value: ramda.pluck("$d", times).map(function (time) {
1602
+ return time.toISOString();
1603
+ })
1604
+ }
1605
+ });
1606
+ handleApplyFilter(updatedFilter);
1607
+ };
1608
+ return /*#__PURE__*/React__default["default"].createElement("div", {
1609
+ className: "neeto-filters-pane-filter__item-wrapper"
1610
+ }, /*#__PURE__*/React__default["default"].createElement(neetoui.Select, _extends$1({
1611
+ autoFocus: autoFocus,
1612
+ label: label,
1613
+ value: value,
1614
+ isClearable: true,
1615
+ "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(key), "-filter"),
1616
+ options: TIME_OPTIONS,
1617
+ strategy: "fixed",
1618
+ placeholder: t("neetoFilters.messages.selectResource", {
1619
+ resource: label
1620
+ })
1621
+ }, neetoCist.isNotEmpty(helpIconProps) && {
1622
+ labelProps: {
1623
+ helpIconProps: buildHelpIconProps(helpIconProps)
1624
+ }
1625
+ }, {
1626
+ onChange: handleChange
1627
+ })), isCustomTimeRangeShown && /*#__PURE__*/React__default["default"].createElement(neetoui.TimePicker, _extends$1({
1628
+ use12Hours: true,
1629
+ "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(key), "-date-range"),
1630
+ format: "h:mm A",
1631
+ getPopupContainer: ramda.prop("parentNode"),
1632
+ type: "range",
1633
+ value: filter.value,
1634
+ onChange: handleTimeRangeChange
1635
+ }, otherProps)));
1636
+ };
1637
+ var Time$1 = /*#__PURE__*/React__default["default"].memo(Time);
1638
+
1639
+ var Item = function Item(_ref) {
1640
+ var column = _ref.column,
1641
+ filters = _ref.filters,
1642
+ onChange = _ref.onChange,
1643
+ autoFocus = _ref.autoFocus,
1644
+ _ref$onClose = _ref.onClose,
1645
+ onClose = _ref$onClose === void 0 ? neetoCist.noop : _ref$onClose;
1646
+ var key = column.key,
1647
+ _column$defaultType = column.defaultType,
1648
+ defaultType = _column$defaultType === void 0 ? column.type : _column$defaultType;
1649
+ var filter = React.useMemo(function () {
1650
+ return neetoCist.findBy({
1651
+ key: key
1652
+ }, filters);
1653
+ }, [filters, key]);
1654
+ var handleApplyFilter = function handleApplyFilter(updatedFilter) {
1655
+ if (updatedFilter._delete) onChange(neetoCist.removeBy({
1656
+ key: key
1657
+ }, filters));else if (!filter) onChange(ramda.append(updatedFilter, filters));else onChange(neetoCist.replaceBy({
1658
+ key: key
1659
+ }, updatedFilter, filters));
1660
+ };
1661
+ if (isText(defaultType) || isDigit(defaultType)) {
1662
+ return /*#__PURE__*/React__default["default"].createElement(Text, {
1663
+ autoFocus: autoFocus,
1664
+ column: column,
1665
+ filter: filter,
1666
+ filters: filters,
1667
+ handleApplyFilter: handleApplyFilter,
1668
+ onClose: onClose
1669
+ });
1670
+ }
1671
+ if (isDate(defaultType)) {
1672
+ return /*#__PURE__*/React__default["default"].createElement(Datetime$1, {
1673
+ autoFocus: autoFocus,
1674
+ column: column,
1675
+ filter: filter,
1676
+ handleApplyFilter: handleApplyFilter
1677
+ });
1678
+ }
1679
+ if (isTime(defaultType)) {
1680
+ return /*#__PURE__*/React__default["default"].createElement(Time$1, {
1681
+ autoFocus: autoFocus,
1682
+ column: column,
1683
+ filter: filter,
1684
+ handleApplyFilter: handleApplyFilter
1685
+ });
1686
+ }
1687
+ if (isSingleDate(defaultType)) {
1688
+ return /*#__PURE__*/React__default["default"].createElement(SingleDatetime, {
1689
+ autoFocus: autoFocus,
1690
+ column: column,
1691
+ filter: filter,
1692
+ filters: filters,
1693
+ handleApplyFilter: handleApplyFilter
1694
+ });
1695
+ }
1696
+ if (isSingleTime(defaultType)) {
1697
+ return /*#__PURE__*/React__default["default"].createElement(SingleTime, {
1698
+ autoFocus: autoFocus,
1699
+ column: column,
1700
+ filter: filter,
1701
+ filters: filters,
1702
+ handleApplyFilter: handleApplyFilter
1703
+ });
1704
+ }
1705
+ if (isBoolean(defaultType) || isCheckbox(defaultType)) {
1706
+ return /*#__PURE__*/React__default["default"].createElement(Boolean$1, {
1707
+ autoFocus: autoFocus,
1708
+ column: column,
1709
+ filter: filter,
1710
+ handleApplyFilter: handleApplyFilter
1711
+ });
1712
+ }
1713
+ return /*#__PURE__*/React__default["default"].createElement(Dropdown$1, {
1714
+ autoFocus: autoFocus,
1715
+ column: column,
1716
+ filter: filter,
1717
+ handleApplyFilter: handleApplyFilter
1718
+ });
1719
+ };
1720
+
1721
+ var STEPS = {
1722
+ ADD: "add",
1723
+ COLUMN: "column",
1724
+ VALUE: "value"
1725
+ };
1726
+
1727
+ var AddFilter = function AddFilter(_ref) {
1728
+ var _findBy;
1729
+ var columns = _ref.columns,
1730
+ filters = _ref.filters,
1731
+ handleChange = _ref.handleChange,
1732
+ handleClearFilter = _ref.handleClearFilter,
1733
+ _ref$disabled = _ref.disabled,
1734
+ disabled = _ref$disabled === void 0 ? false : _ref$disabled;
1735
+ var _useTranslation = reactI18next.useTranslation(),
1736
+ t = _useTranslation.t;
1737
+ var _useState = React.useState({
1738
+ step: STEPS.ADD,
1739
+ column: {}
1740
+ }),
1741
+ _useState2 = _slicedToArray(_useState, 2),
1742
+ selectedColumn = _useState2[0],
1743
+ setSelectedColumn = _useState2[1];
1744
+
1745
+ // Disable the add button when
1746
+ // 1. No value is entered for previous filter
1747
+ // 2. There are no more columns
1748
+ var disableAddButton = selectedColumn.step !== STEPS.ADD && neetoCist.isNotPresent((_findBy = neetoCist.findBy({
1749
+ key: selectedColumn.column.key
1750
+ }, filters)) === null || _findBy === void 0 ? void 0 : _findBy.value) || ramda.isEmpty(columns);
1751
+ 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", {
1752
+ className: "flex w-full gap-4"
1753
+ }, selectedColumn.step === STEPS.COLUMN && /*#__PURE__*/React__default["default"].createElement(neetoui.Select, {
1754
+ isSearchable: true,
1755
+ label: t("neetoFilters.segments.newFilter"),
1756
+ optionRemapping: {
1757
+ label: "label",
1758
+ value: "key"
1759
+ },
1760
+ options: columns,
1761
+ placeholder: t("neetoFilters.segments.selectFilter"),
1762
+ onChange: function onChange(column) {
1763
+ return setSelectedColumn({
1764
+ step: STEPS.VALUE,
1765
+ column: column
1766
+ });
1767
+ }
1768
+ }), selectedColumn.step === STEPS.VALUE && /*#__PURE__*/React__default["default"].createElement(Item, {
1769
+ filters: filters,
1770
+ autoFocus: true,
1771
+ column: selectedColumn.column,
1772
+ onChange: handleChange
1773
+ }), /*#__PURE__*/React__default["default"].createElement(neetoui.Button, {
1774
+ className: "mt-6 self-center",
1775
+ icon: neetoIcons.IndeterminateCircle,
1776
+ style: "text",
1777
+ onClick: function onClick() {
1778
+ handleClearFilter(selectedColumn.column);
1779
+ setSelectedColumn(ramda.assoc("step", STEPS.ADD));
1780
+ }
1781
+ })), /*#__PURE__*/React__default["default"].createElement(AddFilter, {
1782
+ filters: filters,
1783
+ handleChange: handleChange,
1784
+ handleClearFilter: handleClearFilter,
1785
+ columns: columns.filter(function (_ref2) {
1786
+ var key = _ref2.key;
1787
+ return !neetoCist.existsBy({
1788
+ key: key
1789
+ }, filters);
1790
+ }),
1791
+ disabled: disableAddButton
1792
+ })) : /*#__PURE__*/React__default["default"].createElement(neetoui.Button, {
1793
+ disabled: disabled,
1794
+ className: "self-start",
1795
+ icon: neetoIcons.Plus,
1796
+ iconPosition: "left",
1797
+ label: t("neetoFilters.segments.addFilter"),
1798
+ style: "link",
1799
+ onClick: function onClick() {
1800
+ return setSelectedColumn(ramda.assoc("step", STEPS.COLUMN));
1801
+ }
1802
+ }));
1803
+ };
1804
+
1805
+ var buildSegmentsValidationSchema = function buildSegmentsValidationSchema(defaultSegmentName) {
1806
+ return yup__namespace.object({
1807
+ name: yup__namespace.string().trim().required(i18next.t("neetoFilters.segments.nameIsRequired")).test({
1808
+ name: "not-default-segment-name",
1809
+ test: function test(value) {
1810
+ return (value === null || value === void 0 ? void 0 : value.toLocaleLowerCase()) !== defaultSegmentName.toLocaleLowerCase();
1811
+ },
1812
+ message: i18next.t("neetoFilters.segments.reservedNameErrorMessage")
1813
+ })
1814
+ });
1815
+ };
1816
+
1817
+ 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; }
1818
+ 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; }
1819
+ var SegmentForm = function SegmentForm(_ref) {
1820
+ var _ref$isEdit = _ref.isEdit,
1821
+ isEdit = _ref$isEdit === void 0 ? false : _ref$isEdit,
1822
+ segmentFormInitialRef = _ref.segmentFormInitialRef,
1823
+ isOpen = _ref.isOpen,
1824
+ onClose = _ref.onClose,
1825
+ isSubmitting = _ref.isSubmitting,
1826
+ handleSubmit = _ref.handleSubmit,
1827
+ defaultSegmentName = _ref.defaultSegmentName,
1828
+ initialValues = _ref.initialValues,
1829
+ customFilters = _ref.customFilters,
1830
+ columns = _ref.columns,
1831
+ filters = _ref.filters,
1832
+ childrenKeys = _ref.childrenKeys;
1833
+ var history = reactRouterDom_min.useHistory();
1834
+ var _useTranslation = reactI18next.useTranslation(),
1835
+ t = _useTranslation.t;
1836
+ var _buildFilteredColumns = buildFilteredColumns({
1837
+ searchTerm: "",
1838
+ columns: columns
1839
+ }),
1840
+ _buildFilteredColumns2 = _buildFilteredColumns.groupedColumns,
1841
+ groupedColumns = _buildFilteredColumns2 === void 0 ? [] : _buildFilteredColumns2,
1842
+ _buildFilteredColumns3 = _buildFilteredColumns.ungroupedColumns,
1843
+ ungroupedColumns = _buildFilteredColumns3 === void 0 ? [] : _buildFilteredColumns3;
1844
+ var handleChange = function handleChange(newFilters) {
1845
+ var isClearAll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
1846
+ var params = buildUrlFromFilters(_objectSpread$4({
1847
+ columns: columns,
1848
+ filters: newFilters
1849
+ }, isClearAll && {
1850
+ isClearAll: true,
1851
+ childrenKeys: childrenKeys
1852
+ }));
1853
+ history.push({
1854
+ search: params
1855
+ });
1856
+ };
1857
+ var handleClearFilter = function handleClearFilter(column, values, setFieldValue) {
1858
+ var formState = [{
1859
+ conditions: neetoCist.removeBy({
1860
+ key: column.key
1861
+ }, values.filters[0].conditions)
1862
+ }];
1863
+ var globalState = neetoCist.removeBy({
1864
+ key: column.key
1865
+ }, filters);
1866
+ setFieldValue("filters", formState);
1867
+ handleChange(globalState);
1868
+ };
1869
+ return /*#__PURE__*/React__default["default"].createElement(neetoui.Pane, {
1870
+ isOpen: isOpen,
1871
+ onClose: onClose,
1872
+ initialFocusRef: segmentFormInitialRef
1873
+ }, /*#__PURE__*/React__default["default"].createElement(neetoui.Pane.Header, null, /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
1874
+ style: "h2",
1875
+ weight: "semibold"
1876
+ }, isEdit ? t("neetoFilters.segments.editSegment") : t("neetoFilters.segments.addNewSegment"))), /*#__PURE__*/React__default["default"].createElement(formik.Form, {
1877
+ className: "w-full",
1878
+ formProps: {
1879
+ noValidate: true
1880
+ },
1881
+ formikProps: {
1882
+ initialValues: initialValues,
1883
+ validateOnChange: true,
1884
+ validateOnBlur: true,
1885
+ validationSchema: buildSegmentsValidationSchema(defaultSegmentName),
1886
+ onSubmit: handleSubmit
1887
+ }
1888
+ }, function (_ref2) {
1889
+ var errors = _ref2.errors,
1890
+ values = _ref2.values,
1891
+ setFieldValue = _ref2.setFieldValue;
1892
+ 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, {
1893
+ className: "w-full flex-grow-0",
1894
+ error: errors.name,
1895
+ label: t("neetoFilters.segments.name"),
1896
+ name: "name",
1897
+ placeholder: t("neetoFilters.segments.segmentName"),
1898
+ ref: segmentFormInitialRef
1899
+ }), /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
1900
+ className: "mb-2 mt-4",
1901
+ style: "h4"
1902
+ }, t("neetoFilters.common.filters")), /*#__PURE__*/React__default["default"].createElement("div", {
1903
+ className: "neeto-filters-pane-filter__body flex w-full flex-col gap-5"
1904
+ }, ungroupedColumns.filter(function (_ref3) {
1905
+ var key = _ref3.key;
1906
+ return neetoCist._existsBy({
1907
+ key: key
1908
+ }, values.filters[0].conditions);
1909
+ }).map(function (column) {
1910
+ return /*#__PURE__*/React__default["default"].createElement("div", {
1911
+ className: "flex w-full gap-4",
1912
+ key: column.key
1913
+ }, /*#__PURE__*/React__default["default"].createElement(Item, {
1914
+ column: column,
1915
+ filters: filters,
1916
+ autoFocus: column.key === isOpen,
1917
+ onChange: function onChange(filters) {
1918
+ setFieldValue("filters", [{
1919
+ conditions: filters
1920
+ }]);
1921
+ handleChange(filters);
1922
+ }
1923
+ }), /*#__PURE__*/React__default["default"].createElement(neetoui.Button, {
1924
+ className: "mt-6 self-center",
1925
+ icon: neetoIcons.IndeterminateCircle,
1926
+ style: "text",
1927
+ onClick: function onClick() {
1928
+ return handleClearFilter(column, values, setFieldValue);
1929
+ }
1930
+ }));
1931
+ }), neetoCist.isPresent(groupedColumns) && /*#__PURE__*/React__default["default"].createElement(neetoui.Accordion, null, groupedColumns.map(function (_ref4) {
1932
+ var group = _ref4.group,
1933
+ columns = _ref4.columns;
1934
+ return /*#__PURE__*/React__default["default"].createElement(neetoui.Accordion.Item, {
1935
+ className: "accordion_item",
1936
+ key: group,
1937
+ title: group
1938
+ }, columns.map(function (column) {
1939
+ return /*#__PURE__*/React__default["default"].createElement(Item, {
1940
+ column: column,
1941
+ filters: filters,
1942
+ autoFocus: column.key === isOpen,
1943
+ key: column.key,
1944
+ onChange: handleChange
1945
+ });
1946
+ }));
1947
+ })), ramda.isEmpty([].concat(_toConsumableArray(groupedColumns), _toConsumableArray(ungroupedColumns))) && /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
1948
+ style: "body2"
1949
+ }, t("neetoFilters.messages.noResourcesFound", {
1950
+ resources: t("neetoFilters.common.columns")
1951
+ })), customFilters, /*#__PURE__*/React__default["default"].createElement(AddFilter, {
1952
+ filters: filters,
1953
+ handleChange: handleChange,
1954
+ columns: ungroupedColumns.filter(function (_ref5) {
1955
+ var key = _ref5.key;
1956
+ return !neetoCist.existsBy({
1957
+ key: key
1958
+ }, filters);
1959
+ }),
1960
+ handleClearFilter: function handleClearFilter(_ref6) {
1961
+ var key = _ref6.key;
1962
+ return handleChange(neetoCist.removeBy({
1963
+ key: key
1964
+ }, filters));
1965
+ }
1966
+ }))), /*#__PURE__*/React__default["default"].createElement(neetoui.Pane.Footer, {
1967
+ className: "flex items-center space-x-2"
1968
+ }, /*#__PURE__*/React__default["default"].createElement(formik.ActionBlock, {
1969
+ cancelButtonProps: {
1970
+ onClick: onClose,
1971
+ disabled: false
1972
+ },
1973
+ submitButtonProps: {
1974
+ disabled: isSubmitting || ramda.isEmpty(filters),
1975
+ loading: isSubmitting
1976
+ }
1977
+ })));
1978
+ }));
1979
+ };
1980
+
1981
+ var QUERY_KEYS = {
1982
+ SEGMENTS_LIST: "segments-list"
1983
+ };
1984
+ var SEGMENTS_STALE_TIME = 900000; // 15 mins
1985
+
1986
+ var DEFAULT_SEGMENTS_CACHE = {
1987
+ segments: []
1988
+ };
1989
+ var SEGMENT_ACTIONS$1 = {
1990
+ EDIT: "edit",
1991
+ CREATE: "create"
1992
+ };
1993
+
1994
+ var SHORTCUTS = {
1995
+ closePane: {
1996
+ sequence: "escape",
1997
+ description: i18next.t("neetoFilters.shortcuts.closePane")
1998
+ },
1999
+ deleteBlock: {
2000
+ sequence: "backspace",
2001
+ description: i18next.t("neetoFilters.shortcuts.deleteBlock")
2002
+ },
2003
+ openFilterPane: {
2004
+ sequence: "enter",
2005
+ description: i18next.t("neetoFilters.shortcuts.openFilterPane")
2006
+ }
2007
+ };
2008
+
2009
+ var buildCustomDateValue = function buildCustomDateValue(value) {
2010
+ var isBeforeOrAfter = Math.abs(dayjs(value[1]).diff(dayjs(value[0]), "year")) >= 90;
2011
+ if (isBeforeOrAfter) {
2012
+ var currentMoment = dayjs();
2013
+ var diffWithStart = Math.abs(currentMoment.diff(dayjs(value[0]), "year"));
2014
+ var diffWithEnd = Math.abs(currentMoment.diff(dayjs(value[1]), "year"));
2015
+ 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")));
2016
+ }
2017
+ return value.map(utils.dateFormat.date).join(" - ");
2018
+ };
2019
+ var buildFilterValue = function buildFilterValue(filter) {
2020
+ var _findBy2;
2021
+ var _filter$defaultType = filter.defaultType,
2022
+ defaultType = _filter$defaultType === void 0 ? filter.type : _filter$defaultType,
2023
+ value = filter.value,
2024
+ rule = filter.rule,
2025
+ _filter$values = filter.values,
2026
+ initialValues = _filter$values === void 0 ? [] : _filter$values;
2027
+ var values = initialValues.map(ramda.modify("value", function (value) {
2028
+ return value.toString();
2029
+ }));
2030
+ if (isDate(defaultType) && isCustomDateRange(value)) {
2031
+ return buildCustomDateValue(value);
2032
+ } else if (isTime(defaultType) && isCustomTimeRange(value)) {
2033
+ return value.map(utils.dateFormat.time).join(" - ");
2034
+ } else if (isDate(defaultType) || isTime(defaultType)) {
2035
+ return neetoCist.humanize(value);
2036
+ } else if (isMulti(defaultType)) {
2037
+ return value.map(function (value) {
2038
+ var _findBy;
2039
+ return ((_findBy = neetoCist.findBy({
2040
+ value: value
2041
+ }, values)) === null || _findBy === void 0 ? void 0 : _findBy.label) || value;
2042
+ }).join(", ");
2043
+ } else if (isSingleDate(defaultType)) {
2044
+ return rule === "between" ? value.map(utils.dateFormat.date).join(" - ") : utils.dateFormat.date(value);
2045
+ } else if (isSingleTime(defaultType)) {
2046
+ return rule === "between" ? value.map(utils.dateFormat.time).join(" - ") : utils.dateFormat.time(value);
2047
+ } else if (isBoolean(defaultType)) {
2048
+ return getLabelFromBool({
2049
+ value: value,
2050
+ values: values
2051
+ });
2052
+ }
2053
+ return ((_findBy2 = neetoCist.findBy({
2054
+ value: value
2055
+ }, values)) === null || _findBy2 === void 0 ? void 0 : _findBy2.label) || value;
2056
+ };
2057
+ var buildRuleValue = function buildRuleValue(_ref) {
2058
+ var rule = _ref.rule,
2059
+ defaultType = _ref.defaultType;
2060
+ if (isText(defaultType)) {
2061
+ return neetoCist.findBy({
2062
+ value: rule
2063
+ }, TEXT_RULES).label;
2064
+ } else if (isDigit(defaultType)) {
2065
+ return neetoCist.findBy({
2066
+ value: rule
2067
+ }, NUMBER_RULES).label;
2068
+ } else if (isSingleDate(defaultType)) {
2069
+ return neetoCist.findBy({
2070
+ value: rule
2071
+ }, SINGLE_DATE_OPTIONS).label;
2072
+ } else if (isSingleTime(defaultType)) {
2073
+ return neetoCist.findBy({
2074
+ value: rule
2075
+ }, SINGLE_TIME_OPTIONS).label;
2076
+ }
2077
+ return "";
2078
+ };
2079
+ var hasOnlyKeywordFilter = function hasOnlyKeywordFilter(filters) {
2080
+ return filters.length === 1 && filters[0].key === SEARCH_TERM_KEY;
2081
+ };
2082
+ var deepCompare = function deepCompare(filters1, filters2) {
2083
+ var comparisonHelper = function comparisonHelper(filters) {
2084
+ return ramda.sortBy(ramda.prop("key"), neetoCist.removeBy({
2085
+ key: SEARCH_TERM_KEY
2086
+ }, ramda.project(["key", "rule", "value"], filters)));
2087
+ };
2088
+ return neetoCist.notEqualsDeep(comparisonHelper(filters1), comparisonHelper(filters2));
2089
+ };
2090
+
2091
+ var Block = function Block(_ref) {
2092
+ var filter = _ref.filter,
2093
+ handleDelete = _ref.handleDelete,
2094
+ setIsPaneOpen = _ref.setIsPaneOpen;
2095
+ var key = filter.key,
2096
+ _filter$defaultType = filter.defaultType,
2097
+ defaultType = _filter$defaultType === void 0 ? filter.type : _filter$defaultType,
2098
+ label = filter.label,
2099
+ rule = filter.rule,
2100
+ defaultValue = filter.defaultValue;
2101
+ var filterValue = buildFilterValue(filter);
2102
+ var ruleContent = buildRuleValue({
2103
+ rule: rule,
2104
+ defaultType: defaultType
2105
+ });
2106
+ var blockLength = label.length + ruleContent.length + filterValue.length;
2107
+ var toolTipDisabled = blockLength <= 50;
2108
+ var blockContent = !toolTipDisabled ? "".concat(filterValue.slice(0, 50 - blockLength), "...") : filterValue;
2109
+ var deleteBlockHotKeyRef = useHotkeys__default["default"](SHORTCUTS.deleteBlock.sequence, function () {
2110
+ return handleDelete(key);
2111
+ }, {
2112
+ mode: "scoped"
2113
+ });
2114
+ var openFilterPaneHotKeyRef = useHotkeys__default["default"](SHORTCUTS.openFilterPane.sequence, function () {
2115
+ return setIsPaneOpen(key);
2116
+ }, {
2117
+ mode: "scoped"
2118
+ });
2119
+ return /*#__PURE__*/React__default["default"].createElement(neetoui.Tooltip, {
2120
+ content: filterValue,
2121
+ disabled: toolTipDisabled,
2122
+ position: "bottom",
2123
+ theme: "light"
2124
+ }, /*#__PURE__*/React__default["default"].createElement("div", {
2125
+ className: "neeto-filters-bar__block",
2126
+ "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(key), "-block"),
2127
+ tabIndex: 0,
2128
+ ref: function ref(node) {
2129
+ deleteBlockHotKeyRef.current = node;
2130
+ openFilterPaneHotKeyRef.current = node;
2131
+ },
2132
+ onClick: function onClick() {
2133
+ return setIsPaneOpen(key);
2134
+ }
2135
+ }, /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
2136
+ style: "body2"
2137
+ }, label, ":"), /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
2138
+ className: "neeto-ui-text-gray-500",
2139
+ style: "body2"
2140
+ }, ruleContent), /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
2141
+ style: "body2"
2142
+ }, blockContent), !defaultValue && /*#__PURE__*/React__default["default"].createElement("div", {
2143
+ className: "neeto-filters-bar__block-close"
2144
+ }, /*#__PURE__*/React__default["default"].createElement(neetoIcons.Close, {
2145
+ "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(key), "-block-close-btn"),
2146
+ size: 16,
2147
+ strokeWidth: 2,
2148
+ onClick: function onClick(event) {
2149
+ event.stopPropagation();
2150
+ handleDelete(key);
2151
+ }
2152
+ }))));
2153
+ };
2154
+
2155
+ var ChildBlock = function ChildBlock(_ref) {
2156
+ var childKey = _ref.childKey,
2157
+ setIsPaneOpen = _ref.setIsPaneOpen,
2158
+ handleDelete = _ref.handleDelete;
2159
+ var deleteBlockHotKeyRef = useHotkeys__default["default"](SHORTCUTS.deleteBlock.sequence, function () {
2160
+ return handleDelete(childKey);
2161
+ }, {
2162
+ mode: "scoped"
2163
+ });
2164
+ var openFilterPaneHotKeyRef = useHotkeys__default["default"](SHORTCUTS.openFilterPane.sequence, function () {
2165
+ return setIsPaneOpen(childKey);
2166
+ }, {
2167
+ mode: "scoped"
2168
+ });
2169
+ return /*#__PURE__*/React__default["default"].createElement("div", {
2170
+ className: "neeto-filters-bar__block",
2171
+ "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(childKey), "-block"),
2172
+ tabIndex: 0,
2173
+ ref: function ref(node) {
2174
+ deleteBlockHotKeyRef.current = node;
2175
+ openFilterPaneHotKeyRef.current = node;
2176
+ },
2177
+ onClick: function onClick() {
2178
+ return setIsPaneOpen(childKey);
2179
+ }
2180
+ }, /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
2181
+ style: "body2",
2182
+ weight: "medium"
2183
+ }, childKey), /*#__PURE__*/React__default["default"].createElement("div", {
2184
+ className: "neeto-filters-bar__block-close"
2185
+ }, /*#__PURE__*/React__default["default"].createElement(neetoIcons.Close, {
2186
+ "data-cy": "neeto-filters-".concat(neetoCist.hyphenate(childKey), "-block-close-btn"),
2187
+ size: 16,
2188
+ strokeWidth: 2,
2189
+ onClick: function onClick(event) {
2190
+ event.stopPropagation();
2191
+ handleDelete(childKey);
2192
+ }
2193
+ })));
2194
+ };
2195
+
2196
+ var FilterBar = function FilterBar(_ref) {
2197
+ var filters = _ref.filters,
2198
+ setIsSavePaneOpen = _ref.setIsSavePaneOpen,
2199
+ setIsPaneOpen = _ref.setIsPaneOpen,
2200
+ childrenKeys = _ref.childrenKeys,
2201
+ nonHiddenFilters = _ref.nonHiddenFilters,
2202
+ childrenFiltersApplied = _ref.childrenFiltersApplied,
2203
+ keywordFilter = _ref.keywordFilter,
2204
+ handleApplyFilters = _ref.handleApplyFilters;
2205
+ var _useTranslation = reactI18next.useTranslation(),
2206
+ t = _useTranslation.t;
2207
+ var history = reactRouterDom_min.useHistory();
2208
+ var searchParams = reactUtils.useQueryParams({
2209
+ toCamelCase: false
2210
+ });
2211
+ var handleDelete = function handleDelete(key) {
2212
+ if (key === SEARCH_TERM_KEY) {
2213
+ var params = ramda.omit([SEARCH_TERM_KEY], getSnakeCasedQueryParams());
2214
+ var pathname = window.location.pathname;
2215
+ history.push(utils.buildUrl(pathname, params));
2216
+ return;
2217
+ }
2218
+ if (childrenKeys.includes(key)) {
2219
+ var _params = ramda.omit([key], getSnakeCasedQueryParams());
2220
+ var _pathname = window.location.pathname;
2221
+ history.push(utils.buildUrl(_pathname, _params));
2222
+ }
2223
+ var newFilters = neetoCist.removeBy({
2224
+ key: key
2225
+ }, filters);
2226
+ handleApplyFilters(newFilters);
2227
+ };
2228
+ var handleClearAll = function handleClearAll() {
2229
+ var params = isKeywordFilterPresent(keywordFilter) ? ramda.omit([SEARCH_TERM_KEY], getSnakeCasedQueryParams()) : getSnakeCasedQueryParams();
2230
+ var pathname = window.location.pathname;
2231
+ history.push(utils.buildUrl(pathname, params));
2232
+ handleApplyFilters([], true);
2233
+ };
2234
+ var hideClearButton = nonHiddenFilters.every(function (_ref2) {
2235
+ var defaultValue = _ref2.defaultValue,
2236
+ isClearable = _ref2.isClearable;
2237
+ return defaultValue && !isClearable;
2238
+ }) && !childrenFiltersApplied;
2239
+ return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, nonHiddenFilters.map(function (filter) {
2240
+ var _filter$suffixCompone;
2241
+ return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, {
2242
+ key: filter.key
2243
+ }, /*#__PURE__*/React__default["default"].createElement(Block, {
2244
+ filter: filter,
2245
+ handleDelete: handleDelete,
2246
+ setIsPaneOpen: setIsPaneOpen
2247
+ }), (_filter$suffixCompone = filter.suffixComponent) === null || _filter$suffixCompone === void 0 ? void 0 : _filter$suffixCompone.call(filter), /*#__PURE__*/React__default["default"].createElement("div", {
2248
+ className: "neeto-filters-bar--separator"
2249
+ }));
2250
+ }), childrenKeys.filter(function (childKey) {
2251
+ return ramda.has(childKey, searchParams);
2252
+ }).map(function (childKey) {
2253
+ return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, {
2254
+ key: childKey
2255
+ }, /*#__PURE__*/React__default["default"].createElement(ChildBlock, {
2256
+ childKey: childKey,
2257
+ handleDelete: handleDelete,
2258
+ setIsPaneOpen: setIsPaneOpen
2259
+ }), /*#__PURE__*/React__default["default"].createElement("div", {
2260
+ className: "neeto-filters-bar--separator"
2261
+ }));
2262
+ }), !hasOnlyKeywordFilter(filters) && /*#__PURE__*/React__default["default"].createElement(neetoui.Button, {
2263
+ label: t("neetoFilters.segments.saveAsNewSegment"),
2264
+ style: "secondary",
2265
+ onClick: function onClick() {
2266
+ setIsPaneOpen(false);
2267
+ setIsSavePaneOpen({
2268
+ action: SEGMENT_ACTIONS$1.CREATE
2269
+ });
2270
+ }
2271
+ }), !hideClearButton && /*#__PURE__*/React__default["default"].createElement(neetoui.Button, {
2272
+ "data-cy": "neeto-filters-bar-clear-btn",
2273
+ label: t("neetoFilters.common.clearFilters"),
2274
+ style: "text",
2275
+ onClick: handleClearAll
2276
+ }));
2277
+ };
2278
+
2279
+ var fetch = function fetch(params) {
2280
+ return axios__default["default"].get(SEGMENTS_BASE_URL, {
2281
+ params: params
2282
+ });
2283
+ };
2284
+ var show = function show(id) {
2285
+ return axios__default["default"].get("".concat(SEGMENTS_BASE_URL, "/").concat(id), {
2286
+ transformResponseCase: false
2287
+ });
2288
+ };
2289
+ var create = function create(payload) {
2290
+ return axios__default["default"].post(SEGMENTS_BASE_URL, {
2291
+ segment: payload
2292
+ }, {
2293
+ showToastr: false
2294
+ });
2295
+ };
2296
+ var update = function update(_ref) {
2297
+ var id = _ref.id,
2298
+ payload = _ref.payload,
2299
+ _ref$showToastr = _ref.showToastr,
2300
+ showToastr = _ref$showToastr === void 0 ? true : _ref$showToastr;
2301
+ return axios__default["default"].put("".concat(SEGMENTS_BASE_URL, "/").concat(id), payload, {
2302
+ showToastr: showToastr
2303
+ });
2304
+ };
2305
+ var destroy = function destroy(id) {
2306
+ return axios__default["default"]["delete"]("".concat(SEGMENTS_BASE_URL, "/").concat(id));
2307
+ };
2308
+ var segmentsApi = {
2309
+ fetch: fetch,
2310
+ show: show,
2311
+ create: create,
2312
+ update: update,
2313
+ destroy: destroy
2314
+ };
2315
+
2316
+ 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; }
2317
+ 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; }
2318
+ var SEGMENTS_LIST = QUERY_KEYS.SEGMENTS_LIST;
2319
+ var useFetchSegments = function useFetchSegments(_ref) {
2320
+ var entity = _ref.entity,
2321
+ _ref$searchTerm = _ref.searchTerm,
2322
+ searchTerm = _ref$searchTerm === void 0 ? "" : _ref$searchTerm;
2323
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
2324
+ return reactQuery.useQuery([SEGMENTS_LIST, entity, searchTerm], function () {
2325
+ return segmentsApi.fetch({
2326
+ entity: entity,
2327
+ searchTerm: searchTerm
2328
+ });
2329
+ }, ramda.mergeRight({
2330
+ staleTime: SEGMENTS_STALE_TIME,
2331
+ select: ramda.prop("segments")
2332
+ }, options));
2333
+ };
2334
+ var useCreateSegment = function useCreateSegment(options) {
2335
+ return reactUtils.useMutationWithInvalidation(segmentsApi.create, _objectSpread$3({
2336
+ keysToInvalidate: [SEGMENTS_LIST]
2337
+ }, options));
2338
+ };
2339
+ var useUpdateSegment = function useUpdateSegment(options) {
2340
+ return reactUtils.useMutationWithInvalidation(segmentsApi.update, _objectSpread$3({
2341
+ keysToInvalidate: [SEGMENTS_LIST]
2342
+ }, options));
2343
+ };
2344
+ var useDestroySegment = function useDestroySegment(options) {
2345
+ return reactUtils.useMutationWithInvalidation(segmentsApi.destroy, _objectSpread$3({
2346
+ keysToInvalidate: [SEGMENTS_LIST]
2347
+ }, options));
2348
+ };
2349
+
2350
+ 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; }
2351
+ 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; }
2352
+ var useSegment = function useSegment(_ref) {
2353
+ var entity = _ref.entity,
2354
+ keyword = _ref.keyword,
2355
+ columns = _ref.columns,
2356
+ childrenKeys = _ref.childrenKeys;
2357
+ var history = reactRouterDom.useHistory();
2358
+ var _useTranslation = reactI18next.useTranslation(),
2359
+ t = _useTranslation.t;
2360
+ var initialRenderRef = React.useRef(true);
2361
+ var _useQueryParams = reactUtils.useQueryParams(),
2362
+ segmentId = _useQueryParams.segmentId;
2363
+ var _useState = React.useState({
2364
+ action: undefined
2365
+ }),
2366
+ _useState2 = _slicedToArray(_useState, 2),
2367
+ isSavePaneOpen = _useState2[0],
2368
+ setIsSavePaneOpen = _useState2[1];
2369
+ var _useCreateSegment = useCreateSegment(),
2370
+ createSegment = _useCreateSegment.mutate,
2371
+ isCreating = _useCreateSegment.isLoading;
2372
+ var _useUpdateSegment = useUpdateSegment(),
2373
+ updateSegment = _useUpdateSegment.mutate,
2374
+ isUpdating = _useUpdateSegment.isLoading;
2375
+ var isSubmitting = isCreating || isUpdating;
2376
+ var searchParams = reactUtils.useQueryParams({
2377
+ toCamelCase: false
2378
+ });
2379
+ var keywordValue = searchParams[SEARCH_TERM_KEY] || "";
2380
+ var isEdit = isSavePaneOpen.action === SEGMENT_ACTIONS$1.EDIT;
2381
+ var keywordFilter = _objectSpread$2(_objectSpread$2({
2382
+ type: "text",
2383
+ rule: "contains",
2384
+ label: t("neetoFilters.common.searchTerm")
2385
+ }, keyword), {}, {
2386
+ key: SEARCH_TERM_KEY,
2387
+ value: keywordValue
2388
+ });
2389
+ var filters = buildFiltersFromSearchParams(isKeywordFilterPresent(keywordFilter) && neetoCist.isNotEmpty(keywordValue) ? [keywordFilter].concat(_toConsumableArray(columns)) : columns);
2390
+ var nonHiddenFilters = neetoCist.removeBy({
2391
+ hidden: true
2392
+ }, filters);
2393
+ var handleApplyFilters = function handleApplyFilters(newFilters, isClearAll) {
2394
+ var params = buildUrlFromFilters(_objectSpread$2({
2395
+ columns: columns,
2396
+ filters: isKeywordFilterPresent(keywordFilter) && neetoCist.isNotEmpty(getSearchTermFromUrl()) ? [].concat(_toConsumableArray(newFilters), [keywordFilter]) : newFilters
2397
+ }, isClearAll && {
2398
+ isClearAll: true,
2399
+ childrenKeys: childrenKeys
2400
+ }));
2401
+ history.push({
2402
+ search: params
2403
+ });
2404
+ };
2405
+ var childrenFiltersApplied = childrenKeys.some(function (key) {
2406
+ return ramda.has(key, searchParams);
2407
+ });
2408
+ React.useEffect(function () {
2409
+ if (initialRenderRef.current) {
2410
+ initialRenderRef.current = false;
2411
+ return neetoCist.noop;
2412
+ }
2413
+ var handler = setTimeout(function () {
2414
+ handleApplyFilters(filters);
2415
+ }, 500);
2416
+ return function () {
2417
+ return clearTimeout(handler);
2418
+ };
2419
+ }, [keywordValue]);
2420
+ var handleCreateSuccess = function handleCreateSuccess(_ref2) {
2421
+ var _filters$;
2422
+ var _ref2$segment = _ref2.segment,
2423
+ id = _ref2$segment.id,
2424
+ filters = _ref2$segment.filters;
2425
+ history.push({
2426
+ search: buildUrlFromSegment({
2427
+ columns: columns,
2428
+ filters: (_filters$ = filters[0]) === null || _filters$ === void 0 ? void 0 : _filters$.conditions,
2429
+ id: id
2430
+ })
2431
+ });
2432
+ setIsSavePaneOpen({
2433
+ action: undefined
2434
+ });
2435
+ utils.showThumbsUpToastr();
2436
+ };
2437
+ var handleCreate = function handleCreate(_ref3, _ref4) {
2438
+ var name = _ref3.name;
2439
+ var setFieldError = _ref4.setFieldError;
2440
+ var filtersPayload = buildSegmentsPayload(filters, childrenKeys);
2441
+ createSegment({
2442
+ name: name,
2443
+ entity: entity,
2444
+ filters: filtersPayload
2445
+ }, {
2446
+ onSuccess: handleCreateSuccess,
2447
+ onError: function onError(error) {
2448
+ return setFieldError("name", error.response.data.error);
2449
+ }
2450
+ });
2451
+ };
2452
+ var handleUpdate = function handleUpdate(_ref5, _ref6) {
2453
+ var name = _ref5.name;
2454
+ var setFieldError = _ref6.setFieldError;
2455
+ var filtersPayload = buildSegmentsPayload(filters, childrenKeys);
2456
+ updateSegment({
2457
+ id: segmentId,
2458
+ payload: {
2459
+ name: name,
2460
+ filters: filtersPayload
2461
+ }
2462
+ }, {
2463
+ onSuccess: function onSuccess() {
2464
+ setIsSavePaneOpen({
2465
+ action: undefined
2466
+ });
2467
+ utils.showThumbsUpToastr();
2468
+ },
2469
+ onError: function onError(error) {
2470
+ return setFieldError("name", error.response.data.error);
2471
+ }
2472
+ });
2473
+ };
2474
+ return {
2475
+ isEdit: isEdit,
2476
+ filters: filters,
2477
+ keywordFilter: keywordFilter,
2478
+ isSubmitting: isSubmitting,
2479
+ nonHiddenFilters: nonHiddenFilters,
2480
+ isSavePaneOpen: isSavePaneOpen,
2481
+ setIsSavePaneOpen: setIsSavePaneOpen,
2482
+ handleApplyFilters: handleApplyFilters,
2483
+ childrenFiltersApplied: childrenFiltersApplied,
2484
+ handleSubmit: isEdit ? handleUpdate : handleCreate
2485
+ };
2486
+ };
2487
+
2488
+ var Menu = neetoui.Dropdown.Menu,
2489
+ MenuItem = neetoui.Dropdown.MenuItem;
2490
+ var SegmentBar = function SegmentBar(_ref) {
2491
+ var entity = _ref.entity,
2492
+ filters = _ref.filters,
2493
+ setIsSavePaneOpen = _ref.setIsSavePaneOpen,
2494
+ setIsPaneOpen = _ref.setIsPaneOpen;
2495
+ var _useTranslation = reactI18next.useTranslation(),
2496
+ t = _useTranslation.t;
2497
+ var _useQueryParams = reactUtils.useQueryParams(),
2498
+ segmentId = _useQueryParams.segmentId;
2499
+ var queryClient = reactQuery.useQueryClient();
2500
+ var cachedSegments = queryClient.getQueryData([QUERY_KEYS.SEGMENTS_LIST, entity, ""]) || DEFAULT_SEGMENTS_CACHE;
2501
+ var segment = neetoCist.findById(segmentId, cachedSegments.segments);
2502
+ if (neetoCist.isNotPresent(segment)) return null;
2503
+ var newChangesExists = deepCompare(segment.filters[0].conditions, filters);
2504
+ return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
2505
+ className: "neeto-ui-text-gray-600 mr-4",
2506
+ "data-cy": "neeto-filters-segment-name",
2507
+ style: "h4"
2508
+ }, segment.name), newChangesExists && /*#__PURE__*/React__default["default"].createElement(neetoui.Dropdown, {
2509
+ buttonStyle: "secondary",
2510
+ label: t("neetoFilters.segments.updateSegment")
2511
+ }, /*#__PURE__*/React__default["default"].createElement(Menu, null, /*#__PURE__*/React__default["default"].createElement(MenuItem.Button, {
2512
+ onClick: function onClick() {
2513
+ return setIsSavePaneOpen({
2514
+ action: SEGMENT_ACTIONS$1.EDIT
2515
+ });
2516
+ }
2517
+ }, t("neetoFilters.segments.updateSegment")), /*#__PURE__*/React__default["default"].createElement(MenuItem.Button, {
2518
+ onClick: function onClick() {
2519
+ setIsPaneOpen(false);
2520
+ setIsSavePaneOpen({
2521
+ action: SEGMENT_ACTIONS$1.CREATE
2522
+ });
2523
+ }
2524
+ }, t("neetoFilters.segments.saveAsNewSegment")))));
2525
+ };
2526
+
2527
+ var Bar = function Bar(_ref) {
2528
+ var entity = _ref.entity,
2529
+ className = _ref.className,
2530
+ _ref$columns = _ref.columns,
2531
+ columns = _ref$columns === void 0 ? [] : _ref$columns,
2532
+ _ref$keyword = _ref.keyword,
2533
+ keyword = _ref$keyword === void 0 ? {
2534
+ node: "",
2535
+ value: "",
2536
+ setValue: neetoCist.noop
2537
+ } : _ref$keyword,
2538
+ _ref$setIsPaneOpen = _ref.setIsPaneOpen,
2539
+ setIsPaneOpen = _ref$setIsPaneOpen === void 0 ? ramda.identity : _ref$setIsPaneOpen,
2540
+ _ref$childrenKeys = _ref.childrenKeys,
2541
+ childrenKeys = _ref$childrenKeys === void 0 ? [] : _ref$childrenKeys,
2542
+ _ref$defaultSegmentNa = _ref.defaultSegmentName,
2543
+ defaultSegmentName = _ref$defaultSegmentNa === void 0 ? i18next.t("neetoFilters.common.allResults") : _ref$defaultSegmentNa,
2544
+ customFilters = _ref.customFilters;
2545
+ var queryClient = reactQuery.useQueryClient();
2546
+ var _useQueryParams = reactUtils.useQueryParams(),
2547
+ segmentId = _useQueryParams.segmentId;
2548
+ var segmentFormInitialRef = React.useRef(null);
2549
+ var _useSegment = useSegment({
2550
+ entity: entity,
2551
+ keyword: keyword,
2552
+ columns: columns,
2553
+ childrenKeys: childrenKeys
2554
+ }),
2555
+ isEdit = _useSegment.isEdit,
2556
+ filters = _useSegment.filters,
2557
+ handleSubmit = _useSegment.handleSubmit,
2558
+ isSubmitting = _useSegment.isSubmitting,
2559
+ keywordFilter = _useSegment.keywordFilter,
2560
+ isSavePaneOpen = _useSegment.isSavePaneOpen,
2561
+ nonHiddenFilters = _useSegment.nonHiddenFilters,
2562
+ setIsSavePaneOpen = _useSegment.setIsSavePaneOpen,
2563
+ handleApplyFilters = _useSegment.handleApplyFilters,
2564
+ childrenFiltersApplied = _useSegment.childrenFiltersApplied;
2565
+ var BarComponent = segmentId ? SegmentBar : FilterBar;
2566
+ var cachedSegments = queryClient.getQueryData([QUERY_KEYS.SEGMENTS_LIST, entity, ""]) || DEFAULT_SEGMENTS_CACHE;
2567
+ var segment = neetoCist.findById(segmentId, cachedSegments.segments);
2568
+ if (ramda.isEmpty(nonHiddenFilters) && !childrenFiltersApplied) return null;
2569
+ return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement("div", {
2570
+ className: classnames__default["default"]("neeto-filters-bar", _defineProperty({}, className, className))
2571
+ }, /*#__PURE__*/React__default["default"].createElement(BarComponent, {
2572
+ childrenFiltersApplied: childrenFiltersApplied,
2573
+ childrenKeys: childrenKeys,
2574
+ entity: entity,
2575
+ filters: filters,
2576
+ handleApplyFilters: handleApplyFilters,
2577
+ keywordFilter: keywordFilter,
2578
+ nonHiddenFilters: nonHiddenFilters,
2579
+ setIsPaneOpen: setIsPaneOpen,
2580
+ setIsSavePaneOpen: setIsSavePaneOpen
2581
+ })), /*#__PURE__*/React__default["default"].createElement(SegmentForm, {
2582
+ childrenKeys: childrenKeys,
2583
+ columns: columns,
2584
+ customFilters: customFilters,
2585
+ defaultSegmentName: defaultSegmentName,
2586
+ filters: filters,
2587
+ handleSubmit: handleSubmit,
2588
+ isEdit: isEdit,
2589
+ isSubmitting: isSubmitting,
2590
+ keywordFilter: keywordFilter,
2591
+ segmentFormInitialRef: segmentFormInitialRef,
2592
+ isOpen: neetoCist.isPresent(isSavePaneOpen.action),
2593
+ initialValues: isEdit ? ramda.assoc("filters", [{
2594
+ conditions: filters
2595
+ }], segment) : {
2596
+ name: "",
2597
+ filters: [{
2598
+ conditions: filters
2599
+ }]
2600
+ },
2601
+ onClose: function onClose() {
2602
+ return setIsSavePaneOpen({
2603
+ action: undefined
2604
+ });
2605
+ }
2606
+ }));
2607
+ };
2608
+
2609
+ function _objectWithoutPropertiesLoose$1(source, excluded) {
2610
+ if (source == null) return {};
2611
+ var target = {};
2612
+ var sourceKeys = Object.keys(source);
2613
+ var key, i;
2614
+ for (i = 0; i < sourceKeys.length; i++) {
2615
+ key = sourceKeys[i];
2616
+ if (excluded.indexOf(key) >= 0) continue;
2617
+ target[key] = source[key];
2618
+ }
2619
+ return target;
2620
+ }
2621
+
2622
+ function _objectWithoutProperties(source, excluded) {
2623
+ if (source == null) return {};
2624
+ var target = _objectWithoutPropertiesLoose$1(source, excluded);
2625
+ var key, i;
2626
+ if (Object.getOwnPropertySymbols) {
2627
+ var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
2628
+ for (i = 0; i < sourceSymbolKeys.length; i++) {
2629
+ key = sourceSymbolKeys[i];
2630
+ if (excluded.indexOf(key) >= 0) continue;
2631
+ if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
2632
+ target[key] = source[key];
2633
+ }
2634
+ }
2635
+ return target;
2636
+ }
2637
+
2638
+ var Portal = function Portal(_ref) {
2639
+ var children = _ref.children,
2640
+ _ref$rootId = _ref.rootId,
2641
+ rootId = _ref$rootId === void 0 ? "neeto-filters-portal" : _ref$rootId,
2642
+ _ref$element = _ref.element,
2643
+ element = _ref$element === void 0 ? "div" : _ref$element;
2644
+ var target = React.useRef(null);
2645
+ React.useEffect(function () {
2646
+ var container = document.getElementById(rootId);
2647
+ if (!container) {
2648
+ container = document.createElement(element);
2649
+ container.setAttribute("id", rootId);
2650
+ document.body.appendChild(container);
2651
+ }
2652
+ container.appendChild(target.current);
2653
+ return function () {
2654
+ target.current.remove();
2655
+ if (ramda.isEmpty(container.childNodes)) {
2656
+ container.remove();
2657
+ }
2658
+ };
2659
+ }, [rootId]);
2660
+ if (!target.current) {
2661
+ target.current = document.createElement(element);
2662
+ }
2663
+ return /*#__PURE__*/ReactDOM.createPortal(children, target.current);
2664
+ };
2665
+
2666
+ function _extends() {
2667
+ _extends = Object.assign ? Object.assign.bind() : function (target) {
2668
+ for (var i = 1; i < arguments.length; i++) {
2669
+ var source = arguments[i];
2670
+ for (var key in source) {
2671
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
2672
+ target[key] = source[key];
2673
+ }
2674
+ }
2675
+ }
2676
+ return target;
2677
+ };
2678
+ return _extends.apply(this, arguments);
2679
+ }
2680
+
2681
+ function _objectWithoutPropertiesLoose(source, excluded) {
2682
+ if (source == null) return {};
2683
+ var target = {};
2684
+ var sourceKeys = Object.keys(source);
2685
+ var key, i;
2686
+ for (i = 0; i < sourceKeys.length; i++) {
2687
+ key = sourceKeys[i];
2688
+ if (excluded.indexOf(key) >= 0) continue;
2689
+ target[key] = source[key];
2690
+ }
2691
+ return target;
2692
+ }
2693
+
2694
+ function _setPrototypeOf(o, p) {
2695
+ _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {
2696
+ o.__proto__ = p;
2697
+ return o;
2698
+ };
2699
+ return _setPrototypeOf(o, p);
2700
+ }
2701
+
2702
+ function _inheritsLoose(subClass, superClass) {
2703
+ subClass.prototype = Object.create(superClass.prototype);
2704
+ subClass.prototype.constructor = subClass;
2705
+ _setPrototypeOf(subClass, superClass);
2706
+ }
2707
+
2708
+ /**
2709
+ * Checks if a given element has a CSS class.
2710
+ *
2711
+ * @param element the element
2712
+ * @param className the CSS class name
2713
+ */
2714
+ function hasClass(element, className) {
2715
+ if (element.classList) return !!className && element.classList.contains(className);
2716
+ return (" " + (element.className.baseVal || element.className) + " ").indexOf(" " + className + " ") !== -1;
2717
+ }
2718
+
2719
+ /**
2720
+ * Adds a CSS class to a given element.
2721
+ *
2722
+ * @param element the element
2723
+ * @param className the CSS class name
2724
+ */
2725
+
2726
+ function addClass(element, className) {
2727
+ if (element.classList) element.classList.add(className);else if (!hasClass(element, className)) if (typeof element.className === 'string') element.className = element.className + " " + className;else element.setAttribute('class', (element.className && element.className.baseVal || '') + " " + className);
2728
+ }
2729
+
2730
+ function replaceClassName(origClass, classToRemove) {
2731
+ return origClass.replace(new RegExp("(^|\\s)" + classToRemove + "(?:\\s|$)", 'g'), '$1').replace(/\s+/g, ' ').replace(/^\s*|\s*$/g, '');
2732
+ }
2733
+ /**
2734
+ * Removes a CSS class from a given element.
2735
+ *
2736
+ * @param element the element
2737
+ * @param className the CSS class name
2738
+ */
2739
+
2740
+
2741
+ function removeClass$1(element, className) {
2742
+ if (element.classList) {
2743
+ element.classList.remove(className);
2744
+ } else if (typeof element.className === 'string') {
2745
+ element.className = replaceClassName(element.className, className);
2746
+ } else {
2747
+ element.setAttribute('class', replaceClassName(element.className && element.className.baseVal || '', className));
2748
+ }
2749
+ }
2750
+
2751
+ var config = {
2752
+ disabled: false
2753
+ };
2754
+
2755
+ var TransitionGroupContext = React__default["default"].createContext(null);
2756
+
2757
+ var forceReflow = function forceReflow(node) {
2758
+ return node.scrollTop;
2759
+ };
2760
+
2761
+ var UNMOUNTED = 'unmounted';
2762
+ var EXITED = 'exited';
2763
+ var ENTERING = 'entering';
2764
+ var ENTERED = 'entered';
2765
+ var EXITING = 'exiting';
2766
+ /**
2767
+ * The Transition component lets you describe a transition from one component
2768
+ * state to another _over time_ with a simple declarative API. Most commonly
2769
+ * it's used to animate the mounting and unmounting of a component, but can also
2770
+ * be used to describe in-place transition states as well.
2771
+ *
2772
+ * ---
2773
+ *
2774
+ * **Note**: `Transition` is a platform-agnostic base component. If you're using
2775
+ * transitions in CSS, you'll probably want to use
2776
+ * [`CSSTransition`](https://reactcommunity.org/react-transition-group/css-transition)
2777
+ * instead. It inherits all the features of `Transition`, but contains
2778
+ * additional features necessary to play nice with CSS transitions (hence the
2779
+ * name of the component).
2780
+ *
2781
+ * ---
2782
+ *
2783
+ * By default the `Transition` component does not alter the behavior of the
2784
+ * component it renders, it only tracks "enter" and "exit" states for the
2785
+ * components. It's up to you to give meaning and effect to those states. For
2786
+ * example we can add styles to a component when it enters or exits:
2787
+ *
2788
+ * ```jsx
2789
+ * import { Transition } from 'react-transition-group';
2790
+ *
2791
+ * const duration = 300;
2792
+ *
2793
+ * const defaultStyle = {
2794
+ * transition: `opacity ${duration}ms ease-in-out`,
2795
+ * opacity: 0,
2796
+ * }
2797
+ *
2798
+ * const transitionStyles = {
2799
+ * entering: { opacity: 1 },
2800
+ * entered: { opacity: 1 },
2801
+ * exiting: { opacity: 0 },
2802
+ * exited: { opacity: 0 },
2803
+ * };
2804
+ *
2805
+ * const Fade = ({ in: inProp }) => (
2806
+ * <Transition in={inProp} timeout={duration}>
2807
+ * {state => (
2808
+ * <div style={{
2809
+ * ...defaultStyle,
2810
+ * ...transitionStyles[state]
2811
+ * }}>
2812
+ * I'm a fade Transition!
2813
+ * </div>
2814
+ * )}
2815
+ * </Transition>
2816
+ * );
2817
+ * ```
2818
+ *
2819
+ * There are 4 main states a Transition can be in:
2820
+ * - `'entering'`
2821
+ * - `'entered'`
2822
+ * - `'exiting'`
2823
+ * - `'exited'`
2824
+ *
2825
+ * Transition state is toggled via the `in` prop. When `true` the component
2826
+ * begins the "Enter" stage. During this stage, the component will shift from
2827
+ * its current transition state, to `'entering'` for the duration of the
2828
+ * transition and then to the `'entered'` stage once it's complete. Let's take
2829
+ * the following example (we'll use the
2830
+ * [useState](https://reactjs.org/docs/hooks-reference.html#usestate) hook):
2831
+ *
2832
+ * ```jsx
2833
+ * function App() {
2834
+ * const [inProp, setInProp] = useState(false);
2835
+ * return (
2836
+ * <div>
2837
+ * <Transition in={inProp} timeout={500}>
2838
+ * {state => (
2839
+ * // ...
2840
+ * )}
2841
+ * </Transition>
2842
+ * <button onClick={() => setInProp(true)}>
2843
+ * Click to Enter
2844
+ * </button>
2845
+ * </div>
2846
+ * );
2847
+ * }
2848
+ * ```
2849
+ *
2850
+ * When the button is clicked the component will shift to the `'entering'` state
2851
+ * and stay there for 500ms (the value of `timeout`) before it finally switches
2852
+ * to `'entered'`.
2853
+ *
2854
+ * When `in` is `false` the same thing happens except the state moves from
2855
+ * `'exiting'` to `'exited'`.
2856
+ */
2857
+
2858
+ var Transition = /*#__PURE__*/function (_React$Component) {
2859
+ _inheritsLoose(Transition, _React$Component);
2860
+
2861
+ function Transition(props, context) {
2862
+ var _this;
2863
+
2864
+ _this = _React$Component.call(this, props, context) || this;
2865
+ var parentGroup = context; // In the context of a TransitionGroup all enters are really appears
2866
+
2867
+ var appear = parentGroup && !parentGroup.isMounting ? props.enter : props.appear;
2868
+ var initialStatus;
2869
+ _this.appearStatus = null;
2870
+
2871
+ if (props.in) {
2872
+ if (appear) {
2873
+ initialStatus = EXITED;
2874
+ _this.appearStatus = ENTERING;
2875
+ } else {
2876
+ initialStatus = ENTERED;
2877
+ }
2878
+ } else {
2879
+ if (props.unmountOnExit || props.mountOnEnter) {
2880
+ initialStatus = UNMOUNTED;
2881
+ } else {
2882
+ initialStatus = EXITED;
2883
+ }
2884
+ }
2885
+
2886
+ _this.state = {
2887
+ status: initialStatus
2888
+ };
2889
+ _this.nextCallback = null;
2890
+ return _this;
2891
+ }
2892
+
2893
+ Transition.getDerivedStateFromProps = function getDerivedStateFromProps(_ref, prevState) {
2894
+ var nextIn = _ref.in;
2895
+
2896
+ if (nextIn && prevState.status === UNMOUNTED) {
2897
+ return {
2898
+ status: EXITED
2899
+ };
2900
+ }
2901
+
2902
+ return null;
2903
+ } // getSnapshotBeforeUpdate(prevProps) {
2904
+ // let nextStatus = null
2905
+ // if (prevProps !== this.props) {
2906
+ // const { status } = this.state
2907
+ // if (this.props.in) {
2908
+ // if (status !== ENTERING && status !== ENTERED) {
2909
+ // nextStatus = ENTERING
2910
+ // }
2911
+ // } else {
2912
+ // if (status === ENTERING || status === ENTERED) {
2913
+ // nextStatus = EXITING
2914
+ // }
2915
+ // }
2916
+ // }
2917
+ // return { nextStatus }
2918
+ // }
2919
+ ;
2920
+
2921
+ var _proto = Transition.prototype;
2922
+
2923
+ _proto.componentDidMount = function componentDidMount() {
2924
+ this.updateStatus(true, this.appearStatus);
2925
+ };
2926
+
2927
+ _proto.componentDidUpdate = function componentDidUpdate(prevProps) {
2928
+ var nextStatus = null;
2929
+
2930
+ if (prevProps !== this.props) {
2931
+ var status = this.state.status;
2932
+
2933
+ if (this.props.in) {
2934
+ if (status !== ENTERING && status !== ENTERED) {
2935
+ nextStatus = ENTERING;
2936
+ }
2937
+ } else {
2938
+ if (status === ENTERING || status === ENTERED) {
2939
+ nextStatus = EXITING;
2940
+ }
2941
+ }
2942
+ }
2943
+
2944
+ this.updateStatus(false, nextStatus);
2945
+ };
2946
+
2947
+ _proto.componentWillUnmount = function componentWillUnmount() {
2948
+ this.cancelNextCallback();
2949
+ };
2950
+
2951
+ _proto.getTimeouts = function getTimeouts() {
2952
+ var timeout = this.props.timeout;
2953
+ var exit, enter, appear;
2954
+ exit = enter = appear = timeout;
2955
+
2956
+ if (timeout != null && typeof timeout !== 'number') {
2957
+ exit = timeout.exit;
2958
+ enter = timeout.enter; // TODO: remove fallback for next major
2959
+
2960
+ appear = timeout.appear !== undefined ? timeout.appear : enter;
2961
+ }
2962
+
2963
+ return {
2964
+ exit: exit,
2965
+ enter: enter,
2966
+ appear: appear
2967
+ };
2968
+ };
2969
+
2970
+ _proto.updateStatus = function updateStatus(mounting, nextStatus) {
2971
+ if (mounting === void 0) {
2972
+ mounting = false;
2973
+ }
2974
+
2975
+ if (nextStatus !== null) {
2976
+ // nextStatus will always be ENTERING or EXITING.
2977
+ this.cancelNextCallback();
2978
+
2979
+ if (nextStatus === ENTERING) {
2980
+ if (this.props.unmountOnExit || this.props.mountOnEnter) {
2981
+ var node = this.props.nodeRef ? this.props.nodeRef.current : ReactDOM__default["default"].findDOMNode(this); // https://github.com/reactjs/react-transition-group/pull/749
2982
+ // With unmountOnExit or mountOnEnter, the enter animation should happen at the transition between `exited` and `entering`.
2983
+ // To make the animation happen, we have to separate each rendering and avoid being processed as batched.
2984
+
2985
+ if (node) forceReflow(node);
2986
+ }
2987
+
2988
+ this.performEnter(mounting);
2989
+ } else {
2990
+ this.performExit();
2991
+ }
2992
+ } else if (this.props.unmountOnExit && this.state.status === EXITED) {
2993
+ this.setState({
2994
+ status: UNMOUNTED
2995
+ });
2996
+ }
2997
+ };
2998
+
2999
+ _proto.performEnter = function performEnter(mounting) {
3000
+ var _this2 = this;
3001
+
3002
+ var enter = this.props.enter;
3003
+ var appearing = this.context ? this.context.isMounting : mounting;
3004
+
3005
+ var _ref2 = this.props.nodeRef ? [appearing] : [ReactDOM__default["default"].findDOMNode(this), appearing],
3006
+ maybeNode = _ref2[0],
3007
+ maybeAppearing = _ref2[1];
3008
+
3009
+ var timeouts = this.getTimeouts();
3010
+ var enterTimeout = appearing ? timeouts.appear : timeouts.enter; // no enter animation skip right to ENTERED
3011
+ // if we are mounting and running this it means appear _must_ be set
3012
+
3013
+ if (!mounting && !enter || config.disabled) {
3014
+ this.safeSetState({
3015
+ status: ENTERED
3016
+ }, function () {
3017
+ _this2.props.onEntered(maybeNode);
3018
+ });
3019
+ return;
3020
+ }
3021
+
3022
+ this.props.onEnter(maybeNode, maybeAppearing);
3023
+ this.safeSetState({
3024
+ status: ENTERING
3025
+ }, function () {
3026
+ _this2.props.onEntering(maybeNode, maybeAppearing);
3027
+
3028
+ _this2.onTransitionEnd(enterTimeout, function () {
3029
+ _this2.safeSetState({
3030
+ status: ENTERED
3031
+ }, function () {
3032
+ _this2.props.onEntered(maybeNode, maybeAppearing);
3033
+ });
3034
+ });
3035
+ });
3036
+ };
3037
+
3038
+ _proto.performExit = function performExit() {
3039
+ var _this3 = this;
3040
+
3041
+ var exit = this.props.exit;
3042
+ var timeouts = this.getTimeouts();
3043
+ var maybeNode = this.props.nodeRef ? undefined : ReactDOM__default["default"].findDOMNode(this); // no exit animation skip right to EXITED
3044
+
3045
+ if (!exit || config.disabled) {
3046
+ this.safeSetState({
3047
+ status: EXITED
3048
+ }, function () {
3049
+ _this3.props.onExited(maybeNode);
3050
+ });
3051
+ return;
3052
+ }
3053
+
3054
+ this.props.onExit(maybeNode);
3055
+ this.safeSetState({
3056
+ status: EXITING
3057
+ }, function () {
3058
+ _this3.props.onExiting(maybeNode);
3059
+
3060
+ _this3.onTransitionEnd(timeouts.exit, function () {
3061
+ _this3.safeSetState({
3062
+ status: EXITED
3063
+ }, function () {
3064
+ _this3.props.onExited(maybeNode);
3065
+ });
3066
+ });
3067
+ });
3068
+ };
3069
+
3070
+ _proto.cancelNextCallback = function cancelNextCallback() {
3071
+ if (this.nextCallback !== null) {
3072
+ this.nextCallback.cancel();
3073
+ this.nextCallback = null;
3074
+ }
3075
+ };
3076
+
3077
+ _proto.safeSetState = function safeSetState(nextState, callback) {
3078
+ // This shouldn't be necessary, but there are weird race conditions with
3079
+ // setState callbacks and unmounting in testing, so always make sure that
3080
+ // we can cancel any pending setState callbacks after we unmount.
3081
+ callback = this.setNextCallback(callback);
3082
+ this.setState(nextState, callback);
3083
+ };
3084
+
3085
+ _proto.setNextCallback = function setNextCallback(callback) {
3086
+ var _this4 = this;
3087
+
3088
+ var active = true;
3089
+
3090
+ this.nextCallback = function (event) {
3091
+ if (active) {
3092
+ active = false;
3093
+ _this4.nextCallback = null;
3094
+ callback(event);
3095
+ }
3096
+ };
3097
+
3098
+ this.nextCallback.cancel = function () {
3099
+ active = false;
3100
+ };
3101
+
3102
+ return this.nextCallback;
3103
+ };
3104
+
3105
+ _proto.onTransitionEnd = function onTransitionEnd(timeout, handler) {
3106
+ this.setNextCallback(handler);
3107
+ var node = this.props.nodeRef ? this.props.nodeRef.current : ReactDOM__default["default"].findDOMNode(this);
3108
+ var doesNotHaveTimeoutOrListener = timeout == null && !this.props.addEndListener;
3109
+
3110
+ if (!node || doesNotHaveTimeoutOrListener) {
3111
+ setTimeout(this.nextCallback, 0);
3112
+ return;
3113
+ }
3114
+
3115
+ if (this.props.addEndListener) {
3116
+ var _ref3 = this.props.nodeRef ? [this.nextCallback] : [node, this.nextCallback],
3117
+ maybeNode = _ref3[0],
3118
+ maybeNextCallback = _ref3[1];
3119
+
3120
+ this.props.addEndListener(maybeNode, maybeNextCallback);
3121
+ }
3122
+
3123
+ if (timeout != null) {
3124
+ setTimeout(this.nextCallback, timeout);
3125
+ }
3126
+ };
3127
+
3128
+ _proto.render = function render() {
3129
+ var status = this.state.status;
3130
+
3131
+ if (status === UNMOUNTED) {
3132
+ return null;
3133
+ }
3134
+
3135
+ var _this$props = this.props,
3136
+ children = _this$props.children;
3137
+ _this$props.in;
3138
+ _this$props.mountOnEnter;
3139
+ _this$props.unmountOnExit;
3140
+ _this$props.appear;
3141
+ _this$props.enter;
3142
+ _this$props.exit;
3143
+ _this$props.timeout;
3144
+ _this$props.addEndListener;
3145
+ _this$props.onEnter;
3146
+ _this$props.onEntering;
3147
+ _this$props.onEntered;
3148
+ _this$props.onExit;
3149
+ _this$props.onExiting;
3150
+ _this$props.onExited;
3151
+ _this$props.nodeRef;
3152
+ var childProps = _objectWithoutPropertiesLoose(_this$props, ["children", "in", "mountOnEnter", "unmountOnExit", "appear", "enter", "exit", "timeout", "addEndListener", "onEnter", "onEntering", "onEntered", "onExit", "onExiting", "onExited", "nodeRef"]);
3153
+
3154
+ return (
3155
+ /*#__PURE__*/
3156
+ // allows for nested Transitions
3157
+ React__default["default"].createElement(TransitionGroupContext.Provider, {
3158
+ value: null
3159
+ }, typeof children === 'function' ? children(status, childProps) : React__default["default"].cloneElement(React__default["default"].Children.only(children), childProps))
3160
+ );
3161
+ };
3162
+
3163
+ return Transition;
3164
+ }(React__default["default"].Component);
3165
+
3166
+ Transition.contextType = TransitionGroupContext;
3167
+ Transition.propTypes = {}; // Name the function so it is clearer in the documentation
3168
+
3169
+ function noop() {}
3170
+
3171
+ Transition.defaultProps = {
3172
+ in: false,
3173
+ mountOnEnter: false,
3174
+ unmountOnExit: false,
3175
+ appear: false,
3176
+ enter: true,
3177
+ exit: true,
3178
+ onEnter: noop,
3179
+ onEntering: noop,
3180
+ onEntered: noop,
3181
+ onExit: noop,
3182
+ onExiting: noop,
3183
+ onExited: noop
3184
+ };
3185
+ Transition.UNMOUNTED = UNMOUNTED;
3186
+ Transition.EXITED = EXITED;
3187
+ Transition.ENTERING = ENTERING;
3188
+ Transition.ENTERED = ENTERED;
3189
+ Transition.EXITING = EXITING;
3190
+ var Transition$1 = Transition;
3191
+
3192
+ var _addClass = function addClass$1(node, classes) {
3193
+ return node && classes && classes.split(' ').forEach(function (c) {
3194
+ return addClass(node, c);
3195
+ });
3196
+ };
3197
+
3198
+ var removeClass = function removeClass(node, classes) {
3199
+ return node && classes && classes.split(' ').forEach(function (c) {
3200
+ return removeClass$1(node, c);
3201
+ });
3202
+ };
3203
+ /**
3204
+ * A transition component inspired by the excellent
3205
+ * [ng-animate](https://docs.angularjs.org/api/ngAnimate) library, you should
3206
+ * use it if you're using CSS transitions or animations. It's built upon the
3207
+ * [`Transition`](https://reactcommunity.org/react-transition-group/transition)
3208
+ * component, so it inherits all of its props.
3209
+ *
3210
+ * `CSSTransition` applies a pair of class names during the `appear`, `enter`,
3211
+ * and `exit` states of the transition. The first class is applied and then a
3212
+ * second `*-active` class in order to activate the CSS transition. After the
3213
+ * transition, matching `*-done` class names are applied to persist the
3214
+ * transition state.
3215
+ *
3216
+ * ```jsx
3217
+ * function App() {
3218
+ * const [inProp, setInProp] = useState(false);
3219
+ * return (
3220
+ * <div>
3221
+ * <CSSTransition in={inProp} timeout={200} classNames="my-node">
3222
+ * <div>
3223
+ * {"I'll receive my-node-* classes"}
3224
+ * </div>
3225
+ * </CSSTransition>
3226
+ * <button type="button" onClick={() => setInProp(true)}>
3227
+ * Click to Enter
3228
+ * </button>
3229
+ * </div>
3230
+ * );
3231
+ * }
3232
+ * ```
3233
+ *
3234
+ * When the `in` prop is set to `true`, the child component will first receive
3235
+ * the class `example-enter`, then the `example-enter-active` will be added in
3236
+ * the next tick. `CSSTransition` [forces a
3237
+ * reflow](https://github.com/reactjs/react-transition-group/blob/5007303e729a74be66a21c3e2205e4916821524b/src/CSSTransition.js#L208-L215)
3238
+ * between before adding the `example-enter-active`. This is an important trick
3239
+ * because it allows us to transition between `example-enter` and
3240
+ * `example-enter-active` even though they were added immediately one after
3241
+ * another. Most notably, this is what makes it possible for us to animate
3242
+ * _appearance_.
3243
+ *
3244
+ * ```css
3245
+ * .my-node-enter {
3246
+ * opacity: 0;
3247
+ * }
3248
+ * .my-node-enter-active {
3249
+ * opacity: 1;
3250
+ * transition: opacity 200ms;
3251
+ * }
3252
+ * .my-node-exit {
3253
+ * opacity: 1;
3254
+ * }
3255
+ * .my-node-exit-active {
3256
+ * opacity: 0;
3257
+ * transition: opacity 200ms;
3258
+ * }
3259
+ * ```
3260
+ *
3261
+ * `*-active` classes represent which styles you want to animate **to**, so it's
3262
+ * important to add `transition` declaration only to them, otherwise transitions
3263
+ * might not behave as intended! This might not be obvious when the transitions
3264
+ * are symmetrical, i.e. when `*-enter-active` is the same as `*-exit`, like in
3265
+ * the example above (minus `transition`), but it becomes apparent in more
3266
+ * complex transitions.
3267
+ *
3268
+ * **Note**: If you're using the
3269
+ * [`appear`](http://reactcommunity.org/react-transition-group/transition#Transition-prop-appear)
3270
+ * prop, make sure to define styles for `.appear-*` classes as well.
3271
+ */
3272
+
3273
+
3274
+ var CSSTransition = /*#__PURE__*/function (_React$Component) {
3275
+ _inheritsLoose(CSSTransition, _React$Component);
3276
+
3277
+ function CSSTransition() {
3278
+ var _this;
3279
+
3280
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
3281
+ args[_key] = arguments[_key];
3282
+ }
3283
+
3284
+ _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;
3285
+ _this.appliedClasses = {
3286
+ appear: {},
3287
+ enter: {},
3288
+ exit: {}
3289
+ };
3290
+
3291
+ _this.onEnter = function (maybeNode, maybeAppearing) {
3292
+ var _this$resolveArgument = _this.resolveArguments(maybeNode, maybeAppearing),
3293
+ node = _this$resolveArgument[0],
3294
+ appearing = _this$resolveArgument[1];
3295
+
3296
+ _this.removeClasses(node, 'exit');
3297
+
3298
+ _this.addClass(node, appearing ? 'appear' : 'enter', 'base');
3299
+
3300
+ if (_this.props.onEnter) {
3301
+ _this.props.onEnter(maybeNode, maybeAppearing);
3302
+ }
3303
+ };
3304
+
3305
+ _this.onEntering = function (maybeNode, maybeAppearing) {
3306
+ var _this$resolveArgument2 = _this.resolveArguments(maybeNode, maybeAppearing),
3307
+ node = _this$resolveArgument2[0],
3308
+ appearing = _this$resolveArgument2[1];
3309
+
3310
+ var type = appearing ? 'appear' : 'enter';
3311
+
3312
+ _this.addClass(node, type, 'active');
3313
+
3314
+ if (_this.props.onEntering) {
3315
+ _this.props.onEntering(maybeNode, maybeAppearing);
3316
+ }
3317
+ };
3318
+
3319
+ _this.onEntered = function (maybeNode, maybeAppearing) {
3320
+ var _this$resolveArgument3 = _this.resolveArguments(maybeNode, maybeAppearing),
3321
+ node = _this$resolveArgument3[0],
3322
+ appearing = _this$resolveArgument3[1];
3323
+
3324
+ var type = appearing ? 'appear' : 'enter';
3325
+
3326
+ _this.removeClasses(node, type);
3327
+
3328
+ _this.addClass(node, type, 'done');
3329
+
3330
+ if (_this.props.onEntered) {
3331
+ _this.props.onEntered(maybeNode, maybeAppearing);
3332
+ }
3333
+ };
3334
+
3335
+ _this.onExit = function (maybeNode) {
3336
+ var _this$resolveArgument4 = _this.resolveArguments(maybeNode),
3337
+ node = _this$resolveArgument4[0];
3338
+
3339
+ _this.removeClasses(node, 'appear');
3340
+
3341
+ _this.removeClasses(node, 'enter');
3342
+
3343
+ _this.addClass(node, 'exit', 'base');
3344
+
3345
+ if (_this.props.onExit) {
3346
+ _this.props.onExit(maybeNode);
3347
+ }
3348
+ };
3349
+
3350
+ _this.onExiting = function (maybeNode) {
3351
+ var _this$resolveArgument5 = _this.resolveArguments(maybeNode),
3352
+ node = _this$resolveArgument5[0];
3353
+
3354
+ _this.addClass(node, 'exit', 'active');
3355
+
3356
+ if (_this.props.onExiting) {
3357
+ _this.props.onExiting(maybeNode);
3358
+ }
3359
+ };
3360
+
3361
+ _this.onExited = function (maybeNode) {
3362
+ var _this$resolveArgument6 = _this.resolveArguments(maybeNode),
3363
+ node = _this$resolveArgument6[0];
3364
+
3365
+ _this.removeClasses(node, 'exit');
3366
+
3367
+ _this.addClass(node, 'exit', 'done');
3368
+
3369
+ if (_this.props.onExited) {
3370
+ _this.props.onExited(maybeNode);
3371
+ }
3372
+ };
3373
+
3374
+ _this.resolveArguments = function (maybeNode, maybeAppearing) {
3375
+ return _this.props.nodeRef ? [_this.props.nodeRef.current, maybeNode] // here `maybeNode` is actually `appearing`
3376
+ : [maybeNode, maybeAppearing];
3377
+ };
3378
+
3379
+ _this.getClassNames = function (type) {
3380
+ var classNames = _this.props.classNames;
3381
+ var isStringClassNames = typeof classNames === 'string';
3382
+ var prefix = isStringClassNames && classNames ? classNames + "-" : '';
3383
+ var baseClassName = isStringClassNames ? "" + prefix + type : classNames[type];
3384
+ var activeClassName = isStringClassNames ? baseClassName + "-active" : classNames[type + "Active"];
3385
+ var doneClassName = isStringClassNames ? baseClassName + "-done" : classNames[type + "Done"];
3386
+ return {
3387
+ baseClassName: baseClassName,
3388
+ activeClassName: activeClassName,
3389
+ doneClassName: doneClassName
3390
+ };
3391
+ };
3392
+
3393
+ return _this;
3394
+ }
3395
+
3396
+ var _proto = CSSTransition.prototype;
3397
+
3398
+ _proto.addClass = function addClass(node, type, phase) {
3399
+ var className = this.getClassNames(type)[phase + "ClassName"];
3400
+
3401
+ var _this$getClassNames = this.getClassNames('enter'),
3402
+ doneClassName = _this$getClassNames.doneClassName;
3403
+
3404
+ if (type === 'appear' && phase === 'done' && doneClassName) {
3405
+ className += " " + doneClassName;
3406
+ } // This is to force a repaint,
3407
+ // which is necessary in order to transition styles when adding a class name.
3408
+
3409
+
3410
+ if (phase === 'active') {
3411
+ if (node) forceReflow(node);
3412
+ }
3413
+
3414
+ if (className) {
3415
+ this.appliedClasses[type][phase] = className;
3416
+
3417
+ _addClass(node, className);
3418
+ }
3419
+ };
3420
+
3421
+ _proto.removeClasses = function removeClasses(node, type) {
3422
+ var _this$appliedClasses$ = this.appliedClasses[type],
3423
+ baseClassName = _this$appliedClasses$.base,
3424
+ activeClassName = _this$appliedClasses$.active,
3425
+ doneClassName = _this$appliedClasses$.done;
3426
+ this.appliedClasses[type] = {};
3427
+
3428
+ if (baseClassName) {
3429
+ removeClass(node, baseClassName);
3430
+ }
3431
+
3432
+ if (activeClassName) {
3433
+ removeClass(node, activeClassName);
3434
+ }
3435
+
3436
+ if (doneClassName) {
3437
+ removeClass(node, doneClassName);
3438
+ }
3439
+ };
3440
+
3441
+ _proto.render = function render() {
3442
+ var _this$props = this.props;
3443
+ _this$props.classNames;
3444
+ var props = _objectWithoutPropertiesLoose(_this$props, ["classNames"]);
3445
+
3446
+ return /*#__PURE__*/React__default["default"].createElement(Transition$1, _extends({}, props, {
3447
+ onEnter: this.onEnter,
3448
+ onEntered: this.onEntered,
3449
+ onEntering: this.onEntering,
3450
+ onExit: this.onExit,
3451
+ onExiting: this.onExiting,
3452
+ onExited: this.onExited
3453
+ }));
3454
+ };
3455
+
3456
+ return CSSTransition;
3457
+ }(React__default["default"].Component);
3458
+
3459
+ CSSTransition.defaultProps = {
3460
+ classNames: ''
3461
+ };
3462
+ CSSTransition.propTypes = {};
3463
+ var CSSTransition$1 = CSSTransition;
3464
+
3465
+ var Body = function Body(_ref) {
3466
+ var children = _ref.children,
3467
+ _ref$className = _ref.className,
3468
+ className = _ref$className === void 0 ? "" : _ref$className,
3469
+ _ref$hasFooter = _ref.hasFooter,
3470
+ hasFooter = _ref$hasFooter === void 0 ? true : _ref$hasFooter;
3471
+ return /*#__PURE__*/React__default["default"].createElement("div", {
3472
+ className: classnames__default["default"]("neeto-filters-slider__body neeto-ui-flex neeto-ui-flex-col neeto-ui-items-start neeto-ui-justify-start", _defineProperty({
3473
+ "neeto-filters-slider__body--has-footer": hasFooter
3474
+ }, className, className))
3475
+ }, children);
3476
+ };
3477
+
3478
+ var SIZES = {
3479
+ xsmall: "xsmall",
3480
+ small: "small",
3481
+ large: "large"
3482
+ };
3483
+
3484
+ var Footer = function Footer(_ref) {
3485
+ var children = _ref.children,
3486
+ _ref$className = _ref.className,
3487
+ className = _ref$className === void 0 ? "" : _ref$className;
3488
+ return /*#__PURE__*/React__default["default"].createElement("div", {
3489
+ className: classnames__default["default"]("neeto-filters-slider__footer neeto-ui-shadow-m neeto-ui-flex neeto-ui-items-center", className)
3490
+ }, children);
3491
+ };
3492
+
3493
+ var Header = function Header(_ref) {
3494
+ var _ref$children = _ref.children,
3495
+ children = _ref$children === void 0 ? "" : _ref$children,
3496
+ className = _ref.className;
3497
+ return /*#__PURE__*/React__default["default"].createElement("div", {
3498
+ className: classnames__default["default"]("neeto-filters-slider__header", className)
3499
+ }, children);
3500
+ };
3501
+
3502
+ var _excluded$1 = ["size", "isOpen", "onClose", "className", "children"];
3503
+ var Slider = function Slider(_ref) {
3504
+ var _ref$size = _ref.size,
3505
+ size = _ref$size === void 0 ? SIZES.xsmall : _ref$size,
3506
+ isOpen = _ref.isOpen,
3507
+ onClose = _ref.onClose,
3508
+ _ref$className = _ref.className,
3509
+ className = _ref$className === void 0 ? "" : _ref$className,
3510
+ children = _ref.children,
3511
+ otherProps = _objectWithoutProperties(_ref, _excluded$1);
3512
+ useHotkeys__default["default"](SHORTCUTS.closePane.sequence, onClose, {
3513
+ mode: "global"
3514
+ });
3515
+ return /*#__PURE__*/React__default["default"].createElement(Portal, {
3516
+ rootId: "neeto-filters-portal"
3517
+ }, /*#__PURE__*/React__default["default"].createElement(CSSTransition$1, {
3518
+ unmountOnExit: true,
3519
+ appear: isOpen,
3520
+ classNames: "neeto-filters-slider",
3521
+ "in": isOpen,
3522
+ timeout: 300
3523
+ }, /*#__PURE__*/React__default["default"].createElement("div", {
3524
+ className: "neeto-filters-slider__pane"
3525
+ }, /*#__PURE__*/React__default["default"].createElement("div", _extends$1({
3526
+ className: classnames__default["default"]("neeto-filters-slider__wrapper", _defineProperty({
3527
+ "neeto-filters-slider__wrapper--xsmall": size === SIZES.xsmall,
3528
+ "neeto-filters-slider__wrapper--small": size === SIZES.small,
3529
+ "neeto-filters-slider__wrapper--large": size === SIZES.large
3530
+ }, className, className))
3531
+ }, otherProps), /*#__PURE__*/React__default["default"].createElement(neetoui.Button, {
3532
+ "aria-label": "Close",
3533
+ className: "neeto-filters-slider__close",
3534
+ "data-cy": "neeto-filters-close-button",
3535
+ "data-testid": "close-button",
3536
+ icon: neetoIcons.Close,
3537
+ size: "small",
3538
+ style: "text",
3539
+ onClick: onClose
3540
+ }), children))));
3541
+ };
3542
+ Slider.Header = Header;
3543
+ Slider.Body = Body;
3544
+ Slider.Footer = Footer;
3545
+
3546
+ var useFilters = function useFilters(_ref) {
3547
+ var onFiltersChange = _ref.onFiltersChange,
3548
+ columns = _ref.columns,
3549
+ keywordFilter = _ref.keywordFilter,
3550
+ onSelectorsChange = _ref.onSelectorsChange;
3551
+ var _useTransition = React.useTransition(),
3552
+ _useTransition2 = _slicedToArray(_useTransition, 2);
3553
+ _useTransition2[0];
3554
+ var startTransition = _useTransition2[1];
3555
+ var initialRender = React.useRef(true);
3556
+ var prevFilters = React.useRef([]);
3557
+ var location = reactRouterDom.useLocation();
3558
+ var filters = buildFiltersFromSearchParams(columns, false);
3559
+ var history = reactRouterDom.useHistory();
3560
+ var defaultValuesOfColumns = JSON.stringify(ramda.pluck("defaultValue", columns));
3561
+ var handlePrecenseOfDefaultFilters = function handlePrecenseOfDefaultFilters(defaultFilters) {
3562
+ var params = buildUrlFromFilters({
3563
+ columns: columns,
3564
+ filters: isKeywordFilterPresent(keywordFilter) && neetoCist.isNotEmpty(getSearchTermFromUrl()) ? [].concat(_toConsumableArray(defaultFilters), [keywordFilter]) : defaultFilters
3565
+ });
3566
+ history.replace({
3567
+ search: params
3568
+ });
3569
+ };
3570
+ var handleFiltersChange = function handleFiltersChange(filtersPayload) {
3571
+ startTransition(function () {
3572
+ onFiltersChange(buildFiltersPayload(filtersPayload.filter(function (filter) {
3573
+ return !ramda.isNil(filter.node);
3574
+ })));
3575
+ });
3576
+ };
3577
+
3578
+ //This function sends the updated filters to host via callbacks.
3579
+ var sendUpdatedFilters = function sendUpdatedFilters() {
3580
+ if (compareFilters(ramda.append(keywordFilter, filters), prevFilters.current)) {
3581
+ return;
3582
+ }
3583
+ var newFilters = buildFiltersFromSearchParams(columns);
3584
+ var filtersPayload = isKeywordFilterPresent(keywordFilter) && neetoCist.isNotEmpty(getSearchTermFromUrl()) ? ramda.append(keywordFilter, newFilters) : newFilters;
3585
+ handleFiltersChange(filtersPayload);
3586
+ onSelectorsChange(buildSelectorsFromURL(columns));
3587
+ };
3588
+ var handleChangesInURL = function handleChangesInURL() {
3589
+ var defaultFilters = buildDefaultFilters(columns, filters);
3590
+ var searchParams = getSnakeCasedQueryParams();
3591
+ var keys = ramda.pluck("key", ramda.append(keywordFilter, columns));
3592
+ if (keys.every(function (key) {
3593
+ return ramda.isNil(searchParams[key]);
3594
+ }) && !ramda.isEmpty(defaultFilters)) {
3595
+ history.replace({
3596
+ search: buildUrlFromFilters({
3597
+ columns: columns,
3598
+ filters: ramda.concat(defaultFilters, filters)
3599
+ })
3600
+ });
3601
+ filters = buildFiltersFromSearchParams(columns, false);
3602
+ }
3603
+ };
3604
+ React.useEffect(function () {
3605
+ if (initialRender.current) {
3606
+ initialRender.current = false;
3607
+ var keywordValue = getSearchTermFromUrl();
3608
+ var defaultFilters = buildDefaultFilters(columns, filters);
3609
+ neetoCist.isNotEmpty(defaultFilters) && handlePrecenseOfDefaultFilters(defaultFilters);
3610
+ prevFilters.current = ramda.append(ramda.mergeRight(keywordFilter, {
3611
+ value: keywordValue
3612
+ }), filters);
3613
+ } else {
3614
+ handleChangesInURL();
3615
+ sendUpdatedFilters();
3616
+ prevFilters.current = ramda.append(keywordFilter, filters);
3617
+ }
3618
+ }, [location.search, defaultValuesOfColumns]);
3619
+ return filters;
3620
+ };
3621
+
3622
+ var _excluded = ["size", "isOpen", "onClose", "columns", "onChange", "isSearchable", "keyword", "onSelectorsChange", "childrenKeys", "children"];
3623
+ function ownKeys$1(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3624
+ function _objectSpread$1(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
3625
+ var Pane = function Pane(_ref) {
3626
+ var size = _ref.size,
3627
+ isOpen = _ref.isOpen,
3628
+ onClose = _ref.onClose,
3629
+ columns = _ref.columns,
3630
+ onChange = _ref.onChange,
3631
+ isSearchable = _ref.isSearchable,
3632
+ keyword = _ref.keyword,
3633
+ onSelectorsChange = _ref.onSelectorsChange,
3634
+ _ref$childrenKeys = _ref.childrenKeys,
3635
+ childrenKeys = _ref$childrenKeys === void 0 ? [] : _ref$childrenKeys,
3636
+ children = _ref.children,
3637
+ otherProps = _objectWithoutProperties(_ref, _excluded);
3638
+ var searchParams = reactUtils.useQueryParams({
3639
+ toCamelCase: false
3640
+ });
3641
+ var _useState = React.useState(""),
3642
+ _useState2 = _slicedToArray(_useState, 2),
3643
+ searchTerm = _useState2[0],
3644
+ setSearchTerm = _useState2[1];
3645
+ var history = reactRouterDom.useHistory();
3646
+ var _useTranslation = reactI18next.useTranslation(),
3647
+ t = _useTranslation.t;
3648
+ columns = React.useMemo(function () {
3649
+ return getColumnsWithStandardizedType(columns);
3650
+ }, [columns]);
3651
+ var _buildFilteredColumns = buildFilteredColumns({
3652
+ searchTerm: searchTerm,
3653
+ columns: columns
3654
+ }),
3655
+ _buildFilteredColumns2 = _buildFilteredColumns.groupedColumns,
3656
+ groupedColumns = _buildFilteredColumns2 === void 0 ? [] : _buildFilteredColumns2,
3657
+ _buildFilteredColumns3 = _buildFilteredColumns.ungroupedColumns,
3658
+ ungroupedColumns = _buildFilteredColumns3 === void 0 ? [] : _buildFilteredColumns3;
3659
+ var keywordFilter = _objectSpread$1(_objectSpread$1({
3660
+ type: "text",
3661
+ rule: "contains",
3662
+ label: t("neetoFilters.common.searchTerm")
3663
+ }, keyword), {}, {
3664
+ key: SEARCH_TERM_KEY,
3665
+ value: searchParams[SEARCH_TERM_KEY] || ""
3666
+ });
3667
+ var filters = useFilters({
3668
+ onFiltersChange: onChange,
3669
+ columns: columns,
3670
+ keywordFilter: keywordFilter,
3671
+ onSelectorsChange: onSelectorsChange
3672
+ });
3673
+ var handleChange = function handleChange(newFilters) {
3674
+ var isClearAll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
3675
+ var params = buildUrlFromFilters(_objectSpread$1({
3676
+ columns: columns,
3677
+ filters: isKeywordFilterPresent(keywordFilter) && neetoCist.isNotEmpty(getSearchTermFromUrl()) ? [].concat(_toConsumableArray(newFilters), [keywordFilter]) : newFilters
3678
+ }, isClearAll && {
3679
+ isClearAll: true,
3680
+ childrenKeys: childrenKeys
3681
+ }));
3682
+ history.push({
3683
+ search: params
3684
+ });
3685
+ };
3686
+ var handleClearAll = function handleClearAll() {
3687
+ var params = isKeywordFilterPresent(keywordFilter) ? ramda.omit([SEARCH_TERM_KEY], getSnakeCasedQueryParams()) : getSnakeCasedQueryParams();
3688
+ var pathname = window.location.pathname;
3689
+ history.push(utils.buildUrl(pathname, params));
3690
+ handleChange([], true);
3691
+ };
3692
+ var handleClearTermAndClose = function handleClearTermAndClose() {
3693
+ setSearchTerm("");
3694
+ onClose();
3695
+ };
3696
+ var handleClose = function handleClose() {
3697
+ columns.forEach(function (_ref2) {
3698
+ var key = _ref2.key;
3699
+ var filter = neetoCist.findBy({
3700
+ key: key
3701
+ }, filters);
3702
+ if ((filter === null || filter === void 0 ? void 0 : filter.value) === "") delete searchParams[key];
3703
+ });
3704
+ handleClearTermAndClose();
3705
+ };
3706
+ var isClearFiltersDisabled = !filters.some(function (_ref3) {
3707
+ var value = _ref3.value,
3708
+ defaultValue = _ref3.defaultValue;
3709
+ return neetoCist.isPresent(value) && value !== defaultValue;
3710
+ }) && !childrenKeys.some(function (key) {
3711
+ return searchParams[key];
3712
+ });
3713
+ return /*#__PURE__*/React__default["default"].createElement(Portal, {
3714
+ rootId: "neeto-filters-portal"
3715
+ }, /*#__PURE__*/React__default["default"].createElement(Slider, _extends$1({
3716
+ isOpen: isOpen,
3717
+ size: size,
3718
+ onClose: handleClose
3719
+ }, otherProps), /*#__PURE__*/React__default["default"].createElement(Slider.Header, {
3720
+ className: "neeto-filters-pane-filter__header",
3721
+ "data-cy": "neeto-filters-pane-header"
3722
+ }, /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
3723
+ style: "h2",
3724
+ weight: "semibold"
3725
+ }, t("neetoFilters.common.filters"))), /*#__PURE__*/React__default["default"].createElement(Slider.Body, {
3726
+ className: "neeto-filters-pane-filter__body neeto-ui-pt-2"
3727
+ }, isSearchable && /*#__PURE__*/React__default["default"].createElement(Search__default["default"], {
3728
+ "data-cy": "neeto-filters-column-search",
3729
+ placeholder: t("neetoFilters.messages.searchResources", {
3730
+ resources: t("neetoFilters.common.filters")
3731
+ }),
3732
+ onSearch: function onSearch(value) {
3733
+ return setSearchTerm(value);
3734
+ }
3735
+ }), ungroupedColumns.map(function (column) {
3736
+ return /*#__PURE__*/React__default["default"].createElement(Item, {
3737
+ column: column,
3738
+ filters: filters,
3739
+ autoFocus: column.key === isOpen,
3740
+ key: column.key,
3741
+ onChange: handleChange,
3742
+ onClose: handleClearTermAndClose
3743
+ });
3744
+ }), neetoCist.isPresent(groupedColumns) && /*#__PURE__*/React__default["default"].createElement(neetoui.Accordion, {
3745
+ defaultActiveKey: groupedColumns.findIndex(function (_ref4) {
3746
+ var columns = _ref4.columns;
3747
+ return neetoCist.existsBy({
3748
+ key: isOpen
3749
+ }, columns);
3750
+ })
3751
+ }, groupedColumns.map(function (_ref5) {
3752
+ var group = _ref5.group,
3753
+ columns = _ref5.columns;
3754
+ return /*#__PURE__*/React__default["default"].createElement(neetoui.Accordion.Item, {
3755
+ className: "accordion_item",
3756
+ key: group,
3757
+ title: group
3758
+ }, columns.map(function (column) {
3759
+ return /*#__PURE__*/React__default["default"].createElement(Item, {
3760
+ column: column,
3761
+ filters: filters,
3762
+ autoFocus: column.key === isOpen,
3763
+ key: column.key,
3764
+ onChange: handleChange,
3765
+ onClose: handleClearTermAndClose
3766
+ });
3767
+ }));
3768
+ })), ramda.isEmpty(ungroupedColumns) && ramda.isEmpty(groupedColumns) && /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
3769
+ style: "body2"
3770
+ }, t("neetoFilters.messages.noResourcesFound", {
3771
+ resources: t("neetoFilters.common.columns")
3772
+ })), children), /*#__PURE__*/React__default["default"].createElement(Slider.Footer, {
3773
+ className: "neeto-filters-pane-filter__footer"
3774
+ }, /*#__PURE__*/React__default["default"].createElement("div", null, /*#__PURE__*/React__default["default"].createElement(neetoui.Button, {
3775
+ "data-cy": "neeto-filters-done-btn",
3776
+ label: t("neetoFilters.common.done"),
3777
+ onClick: handleClearTermAndClose
3778
+ }), /*#__PURE__*/React__default["default"].createElement(neetoui.Button, {
3779
+ "data-cy": "neeto-filters-clear-btn",
3780
+ disabled: isClearFiltersDisabled,
3781
+ label: t("neetoFilters.common.clearFilters"),
3782
+ style: "text",
3783
+ onClick: handleClearAll
3784
+ })))));
3785
+ };
3786
+
3787
+ 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}}
3788
+
3789
+ var css = ".neeto-filters-bar{align-items:center;display:flex;flex-wrap:wrap}.neeto-filters-bar__block{border-radius:var(--neeto-ui-rounded);display:flex;gap:4px;margin:4px 0;max-width:384px;overflow:hidden;padding:4px 8px;position:relative;transition:var(--neeto-ui-transition);white-space:nowrap}.neeto-filters-bar__block p:first-child{color:rgb(var(--neeto-ui-gray-700))}.neeto-filters-bar__block-close{background-image:linear-gradient(90deg,rgba(var(--neeto-ui-gray-200),.5) 0,rgba(var(--neeto-ui-gray-200),1) 25%);color:rgb(var(--neeto-ui-gray-800));opacity:0;padding:8px;position:absolute;right:0;top:0;transition:var(--neeto-ui-transition)}.neeto-filters-bar__block:active,.neeto-filters-bar__block:hover{background-color:rgb(var(--neeto-ui-gray-200));cursor:pointer}.neeto-filters-bar__block:active .neeto-filters-bar__block-close,.neeto-filters-bar__block:hover .neeto-filters-bar__block-close{border-radius:var(--neeto-ui-rounded);color:rgb(var(--neeto-ui-black));opacity:1}.neeto-filters-bar__block:focus{box-shadow:0 0 0 3px rgba(var(--neeto-ui-gray-800),15%);outline:none}.neeto-filters-bar--separator{align-self:stretch;border-left:1px solid rgb(var(--neeto-ui-gray-400));margin:12px 8px}.neeto-filters-slider__pane{border-radius:12px 0 0 12px;position:fixed;right:0;top:0;z-index:99998}.neeto-filters-slider__wrapper{background-color:rgb(var(--neeto-ui-white));box-shadow:var(--neeto-ui-shadow-m);height:100vh;max-width:100%;transform:translateX(100%);transition:all .3s}.neeto-filters-slider__wrapper--xsmall{width:360px}.neeto-filters-slider__wrapper--small{width:480px}.neeto-filters-slider__wrapper--large{width:50vw}@media screen and (max-width:767px){.neeto-filters-slider__wrapper{width:100vw}}.neeto-filters-slider__close{position:absolute!important;right:24px;top:24px}.neeto-filters-slider__header{padding:24px 60px 24px 24px;width:100%}.neeto-filters-slider__body{font-size:var(--neeto-ui-text-sm);height:calc(100vh - var(--neeto-ui-pane-header-height));overflow-y:auto;padding:0 24px;width:100%}.neeto-filters-slider__body.neeto-filters-slider__body--has-footer{height:calc(100vh - var(--neeto-ui-pane-header-height) - var(--neeto-ui-pane-footer-height))}.neeto-filters-slider__footer{background-color:rgb(var(--neeto-ui-white));min-height:var(--neeto-ui-pane-footer-height);padding:24px;width:100%}.neeto-filters-slider__footer.neeto-filters-slider__footer__absolute{bottom:0;left:0;position:absolute;width:100%}.neeto-filters-slider-enter .neeto-filters-slider__wrapper{transform:translateX(100%)}.neeto-filters-slider-enter-active .neeto-filters-slider__wrapper,.neeto-filters-slider-enter-done .neeto-filters-slider__wrapper{transform:translateX(0)}.neeto-filters-slider-exit .neeto-filters-slider__wrapper,.neeto-filters-slider-exit-active .neeto-filters-slider__wrapper{transform:translateX(100%)}.neeto-filters-pane-filter__body{align-items:stretch!important;gap:20px}.neeto-filters-pane-filter__body>*{flex-grow:0!important}.neeto-filters-pane-filter__body p{text-align:center}.neeto-filters-pane-filter__body .neeto-filters-pane-filter__item-wrapper{display:flex;flex:1;flex-direction:column;gap:8px}.neeto-filters-pane-filter__body .accordion_item .neeto-filters-pane-filter__item-wrapper{flex:1;margin-top:16px}.neeto-filters-pane-filter__body .accordion_item .neeto-filters-pane-filter__item-wrapper:first-of-type{margin-top:0}.neeto-filters-pane-filter__body .accordion_item:first-of-type .neeto-ui-accordion__item{padding-top:0}.neeto-filters-pane-filter__body .neeto-ui-accordion__wrapper--last-item{border-bottom:thin solid rgb(var(--neeto-ui-gray-300))}.neeto-filters-pane-filter__footer{justify-content:space-between}.neeto-filters-pane-filter__footer div{display:flex;gap:8px}.neeto-filters-segment--active{border-color:rgb(var(--neeto-ui-primary-500))!important;box-shadow:0 0 0 1px rgb(var(--neeto-ui-primary-500))!important}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFwcC9qYXZhc2NyaXB0L3NyYy9zdHlsZXNoZWV0cy9jb21wb25lbnRzL19iYXIuc2NzcyIsImFwcC9qYXZhc2NyaXB0L3NyYy9zdHlsZXNoZWV0cy9pbmRleC5zY3NzIiwiYXBwL2phdmFzY3JpcHQvc3JjL3N0eWxlc2hlZXRzL2NvbXBvbmVudHMvX3NsaWRlci5zY3NzIiwiYXBwL2phdmFzY3JpcHQvc3JjL3N0eWxlc2hlZXRzL2Fic3RyYWN0cy9fbWl4aW5zLnNjc3MiLCJhcHAvamF2YXNjcmlwdC9zcmMvc3R5bGVzaGVldHMvY29tcG9uZW50cy9fZmlsdGVycy5zY3NzIiwiYXBwL2phdmFzY3JpcHQvc3JjL3N0eWxlc2hlZXRzL2NvbXBvbmVudHMvX3NlZ21lbnRzLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUJBR0Usa0JBQUEsQ0FGQSxZQUFBLENBQ0EsY0NFRixDRENFLDBCQUtFLHFDQUFBLENBSEEsWUFBQSxDQUVBLE9BQUEsQ0FHQSxZQUFBLENBQ0EsZUFBQSxDQUVBLGVBQUEsQ0FUQSxlQUFBLENBRUEsaUJBQUEsQ0FHQSxxQ0FBQSxDQUdBLGtCQ0VKLENEQ0ksd0NBQ0UsbUNDQ04sQ0RFSSxnQ0FRRSxnSEFBQSxDQUZBLG1DQUFBLENBREEsU0FBQSxDQURBLFdBQUEsQ0FIQSxpQkFBQSxDQUVBLE9BQUEsQ0FEQSxLQUFBLENBS0EscUNDQ04sQ0RPSSxpRUFFRSw4Q0FBQSxDQUNBLGNDTk4sQ0RRTSxpSUFHRSxxQ0FBQSxDQURBLGdDQUFBLENBREEsU0NKUixDRFVJLGdDQUVFLHVEQUFBLENBREEsWUNQTixDRFlFLDhCQUdFLGtCQUFBLENBRkEsbURBQUEsQ0FDQSxlQ1RKLENDOUNFLDRCQUlFLDJCQUFBLENBSEEsY0FBQSxDQUVBLE9BQUEsQ0FEQSxLQUFBLENBR0EsYURpREosQ0MvQ0UsK0JBR0UsMkNBQUEsQ0FDQSxtQ0FBQSxDQUZBLFlBQUEsQ0FEQSxjQUFBLENBS0EsMEJBQUEsQ0FDQSxrQkRnREosQ0M5Q0ksdUNBQ0UsV0RnRE4sQ0M3Q0ksc0NBQ0UsV0QrQ04sQ0M1Q0ksc0NBQ0UsVUQ4Q04sQ0UxREksb0NETkYsK0JBc0JJLFdEOENKLENBQ0YsQ0M1Q0UsNkJBQ0UsMkJBQUEsQ0FFQSxVQUFBLENBREEsUUQrQ0osQ0MzQ0UsOEJBR0UsMkJBQUEsQ0FGQSxVRCtDSixDQzFDRSw0QkFJRSxpQ0FBQSxDQUZBLHVEQUFBLENBR0EsZUFBQSxDQUZBLGNBQUEsQ0FGQSxVRGdESixDQzFDSSxtRUFDRSw0RkQ0Q04sQ0NyQ0UsOEJBR0UsMkNBQUEsQ0FDQSw2Q0FBQSxDQUZBLFlBQUEsQ0FEQSxVRDBDSixDQ3JDSSxxRUFJRSxRQUFBLENBREEsTUFBQSxDQURBLGlCQUFBLENBREEsVUQwQ04sQ0MvQkUsMkRBQ0UsMEJEa0NKLENDN0JFLGtJQUNFLHVCRGlDSixDQ3hCRSwySEFDRSwwQkQrQkosQ0c3SEUsaUNBQ0UsNkJBQUEsQ0FDQSxRSGdJSixDRzlISSxtQ0FDRSxxQkhnSU4sQ0c3SEksbUNBQ0UsaUJIK0hOLENHNUhJLDBFQUNFLFlBQUEsQ0FHQSxNQUFBLENBRkEscUJBQUEsQ0FDQSxPSCtITixDRzFITSwwRkFFRSxNQUFBLENBREEsZUg2SFIsQ0cxSFEsd0dBQ0UsWUg0SFYsQ0d4SFEseUZBQ0UsYUgwSFYsQ0d0SEkseUVBQ0Usc0RId0hOLENHcEhFLG1DQUNFLDZCSHNISixDR3BISSx1Q0FDRSxZQUFBLENBQ0EsT0hzSE4sQ0luS0EsK0JBQ0UsdURBQUEsQ0FDQSwrREpzS0YiLCJzb3VyY2VzQ29udGVudCI6WyIubmVldG8tZmlsdGVycy1iYXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cbiAgJl9fYmxvY2sge1xuICAgIHBhZGRpbmc6IDRweCA4cHg7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgZ2FwOiA0cHg7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbmVldG8tdWktcm91bmRlZCk7XG4gICAgdHJhbnNpdGlvbjogdmFyKC0tbmVldG8tdWktdHJhbnNpdGlvbik7XG4gICAgbWFyZ2luOiA0cHggMDtcbiAgICBtYXgtd2lkdGg6IDM4NHB4O1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAgIHA6Zmlyc3QtY2hpbGQge1xuICAgICAgY29sb3I6IHJnYih2YXIoLS1uZWV0by11aS1ncmF5LTcwMCkpO1xuICAgIH1cblxuICAgICYtY2xvc2Uge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAwO1xuICAgICAgcmlnaHQ6IDA7XG4gICAgICBwYWRkaW5nOiA4cHg7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgICAgY29sb3I6IHJnYih2YXIoLS1uZWV0by11aS1ncmF5LTgwMCkpO1xuICAgICAgdHJhbnNpdGlvbjogdmFyKC0tbmVldG8tdWktdHJhbnNpdGlvbik7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoXG4gICAgICAgIDkwZGVnLFxuICAgICAgICByZ2JhKHZhcigtLW5lZXRvLXVpLWdyYXktMjAwKSwgMC41KSAwJSxcbiAgICAgICAgcmdiYSh2YXIoLS1uZWV0by11aS1ncmF5LTIwMCksIDEpIDI1JVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAmOmhvdmVyLFxuICAgICY6YWN0aXZlIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYih2YXIoLS1uZWV0by11aS1ncmF5LTIwMCkpO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuXG4gICAgICAubmVldG8tZmlsdGVycy1iYXJfX2Jsb2NrLWNsb3NlIHtcbiAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgY29sb3I6IHJnYih2YXIoLS1uZWV0by11aS1ibGFjaykpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1uZWV0by11aS1yb3VuZGVkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmOmZvY3VzIHtcbiAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggcmdiYSh2YXIoLS1uZWV0by11aS1ncmF5LTgwMCksIDE1JSk7XG4gICAgfVxuICB9XG5cbiAgJi0tc2VwYXJhdG9yIHtcbiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIHJnYih2YXIoLS1uZWV0by11aS1ncmF5LTQwMCkpO1xuICAgIG1hcmdpbjogMTJweCA4cHg7XG4gICAgYWxpZ24tc2VsZjogc3RyZXRjaDtcbiAgfVxufVxuIiwiLm5lZXRvLWZpbHRlcnMtYmFyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC13cmFwOiB3cmFwO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuLm5lZXRvLWZpbHRlcnMtYmFyX19ibG9jayB7XG4gIHBhZGRpbmc6IDRweCA4cHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZ2FwOiA0cHg7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLW5lZXRvLXVpLXJvdW5kZWQpO1xuICB0cmFuc2l0aW9uOiB2YXIoLS1uZWV0by11aS10cmFuc2l0aW9uKTtcbiAgbWFyZ2luOiA0cHggMDtcbiAgbWF4LXdpZHRoOiAzODRweDtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5uZWV0by1maWx0ZXJzLWJhcl9fYmxvY2sgcDpmaXJzdC1jaGlsZCB7XG4gIGNvbG9yOiByZ2IodmFyKC0tbmVldG8tdWktZ3JheS03MDApKTtcbn1cbi5uZWV0by1maWx0ZXJzLWJhcl9fYmxvY2stY2xvc2Uge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIHBhZGRpbmc6IDhweDtcbiAgb3BhY2l0eTogMDtcbiAgY29sb3I6IHJnYih2YXIoLS1uZWV0by11aS1ncmF5LTgwMCkpO1xuICB0cmFuc2l0aW9uOiB2YXIoLS1uZWV0by11aS10cmFuc2l0aW9uKTtcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDkwZGVnLCByZ2JhKHZhcigtLW5lZXRvLXVpLWdyYXktMjAwKSwgMC41KSAwJSwgcmdiYSh2YXIoLS1uZWV0by11aS1ncmF5LTIwMCksIDEpIDI1JSk7XG59XG4ubmVldG8tZmlsdGVycy1iYXJfX2Jsb2NrOmhvdmVyLCAubmVldG8tZmlsdGVycy1iYXJfX2Jsb2NrOmFjdGl2ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYih2YXIoLS1uZWV0by11aS1ncmF5LTIwMCkpO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4ubmVldG8tZmlsdGVycy1iYXJfX2Jsb2NrOmhvdmVyIC5uZWV0by1maWx0ZXJzLWJhcl9fYmxvY2stY2xvc2UsIC5uZWV0by1maWx0ZXJzLWJhcl9fYmxvY2s6YWN0aXZlIC5uZWV0by1maWx0ZXJzLWJhcl9fYmxvY2stY2xvc2Uge1xuICBvcGFjaXR5OiAxO1xuICBjb2xvcjogcmdiKHZhcigtLW5lZXRvLXVpLWJsYWNrKSk7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLW5lZXRvLXVpLXJvdW5kZWQpO1xufVxuLm5lZXRvLWZpbHRlcnMtYmFyX19ibG9jazpmb2N1cyB7XG4gIG91dGxpbmU6IG5vbmU7XG4gIGJveC1zaGFkb3c6IDAgMCAwIDNweCByZ2JhKHZhcigtLW5lZXRvLXVpLWdyYXktODAwKSwgMTUlKTtcbn1cbi5uZWV0by1maWx0ZXJzLWJhci0tc2VwYXJhdG9yIHtcbiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCByZ2IodmFyKC0tbmVldG8tdWktZ3JheS00MDApKTtcbiAgbWFyZ2luOiAxMnB4IDhweDtcbiAgYWxpZ24tc2VsZjogc3RyZXRjaDtcbn1cblxuLm5lZXRvLWZpbHRlcnMtc2xpZGVyX19wYW5lIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICBib3JkZXItcmFkaXVzOiAxMnB4IDBweCAwcHggMTJweDtcbiAgei1pbmRleDogOTk5OTg7XG59XG4ubmVldG8tZmlsdGVycy1zbGlkZXJfX3dyYXBwZXIge1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwdmg7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYih2YXIoLS1uZWV0by11aS13aGl0ZSkpO1xuICBib3gtc2hhZG93OiB2YXIoLS1uZWV0by11aS1zaGFkb3ctbSk7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTtcbiAgdHJhbnNpdGlvbjogYWxsIDAuM3M7XG59XG4ubmVldG8tZmlsdGVycy1zbGlkZXJfX3dyYXBwZXItLXhzbWFsbCB7XG4gIHdpZHRoOiAzNjBweDtcbn1cbi5uZWV0by1maWx0ZXJzLXNsaWRlcl9fd3JhcHBlci0tc21hbGwge1xuICB3aWR0aDogNDgwcHg7XG59XG4ubmVldG8tZmlsdGVycy1zbGlkZXJfX3dyYXBwZXItLWxhcmdlIHtcbiAgd2lkdGg6IDUwdnc7XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjdweCkge1xuICAubmVldG8tZmlsdGVycy1zbGlkZXJfX3dyYXBwZXIge1xuICAgIHdpZHRoOiAxMDB2dztcbiAgfVxufVxuLm5lZXRvLWZpbHRlcnMtc2xpZGVyX19jbG9zZSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50O1xuICB0b3A6IDI0cHg7XG4gIHJpZ2h0OiAyNHB4O1xufVxuLm5lZXRvLWZpbHRlcnMtc2xpZGVyX19oZWFkZXIge1xuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogMjRweDtcbiAgcGFkZGluZy1yaWdodDogNjBweDtcbn1cbi5uZWV0by1maWx0ZXJzLXNsaWRlcl9fYm9keSB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IGNhbGMoMTAwdmggLSB2YXIoLS1uZWV0by11aS1wYW5lLWhlYWRlci1oZWlnaHQpKTtcbiAgcGFkZGluZzogMCAyNHB4O1xuICBmb250LXNpemU6IHZhcigtLW5lZXRvLXVpLXRleHQtc20pO1xuICBvdmVyZmxvdy15OiBhdXRvO1xufVxuLm5lZXRvLWZpbHRlcnMtc2xpZGVyX19ib2R5Lm5lZXRvLWZpbHRlcnMtc2xpZGVyX19ib2R5LS1oYXMtZm9vdGVyIHtcbiAgaGVpZ2h0OiBjYWxjKDEwMHZoIC0gdmFyKC0tbmVldG8tdWktcGFuZS1oZWFkZXItaGVpZ2h0KSAtIHZhcigtLW5lZXRvLXVpLXBhbmUtZm9vdGVyLWhlaWdodCkpO1xufVxuLm5lZXRvLWZpbHRlcnMtc2xpZGVyX19mb290ZXIge1xuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogMjRweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiKHZhcigtLW5lZXRvLXVpLXdoaXRlKSk7XG4gIG1pbi1oZWlnaHQ6IHZhcigtLW5lZXRvLXVpLXBhbmUtZm9vdGVyLWhlaWdodCk7XG59XG4ubmVldG8tZmlsdGVycy1zbGlkZXJfX2Zvb3Rlci5uZWV0by1maWx0ZXJzLXNsaWRlcl9fZm9vdGVyX19hYnNvbHV0ZSB7XG4gIHdpZHRoOiAxMDAlO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDA7XG4gIGJvdHRvbTogMDtcbn1cblxuLm5lZXRvLWZpbHRlcnMtc2xpZGVyLWVudGVyIC5uZWV0by1maWx0ZXJzLXNsaWRlcl9fd3JhcHBlciB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTtcbn1cblxuLm5lZXRvLWZpbHRlcnMtc2xpZGVyLWVudGVyLWFjdGl2ZSAubmVldG8tZmlsdGVycy1zbGlkZXJfX3dyYXBwZXIsXG4ubmVldG8tZmlsdGVycy1zbGlkZXItZW50ZXItZG9uZSAubmVldG8tZmlsdGVycy1zbGlkZXJfX3dyYXBwZXIge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XG59XG5cbi5uZWV0by1maWx0ZXJzLXNsaWRlci1leGl0IC5uZWV0by1maWx0ZXJzLXNsaWRlcl9fd3JhcHBlciB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTtcbn1cblxuLm5lZXRvLWZpbHRlcnMtc2xpZGVyLWV4aXQtYWN0aXZlIC5uZWV0by1maWx0ZXJzLXNsaWRlcl9fd3JhcHBlciB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTtcbn1cblxuLm5lZXRvLWZpbHRlcnMtcGFuZS1maWx0ZXJfX2JvZHkge1xuICBhbGlnbi1pdGVtczogc3RyZXRjaCAhaW1wb3J0YW50O1xuICBnYXA6IDIwcHg7XG59XG4ubmVldG8tZmlsdGVycy1wYW5lLWZpbHRlcl9fYm9keSA+ICoge1xuICBmbGV4LWdyb3c6IDAgIWltcG9ydGFudDtcbn1cbi5uZWV0by1maWx0ZXJzLXBhbmUtZmlsdGVyX19ib2R5IHAge1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4ubmVldG8tZmlsdGVycy1wYW5lLWZpbHRlcl9fYm9keSAubmVldG8tZmlsdGVycy1wYW5lLWZpbHRlcl9faXRlbS13cmFwcGVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZ2FwOiA4cHg7XG4gIGZsZXg6IDE7XG59XG4ubmVldG8tZmlsdGVycy1wYW5lLWZpbHRlcl9fYm9keSAuYWNjb3JkaW9uX2l0ZW0gLm5lZXRvLWZpbHRlcnMtcGFuZS1maWx0ZXJfX2l0ZW0td3JhcHBlciB7XG4gIG1hcmdpbi10b3A6IDE2cHg7XG4gIGZsZXg6IDE7XG59XG4ubmVldG8tZmlsdGVycy1wYW5lLWZpbHRlcl9fYm9keSAuYWNjb3JkaW9uX2l0ZW0gLm5lZXRvLWZpbHRlcnMtcGFuZS1maWx0ZXJfX2l0ZW0td3JhcHBlcjpmaXJzdC1vZi10eXBlIHtcbiAgbWFyZ2luLXRvcDogMDtcbn1cbi5uZWV0by1maWx0ZXJzLXBhbmUtZmlsdGVyX19ib2R5IC5hY2NvcmRpb25faXRlbTpmaXJzdC1vZi10eXBlIC5uZWV0by11aS1hY2NvcmRpb25fX2l0ZW0ge1xuICBwYWRkaW5nLXRvcDogMDtcbn1cbi5uZWV0by1maWx0ZXJzLXBhbmUtZmlsdGVyX19ib2R5IC5uZWV0by11aS1hY2NvcmRpb25fX3dyYXBwZXItLWxhc3QtaXRlbSB7XG4gIGJvcmRlci1ib3R0b206IHRoaW4gc29saWQgcmdiKHZhcigtLW5lZXRvLXVpLWdyYXktMzAwKSk7XG59XG4ubmVldG8tZmlsdGVycy1wYW5lLWZpbHRlcl9fZm9vdGVyIHtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xufVxuLm5lZXRvLWZpbHRlcnMtcGFuZS1maWx0ZXJfX2Zvb3RlciBkaXYge1xuICBkaXNwbGF5OiBmbGV4O1xuICBnYXA6IDhweDtcbn1cblxuLm5lZXRvLWZpbHRlcnMtc2VnbWVudC0tYWN0aXZlIHtcbiAgYm9yZGVyLWNvbG9yOiByZ2IodmFyKC0tbmVldG8tdWktcHJpbWFyeS01MDApKSAhaW1wb3J0YW50O1xuICBib3gtc2hhZG93OiAwIDAgMCAxcHggcmdiKHZhcigtLW5lZXRvLXVpLXByaW1hcnktNTAwKSkgIWltcG9ydGFudDtcbn0iLCIubmVldG8tZmlsdGVycy1zbGlkZXIge1xuICAmX19wYW5lIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgdG9wOiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIGJvcmRlci1yYWRpdXM6IDEycHggMHB4IDBweCAxMnB4O1xuICAgIHotaW5kZXg6IDk5OTk4O1xuICB9XG4gICZfX3dyYXBwZXIge1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMHZoO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYih2YXIoLS1uZWV0by11aS13aGl0ZSkpO1xuICAgIGJveC1zaGFkb3c6IHZhcigtLW5lZXRvLXVpLXNoYWRvdy1tKTtcblxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTtcbiAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcztcblxuICAgICYtLXhzbWFsbCB7XG4gICAgICB3aWR0aDogMzYwcHg7XG4gICAgfVxuXG4gICAgJi0tc21hbGwge1xuICAgICAgd2lkdGg6IDQ4MHB4O1xuICAgIH1cblxuICAgICYtLWxhcmdlIHtcbiAgICAgIHdpZHRoOiA1MHZ3O1xuICAgIH1cblxuICAgIEBpbmNsdWRlIHZpZXdwb3J0KG1vYikge1xuICAgICAgd2lkdGg6IDEwMHZ3O1xuICAgIH1cbiAgfVxuICAmX19jbG9zZSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlICFpbXBvcnRhbnQ7XG4gICAgdG9wOiAyNHB4O1xuICAgIHJpZ2h0OiAyNHB4O1xuICB9XG5cbiAgJl9faGVhZGVyIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBwYWRkaW5nOiAyNHB4O1xuICAgIHBhZGRpbmctcmlnaHQ6IDYwcHg7XG4gIH1cblxuICAmX19ib2R5IHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IGNhbGMoMTAwdmggLSB2YXIoLS1uZWV0by11aS1wYW5lLWhlYWRlci1oZWlnaHQpKTtcbiAgICBwYWRkaW5nOiAwIDI0cHg7XG4gICAgZm9udC1zaXplOiB2YXIoLS1uZWV0by11aS10ZXh0LXNtKTtcbiAgICBvdmVyZmxvdy15OiBhdXRvO1xuXG4gICAgJi5uZWV0by1maWx0ZXJzLXNsaWRlcl9fYm9keS0taGFzLWZvb3RlciB7XG4gICAgICBoZWlnaHQ6IGNhbGMoXG4gICAgICAgIDEwMHZoIC0gdmFyKC0tbmVldG8tdWktcGFuZS1oZWFkZXItaGVpZ2h0KSAtXG4gICAgICAgICAgdmFyKC0tbmVldG8tdWktcGFuZS1mb290ZXItaGVpZ2h0KVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAmX19mb290ZXIge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHBhZGRpbmc6IDI0cHg7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKHZhcigtLW5lZXRvLXVpLXdoaXRlKSk7XG4gICAgbWluLWhlaWdodDogdmFyKC0tbmVldG8tdWktcGFuZS1mb290ZXItaGVpZ2h0KTtcblxuICAgICYubmVldG8tZmlsdGVycy1zbGlkZXJfX2Zvb3Rlcl9fYWJzb2x1dGUge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgYm90dG9tOiAwO1xuICAgIH1cbiAgfVxufVxuXG4vLyBDU1MgdHJhbnNpdGlvbiBncm91cFxuXG4ubmVldG8tZmlsdGVycy1zbGlkZXItZW50ZXIge1xuICAubmVldG8tZmlsdGVycy1zbGlkZXJfX3dyYXBwZXIge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTtcbiAgfVxufVxuLm5lZXRvLWZpbHRlcnMtc2xpZGVyLWVudGVyLWFjdGl2ZSxcbi5uZWV0by1maWx0ZXJzLXNsaWRlci1lbnRlci1kb25lIHtcbiAgLm5lZXRvLWZpbHRlcnMtc2xpZGVyX193cmFwcGVyIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XG4gIH1cbn1cbi5uZWV0by1maWx0ZXJzLXNsaWRlci1leGl0IHtcbiAgLm5lZXRvLWZpbHRlcnMtc2xpZGVyX193cmFwcGVyIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAwJSk7XG4gIH1cbn1cbi5uZWV0by1maWx0ZXJzLXNsaWRlci1leGl0LWFjdGl2ZSB7XG4gIC5uZWV0by1maWx0ZXJzLXNsaWRlcl9fd3JhcHBlciB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwMCUpO1xuICB9XG59XG4iLCJAbWl4aW4gdmlld3BvcnQoJG1lZGlhKSB7XG4gIEBpZiAkbWVkaWE9PWRlc2sge1xuICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEyMDBweCkge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9IEBlbHNlIGlmICRtZWRpYT09dGFiLW1pbiB7XG4gICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogMTAyNHB4KSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH0gQGVsc2UgaWYgJG1lZGlhPT10YWItb25seSB7XG4gICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIGFuZCAobWF4LXdpZHRoOiAxMDIzcHgpIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfSBAZWxzZSBpZiAkbWVkaWE9PW1vYiB7XG4gICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfSBAZWxzZSBpZiAkbWVkaWE9PXhzLW1vYiB7XG4gICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDc5cHgpIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfVxufVxuIiwiLm5lZXRvLWZpbHRlcnMtcGFuZS1maWx0ZXIge1xuICAmX19ib2R5IHtcbiAgICBhbGlnbi1pdGVtczogc3RyZXRjaCAhaW1wb3J0YW50O1xuICAgIGdhcDogMjBweDtcblxuICAgID4gKiB7XG4gICAgICBmbGV4LWdyb3c6IDAgIWltcG9ydGFudDtcbiAgICB9XG5cbiAgICBwIHtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB9XG5cbiAgICAubmVldG8tZmlsdGVycy1wYW5lLWZpbHRlcl9faXRlbS13cmFwcGVyIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgZ2FwOiA4cHg7XG4gICAgICBmbGV4OiAxO1xuICAgIH1cblxuICAgIC5hY2NvcmRpb25faXRlbSB7XG4gICAgICAubmVldG8tZmlsdGVycy1wYW5lLWZpbHRlcl9faXRlbS13cmFwcGVyIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMTZweDtcbiAgICAgICAgZmxleDogMTtcblxuICAgICAgICAmOmZpcnN0LW9mLXR5cGUge1xuICAgICAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgICY6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgICAgIC5uZWV0by11aS1hY2NvcmRpb25fX2l0ZW0ge1xuICAgICAgICAgIHBhZGRpbmctdG9wOiAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC5uZWV0by11aS1hY2NvcmRpb25fX3dyYXBwZXItLWxhc3QtaXRlbSB7XG4gICAgICBib3JkZXItYm90dG9tOiB0aGluIHNvbGlkIHJnYih2YXIoLS1uZWV0by11aS1ncmF5LTMwMCkpO1xuICAgIH1cbiAgfVxuXG4gICZfX2Zvb3RlciB7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuXG4gICAgZGl2IHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBnYXA6IDhweDtcbiAgICB9XG4gIH1cbn1cbiIsIi5uZWV0by1maWx0ZXJzLXNlZ21lbnQtLWFjdGl2ZSB7XG4gIGJvcmRlci1jb2xvcjogcmdiKHZhcigtLW5lZXRvLXVpLXByaW1hcnktNTAwKSkgIWltcG9ydGFudDtcbiAgYm94LXNoYWRvdzogMCAwIDAgMXB4IHJnYih2YXIoLS1uZWV0by11aS1wcmltYXJ5LTUwMCkpICFpbXBvcnRhbnQ7XG59XG4iXX0= */";
3790
+ n(css,{});
3791
+
3792
+ 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; }
3793
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
3794
+ var Filters = reactUtils.withT(function (_ref) {
3795
+ var t = _ref.t,
3796
+ size = _ref.size,
3797
+ _ref$isOpen = _ref.isOpen,
3798
+ isOpen = _ref$isOpen === void 0 ? false : _ref$isOpen,
3799
+ _ref$setIsOpen = _ref.setIsOpen,
3800
+ setIsOpen = _ref$setIsOpen === void 0 ? ramda.identity : _ref$setIsOpen,
3801
+ _ref$columns = _ref.columns,
3802
+ columns = _ref$columns === void 0 ? [] : _ref$columns,
3803
+ _ref$onChange = _ref.onChange,
3804
+ onChange = _ref$onChange === void 0 ? ramda.identity : _ref$onChange,
3805
+ _ref$buttonProps = _ref.buttonProps,
3806
+ buttonProps = _ref$buttonProps === void 0 ? {} : _ref$buttonProps,
3807
+ _ref$paneProps = _ref.paneProps,
3808
+ paneProps = _ref$paneProps === void 0 ? {} : _ref$paneProps,
3809
+ _ref$isSearchable = _ref.isSearchable,
3810
+ isSearchable = _ref$isSearchable === void 0 ? false : _ref$isSearchable,
3811
+ className = _ref.className,
3812
+ _ref$onSelectorsChang = _ref.onSelectorsChange,
3813
+ onSelectorsChange = _ref$onSelectorsChang === void 0 ? neetoCist.noop : _ref$onSelectorsChang,
3814
+ _ref$keyword = _ref.keyword,
3815
+ keyword = _ref$keyword === void 0 ? {
3816
+ node: "",
3817
+ value: "",
3818
+ setValue: neetoCist.noop
3819
+ } : _ref$keyword,
3820
+ childrenKeys = _ref.childrenKeys,
3821
+ children = _ref.children;
3822
+ return /*#__PURE__*/React__default["default"].createElement("span", {
3823
+ className: classnames__default["default"](_defineProperty({}, className, className))
3824
+ }, /*#__PURE__*/React__default["default"].createElement(neetoui.Button, _extends$1({
3825
+ "data-cy": "neeto-filters-toggle-btn",
3826
+ label: t("neetoFilters.common.filter"),
3827
+ style: "secondary",
3828
+ onClick: function onClick() {
3829
+ return setIsOpen(true);
3830
+ }
3831
+ }, buttonProps)), /*#__PURE__*/React__default["default"].createElement(Pane, _extends$1({
3832
+ onClose: function onClose() {
3833
+ return setIsOpen(false);
3834
+ }
3835
+ }, _objectSpread({
3836
+ childrenKeys: childrenKeys,
3837
+ columns: columns,
3838
+ isOpen: isOpen,
3839
+ isSearchable: isSearchable,
3840
+ keyword: keyword,
3841
+ onChange: onChange,
3842
+ onSelectorsChange: onSelectorsChange,
3843
+ size: size
3844
+ }, paneProps)), children));
3845
+ });
3846
+
3847
+ var ITEMS_MAX_COUNT = 20;
3848
+ var SEGMENT_ACTIONS = {
3849
+ EDIT: "edit",
3850
+ DELETE: "delete"
3851
+ };
3852
+
3853
+ var Delete = function Delete(_ref) {
3854
+ var isOpen = _ref.isOpen,
3855
+ onClose = _ref.onClose,
3856
+ _ref$segment = _ref.segment,
3857
+ segment = _ref$segment === void 0 ? {} : _ref$segment,
3858
+ _ref$columns = _ref.columns,
3859
+ columns = _ref$columns === void 0 ? [] : _ref$columns;
3860
+ var _useTranslation = reactI18next.useTranslation(),
3861
+ t = _useTranslation.t;
3862
+ var history = reactRouterDom.useHistory();
3863
+ var _getQueryParams = utils.getQueryParams(),
3864
+ segmentId = _getQueryParams.segmentId;
3865
+ var _useDestroySegment = useDestroySegment(),
3866
+ deleteSegment = _useDestroySegment.mutate,
3867
+ isDeleting = _useDestroySegment.isLoading;
3868
+ var handleClearAll = function handleClearAll() {
3869
+ var params = buildUrlFromFilters({
3870
+ columns: columns,
3871
+ filters: [],
3872
+ isClearAll: true
3873
+ });
3874
+ history.push({
3875
+ search: params
3876
+ });
3877
+ };
3878
+ var handleDelete = function handleDelete() {
3879
+ ramda.equals(segment.id, segmentId) && handleClearAll();
3880
+ deleteSegment(segment.id, {
3881
+ onSuccess: onClose
3882
+ });
3883
+ };
3884
+ return /*#__PURE__*/React__default["default"].createElement(neetoui.Alert, {
3885
+ isOpen: isOpen,
3886
+ onClose: onClose,
3887
+ isSubmitting: isDeleting,
3888
+ submitButtonLabel: t("neetoFilters.common.delete"),
3889
+ title: t("neetoFilters.segments.deleteAlertTitle"),
3890
+ message: /*#__PURE__*/React__default["default"].createElement(reactI18next.Trans, {
3891
+ i18nKey: "neetoFilters.segments.deleteAlertMessage",
3892
+ values: {
3893
+ entity: segment.name
3894
+ }
3895
+ }),
3896
+ onSubmit: handleDelete
3897
+ });
3898
+ };
3899
+
3900
+ var useSegments = function useSegments(_ref) {
3901
+ var entity = _ref.entity,
3902
+ columns = _ref.columns,
3903
+ appliedFilters = _ref.appliedFilters,
3904
+ childrenKeys = _ref.childrenKeys;
3905
+ var _useTranslation = reactI18next.useTranslation(),
3906
+ t = _useTranslation.t;
3907
+ var history = reactRouterDom.useHistory();
3908
+ var _useFetchSegments = useFetchSegments({
3909
+ entity: entity
3910
+ }),
3911
+ _useFetchSegments$dat = _useFetchSegments.data,
3912
+ segments = _useFetchSegments$dat === void 0 ? [] : _useFetchSegments$dat,
3913
+ isLoading = _useFetchSegments.isLoading;
3914
+ var _useUpdateSegment = useUpdateSegment(),
3915
+ updateSegment = _useUpdateSegment.mutate,
3916
+ isUpdating = _useUpdateSegment.isLoading;
3917
+ var _useState = React.useState({
3918
+ action: "",
3919
+ segment: undefined
3920
+ }),
3921
+ _useState2 = _slicedToArray(_useState, 2),
3922
+ confirmAction = _useState2[0],
3923
+ setConfirmAction = _useState2[1];
3924
+ var clearAppliedFilters = function clearAppliedFilters() {
3925
+ var _filters$, _filters$2;
3926
+ var filters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : appliedFilters;
3927
+ history.push({
3928
+ search: buildUrlFromFilters({
3929
+ columns: columns,
3930
+ filters: [],
3931
+ isClearAll: true,
3932
+ childrenKeys: ((_filters$ = filters[0]) === null || _filters$ === void 0 ? void 0 : _filters$.conditions) && ramda.pluck("key", neetoCist.filterBy({
3933
+ node: "children"
3934
+ }, (_filters$2 = filters[0]) === null || _filters$2 === void 0 ? void 0 : _filters$2.conditions))
3935
+ })
3936
+ });
3937
+ };
3938
+ var handleSelectSegment = function handleSelectSegment(_ref2) {
3939
+ var _filters$3;
3940
+ var id = _ref2.id,
3941
+ filters = _ref2.filters;
3942
+ history.push({
3943
+ search: buildUrlFromSegment({
3944
+ columns: columns,
3945
+ filters: (_filters$3 = filters[0]) === null || _filters$3 === void 0 ? void 0 : _filters$3.conditions,
3946
+ id: id
3947
+ })
3948
+ });
3949
+ };
3950
+ if (isLoading) {
3951
+ return /*#__PURE__*/React__default["default"].createElement(neetoui.Spinner, null);
3952
+ }
3953
+ if (ramda.isEmpty(segments)) {
3954
+ return /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
3955
+ style: "body2"
3956
+ }, t("neetoFilters.segments.noSegmentsFound"));
3957
+ }
3958
+ var handleUpdate = function handleUpdate(_ref3, _ref4) {
3959
+ var name = _ref3.name;
3960
+ var setFieldError = _ref4.setFieldError;
3961
+ var filtersPayload = buildSegmentsPayload(filters, childrenKeys);
3962
+ updateSegment({
3963
+ id: confirmAction.segment.id,
3964
+ payload: {
3965
+ name: name,
3966
+ filters: filtersPayload
3967
+ },
3968
+ showToastr: false
3969
+ }, {
3970
+ onSuccess: function onSuccess() {
3971
+ utils.showThumbsUpToastr();
3972
+ setConfirmAction({
3973
+ action: "",
3974
+ segment: undefined
3975
+ });
3976
+ },
3977
+ onError: function onError(error) {
3978
+ return setFieldError("name", error.response.data.error);
3979
+ }
3980
+ });
3981
+ };
3982
+ var filters = buildFiltersFromSearchParams(columns);
3983
+ return {
3984
+ segments: segments,
3985
+ clearAppliedFilters: clearAppliedFilters,
3986
+ handleSelectSegment: handleSelectSegment,
3987
+ setConfirmAction: setConfirmAction,
3988
+ isUpdating: isUpdating,
3989
+ handleUpdate: handleUpdate,
3990
+ filters: filters,
3991
+ onClose: function onClose() {
3992
+ return setConfirmAction({
3993
+ action: "",
3994
+ segment: undefined
3995
+ });
3996
+ },
3997
+ selectedSegment: confirmAction.segment,
3998
+ isDeleteAlertOpen: confirmAction.action === SEGMENT_ACTIONS.DELETE,
3999
+ isEditPaneOpen: confirmAction.action === SEGMENT_ACTIONS.EDIT
4000
+ };
4001
+ };
4002
+
4003
+ var Segment = function Segment(_ref) {
4004
+ var id = _ref.id,
4005
+ isActive = _ref.isActive,
4006
+ label = _ref.label,
4007
+ onClick = _ref.onClick,
4008
+ _ref$shouldShowDropdo = _ref.shouldShowDropdown,
4009
+ shouldShowDropdown = _ref$shouldShowDropdo === void 0 ? false : _ref$shouldShowDropdo,
4010
+ segments = _ref.segments,
4011
+ setConfirmAction = _ref.setConfirmAction;
4012
+ var _useTranslation = reactI18next.useTranslation(),
4013
+ t = _useTranslation.t;
4014
+ var menuItems = [{
4015
+ key: "edit",
4016
+ label: t("neetoFilters.common.edit"),
4017
+ onClick: function onClick() {
4018
+ return setConfirmAction({
4019
+ action: SEGMENT_ACTIONS.EDIT,
4020
+ segment: neetoCist.findById(id, segments)
4021
+ });
4022
+ }
4023
+ }, {
4024
+ key: "delete",
4025
+ label: t("neetoFilters.common.delete"),
4026
+ onClick: function onClick() {
4027
+ return setConfirmAction({
4028
+ action: SEGMENT_ACTIONS.DELETE,
4029
+ segment: neetoCist.findById(id, segments)
4030
+ });
4031
+ }
4032
+ }];
4033
+ return /*#__PURE__*/React__default["default"].createElement("div", {
4034
+ onClick: onClick,
4035
+ 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", {
4036
+ "neeto-filters-segment--active": isActive
4037
+ })
4038
+ }, /*#__PURE__*/React__default["default"].createElement("div", {
4039
+ className: "flex flex-grow items-center gap-2 overflow-hidden",
4040
+ "data-cy": "new-element-field"
4041
+ }, /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
4042
+ className: "truncate leading-snug",
4043
+ "data-cy": neetoCist.hyphenate(label),
4044
+ style: "body2"
4045
+ }, label)), shouldShowDropdown && /*#__PURE__*/React__default["default"].createElement(MoreDropdown__default["default"], {
4046
+ menuItems: menuItems,
4047
+ dropdownButtonProps: {
4048
+ className: "min-h-0 flex-shrink-0",
4049
+ "data-cy": "".concat(neetoCist.hyphenate(label), "-more-dropdown")
4050
+ }
4051
+ }));
4052
+ };
4053
+
4054
+ var MenuBlocks = function MenuBlocks(_ref) {
4055
+ var entity = _ref.entity,
4056
+ columns = _ref.columns,
4057
+ defaultSegmentName = _ref.defaultSegmentName,
4058
+ childrenKeys = _ref.childrenKeys,
4059
+ customFilters = _ref.customFilters;
4060
+ var _useTranslation = reactI18next.useTranslation(),
4061
+ t = _useTranslation.t;
4062
+ var segmentFormInitialRef = React.useRef(null);
4063
+ var _useState = React.useState(false),
4064
+ _useState2 = _slicedToArray(_useState, 2),
4065
+ showAll = _useState2[0],
4066
+ setShowAll = _useState2[1];
4067
+ var _getQueryParams = utils.getQueryParams(),
4068
+ segmentId = _getQueryParams.segmentId;
4069
+ var appliedFilters = buildFiltersFromURL(columns);
4070
+ var _useSegments = useSegments({
4071
+ entity: entity,
4072
+ columns: columns,
4073
+ appliedFilters: appliedFilters,
4074
+ childrenKeys: childrenKeys
4075
+ }),
4076
+ _useSegments$segments = _useSegments.segments,
4077
+ segments = _useSegments$segments === void 0 ? [] : _useSegments$segments,
4078
+ clearAppliedFilters = _useSegments.clearAppliedFilters,
4079
+ handleSelectSegment = _useSegments.handleSelectSegment,
4080
+ onClose = _useSegments.onClose,
4081
+ setConfirmAction = _useSegments.setConfirmAction,
4082
+ selectedSegment = _useSegments.selectedSegment,
4083
+ isDeleteAlertOpen = _useSegments.isDeleteAlertOpen,
4084
+ isEditPaneOpen = _useSegments.isEditPaneOpen,
4085
+ isUpdating = _useSegments.isUpdating,
4086
+ handleUpdate = _useSegments.handleUpdate,
4087
+ filters = _useSegments.filters;
4088
+ return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, segments.length > ITEMS_MAX_COUNT && /*#__PURE__*/React__default["default"].createElement(neetoui.Button, {
4089
+ icon: neetoIcons.Down,
4090
+ style: "link",
4091
+ label: showAll ? t("neetoFilters.segments.showLess") : t("neetoFilters.segments.showMoreNumbers", {
4092
+ entity: segments.length - ITEMS_MAX_COUNT
4093
+ }),
4094
+ onClick: function onClick() {
4095
+ return setShowAll(function (open) {
4096
+ return !open;
4097
+ });
4098
+ }
4099
+ }), /*#__PURE__*/React__default["default"].createElement(Segment, {
4100
+ isActive: ramda.isEmpty(appliedFilters),
4101
+ label: defaultSegmentName,
4102
+ onClick: clearAppliedFilters
4103
+ }), segments.slice(0, showAll ? segments.length : ITEMS_MAX_COUNT).map(function (segment) {
4104
+ return /*#__PURE__*/React__default["default"].createElement(Segment, {
4105
+ segments: segments,
4106
+ setConfirmAction: setConfirmAction,
4107
+ shouldShowDropdown: true,
4108
+ id: segment.id,
4109
+ isActive: segment.id === segmentId,
4110
+ key: segment.id,
4111
+ label: segment.name,
4112
+ onClick: function onClick() {
4113
+ return handleSelectSegment(segment);
4114
+ }
4115
+ });
4116
+ }), /*#__PURE__*/React__default["default"].createElement(SegmentForm, {
4117
+ childrenKeys: childrenKeys,
4118
+ columns: columns,
4119
+ customFilters: customFilters,
4120
+ defaultSegmentName: defaultSegmentName,
4121
+ filters: filters,
4122
+ onClose: onClose,
4123
+ segmentFormInitialRef: segmentFormInitialRef,
4124
+ isEdit: true,
4125
+ handleSubmit: handleUpdate,
4126
+ initialValues: selectedSegment,
4127
+ isOpen: isEditPaneOpen,
4128
+ isSubmitting: isUpdating
4129
+ }), /*#__PURE__*/React__default["default"].createElement(Delete, {
4130
+ columns: columns,
4131
+ onClose: onClose,
4132
+ isOpen: isDeleteAlertOpen,
4133
+ segment: selectedSegment
4134
+ }));
4135
+ };
4136
+ var MenuBlocks$1 = /*#__PURE__*/React__default["default"].memo(MenuBlocks);
4137
+
4138
+ var Segments = reactUtils.withT(function (_ref) {
4139
+ var t = _ref.t,
4140
+ entity = _ref.entity,
4141
+ columns = _ref.columns,
4142
+ _ref$defaultSegmentNa = _ref.defaultSegmentName,
4143
+ defaultSegmentName = _ref$defaultSegmentNa === void 0 ? t("neetoFilters.common.allResults") : _ref$defaultSegmentNa,
4144
+ customFilters = _ref.customFilters,
4145
+ _ref$childrenKeys = _ref.childrenKeys,
4146
+ childrenKeys = _ref$childrenKeys === void 0 ? [] : _ref$childrenKeys;
4147
+ 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, {
4148
+ component: "h4",
4149
+ style: "h5",
4150
+ textTransform: "uppercase",
4151
+ weight: "bold"
4152
+ }, t("neetoFilters.common.segments"))), /*#__PURE__*/React__default["default"].createElement(MenuBlocks$1, {
4153
+ childrenKeys: childrenKeys,
4154
+ columns: columns,
4155
+ customFilters: customFilters,
4156
+ defaultSegmentName: defaultSegmentName,
4157
+ entity: entity
4158
+ }));
4159
+ });
4160
+ var index = /*#__PURE__*/React__default["default"].memo(Segments);
4161
+
4162
+ exports.Bar = Bar;
4163
+ exports.Filters = Filters;
4164
+ exports.Segments = index;
4165
+ exports.buildFilterColumnsFromFields = buildFilterColumnsFromFields;
4166
+ exports.buildFiltersFromURL = buildFiltersFromURL;
4167
+ exports.buildSelectorsFromURL = buildSelectorsFromURL;
4168
+ exports.buildUrlFromFilters = buildUrlFromFilters;
4169
+ exports.buildUrlFromSegment = buildUrlFromSegment;
4170
+ exports.useDestroySegment = useDestroySegment;
4171
+ exports.useFetchSegments = useFetchSegments;
4172
+ exports.useUpdateSegment = useUpdateSegment;
4173
+ //# sourceMappingURL=index.cjs.js.map