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: any) => { 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 };