@bigbinary/neeto-molecules 3.0.4 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,511 +0,0 @@
1
- import React__default, { useRef } from 'react';
2
- import Alert from '@bigbinary/neetoui/Alert';
3
- import { useTranslation, Trans } from 'react-i18next';
4
- import { useFormikContext, useField, Formik, Form } from 'formik';
5
- import { isNotEmpty, snakeToCamelCase, capitalize } from '@bigbinary/neeto-cist';
6
- import Label from '@bigbinary/neetoui/Label';
7
- import Pane from '@bigbinary/neetoui/Pane';
8
- import Typography from '@bigbinary/neetoui/Typography';
9
- import Button from '@bigbinary/neetoui/Button';
10
- import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
11
- import useHotkeys from '@bigbinary/neeto-hotkeys';
12
- import Check from '@bigbinary/neeto-icons/Check';
13
- import Input from '@bigbinary/neetoui/formik/Input';
14
- import { t } from 'i18next';
15
- import * as yup from 'yup';
16
- import { hyphenize, joinHyphenCase } from '@bigbinary/neeto-commons-frontend/utils/general';
17
- import Input$1 from '@bigbinary/neetoui/Input';
18
- import Callout from '@bigbinary/neetoui/Callout';
19
- import CopyToClipboardButton from './CopyToClipboardButton.js';
20
- import { SINGULAR } from '@bigbinary/neeto-commons-frontend/constants';
21
- import MoreDropdown from './MoreDropdown.js';
22
- import classnames from 'classnames';
23
- import Tag from '@bigbinary/neetoui/Tag';
24
- import _defineProperty from '@babel/runtime/helpers/defineProperty';
25
- import { useQuery } from '@tanstack/react-query';
26
- import useMutationWithInvalidation from '@bigbinary/neeto-commons-frontend/react-utils/useMutationWithInvalidation';
27
- import axios from 'axios';
28
-
29
- var DeleteAlert = function DeleteAlert(_ref) {
30
- var onClose = _ref.onClose,
31
- onSubmit = _ref.onSubmit,
32
- isOpen = _ref.isOpen,
33
- isSubmitting = _ref.isSubmitting,
34
- hostname = _ref.hostname;
35
- var _useTranslation = useTranslation(),
36
- t = _useTranslation.t;
37
- return /*#__PURE__*/React__default.createElement(Alert, {
38
- cancelButtonLabel: t("neetoMolecules.common.actions.cancel"),
39
- isOpen: isOpen,
40
- isSubmitting: isSubmitting,
41
- submitButtonLabel: t("neetoMolecules.common.actions.delete"),
42
- title: t("neetoMolecules.customDomain.delete"),
43
- message: /*#__PURE__*/React__default.createElement(Trans, {
44
- i18nKey: "neetoMolecules.customDomain.alertMessage",
45
- values: {
46
- hostname: hostname
47
- }
48
- }),
49
- onClose: onClose,
50
- onSubmit: onSubmit
51
- });
52
- };
53
-
54
- var HOSTNAME_REGEX = /^(https?:\/\/)?([a-zA-Z0-9][a-zA-Z0-9-]*\.)+[a-zA-Z]{2,}(\/\S*)?$/;
55
- var INITIAL_VALUES = {
56
- hostname: ""
57
- };
58
-
59
- var getCustomDomainValidationSchema = function getCustomDomainValidationSchema() {
60
- return yup.object().shape({
61
- hostname: yup.string().required(t("neetoMolecules.customDomain.formikValidation.required")).matches(HOSTNAME_REGEX, t("neetoMolecules.customDomain.formikValidation.valid"))
62
- });
63
- };
64
- var mergeRefs = function mergeRefs() {
65
- for (var _len = arguments.length, refs = new Array(_len), _key = 0; _key < _len; _key++) {
66
- refs[_key] = arguments[_key];
67
- }
68
- return function (node) {
69
- return refs.forEach(function (ref) {
70
- return typeof ref === "function" ? ref(node) : ref.current = node;
71
- });
72
- };
73
- };
74
-
75
- var DomainEntryField = function DomainEntryField(_ref) {
76
- var onSubmit = _ref.onSubmit,
77
- customDomain = _ref.customDomain,
78
- initialFocusRef = _ref.initialFocusRef,
79
- dirty = _ref.dirty,
80
- isCreating = _ref.isCreating,
81
- name = _ref.name;
82
- var _useTranslation = useTranslation(),
83
- t = _useTranslation.t;
84
- var _useFormikContext = useFormikContext(),
85
- values = _useFormikContext.values;
86
- var _useField = useField(name),
87
- _useField2 = _slicedToArray(_useField, 3),
88
- _useField2$ = _useField2[1],
89
- error = _useField2$.error,
90
- touched = _useField2$.touched,
91
- setTouched = _useField2[2].setTouched;
92
- var handleSubmit = function handleSubmit() {
93
- if (error) {
94
- setTouched(true);
95
- return;
96
- }
97
- onSubmit(values);
98
- };
99
- var inputRef = useHotkeys("command+enter", handleSubmit, {
100
- mode: "scoped"
101
- });
102
- return /*#__PURE__*/React__default.createElement("div", {
103
- className: "flex items-start gap-2"
104
- }, /*#__PURE__*/React__default.createElement(Input, {
105
- name: name,
106
- "data-cy": "custom-domain-input-field",
107
- disabled: isNotEmpty(customDomain),
108
- error: touched && error,
109
- placeholder: t("neetoMolecules.customDomain.placeholder"),
110
- ref: mergeRefs(inputRef, initialFocusRef)
111
- }), !isNotEmpty(customDomain) && /*#__PURE__*/React__default.createElement(Button, {
112
- "data-cy": "submit-custom-domain-button",
113
- "data-testid": "submit-custom-domain-button",
114
- disabled: !dirty || isCreating,
115
- icon: Check,
116
- loading: isCreating,
117
- style: "primary",
118
- type: "submit"
119
- }));
120
- };
121
-
122
- var DOMAIN_QUERY_KEY = "custom-domain";
123
- var HELP_DOC_URL = "https://help.".concat(globalProps.appName.toLowerCase(), ".com/articles/custom-domains");
124
-
125
- var TagBlock = function TagBlock(_ref) {
126
- var status = _ref.status,
127
- _ref$stacked = _ref.stacked,
128
- stacked = _ref$stacked === void 0 ? false : _ref$stacked;
129
- var _useTranslation = useTranslation(),
130
- t = _useTranslation.t;
131
- var isDomainValidated = status === "active" || status === "pending_cname_validation";
132
- var camelCasedStatus = snakeToCamelCase(status || "");
133
- return /*#__PURE__*/React__default.createElement("div", {
134
- className: classnames("flex gap-2", {
135
- "flex-col items-start": stacked
136
- })
137
- }, status === "failed" ? /*#__PURE__*/React__default.createElement(Tag, {
138
- indicatorStyle: "danger",
139
- label: t("neetoMolecules.customDomain.status.".concat(camelCasedStatus)),
140
- style: "secondary"
141
- }) : /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(Tag, {
142
- "data-cy": "".concat(hyphenize(status), "-tag-container"),
143
- indicatorStyle: isDomainValidated ? "success" : "warning",
144
- style: "secondary",
145
- label: t("neetoMolecules.customDomain.status.domain.".concat(camelCasedStatus))
146
- }), isDomainValidated && /*#__PURE__*/React__default.createElement("div", {
147
- className: classnames("flex items-center justify-between gap-2", {
148
- "w-full": stacked
149
- })
150
- }, /*#__PURE__*/React__default.createElement(Tag, {
151
- "data-cy": "".concat(hyphenize(status), "-tag-container"),
152
- indicatorStyle: status === "active" ? "success" : "warning",
153
- style: "secondary",
154
- label: t("neetoMolecules.customDomain.status.cname.".concat(camelCasedStatus))
155
- }))));
156
- };
157
- var TagBlock$1 = /*#__PURE__*/React__default.memo(TagBlock);
158
-
159
- var renderColumnData = function renderColumnData(enableManagePane, enableDeleteAlert) {
160
- return [{
161
- title: t("neetoMolecules.customDomain.customDomain", SINGULAR),
162
- dataIndex: "hostname",
163
- key: "hostname",
164
- width: "60%",
165
- render: function render(hostName, customDomain) {
166
- return /*#__PURE__*/React__default.createElement("div", {
167
- className: "flex items-center justify-between gap-x-3"
168
- }, /*#__PURE__*/React__default.createElement(Button, {
169
- "data-cy": "hostname-button",
170
- label: hostName,
171
- style: "link",
172
- onClick: function onClick() {
173
- return enableManagePane(customDomain);
174
- }
175
- }), /*#__PURE__*/React__default.createElement(MoreDropdown, {
176
- dropdownButtonProps: {
177
- "data-testid": "nui-dropdown-icon-".concat(customDomain.id)
178
- },
179
- dropdownProps: {
180
- position: "bottom-end",
181
- strategy: "fixed",
182
- autoWidth: true
183
- },
184
- menuItems: [{
185
- label: t("neetoMolecules.common.actions.edit"),
186
- onClick: function onClick() {
187
- return enableManagePane(customDomain);
188
- },
189
- key: "edit-custom-domain-button"
190
- }, {
191
- label: t("neetoMolecules.common.actions.delete"),
192
- onClick: function onClick() {
193
- return enableDeleteAlert(customDomain);
194
- },
195
- key: "delete-custom-domain"
196
- }]
197
- }));
198
- }
199
- }, {
200
- title: t("neetoMolecules.common.status"),
201
- dataIndex: "status",
202
- key: "status",
203
- render: function render(status) {
204
- return /*#__PURE__*/React__default.createElement(TagBlock$1, {
205
- status: status
206
- });
207
- },
208
- width: "40%"
209
- }];
210
- };
211
- var recordData = function recordData(customDomain) {
212
- var status = customDomain.status,
213
- hostname = customDomain.hostname,
214
- dnsTarget = customDomain.dnsTarget,
215
- cnameValidationParams = customDomain.cnameValidationParams;
216
- var isDomainValidated = status === "active" || status === "pending_cname_validation";
217
- var recordName = isDomainValidated ? hostname : cnameValidationParams === null || cnameValidationParams === void 0 ? void 0 : cnameValidationParams.name;
218
- var recordValue = isDomainValidated ? dnsTarget : cnameValidationParams === null || cnameValidationParams === void 0 ? void 0 : cnameValidationParams.value;
219
- var recordType = isDomainValidated ? t("neetoMolecules.customDomain.cname") : t("neetoMolecules.customDomain.domainValidationCname");
220
- var recordDescription = isDomainValidated ? t("neetoMolecules.customDomain.validation.desc", {
221
- record: recordType
222
- }) : t("neetoMolecules.customDomain.validation.desc", {
223
- record: recordType,
224
- proxyMessage: t("neetoMolecules.customDomain.validation.proxyMessage")
225
- });
226
- var recordNameLabel = t("neetoMolecules.customDomain.validation.record", {
227
- record: recordType,
228
- type: t("neetoMolecules.common.name")
229
- });
230
- var recordValueLabel = t("neetoMolecules.customDomain.validation.record", {
231
- record: recordType,
232
- type: t("neetoMolecules.common.value")
233
- });
234
- return {
235
- recordName: recordName,
236
- recordValue: recordValue,
237
- recordDescription: recordDescription,
238
- recordNameLabel: recordNameLabel,
239
- recordValueLabel: recordValueLabel
240
- };
241
- };
242
-
243
- var Record = function Record(_ref) {
244
- var customDomain = _ref.customDomain;
245
- var _recordData = recordData(customDomain),
246
- recordName = _recordData.recordName,
247
- recordValue = _recordData.recordValue,
248
- recordDescription = _recordData.recordDescription,
249
- recordNameLabel = _recordData.recordNameLabel,
250
- recordValueLabel = _recordData.recordValueLabel;
251
- return /*#__PURE__*/React__default.createElement("div", {
252
- className: "mt-6 grid gap-4"
253
- }, customDomain.status !== "active" && /*#__PURE__*/React__default.createElement(Callout, {
254
- style: "info"
255
- }, /*#__PURE__*/React__default.createElement("div", {
256
- className: "flex flex-col space-y-2"
257
- }, /*#__PURE__*/React__default.createElement("p", null, recordDescription), /*#__PURE__*/React__default.createElement(Button, {
258
- "data-cy": "custom-domain-help-doc-button",
259
- href: HELP_DOC_URL,
260
- label: "Read help doc",
261
- style: "link",
262
- target: "#"
263
- }))), /*#__PURE__*/React__default.createElement(Input$1, {
264
- disabled: true,
265
- "data-cy": joinHyphenCase(recordNameLabel),
266
- label: capitalize(recordNameLabel),
267
- value: recordName,
268
- suffix: /*#__PURE__*/React__default.createElement(CopyToClipboardButton, {
269
- size: "small",
270
- style: "text",
271
- value: recordName
272
- })
273
- }), /*#__PURE__*/React__default.createElement(Input$1, {
274
- disabled: true,
275
- "data-cy": joinHyphenCase(recordValueLabel),
276
- label: capitalize(recordValueLabel),
277
- value: recordValue,
278
- suffix: /*#__PURE__*/React__default.createElement(CopyToClipboardButton, {
279
- size: "small",
280
- style: "text",
281
- value: recordValue
282
- })
283
- }));
284
- };
285
- var Record$1 = /*#__PURE__*/React__default.memo(Record);
286
-
287
- var StatusInfo = function StatusInfo() {
288
- return /*#__PURE__*/React__default.createElement("div", {
289
- className: "space-y-6"
290
- }, /*#__PURE__*/React__default.createElement("div", {
291
- className: "neeto-ui-rounded neeto-ui-bg-gray-100 neeto-ui-text-gray-700 space-y-3 p-4"
292
- }, /*#__PURE__*/React__default.createElement(Trans, {
293
- i18nKey: "neetoMolecules.customDomain.messageBlock.dnsStatus",
294
- components: {
295
- Link: /*#__PURE__*/React__default.createElement("a", {
296
- className: "neeto-ui-text-primary-800",
297
- href: HELP_DOC_URL,
298
- rel: "noreferrer",
299
- target: "_blank"
300
- })
301
- }
302
- })));
303
- };
304
- var StatusInfo$1 = /*#__PURE__*/React__default.memo(StatusInfo);
305
-
306
- var getUrlwithId = function getUrlwithId(url, id) {
307
- return id ? "".concat(url, "/").concat(id) : url;
308
- };
309
- var fetchCustomDomains = function fetchCustomDomains(_ref) {
310
- var url = _ref.url,
311
- params = _ref.params;
312
- return axios.get(url, {
313
- params: params
314
- });
315
- };
316
- var updateCustomDomain = function updateCustomDomain(url, id) {
317
- return axios.patch(getUrlwithId(url, id));
318
- };
319
- var createCustomDomain = function createCustomDomain(url, payload) {
320
- return axios.post(url, payload);
321
- };
322
- var deleteCustomDomain = function deleteCustomDomain(url, id) {
323
- return axios["delete"](getUrlwithId(url, id));
324
- };
325
- var validateDomain = function validateDomain(url, id) {
326
- return axios.patch("".concat(getUrlwithId(url, id), "/validate_domain"));
327
- };
328
- var validateCname = function validateCname(url, id) {
329
- return axios.patch("".concat(getUrlwithId(url, id), "/validate_cname"));
330
- };
331
- var customDomainApi = {
332
- createCustomDomain: createCustomDomain,
333
- deleteCustomDomain: deleteCustomDomain,
334
- validateDomain: validateDomain,
335
- fetchCustomDomains: fetchCustomDomains,
336
- validateCname: validateCname,
337
- updateCustomDomain: updateCustomDomain
338
- };
339
-
340
- 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; }
341
- 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; }
342
- var useCreateCustomDomain = function useCreateCustomDomain(url) {
343
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
344
- return useMutationWithInvalidation(function (payload) {
345
- return customDomainApi.createCustomDomain(url, payload);
346
- }, _objectSpread({
347
- keysToInvalidate: [[DOMAIN_QUERY_KEY]]
348
- }, options));
349
- };
350
- var useDeleteCustomDomain = function useDeleteCustomDomain(url) {
351
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
352
- return useMutationWithInvalidation(function (id) {
353
- return customDomainApi.deleteCustomDomain(url, id);
354
- }, _objectSpread({
355
- keysToInvalidate: [[DOMAIN_QUERY_KEY]]
356
- }, options));
357
- };
358
- var useFetchCustomDomains = function useFetchCustomDomains(params) {
359
- return useQuery({
360
- queryKey: [DOMAIN_QUERY_KEY, _objectSpread({}, params)],
361
- queryFn: function queryFn() {
362
- return customDomainApi.fetchCustomDomains(params);
363
- }
364
- });
365
- };
366
- var useValidateDomain = function useValidateDomain(url) {
367
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
368
- return useMutationWithInvalidation(function (id) {
369
- return customDomainApi.validateDomain(url, id);
370
- }, _objectSpread({
371
- keysToInvalidate: [[DOMAIN_QUERY_KEY]]
372
- }, options));
373
- };
374
- var useValidateCname = function useValidateCname(url) {
375
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
376
- return useMutationWithInvalidation(function (id) {
377
- return customDomainApi.validateCname(url, id);
378
- }, _objectSpread({
379
- keysToInvalidate: [[DOMAIN_QUERY_KEY]]
380
- }, options));
381
- };
382
- var useUpdateCustomDomain = function useUpdateCustomDomain(url) {
383
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
384
- return useMutationWithInvalidation(function (id) {
385
- return customDomainApi.updateCustomDomain(url, id);
386
- }, _objectSpread({
387
- keysToInvalidate: [[DOMAIN_QUERY_KEY]]
388
- }, options));
389
- };
390
-
391
- var Manage = function Manage(_ref) {
392
- var isOpen = _ref.isOpen,
393
- onClose = _ref.onClose,
394
- customDomain = _ref.customDomain,
395
- setCustomDomain = _ref.setCustomDomain,
396
- url = _ref.url,
397
- hasOne = _ref.hasOne,
398
- onCreate = _ref.onCreate;
399
- var _useTranslation = useTranslation(),
400
- t = _useTranslation.t;
401
- var initialFocusRef = useRef(null);
402
- var customDomainId = hasOne ? null : customDomain === null || customDomain === void 0 ? void 0 : customDomain.id;
403
- var _useCreateCustomDomai = useCreateCustomDomain(url),
404
- createCustomDomain = _useCreateCustomDomai.mutate,
405
- isCreating = _useCreateCustomDomai.isPending;
406
- var _useValidateDomain = useValidateDomain(url),
407
- validateDomain = _useValidateDomain.mutate,
408
- isValidating = _useValidateDomain.isPending;
409
- var _useValidateCname = useValidateCname(url),
410
- validateCname = _useValidateCname.mutate,
411
- isCnameValidating = _useValidateCname.isPending;
412
- var _useUpdateCustomDomai = useUpdateCustomDomain(url),
413
- updateCustomDomain = _useUpdateCustomDomai.mutate,
414
- isUpdating = _useUpdateCustomDomai.isPending;
415
- var getHostname = function getHostname(url) {
416
- try {
417
- var parsedUrl = new URL(url);
418
- return parsedUrl.hostname;
419
- } catch (_unused) {
420
- return url;
421
- }
422
- };
423
- var handleSubmit = function handleSubmit(_ref2) {
424
- var hostname = _ref2.hostname;
425
- var parsedHostname = getHostname(hostname);
426
- var payload = {
427
- hostname: parsedHostname
428
- };
429
- createCustomDomain(payload, {
430
- onSuccess: function onSuccess(values) {
431
- setCustomDomain(values);
432
- onCreate === null || onCreate === void 0 ? void 0 : onCreate(values);
433
- }
434
- });
435
- };
436
- var handleValidateDomain = function handleValidateDomain() {
437
- return validateDomain(customDomainId, {
438
- onSuccess: function onSuccess(values) {
439
- return setCustomDomain(values);
440
- }
441
- });
442
- };
443
- var handleValidateCname = function handleValidateCname() {
444
- validateCname(customDomainId, {
445
- onSuccess: function onSuccess(data) {
446
- return setCustomDomain(data);
447
- }
448
- });
449
- };
450
- var handleUpdateCname = function handleUpdateCname() {
451
- updateCustomDomain(customDomainId, {
452
- onSuccess: function onSuccess(data) {
453
- return setCustomDomain(data);
454
- }
455
- });
456
- };
457
- return /*#__PURE__*/React__default.createElement(Pane, {
458
- initialFocusRef: initialFocusRef,
459
- isOpen: isOpen,
460
- onClose: onClose
461
- }, /*#__PURE__*/React__default.createElement(Formik, {
462
- enableReinitialize: true,
463
- initialValues: customDomain || INITIAL_VALUES,
464
- validationSchema: getCustomDomainValidationSchema(),
465
- onSubmit: handleSubmit
466
- }, function (_ref3) {
467
- var dirty = _ref3.dirty;
468
- return /*#__PURE__*/React__default.createElement(Form, null, /*#__PURE__*/React__default.createElement(Pane.Header, null, /*#__PURE__*/React__default.createElement(Typography, {
469
- "data-cy": "add-custom-domain-pane-heading",
470
- style: "h2",
471
- weight: "semibold"
472
- }, isNotEmpty(customDomain) ? t("neetoMolecules.customDomain.edit") : t("neetoMolecules.customDomain.addNew"))), /*#__PURE__*/React__default.createElement(Pane.Body, {
473
- hasFooter: false
474
- }, /*#__PURE__*/React__default.createElement("div", {
475
- className: "w-full space-y-6"
476
- }, isNotEmpty(customDomain) && /*#__PURE__*/React__default.createElement(TagBlock$1, {
477
- handleValidateCname: handleValidateCname,
478
- stacked: true,
479
- isCnameRecordsAdded: customDomain.addedCnameAt,
480
- status: customDomain.status
481
- }), /*#__PURE__*/React__default.createElement("div", {
482
- className: "space-y-2"
483
- }, /*#__PURE__*/React__default.createElement(Label, {
484
- required: true,
485
- htmlFor: "hostname"
486
- }, t("neetoMolecules.customDomain.label")), /*#__PURE__*/React__default.createElement(DomainEntryField, {
487
- customDomain: customDomain,
488
- dirty: dirty,
489
- initialFocusRef: initialFocusRef,
490
- isCreating: isCreating,
491
- name: "hostname",
492
- onSubmit: handleSubmit
493
- })), isNotEmpty(customDomain) && /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(Record$1, {
494
- customDomain: customDomain
495
- }), customDomain.status === "pending_domain_validation" && /*#__PURE__*/React__default.createElement(Button, {
496
- "data-cy": "validate-domain-button",
497
- disabled: isValidating,
498
- loading: isValidating,
499
- label: t("neetoMolecules.customDomain.validation.buttonLabel.domain"),
500
- onClick: handleValidateDomain
501
- }), customDomain.status === "pending_cname_validation" && /*#__PURE__*/React__default.createElement(Button, {
502
- "data-cy": "validate-cname-record-button",
503
- loading: isCnameValidating || isUpdating,
504
- label: t("neetoMolecules.customDomain.validation.buttonLabel.cnameAdded"),
505
- onClick: handleUpdateCname
506
- }), /*#__PURE__*/React__default.createElement(StatusInfo$1, null)))));
507
- }));
508
- };
509
-
510
- export { DeleteAlert as D, Manage as M, useDeleteCustomDomain as a, renderColumnData as r, useFetchCustomDomains as u };
511
- //# sourceMappingURL=index-49458a38.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-49458a38.js","sources":["../src/components/CustomDomainDashboard/DeleteAlert.jsx","../src/components/CustomDomainDashboard/Manage/constants.js","../src/components/CustomDomainDashboard/Manage/utils.js","../src/components/CustomDomainDashboard/Manage/DomainEntryField.jsx","../src/components/CustomDomainDashboard/constants.js","../src/components/CustomDomainDashboard/Manage/TagBlock.jsx","../src/components/CustomDomainDashboard/utils.jsx","../src/components/CustomDomainDashboard/Manage/Record.jsx","../src/components/CustomDomainDashboard/Manage/StatusInfo.jsx","../src/components/CustomDomainDashboard/api.js","../src/components/CustomDomainDashboard/useCustomDomainApi.js","../src/components/CustomDomainDashboard/Manage/index.jsx"],"sourcesContent":["import React from \"react\";\n\nimport { Alert } from \"neetoui\";\nimport { useTranslation, Trans } from \"react-i18next\";\n\nconst DeleteAlert = ({ onClose, onSubmit, isOpen, isSubmitting, hostname }) => {\n const { t } = useTranslation();\n\n return (\n <Alert\n cancelButtonLabel={t(\"neetoMolecules.common.actions.cancel\")}\n isOpen={isOpen}\n isSubmitting={isSubmitting}\n submitButtonLabel={t(\"neetoMolecules.common.actions.delete\")}\n title={t(\"neetoMolecules.customDomain.delete\")}\n message={\n <Trans\n i18nKey=\"neetoMolecules.customDomain.alertMessage\"\n values={{ hostname }}\n />\n }\n onClose={onClose}\n onSubmit={onSubmit}\n />\n );\n};\n\nexport default DeleteAlert;\n","export const HOSTNAME_REGEX =\n /^(https?:\\/\\/)?([a-zA-Z0-9][a-zA-Z0-9-]*\\.)+[a-zA-Z]{2,}(\\/\\S*)?$/;\n\nexport const INITIAL_VALUES = { hostname: \"\" };\n","import { t } from \"i18next\";\nimport * as Yup from \"yup\";\n\nimport { HOSTNAME_REGEX } from \"./constants\";\n\nexport const getCustomDomainValidationSchema = () =>\n Yup.object().shape({\n hostname: Yup.string()\n .required(t(\"neetoMolecules.customDomain.formikValidation.required\"))\n .matches(\n HOSTNAME_REGEX,\n t(\"neetoMolecules.customDomain.formikValidation.valid\")\n ),\n });\n\nexport const mergeRefs =\n (...refs) =>\n node =>\n refs.forEach(ref =>\n typeof ref === \"function\" ? ref(node) : (ref.current = node)\n );\n","import React from \"react\";\n\nimport { useFormikContext, useField } from \"formik\";\nimport { isNotEmpty } from \"neetocist\";\nimport useHotKeys from \"neetohotkeys\";\nimport { Check } from \"neetoicons\";\nimport { Button } from \"neetoui\";\nimport { Input } from \"neetoui/formik\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { mergeRefs } from \"./utils\";\n\nconst DomainEntryField = ({\n onSubmit,\n customDomain,\n initialFocusRef,\n dirty,\n isCreating,\n name,\n}) => {\n const { t } = useTranslation();\n\n const { values } = useFormikContext();\n const [, { error, touched }, { setTouched }] = useField(name);\n\n const handleSubmit = () => {\n if (error) {\n setTouched(true);\n\n return;\n }\n\n onSubmit(values);\n };\n\n const inputRef = useHotKeys(\"command+enter\", handleSubmit, {\n mode: \"scoped\",\n });\n\n return (\n <div className=\"flex items-start gap-2\">\n <Input\n {...{ name }}\n data-cy=\"custom-domain-input-field\"\n disabled={isNotEmpty(customDomain)}\n error={touched && error}\n placeholder={t(\"neetoMolecules.customDomain.placeholder\")}\n ref={mergeRefs(inputRef, initialFocusRef)}\n />\n {!isNotEmpty(customDomain) && (\n <Button\n data-cy=\"submit-custom-domain-button\"\n data-testid=\"submit-custom-domain-button\"\n disabled={!dirty || isCreating}\n icon={Check}\n loading={isCreating}\n style=\"primary\"\n type=\"submit\"\n />\n )}\n </div>\n );\n};\n\nexport default DomainEntryField;\n","export const DOMAIN_QUERY_KEY = \"custom-domain\";\nexport const HELP_DOC_URL = `https://help.${globalProps.appName.toLowerCase()}.com/articles/custom-domains`;\n","import React from \"react\";\n\nimport classnames from \"classnames\";\nimport { snakeToCamelCase } from \"neetocist\";\nimport { hyphenize } from \"neetocommons/utils/general\";\nimport { Tag } from \"neetoui\";\nimport { useTranslation } from \"react-i18next\";\n\nconst TagBlock = ({ status, stacked = false }) => {\n const { t } = useTranslation();\n const isDomainValidated =\n status === \"active\" || status === \"pending_cname_validation\";\n const camelCasedStatus = snakeToCamelCase(status || \"\");\n\n return (\n <div\n className={classnames(\"flex gap-2\", {\n \"flex-col items-start\": stacked,\n })}\n >\n {status === \"failed\" ? (\n <Tag\n indicatorStyle=\"danger\"\n label={t(`neetoMolecules.customDomain.status.${camelCasedStatus}`)}\n style=\"secondary\"\n />\n ) : (\n <>\n <Tag\n data-cy={`${hyphenize(status)}-tag-container`}\n indicatorStyle={isDomainValidated ? \"success\" : \"warning\"}\n style=\"secondary\"\n label={t(\n `neetoMolecules.customDomain.status.domain.${camelCasedStatus}`\n )}\n />\n {isDomainValidated && (\n <div\n className={classnames(\"flex items-center justify-between gap-2\", {\n \"w-full\": stacked,\n })}\n >\n <Tag\n data-cy={`${hyphenize(status)}-tag-container`}\n indicatorStyle={status === \"active\" ? \"success\" : \"warning\"}\n style=\"secondary\"\n label={t(\n `neetoMolecules.customDomain.status.cname.${camelCasedStatus}`\n )}\n />\n </div>\n )}\n </>\n )}\n </div>\n );\n};\n\nexport default React.memo(TagBlock);\n","import React from \"react\";\n\nimport { t } from \"i18next\";\nimport { SINGULAR } from \"neetocommons/constants\";\nimport { Button } from \"neetoui\";\n\nimport MoreDropdown from \"components/MoreDropdown\";\n\nimport TagBlock from \"./Manage/TagBlock\";\n\nexport const renderColumnData = (enableManagePane, enableDeleteAlert) => [\n {\n title: t(\"neetoMolecules.customDomain.customDomain\", SINGULAR),\n dataIndex: \"hostname\",\n key: \"hostname\",\n width: \"60%\",\n render: (hostName, customDomain) => (\n <div className=\"flex items-center justify-between gap-x-3\">\n <Button\n data-cy=\"hostname-button\"\n label={hostName}\n style=\"link\"\n onClick={() => enableManagePane(customDomain)}\n />\n <MoreDropdown\n dropdownButtonProps={{\n \"data-testid\": `nui-dropdown-icon-${customDomain.id}`,\n }}\n dropdownProps={{\n position: \"bottom-end\",\n strategy: \"fixed\",\n autoWidth: true,\n }}\n menuItems={[\n {\n label: t(\"neetoMolecules.common.actions.edit\"),\n onClick: () => enableManagePane(customDomain),\n key: \"edit-custom-domain-button\",\n },\n {\n label: t(\"neetoMolecules.common.actions.delete\"),\n onClick: () => enableDeleteAlert(customDomain),\n key: \"delete-custom-domain\",\n },\n ]}\n />\n </div>\n ),\n },\n {\n title: t(\"neetoMolecules.common.status\"),\n dataIndex: \"status\",\n key: \"status\",\n render: status => <TagBlock {...{ status }} />,\n width: \"40%\",\n },\n];\n\nexport const recordData = customDomain => {\n const { status, hostname, dnsTarget, cnameValidationParams } = customDomain;\n\n const isDomainValidated =\n status === \"active\" || status === \"pending_cname_validation\";\n\n const recordName = isDomainValidated ? hostname : cnameValidationParams?.name;\n\n const recordValue = isDomainValidated\n ? dnsTarget\n : cnameValidationParams?.value;\n\n const recordType = isDomainValidated\n ? t(\"neetoMolecules.customDomain.cname\")\n : t(\"neetoMolecules.customDomain.domainValidationCname\");\n\n const recordDescription = isDomainValidated\n ? t(\"neetoMolecules.customDomain.validation.desc\", {\n record: recordType,\n })\n : t(\"neetoMolecules.customDomain.validation.desc\", {\n record: recordType,\n proxyMessage: t(\"neetoMolecules.customDomain.validation.proxyMessage\"),\n });\n\n const recordNameLabel = t(\"neetoMolecules.customDomain.validation.record\", {\n record: recordType,\n type: t(\"neetoMolecules.common.name\"),\n });\n\n const recordValueLabel = t(\"neetoMolecules.customDomain.validation.record\", {\n record: recordType,\n type: t(\"neetoMolecules.common.value\"),\n });\n\n return {\n recordName,\n recordValue,\n recordDescription,\n recordNameLabel,\n recordValueLabel,\n };\n};\n","import React from \"react\";\n\nimport { capitalize } from \"neetocist\";\nimport { joinHyphenCase } from \"neetocommons/utils/general\";\nimport { Input, Callout, Button } from \"neetoui\";\n\nimport CopyToClipboardButton from \"components/CopyToClipboardButton\";\n\nimport { HELP_DOC_URL } from \"../constants\";\nimport { recordData } from \"../utils\";\n\nconst Record = ({ customDomain }) => {\n const {\n recordName,\n recordValue,\n recordDescription,\n recordNameLabel,\n recordValueLabel,\n } = recordData(customDomain);\n\n return (\n <div className=\"mt-6 grid gap-4\">\n {customDomain.status !== \"active\" && (\n <Callout style=\"info\">\n <div className=\"flex flex-col space-y-2\">\n <p>{recordDescription}</p>\n <Button\n data-cy=\"custom-domain-help-doc-button\"\n href={HELP_DOC_URL}\n label=\"Read help doc\"\n style=\"link\"\n target=\"#\"\n />\n </div>\n </Callout>\n )}\n <Input\n disabled\n data-cy={joinHyphenCase(recordNameLabel)}\n label={capitalize(recordNameLabel)}\n value={recordName}\n suffix={\n <CopyToClipboardButton size=\"small\" style=\"text\" value={recordName} />\n }\n />\n <Input\n disabled\n data-cy={joinHyphenCase(recordValueLabel)}\n label={capitalize(recordValueLabel)}\n value={recordValue}\n suffix={\n <CopyToClipboardButton\n size=\"small\"\n style=\"text\"\n value={recordValue}\n />\n }\n />\n </div>\n );\n};\n\nexport default React.memo(Record);\n","import React from \"react\";\n\nimport { Trans } from \"react-i18next\";\n\nimport { HELP_DOC_URL } from \"../constants\";\n\nconst StatusInfo = () => (\n <div className=\"space-y-6\">\n <div className=\"neeto-ui-rounded neeto-ui-bg-gray-100 neeto-ui-text-gray-700 space-y-3 p-4\">\n <Trans\n i18nKey=\"neetoMolecules.customDomain.messageBlock.dnsStatus\"\n components={{\n Link: (\n <a\n className=\"neeto-ui-text-primary-800\"\n href={HELP_DOC_URL}\n rel=\"noreferrer\"\n target=\"_blank\"\n />\n ),\n }}\n />\n </div>\n </div>\n);\n\nexport default React.memo(StatusInfo);\n","import axios from \"axios\";\n\nconst getUrlwithId = (url, id) => (id ? `${url}/${id}` : url);\n\nconst fetchCustomDomains = ({ url, params }) => axios.get(url, { params });\n\nconst updateCustomDomain = (url, id) => axios.patch(getUrlwithId(url, id));\n\nconst createCustomDomain = (url, payload) => axios.post(url, payload);\nconst deleteCustomDomain = (url, id) => axios.delete(getUrlwithId(url, id));\n\nconst validateDomain = (url, id) =>\n axios.patch(`${getUrlwithId(url, id)}/validate_domain`);\n\nconst validateCname = (url, id) =>\n axios.patch(`${getUrlwithId(url, id)}/validate_cname`);\n\nconst customDomainApi = {\n createCustomDomain,\n deleteCustomDomain,\n validateDomain,\n fetchCustomDomains,\n validateCname,\n updateCustomDomain,\n};\n\nexport default customDomainApi;\n","import { useQuery } from \"@tanstack/react-query\";\nimport useMutationWithInvalidation from \"neetocommons/react-utils/useMutationWithInvalidation\";\n\nimport customDomainApi from \"./api\";\nimport { DOMAIN_QUERY_KEY } from \"./constants\";\n\nconst useCreateCustomDomain = (url, options = {}) =>\n useMutationWithInvalidation(\n payload => customDomainApi.createCustomDomain(url, payload),\n { keysToInvalidate: [[DOMAIN_QUERY_KEY]], ...options }\n );\n\nconst useDeleteCustomDomain = (url, options = {}) =>\n useMutationWithInvalidation(\n id => customDomainApi.deleteCustomDomain(url, id),\n { keysToInvalidate: [[DOMAIN_QUERY_KEY]], ...options }\n );\n\nconst useFetchCustomDomains = params =>\n useQuery({\n queryKey: [DOMAIN_QUERY_KEY, { ...params }],\n queryFn: () => customDomainApi.fetchCustomDomains(params),\n });\n\nconst useValidateDomain = (url, options = {}) =>\n useMutationWithInvalidation(id => customDomainApi.validateDomain(url, id), {\n keysToInvalidate: [[DOMAIN_QUERY_KEY]],\n ...options,\n });\n\nconst useValidateCname = (url, options = {}) =>\n useMutationWithInvalidation(id => customDomainApi.validateCname(url, id), {\n keysToInvalidate: [[DOMAIN_QUERY_KEY]],\n ...options,\n });\n\nconst useUpdateCustomDomain = (url, options = {}) =>\n useMutationWithInvalidation(\n id => customDomainApi.updateCustomDomain(url, id),\n { keysToInvalidate: [[DOMAIN_QUERY_KEY]], ...options }\n );\n\nexport {\n useCreateCustomDomain,\n useDeleteCustomDomain,\n useValidateDomain,\n useFetchCustomDomains,\n useValidateCname,\n useUpdateCustomDomain,\n};\n","import React, { useRef } from \"react\";\n\nimport { Form, Formik } from \"formik\";\nimport { isNotEmpty } from \"neetocist\";\nimport { Label, Pane, Typography, Button } from \"neetoui\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { INITIAL_VALUES } from \"./constants\";\nimport DomainEntryField from \"./DomainEntryField\";\nimport Record from \"./Record\";\nimport StatusInfo from \"./StatusInfo\";\nimport TagBlock from \"./TagBlock\";\nimport { getCustomDomainValidationSchema } from \"./utils\";\n\nimport {\n useCreateCustomDomain,\n useValidateDomain,\n useValidateCname,\n useUpdateCustomDomain,\n} from \"../useCustomDomainApi\";\n\nconst Manage = ({\n isOpen,\n onClose,\n customDomain,\n setCustomDomain,\n url,\n hasOne,\n onCreate,\n}) => {\n const { t } = useTranslation();\n const initialFocusRef = useRef(null);\n\n const customDomainId = hasOne ? null : customDomain?.id;\n\n const { mutate: createCustomDomain, isPending: isCreating } =\n useCreateCustomDomain(url);\n\n const { mutate: validateDomain, isPending: isValidating } =\n useValidateDomain(url);\n\n const { mutate: validateCname, isPending: isCnameValidating } =\n useValidateCname(url);\n\n const { mutate: updateCustomDomain, isPending: isUpdating } =\n useUpdateCustomDomain(url);\n\n const getHostname = url => {\n try {\n const parsedUrl = new URL(url);\n\n return parsedUrl.hostname;\n } catch {\n return url;\n }\n };\n\n const handleSubmit = ({ hostname }) => {\n const parsedHostname = getHostname(hostname);\n const payload = { hostname: parsedHostname };\n\n createCustomDomain(payload, {\n onSuccess: values => {\n setCustomDomain(values);\n onCreate?.(values);\n },\n });\n };\n\n const handleValidateDomain = () =>\n validateDomain(customDomainId, {\n onSuccess: values => setCustomDomain(values),\n });\n\n const handleValidateCname = () => {\n validateCname(customDomainId, {\n onSuccess: data => setCustomDomain(data),\n });\n };\n\n const handleUpdateCname = () => {\n updateCustomDomain(customDomainId, {\n onSuccess: data => setCustomDomain(data),\n });\n };\n\n return (\n <Pane {...{ initialFocusRef, isOpen, onClose }}>\n <Formik\n enableReinitialize\n initialValues={customDomain || INITIAL_VALUES}\n validationSchema={getCustomDomainValidationSchema()}\n onSubmit={handleSubmit}\n >\n {({ dirty }) => (\n <Form>\n <Pane.Header>\n <Typography\n data-cy=\"add-custom-domain-pane-heading\"\n style=\"h2\"\n weight=\"semibold\"\n >\n {isNotEmpty(customDomain)\n ? t(\"neetoMolecules.customDomain.edit\")\n : t(\"neetoMolecules.customDomain.addNew\")}\n </Typography>\n </Pane.Header>\n <Pane.Body hasFooter={false}>\n <div className=\"w-full space-y-6\">\n {isNotEmpty(customDomain) && (\n <TagBlock\n {...{ handleValidateCname }}\n stacked\n isCnameRecordsAdded={customDomain.addedCnameAt}\n status={customDomain.status}\n />\n )}\n <div className=\"space-y-2\">\n <Label required htmlFor=\"hostname\">\n {t(\"neetoMolecules.customDomain.label\")}\n </Label>\n <DomainEntryField\n {...{\n customDomain,\n dirty,\n initialFocusRef,\n isCreating,\n }}\n name=\"hostname\"\n onSubmit={handleSubmit}\n />\n </div>\n {isNotEmpty(customDomain) && (\n <>\n <Record {...{ customDomain }} />\n {customDomain.status === \"pending_domain_validation\" && (\n <Button\n data-cy=\"validate-domain-button\"\n disabled={isValidating}\n loading={isValidating}\n label={t(\n \"neetoMolecules.customDomain.validation.buttonLabel.domain\"\n )}\n onClick={handleValidateDomain}\n />\n )}\n {customDomain.status === \"pending_cname_validation\" && (\n <Button\n data-cy=\"validate-cname-record-button\"\n loading={isCnameValidating || isUpdating}\n label={t(\n \"neetoMolecules.customDomain.validation.buttonLabel.cnameAdded\"\n )}\n onClick={handleUpdateCname}\n />\n )}\n <StatusInfo />\n </>\n )}\n </div>\n </Pane.Body>\n </Form>\n )}\n </Formik>\n </Pane>\n );\n};\n\nexport default Manage;\n"],"names":["DeleteAlert","_ref","onClose","onSubmit","isOpen","isSubmitting","hostname","_useTranslation","useTranslation","t","React","createElement","Alert","cancelButtonLabel","submitButtonLabel","title","message","Trans","i18nKey","values","HOSTNAME_REGEX","INITIAL_VALUES","getCustomDomainValidationSchema","Yup","object","shape","string","required","matches","mergeRefs","_len","arguments","length","refs","Array","_key","node","forEach","ref","current","DomainEntryField","customDomain","initialFocusRef","dirty","isCreating","name","_useFormikContext","useFormikContext","_useField","useField","_useField2","_slicedToArray","_useField2$","error","touched","setTouched","handleSubmit","inputRef","useHotKeys","mode","className","Input","disabled","isNotEmpty","placeholder","Button","icon","Check","loading","style","type","DOMAIN_QUERY_KEY","HELP_DOC_URL","concat","globalProps","appName","toLowerCase","TagBlock","status","_ref$stacked","stacked","isDomainValidated","camelCasedStatus","snakeToCamelCase","classnames","Tag","indicatorStyle","label","Fragment","hyphenize","memo","renderColumnData","enableManagePane","enableDeleteAlert","SINGULAR","dataIndex","key","width","render","hostName","onClick","MoreDropdown","dropdownButtonProps","id","dropdownProps","position","strategy","autoWidth","menuItems","recordData","dnsTarget","cnameValidationParams","recordName","recordValue","value","recordType","recordDescription","record","proxyMessage","recordNameLabel","recordValueLabel","Record","_recordData","Callout","href","target","joinHyphenCase","capitalize","suffix","CopyToClipboardButton","size","StatusInfo","components","Link","rel","getUrlwithId","url","fetchCustomDomains","params","axios","get","updateCustomDomain","patch","createCustomDomain","payload","post","deleteCustomDomain","validateDomain","validateCname","customDomainApi","useCreateCustomDomain","options","undefined","useMutationWithInvalidation","_objectSpread","keysToInvalidate","useDeleteCustomDomain","useFetchCustomDomains","useQuery","queryKey","queryFn","useValidateDomain","useValidateCname","useUpdateCustomDomain","Manage","setCustomDomain","hasOne","onCreate","useRef","customDomainId","_useCreateCustomDomai","mutate","isPending","_useValidateDomain","isValidating","_useValidateCname","isCnameValidating","_useUpdateCustomDomai","isUpdating","getHostname","parsedUrl","URL","_unused","_ref2","parsedHostname","onSuccess","handleValidateDomain","handleValidateCname","data","handleUpdateCname","Pane","Formik","enableReinitialize","initialValues","validationSchema","_ref3","Form","Header","Typography","weight","Body","hasFooter","isCnameRecordsAdded","addedCnameAt","Label","htmlFor"],"mappings":"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"}