import React, { useEffect, useState } from 'react'; import { FiEdit3, FiTrash2, FiPlus, FiMoreVertical } from 'react-icons/fi'; import AddSignatureModal from './AddSignatureModal'; import api from '../../../config/api'; import { Bounce, toast } from "react-toastify"; import { FaSpinner } from 'react-icons/fa'; interface Signature { id: string; email: string; signatureType: string; lastName: string; firstName: string font: string; initialsBlob: string; initialsStampedBlob: string; initialsHash: string; signatureHash: string; signatureBlob: string; signatureStampedBlob: string; default: boolean; signatureMimeType: string; initialsMimeType: string } const SignatureManager: React.FC = () => { const [loading, setLoading] = useState(false) const [signatures, setSignatures] = useState([]); const [activeDropdown, setActiveDropdown] = useState(null); const [showAddSignature, setShowAddSignature] = useState(false); const [editingSignature, setEditingSignature] = useState(null); const signatureOptions = [ { id: 1, name: 'print', initials: 'LA', style: 'print' }, { id: 2, name: 'cursive', initials: 'LA', style: 'cursive' }, { id: 3, name: 'script', initials: 'LA', style: 'script' }, { id: 4, name: 'elegant', initials: 'LA', style: 'elegant' }, { id: 5, name: 'modern', initials: 'LA', style: 'modern' }, { id: 6, name: 'classic', initials: 'LA', style: 'classic' }, ]; const getAllSignatures = async () => { setLoading(true) try { let res = await api.get("/api/v1/user/signatures") let signatureData = res?.data setSignatures(signatureData) } catch (error) { console.log("getAllSignatures", error) } finally { setLoading(false) } } useEffect(() => { getAllSignatures() }, []) const handleEdit = (id: string) => { let editSignature = signatures.find((item) => item.id == id); if (editSignature) { setEditingSignature(editSignature); setShowAddSignature(true); } setActiveDropdown(null); }; const handleDelete = async (id: string) => { if (!id) return; setLoading(true) try { let res = await api.delete(`/api/v1/user/signatures/${id}`) // toast.success("Signature Delete Successfull", { // position: "top-center", // autoClose: 500, // hideProgressBar: false, // closeOnClick: false, // pauseOnHover: true, // draggable: true, // progress: undefined, // theme: "light", // transition: Bounce, // }); await getAllSignatures(); } catch (error) { console.log("delete signature", error) } finally { setActiveDropdown(null); setLoading(false) } }; const toggleDropdown = (id: string) => { setActiveDropdown(activeDropdown == id ? null : id); }; const handleAddNew = () => { setEditingSignature(null); setShowAddSignature(true); }; const handleModalClose = () => { setShowAddSignature(false); setEditingSignature(null); }; const renderSignatureText = (type, font, firstName, lastName, mode = 'name') => { if (type != 'SELECT') return null; const selectedFont = signatureOptions.find(opt => opt.style == font); const fontClass = `${selectedFont?.style || 'print'}`; if (mode == 'initials') { const initials = `${(firstName?.[0] ?? '')}${(lastName?.[0] ?? '')}`.toUpperCase(); return (
{initials}
); } const fullName = `${firstName ?? ''} ${lastName ?? ''}`.trim(); return (
{fullName}
); }; return ( <> {loading ?

Loading...

:
<> {/* Header */}

Signatures

Add or update your name and signature styles.

{/* Table Card */}
{/* Table Header */}

Signature

Initial

Action

{/* Table Body */}
{signatures.map((signature, index) => (
{/* Signature Column */}
{/* Label */}
Signed by
{/* Signature Image or Name/Initials */}
{signature?.signatureType != 'SELECT' ? ( Signature ) : ( renderSignatureText(signature?.signatureType, signature?.font, signature?.firstName, signature?.lastName, 'name') )}
{/* Signature ID */}
{signature.signatureHash}
{/* Initial Column */}
{/* Label */}
Initial
{/* Signature Initials: Image or Generated Text */}
{signature?.signatureType != 'SELECT' ? ( Initials ) : ( renderSignatureText(signature?.signatureType, signature?.font, signature?.firstName, signature?.lastName, 'initials') )}
{/* Initial ID */}
{signature.signatureHash}
{/* Actions Column */}
))}
{/* Empty State (if no signatures) */} {signatures.length == 0 && (

No signatures yet

Create your first signature to get started.

)}
{/* Click outside to close dropdown */} {activeDropdown && (
setActiveDropdown(null)} /> )} {showAddSignature && ( )}
} ); }; export default SignatureManager;