@bigbinary/neeto-integrations-frontend 2.1.1 → 2.2.0-beta1

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,1037 @@
1
+ import * as React from 'react';
2
+ import React__default, { useState, useEffect } from 'react';
3
+ import { humanize, noop, isPresent, isNotEmpty } from '@bigbinary/neeto-cist';
4
+ import { buildUrl, getQueryParams } from '@bigbinary/neeto-commons-frontend/utils';
5
+ import { Daily as Daily$1, GoogleCalendar as GoogleCalendar$1, Google } from '@bigbinary/neeto-icons/misc';
6
+ import Typography from '@bigbinary/neetoui/Typography';
7
+ import Callout from '@bigbinary/neetoui/Callout';
8
+ import Button from '@bigbinary/neetoui/Button';
9
+ import { Trans, useTranslation } from 'react-i18next';
10
+ import '@bigbinary/neeto-molecules/IntegrationCard';
11
+ import DisconnectAlert from '@bigbinary/neeto-molecules/IntegrationDisconnectAlert';
12
+ import WalkthroughModal from '@bigbinary/neeto-molecules/IntegrationWalkthroughModal';
13
+ import classnames from 'classnames';
14
+ import { withT, useMutationWithInvalidation, withTitle, useQueryParams } from '@bigbinary/neeto-commons-frontend/react-utils';
15
+ import { Check } from '@bigbinary/neeto-icons';
16
+ import Tooltip from '@bigbinary/neetoui/Tooltip';
17
+ import i18next, { t as t$1 } from 'i18next';
18
+ import { useQuery } from '@tanstack/react-query';
19
+ import { DEFAULT_STALE_TIME } from '@bigbinary/neeto-commons-frontend/constants';
20
+ import axios from 'axios';
21
+ import Container from '@bigbinary/neeto-molecules/Container';
22
+ import Header from '@bigbinary/neeto-molecules/Header';
23
+ import HelpPopover from '@bigbinary/neeto-molecules/HelpPopover';
24
+ import PageLoader from '@bigbinary/neeto-molecules/PageLoader';
25
+ import Input from '@bigbinary/neetoui/formik/Input';
26
+ import FormikForm from '@bigbinary/neetoui/formik/Form';
27
+ import ActionBlock from '@bigbinary/neetoui/formik/ActionBlock';
28
+ import { useHistory } from 'react-router-dom';
29
+ import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
30
+ import 'ramda';
31
+ import '@bigbinary/neetoui/formik/Select';
32
+ import * as yup from 'yup';
33
+ import NeetoUIModal from '@bigbinary/neetoui/Modal';
34
+ import CopyToClipboardButton from '@bigbinary/neeto-molecules/CopyToClipboardButton';
35
+
36
+ function _typeof(o) {
37
+ "@babel/helpers - typeof";
38
+
39
+ return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
40
+ return typeof o;
41
+ } : function (o) {
42
+ return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
43
+ }, _typeof(o);
44
+ }
45
+
46
+ function _toPrimitive(input, hint) {
47
+ if (_typeof(input) !== "object" || input === null) return input;
48
+ var prim = input[Symbol.toPrimitive];
49
+ if (prim !== undefined) {
50
+ var res = prim.call(input, hint || "default");
51
+ if (_typeof(res) !== "object") return res;
52
+ throw new TypeError("@@toPrimitive must return a primitive value.");
53
+ }
54
+ return (hint === "string" ? String : Number)(input);
55
+ }
56
+
57
+ function _toPropertyKey(arg) {
58
+ var key = _toPrimitive(arg, "string");
59
+ return _typeof(key) === "symbol" ? key : String(key);
60
+ }
61
+
62
+ function _defineProperty(obj, key, value) {
63
+ key = _toPropertyKey(key);
64
+ if (key in obj) {
65
+ Object.defineProperty(obj, key, {
66
+ value: value,
67
+ enumerable: true,
68
+ configurable: true,
69
+ writable: true
70
+ });
71
+ } else {
72
+ obj[key] = value;
73
+ }
74
+ return obj;
75
+ }
76
+
77
+ function _arrayLikeToArray(arr, len) {
78
+ if (len == null || len > arr.length) len = arr.length;
79
+ for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
80
+ return arr2;
81
+ }
82
+
83
+ function _arrayWithoutHoles(arr) {
84
+ if (Array.isArray(arr)) return _arrayLikeToArray(arr);
85
+ }
86
+
87
+ function _iterableToArray(iter) {
88
+ if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
89
+ }
90
+
91
+ function _unsupportedIterableToArray(o, minLen) {
92
+ if (!o) return;
93
+ if (typeof o === "string") return _arrayLikeToArray(o, minLen);
94
+ var n = Object.prototype.toString.call(o).slice(8, -1);
95
+ if (n === "Object" && o.constructor) n = o.constructor.name;
96
+ if (n === "Map" || n === "Set") return Array.from(o);
97
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
98
+ }
99
+
100
+ function _nonIterableSpread() {
101
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
102
+ }
103
+
104
+ function _toConsumableArray(arr) {
105
+ return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
106
+ }
107
+
108
+ function _arrayWithHoles(arr) {
109
+ if (Array.isArray(arr)) return arr;
110
+ }
111
+
112
+ function _iterableToArrayLimit(r, l) {
113
+ var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
114
+ if (null != t) {
115
+ var e,
116
+ n,
117
+ i,
118
+ u,
119
+ a = [],
120
+ f = !0,
121
+ o = !1;
122
+ try {
123
+ if (i = (t = t.call(r)).next, 0 === l) {
124
+ if (Object(t) !== t) return;
125
+ f = !1;
126
+ } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);
127
+ } catch (r) {
128
+ o = !0, n = r;
129
+ } finally {
130
+ try {
131
+ if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return;
132
+ } finally {
133
+ if (o) throw n;
134
+ }
135
+ }
136
+ return a;
137
+ }
138
+ }
139
+
140
+ function _nonIterableRest() {
141
+ throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
142
+ }
143
+
144
+ function _slicedToArray(arr, i) {
145
+ return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
146
+ }
147
+
148
+ 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; }
149
+ 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; }
150
+ var Manage$1 = withT(function (_ref) {
151
+ var t = _ref.t,
152
+ _ref$title = _ref.title,
153
+ title = _ref$title === void 0 ? "" : _ref$title,
154
+ _ref$description = _ref.description,
155
+ description = _ref$description === void 0 ? "" : _ref$description,
156
+ _ref$integration = _ref.integration,
157
+ integration = _ref$integration === void 0 ? "" : _ref$integration,
158
+ _ref$isDisconnectAler = _ref.isDisconnectAlertOpen,
159
+ isDisconnectAlertOpen = _ref$isDisconnectAler === void 0 ? false : _ref$isDisconnectAler,
160
+ _ref$setIsDisconnectA = _ref.setIsDisconnectAlertOpen,
161
+ setIsDisconnectAlertOpen = _ref$setIsDisconnectA === void 0 ? noop : _ref$setIsDisconnectA,
162
+ _ref$isDisconnecting = _ref.isDisconnecting,
163
+ isDisconnecting = _ref$isDisconnecting === void 0 ? false : _ref$isDisconnecting,
164
+ _ref$onConnect = _ref.onConnect,
165
+ onConnect = _ref$onConnect === void 0 ? undefined : _ref$onConnect,
166
+ _ref$onDisconnect = _ref.onDisconnect,
167
+ onDisconnect = _ref$onDisconnect === void 0 ? undefined : _ref$onDisconnect,
168
+ _ref$onClose = _ref.onClose,
169
+ onClose = _ref$onClose === void 0 ? noop : _ref$onClose,
170
+ _ref$Icon = _ref.Icon,
171
+ Icon = _ref$Icon === void 0 ? null : _ref$Icon,
172
+ _ref$isConnected = _ref.isConnected,
173
+ isConnected = _ref$isConnected === void 0 ? false : _ref$isConnected,
174
+ _ref$connectPath = _ref.connectPath,
175
+ connectPath = _ref$connectPath === void 0 ? "" : _ref$connectPath,
176
+ _ref$connectUrl = _ref.connectUrl,
177
+ connectUrl = _ref$connectUrl === void 0 ? "" : _ref$connectUrl,
178
+ _ref$helpDocUrl = _ref.helpDocUrl,
179
+ helpDocUrl = _ref$helpDocUrl === void 0 ? "" : _ref$helpDocUrl,
180
+ _ref$managePath = _ref.managePath,
181
+ managePath = _ref$managePath === void 0 ? "" : _ref$managePath,
182
+ _ref$manageUrl = _ref.manageUrl,
183
+ manageUrl = _ref$manageUrl === void 0 ? "" : _ref$manageUrl,
184
+ _ref$integrationName = _ref.integrationName,
185
+ integrationName = _ref$integrationName === void 0 ? "" : _ref$integrationName,
186
+ _ref$disconnectMessag = _ref.disconnectMessage,
187
+ disconnectMessage = _ref$disconnectMessag === void 0 ? "" : _ref$disconnectMessag,
188
+ _ref$disconnectTitle = _ref.disconnectTitle,
189
+ disconnectTitle = _ref$disconnectTitle === void 0 ? "" : _ref$disconnectTitle,
190
+ _ref$isConnectDisable = _ref.isConnectDisabled,
191
+ isConnectDisabled = _ref$isConnectDisable === void 0 ? false : _ref$isConnectDisable,
192
+ _ref$connectTooltipPr = _ref.connectTooltipProps,
193
+ connectTooltipProps = _ref$connectTooltipPr === void 0 ? null : _ref$connectTooltipPr;
194
+ return /*#__PURE__*/jsxs(Fragment, {
195
+ children: [/*#__PURE__*/jsx("div", {
196
+ className: "mx-auto w-full max-w-3xl",
197
+ children: /*#__PURE__*/jsxs("div", {
198
+ className: "neeto-ui-border-gray-300 neeto-ui-rounded-xl mt-10 w-full space-y-4 border p-6",
199
+ children: [Icon && /*#__PURE__*/jsx(Icon, {
200
+ className: "neeto-ui-text-gray-600",
201
+ size: 48
202
+ }), /*#__PURE__*/jsxs("div", {
203
+ className: "space-y-2",
204
+ children: [/*#__PURE__*/jsxs("div", {
205
+ className: "flex items-center space-x-4",
206
+ children: [/*#__PURE__*/jsx(Typography, {
207
+ className: "neeto-ui-text-gray-800 mb-0.5",
208
+ style: "h2",
209
+ weight: "semibold",
210
+ children: title
211
+ }), isConnected && /*#__PURE__*/jsx("div", {
212
+ className: "neeto-ui-bg-success-500 neeto-ui-text-white neeto-ui-rounded-full flex items-center justify-center p-1",
213
+ children: /*#__PURE__*/jsx(Check, {
214
+ size: 24
215
+ })
216
+ })]
217
+ }), /*#__PURE__*/jsx(Typography, {
218
+ style: "body1",
219
+ weight: "normal",
220
+ className: classnames("neeto-ui-text-gray-800", {
221
+ "break-all": isConnected
222
+ }),
223
+ children: description
224
+ }), helpDocUrl && /*#__PURE__*/jsx(Typography, {
225
+ className: "neeto-ui-text-gray-800",
226
+ style: "body2",
227
+ weight: "normal",
228
+ children: /*#__PURE__*/jsx(Trans, {
229
+ i18nKey: "neetoIntegrations.common.helpDocUrl",
230
+ components: {
231
+ helpLink: /*#__PURE__*/jsx(Button, {
232
+ href: helpDocUrl,
233
+ style: "link",
234
+ target: "_blank"
235
+ })
236
+ },
237
+ values: {
238
+ integration: integrationName || humanize(integration)
239
+ }
240
+ })
241
+ })]
242
+ }), isConnected ? /*#__PURE__*/jsxs("div", {
243
+ className: "space-x-2",
244
+ children: [(managePath || manageUrl) && /*#__PURE__*/jsx(Button, {
245
+ "data-cy": "manage-button",
246
+ href: manageUrl,
247
+ target: manageUrl ? "_blank" : "_self",
248
+ to: managePath,
249
+ label: t("neetoIntegrations.common.manageIntegration", {
250
+ integration: integrationName || humanize(integration)
251
+ })
252
+ }), onDisconnect && /*#__PURE__*/jsx(Button, {
253
+ "data-cy": "disconnect-button",
254
+ style: "secondary",
255
+ label: t("neetoIntegrations.common.disconnectIntegration", {
256
+ integration: integrationName || humanize(integration)
257
+ }),
258
+ onClick: function onClick() {
259
+ return setIsDisconnectAlertOpen(true);
260
+ }
261
+ })]
262
+ }) : /*#__PURE__*/jsx("div", {
263
+ children: /*#__PURE__*/jsx(Tooltip, _objectSpread$5(_objectSpread$5({
264
+ disabled: !isConnectDisabled
265
+ }, connectTooltipProps), {}, {
266
+ children: /*#__PURE__*/jsx("span", {
267
+ children: (connectPath || connectUrl || onConnect) && /*#__PURE__*/jsx(Button, {
268
+ "data-cy": "connect-button",
269
+ disabled: isConnectDisabled,
270
+ href: connectUrl,
271
+ to: connectPath,
272
+ label: t("neetoIntegrations.common.connectIntegration", {
273
+ integration: integrationName || humanize(integration)
274
+ }),
275
+ onClick: onConnect
276
+ })
277
+ })
278
+ }))
279
+ })]
280
+ })
281
+ }), /*#__PURE__*/jsx(DisconnectAlert, {
282
+ isDisconnecting: isDisconnecting,
283
+ onClose: onClose,
284
+ onDisconnect: onDisconnect,
285
+ isOpen: isDisconnectAlertOpen,
286
+ message: disconnectMessage || t("settings.integrations.".concat(integration, ".disconnect.message")),
287
+ title: disconnectTitle || t("settings.integrations.".concat(integration, ".disconnect.title"))
288
+ })]
289
+ });
290
+ });
291
+
292
+ var INTEGRATIONS_ENGINE_BASE_URL = "/neeto_integrations";
293
+ var INTEGRATIONS_ENGINE_DAILY_URL = "".concat(INTEGRATIONS_ENGINE_BASE_URL, "/daily");
294
+
295
+ var create = function create(payload) {
296
+ return axios.post(INTEGRATIONS_ENGINE_DAILY_URL, {
297
+ daily: payload
298
+ });
299
+ };
300
+ var show = function show() {
301
+ return axios.get(INTEGRATIONS_ENGINE_DAILY_URL);
302
+ };
303
+ var destroy = function destroy() {
304
+ return axios["delete"](INTEGRATIONS_ENGINE_DAILY_URL);
305
+ };
306
+ var dailiesApi = {
307
+ create: create,
308
+ show: show,
309
+ destroy: destroy
310
+ };
311
+
312
+ var QUERY_KEYS = {
313
+ TWILIO_SMS_CONFIGURATION: "twilio-sms-configuration",
314
+ TWILIO_PHONE_NUMBERS: "twilio-phone-numbers",
315
+ DAILY_CO_DETAILS: "daily-co-details",
316
+ ZOOM_DETAILS: "zoom-details"
317
+ };
318
+
319
+ 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; }
320
+ 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; }
321
+ var useCreateDaily = function useCreateDaily() {
322
+ var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
323
+ return useMutationWithInvalidation(dailiesApi.create, _objectSpread$4({
324
+ keysToInvalidate: [QUERY_KEYS.DAILY_CO_DETAILS]
325
+ }, options));
326
+ };
327
+ var useFetchDaily = function useFetchDaily() {
328
+ return useQuery({
329
+ queryKey: [QUERY_KEYS.DAILY_CO_DETAILS],
330
+ queryFn: dailiesApi.show,
331
+ staleTime: DEFAULT_STALE_TIME
332
+ });
333
+ };
334
+ var useDestroyDaily = function useDestroyDaily(_ref) {
335
+ var onSuccess = _ref.onSuccess;
336
+ return useMutationWithInvalidation(dailiesApi.destroy, {
337
+ keysToInvalidate: [QUERY_KEYS.DAILY_CO_DETAILS],
338
+ onSuccess: onSuccess
339
+ });
340
+ };
341
+
342
+ function _objectWithoutPropertiesLoose(source, excluded) {
343
+ if (source == null) return {};
344
+ var target = {};
345
+ var sourceKeys = Object.keys(source);
346
+ var key, i;
347
+ for (i = 0; i < sourceKeys.length; i++) {
348
+ key = sourceKeys[i];
349
+ if (excluded.indexOf(key) >= 0) continue;
350
+ target[key] = source[key];
351
+ }
352
+ return target;
353
+ }
354
+
355
+ function _objectWithoutProperties(source, excluded) {
356
+ if (source == null) return {};
357
+ var target = _objectWithoutPropertiesLoose(source, excluded);
358
+ var key, i;
359
+ if (Object.getOwnPropertySymbols) {
360
+ var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
361
+ for (i = 0; i < sourceSymbolKeys.length; i++) {
362
+ key = sourceSymbolKeys[i];
363
+ if (excluded.indexOf(key) >= 0) continue;
364
+ if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
365
+ target[key] = source[key];
366
+ }
367
+ }
368
+ return target;
369
+ }
370
+
371
+ var _excluded = ["className", "children"];
372
+ 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; }
373
+ 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; }
374
+ var ExternalLink = function ExternalLink(_ref) {
375
+ var _ref$className = _ref.className,
376
+ className = _ref$className === void 0 ? "" : _ref$className,
377
+ _ref$children = _ref.children,
378
+ children = _ref$children === void 0 ? null : _ref$children,
379
+ props = _objectWithoutProperties(_ref, _excluded);
380
+ return /*#__PURE__*/jsx("a", _objectSpread$3(_objectSpread$3({
381
+ className: classnames(["neeto-ui-text-primary-800 hover:neeto-ui-text-primary-800 visited:neeto-ui-text-primary-600 font-medium", className])
382
+ }, props), {}, {
383
+ children: children
384
+ }));
385
+ };
386
+ var ExternalLink$1 = /*#__PURE__*/React__default.memo(ExternalLink);
387
+
388
+ var MANAGE_DAILY_CO_FORM_INITIAL_VALUES = {
389
+ apiKey: ""
390
+ };
391
+ var DAILY_CO_VALIDATION_SCHEMA = yup.object().shape({
392
+ apiKey: yup.string().trim().required(t$1("neetoIntegrations.errors.required", {
393
+ entity: t$1("neetoIntegrations.daily.apiKey")
394
+ }))
395
+ });
396
+
397
+ var Form = function Form(_ref) {
398
+ var helpDocUrl = _ref.helpDocUrl,
399
+ videoUrl = _ref.videoUrl,
400
+ onConnect = _ref.onConnect,
401
+ breadcrumbs = _ref.breadcrumbs;
402
+ var _useTranslation = useTranslation(),
403
+ t = _useTranslation.t;
404
+ var history = useHistory();
405
+ var _useState = useState(false),
406
+ _useState2 = _slicedToArray(_useState, 2),
407
+ isDemoModalOpen = _useState2[0],
408
+ setIsDemoModalOpen = _useState2[1];
409
+ var _useCreateDaily = useCreateDaily({
410
+ onSuccess: function onSuccess() {
411
+ return onConnect === null || onConnect === void 0 ? void 0 : onConnect();
412
+ }
413
+ }),
414
+ createDaily = _useCreateDaily.mutate,
415
+ isConnecting = _useCreateDaily.isPending;
416
+ var handleSubmit = function handleSubmit(payload) {
417
+ return createDaily(payload);
418
+ };
419
+ if (isConnecting) {
420
+ return /*#__PURE__*/jsx(PageLoader, {});
421
+ }
422
+ return /*#__PURE__*/jsxs(Container, {
423
+ isHeaderFixed: true,
424
+ children: [/*#__PURE__*/jsx(Header, {
425
+ breadcrumbs: breadcrumbs,
426
+ title: /*#__PURE__*/jsxs("span", {
427
+ className: "flex items-center gap-2",
428
+ children: [t("neetoIntegrations.daily.connect.title"), /*#__PURE__*/jsx(HelpPopover, {
429
+ title: t("neetoIntegrations.daily.connect.title"),
430
+ description: /*#__PURE__*/jsx(Trans, {
431
+ i18nKey: "neetoIntegrations.daily.helpDoc",
432
+ components: {
433
+ externalLink: /*#__PURE__*/jsx(ExternalLink$1, {
434
+ "data-cy": "api-key-help-doc-link",
435
+ href: helpDocUrl,
436
+ rel: "noreferrer",
437
+ target: "_blank"
438
+ })
439
+ }
440
+ }),
441
+ helpLinkProps: {
442
+ label: /*#__PURE__*/jsx(Button, {
443
+ className: "mt-8",
444
+ label: t("neetoIntegrations.daily.walkthroughText"),
445
+ style: "link",
446
+ onClick: function onClick() {
447
+ return setIsDemoModalOpen(true);
448
+ }
449
+ })
450
+ }
451
+ })]
452
+ })
453
+ }), /*#__PURE__*/jsxs("div", {
454
+ className: "mx-auto w-full max-w-md",
455
+ children: [/*#__PURE__*/jsx(FormikForm, {
456
+ formikProps: {
457
+ initialValues: MANAGE_DAILY_CO_FORM_INITIAL_VALUES,
458
+ validationSchema: DAILY_CO_VALIDATION_SCHEMA,
459
+ onSubmit: handleSubmit
460
+ },
461
+ children: /*#__PURE__*/jsxs("div", {
462
+ className: "mt-14 w-full space-y-2",
463
+ children: [/*#__PURE__*/jsx("div", {
464
+ className: "block min-h-20",
465
+ children: /*#__PURE__*/jsx(Input, {
466
+ autoFocus: true,
467
+ required: true,
468
+ label: t("neetoIntegrations.daily.apiKey"),
469
+ name: "apiKey"
470
+ })
471
+ }), /*#__PURE__*/jsx(ActionBlock, {
472
+ cancelButtonProps: {
473
+ onClick: function onClick() {
474
+ return history.goBack();
475
+ }
476
+ },
477
+ isSubmitting: isConnecting,
478
+ submitButtonProps: {
479
+ label: t("neetoIntegrations.common.connect")
480
+ }
481
+ })]
482
+ })
483
+ }), /*#__PURE__*/jsx(WalkthroughModal, {
484
+ videoUrl: videoUrl,
485
+ isOpen: isDemoModalOpen,
486
+ onClose: function onClose() {
487
+ return setIsDemoModalOpen(false);
488
+ }
489
+ })]
490
+ })]
491
+ });
492
+ };
493
+ var Form$1 = withTitle(Form, i18next.t("neetoIntegrations.browserTitles.integrations.dailyco"));
494
+
495
+ var Manage = function Manage(_ref) {
496
+ var description = _ref.description,
497
+ onDisconnect = _ref.onDisconnect;
498
+ var _useState = useState(false),
499
+ _useState2 = _slicedToArray(_useState, 2),
500
+ isDisconnectAlertOpen = _useState2[0],
501
+ setIsDisconnectAlertOpen = _useState2[1];
502
+ var _useFetchDaily = useFetchDaily(),
503
+ _useFetchDaily$data = _useFetchDaily.data,
504
+ _useFetchDaily$data2 = _useFetchDaily$data === void 0 ? {} : _useFetchDaily$data,
505
+ _useFetchDaily$data2$ = _useFetchDaily$data2.metadata,
506
+ metadata = _useFetchDaily$data2$ === void 0 ? {} : _useFetchDaily$data2$,
507
+ isFetching = _useFetchDaily.isFetching;
508
+ var _ref2 = metadata || {},
509
+ _ref2$apiKey = _ref2.apiKey,
510
+ apiKey = _ref2$apiKey === void 0 ? null : _ref2$apiKey;
511
+ var _useTranslation = useTranslation(),
512
+ t = _useTranslation.t;
513
+ var _useDestroyDaily = useDestroyDaily({
514
+ onSuccess: function onSuccess() {
515
+ setIsDisconnectAlertOpen(false);
516
+ onDisconnect === null || onDisconnect === void 0 || onDisconnect();
517
+ }
518
+ }),
519
+ destroyIntegration = _useDestroyDaily.mutate,
520
+ isDisconnecting = _useDestroyDaily.isPending;
521
+ var isConnected = isPresent(apiKey);
522
+ var handleDisconnect = function handleDisconnect() {
523
+ return destroyIntegration("daily");
524
+ };
525
+ if (isFetching || isDisconnecting) return /*#__PURE__*/jsx(PageLoader, {});
526
+ return /*#__PURE__*/jsx(Manage$1, {
527
+ isConnected: isConnected,
528
+ isDisconnectAlertOpen: isDisconnectAlertOpen,
529
+ isDisconnecting: isDisconnecting,
530
+ setIsDisconnectAlertOpen: setIsDisconnectAlertOpen,
531
+ Icon: Daily$1,
532
+ connectPath: buildUrl(window.location.pathname, {
533
+ connect: true
534
+ }),
535
+ integration: "daily",
536
+ description: isConnected ? /*#__PURE__*/jsx(Trans, {
537
+ i18nKey: "neetoIntegrations.daily.yourApiKey",
538
+ values: {
539
+ apiKey: apiKey
540
+ },
541
+ components: {
542
+ wrapper: /*#__PURE__*/jsx("div", {
543
+ className: "neeto-ui-rounded-md mt-2 flex items-center justify-between gap-x-3 border px-3 py-2"
544
+ }),
545
+ span: /*#__PURE__*/jsx("span", {
546
+ className: "break-all text-sm"
547
+ }),
548
+ copy: /*#__PURE__*/jsx(CopyToClipboardButton, {
549
+ className: "flex-shrink-0 self-start",
550
+ style: "text",
551
+ value: apiKey
552
+ })
553
+ }
554
+ }) : description,
555
+ title: isConnected ? t("neetoIntegrations.daily.connected") : t("neetoIntegrations.daily.connect.account"),
556
+ onClose: function onClose() {
557
+ return setIsDisconnectAlertOpen(false);
558
+ },
559
+ onDisconnect: handleDisconnect
560
+ });
561
+ };
562
+
563
+ var Daily = function Daily(_ref) {
564
+ var _ref$isOnboarding = _ref.isOnboarding,
565
+ isOnboarding = _ref$isOnboarding === void 0 ? false : _ref$isOnboarding,
566
+ _ref$helpDocUrl = _ref.helpDocUrl,
567
+ helpDocUrl = _ref$helpDocUrl === void 0 ? "" : _ref$helpDocUrl,
568
+ _ref$videoUrl = _ref.videoUrl,
569
+ videoUrl = _ref$videoUrl === void 0 ? "" : _ref$videoUrl,
570
+ _ref$description = _ref.description,
571
+ description = _ref$description === void 0 ? "" : _ref$description,
572
+ _ref$onConnect = _ref.onConnect,
573
+ onConnect = _ref$onConnect === void 0 ? noop : _ref$onConnect,
574
+ _ref$onDisconnect = _ref.onDisconnect,
575
+ onDisconnect = _ref$onDisconnect === void 0 ? noop : _ref$onDisconnect;
576
+ var _useQueryParams = useQueryParams(),
577
+ connect = _useQueryParams.connect;
578
+ var _useFetchDaily = useFetchDaily(),
579
+ _useFetchDaily$data = _useFetchDaily.data,
580
+ _useFetchDaily$data2 = _useFetchDaily$data === void 0 ? {} : _useFetchDaily$data,
581
+ _useFetchDaily$data2$ = _useFetchDaily$data2.metadata,
582
+ metadata = _useFetchDaily$data2$ === void 0 ? {} : _useFetchDaily$data2$;
583
+ var _ref2 = metadata || {},
584
+ _ref2$apiKey = _ref2.apiKey,
585
+ apiKey = _ref2$apiKey === void 0 ? null : _ref2$apiKey;
586
+ if (isPresent(apiKey) && !isOnboarding || !connect) {
587
+ return /*#__PURE__*/jsx(Manage, {
588
+ description: description,
589
+ onDisconnect: onDisconnect
590
+ });
591
+ }
592
+ return /*#__PURE__*/jsx(Form$1, {
593
+ helpDocUrl: helpDocUrl,
594
+ onConnect: onConnect,
595
+ videoUrl: videoUrl
596
+ });
597
+ };
598
+ withTitle(Daily, i18next.t("neetoIntegrations.browserTitles.integrations.dailyco"));
599
+
600
+ var Stepper = function Stepper(_ref) {
601
+ var _ref$steps = _ref.steps,
602
+ steps = _ref$steps === void 0 ? {} : _ref$steps;
603
+ var isActiveOrCompleted = function isActiveOrCompleted(activeStatus, completedStatus) {
604
+ return activeStatus || completedStatus;
605
+ };
606
+ return /*#__PURE__*/jsx("ul", {
607
+ className: "flex gap-4",
608
+ children: steps === null || steps === void 0 ? void 0 : steps.map(function (_ref2) {
609
+ var step = _ref2.step,
610
+ label = _ref2.label,
611
+ isActive = _ref2.isActive,
612
+ isCompleted = _ref2.isCompleted;
613
+ return /*#__PURE__*/jsxs("li", {
614
+ className: "flex items-center gap-4",
615
+ children: [step !== "1" && /*#__PURE__*/jsx("div", {
616
+ className: classnames("w-10 border-b", {
617
+ "neeto-ui-border-gray-800": isActiveOrCompleted(isActive, isCompleted),
618
+ "neeto-ui-border-gray-400": !isActiveOrCompleted(isActive, isCompleted)
619
+ })
620
+ }), /*#__PURE__*/jsxs("div", {
621
+ className: "flex items-center gap-2",
622
+ children: [/*#__PURE__*/jsx("div", {
623
+ className: classnames("neeto-ui-rounded-full neeto-ui-gray-600 flex h-6 w-6 items-center justify-center border", {
624
+ "neeto-ui-bg-success-600 neeto-ui-border-success-600 neeto-ui-text-white": isActive,
625
+ "neeto-ui-bg-primary-600 neeto-ui-border-primary-600 neeto-ui-text-white": isCompleted,
626
+ "neeto-ui-border-gray-400": !isActiveOrCompleted(isActive, isCompleted)
627
+ }),
628
+ children: /*#__PURE__*/jsx(Typography, {
629
+ component: "span",
630
+ style: "body2",
631
+ weight: "normal",
632
+ children: step
633
+ })
634
+ }), /*#__PURE__*/jsx(Typography, {
635
+ style: "body2",
636
+ weight: "normal",
637
+ className: classnames({
638
+ "neeto-ui-text-gray-800": isActiveOrCompleted(isActive, isCompleted),
639
+ "neeto-ui-text-gray-600": !isActiveOrCompleted(isActive, isCompleted)
640
+ }),
641
+ children: label
642
+ })]
643
+ })]
644
+ }, step);
645
+ })
646
+ });
647
+ };
648
+
649
+ var Modal = function Modal(_ref) {
650
+ var _ref$isOpen = _ref.isOpen,
651
+ isOpen = _ref$isOpen === void 0 ? noop : _ref$isOpen,
652
+ _ref$onClose = _ref.onClose,
653
+ onClose = _ref$onClose === void 0 ? noop : _ref$onClose,
654
+ _ref$steps = _ref.steps,
655
+ steps = _ref$steps === void 0 ? {} : _ref$steps,
656
+ children = _ref.children;
657
+ return /*#__PURE__*/jsxs(NeetoUIModal, {
658
+ isOpen: isOpen,
659
+ onClose: onClose,
660
+ className: "neeto-ui-flex neeto-ui-flex-col neeto-ui-transform-none w-screen overflow-y-auto",
661
+ size: "fullScreen",
662
+ children: [/*#__PURE__*/jsx(NeetoUIModal.Header, {
663
+ children: /*#__PURE__*/jsx(Stepper, {
664
+ steps: steps
665
+ })
666
+ }), /*#__PURE__*/jsx(NeetoUIModal.Body, {
667
+ className: "neeto-ui-flex neeto-ui-justify-center neeto-ui-flex-grow",
668
+ children: /*#__PURE__*/jsx("div", {
669
+ className: "neeto-ui-w-full py-10",
670
+ children: children
671
+ })
672
+ })]
673
+ });
674
+ };
675
+
676
+ function getDefaultExportFromCjs (x) {
677
+ return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
678
+ }
679
+
680
+ var propTypes = {exports: {}};
681
+
682
+ /**
683
+ * Copyright (c) 2013-present, Facebook, Inc.
684
+ *
685
+ * This source code is licensed under the MIT license found in the
686
+ * LICENSE file in the root directory of this source tree.
687
+ */
688
+ var ReactPropTypesSecret$1 = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';
689
+ var ReactPropTypesSecret_1 = ReactPropTypesSecret$1;
690
+
691
+ /**
692
+ * Copyright (c) 2013-present, Facebook, Inc.
693
+ *
694
+ * This source code is licensed under the MIT license found in the
695
+ * LICENSE file in the root directory of this source tree.
696
+ */
697
+ var ReactPropTypesSecret = ReactPropTypesSecret_1;
698
+ function emptyFunction() {}
699
+ function emptyFunctionWithReset() {}
700
+ emptyFunctionWithReset.resetWarningCache = emptyFunction;
701
+ var factoryWithThrowingShims = function factoryWithThrowingShims() {
702
+ function shim(props, propName, componentName, location, propFullName, secret) {
703
+ if (secret === ReactPropTypesSecret) {
704
+ // It is still safe when called from React.
705
+ return;
706
+ }
707
+ 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');
708
+ err.name = 'Invariant Violation';
709
+ throw err;
710
+ }
711
+ shim.isRequired = shim;
712
+ function getShim() {
713
+ return shim;
714
+ }
715
+ // Important!
716
+ // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.
717
+ var ReactPropTypes = {
718
+ array: shim,
719
+ bigint: shim,
720
+ bool: shim,
721
+ func: shim,
722
+ number: shim,
723
+ object: shim,
724
+ string: shim,
725
+ symbol: shim,
726
+ any: shim,
727
+ arrayOf: getShim,
728
+ element: shim,
729
+ elementType: shim,
730
+ instanceOf: getShim,
731
+ node: shim,
732
+ objectOf: getShim,
733
+ oneOf: getShim,
734
+ oneOfType: getShim,
735
+ shape: getShim,
736
+ exact: getShim,
737
+ checkPropTypes: emptyFunctionWithReset,
738
+ resetWarningCache: emptyFunction
739
+ };
740
+ ReactPropTypes.PropTypes = ReactPropTypes;
741
+ return ReactPropTypes;
742
+ };
743
+
744
+ /**
745
+ * Copyright (c) 2013-present, Facebook, Inc.
746
+ *
747
+ * This source code is licensed under the MIT license found in the
748
+ * LICENSE file in the root directory of this source tree.
749
+ */
750
+ {
751
+ // By explicitly using `prop-types` you are opting into new production behavior.
752
+ // http://fb.me/prop-types-in-prod
753
+ propTypes.exports = factoryWithThrowingShims();
754
+ }
755
+ var propTypesExports = propTypes.exports;
756
+ var PropTypes = /*@__PURE__*/getDefaultExportFromCjs(propTypesExports);
757
+
758
+ 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; }
759
+ 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; }
760
+ var Connect = withT(function (_ref) {
761
+ var t = _ref.t,
762
+ Icon = _ref.Icon,
763
+ _ref$title = _ref.title,
764
+ title = _ref$title === void 0 ? "" : _ref$title,
765
+ _ref$description = _ref.description,
766
+ description = _ref$description === void 0 ? "" : _ref$description,
767
+ _ref$buttonProps = _ref.buttonProps,
768
+ buttonProps = _ref$buttonProps === void 0 ? {} : _ref$buttonProps,
769
+ _ref$onConnect = _ref.onConnect,
770
+ onConnect = _ref$onConnect === void 0 ? noop : _ref$onConnect,
771
+ children = _ref.children,
772
+ secondaryButtonProps = _ref.secondaryButtonProps;
773
+ return /*#__PURE__*/jsxs("div", {
774
+ className: "mx-auto w-full max-w-3xl",
775
+ children: [/*#__PURE__*/jsxs("div", {
776
+ className: "mb-6 flex flex-col gap-y-2",
777
+ children: [/*#__PURE__*/jsx(Icon, {
778
+ size: 48
779
+ }), /*#__PURE__*/jsxs("div", {
780
+ className: "flex flex-col gap-y-1",
781
+ children: [/*#__PURE__*/jsx(Typography, {
782
+ style: "h2",
783
+ children: title
784
+ }), /*#__PURE__*/jsx(Typography, {
785
+ style: "body2",
786
+ children: description
787
+ })]
788
+ })]
789
+ }), children, /*#__PURE__*/jsxs("div", {
790
+ className: "flex w-full items-center gap-x-3",
791
+ children: [/*#__PURE__*/jsx(Button, _objectSpread$2({
792
+ label: t("neetoIntegrations.common.connect"),
793
+ onClick: onConnect
794
+ }, buttonProps)), secondaryButtonProps && /*#__PURE__*/jsx(Button, _objectSpread$2({
795
+ style: "secondary"
796
+ }, secondaryButtonProps))]
797
+ })]
798
+ });
799
+ });
800
+ Connect.prototypes = {
801
+ /**
802
+ * To specify the Icon to be shown
803
+ */
804
+ Icon: PropTypes.node,
805
+ /**
806
+ * To specify the title of the connect component
807
+ */
808
+ title: PropTypes.string,
809
+ /**
810
+ * To specify the description for connect component
811
+ */
812
+ description: PropTypes.string,
813
+ /**
814
+ * To specify the props for the connect button
815
+ */
816
+ buttonProps: PropTypes.object,
817
+ /**
818
+ * Handler function that is triggered when the connect button is clicked.
819
+ */
820
+ onConnect: PropTypes.func
821
+ };
822
+
823
+ ({
824
+ /**
825
+ * To specify whether the integration modal should be opened or closed.
826
+ */
827
+ onClose: PropTypes.func,
828
+ /**
829
+ * To specify the walkthrough video link
830
+ */
831
+ videoUrl: PropTypes.string,
832
+ /**
833
+ * To specify the title of the demo component
834
+ */
835
+ title: PropTypes.string,
836
+ /**
837
+ * To specify the subtitle of the demo component
838
+ */
839
+ subtitle: PropTypes.string,
840
+ /**
841
+ * To specify the title of the video in the iframe
842
+ */
843
+ iframeTitle: PropTypes.string
844
+ });
845
+
846
+ var _path, _defs;
847
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
848
+ const SvgSuccess = props => /*#__PURE__*/React.createElement("svg", _extends({
849
+ xmlns: "http://www.w3.org/2000/svg",
850
+ xmlnsXlink: "http://www.w3.org/1999/xlink",
851
+ width: 72,
852
+ height: 72,
853
+ fill: "none"
854
+ }, props), _path || (_path = /*#__PURE__*/React.createElement("path", {
855
+ fill: "url(#success_svg__a)",
856
+ d: "M0 0h72v72H0z"
857
+ })), _defs || (_defs = /*#__PURE__*/React.createElement("defs", null, /*#__PURE__*/React.createElement("pattern", {
858
+ id: "success_svg__a",
859
+ width: 1,
860
+ height: 1,
861
+ patternContentUnits: "objectBoundingBox"
862
+ }, /*#__PURE__*/React.createElement("use", {
863
+ xlinkHref: "#success_svg__b",
864
+ transform: "scale(.0029)"
865
+ })), /*#__PURE__*/React.createElement("image", {
866
+ xlinkHref: "data:image/png;base64,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WkH/ssvowWQz/YBFlR9ZwAICIBBXAqH1YL0OD+gniPJkO18J3kBp9lTfTfSi+yrepx+Li6hNPxZpEACBeBIIrcB6MXogzynR+Y4q6k0zkpIv/0/E5X8eVtgFArElEMoQgU/hAbz4L7ZfEzQcBEojEEoP1sPwAES1tPMKuUAABJhAKAXW5fAARBVfDRAAASMEQhcicCk8AFE1cjqhEBAAgWwCofNgDYYHIKrZZwLWQQAEjBMIncA6DA9AVI2fQigQBEAgF4FQhQjkMurTXkEbuDGVuRrUzXaIajdQsAkEQMB9AqHyYNvK6Tz+RShEXCGq7p87qAEEQKAHAqES2B7CAxDVHjobu0EABLwlEJoQQY7wAETV2/MFtYEACBRBIDQebFZ4AKJaRAfjUBAAAf8IhEZgyaKUSNO4suG0RE0F6B8y1AwCIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAACIAAC7hD4/8l256QQPdLRAAAAAElFTkSuQmCC",
867
+ id: "success_svg__b",
868
+ width: 344,
869
+ height: 344
870
+ }))));
871
+
872
+ 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; }
873
+ 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; }
874
+ var Finish = withT(function (_ref) {
875
+ var t = _ref.t,
876
+ _ref$onClick = _ref.onClick,
877
+ onClick = _ref$onClick === void 0 ? noop : _ref$onClick,
878
+ _ref$title = _ref.title,
879
+ title = _ref$title === void 0 ? "" : _ref$title,
880
+ _ref$buttonProps = _ref.buttonProps,
881
+ buttonProps = _ref$buttonProps === void 0 ? {} : _ref$buttonProps,
882
+ _ref$secondaryButtonP = _ref.secondaryButtonProps,
883
+ secondaryButtonProps = _ref$secondaryButtonP === void 0 ? {} : _ref$secondaryButtonP,
884
+ children = _ref.children;
885
+ return /*#__PURE__*/jsxs("div", {
886
+ className: "mx-auto w-full max-w-3xl",
887
+ children: [/*#__PURE__*/jsx(SvgSuccess, {}), /*#__PURE__*/jsx(Typography, {
888
+ className: "mb-6 mt-4",
889
+ style: "h2",
890
+ weight: "semibold",
891
+ children: title
892
+ }), children, /*#__PURE__*/jsxs("div", {
893
+ className: "flex w-full items-center gap-x-2",
894
+ children: [/*#__PURE__*/jsx(Button, _objectSpread$1({
895
+ onClick: onClick,
896
+ label: t("neetoIntegrations.common.continue")
897
+ }, buttonProps)), isNotEmpty(secondaryButtonProps) && /*#__PURE__*/jsx(Button, _objectSpread$1({
898
+ style: "secondary"
899
+ }, secondaryButtonProps))]
900
+ })]
901
+ });
902
+ });
903
+ Finish.prototypes = {
904
+ /**
905
+ * To specify whether the integration modal should be opened or closed.
906
+ */
907
+ onClick: PropTypes.func,
908
+ /**
909
+ * To show the title of the Finish component
910
+ */
911
+ title: PropTypes.string,
912
+ /**
913
+ * To specify props for primary button
914
+ */
915
+ buttonProps: PropTypes.object,
916
+ /**
917
+ * To specify props for secondary button
918
+ */
919
+ secondaryButtonProps: PropTypes.object
920
+ };
921
+
922
+ var e = [],
923
+ t = [];
924
+ function n(n, r) {
925
+ if (n && "undefined" != typeof document) {
926
+ var a,
927
+ s = !0 === r.prepend ? "prepend" : "append",
928
+ d = !0 === r.singleTag,
929
+ i = "string" == typeof r.container ? document.querySelector(r.container) : document.getElementsByTagName("head")[0];
930
+ if (d) {
931
+ var u = e.indexOf(i);
932
+ -1 === u && (u = e.push(i) - 1, t[u] = {}), a = t[u] && t[u][s] ? t[u][s] : t[u][s] = c();
933
+ } else a = c();
934
+ 65279 === n.charCodeAt(0) && (n = n.substring(1)), a.styleSheet ? a.styleSheet.cssText += n : a.appendChild(document.createTextNode(n));
935
+ }
936
+ function c() {
937
+ var e = document.createElement("style");
938
+ 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]]);
939
+ var a = "prepend" === s ? "afterbegin" : "beforeend";
940
+ return i.insertAdjacentElement(a, e), e;
941
+ }
942
+ }
943
+
944
+ 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%}";
945
+ n(css,{});
946
+
947
+ var INTEGRATION_STEPS = [{
948
+ step: "1",
949
+ label: t$1("neetoIntegrations.common.connect"),
950
+ isActive: true,
951
+ isCompleted: false
952
+ }, {
953
+ step: "2",
954
+ label: t$1("neetoIntegrations.common.finish"),
955
+ isActive: false,
956
+ isCompleted: false
957
+ }];
958
+ var STEPS = {
959
+ connect: t$1("neetoIntegrations.common.connect"),
960
+ finish: t$1("neetoIntegrations.common.finish")
961
+ };
962
+
963
+ 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; }
964
+ 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; }
965
+ var GoogleCalendar = function GoogleCalendar(_ref) {
966
+ var permissionImage = _ref.permissionImage,
967
+ fetchAuthorizationUrl = _ref.fetchAuthorizationUrl,
968
+ handleClose = _ref.handleClose,
969
+ handleRedirect = _ref.handleRedirect;
970
+ var _useTranslation = useTranslation(),
971
+ t = _useTranslation.t;
972
+ var _useState = useState(INTEGRATION_STEPS),
973
+ _useState2 = _slicedToArray(_useState, 2),
974
+ steps = _useState2[0],
975
+ setSteps = _useState2[1];
976
+ var _getQueryParams = getQueryParams(),
977
+ status = _getQueryParams.status;
978
+ var activeTab = isPresent(status) ? STEPS.finish : STEPS.connect;
979
+ useEffect(function () {
980
+ setSteps(function () {
981
+ var stepsClone = _toConsumableArray(steps);
982
+ stepsClone[0] = _objectSpread(_objectSpread({}, steps[0]), {}, {
983
+ isActive: activeTab === STEPS.connect,
984
+ isCompleted: activeTab !== STEPS.connect
985
+ });
986
+ stepsClone[1] = _objectSpread(_objectSpread({}, steps[1]), {}, {
987
+ isActive: activeTab === STEPS.finish,
988
+ isCompleted: activeTab === STEPS.finish
989
+ });
990
+ return stepsClone;
991
+ });
992
+ }, [activeTab]);
993
+ return /*#__PURE__*/jsxs(Modal, {
994
+ steps: steps,
995
+ isOpen: true,
996
+ onClose: handleClose,
997
+ children: [activeTab === STEPS.connect && /*#__PURE__*/jsxs("div", {
998
+ className: "mx-auto w-full max-w-3xl",
999
+ children: [/*#__PURE__*/jsx(GoogleCalendar$1, {
1000
+ size: 48
1001
+ }), /*#__PURE__*/jsx(Typography, {
1002
+ className: "mb-4 mt-2",
1003
+ style: "h2",
1004
+ children: t("neetoIntegrations.google.connect.title")
1005
+ }), /*#__PURE__*/jsxs("div", {
1006
+ className: "flex w-full flex-col items-start",
1007
+ children: [/*#__PURE__*/jsx(Callout, {
1008
+ className: "block leading-5",
1009
+ children: /*#__PURE__*/jsx(Trans, {
1010
+ components: {
1011
+ bold: /*#__PURE__*/jsx("strong", {})
1012
+ },
1013
+ i18nKey: "neetoIntegrations.google.connect.reminderToAcceptPermissions",
1014
+ values: {
1015
+ selectCheckbox: t("neetoIntegrations.google.connect.selectCheckbox")
1016
+ }
1017
+ })
1018
+ }), permissionImage && /*#__PURE__*/jsx("div", {
1019
+ className: "neeto-ui-border-gray-300 neeto-ui-rounded-md my-4 overflow-hidden border",
1020
+ children: /*#__PURE__*/jsx("img", {
1021
+ src: permissionImage
1022
+ })
1023
+ })]
1024
+ }), /*#__PURE__*/jsx(Button, {
1025
+ icon: Google,
1026
+ label: t("neetoIntegrations.google.connect.signIn"),
1027
+ onClick: fetchAuthorizationUrl
1028
+ })]
1029
+ }), activeTab === STEPS.finish && /*#__PURE__*/jsx(Finish, {
1030
+ title: t("neetoIntegrations.google.finish.title"),
1031
+ onClick: handleRedirect
1032
+ })]
1033
+ });
1034
+ };
1035
+
1036
+ export { GoogleCalendar as default };
1037
+ //# sourceMappingURL=GoogleCalender.js.map