@bigbinary/neeto-email-delivery-frontend 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/README.md +150 -0
  2. package/app/javascript/src/translations/ar.json +5 -0
  3. package/app/javascript/src/translations/bg.json +5 -0
  4. package/app/javascript/src/translations/ca.json +5 -0
  5. package/app/javascript/src/translations/cs.json +5 -0
  6. package/app/javascript/src/translations/da.json +5 -0
  7. package/app/javascript/src/translations/de.json +5 -0
  8. package/app/javascript/src/translations/en.json +80 -0
  9. package/app/javascript/src/translations/es-MX.json +5 -0
  10. package/app/javascript/src/translations/es.json +5 -0
  11. package/app/javascript/src/translations/et.json +5 -0
  12. package/app/javascript/src/translations/fi.json +5 -0
  13. package/app/javascript/src/translations/fil.json +5 -0
  14. package/app/javascript/src/translations/fr.json +5 -0
  15. package/app/javascript/src/translations/hi.json +5 -0
  16. package/app/javascript/src/translations/hr.json +5 -0
  17. package/app/javascript/src/translations/id.json +5 -0
  18. package/app/javascript/src/translations/index.js +3 -0
  19. package/app/javascript/src/translations/it.json +5 -0
  20. package/app/javascript/src/translations/ja.json +5 -0
  21. package/app/javascript/src/translations/ko.json +5 -0
  22. package/app/javascript/src/translations/nl.json +5 -0
  23. package/app/javascript/src/translations/pl.json +5 -0
  24. package/app/javascript/src/translations/pt-BR.json +5 -0
  25. package/app/javascript/src/translations/pt.json +5 -0
  26. package/app/javascript/src/translations/ro.json +5 -0
  27. package/app/javascript/src/translations/ru.json +5 -0
  28. package/app/javascript/src/translations/sk.json +5 -0
  29. package/app/javascript/src/translations/sl.json +5 -0
  30. package/app/javascript/src/translations/sv.json +5 -0
  31. package/app/javascript/src/translations/th.json +5 -0
  32. package/app/javascript/src/translations/tr.json +5 -0
  33. package/app/javascript/src/translations/uk.json +5 -0
  34. package/app/javascript/src/translations/vi.json +5 -0
  35. package/app/javascript/src/translations/zh-CN.json +5 -0
  36. package/app/javascript/src/translations/zh-TW.json +5 -0
  37. package/dist/EmailDeliveryScreen.js +419 -0
  38. package/dist/EmailDeliveryScreen.js.map +1 -0
  39. package/dist/SparkpostDomainSetup.js +119 -0
  40. package/dist/SparkpostDomainSetup.js.map +1 -0
  41. package/dist/SparkpostDomainVerify.js +265 -0
  42. package/dist/SparkpostDomainVerify.js.map +1 -0
  43. package/dist/cjs/EmailDeliveryScreen.js +421 -0
  44. package/dist/cjs/EmailDeliveryScreen.js.map +1 -0
  45. package/dist/cjs/SparkpostDomainSetup.js +121 -0
  46. package/dist/cjs/SparkpostDomainSetup.js.map +1 -0
  47. package/dist/cjs/SparkpostDomainVerify.js +267 -0
  48. package/dist/cjs/SparkpostDomainVerify.js.map +1 -0
  49. package/dist/cjs/index.js +46 -0
  50. package/dist/cjs/index.js.map +1 -0
  51. package/dist/constants-9aNca_br.js +67 -0
  52. package/dist/constants-9aNca_br.js.map +1 -0
  53. package/dist/constants-DcHGgJC2.js +94 -0
  54. package/dist/constants-DcHGgJC2.js.map +1 -0
  55. package/dist/index.js +38 -0
  56. package/dist/index.js.map +1 -0
  57. package/dist/useSparkpostDomain-ByWd7ekp.js +183 -0
  58. package/dist/useSparkpostDomain-ByWd7ekp.js.map +1 -0
  59. package/dist/useSparkpostDomain-DogzCozg.js +193 -0
  60. package/dist/useSparkpostDomain-DogzCozg.js.map +1 -0
  61. package/package.json +235 -0
  62. package/types.d.ts +22 -0
@@ -0,0 +1,419 @@
1
+ import { isPresent, humanize } from '@bigbinary/neeto-cist';
2
+ import { useMutationWithInvalidation, withT, useQueryParams } from '@bigbinary/neeto-commons-frontend/react-utils';
3
+ import { buildUrl, showThumbsUpToastr } from '@bigbinary/neeto-commons-frontend/utils';
4
+ import MailSend from '@bigbinary/neeto-icons/MailSend';
5
+ import GmailIcon from '@bigbinary/neeto-icons/misc/Gmail';
6
+ import OutlookIcon from '@bigbinary/neeto-icons/misc/Outlook';
7
+ import Spinner from '@bigbinary/neetoui/Spinner';
8
+ import Callout from '@bigbinary/neetoui/Callout';
9
+ import Toastr from '@bigbinary/neetoui/Toastr';
10
+ import { prop } from 'ramda';
11
+ import { useTranslation } from 'react-i18next';
12
+ import { useHistory } from 'react-router-dom';
13
+ import { G as GMAIL_URL, b as GMAIL_OAUTH_URL, Q as QUERY_KEYS, O as OUTLOOK_URL, c as OUTLOOK_OAUTH_URL, u as useSparkpostDomain, d as GMAIL_OAUTH_CONNECT_URL, e as OUTLOOK_OAUTH_CONNECT_URL } from './useSparkpostDomain-ByWd7ekp.js';
14
+ import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
15
+ import { useState, useEffect } from 'react';
16
+ import { useQuery, useQueryClient } from '@tanstack/react-query';
17
+ import _defineProperty from '@babel/runtime/helpers/defineProperty';
18
+ import axios from 'axios';
19
+ import { t } from 'i18next';
20
+ import Button from '@bigbinary/neetoui/Button';
21
+ import Tag from '@bigbinary/neetoui/Tag';
22
+ import Typography from '@bigbinary/neetoui/Typography';
23
+ import { jsx, jsxs } from 'react/jsx-runtime';
24
+
25
+ var get$1 = function get(ownerId) {
26
+ return axios.get(buildUrl(GMAIL_URL, {
27
+ ownerId: ownerId
28
+ }), {
29
+ showToastr: false
30
+ });
31
+ };
32
+ var destroy$1 = function destroy(ownerId) {
33
+ axios["delete"](buildUrl(GMAIL_OAUTH_URL, {
34
+ ownerId: ownerId
35
+ }), {
36
+ showToastr: false
37
+ });
38
+ };
39
+ var gmailApi = {
40
+ get: get$1,
41
+ destroy: destroy$1
42
+ };
43
+
44
+ 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; }
45
+ 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; }
46
+ var useFetchGmail = function useFetchGmail(ownerId, options) {
47
+ return useQuery(_objectSpread$1({
48
+ queryKey: [QUERY_KEYS.INTEGRATION_GMAIL, ownerId],
49
+ queryFn: function queryFn() {
50
+ return gmailApi.get(ownerId);
51
+ },
52
+ retry: 1
53
+ }, options));
54
+ };
55
+ var useDestroyGmail = function useDestroyGmail(_ref) {
56
+ var ownerId = _ref.ownerId;
57
+ return useMutationWithInvalidation(function () {
58
+ return gmailApi.destroy(ownerId);
59
+ }, {
60
+ keysToInvalidate: [[QUERY_KEYS.INTEGRATION_GMAIL, ownerId]]
61
+ });
62
+ };
63
+
64
+ var useGmail = function useGmail(_ref) {
65
+ var ownerId = _ref.ownerId,
66
+ indexRoute = _ref.indexRoute,
67
+ canManageIntegrations = _ref.canManageIntegrations;
68
+ var _useState = useState(false),
69
+ _useState2 = _slicedToArray(_useState, 2),
70
+ isDisconnectAlertOpen = _useState2[0],
71
+ setIsDisconnectAlertOpen = _useState2[1];
72
+ var history = useHistory();
73
+ var queryClient = useQueryClient();
74
+ var _useFetchGmail = useFetchGmail(ownerId, {
75
+ enabled: canManageIntegrations
76
+ }),
77
+ isLoading = _useFetchGmail.isLoading,
78
+ _useFetchGmail$data = _useFetchGmail.data,
79
+ data = _useFetchGmail$data === void 0 ? {} : _useFetchGmail$data,
80
+ isGmailFetched = _useFetchGmail.isSuccess;
81
+ var _useDestroyGmail = useDestroyGmail({
82
+ ownerId: ownerId
83
+ }),
84
+ isDestroying = _useDestroyGmail.isPending,
85
+ destroyIntegration = _useDestroyGmail.mutate;
86
+ var onClose = function onClose() {
87
+ return history.replace(indexRoute);
88
+ };
89
+ var onDisconnect = function onDisconnect() {
90
+ destroyIntegration(false, {
91
+ onSuccess: function onSuccess() {
92
+ showThumbsUpToastr();
93
+ setIsDisconnectAlertOpen(false);
94
+ history.replace(indexRoute);
95
+ }
96
+ });
97
+ };
98
+ useEffect(function () {
99
+ if (isGmailFetched) {
100
+ queryClient.invalidateQueries({
101
+ predicate: function predicate(query) {
102
+ var _query$queryKey = _slicedToArray(query.queryKey, 2),
103
+ key = _query$queryKey[0],
104
+ id = _query$queryKey[1];
105
+ return key === QUERY_KEYS.INTEGRATION_GMAIL && id !== ownerId;
106
+ }
107
+ });
108
+ }
109
+ }, [isGmailFetched, queryClient, ownerId]);
110
+ return {
111
+ data: data,
112
+ isLoading: isLoading,
113
+ isDestroying: isDestroying,
114
+ isConnected: data === null || data === void 0 ? void 0 : data.connected,
115
+ isDisconnectAlertOpen: isDisconnectAlertOpen,
116
+ setIsDisconnectAlertOpen: setIsDisconnectAlertOpen,
117
+ onDisconnect: onDisconnect,
118
+ onClose: onClose,
119
+ errorMessage: data === null || data === void 0 ? void 0 : data.error
120
+ };
121
+ };
122
+
123
+ var get = function get(ownerId) {
124
+ return axios.get(buildUrl(OUTLOOK_URL, {
125
+ ownerId: ownerId
126
+ }), {
127
+ showToastr: false
128
+ });
129
+ };
130
+ var destroy = function destroy(ownerId) {
131
+ axios["delete"](buildUrl(OUTLOOK_OAUTH_URL, {
132
+ ownerId: ownerId
133
+ }), {
134
+ showToastr: false
135
+ });
136
+ };
137
+ var outlookApi = {
138
+ get: get,
139
+ destroy: destroy
140
+ };
141
+
142
+ 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; }
143
+ 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; }
144
+ var useFetchOutlook = function useFetchOutlook(ownerId, options) {
145
+ return useQuery(_objectSpread({
146
+ queryKey: [QUERY_KEYS.INTEGRATION_OUTLOOK, ownerId],
147
+ queryFn: function queryFn() {
148
+ return outlookApi.get(ownerId);
149
+ },
150
+ retry: 1
151
+ }, options));
152
+ };
153
+ var useDestroyOutlook = function useDestroyOutlook(_ref) {
154
+ var ownerId = _ref.ownerId;
155
+ return useMutationWithInvalidation(function () {
156
+ return outlookApi.destroy(ownerId);
157
+ }, {
158
+ keysToInvalidate: [[QUERY_KEYS.INTEGRATION_OUTLOOK, ownerId]]
159
+ });
160
+ };
161
+
162
+ var useOutlook = function useOutlook(_ref) {
163
+ var ownerId = _ref.ownerId,
164
+ indexRoute = _ref.indexRoute,
165
+ canManageIntegrations = _ref.canManageIntegrations;
166
+ var _useState = useState(false),
167
+ _useState2 = _slicedToArray(_useState, 2),
168
+ isDisconnectAlertOpen = _useState2[0],
169
+ setIsDisconnectAlertOpen = _useState2[1];
170
+ var history = useHistory();
171
+ var queryClient = useQueryClient();
172
+ var _useFetchOutlook = useFetchOutlook(ownerId, {
173
+ enabled: canManageIntegrations
174
+ }),
175
+ isLoading = _useFetchOutlook.isLoading,
176
+ _useFetchOutlook$data = _useFetchOutlook.data,
177
+ data = _useFetchOutlook$data === void 0 ? {} : _useFetchOutlook$data,
178
+ isOutlookFetched = _useFetchOutlook.isSuccess;
179
+ var _useDestroyOutlook = useDestroyOutlook({
180
+ ownerId: ownerId
181
+ }),
182
+ isDestroying = _useDestroyOutlook.isPending,
183
+ destroyIntegration = _useDestroyOutlook.mutate;
184
+ var onClose = function onClose() {
185
+ return history.replace(indexRoute);
186
+ };
187
+ var onDisconnect = function onDisconnect() {
188
+ destroyIntegration(false, {
189
+ onSuccess: function onSuccess() {
190
+ showThumbsUpToastr();
191
+ setIsDisconnectAlertOpen(false);
192
+ history.replace(indexRoute);
193
+ }
194
+ });
195
+ };
196
+ useEffect(function () {
197
+ if (isOutlookFetched) {
198
+ queryClient.invalidateQueries({
199
+ predicate: function predicate(query) {
200
+ var _query$queryKey = _slicedToArray(query.queryKey, 2),
201
+ key = _query$queryKey[0],
202
+ id = _query$queryKey[1];
203
+ return key === QUERY_KEYS.INTEGRATION_OUTLOOK && id !== ownerId;
204
+ }
205
+ });
206
+ }
207
+ }, [isOutlookFetched, queryClient, ownerId]);
208
+ return {
209
+ data: data,
210
+ isLoading: isLoading,
211
+ isDestroying: isDestroying,
212
+ isConnected: data === null || data === void 0 ? void 0 : data.connected,
213
+ isDisconnectAlertOpen: isDisconnectAlertOpen,
214
+ setIsDisconnectAlertOpen: setIsDisconnectAlertOpen,
215
+ onDisconnect: onDisconnect,
216
+ onClose: onClose,
217
+ errorMessage: data === null || data === void 0 ? void 0 : data.error
218
+ };
219
+ };
220
+
221
+ var ERROR_MESSAGES = {
222
+ gmail_permission_not_given: t("neetoEmailDelivery.gmail.permissionNotGiven"),
223
+ outlook_permission_not_given: t("neetoEmailDelivery.outlook.permissionNotGiven"),
224
+ outlook_invalid_client: t("neetoEmailDelivery.outlook.invalidClient"),
225
+ outlook_nil_json_web_token: t("neetoEmailDelivery.outlook.nilJsonWebToken")
226
+ };
227
+
228
+ var IntegrationCard = withT(function (_ref) {
229
+ var t = _ref.t,
230
+ Icon = _ref.icon,
231
+ title = _ref.title,
232
+ description = _ref.description,
233
+ isConnected = _ref.isConnected,
234
+ isDisconnecting = _ref.isDisconnecting,
235
+ onConnect = _ref.onConnect,
236
+ onDisconnect = _ref.onDisconnect,
237
+ connectButtonText = _ref.connectButtonText,
238
+ _ref$disconnectButton = _ref.disconnectButtonText,
239
+ disconnectButtonText = _ref$disconnectButton === void 0 ? "neetoEmailDelivery.sparkpost.emailDelivery.disconnect" : _ref$disconnectButton,
240
+ _ref$connectedTagText = _ref.connectedTagText,
241
+ connectedTagText = _ref$connectedTagText === void 0 ? "neetoEmailDelivery.sparkpost.emailDelivery.connected" : _ref$connectedTagText;
242
+ return /*#__PURE__*/jsx("div", {
243
+ className: "neeto-ui-rounded-lg neeto-ui-shadow-xs neeto-ui-border-gray-300 translate flex flex-col gap-y-4 border p-6 no-underline transition-transform duration-300 ease-in-out outline-none hover:-translate-y-1",
244
+ children: /*#__PURE__*/jsxs("div", {
245
+ className: "flex flex-col gap-4",
246
+ children: [/*#__PURE__*/jsxs("div", {
247
+ className: "flex items-center gap-3",
248
+ children: [/*#__PURE__*/jsx(Icon, {
249
+ className: "shrink-0",
250
+ size: 32
251
+ }), /*#__PURE__*/jsx("div", {
252
+ className: "min-w-0 flex-1",
253
+ children: /*#__PURE__*/jsxs("div", {
254
+ className: "flex items-center gap-2",
255
+ children: [/*#__PURE__*/jsx(Typography, {
256
+ style: "h4",
257
+ weight: "semibold",
258
+ children: title
259
+ }), isConnected && /*#__PURE__*/jsx(Tag, {
260
+ label: t(connectedTagText)
261
+ })]
262
+ })
263
+ })]
264
+ }), /*#__PURE__*/jsx(Typography, {
265
+ style: "body2",
266
+ children: description
267
+ }), connectButtonText && /*#__PURE__*/jsx("div", {
268
+ className: "flex gap-2",
269
+ children: isConnected ? /*#__PURE__*/jsx(Button, {
270
+ "data-cy": "disconnect-button",
271
+ label: t(disconnectButtonText),
272
+ loading: isDisconnecting,
273
+ size: "small",
274
+ style: "danger",
275
+ onClick: onDisconnect
276
+ }) : /*#__PURE__*/jsx(Button, {
277
+ "data-cy": "connect-button",
278
+ label: t(connectButtonText),
279
+ size: "small",
280
+ style: "primary",
281
+ onClick: onConnect
282
+ })
283
+ })]
284
+ })
285
+ });
286
+ });
287
+
288
+ var EmailDeliveryScreen = function EmailDeliveryScreen(_ref) {
289
+ var indexRoute = _ref.indexRoute,
290
+ ownerId = _ref.ownerId,
291
+ ownDomainSetupRoute = _ref.ownDomainSetupRoute,
292
+ canManageIntegrations = _ref.canManageIntegrations;
293
+ var _useTranslation = useTranslation(),
294
+ t = _useTranslation.t;
295
+ var history = useHistory();
296
+ var _useQueryParams = useQueryParams(),
297
+ error = _useQueryParams.error,
298
+ errorDescription = _useQueryParams.errorDescription;
299
+ if (isPresent(error)) {
300
+ var _errorMessage;
301
+ var errorMessage = ERROR_MESSAGES[error];
302
+ if (errorDescription) {
303
+ errorMessage = "".concat(errorMessage, " ").concat(errorDescription);
304
+ }
305
+ Toastr.error((_errorMessage = errorMessage) !== null && _errorMessage !== void 0 ? _errorMessage : humanize(error));
306
+ history.replace(indexRoute);
307
+ }
308
+ var gmailIntegration = useGmail({
309
+ ownerId: ownerId,
310
+ indexRoute: indexRoute,
311
+ canManageIntegrations: canManageIntegrations
312
+ });
313
+ var outlookIntegration = useOutlook({
314
+ ownerId: ownerId,
315
+ indexRoute: indexRoute,
316
+ canManageIntegrations: canManageIntegrations
317
+ });
318
+ var sparkpostIntegration = useSparkpostDomain({
319
+ ownerId: ownerId,
320
+ canManageIntegrations: canManageIntegrations
321
+ });
322
+ var _gmailIntegration$dat = gmailIntegration.data,
323
+ gmailData = _gmailIntegration$dat === void 0 ? {} : _gmailIntegration$dat,
324
+ isGmailConnected = gmailIntegration.isConnected,
325
+ isGmailLoading = gmailIntegration.isLoading,
326
+ isGmailDisconnecting = gmailIntegration.isDestroying,
327
+ onGmailDisconnect = gmailIntegration.onDisconnect;
328
+ var _outlookIntegration$d = outlookIntegration.data,
329
+ outlookData = _outlookIntegration$d === void 0 ? {} : _outlookIntegration$d,
330
+ isOutlookConnected = outlookIntegration.isConnected,
331
+ isOutlookLoading = outlookIntegration.isLoading,
332
+ isOutlookDisconnecting = outlookIntegration.isDestroying,
333
+ onOutlookDisconnect = outlookIntegration.onDisconnect;
334
+ var _sparkpostIntegration = sparkpostIntegration.data,
335
+ sparkpostData = _sparkpostIntegration === void 0 ? {} : _sparkpostIntegration,
336
+ isSparkpostConnected = sparkpostIntegration.isConnected,
337
+ isSparkpostLoading = sparkpostIntegration.isLoading,
338
+ onSparkpostDisconnect = sparkpostIntegration.onDisconnect,
339
+ isSparkpostDisconnecting = sparkpostIntegration.isDestroying;
340
+ var isLoading = isGmailLoading || isOutlookLoading || isSparkpostLoading;
341
+ var hasActiveIntegration = isGmailConnected || isOutlookConnected || isSparkpostConnected;
342
+ var handleGmailConnect = function handleGmailConnect() {
343
+ window.location.href = buildUrl(GMAIL_OAUTH_CONNECT_URL, {
344
+ ownerId: ownerId
345
+ });
346
+ };
347
+ var handleOutlookConnect = function handleOutlookConnect() {
348
+ window.location.href = buildUrl(OUTLOOK_OAUTH_CONNECT_URL, {
349
+ ownerId: ownerId
350
+ });
351
+ };
352
+ var handleOwnDomainConnect = function handleOwnDomainConnect() {
353
+ history.push(ownDomainSetupRoute);
354
+ };
355
+ var gmailEmail = prop("email", gmailData);
356
+ var outlookEmail = prop("email", outlookData);
357
+ var sparkpostEmail = prop("email", sparkpostData);
358
+ var gmailTitle = t("neetoEmailDelivery.gmail.title");
359
+ var gmailDescription = isGmailConnected ? t("neetoEmailDelivery.sparkpost.emailDelivery.connectedEmail", {
360
+ email: gmailEmail
361
+ }) : t("neetoEmailDelivery.gmail.description");
362
+ var outlookTitle = t("neetoEmailDelivery.outlook.title");
363
+ var outlookDescription = isOutlookConnected ? t("neetoEmailDelivery.sparkpost.emailDelivery.connectedEmail", {
364
+ email: outlookEmail
365
+ }) : t("neetoEmailDelivery.outlook.description");
366
+ var ownDomainTitle = t("neetoEmailDelivery.sparkpost.emailDelivery.ownDomainTitle");
367
+ var ownDomainDescription = isSparkpostConnected ? t("neetoEmailDelivery.sparkpost.emailDelivery.connectedEmail", {
368
+ email: sparkpostEmail
369
+ }) : t("neetoEmailDelivery.sparkpost.emailDelivery.ownDomainDescription");
370
+ if (isLoading) {
371
+ return /*#__PURE__*/jsx("div", {
372
+ className: "flex grow items-center justify-center",
373
+ children: /*#__PURE__*/jsx(Spinner, {})
374
+ });
375
+ }
376
+ return /*#__PURE__*/jsx("div", {
377
+ className: "min-h-0 w-full grow",
378
+ children: /*#__PURE__*/jsxs("div", {
379
+ className: "@container mx-auto space-y-6",
380
+ children: [/*#__PURE__*/jsxs("div", {
381
+ className: "grid grid-cols-1 gap-3 py-1 @lg:grid-cols-2 @lg:gap-6 @3xl:grid-cols-3 @7xl:grid-cols-4",
382
+ children: [(!hasActiveIntegration || isGmailConnected) && /*#__PURE__*/jsx(IntegrationCard, {
383
+ connectButtonText: "neetoEmailDelivery.gmail.connectGmail",
384
+ description: gmailDescription,
385
+ icon: GmailIcon,
386
+ isConnected: isGmailConnected,
387
+ isDisconnecting: isGmailDisconnecting,
388
+ title: gmailTitle,
389
+ onConnect: handleGmailConnect,
390
+ onDisconnect: onGmailDisconnect
391
+ }), (!hasActiveIntegration || isOutlookConnected) && /*#__PURE__*/jsx(IntegrationCard, {
392
+ connectButtonText: "neetoEmailDelivery.outlook.connectOutlook",
393
+ description: outlookDescription,
394
+ icon: OutlookIcon,
395
+ isConnected: isOutlookConnected,
396
+ isDisconnecting: isOutlookDisconnecting,
397
+ title: outlookTitle,
398
+ onConnect: handleOutlookConnect,
399
+ onDisconnect: onOutlookDisconnect
400
+ }), (!hasActiveIntegration || isSparkpostConnected) && /*#__PURE__*/jsx(IntegrationCard, {
401
+ connectButtonText: "neetoEmailDelivery.sparkpost.emailDelivery.setupDomain",
402
+ description: ownDomainDescription,
403
+ icon: MailSend,
404
+ isConnected: isSparkpostConnected,
405
+ isDisconnecting: isSparkpostDisconnecting,
406
+ title: ownDomainTitle,
407
+ onConnect: handleOwnDomainConnect,
408
+ onDisconnect: onSparkpostDisconnect
409
+ })]
410
+ }), hasActiveIntegration && /*#__PURE__*/jsx(Callout, {
411
+ style: "success",
412
+ children: isGmailConnected ? t("neetoEmailDelivery.gmail.gmailConfigured") : isOutlookConnected ? t("neetoEmailDelivery.outlook.outlookConfigured") : t("neetoEmailDelivery.sparkpost.ownDomainConfigured")
413
+ })]
414
+ })
415
+ });
416
+ };
417
+
418
+ export { EmailDeliveryScreen as default };
419
+ //# sourceMappingURL=EmailDeliveryScreen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EmailDeliveryScreen.js","sources":["../app/javascript/src/apis/integrations/gmail.js","../app/javascript/src/hooks/reactQuery/integrations/useGmailIntegrationApi.js","../app/javascript/src/hooks/integrations/useGmail.js","../app/javascript/src/apis/integrations/outlook.js","../app/javascript/src/hooks/reactQuery/integrations/useOutlookIntegrationApi.js","../app/javascript/src/hooks/integrations/useOutlook.js","../app/javascript/src/components/EmailDeliveryScreen/constants.js","../app/javascript/src/components/EmailDeliveryScreen/IntegrationCard.jsx","../app/javascript/src/components/EmailDeliveryScreen/index.jsx"],"sourcesContent":["import axios from \"axios\";\nimport { buildUrl } from \"neetocommons/utils\";\n\nimport { GMAIL_URL, GMAIL_OAUTH_URL } from \"./constants\";\n\nconst get = ownerId =>\n axios.get(buildUrl(GMAIL_URL, { ownerId }), { showToastr: false });\n\nconst destroy = ownerId => {\n axios.delete(buildUrl(GMAIL_OAUTH_URL, { ownerId }), { showToastr: false });\n};\n\nconst gmailApi = { get, destroy };\n\nexport default gmailApi;\n","import { useQuery } from \"@tanstack/react-query\";\nimport { useMutationWithInvalidation } from \"neetocommons/react-utils\";\n\nimport gmailApi from \"apis/integrations/gmail\";\nimport { QUERY_KEYS } from \"src/constants/query\";\n\nexport const useFetchGmail = (ownerId, options) =>\n useQuery({\n queryKey: [QUERY_KEYS.INTEGRATION_GMAIL, ownerId],\n queryFn: () => gmailApi.get(ownerId),\n retry: 1,\n ...options,\n });\n\nexport const useDestroyGmail = ({ ownerId }) =>\n useMutationWithInvalidation(() => gmailApi.destroy(ownerId), {\n keysToInvalidate: [[QUERY_KEYS.INTEGRATION_GMAIL, ownerId]],\n });\n","import { useEffect, useState } from \"react\";\n\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport { showThumbsUpToastr } from \"neetocommons/utils\";\nimport { useHistory } from \"react-router-dom\";\n\nimport {\n useFetchGmail,\n useDestroyGmail,\n} from \"hooks/reactQuery/integrations/useGmailIntegrationApi\";\nimport { QUERY_KEYS } from \"src/constants/query\";\n\nconst useGmail = ({ ownerId, indexRoute, canManageIntegrations }) => {\n const [isDisconnectAlertOpen, setIsDisconnectAlertOpen] = useState(false);\n\n const history = useHistory();\n\n const queryClient = useQueryClient();\n\n const {\n isLoading,\n data = {},\n isSuccess: isGmailFetched,\n } = useFetchGmail(ownerId, { enabled: canManageIntegrations });\n\n const { isPending: isDestroying, mutate: destroyIntegration } =\n useDestroyGmail({ ownerId });\n\n const onClose = () => history.replace(indexRoute);\n\n const onDisconnect = () => {\n destroyIntegration(false, {\n onSuccess: () => {\n showThumbsUpToastr();\n setIsDisconnectAlertOpen(false);\n history.replace(indexRoute);\n },\n });\n };\n\n useEffect(() => {\n if (isGmailFetched) {\n queryClient.invalidateQueries({\n predicate: query => {\n const [key, id] = query.queryKey;\n\n return key === QUERY_KEYS.INTEGRATION_GMAIL && id !== ownerId;\n },\n });\n }\n }, [isGmailFetched, queryClient, ownerId]);\n\n return {\n data,\n isLoading,\n isDestroying,\n isConnected: data?.connected,\n isDisconnectAlertOpen,\n setIsDisconnectAlertOpen,\n onDisconnect,\n onClose,\n errorMessage: data?.error,\n };\n};\n\nexport default useGmail;\n","import axios from \"axios\";\nimport { buildUrl } from \"neetocommons/utils\";\n\nimport { OUTLOOK_URL, OUTLOOK_OAUTH_URL } from \"./constants\";\n\nconst get = ownerId =>\n axios.get(buildUrl(OUTLOOK_URL, { ownerId }), { showToastr: false });\n\nconst destroy = ownerId => {\n axios.delete(buildUrl(OUTLOOK_OAUTH_URL, { ownerId }), { showToastr: false });\n};\n\nconst outlookApi = { get, destroy };\n\nexport default outlookApi;\n","import { useQuery } from \"@tanstack/react-query\";\nimport { useMutationWithInvalidation } from \"neetocommons/react-utils\";\n\nimport outlookApi from \"apis/integrations/outlook\";\nimport { QUERY_KEYS } from \"src/constants/query\";\n\nexport const useFetchOutlook = (ownerId, options) =>\n useQuery({\n queryKey: [QUERY_KEYS.INTEGRATION_OUTLOOK, ownerId],\n queryFn: () => outlookApi.get(ownerId),\n retry: 1,\n ...options,\n });\n\nexport const useDestroyOutlook = ({ ownerId }) =>\n useMutationWithInvalidation(() => outlookApi.destroy(ownerId), {\n keysToInvalidate: [[QUERY_KEYS.INTEGRATION_OUTLOOK, ownerId]],\n });\n","import { useEffect, useState } from \"react\";\n\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport { showThumbsUpToastr } from \"neetocommons/utils\";\nimport { useHistory } from \"react-router-dom\";\n\nimport {\n useFetchOutlook,\n useDestroyOutlook,\n} from \"hooks/reactQuery/integrations/useOutlookIntegrationApi\";\nimport { QUERY_KEYS } from \"src/constants/query\";\n\nconst useOutlook = ({ ownerId, indexRoute, canManageIntegrations }) => {\n const [isDisconnectAlertOpen, setIsDisconnectAlertOpen] = useState(false);\n\n const history = useHistory();\n\n const queryClient = useQueryClient();\n\n const {\n isLoading,\n data = {},\n isSuccess: isOutlookFetched,\n } = useFetchOutlook(ownerId, { enabled: canManageIntegrations });\n\n const { isPending: isDestroying, mutate: destroyIntegration } =\n useDestroyOutlook({ ownerId });\n\n const onClose = () => history.replace(indexRoute);\n\n const onDisconnect = () => {\n destroyIntegration(false, {\n onSuccess: () => {\n showThumbsUpToastr();\n setIsDisconnectAlertOpen(false);\n history.replace(indexRoute);\n },\n });\n };\n\n useEffect(() => {\n if (isOutlookFetched) {\n queryClient.invalidateQueries({\n predicate: query => {\n const [key, id] = query.queryKey;\n\n return key === QUERY_KEYS.INTEGRATION_OUTLOOK && id !== ownerId;\n },\n });\n }\n }, [isOutlookFetched, queryClient, ownerId]);\n\n return {\n data,\n isLoading,\n isDestroying,\n isConnected: data?.connected,\n isDisconnectAlertOpen,\n setIsDisconnectAlertOpen,\n onDisconnect,\n onClose,\n errorMessage: data?.error,\n };\n};\n\nexport default useOutlook;\n","import { t } from \"i18next\";\n\nexport const ERROR_MESSAGES = {\n gmail_permission_not_given: t(\"neetoEmailDelivery.gmail.permissionNotGiven\"),\n outlook_permission_not_given: t(\n \"neetoEmailDelivery.outlook.permissionNotGiven\"\n ),\n outlook_invalid_client: t(\"neetoEmailDelivery.outlook.invalidClient\"),\n outlook_nil_json_web_token: t(\"neetoEmailDelivery.outlook.nilJsonWebToken\"),\n};\n","import { withT } from \"neetocommons/react-utils\";\nimport { Button, Tag, Typography } from \"neetoui\";\n\nconst IntegrationCard = withT(\n ({\n t,\n icon: Icon,\n title,\n description,\n isConnected,\n isDisconnecting,\n onConnect,\n onDisconnect,\n connectButtonText,\n disconnectButtonText = \"neetoEmailDelivery.sparkpost.emailDelivery.disconnect\",\n connectedTagText = \"neetoEmailDelivery.sparkpost.emailDelivery.connected\",\n }) => (\n <div className=\"neeto-ui-rounded-lg neeto-ui-shadow-xs neeto-ui-border-gray-300 translate flex flex-col gap-y-4 border p-6 no-underline transition-transform duration-300 ease-in-out outline-none hover:-translate-y-1\">\n <div className=\"flex flex-col gap-4\">\n <div className=\"flex items-center gap-3\">\n <Icon className=\"shrink-0\" size={32} />\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2\">\n <Typography style=\"h4\" weight=\"semibold\">\n {title}\n </Typography>\n {isConnected && <Tag label={t(connectedTagText)} />}\n </div>\n </div>\n </div>\n <Typography style=\"body2\">{description}</Typography>\n {connectButtonText && (\n <div className=\"flex gap-2\">\n {isConnected ? (\n <Button\n data-cy=\"disconnect-button\"\n label={t(disconnectButtonText)}\n loading={isDisconnecting}\n size=\"small\"\n style=\"danger\"\n onClick={onDisconnect}\n />\n ) : (\n <Button\n data-cy=\"connect-button\"\n label={t(connectButtonText)}\n size=\"small\"\n style=\"primary\"\n onClick={onConnect}\n />\n )}\n </div>\n )}\n </div>\n </div>\n )\n);\n\nexport default IntegrationCard;\n","import { humanize, isPresent } from \"neetocist\";\nimport { useQueryParams } from \"neetocommons/react-utils\";\nimport { buildUrl } from \"neetocommons/utils\";\nimport { MailSend } from \"neetoicons\";\nimport { Gmail as GmailIcon, Outlook as OutlookIcon } from \"neetoicons/misc\";\nimport { Spinner, Callout, Toastr } from \"neetoui\";\nimport { prop } from \"ramda\";\nimport { useTranslation } from \"react-i18next\";\nimport { useHistory } from \"react-router-dom\";\n\nimport {\n GMAIL_OAUTH_CONNECT_URL,\n OUTLOOK_OAUTH_CONNECT_URL,\n} from \"apis/integrations/constants\";\nimport useGmail from \"hooks/integrations/useGmail\";\nimport useOutlook from \"hooks/integrations/useOutlook\";\nimport useSparkpostDomain from \"hooks/integrations/useSparkpostDomain\";\n\nimport { ERROR_MESSAGES } from \"./constants\";\nimport IntegrationCard from \"./IntegrationCard\";\n\nconst EmailDeliveryScreen = ({\n indexRoute,\n ownerId,\n ownDomainSetupRoute,\n canManageIntegrations,\n}) => {\n const { t } = useTranslation();\n const history = useHistory();\n const { error, errorDescription } = useQueryParams();\n\n if (isPresent(error)) {\n let errorMessage = ERROR_MESSAGES[error];\n if (errorDescription) {\n errorMessage = `${errorMessage} ${errorDescription}`;\n }\n Toastr.error(errorMessage ?? humanize(error));\n\n history.replace(indexRoute);\n }\n\n const gmailIntegration = useGmail({\n ownerId,\n indexRoute,\n canManageIntegrations,\n });\n\n const outlookIntegration = useOutlook({\n ownerId,\n indexRoute,\n canManageIntegrations,\n });\n\n const sparkpostIntegration = useSparkpostDomain({\n ownerId,\n canManageIntegrations,\n });\n\n const {\n data: gmailData = {},\n isConnected: isGmailConnected,\n isLoading: isGmailLoading,\n isDestroying: isGmailDisconnecting,\n onDisconnect: onGmailDisconnect,\n } = gmailIntegration;\n\n const {\n data: outlookData = {},\n isConnected: isOutlookConnected,\n isLoading: isOutlookLoading,\n isDestroying: isOutlookDisconnecting,\n onDisconnect: onOutlookDisconnect,\n } = outlookIntegration;\n\n const {\n data: sparkpostData = {},\n isConnected: isSparkpostConnected,\n isLoading: isSparkpostLoading,\n onDisconnect: onSparkpostDisconnect,\n isDestroying: isSparkpostDisconnecting,\n } = sparkpostIntegration;\n\n const isLoading = isGmailLoading || isOutlookLoading || isSparkpostLoading;\n const hasActiveIntegration =\n isGmailConnected || isOutlookConnected || isSparkpostConnected;\n\n const handleGmailConnect = () => {\n window.location.href = buildUrl(GMAIL_OAUTH_CONNECT_URL, { ownerId });\n };\n\n const handleOutlookConnect = () => {\n window.location.href = buildUrl(OUTLOOK_OAUTH_CONNECT_URL, { ownerId });\n };\n\n const handleOwnDomainConnect = () => {\n history.push(ownDomainSetupRoute);\n };\n\n const gmailEmail = prop(\"email\", gmailData);\n const outlookEmail = prop(\"email\", outlookData);\n const sparkpostEmail = prop(\"email\", sparkpostData);\n\n const gmailTitle = t(\"neetoEmailDelivery.gmail.title\");\n const gmailDescription = isGmailConnected\n ? t(\"neetoEmailDelivery.sparkpost.emailDelivery.connectedEmail\", {\n email: gmailEmail,\n })\n : t(\"neetoEmailDelivery.gmail.description\");\n\n const outlookTitle = t(\"neetoEmailDelivery.outlook.title\");\n const outlookDescription = isOutlookConnected\n ? t(\"neetoEmailDelivery.sparkpost.emailDelivery.connectedEmail\", {\n email: outlookEmail,\n })\n : t(\"neetoEmailDelivery.outlook.description\");\n\n const ownDomainTitle = t(\n \"neetoEmailDelivery.sparkpost.emailDelivery.ownDomainTitle\"\n );\n\n const ownDomainDescription = isSparkpostConnected\n ? t(\"neetoEmailDelivery.sparkpost.emailDelivery.connectedEmail\", {\n email: sparkpostEmail,\n })\n : t(\"neetoEmailDelivery.sparkpost.emailDelivery.ownDomainDescription\");\n\n if (isLoading) {\n return (\n <div className=\"flex grow items-center justify-center\">\n <Spinner />\n </div>\n );\n }\n\n return (\n <div className=\"min-h-0 w-full grow\">\n <div className=\"@container mx-auto space-y-6\">\n <div className=\"grid grid-cols-1 gap-3 py-1 @lg:grid-cols-2 @lg:gap-6 @3xl:grid-cols-3 @7xl:grid-cols-4\">\n {/* Gmail Option */}\n {(!hasActiveIntegration || isGmailConnected) && (\n <IntegrationCard\n connectButtonText=\"neetoEmailDelivery.gmail.connectGmail\"\n description={gmailDescription}\n icon={GmailIcon}\n isConnected={isGmailConnected}\n isDisconnecting={isGmailDisconnecting}\n title={gmailTitle}\n onConnect={handleGmailConnect}\n onDisconnect={onGmailDisconnect}\n />\n )}\n {/* Outlook Option */}\n {(!hasActiveIntegration || isOutlookConnected) && (\n <IntegrationCard\n connectButtonText=\"neetoEmailDelivery.outlook.connectOutlook\"\n description={outlookDescription}\n icon={OutlookIcon}\n isConnected={isOutlookConnected}\n isDisconnecting={isOutlookDisconnecting}\n title={outlookTitle}\n onConnect={handleOutlookConnect}\n onDisconnect={onOutlookDisconnect}\n />\n )}\n {/* Own Domain (Sparkpost) Option */}\n {(!hasActiveIntegration || isSparkpostConnected) && (\n <IntegrationCard\n connectButtonText=\"neetoEmailDelivery.sparkpost.emailDelivery.setupDomain\"\n description={ownDomainDescription}\n icon={MailSend}\n isConnected={isSparkpostConnected}\n isDisconnecting={isSparkpostDisconnecting}\n title={ownDomainTitle}\n onConnect={handleOwnDomainConnect}\n onDisconnect={onSparkpostDisconnect}\n />\n )}\n </div>\n {hasActiveIntegration && (\n <Callout style=\"success\">\n {isGmailConnected\n ? t(\"neetoEmailDelivery.gmail.gmailConfigured\")\n : isOutlookConnected\n ? t(\"neetoEmailDelivery.outlook.outlookConfigured\")\n : t(\"neetoEmailDelivery.sparkpost.ownDomainConfigured\")}\n </Callout>\n )}\n </div>\n </div>\n );\n};\n\nexport default EmailDeliveryScreen;\n"],"names":["get","ownerId","axios","buildUrl","GMAIL_URL","showToastr","destroy","GMAIL_OAUTH_URL","gmailApi","useFetchGmail","options","useQuery","_objectSpread","queryKey","QUERY_KEYS","INTEGRATION_GMAIL","queryFn","retry","useDestroyGmail","_ref","useMutationWithInvalidation","keysToInvalidate","useGmail","indexRoute","canManageIntegrations","_useState","useState","_useState2","_slicedToArray","isDisconnectAlertOpen","setIsDisconnectAlertOpen","history","useHistory","queryClient","useQueryClient","_useFetchGmail","enabled","isLoading","_useFetchGmail$data","data","isGmailFetched","isSuccess","_useDestroyGmail","isDestroying","isPending","destroyIntegration","mutate","onClose","replace","onDisconnect","onSuccess","showThumbsUpToastr","useEffect","invalidateQueries","predicate","query","_query$queryKey","key","id","isConnected","connected","errorMessage","error","OUTLOOK_URL","OUTLOOK_OAUTH_URL","outlookApi","useFetchOutlook","INTEGRATION_OUTLOOK","useDestroyOutlook","useOutlook","_useFetchOutlook","_useFetchOutlook$data","isOutlookFetched","_useDestroyOutlook","ERROR_MESSAGES","gmail_permission_not_given","t","outlook_permission_not_given","outlook_invalid_client","outlook_nil_json_web_token","IntegrationCard","withT","Icon","icon","title","description","isDisconnecting","onConnect","connectButtonText","_ref$disconnectButton","disconnectButtonText","_ref$connectedTagText","connectedTagText","_jsx","className","children","_jsxs","size","Typography","style","weight","Tag","label","Button","loading","onClick","EmailDeliveryScreen","ownDomainSetupRoute","_useTranslation","useTranslation","_useQueryParams","useQueryParams","errorDescription","isPresent","_errorMessage","concat","Toastr","humanize","gmailIntegration","outlookIntegration","sparkpostIntegration","useSparkpostDomain","_gmailIntegration$dat","gmailData","isGmailConnected","isGmailLoading","isGmailDisconnecting","onGmailDisconnect","_outlookIntegration$d","outlookData","isOutlookConnected","isOutlookLoading","isOutlookDisconnecting","onOutlookDisconnect","_sparkpostIntegration","sparkpostData","isSparkpostConnected","isSparkpostLoading","onSparkpostDisconnect","isSparkpostDisconnecting","hasActiveIntegration","handleGmailConnect","window","location","href","GMAIL_OAUTH_CONNECT_URL","handleOutlookConnect","OUTLOOK_OAUTH_CONNECT_URL","handleOwnDomainConnect","push","gmailEmail","prop","outlookEmail","sparkpostEmail","gmailTitle","gmailDescription","email","outlookTitle","outlookDescription","ownDomainTitle","ownDomainDescription","Spinner","GmailIcon","OutlookIcon","MailSend","Callout"],"mappings":"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"}
@@ -0,0 +1,119 @@
1
+ import { buildUrl } from '@bigbinary/neeto-commons-frontend/utils';
2
+ import CardLayout from '@bigbinary/neeto-molecules/CardLayout';
3
+ import Callout from '@bigbinary/neetoui/Callout';
4
+ import Input from '@bigbinary/neetoui/formik/Input';
5
+ import ActionBlock from '@bigbinary/neetoui/formik/ActionBlock';
6
+ import Form from '@bigbinary/neetoui/formik/Form';
7
+ import { useTranslation } from 'react-i18next';
8
+ import { useHistory } from 'react-router-dom';
9
+ import { P as PageWrapper, a as PageContent, V as VALIDATION_SCHEMA } from './constants-9aNca_br.js';
10
+ import { u as useSparkpostDomain } from './useSparkpostDomain-ByWd7ekp.js';
11
+ import { jsx, jsxs } from 'react/jsx-runtime';
12
+ import '@babel/runtime/helpers/defineProperty';
13
+ import '@babel/runtime/helpers/objectWithoutProperties';
14
+ import 'react';
15
+ import 'classnames';
16
+ import '@bigbinary/neeto-molecules/Container';
17
+ import '@bigbinary/neeto-molecules/Header';
18
+ import 'i18next';
19
+ import 'yup';
20
+ import '@babel/runtime/helpers/slicedToArray';
21
+ import '@bigbinary/neetoui/Toastr';
22
+ import '@tanstack/react-query';
23
+ import '@bigbinary/neeto-commons-frontend/react-utils';
24
+ import 'axios';
25
+
26
+ var getDomainFromEmail = function getDomainFromEmail(email) {
27
+ return email.trim().split("@")[1];
28
+ };
29
+
30
+ var SparkpostDomainSetup = function SparkpostDomainSetup(_ref) {
31
+ var ownerId = _ref.ownerId,
32
+ alreadyVerifiedRoute = _ref.alreadyVerifiedRoute,
33
+ verifyRoute = _ref.verifyRoute,
34
+ onCancelRoute = _ref.onCancelRoute,
35
+ canManageIntegrations = _ref.canManageIntegrations;
36
+ var _useTranslation = useTranslation(),
37
+ t = _useTranslation.t;
38
+ var history = useHistory();
39
+ var _useSparkpostDomain = useSparkpostDomain({
40
+ ownerId: ownerId,
41
+ canManageIntegrations: canManageIntegrations
42
+ }),
43
+ onCreateDomain = _useSparkpostDomain.onCreateDomain,
44
+ isCreating = _useSparkpostDomain.isCreating;
45
+ var handleSubmit = function handleSubmit(values, _ref2) {
46
+ var setFieldError = _ref2.setFieldError;
47
+ onCreateDomain(values.email.trim(), function (response) {
48
+ if (response !== null && response !== void 0 && response.alreadyVerified) {
49
+ // Domain is already verified, go back to email delivery settings
50
+ history.push(alreadyVerifiedRoute);
51
+ } else {
52
+ // Navigate to verification page with domain query parameter
53
+ var domain = getDomainFromEmail(values.email);
54
+ history.push(buildUrl(verifyRoute, {
55
+ domain: domain,
56
+ email: values.email.trim()
57
+ }));
58
+ }
59
+ }, function (error) {
60
+ var _error$response;
61
+ var errorMessage = (error === null || error === void 0 || (_error$response = error.response) === null || _error$response === void 0 || (_error$response = _error$response.data) === null || _error$response === void 0 ? void 0 : _error$response.error) || t("neetoEmailDelivery.sparkpost.setup.validation.setupFailed");
62
+ setFieldError("email", errorMessage);
63
+ });
64
+ };
65
+ var handleCancel = function handleCancel() {
66
+ history.push(onCancelRoute);
67
+ };
68
+ return /*#__PURE__*/jsx(PageWrapper, {
69
+ children: /*#__PURE__*/jsx(PageContent, {
70
+ children: /*#__PURE__*/jsx(Form, {
71
+ className: "w-full",
72
+ formikProps: {
73
+ initialValues: {
74
+ email: ""
75
+ },
76
+ validationSchema: VALIDATION_SCHEMA,
77
+ onSubmit: handleSubmit
78
+ },
79
+ children: function children(_ref3) {
80
+ var values = _ref3.values;
81
+ var domain = values.email ? getDomainFromEmail(values.email) : t("neetoEmailDelivery.sparkpost.customDomain");
82
+ return /*#__PURE__*/jsx(CardLayout, {
83
+ title: String(t("neetoEmailDelivery.sparkpost.setup.title")),
84
+ actionBlock: /*#__PURE__*/jsx(ActionBlock, {
85
+ cancelButtonProps: {
86
+ onClick: handleCancel
87
+ },
88
+ isSubmitting: isCreating,
89
+ submitButtonProps: {
90
+ label: t("neetoEmailDelivery.sparkpost.setup.setupEmail")
91
+ }
92
+ }),
93
+ description: String(t("neetoEmailDelivery.sparkpost.setup.description")),
94
+ children: /*#__PURE__*/jsxs("div", {
95
+ className: "flex flex-col gap-6",
96
+ children: [/*#__PURE__*/jsx(Callout, {
97
+ style: "warning",
98
+ children: t("neetoEmailDelivery.sparkpost.setup.note")
99
+ }), /*#__PURE__*/jsx(Input, {
100
+ required: true,
101
+ unlimitedChars: true,
102
+ label: t("neetoEmailDelivery.sparkpost.setup.emailLabel"),
103
+ name: "email",
104
+ type: "email",
105
+ helpText: t("neetoEmailDelivery.sparkpost.setup.emailHelp", {
106
+ domain: domain
107
+ }),
108
+ placeholder: t("neetoEmailDelivery.sparkpost.setup.emailPlaceholder")
109
+ })]
110
+ })
111
+ });
112
+ }
113
+ })
114
+ })
115
+ });
116
+ };
117
+
118
+ export { SparkpostDomainSetup as default };
119
+ //# sourceMappingURL=SparkpostDomainSetup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SparkpostDomainSetup.js","sources":["../app/javascript/src/components/SparkpostDomain/utils.js","../app/javascript/src/components/SparkpostDomain/Setup.jsx"],"sourcesContent":["const getDomainFromEmail = email => email.trim().split(\"@\")[1];\n\nexport { getDomainFromEmail };\n","import { buildUrl } from \"neetocommons/utils\";\nimport CardLayout from \"neetomolecules/CardLayout\";\nimport { Callout } from \"neetoui\";\nimport { Input, ActionBlock, Form } from \"neetoui/formik\";\nimport { useTranslation } from \"react-i18next\";\nimport { useHistory } from \"react-router-dom\";\n\nimport { PageContent, PageWrapper } from \"components/PageLayout\";\nimport useSparkpostDomain from \"hooks/integrations/useSparkpostDomain\";\n\nimport { VALIDATION_SCHEMA } from \"./constants\";\nimport { getDomainFromEmail } from \"./utils\";\n\nconst SparkpostDomainSetup = ({\n ownerId,\n alreadyVerifiedRoute,\n verifyRoute,\n onCancelRoute,\n canManageIntegrations,\n}) => {\n const { t } = useTranslation();\n\n const history = useHistory();\n\n const { onCreateDomain, isCreating } = useSparkpostDomain({\n ownerId,\n canManageIntegrations,\n });\n\n const handleSubmit = (values, { setFieldError }) => {\n onCreateDomain(\n values.email.trim(),\n response => {\n if (response?.alreadyVerified) {\n // Domain is already verified, go back to email delivery settings\n history.push(alreadyVerifiedRoute);\n } else {\n // Navigate to verification page with domain query parameter\n const domain = getDomainFromEmail(values.email);\n history.push(\n buildUrl(verifyRoute, { domain, email: values.email.trim() })\n );\n }\n },\n error => {\n const errorMessage =\n error?.response?.data?.error ||\n t(\"neetoEmailDelivery.sparkpost.setup.validation.setupFailed\");\n setFieldError(\"email\", errorMessage);\n }\n );\n };\n\n const handleCancel = () => {\n history.push(onCancelRoute);\n };\n\n return (\n <PageWrapper>\n <PageContent>\n <Form\n className=\"w-full\"\n formikProps={{\n initialValues: { email: \"\" },\n validationSchema: VALIDATION_SCHEMA,\n onSubmit: handleSubmit,\n }}\n >\n {({ values }) => {\n const domain = values.email\n ? getDomainFromEmail(values.email)\n : t(\"neetoEmailDelivery.sparkpost.customDomain\");\n\n return (\n <CardLayout\n title={String(t(\"neetoEmailDelivery.sparkpost.setup.title\"))}\n actionBlock={\n <ActionBlock\n cancelButtonProps={{ onClick: handleCancel }}\n isSubmitting={isCreating}\n submitButtonProps={{\n label: t(\"neetoEmailDelivery.sparkpost.setup.setupEmail\"),\n }}\n />\n }\n description={String(\n t(\"neetoEmailDelivery.sparkpost.setup.description\")\n )}\n >\n <div className=\"flex flex-col gap-6\">\n <Callout style=\"warning\">\n {t(\"neetoEmailDelivery.sparkpost.setup.note\")}\n </Callout>\n <Input\n required\n unlimitedChars\n label={t(\"neetoEmailDelivery.sparkpost.setup.emailLabel\")}\n name=\"email\"\n type=\"email\"\n helpText={t(\n \"neetoEmailDelivery.sparkpost.setup.emailHelp\",\n { domain }\n )}\n placeholder={t(\n \"neetoEmailDelivery.sparkpost.setup.emailPlaceholder\"\n )}\n />\n </div>\n </CardLayout>\n );\n }}\n </Form>\n </PageContent>\n </PageWrapper>\n );\n};\n\nexport default SparkpostDomainSetup;\n"],"names":["getDomainFromEmail","email","trim","split","SparkpostDomainSetup","_ref","ownerId","alreadyVerifiedRoute","verifyRoute","onCancelRoute","canManageIntegrations","_useTranslation","useTranslation","t","history","useHistory","_useSparkpostDomain","useSparkpostDomain","onCreateDomain","isCreating","handleSubmit","values","_ref2","setFieldError","response","alreadyVerified","push","domain","buildUrl","error","_error$response","errorMessage","data","handleCancel","_jsx","PageWrapper","children","PageContent","Form","className","formikProps","initialValues","validationSchema","VALIDATION_SCHEMA","onSubmit","_ref3","CardLayout","title","String","actionBlock","ActionBlock","cancelButtonProps","onClick","isSubmitting","submitButtonProps","label","description","_jsxs","Callout","style","Input","required","unlimitedChars","name","type","helpText","placeholder"],"mappings":"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"}