import { useState } from "react"; import { Controller, useForm } from "react-hook-form"; import { faContactBook, faMagnifyingGlass, faPlus, faTrash } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { yupResolver } from "@hookform/resolvers/yup"; import * as yup from "yup"; import { Button, DeleteActionModal, EmailServiceSetupModal, EmptyState, FormControl, IconButton, Input, Modal, ModalContent, Table, TableContainer, TableSkeleton, TBody, Td, Th, THead, Tr } from "@app/components/v2"; import { usePopUp } from "@app/hooks"; import { useFetchServerStatus } from "@app/hooks/api/serverDetails"; import { IncidentContact } from "@app/hooks/api/types"; type Props = { isLoading?: boolean; contacts?: IncidentContact[]; onRemoveContact: (email: string) => Promise; onAddContact: (email: string) => Promise; }; const addContactFormSchema = yup.object({ email: yup.string().email().required().label("Email").trim() }); type TAddContactForm = yup.InferType; export const OrgIncidentContactsTable = ({ contacts = [], onAddContact, onRemoveContact, isLoading }: Props) => { const [searchContact, setSearchContact] = useState(""); const {data: serverDetails } = useFetchServerStatus() const { handlePopUpToggle, popUp, handlePopUpOpen, handlePopUpClose } = usePopUp([ "addContact", "removeContact", "setUpEmail" ] as const); const { control, handleSubmit, reset, formState: { isSubmitting } } = useForm({ resolver: yupResolver(addContactFormSchema) }); const onAddIncidentContact = ({ email }: TAddContactForm) => { onAddContact(email); handlePopUpClose("addContact"); reset(); }; const onRemoveIncidentContact = async () => { const incidentContactEmail = (popUp?.removeContact?.data as { email: string })?.email; await onRemoveContact(incidentContactEmail); handlePopUpClose("removeContact"); }; const filteredContacts = contacts.filter(({ email }) => email.toLocaleLowerCase().includes(searchContact) ); return (
setSearchContact(e.target.value)} leftIcon={} placeholder="Search incident contact by email..." />
{isLoading && } {filteredContacts?.map(({ email }) => ( ))}
Email
{email} handlePopUpOpen("removeContact", { email })} >
{filteredContacts?.length === 0 && !isLoading && ( )}
{ handlePopUpToggle("addContact", isOpen); reset(); }} >
( )} />
handlePopUpToggle("removeContact", isOpen)} onDeleteApproved={onRemoveIncidentContact} /> handlePopUpToggle("setUpEmail", isOpen)} />
); };