import { type Component, Show, createSignal, createEffect } from "solid-js"; import { formatDateWithLongWeekday } from "@/utils"; import type { DiaryEntry } from "@/api/diary"; interface DiaryModalProps { isOpen: boolean; onClose: () => void; entry?: DiaryEntry; date: Date; onSave: (rating: number, content: string) => Promise; onDelete?: () => Promise; isToday: boolean; } const DiaryModal: Component = (props) => { const [rating, setRating] = createSignal(props.entry?.dailyRating || 5); const [content, setContent] = createSignal(props.entry?.content || ""); const [isSaving, setIsSaving] = createSignal(false); const [isDeleting, setIsDeleting] = createSignal(false); const [error, setError] = createSignal(""); createEffect(() => { if (props.isOpen) { setRating(props.entry?.dailyRating || 5); setContent(props.entry?.content || ""); setError(""); } }); const isEditMode = () => !!props.entry; const handleSave = async () => { if (!content().trim()) { setError("Please enter some content"); return; } setIsSaving(true); setError(""); try { await props.onSave(rating(), content()); props.onClose(); } catch (err: any) { setError(err.message || "Failed to save diary entry"); } finally { setIsSaving(false); } }; const handleDelete = async () => { if (!confirm("Are you sure you want to delete this diary entry?")) { return; } setIsDeleting(true); setError(""); try { if (props.onDelete) { await props.onDelete(); props.onClose(); } } catch (err: any) { setError(err.message || "Failed to delete diary entry"); } finally { setIsDeleting(false); } }; return (
e.stopPropagation()} >

{isEditMode() ? "Edit" : "Create"} Diary Entry

{formatDateWithLongWeekday(props.date)}

{rating()}
(Rating cannot be changed for past entries)
} >
setRating(Number.parseInt(e.currentTarget.value)) } class="w-full h-2 bg-gray-200 rounded-lg appearance-none cursor-pointer" />
1 (Very Bad) {rating()} 10 (Excellent)