@bigbinary/neeto-commons-frontend 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/initializers.js CHANGED
@@ -1,21 +1,19 @@
1
- 'use strict';
1
+ import { Toastr } from '@bigbinary/neetoui';
2
+ import axios from 'axios';
3
+ import i18next from 'i18next';
4
+ import { values, evolve, omit, modify, mergeDeepLeft, either, isEmpty, isNil } from 'ramda';
5
+ import { initReactI18next } from 'react-i18next';
6
+ import mixpanel from 'mixpanel-browser';
2
7
 
3
- var objects = require('pure/objects');
4
- var axios = require('axios');
5
- var ramda = require('ramda');
6
- var mixpanel = require('mixpanel-browser');
7
- var i18n = require('i18next');
8
- var reactI18next = require('react-i18next');
8
+ function _typeof(obj) {
9
+ "@babel/helpers - typeof";
9
10
 
10
- function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
11
-
12
- var axios__default = /*#__PURE__*/_interopDefaultLegacy(axios);
13
- var mixpanel__default = /*#__PURE__*/_interopDefaultLegacy(mixpanel);
14
- var i18n__default = /*#__PURE__*/_interopDefaultLegacy(i18n);
15
-
16
- var _document$getElements, _document$getElements2;
17
- window.globalProps = objects.keysToCamelCase(JSON.parse(((_document$getElements = document.getElementsByClassName("root-container")[0]) === null || _document$getElements === void 0 ? void 0 : (_document$getElements2 = _document$getElements.dataset) === null || _document$getElements2 === void 0 ? void 0 : _document$getElements2.reactProps) || "{}"));
18
- objects.deepFreezeObject(window.globalProps);
11
+ return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) {
12
+ return typeof obj;
13
+ } : function (obj) {
14
+ return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
15
+ }, _typeof(obj);
16
+ }
19
17
 
20
18
  function _defineProperty(obj, key, value) {
21
19
  if (key in obj) {
@@ -32,6 +30,124 @@ function _defineProperty(obj, key, value) {
32
30
  return obj;
33
31
  }
34
32
 
33
+ function _arrayWithHoles(arr) {
34
+ if (Array.isArray(arr)) return arr;
35
+ }
36
+
37
+ function _iterableToArrayLimit(arr, i) {
38
+ var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
39
+
40
+ if (_i == null) return;
41
+ var _arr = [];
42
+ var _n = true;
43
+ var _d = false;
44
+
45
+ var _s, _e;
46
+
47
+ try {
48
+ for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {
49
+ _arr.push(_s.value);
50
+
51
+ if (i && _arr.length === i) break;
52
+ }
53
+ } catch (err) {
54
+ _d = true;
55
+ _e = err;
56
+ } finally {
57
+ try {
58
+ if (!_n && _i["return"] != null) _i["return"]();
59
+ } finally {
60
+ if (_d) throw _e;
61
+ }
62
+ }
63
+
64
+ return _arr;
65
+ }
66
+
67
+ function _arrayLikeToArray(arr, len) {
68
+ if (len == null || len > arr.length) len = arr.length;
69
+
70
+ for (var i = 0, arr2 = new Array(len); i < len; i++) {
71
+ arr2[i] = arr[i];
72
+ }
73
+
74
+ return arr2;
75
+ }
76
+
77
+ function _unsupportedIterableToArray(o, minLen) {
78
+ if (!o) return;
79
+ if (typeof o === "string") return _arrayLikeToArray(o, minLen);
80
+ var n = Object.prototype.toString.call(o).slice(8, -1);
81
+ if (n === "Object" && o.constructor) n = o.constructor.name;
82
+ if (n === "Map" || n === "Set") return Array.from(o);
83
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
84
+ }
85
+
86
+ function _nonIterableRest() {
87
+ throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
88
+ }
89
+
90
+ function _slicedToArray(arr, i) {
91
+ return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
92
+ }
93
+
94
+ var snakeToCamelCase = function snakeToCamelCase(string) {
95
+ return string.replace(/(_\w)/g, function (letter) {
96
+ return letter[1].toUpperCase();
97
+ });
98
+ };
99
+ var camelToSnakeCase = function camelToSnakeCase(string) {
100
+ return string.replace(/[A-Z]/g, function (letter) {
101
+ return "_".concat(letter.toLowerCase());
102
+ });
103
+ };
104
+
105
+ var transformObjectDeep = function transformObjectDeep(object, keyValueTransformer) {
106
+ var objectPreProcessor = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;
107
+
108
+ if (objectPreProcessor && typeof objectPreProcessor === "function") {
109
+ object = objectPreProcessor(object);
110
+ }
111
+
112
+ if (Array.isArray(object)) {
113
+ return object.map(function (obj) {
114
+ return transformObjectDeep(obj, keyValueTransformer, objectPreProcessor);
115
+ });
116
+ } else if (object === null || _typeof(object) !== "object") {
117
+ return object;
118
+ }
119
+
120
+ return Object.fromEntries(Object.entries(object).map(function (_ref3) {
121
+ var _ref4 = _slicedToArray(_ref3, 2),
122
+ key = _ref4[0],
123
+ value = _ref4[1];
124
+
125
+ return keyValueTransformer(key, transformObjectDeep(value, keyValueTransformer, objectPreProcessor));
126
+ }));
127
+ };
128
+ var keysToCamelCase = function keysToCamelCase(object) {
129
+ return transformObjectDeep(object, function (key, value) {
130
+ return [snakeToCamelCase(key), value];
131
+ });
132
+ };
133
+ var serializeKeysToSnakeCase = function serializeKeysToSnakeCase(object) {
134
+ return transformObjectDeep(object, function (key, value) {
135
+ return [camelToSnakeCase(key), value];
136
+ }, function (object) {
137
+ return typeof (object === null || object === void 0 ? void 0 : object.toJSON) === "function" ? object.toJSON() : object;
138
+ });
139
+ };
140
+ var deepFreezeObject = function deepFreezeObject(object) {
141
+ if (object && _typeof(object) === "object" && !Object.isFrozen(object)) {
142
+ Object.keys(object).forEach(function (property) {
143
+ return deepFreezeObject(object[property]);
144
+ });
145
+ Object.freeze(object);
146
+ }
147
+
148
+ return object;
149
+ };
150
+
35
151
  var HEADERS_KEYS = {
36
152
  xAuthEmail: "X-Auth-Email",
37
153
  xAuthToken: "X-Auth-Token",
@@ -39,21 +155,19 @@ var HEADERS_KEYS = {
39
155
  };
40
156
 
41
157
  var resetAuthTokens = function resetAuthTokens() {
42
- ramda.values(HEADERS_KEYS).forEach(function (header) {
43
- delete axios__default["default"].defaults.headers[header];
158
+ values(HEADERS_KEYS).forEach(function (header) {
159
+ delete axios.defaults.headers[header];
44
160
  });
45
161
  };
46
162
 
47
- var setAxiosDefaults = function setAxiosDefaults() {
48
- axios__default["default"].defaults.baseURL = "/";
49
- setAuthHeaders();
50
- registerIntercepts();
163
+ var shouldNot = function shouldNot(skip) {
164
+ return _typeof(skip) === "object" || !skip;
51
165
  };
52
166
 
53
167
  var setAuthHeaders = function setAuthHeaders() {
54
168
  var _globalProps$user, _globalProps$user2;
55
169
 
56
- axios__default["default"].defaults.headers = _defineProperty({
170
+ axios.defaults.headers = _defineProperty({
57
171
  Accept: "application/json",
58
172
  "Content-Type": "application/json"
59
173
  }, HEADERS_KEYS.xCsrfToken, document.querySelector('[name="csrf-token"]').getAttribute("content"));
@@ -61,46 +175,118 @@ var setAuthHeaders = function setAuthHeaders() {
61
175
  var email = (_globalProps$user2 = globalProps.user) === null || _globalProps$user2 === void 0 ? void 0 : _globalProps$user2.email;
62
176
 
63
177
  if (token && email) {
64
- axios__default["default"].defaults.headers[HEADERS_KEYS.xAuthEmail] = email;
65
- axios__default["default"].defaults.headers[HEADERS_KEYS.xAuthToken] = token;
178
+ axios.defaults.headers[HEADERS_KEYS.xAuthEmail] = email;
179
+ axios.defaults.headers[HEADERS_KEYS.xAuthToken] = token;
66
180
  }
181
+ }; // pipe function from ramda doesn't accept array of functions.
182
+ // We can't use spread operator too. So this is a workaround.
183
+
184
+
185
+ var createPipe = function createPipe(functions) {
186
+ return function (data) {
187
+ return functions.reduce(function (acc, fn) {
188
+ return fn(acc);
189
+ }, data);
190
+ };
67
191
  };
68
192
 
69
- var handleSuccessResponse = function handleSuccessResponse(response) {
70
- var _response$config = response.config,
71
- _response$config$tran = _response$config.transformResponseCase,
72
- transformResponseCase = _response$config$tran === void 0 ? true : _response$config$tran,
73
- _response$config$incl = _response$config.includeMetadataInResponse,
74
- includeMetadataInResponse = _response$config$incl === void 0 ? false : _response$config$incl;
193
+ var transformKeysToCamelCase = function transformKeysToCamelCase(response) {
194
+ var _response$config$tran = response.config.transformResponseCase,
195
+ transformResponseCase = _response$config$tran === void 0 ? true : _response$config$tran;
75
196
 
76
- if (transformResponseCase && response.data) {
77
- response.data = objects.keysToCamelCase(response.data);
197
+ if (response.data && transformResponseCase) {
198
+ response.data = keysToCamelCase(response.data);
78
199
  }
79
200
 
201
+ return response;
202
+ };
203
+
204
+ var showSuccessToastr = function showSuccessToastr(response) {
205
+ var _response$config$show = response.config.showToastr,
206
+ showToastr = _response$config$show === void 0 ? true : _response$config$show;
207
+
208
+ if (showToastr && typeof response.data.notice === "string") {
209
+ Toastr.success(response.data.notice);
210
+ }
211
+
212
+ return response;
213
+ };
214
+
215
+ var pullDataFromResponse = function pullDataFromResponse(response) {
216
+ var _response$config$incl = response.config.includeMetadataInResponse,
217
+ includeMetadataInResponse = _response$config$incl === void 0 ? false : _response$config$incl;
80
218
  return includeMetadataInResponse ? response : response.data;
81
219
  };
82
220
 
83
- var handleErrorResponse = function handleErrorResponse(error) {
84
- var _error$response, _error$response2;
221
+ var buildSuccessResponseHandler = function buildSuccessResponseHandler(skip) {
222
+ var interceptors = [];
223
+ if (!(skip !== null && skip !== void 0 && skip.transformCase)) interceptors.push(transformKeysToCamelCase);
224
+ if (!(skip !== null && skip !== void 0 && skip.showToastr)) interceptors.push(showSuccessToastr);
225
+ if (!(skip !== null && skip !== void 0 && skip.pullDataFromResponse)) interceptors.push(pullDataFromResponse);
226
+ return createPipe(interceptors);
227
+ };
85
228
 
86
- if (((_error$response = error.response) === null || _error$response === void 0 ? void 0 : _error$response.status) === 404) {
87
- window.location.href = "/page-not-found";
88
- } else if (((_error$response2 = error.response) === null || _error$response2 === void 0 ? void 0 : _error$response2.status) === 401) {
89
- resetAuthTokens();
229
+ var handleUnauthorizedErrorResponse = function handleUnauthorizedErrorResponse(error) {
230
+ var _error$response;
231
+
232
+ if (((_error$response = error.response) === null || _error$response === void 0 ? void 0 : _error$response.status) !== 401) return error;
233
+ resetAuthTokens();
234
+ var _error$config$redirec = error.config.redirectOnError,
235
+ redirectOnError = _error$config$redirec === void 0 ? true : _error$config$redirec;
236
+
237
+ if (redirectOnError) {
90
238
  setTimeout(function () {
91
239
  var redirectTo = window.location.pathname === "/login" ? "/login" : "/login?redirect_uri=".concat(encodeURIComponent(window.location.href));
92
240
  window.location.href = redirectTo;
93
241
  }, 300);
94
242
  }
95
243
 
96
- return Promise.reject(error);
244
+ return error;
245
+ };
246
+
247
+ var showErrorToastr = function showErrorToastr(error) {
248
+ var _error$config$showToa = error.config.showToastr,
249
+ showToastr = _error$config$showToa === void 0 ? true : _error$config$showToa;
250
+ if (!showToastr) return error;
251
+
252
+ if (axios.isCancel(error)) {
253
+ Toastr.error(i18next.t("neetoCommons.toastr.error.requestCanceled"));
254
+ } else if (error.message === "Network Error") {
255
+ Toastr.error(i18next.t("neetoCommons.toastr.error.networkError"));
256
+ } else {
257
+ Toastr.error(error);
258
+ }
259
+
260
+ return error;
261
+ };
262
+
263
+ var redirect404 = function redirect404(error) {
264
+ var _error$response2;
265
+
266
+ var _error$config$redirec2 = error.config.redirectOnError,
267
+ redirectOnError = _error$config$redirec2 === void 0 ? true : _error$config$redirec2;
268
+
269
+ if (redirectOnError && ((_error$response2 = error.response) === null || _error$response2 === void 0 ? void 0 : _error$response2.status) === 404) {
270
+ window.location.href = "/page-not-found";
271
+ }
272
+
273
+ return error;
274
+ };
275
+
276
+ var buildErrorResponseHandler = function buildErrorResponseHandler(skip) {
277
+ var interceptors = [];
278
+ if (!(skip !== null && skip !== void 0 && skip.redirectOn404)) interceptors.push(redirect404);
279
+ if (!(skip !== null && skip !== void 0 && skip.logoutOn401)) interceptors.push(handleUnauthorizedErrorResponse);
280
+ if (!(skip !== null && skip !== void 0 && skip.showToastr)) interceptors.push(showErrorToastr);
281
+ interceptors.push(Promise.reject.bind(Promise));
282
+ return createPipe(interceptors);
97
283
  };
98
284
 
99
285
  var cleanupCredentialsForCrossOrigin = function cleanupCredentialsForCrossOrigin(request) {
100
286
  if (!request.url.includes("://")) return request;
101
287
  if (request.url.includes(window.location.hostname)) return request;
102
- return ramda.evolve({
103
- headers: ramda.omit(ramda.values(HEADERS_KEYS))
288
+ return evolve({
289
+ headers: omit(values(HEADERS_KEYS))
104
290
  })(request);
105
291
  };
106
292
 
@@ -108,36 +294,39 @@ var transformDataToSnakeCase = function transformDataToSnakeCase(request) {
108
294
  var _request$transformReq = request.transformRequestCase,
109
295
  transformRequestCase = _request$transformReq === void 0 ? true : _request$transformReq;
110
296
  if (!transformRequestCase || !request.data) return request;
111
- return ramda.evolve({
112
- data: objects.keysToSnakeCase
113
- })(request);
297
+ return modify("data", serializeKeysToSnakeCase, request);
114
298
  };
115
299
 
116
- var registerIntercepts = function registerIntercepts() {
117
- axios__default["default"].interceptors.request.use(ramda.pipe(cleanupCredentialsForCrossOrigin, transformDataToSnakeCase));
118
- axios__default["default"].interceptors.response.use(handleSuccessResponse, handleErrorResponse);
300
+ var addRequestInterceptors = function addRequestInterceptors(skip) {
301
+ if (!(skip !== null && skip !== void 0 && skip.cleanCredentialsForCrossOrigin)) {
302
+ axios.interceptors.request.use(cleanupCredentialsForCrossOrigin);
303
+ }
304
+
305
+ if (!(skip !== null && skip !== void 0 && skip.transformCase)) {
306
+ axios.interceptors.request.use(transformDataToSnakeCase);
307
+ }
119
308
  };
120
309
 
121
- setAxiosDefaults();
310
+ var addResponseInterceptors = function addResponseInterceptors(skip) {
311
+ axios.interceptors.response.use(buildSuccessResponseHandler(skip), buildErrorResponseHandler(skip));
312
+ };
122
313
 
123
- var isProduction = process.env.NODE_ENV === "production";
124
- var isTokenPresent = !!process.env.MIXPANEL_TOKEN;
125
- var isUserLoggedIn = !ramda.either(ramda.isEmpty, ramda.isNil)(globalProps.user);
314
+ var registerIntercepts = function registerIntercepts(skip) {
315
+ if (shouldNot(skip === null || skip === void 0 ? void 0 : skip.request)) addRequestInterceptors(skip === null || skip === void 0 ? void 0 : skip.request);
316
+ if (shouldNot(skip === null || skip === void 0 ? void 0 : skip.response)) addResponseInterceptors(skip === null || skip === void 0 ? void 0 : skip.response);
317
+ };
126
318
 
127
- if (isProduction && isTokenPresent && isUserLoggedIn) {
128
- mixpanel__default["default"].init(process.env.MIXPANEL_TOKEN);
129
- mixpanel__default["default"].people.set({
130
- $email: globalProps.user.email,
131
- $fist_name: globalProps.user.firstName,
132
- $last_name: globalProps.user.lastName
133
- });
134
- mixpanel__default["default"].identify(globalProps.user.email);
135
- } else {
136
- /*
137
- We need to initialize mixpanel with a bogus token in development and test environment to
138
- prevent mixpanel library from throwing an error when we use mixpanel.track() method in react components.
139
- */
140
- mixpanel__default["default"].init("TEST_TOKEN");
319
+ function initializeAxios(skip) {
320
+ if (!(skip !== null && skip !== void 0 && skip.baseURL)) axios.defaults.baseURL = "/";
321
+ if (!(skip !== null && skip !== void 0 && skip.authHeaders)) setAuthHeaders();
322
+ if (shouldNot(skip === null || skip === void 0 ? void 0 : skip.interceptors)) registerIntercepts(skip === null || skip === void 0 ? void 0 : skip.interceptors);
323
+ }
324
+
325
+ function initializeGlobalProps() {
326
+ var _document$getElements, _document$getElements2;
327
+
328
+ window.globalProps = keysToCamelCase(JSON.parse(((_document$getElements = document.getElementsByClassName("root-container")[0]) === null || _document$getElements === void 0 ? void 0 : (_document$getElements2 = _document$getElements.dataset) === null || _document$getElements2 === void 0 ? void 0 : _document$getElements2.reactProps) || "{}"));
329
+ deepFreezeObject(window.globalProps);
141
330
  }
142
331
 
143
332
  var neetoCommons = {
@@ -145,9 +334,14 @@ var neetoCommons = {
145
334
  pageDoesNotExist: "Page does not exist.",
146
335
  goToHome: "Go home"
147
336
  },
337
+ fallbackComponent: {
338
+ somethingWentWrong: "Sorry, something went wrong.",
339
+ tryReloading: "Please try reloading the page.",
340
+ reload: "Reload"
341
+ },
148
342
  sidebar: {
149
- profile: "Profile",
150
- orgSettings: "Organization Settings",
343
+ myProfile: "My Profile",
344
+ myOrganization: "My Organization",
151
345
  logout: "Logout",
152
346
  help: "Help"
153
347
  },
@@ -160,6 +354,10 @@ var neetoCommons = {
160
354
  toastr: {
161
355
  success: {
162
356
  copiedToClipboard: "Copied to clipboard!"
357
+ },
358
+ error: {
359
+ requestCanceled: "Request cancelled",
360
+ networkError: "No Internet Connection"
163
361
  }
164
362
  },
165
363
  notice: {
@@ -171,8 +369,8 @@ var en = {
171
369
  };
172
370
 
173
371
  var initializeI18n = function initializeI18n(resources) {
174
- i18n__default["default"].use(reactI18next.initReactI18next).init({
175
- resources: ramda.mergeDeepLeft({
372
+ i18next.use(initReactI18next).init({
373
+ resources: mergeDeepLeft({
176
374
  en: {
177
375
  translation: en
178
376
  }
@@ -186,10 +384,45 @@ var initializeI18n = function initializeI18n(resources) {
186
384
  });
187
385
  };
188
386
 
189
- /* eslint-disable import/order */
387
+ function initializeMixPanel() {
388
+ var isProduction = process.env.NODE_ENV === "production";
389
+ var isTokenPresent = !!process.env.MIXPANEL_TOKEN;
390
+ var isUserLoggedIn = !either(isEmpty, isNil)(globalProps.user);
391
+
392
+ if (isProduction && isTokenPresent && isUserLoggedIn) {
393
+ mixpanel.init(process.env.MIXPANEL_TOKEN || "");
394
+ mixpanel.people.set({
395
+ $email: globalProps.user.email,
396
+ $fist_name: globalProps.user.firstName,
397
+ $last_name: globalProps.user.lastName
398
+ });
399
+ mixpanel.identify(globalProps.user.email);
400
+ } else {
401
+ /*
402
+ We need to initialize mixpanel with a bogus token in development and test environment to
403
+ prevent mixpanel library from throwing an error when we use mixpanel.track() method in react components.
404
+ */
405
+ mixpanel.init("TEST_TOKEN");
406
+ }
407
+ }
408
+
409
+ var globalProps$1 = {};
190
410
  function initializeApplication(_ref) {
191
- var translationResources = _ref.translationResources;
192
- initializeI18n(translationResources);
411
+ var translationResources = _ref.translationResources,
412
+ skip = _ref.skip;
413
+
414
+ if (!(skip !== null && skip !== void 0 && skip.globalProps)) {
415
+ initializeGlobalProps();
416
+ globalProps$1 = window.globalProps;
417
+ }
418
+
419
+ if (!(skip !== null && skip !== void 0 && skip.mixpanel)) initializeMixPanel();
420
+
421
+ if (_typeof(skip === null || skip === void 0 ? void 0 : skip.axios) === "object" || !(skip !== null && skip !== void 0 && skip.axios)) {
422
+ initializeAxios(skip === null || skip === void 0 ? void 0 : skip.axios);
423
+ }
424
+
425
+ if (!(skip !== null && skip !== void 0 && skip.i18n)) initializeI18n(translationResources);
193
426
  }
194
427
 
195
- module.exports = initializeApplication;
428
+ export { initializeApplication as default, globalProps$1 as globalProps };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bigbinary/neeto-commons-frontend",
3
- "version": "0.0.1",
3
+ "version": "0.0.2",
4
4
  "description": "A package encapsulating common code across neeto projects including initializers, utility functions, common components and hooks and so on.",
5
5
  "repository": "git@github.com:bigbinary/neeto-commons-frontend.git",
6
6
  "author": "Amaljith K <amaljith.k@bigbinary.com>",
@@ -13,23 +13,41 @@
13
13
  "watch": "rollup -c rollup.config.js --watch"
14
14
  },
15
15
  "files": [
16
- "initializers*.js",
17
- "react*.js",
18
- "utils*.js",
19
- "pure*.js"
16
+ "initializers.*",
17
+ "react-utils.*",
18
+ "utils.*",
19
+ "pure.*"
20
20
  ],
21
21
  "lint-staged": {
22
22
  "**/*.{js,jsx,json}": [
23
23
  ".scripts/fix-lints.sh"
24
24
  ]
25
25
  },
26
+ "exports": {
27
+ "./react-utils": {
28
+ "import": "./react-utils.js",
29
+ "require": "./react-utils.cjs.js"
30
+ },
31
+ "./utils": {
32
+ "import": "./utils.js",
33
+ "require": "./utils.cjs.js"
34
+ },
35
+ "./pure": {
36
+ "import": "./pure.js",
37
+ "require": "./pure.cjs.js"
38
+ },
39
+ "./initializers": {
40
+ "import": "./initializers.js",
41
+ "require": "./initializers.cjs.js"
42
+ }
43
+ },
26
44
  "devDependencies": {
27
45
  "@babel/eslint-parser": "^7.18.2",
28
46
  "@babel/plugin-transform-runtime": "^7.18.5",
29
47
  "@babel/preset-env": "^7.17.10",
30
48
  "@babel/preset-react": "^7.16.7",
31
49
  "@bigbinary/neeto-icons": "^1.8.35",
32
- "@bigbinary/neetoui": "^3.5.11",
50
+ "@bigbinary/neetoui": "^3.5.16",
33
51
  "@honeybadger-io/react": "2.0.1",
34
52
  "@rollup/plugin-alias": "^3.1.9",
35
53
  "@rollup/plugin-babel": "^5.3.1",
@@ -63,6 +81,7 @@
63
81
  "lint-staged": "^12.3.7",
64
82
  "mixpanel-browser": "^2.45.0",
65
83
  "prettier": "^2.6.2",
84
+ "qs": "^6.11.0",
66
85
  "ramda": "^0.28.0",
67
86
  "react": "^17.0.2",
68
87
  "react-dom": "17.0.2",
@@ -77,7 +96,7 @@
77
96
  "dependencies": {},
78
97
  "peerDependencies": {
79
98
  "@bigbinary/neeto-icons": "^1.8.35",
80
- "@bigbinary/neetoui": "^3.5.11",
99
+ "@bigbinary/neetoui": "^3.5.16",
81
100
  "@honeybadger-io/react": "2.0.1",
82
101
  "axios": "^0.27.2",
83
102
  "dayjs": "1.11.1",