import React, { useEffect, useState } from "react"; import Editor from "../common/TextEditor/Editor"; import Avatar from "../common/Avatar"; import { useForm } from "react-hook-form"; import { z } from "zod"; import { zodResolver } from "@hookform/resolvers/zod"; import { DirectoryRepository } from "../../repositories/DirectoryRepository"; import moment from "moment"; import { cacheData, getCachedData } from "../../slices/apiDataManager"; import NoteCardDirectory from "./NoteCardDirectory"; import showToast from "../../services/toastService"; import { useContactNotes } from "../../hooks/useDirectory"; const schema = z.object({ note: z.string().min(1, { message: "Note is required" }), }); const NotesDirectory = ({ refetchProfile, isLoading, contactProfile, // This contactProfile now reliably includes firstName, middleName, lastName, and fullName setProfileContact, }) => { const [IsActive, setIsActive] = useState(true); const { contactNotes, refetch } = useContactNotes( contactProfile?.id, IsActive ); const [IsSubmitting, setIsSubmitting] = useState(false); const [showEditor, setShowEditor] = useState(false); const { register, handleSubmit, setValue, watch, formState: { errors }, } = useForm({ resolver: zodResolver(schema), defaultValues: { note: "", }, }); const noteValue = watch("note"); const handleEditorChange = (value) => { setValue("note", value, { shouldValidate: true }); }; const onSubmit = async (data) => { const newNote = { ...data, contactId: contactProfile?.id }; try { setIsSubmitting(true); const response = await DirectoryRepository.CreateNote(newNote); const createdNote = response.data; setProfileContact((prev) => ({ ...prev, notes: [...(prev.notes || []), createdNote], })); const cached_contactProfile = getCachedData("Contact Profile"); if ( cached_contactProfile && cached_contactProfile.contactId === contactProfile?.id ) { const updatedProfile = { ...cached_contactProfile.data, notes: [...(cached_contactProfile.data.notes || []), createdNote], }; cacheData("Contact Profile", { contactId: contactProfile?.id, data: updatedProfile, }); } setValue("note", ""); setIsSubmitting(false); showToast("Note added successfully!", "success"); setShowEditor(false); setIsActive(true); refetch(contactProfile?.id, true); } catch (error) { setIsSubmitting(false); const msg = error.response?.data?.message || error.message || "Error occurred during API calling"; showToast(msg, "error"); } }; const onCancel = () => { setValue("note", ""); setShowEditor(false); }; const handleSwitch = () => { setIsActive((prevIsActive) => { const newState = !prevIsActive; refetch(contactProfile?.id, newState); return newState; }); }; // Use the fullName from contactProfile, which now includes middle and last names if available const contactName = contactProfile?.fullName || contactProfile?.firstName || "Contact"; const noNotesMessage = `Be the first to share your insights! ${contactName} currently has no notes.`; const notesToDisplay = IsActive ? contactProfile?.notes || [] : contactNotes || []; const hasNotes = notesToDisplay.length > 0; return (
Notes :
Loading...
{" "}