import { // useMemo, useCallback, useEffect, } from 'react'; import { // Controller, useForm, SubmitHandler, } from 'react-hook-form'; import { Domain } from 'gql-client'; import { // Select, // Option, Typography, } from '@snowballtools/material-tailwind-react-fork'; import { useGQLClient } from 'context/GQLClientContext'; import { Modal } from 'components/shared/Modal'; import { Button } from 'components/shared/Button'; import { Input } from 'components/shared/Input'; import { useToast } from 'components/shared/Toast'; // const DEFAULT_REDIRECT_OPTIONS = ['none']; interface EditDomainDialogProp { domains: Domain[]; open: boolean; handleOpen: () => void; domain: Domain; branches: string[]; onUpdate: () => Promise; } type EditDomainValues = { name: string; branch: string; // redirectedTo: string; }; const EditDomainDialog = ({ domains, open, handleOpen, domain, branches, onUpdate, }: EditDomainDialogProp) => { const client = useGQLClient(); const { toast, dismiss } = useToast(); // const getRedirectUrl = (domain: Domain) => { // const redirectDomain = domain.redirectTo; // if (redirectDomain !== null) { // return redirectDomain?.name; // } else { // return 'none'; // } // }; // const redirectOptions = useMemo(() => { // const domainNames = domains // .filter((domainData) => domainData.id !== domain.id) // .map((domain) => domain.name); // return ['none', ...domainNames]; // }, [domain, domains]); // const domainRedirectedFrom = useMemo(() => { // return domains.find( // (domainData) => domainData.redirectTo?.id === domain.id, // ); // }, [domains, domain]); // const isDisableDropdown = useMemo(() => { // return domainRedirectedFrom !== undefined; // }, [domain, domains]); const { handleSubmit, register, // control, // watch, reset, formState: { isValid, isDirty }, } = useForm({ defaultValues: { name: domain.name, branch: domain.branch, // redirectedTo: getRedirectUrl(domain), }, }); const updateDomainHandler: SubmitHandler = useCallback( async (data) => { // const domainRedirectTo = domains.find( // (domainData) => data.redirectedTo === domainData.name, // ); const updates = { name: data.name ? data.name : domain.name, branch: data.branch ? data.branch : domain.branch, // redirectToId: domainRedirectTo ? domainRedirectTo.id : null, }; const { updateDomain } = await client.updateDomain(domain.id, updates); if (updateDomain) { await onUpdate(); toast({ id: 'domain_id_updated', title: `Domain ${domain.name} has been updated`, variant: 'success', onDismiss: dismiss, }); } else { reset(); toast({ id: 'domain_id_error_update', title: `Error updating domain ${domain.name}`, variant: 'error', onDismiss: dismiss, }); } handleOpen(); }, [client, domains, domain], ); useEffect(() => { reset({ name: domain.name, branch: domain.branch, // redirectedTo: getRedirectUrl(domain), }); }, [domain]); return ( Edit domain
Domain name {/* Redirect to ( )} /> {isDisableDropdown && (
^
Domain “ {domainRedirectedFrom ? domainRedirectedFrom.name : ''}” redirects to this domain so you can not redirect this doman further.
)} */} Git branch Boolean(branches.length) ? branches.includes(value) : true, })} disabled={ !Boolean(branches.length) // || // watch('redirectedTo') !== DEFAULT_REDIRECT_OPTIONS[0] } /> {!isValid && ( We couldn't find this branch in the connected Git repository. )}
); }; export default EditDomainDialog;