From ee4c6a3a8ba6cea8831d05b5cba798bd5b795d0b Mon Sep 17 00:00:00 2001 From: Jamie Curnow Date: Tue, 14 Jun 2022 11:02:25 +1000 Subject: [PATCH] broken dns provider edit modal --- frontend/src/modals/DNSProviderEditModal.tsx | 229 +++++++++++++++++++ frontend/src/modals/index.ts | 1 + 2 files changed, 230 insertions(+) create mode 100644 frontend/src/modals/DNSProviderEditModal.tsx diff --git a/frontend/src/modals/DNSProviderEditModal.tsx b/frontend/src/modals/DNSProviderEditModal.tsx new file mode 100644 index 0000000..b19b99e --- /dev/null +++ b/frontend/src/modals/DNSProviderEditModal.tsx @@ -0,0 +1,229 @@ +import { useEffect, useState } from "react"; + +import { + Button, + Checkbox, + FormControl, + FormErrorMessage, + FormLabel, + Input, + Modal, + ModalOverlay, + ModalContent, + ModalHeader, + ModalCloseButton, + ModalBody, + ModalFooter, + Select, + Stack, + useToast, +} from "@chakra-ui/react"; +import { + DNSProvider, + DNSProvidersAcmesh, + DNSProvidersAcmeshField, +} from "api/npm"; +import { PrettyButton } from "components"; +import { Formik, Form, Field } from "formik"; +import { + useDNSProvider, + useSetDNSProvider, + useDNSProvidersAcmesh, +} from "hooks"; +import { intl } from "locale"; +import { validateString } from "modules/Validations"; + +interface DNSProviderEditModalProps { + editId: number; + isOpen: boolean; + onClose: () => void; +} +function DNSProviderEditModal({ + editId, + isOpen, + onClose, +}: DNSProviderEditModalProps) { + const toast = useToast(); + const { status, data } = useDNSProvider(editId); + const { mutate: setDNSProvider } = useSetDNSProvider(); + + const onSubmit = async ( + payload: DNSProvider, + { setErrors, setSubmitting }: any, + ) => { + // TODO: filter out the meta object and only include items that apply to the acmesh provider selected + + const showErr = (msg: string) => { + toast({ + description: intl.formatMessage({ + id: `error.${msg}`, + }), + status: "error", + position: "top", + duration: 3000, + isClosable: true, + }); + }; + + setDNSProvider(payload, { + onError: (err: any) => { + showErr(err.message); + }, + onSuccess: () => onClose(), + onSettled: () => setSubmitting(false), + }); + }; + + const renderInputType = ( + field: any, + f: DNSProvidersAcmeshField, + value: any, + ) => { + if (f.type === "bool") { + return ( + + {f.name} + + ); + } + + return ( + + ); + }; + + return ( + + + + {acmeshIsLoading ? ( + "loading" + ) : ( + + {({ isSubmitting, handleChange, values, setValues }) => ( +
+ + {intl.formatMessage({ id: "dns-provider.create" })} + + + + + + {({ field, form }: any) => ( + + + {intl.formatMessage({ + id: "dns-provider.name", + })} + + + + {form.errors.name} + + + )} + + + {({ field, form }: any) => ( + + + {intl.formatMessage({ + id: "dns-provider.acmesh-name", + })} + + + + {form.errors.acmeshName} + + + )} + + {acmeshItem !== "" ?
: null} + {getAcmeshItem(acmeshItem)?.fields.map((f) => { + const name = `meta[${f.metaKey}]`; + return ( + + {({ field, form }: any) => ( + + {f.type !== "bool" ? ( + {f.name} + ) : null} + {renderInputType( + field, + f, + values.meta[f.metaKey], + )} + + {form.errors[name]} + + + )} + + ); + })} +
+
+ + + {intl.formatMessage({ id: "form.save" })} + + + + + )} +
+ )} +
+
+ ); +} + +export { DNSProviderEditModal }; diff --git a/frontend/src/modals/index.ts b/frontend/src/modals/index.ts index 8748e5c..ac3ef9a 100644 --- a/frontend/src/modals/index.ts +++ b/frontend/src/modals/index.ts @@ -2,6 +2,7 @@ export * from "./CertificateAuthorityCreateModal"; export * from "./CertificateAuthorityEditModal"; export * from "./ChangePasswordModal"; export * from "./DNSProviderCreateModal"; +export * from "./DNSProviderEditModal"; export * from "./ProfileModal"; export * from "./SetPasswordModal"; export * from "./UserCreateModal";