import React, { useState } from "react"; import ReactQuill from "react-quill"; import moment from "moment"; import Avatar from "../common/Avatar"; import { DirectoryRepository } from "../../repositories/DirectoryRepository"; import showToast from "../../services/toastService"; import { cacheData, getCachedData } from "../../slices/apiDataManager"; import ConfirmModal from "../common/ConfirmModal"; // Make sure path is correct import "../common/TextEditor/Editor.css"; import ProfileContactDirectory from "./ProfileContactDirectory"; import GlobalModel from "../common/GlobalModel"; const NoteCardDirectoryEditable = ({ noteItem, contactId, onNoteUpdate, onNoteDelete, }) => { const [editing, setEditing] = useState(false); const [editorValue, setEditorValue] = useState(noteItem.note); const [isLoading, setIsLoading] = useState(false); const [isDeleting, setIsDeleting] = useState(false); const [isRestoring, setIsRestoring] = useState(false); const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false); const [open_contact, setOpen_contact] = useState(null); const [isOpenModalNote, setIsOpenModalNote] = useState(false); const handleUpdateNote = async () => { try { setIsLoading(true); const payload = { id: noteItem.id, note: editorValue, contactId, }; const response = await DirectoryRepository.UpdateNote( noteItem.id, payload ); const cachedContactProfile = getCachedData("Contact Profile"); if (cachedContactProfile?.contactId === contactId) { const updatedCache = { ...cachedContactProfile, data: { ...cachedContactProfile.data, notes: cachedContactProfile.data.notes.map((note) => note.id === noteItem.id ? response.data : note ), }, }; cacheData("Contact Profile", updatedCache); } onNoteUpdate?.(response.data); setEditing(false); showToast("Note updated successfully", "success"); } catch (error) { showToast("Failed to update note", "error"); } finally { setIsLoading(false); } }; const suspendEmployee = async () => { try { setIsDeleting(true); await DirectoryRepository.DeleteNote(noteItem.id, false); onNoteDelete?.(noteItem.id); setIsDeleteModalOpen(false); showToast("Note deleted successfully", "success"); } catch (error) { showToast("Failed to delete note", "error"); } finally { setIsDeleting(false); } }; const contactProfile = (contactId) => { DirectoryRepository.GetContactProfile(contactId).then((res) => { setOpen_contact(res?.data); setIsOpenModalNote(true); }); }; const handleRestore = async () => { try { setIsRestoring(true); await DirectoryRepository.DeleteNote(noteItem.id, true); onNoteDelete?.(noteItem.id); showToast("Note restored successfully", "success"); } catch (error) { showToast("Failed to restore note", "error"); } finally { setIsRestoring(false); } }; return ( <> {isOpenModalNote && ( { setOpen_contact(null); setIsOpenModalNote(false); }} size="xl" > {open_contact && ( setIsOpenModalNote(false)} /> )} )}
{/* Header */}
contactProfile(noteItem.contactId)} > {noteItem?.contactName} {" "} ({noteItem?.organizationName})
by{" "} {" "} {noteItem?.createdBy?.firstName}{" "} {noteItem?.createdBy?.lastName}{" "}  {" "} on{" "} {moment .utc(noteItem?.createdAt) .add(5, "hours") .add(30, "minutes") .format("DD MMMM, YYYY [at] hh:mm A")}
{/* Action Icons */}
{noteItem.isActive ? ( <> setEditing(true)} title="Edit" > {!isDeleting ? ( setIsDeleteModalOpen(true)} title="Delete" > ) : (
)} ) : isRestoring ? ( ) : ( )}

{/* Editor or Content */} {editing ? ( <>
setEditing(false)} > Cancel {isLoading ? "Saving..." : "Submit"}
) : (
)}
{/* Delete Confirm Modal */} {isDeleteModalOpen && ( setIsDeleteModalOpen(false)} loading={isDeleting} paramData={noteItem} /> )} ); }; export default NoteCardDirectoryEditable;