import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faPaperPlane } from "@fortawesome/pro-regular-svg-icons"; import { useForm } from "react-hook-form"; import { useMutation, useQuery, useRouter } from "blitz"; import sendMessage from "../mutations/send-message"; import { Direction, Message, MessageStatus } from "../../../db"; import getConversationsQuery from "../queries/get-conversations"; import useCurrentCustomer from "../../core/hooks/use-current-customer"; import useCustomerPhoneNumber from "../../core/hooks/use-customer-phone-number"; type Form = { content: string; }; export default function NewMessageArea() { const router = useRouter(); const recipient = router.params.recipient; const { customer } = useCurrentCustomer(); const phoneNumber = useCustomerPhoneNumber(); const sendMessageMutation = useMutation(sendMessage)[0]; const { setQueryData: setConversationsQueryData, refetch: refetchConversations } = useQuery( getConversationsQuery, {} )[1]; const { register, handleSubmit, setValue, formState: { isSubmitting }, } = useForm
(); const onSubmit = handleSubmit(async ({ content }) => { if (isSubmitting) { return; } const id = uuidv4(); const message: Message = { id, customerId: customer!.id, twilioSid: id, from: phoneNumber!.phoneNumber, to: recipient, content: content, direction: Direction.Outbound, status: MessageStatus.Queued, sentAt: new Date(), }; await setConversationsQueryData( (conversations) => { const nextConversations = { ...conversations }; if (!nextConversations[recipient]) { nextConversations[recipient] = []; } nextConversations[recipient] = [...nextConversations[recipient]!, message]; return nextConversations; }, { refetch: false } ); setValue("content", ""); await sendMessageMutation({ to: recipient, content }); await refetchConversations({ cancelRefetch: true }); }); return (