import React, { useState } from 'react'; import toast from 'react-hot-toast'; import { Chip, Typography, Menu, MenuHandler, MenuList, MenuItem, Card, } from '@material-tailwind/react'; import { ProjectDetails, RepositoryDetails } from '../../../../types/project'; import ConfirmDialog from '../../../shared/ConfirmDialog'; import EditDomainDialog from './EditDomainDialog'; import { Domain, DomainStatus } from 'gql-client'; enum RefreshStatus { IDLE, CHECKING, CHECK_SUCCESS, CHECK_FAIL, } interface DomainCardProps { domain: Domain; repo: RepositoryDetails; project: ProjectDetails; } const CHECK_FAIL_TIMEOUT = 5000; // In milliseconds // TODO: Get domain record const DOMAIN_RECORD = { type: 'A', name: '@', value: '56.49.19.21', }; const DomainCard = ({ domain, repo, project }: DomainCardProps) => { const [refreshStatus, SetRefreshStatus] = useState(RefreshStatus.IDLE); const [deleteDialogOpen, setDeleteDialogOpen] = useState(false); const [editDialogOpen, setEditDialogOpen] = useState(false); return ( <>
^ {domain.name} ^} />
{ SetRefreshStatus(RefreshStatus.CHECKING); setTimeout(() => { SetRefreshStatus(RefreshStatus.CHECK_FAIL); }, CHECK_FAIL_TIMEOUT); }} > {refreshStatus === RefreshStatus.CHECKING ? 'L' : 'R'} { setEditDialogOpen((preVal) => !preVal); }} > ^ Edit domain setDeleteDialogOpen((preVal) => !preVal)} > ^ Delete domain
setDeleteDialogOpen((preVal) => !preVal)} open={deleteDialogOpen} confirmButtonTitle="Yes, Delete domain" handleConfirm={() => { setDeleteDialogOpen((preVal) => !preVal); toast.success(`Domain "${domain.name}" has been deleted`); }} color="red" > Once deleted, the project{' '} {project.name} {' '} will not be accessible from the domain{' '} {domain.name}.
Production {domain.status === DomainStatus.Pending && ( {refreshStatus === RefreshStatus.IDLE ? ( ^ Add these records to your domain and refresh to check ) : refreshStatus === RefreshStatus.CHECKING ? ( ^ Checking records for {domain.name} ) : (
^
Failed to verify records. DNS propagation can take up to 48 hours. Please ensure you added the correct records and refresh.
)}
Type Name Value
{DOMAIN_RECORD.type} {DOMAIN_RECORD.name} {DOMAIN_RECORD.value}
)} { setEditDialogOpen((preVal) => !preVal); }} open={editDialogOpen} domain={domain} repo={repo} project={project} /> ); }; export default DomainCard;