From bac877171e109662e8fd1261fcd29801ab98b82e Mon Sep 17 00:00:00 2001 From: "Eng. Elias" Date: Thu, 29 Feb 2024 15:10:07 +0400 Subject: [PATCH] Update agent validation and action --- src/app/agents/page.tsx | 7 +- src/components/modals/agent_modal.tsx | 112 ++++++++++++++++++---- src/components/modals/new_agent_modal.tsx | 2 +- 3 files changed, 99 insertions(+), 22 deletions(-) diff --git a/src/app/agents/page.tsx b/src/app/agents/page.tsx index c46a593..36ecf9e 100644 --- a/src/app/agents/page.tsx +++ b/src/app/agents/page.tsx @@ -13,7 +13,7 @@ const AgentsPage = () => { const [showAgentModal, setShowAgentModal] = useState(false); const [showNewAgentModal, setShowNewAgentModal] = useState(false); - const [selectedAgent, setSelectedAgent] = useState(null); + const [selectedAgent, setSelectedAgent] = useState(); const { loading, error, data, refetch } = useQuery(GET_AGENTS); @@ -86,9 +86,12 @@ const AgentsPage = () => { ))} { + refetch(); + }} /> diff --git a/src/components/modals/agent_modal.tsx b/src/components/modals/agent_modal.tsx index 133f04d..a788eae 100644 --- a/src/components/modals/agent_modal.tsx +++ b/src/components/modals/agent_modal.tsx @@ -18,23 +18,62 @@ import { } from "tw-elements-react"; import TWFileInput from "../inputs/file"; import { selectTheme } from "@/data/consts"; -import { Switch } from "@material-tailwind/react"; +import { Button, Switch } from "@material-tailwind/react"; +import Swal from "sweetalert2"; +import withReactContent from "sweetalert2-react-content"; +import { UPDATE_AGENT } from "@/utils/graphql_queries"; +import { useMutation } from "@apollo/client"; export default function AgentModal(props: { - agent: Agent | null; + agent: Agent; showModal: boolean; setShowModal: Function; + onUpdateAgent: Function; }): JSX.Element { - const { agent, showModal, setShowModal } = props; + const { agent, showModal, setShowModal, onUpdateAgent = () => {} } = props; const [isEdit, setEdit] = useState(false); - const [tempAgent, setTempAgent] = useState(agent); + const [tempAgent, setTempAgent] = useState(agent); useEffect(() => { setTempAgent(agent); }, [agent]); + const [selectedImage, setSelectedImage] = useState< + string | ArrayBuffer | null + >(null); + + const handleImageChange = (event: React.ChangeEvent) => { + const file = event?.target?.files?.[0]; + const reader = new FileReader(); + + reader.onloadend = () => { + setSelectedImage(reader.result); + }; + + if (file) { + reader.readAsDataURL(file); + } + }; + + const [updateAgent] = useMutation(UPDATE_AGENT); + const [updateAgentLoading, setUpdateAgentLoading] = useState(false); + + const handleUpdateAgent = async (agentData: Agent) => { + setUpdateAgentLoading(true); + return updateAgent({ + variables: { + ...agentData, + id: Number.parseInt(agentData.id as string), + }, + }).finally(() => { + setUpdateAgentLoading(false); + }); + }; + + const ReactSwal = withReactContent(Swal); + return (
@@ -187,7 +226,18 @@ export default function AgentModal(props: { {isEdit ? ( <> - + + {selectedImage && ( + Agent Image + )} ) : ( {!isEdit && ( - + )} {isEdit && ( <> - + Cancel + - + Save Changes + )} diff --git a/src/components/modals/new_agent_modal.tsx b/src/components/modals/new_agent_modal.tsx index a2e79f9..0736a40 100644 --- a/src/components/modals/new_agent_modal.tsx +++ b/src/components/modals/new_agent_modal.tsx @@ -62,7 +62,7 @@ function NewAgentModal(props: { const [createAgent] = useMutation(CREATE_AGENT); const [createAgentLoading, setCreateAgentLoading] = useState(false); - const handleCreateAgent = (agentData: Agent) => { + const handleCreateAgent = async (agentData: Agent) => { setCreateAgentLoading(true); return createAgent({ variables: {