import { use, useEffect, useState } from "react"; import { PiDotsThreeOutlineVerticalFill } from "react-icons/pi"; import { Bounce, toast } from "react-toastify"; import api from "../../config/api"; import { IoMdAdd } from "react-icons/io"; import { useNavigate } from "react-router-dom"; import { useSelector } from "react-redux"; import { FaSpinner } from "react-icons/fa"; import LoaderUi from "../../helper/LoaderUi"; const Templates = () => { const [activeFilter, setActiveFilter] = useState("All"); const [loading, setLoading] = useState(false) const [templates, setTemplates] = useState([]) const accountDetails = useSelector((state: any) => state.user.account); const accountId = accountDetails.id || ""; const [showMenu, setShowMenu] = useState(null); const [activeAccountId, setActiveAccountId] = useState( JSON.parse(sessionStorage.getItem('activeAccountId') || 'null') ); const navigate = useNavigate(); const filters = ["All", "My Templates", "Shared"]; const handleAddTemplate = async () => { console.log("handleAddTemplate called"); try { const res = await api.post(`/api/accounts/${activeAccountId}/templates`); navigate(`/process-step-one/${activeAccountId}/template/${res.data}`) } catch (error) { console.log(error) } } const getAllTemplates = async () => { setLoading(true) try { let res = await api.get(`/api/accounts/${activeAccountId}/templates`) let templateData = res?.data setTemplates(templateData) } catch (error) { console.log(error) } finally { setLoading(false) } } useEffect(() => { if (activeAccountId) { getAllTemplates() } }, [activeAccountId]) const formatDate = (timestamp: number) => { return new Date(timestamp * 1000).toLocaleString(); }; const handleUseClick = async (item: any) => { try { const payload = { name: item?.name ?? "", subject: item.subject, message: item.message, description: item.description, expireAfter: item.expireAfter, enableIdStamping: item.enableIdStamping, allowViewAudit: item.allowViewAudit, allowReassign: item.allowReassign, enableSignatureIdStamping: item.enableSignatureIdStamping, templateId: item.id, }; let res = await api.post(`/api/accounts/${activeAccountId}/transactions`, payload) console.log("handleUseClick", res.data) // /process-step-one/:accountId/:transactionId navigate(`/process-step-one/${activeAccountId}/${res?.data?.id}`); } catch (error) { console.log(error) } } return (
{/* Header */}
{/* Filter as pill buttons */}
{filters.map((filter) => ( ))}
{/* Table */}
{loading ? ( ) : templates.length > 0 ? ( {templates.map((item, index) => { return ( {/* Dropdown Trigger + Tooltip */} ); })} ) : ( )}
{/* */}
Name Created Last Updated Use Action
{/* */}
{item.name || 'Dummy'} {formatDate(item.createdAt)} {formatDate(item.lastModifiedAt)} handleUseClick(item)}>Use {showMenu === index && (
{ // Ensure it only closes if focus truly leaves the container if (!e.currentTarget.contains(e.relatedTarget)) { setShowMenu(null); } }} >
)}
No templates found.
); }; export default Templates;