@bigbinary/neeto-integrations-frontend 2.3.1 → 2.5.0

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,709 @@
1
+ 'use strict';
2
+
3
+ var React = require('react');
4
+ var pure = require('@bigbinary/neeto-commons-frontend/pure');
5
+ require('@bigbinary/neeto-molecules/IntegrationCard');
6
+ require('@bigbinary/neeto-molecules/IntegrationDisconnectAlert');
7
+ require('@bigbinary/neeto-molecules/IntegrationWalkthroughModal');
8
+ var neetoui = require('@bigbinary/neetoui');
9
+ var classnames = require('classnames');
10
+ var reactI18next = require('react-i18next');
11
+ var ramda = require('ramda');
12
+ var i18next = require('i18next');
13
+ var formik = require('@bigbinary/neetoui/formik');
14
+ var reactUtils = require('@bigbinary/neeto-commons-frontend/react-utils');
15
+ var constants = require('@bigbinary/neeto-commons-frontend/constants');
16
+ var reactQuery = require('react-query');
17
+ var axios = require('axios');
18
+ var yup = require('yup');
19
+
20
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
21
+
22
+ function _interopNamespace(e) {
23
+ if (e && e.__esModule) return e;
24
+ var n = Object.create(null);
25
+ if (e) {
26
+ Object.keys(e).forEach(function (k) {
27
+ if (k !== 'default') {
28
+ var d = Object.getOwnPropertyDescriptor(e, k);
29
+ Object.defineProperty(n, k, d.get ? d : {
30
+ enumerable: true,
31
+ get: function () { return e[k]; }
32
+ });
33
+ }
34
+ });
35
+ }
36
+ n["default"] = e;
37
+ return Object.freeze(n);
38
+ }
39
+
40
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
41
+ var classnames__default = /*#__PURE__*/_interopDefaultLegacy(classnames);
42
+ var i18next__default = /*#__PURE__*/_interopDefaultLegacy(i18next);
43
+ var axios__default = /*#__PURE__*/_interopDefaultLegacy(axios);
44
+ var yup__namespace = /*#__PURE__*/_interopNamespace(yup);
45
+
46
+ function _arrayWithHoles(arr) {
47
+ if (Array.isArray(arr)) return arr;
48
+ }
49
+
50
+ function _iterableToArrayLimit(arr, i) {
51
+ var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"];
52
+ if (null != _i) {
53
+ var _s,
54
+ _e,
55
+ _x,
56
+ _r,
57
+ _arr = [],
58
+ _n = !0,
59
+ _d = !1;
60
+ try {
61
+ if (_x = (_i = _i.call(arr)).next, 0 === i) {
62
+ if (Object(_i) !== _i) return;
63
+ _n = !1;
64
+ } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0);
65
+ } catch (err) {
66
+ _d = !0, _e = err;
67
+ } finally {
68
+ try {
69
+ if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return;
70
+ } finally {
71
+ if (_d) throw _e;
72
+ }
73
+ }
74
+ return _arr;
75
+ }
76
+ }
77
+
78
+ function _arrayLikeToArray(arr, len) {
79
+ if (len == null || len > arr.length) len = arr.length;
80
+ for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
81
+ return arr2;
82
+ }
83
+
84
+ function _unsupportedIterableToArray(o, minLen) {
85
+ if (!o) return;
86
+ if (typeof o === "string") return _arrayLikeToArray(o, minLen);
87
+ var n = Object.prototype.toString.call(o).slice(8, -1);
88
+ if (n === "Object" && o.constructor) n = o.constructor.name;
89
+ if (n === "Map" || n === "Set") return Array.from(o);
90
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
91
+ }
92
+
93
+ function _nonIterableRest() {
94
+ throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
95
+ }
96
+
97
+ function _slicedToArray(arr, i) {
98
+ return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
99
+ }
100
+
101
+ var Stepper = function Stepper(_ref) {
102
+ var _ref$steps = _ref.steps,
103
+ steps = _ref$steps === void 0 ? {} : _ref$steps;
104
+ var isActiveOrCompleted = function isActiveOrCompleted(activeStatus, completedStatus) {
105
+ return activeStatus || completedStatus;
106
+ };
107
+ return /*#__PURE__*/React__default["default"].createElement("ul", {
108
+ className: "flex gap-4"
109
+ }, steps === null || steps === void 0 ? void 0 : steps.map(function (_ref2) {
110
+ var step = _ref2.step,
111
+ label = _ref2.label,
112
+ isActive = _ref2.isActive,
113
+ isCompleted = _ref2.isCompleted;
114
+ return /*#__PURE__*/React__default["default"].createElement("li", {
115
+ className: "flex items-center gap-4",
116
+ key: step
117
+ }, step !== "1" && /*#__PURE__*/React__default["default"].createElement("div", {
118
+ className: classnames__default["default"]("w-10 border-b", {
119
+ "neeto-ui-border-gray-800": isActiveOrCompleted(isActive, isCompleted),
120
+ "neeto-ui-border-gray-400": !isActiveOrCompleted(isActive, isCompleted)
121
+ })
122
+ }), /*#__PURE__*/React__default["default"].createElement("div", {
123
+ className: "flex items-center gap-2"
124
+ }, /*#__PURE__*/React__default["default"].createElement("div", {
125
+ className: classnames__default["default"]("neeto-ui-rounded-full neeto-ui-gray-600 flex h-6 w-6 items-center justify-center border", {
126
+ "neeto-ui-bg-success-600 neeto-ui-border-success-600 neeto-ui-text-white": isActive,
127
+ "neeto-ui-bg-primary-600 neeto-ui-border-primary-600 neeto-ui-text-white": isCompleted,
128
+ "neeto-ui-border-gray-400": !isActiveOrCompleted(isActive, isCompleted)
129
+ })
130
+ }, /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
131
+ component: "span",
132
+ style: "body2",
133
+ weight: "normal"
134
+ }, step)), /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
135
+ style: "body2",
136
+ weight: "normal",
137
+ className: classnames__default["default"]({
138
+ "neeto-ui-text-gray-800": isActiveOrCompleted(isActive, isCompleted),
139
+ "neeto-ui-text-gray-600": !isActiveOrCompleted(isActive, isCompleted)
140
+ })
141
+ }, label)));
142
+ }));
143
+ };
144
+
145
+ var Modal = function Modal(_ref) {
146
+ var _ref$isOpen = _ref.isOpen,
147
+ isOpen = _ref$isOpen === void 0 ? pure.noop : _ref$isOpen,
148
+ _ref$onClose = _ref.onClose,
149
+ onClose = _ref$onClose === void 0 ? pure.noop : _ref$onClose,
150
+ _ref$steps = _ref.steps,
151
+ steps = _ref$steps === void 0 ? {} : _ref$steps,
152
+ children = _ref.children;
153
+ return /*#__PURE__*/React__default["default"].createElement(neetoui.Modal, {
154
+ className: "neeto-ui-flex neeto-ui-flex-col neeto-ui-transform-none w-screen overflow-y-auto",
155
+ isOpen: isOpen,
156
+ size: "fullScreen",
157
+ onClose: onClose
158
+ }, /*#__PURE__*/React__default["default"].createElement(neetoui.Modal.Header, null, /*#__PURE__*/React__default["default"].createElement(Stepper, {
159
+ steps: steps
160
+ })), /*#__PURE__*/React__default["default"].createElement(neetoui.Modal.Body, {
161
+ className: "neeto-ui-flex neeto-ui-justify-center neeto-ui-items-center neeto-ui-flex-grow"
162
+ }, /*#__PURE__*/React__default["default"].createElement("div", {
163
+ className: "neeto-ui-w-full py-10"
164
+ }, children)));
165
+ };
166
+
167
+ var propTypes = {exports: {}};
168
+
169
+ /**
170
+ * Copyright (c) 2013-present, Facebook, Inc.
171
+ *
172
+ * This source code is licensed under the MIT license found in the
173
+ * LICENSE file in the root directory of this source tree.
174
+ */
175
+ var ReactPropTypesSecret$1 = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';
176
+ var ReactPropTypesSecret_1 = ReactPropTypesSecret$1;
177
+
178
+ /**
179
+ * Copyright (c) 2013-present, Facebook, Inc.
180
+ *
181
+ * This source code is licensed under the MIT license found in the
182
+ * LICENSE file in the root directory of this source tree.
183
+ */
184
+ var ReactPropTypesSecret = ReactPropTypesSecret_1;
185
+ function emptyFunction() {}
186
+ function emptyFunctionWithReset() {}
187
+ emptyFunctionWithReset.resetWarningCache = emptyFunction;
188
+ var factoryWithThrowingShims = function factoryWithThrowingShims() {
189
+ function shim(props, propName, componentName, location, propFullName, secret) {
190
+ if (secret === ReactPropTypesSecret) {
191
+ // It is still safe when called from React.
192
+ return;
193
+ }
194
+ var err = new Error('Calling PropTypes validators directly is not supported by the `prop-types` package. ' + 'Use PropTypes.checkPropTypes() to call them. ' + 'Read more at http://fb.me/use-check-prop-types');
195
+ err.name = 'Invariant Violation';
196
+ throw err;
197
+ }
198
+ shim.isRequired = shim;
199
+ function getShim() {
200
+ return shim;
201
+ }
202
+ // Important!
203
+ // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.
204
+ var ReactPropTypes = {
205
+ array: shim,
206
+ bigint: shim,
207
+ bool: shim,
208
+ func: shim,
209
+ number: shim,
210
+ object: shim,
211
+ string: shim,
212
+ symbol: shim,
213
+ any: shim,
214
+ arrayOf: getShim,
215
+ element: shim,
216
+ elementType: shim,
217
+ instanceOf: getShim,
218
+ node: shim,
219
+ objectOf: getShim,
220
+ oneOf: getShim,
221
+ oneOfType: getShim,
222
+ shape: getShim,
223
+ exact: getShim,
224
+ checkPropTypes: emptyFunctionWithReset,
225
+ resetWarningCache: emptyFunction
226
+ };
227
+ ReactPropTypes.PropTypes = ReactPropTypes;
228
+ return ReactPropTypes;
229
+ };
230
+
231
+ /**
232
+ * Copyright (c) 2013-present, Facebook, Inc.
233
+ *
234
+ * This source code is licensed under the MIT license found in the
235
+ * LICENSE file in the root directory of this source tree.
236
+ */
237
+ {
238
+ // By explicitly using `prop-types` you are opting into new production behavior.
239
+ // http://fb.me/prop-types-in-prod
240
+ propTypes.exports = factoryWithThrowingShims();
241
+ }
242
+
243
+ ({
244
+ /**
245
+ * To specify the Icon to be shown
246
+ */
247
+ Icon: propTypes.exports.PropTypes.node,
248
+ /**
249
+ * To specify the title of the connect component
250
+ */
251
+ title: propTypes.exports.PropTypes.string,
252
+ /**
253
+ * To specify the description for connect component
254
+ */
255
+ description: propTypes.exports.PropTypes.string,
256
+ /**
257
+ * To specify the props for the connect button
258
+ */
259
+ buttonProps: propTypes.exports.PropTypes.object,
260
+ /**
261
+ * Handler function that is triggered when the connect button is clicked.
262
+ */
263
+ onConnect: propTypes.exports.PropTypes.func
264
+ });
265
+
266
+ ({
267
+ /**
268
+ * To specify whether the integration modal should be opened or closed.
269
+ */
270
+ onClose: propTypes.exports.func,
271
+ /**
272
+ * To specify the walkthrough video link
273
+ */
274
+ videoUrl: propTypes.exports.string,
275
+ /**
276
+ * To specify the title of the demo component
277
+ */
278
+ title: propTypes.exports.string,
279
+ /**
280
+ * To specify the subtitle of the demo component
281
+ */
282
+ subtitle: propTypes.exports.string,
283
+ /**
284
+ * To specify the title of the video in the iframe
285
+ */
286
+ iframeTitle: propTypes.exports.string
287
+ });
288
+
289
+ ({
290
+ /**
291
+ * To specify whether the integration modal should be opened or closed.
292
+ */
293
+ onClick: propTypes.exports.func,
294
+ /**
295
+ * To show the title of the Finish component
296
+ */
297
+ title: propTypes.exports.string,
298
+ /**
299
+ * To specify props for primary button
300
+ */
301
+ buttonProps: propTypes.exports.object,
302
+ /**
303
+ * To specify props for secondary button
304
+ */
305
+ secondaryButtonProps: propTypes.exports.object
306
+ });
307
+
308
+ var e = [],
309
+ t = [];
310
+ function n(n, r) {
311
+ if (n && "undefined" != typeof document) {
312
+ var a,
313
+ s = !0 === r.prepend ? "prepend" : "append",
314
+ d = !0 === r.singleTag,
315
+ i = "string" == typeof r.container ? document.querySelector(r.container) : document.getElementsByTagName("head")[0];
316
+ if (d) {
317
+ var u = e.indexOf(i);
318
+ -1 === u && (u = e.push(i) - 1, t[u] = {}), a = t[u] && t[u][s] ? t[u][s] : t[u][s] = c();
319
+ } else a = c();
320
+ 65279 === n.charCodeAt(0) && (n = n.substring(1)), a.styleSheet ? a.styleSheet.cssText += n : a.appendChild(document.createTextNode(n));
321
+ }
322
+ function c() {
323
+ var e = document.createElement("style");
324
+ 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]]);
325
+ var a = "prepend" === s ? "afterbegin" : "beforeend";
326
+ return i.insertAdjacentElement(a, e), e;
327
+ }
328
+ }
329
+
330
+ var css = ".intrinsic-container{height:0;overflow:hidden;position:relative}.intrinsic-container-16x9{padding-bottom:56.25%}.intrinsic-container-4x3{padding-bottom:75%}.intrinsic-container iframe{height:100%;left:0;position:absolute;top:0;width:100%}";
331
+ n(css,{});
332
+
333
+ var TWILIO_INTEGRATION_STEPS = [{
334
+ step: "1",
335
+ label: i18next__default["default"].t("neetoIntegrations.steps.configure"),
336
+ isActive: true,
337
+ isCompleted: false
338
+ }];
339
+
340
+ function _typeof(obj) {
341
+ "@babel/helpers - typeof";
342
+
343
+ return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) {
344
+ return typeof obj;
345
+ } : function (obj) {
346
+ return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
347
+ }, _typeof(obj);
348
+ }
349
+
350
+ function _toPrimitive(input, hint) {
351
+ if (_typeof(input) !== "object" || input === null) return input;
352
+ var prim = input[Symbol.toPrimitive];
353
+ if (prim !== undefined) {
354
+ var res = prim.call(input, hint || "default");
355
+ if (_typeof(res) !== "object") return res;
356
+ throw new TypeError("@@toPrimitive must return a primitive value.");
357
+ }
358
+ return (hint === "string" ? String : Number)(input);
359
+ }
360
+
361
+ function _toPropertyKey(arg) {
362
+ var key = _toPrimitive(arg, "string");
363
+ return _typeof(key) === "symbol" ? key : String(key);
364
+ }
365
+
366
+ function _defineProperty(obj, key, value) {
367
+ key = _toPropertyKey(key);
368
+ if (key in obj) {
369
+ Object.defineProperty(obj, key, {
370
+ value: value,
371
+ enumerable: true,
372
+ configurable: true,
373
+ writable: true
374
+ });
375
+ } else {
376
+ obj[key] = value;
377
+ }
378
+ return obj;
379
+ }
380
+
381
+ function ownKeys$2(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
382
+ function _objectSpread$2(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$2(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$2(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
383
+ var ConfigurationForm = function ConfigurationForm(_ref) {
384
+ var _errors$twilioPhoneNu;
385
+ var phoneNumberOptions = _ref.phoneNumberOptions,
386
+ _ref$selectedPhoneNum = _ref.selectedPhoneNumber,
387
+ selectedPhoneNumber = _ref$selectedPhoneNum === void 0 ? null : _ref$selectedPhoneNum,
388
+ _ref$initialFocusRef = _ref.initialFocusRef,
389
+ initialFocusRef = _ref$initialFocusRef === void 0 ? null : _ref$initialFocusRef,
390
+ _ref$isUsingOverlay = _ref.isUsingOverlay,
391
+ isUsingOverlay = _ref$isUsingOverlay === void 0 ? false : _ref$isUsingOverlay,
392
+ _ref$formikProps = _ref.formikProps,
393
+ formikProps = _ref$formikProps === void 0 ? {} : _ref$formikProps;
394
+ var _useTranslation = reactI18next.useTranslation(),
395
+ t = _useTranslation.t;
396
+ var setFieldValue = formikProps.setFieldValue,
397
+ setValues = formikProps.setValues,
398
+ errors = formikProps.errors,
399
+ values = formikProps.values,
400
+ initialValues = formikProps.initialValues;
401
+ React.useEffect(function () {
402
+ selectedPhoneNumber && setFieldValue("twilioPhoneNumber", selectedPhoneNumber);
403
+ }, [selectedPhoneNumber, initialValues]);
404
+ return /*#__PURE__*/React__default["default"].createElement("div", {
405
+ className: "flex w-full flex-col gap-4"
406
+ }, /*#__PURE__*/React__default["default"].createElement("div", {
407
+ className: "flex w-full"
408
+ }, /*#__PURE__*/React__default["default"].createElement(formik.Input, {
409
+ required: true,
410
+ autoFocus: !isUsingOverlay,
411
+ "data-testid": "integrations-twilio-sid",
412
+ label: t("neetoIntegrations.twilio.sid"),
413
+ name: "twilioSid",
414
+ ref: initialFocusRef
415
+ })), /*#__PURE__*/React__default["default"].createElement("div", {
416
+ className: "flex w-full"
417
+ }, /*#__PURE__*/React__default["default"].createElement(formik.Input, {
418
+ required: true,
419
+ "data-testid": "integrations-twilio-auth-token",
420
+ label: t("neetoIntegrations.twilio.authToken"),
421
+ name: "twilioAuthToken"
422
+ })), phoneNumberOptions && /*#__PURE__*/React__default["default"].createElement("div", {
423
+ className: "flex w-full"
424
+ }, /*#__PURE__*/React__default["default"].createElement(formik.Select, {
425
+ error: (_errors$twilioPhoneNu = errors.twilioPhoneNumber) === null || _errors$twilioPhoneNu === void 0 ? void 0 : _errors$twilioPhoneNu.value,
426
+ label: t("neetoIntegrations.common.phNo"),
427
+ name: "twilioPhoneNumber",
428
+ options: phoneNumberOptions,
429
+ size: "large",
430
+ onChange: function onChange(selected) {
431
+ return setValues(_objectSpread$2(_objectSpread$2({}, values), {}, {
432
+ twilioPhoneNumber: selected
433
+ }));
434
+ }
435
+ })));
436
+ };
437
+
438
+ function _arrayWithoutHoles(arr) {
439
+ if (Array.isArray(arr)) return _arrayLikeToArray(arr);
440
+ }
441
+
442
+ function _iterableToArray(iter) {
443
+ if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
444
+ }
445
+
446
+ function _nonIterableSpread() {
447
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
448
+ }
449
+
450
+ function _toConsumableArray(arr) {
451
+ return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
452
+ }
453
+
454
+ var queryClient = new reactQuery.QueryClient({
455
+ queryCache: new reactQuery.QueryCache()
456
+ });
457
+
458
+ var TWILIO_CONFIGURATION_BASE_URL = "/neeto_integrations/twilio/sms_configurations";
459
+
460
+ var twilioApi = {
461
+ fetchTwilioSmsConfiguration: function fetchTwilioSmsConfiguration() {
462
+ return axios__default["default"].get(TWILIO_CONFIGURATION_BASE_URL);
463
+ },
464
+ removeTwilioConfiguration: function removeTwilioConfiguration() {
465
+ return axios__default["default"]["delete"](TWILIO_CONFIGURATION_BASE_URL);
466
+ },
467
+ getTwilioPhoneNumbers: function getTwilioPhoneNumbers(data) {
468
+ return axios__default["default"].get("".concat(TWILIO_CONFIGURATION_BASE_URL, "/new"), {
469
+ params: data
470
+ });
471
+ },
472
+ createTwilioConfiguration: function createTwilioConfiguration(payload) {
473
+ return axios__default["default"].post(TWILIO_CONFIGURATION_BASE_URL, payload);
474
+ }
475
+ };
476
+
477
+ var QUERY_KEYS = {
478
+ TWILIO_SMS_CONFIGURATION: "twilio-sms-configuration",
479
+ TWILIO_PHONE_NUMBERS: "twilio-phone-numbers"
480
+ };
481
+
482
+ var useFetchTwilioSmsConfiguration = function useFetchTwilioSmsConfiguration() {
483
+ return reactQuery.useQuery(QUERY_KEYS.TWILIO_SMS_CONFIGURATION, twilioApi.fetchTwilioSmsConfiguration, {
484
+ staleTime: constants.DEFAULT_STALE_TIME,
485
+ select: function select(response) {
486
+ var _smsConfiguration$twi, _smsConfiguration$twi2, _smsConfiguration$twi3;
487
+ var smsConfiguration = response.smsConfiguration;
488
+ return {
489
+ twilioSid: (_smsConfiguration$twi = smsConfiguration === null || smsConfiguration === void 0 ? void 0 : smsConfiguration.twilioSid) !== null && _smsConfiguration$twi !== void 0 ? _smsConfiguration$twi : "",
490
+ twilioAuthToken: (_smsConfiguration$twi2 = smsConfiguration === null || smsConfiguration === void 0 ? void 0 : smsConfiguration.twilioAuthToken) !== null && _smsConfiguration$twi2 !== void 0 ? _smsConfiguration$twi2 : "",
491
+ twilioPhoneNumber: (_smsConfiguration$twi3 = smsConfiguration === null || smsConfiguration === void 0 ? void 0 : smsConfiguration.twilioPhoneNumber) !== null && _smsConfiguration$twi3 !== void 0 ? _smsConfiguration$twi3 : ""
492
+ };
493
+ }
494
+ });
495
+ };
496
+ var useFetchTwilioPhoneNumbers = function useFetchTwilioPhoneNumbers(_ref) {
497
+ var credentials = _ref.credentials;
498
+ return reactQuery.useQuery([QUERY_KEYS.TWILIO_PHONE_NUMBERS, {
499
+ credentials: credentials
500
+ }], function () {
501
+ return twilioApi.getTwilioPhoneNumbers(pure.keysToSnakeCase(credentials));
502
+ }, {
503
+ staleTime: constants.DEFAULT_STALE_TIME,
504
+ enabled: !!(credentials !== null && credentials !== void 0 && credentials.twilio_sid) || !!(credentials !== null && credentials !== void 0 && credentials.twilioSid),
505
+ select: ramda.prop("phoneNumbers"),
506
+ retry: false
507
+ });
508
+ };
509
+ var useCreateTwilioConfiguration = function useCreateTwilioConfiguration() {
510
+ return reactQuery.useMutation(twilioApi.createTwilioConfiguration, {
511
+ onSuccess: function onSuccess() {
512
+ return queryClient.invalidateQueries(QUERY_KEYS.TWILIO_SMS_CONFIGURATION);
513
+ }
514
+ });
515
+ };
516
+
517
+ function ownKeys$1(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
518
+ function _objectSpread$1(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$1(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$1(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
519
+ var useTwilio = function useTwilio(_ref) {
520
+ var _ref$onSave = _ref.onSave,
521
+ onSave = _ref$onSave === void 0 ? pure.noop : _ref$onSave,
522
+ _ref$setSteps = _ref.setSteps,
523
+ setSteps = _ref$setSteps === void 0 ? pure.noop : _ref$setSteps,
524
+ _ref$useConnect = _ref.useConnect,
525
+ useConnect = _ref$useConnect === void 0 ? pure.noop : _ref$useConnect;
526
+ var _useFetchTwilioSmsCon = useFetchTwilioSmsConfiguration(),
527
+ configuration = _useFetchTwilioSmsCon.data,
528
+ isConfigurationLoading = _useFetchTwilioSmsCon.isLoading,
529
+ refetchTwilioSmsConfiguration = _useFetchTwilioSmsCon.refetch;
530
+ var _useStateWithDependen = reactUtils.useStateWithDependency(configuration),
531
+ _useStateWithDependen2 = _slicedToArray(_useStateWithDependen, 2),
532
+ credentials = _useStateWithDependen2[0],
533
+ setCredentials = _useStateWithDependen2[1];
534
+ var _useFetchTwilioPhoneN = useFetchTwilioPhoneNumbers({
535
+ credentials: credentials
536
+ }),
537
+ phoneNumbers = _useFetchTwilioPhoneN.data,
538
+ isPhoneNumbersLoading = _useFetchTwilioPhoneN.isLoading;
539
+ var _useCreateTwilioConfi = useCreateTwilioConfiguration(),
540
+ saveConfiguration = _useCreateTwilioConfi.mutate,
541
+ isSubmitting = _useCreateTwilioConfi.isLoading;
542
+ var _useConnect = useConnect(),
543
+ installIntegration = _useConnect.mutate;
544
+ var connectTwilioApp = function connectTwilioApp() {
545
+ return installIntegration({
546
+ id: "twilio"
547
+ }, {});
548
+ };
549
+ React.useEffect(function () {
550
+ if (!(configuration !== null && configuration !== void 0 && configuration.twilioPhoneNumber)) return;
551
+ setSteps(function (steps) {
552
+ var stepsClone = _toConsumableArray(steps);
553
+ stepsClone[0] = _objectSpread$1(_objectSpread$1({}, steps[0]), {}, {
554
+ isCompleted: true
555
+ });
556
+ return stepsClone;
557
+ });
558
+ }, [configuration]);
559
+ var handleSubmit = function handleSubmit(values) {
560
+ var _values$twilioPhoneNu;
561
+ var payload = {
562
+ twilio_sid: values.twilioSid,
563
+ twilio_auth_token: values.twilioAuthToken,
564
+ twilio_phone_number_sid: (_values$twilioPhoneNu = values.twilioPhoneNumber) === null || _values$twilioPhoneNu === void 0 ? void 0 : _values$twilioPhoneNu.value
565
+ };
566
+ if (!phoneNumbers && !(configuration !== null && configuration !== void 0 && configuration.twilioPhoneNumber)) {
567
+ setCredentials(payload);
568
+ return;
569
+ }
570
+ saveConfiguration(payload, {
571
+ onSuccess: function onSuccess() {
572
+ onSave();
573
+ connectTwilioApp();
574
+ refetchTwilioSmsConfiguration();
575
+ }
576
+ });
577
+ };
578
+ return {
579
+ handleSubmit: handleSubmit,
580
+ phoneNumbers: phoneNumbers,
581
+ isConfigurationLoading: isConfigurationLoading,
582
+ isPhoneNumbersLoading: isPhoneNumbersLoading,
583
+ isSubmitting: isSubmitting,
584
+ configuration: configuration
585
+ };
586
+ };
587
+
588
+ var buildTwilioConfigurationValidationSchema = function buildTwilioConfigurationValidationSchema(isTwilioPhoneRequired) {
589
+ return yup__namespace.object().shape({
590
+ twilioSid: yup__namespace.string().required(i18next__default["default"].t("neetoIntegrations.twilio.validations.sidReq")),
591
+ twilioAuthToken: yup__namespace.string().required(i18next__default["default"].t("neetoIntegrations.twilio.validations.authTokenReq")),
592
+ twilioPhoneNumber: isTwilioPhoneRequired ? yup__namespace.object().shape({
593
+ label: yup__namespace.string(),
594
+ value: yup__namespace.string().required(i18next__default["default"].t("neetoIntegrations.twilio.validations.phNumReq"))
595
+ }) : null
596
+ });
597
+ };
598
+
599
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
600
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
601
+ var TwilioConfiguration = function TwilioConfiguration(_ref) {
602
+ var _ref$onCancel = _ref.onCancel,
603
+ onCancel = _ref$onCancel === void 0 ? pure.noop : _ref$onCancel,
604
+ _ref$onSave = _ref.onSave,
605
+ onSave = _ref$onSave === void 0 ? pure.noop : _ref$onSave,
606
+ _ref$setSteps = _ref.setSteps,
607
+ setSteps = _ref$setSteps === void 0 ? pure.noop : _ref$setSteps,
608
+ _ref$useConnect = _ref.useConnect,
609
+ useConnect = _ref$useConnect === void 0 ? pure.noop : _ref$useConnect,
610
+ _ref$isModal = _ref.isModal,
611
+ isModal = _ref$isModal === void 0 ? false : _ref$isModal;
612
+ var _useTranslation = reactI18next.useTranslation(),
613
+ t = _useTranslation.t;
614
+ var initialFocusRef = React.useRef();
615
+ var _useTwilio = useTwilio({
616
+ onSave: onSave,
617
+ setSteps: setSteps,
618
+ useConnect: useConnect
619
+ }),
620
+ handleSubmit = _useTwilio.handleSubmit,
621
+ phoneNumbers = _useTwilio.phoneNumbers,
622
+ isConfigurationLoading = _useTwilio.isConfigurationLoading,
623
+ isPhoneNumbersLoading = _useTwilio.isPhoneNumbersLoading,
624
+ isSubmitting = _useTwilio.isSubmitting,
625
+ configuration = _useTwilio.configuration;
626
+ var phoneNumberOptions = phoneNumbers === null || phoneNumbers === void 0 ? void 0 : phoneNumbers.map(function (_ref2) {
627
+ var phoneNumber = _ref2.phoneNumber,
628
+ sid = _ref2.sid;
629
+ return {
630
+ label: phoneNumber,
631
+ value: sid
632
+ };
633
+ });
634
+ var selectedPhoneNumber = pure._findBy({
635
+ label: configuration === null || configuration === void 0 ? void 0 : configuration.twilioPhoneNumber
636
+ }, phoneNumberOptions);
637
+ var wrapInModalBody = function wrapInModalBody(children) {
638
+ return /*#__PURE__*/React__default["default"].createElement(neetoui.Modal.Body, null, children);
639
+ };
640
+ var wrapInModalFooter = function wrapInModalFooter(children) {
641
+ return /*#__PURE__*/React__default["default"].createElement(neetoui.Modal.Footer, null, children);
642
+ };
643
+ var isLoading = isPhoneNumbersLoading || isConfigurationLoading;
644
+ var isSubmitDisabled = function isSubmitDisabled(values) {
645
+ return ramda.equals(_objectSpread(_objectSpread({}, configuration), {}, {
646
+ twilioPhoneNumber: selectedPhoneNumber
647
+ }), values) || isLoading;
648
+ };
649
+ var renderActionBlock = function renderActionBlock(values) {
650
+ return /*#__PURE__*/React__default["default"].createElement(formik.ActionBlock, {
651
+ cancelButtonProps: {
652
+ onClick: onCancel,
653
+ disabled: false
654
+ },
655
+ className: "space-x-3",
656
+ submitButtonProps: {
657
+ label: phoneNumberOptions ? t("neetoIntegrations.common.saveChanges") : t("neetoIntegrations.common.verify"),
658
+ disabled: isSubmitDisabled(values),
659
+ loading: isSubmitting || isPhoneNumbersLoading && !configuration.twilioAuthToken
660
+ }
661
+ });
662
+ };
663
+ var renderForm = function renderForm(formikProps) {
664
+ return /*#__PURE__*/React__default["default"].createElement(ConfigurationForm, {
665
+ formikProps: formikProps,
666
+ initialFocusRef: initialFocusRef,
667
+ isUsingOverlay: isModal,
668
+ phoneNumberOptions: phoneNumberOptions,
669
+ selectedPhoneNumber: selectedPhoneNumber
670
+ });
671
+ };
672
+ return /*#__PURE__*/React__default["default"].createElement(formik.Form, {
673
+ className: "mx-auto flex w-full max-w-md flex-col",
674
+ formikProps: {
675
+ enableReinitialize: true,
676
+ validationSchema: buildTwilioConfigurationValidationSchema(!!phoneNumbers),
677
+ initialValues: configuration,
678
+ onSubmit: handleSubmit
679
+ }
680
+ }, function (formikProps) {
681
+ return isModal ? /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, wrapInModalBody(renderForm(formikProps)), wrapInModalFooter(renderActionBlock(formikProps.values))) : /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, "renderForm(formikProps)", /*#__PURE__*/React__default["default"].createElement("div", {
682
+ className: "mt-4 flex items-center gap-x-2"
683
+ }, renderActionBlock(formikProps.values)));
684
+ });
685
+ };
686
+
687
+ var Twilio = function Twilio(_ref) {
688
+ var _ref$onClose = _ref.onClose,
689
+ onClose = _ref$onClose === void 0 ? pure.noop : _ref$onClose,
690
+ _ref$useConnect = _ref.useConnect,
691
+ useConnect = _ref$useConnect === void 0 ? pure.noop : _ref$useConnect;
692
+ var _useState = React.useState(TWILIO_INTEGRATION_STEPS),
693
+ _useState2 = _slicedToArray(_useState, 2),
694
+ steps = _useState2[0],
695
+ setSteps = _useState2[1];
696
+ return /*#__PURE__*/React__default["default"].createElement(Modal, {
697
+ isOpen: true,
698
+ steps: steps,
699
+ onClose: onClose
700
+ }, /*#__PURE__*/React__default["default"].createElement(TwilioConfiguration, {
701
+ isModal: true,
702
+ setSteps: setSteps,
703
+ useConnect: useConnect,
704
+ onCancel: onClose
705
+ }));
706
+ };
707
+
708
+ module.exports = Twilio;
709
+ //# sourceMappingURL=Twilio.cjs.js.map