import React, { useMemo } from 'react'; import { Controller, useForm } from 'react-hook-form'; import toast from 'react-hot-toast'; import { Domain } from 'gql-client'; import { Button, Dialog, DialogHeader, DialogBody, DialogFooter, Input, Typography, Select, Option, } from '@material-tailwind/react'; import { ProjectDetails, RepositoryDetails } from '../../../../types/project'; const DEFAULT_REDIRECT_OPTIONS = ['none']; interface EditDomainDialogProp { open: boolean; handleOpen: () => void; domain: Domain; repo: RepositoryDetails; project: ProjectDetails; } const EditDomainDialog = ({ open, handleOpen, domain, repo, project, }: EditDomainDialogProp) => { const getRedirectUrl = (domain: Domain) => { const domainArr = domain.name.split('www.'); let redirectUrl = ''; if (domain.name.startsWith('www.')) { redirectUrl = domainArr[1]; } else { redirectUrl = `www.${domainArr[0]}`; } return redirectUrl; }; const domains = project.deployments .filter((deployment: any) => { return deployment.domain != null; }) .map((deployment: any) => deployment.domain); const redirectOptions = useMemo(() => { const redirectUrl = getRedirectUrl(domain); return [...DEFAULT_REDIRECT_OPTIONS, redirectUrl]; }, [domain]); const isDisableDropdown = useMemo(() => { const redirectUrl = getRedirectUrl(domain); const domainRedirected = domains.find( (domain) => domain.name === redirectUrl, ); return domainRedirected?.isRedirectedto; }, [domain]); const { handleSubmit, register, control, watch, formState: { isValid, isDirty }, } = useForm({ defaultValues: { name: domain.name, branch: repo.branch[0], redirectedTo: !domain.isRedirected ? redirectOptions[0] : redirectOptions[1], }, }); return (
Edit domain
{ handleOpen(); toast.success(`Domain ${domain.name} has been updated`); })} > Domain name Redirect to ( )} /> {isDisableDropdown && (
^
Domain “{redirectOptions[1]}” redirects to this domain so you can not redirect this doman further.
)} Git branch repo.branch.includes(value), })} disabled={watch('redirectedTo') !== DEFAULT_REDIRECT_OPTIONS[0]} /> {!isValid && ( We couldn't find this branch in the connected Git repository. )}
); }; export default EditDomainDialog;