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 }) => (
+
+ )}
+
+ )}
+
+
+ );
+}
+
+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";