From c7c121e23d1643ab77fed09b0d559b480b9bbb4d Mon Sep 17 00:00:00 2001 From: Brian Nelson Date: Sun, 29 Jun 2025 10:07:01 -0400 Subject: [PATCH] added markdown notes for events --- README.md | 1 + app/(auth)/events/[eventId]/page.tsx | 1 - app/api/events/[eventId]/route.ts | 7 +- app/globals.css | 35 +++++- bun.lockb | Bin 185625 -> 231150 bytes components/EventInfoDisplay.tsx | 11 +- components/EventNotesEditor.tsx | 103 ++++++++++++++++++ components/icons/InfoIcon.tsx | 9 ++ lib/mutations.ts | 6 +- lib/queries.ts | 2 +- package.json | 5 +- .../migration.sql | 2 + prisma/schema.prisma | 1 + 13 files changed, 174 insertions(+), 9 deletions(-) create mode 100644 components/EventNotesEditor.tsx create mode 100644 components/icons/InfoIcon.tsx create mode 100644 prisma/migrations/20250629122552_add_notes_to_events/migration.sql diff --git a/README.md b/README.md index f172af4..a2415da 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,7 @@ My goal for this project is to be an all-in-one self hosted event planner for ma - Event type - Details - Location + - [x] Markdown supported notes - [x] Guest book (contact information) - [x] Ability to switch between table or card view - [x] Add Guests to events diff --git a/app/(auth)/events/[eventId]/page.tsx b/app/(auth)/events/[eventId]/page.tsx index afa29f5..272452c 100644 --- a/app/(auth)/events/[eventId]/page.tsx +++ b/app/(auth)/events/[eventId]/page.tsx @@ -1,6 +1,5 @@ /* eslint-disable @typescript-eslint/ban-ts-comment */ import EventInfoDisplay from '@/components/EventInfoDisplay' -import HeadingWithEdit from '@/components/HeadingWithEdit' import { queries } from '@/lib/queries' import React from 'react' diff --git a/app/api/events/[eventId]/route.ts b/app/api/events/[eventId]/route.ts index 647dcb0..cf85bda 100644 --- a/app/api/events/[eventId]/route.ts +++ b/app/api/events/[eventId]/route.ts @@ -13,7 +13,12 @@ export async function PATCH(req: NextRequest, { params }: { params: { eventId: s const body = await req.json(); try { - const updated = await mutations.updateEvent(eventId, body); + const updated = await mutations.updateEvent(eventId, { + name: body.name, + date: body.date, + location: body.location, + notes: body.notes, + }); return NextResponse.json(updated); } catch (error) { console.error('[PATCH EVENT]', error); diff --git a/app/globals.css b/app/globals.css index f51b3e3..edbd5e6 100644 --- a/app/globals.css +++ b/app/globals.css @@ -1,4 +1,5 @@ @import "tailwindcss"; +@plugin "@tailwindcss/typography"; @theme { --color-background: #fff5eb; @@ -75,4 +76,36 @@ .btn-primary{ @apply bg-brand-primary text-brand-background border-0 hover:bg-brand-primary-500 transition-colors duration-300 -} \ No newline at end of file +} + +.prose h1 { + @apply text-2xl font-bold m-0 p-0 +} + +.prose h2 { + @apply text-xl font-bold m-0 p-0 +} + +.prose p { + @apply p-0 m-0 +} + +.prose a { + @apply text-brand-primary-500 +} + +.input { + @apply block w-full px-4 py-2 rounded-md text-sm text-gray-900 bg-white border border-gray-300 shadow-sm placeholder-gray-400 focus:outline-none focus:ring-2 focus:ring-brand-primary-500 focus:border-brand-primary-500; +} + +.input-bordered { + @apply border border-gray-300; +} + +.textarea { + @apply block w-full px-4 py-2 rounded-md text-sm text-gray-900 bg-white border border-gray-300 shadow-sm placeholder-gray-400 resize-y min-h-[100px] focus:outline-none focus:ring-2 focus:ring-brand-primary-500 focus:border-brand-primary-500; +} + +.textarea-bordered { + @apply border border-gray-300; +} diff --git a/bun.lockb b/bun.lockb index c8b4c5dc5ada8bad8a0539f9c3c2a71cf05f0d9f..c59dfc86460e4a3ca64ed91c570c347b9ea5df7a 100755 GIT binary patch delta 64842 zcmeF4d0b5I`|#&X(=w%$&_a8(kc3pzrb22ILS+eQAxgVtk|{)%vfMaXqOxTPB}+pQ zvWF~LldOd-SsT)GU1v^y^ZZ`l=ld+L-|zK${`j1ibG`5Dy0`1P@B1usnmIP_SNo8q zv9_Oe(ZU`187)O;y$&|knCk_-aZYUvI(X3L!F}$9+ujEQtfwqf;NWJ>T^DR9=9+UE zjl-E2F`Y^M0;$U3q$SUZij0Z~=gf_aijDwVXDFx+_9;LEU=_vTbOI(N#3s*}$>G$n zdc^#sh&kaLPI$!J=-4=9d~#?shci7i3M7ZK2+CVDjtN>z%`9Q3{5ZDVi8E6a~1hfSDK|KuA1BM67*#IFcO;ZoXA2YPTfI}>W*0F=f zAdG;EAZ(2E2M{ZSg~cY%N#byt!8vB+B0|GJ<%~sVF+VXeX+c~BrzbQ9zNe`IajH_G zR~+(0Ag-;+KPx}GH0`)+gLms$~c7I@J;7%ase*mv=3LXK`p^Gek!Z5(- zrVR%jJ1zxc#|@@32ElydRJa4N{X1aC0L0tOWr_7b^ei2S4JE-iV#kr7;|O%D_N~w` zHng1WI0|S8`dA=3_7X+{r|OS|jByE3i7}xZ4uN^V_PniRk#m6%fHK#V8@ zh@Q=gN{WKEIFDdQ$7cm3W`9-IgN`= zOoA28iFK285COz;b3*6DMuo$aBqvUfUBKbQyUW^p+ebD6aS5`+M0<#=-V?B+BRBhS zY?-<5>miHG1c(vo0vEdQk&@9f_Kp^IK1L8?T1*i^uH&w=t{O|s<^3Q@g$QAIvx{Zpdl=!w2pzKz+eIyqDa}n5d*{yzDCJTj|*qX8h8UlM;`;x zk+|8i4r-trTwKzQ0I{8wz}~=6pcT*w2&eWmZPwm6lf&tQOQ`}9)<7C)0gPkm3&aL` z1I>XvAfBh|XUNv-DInT60lKU0~rTIhbJY;>^`82ajxAVp$hDm zEE~$m@Tdfwjs`#31z`gahpZiz1a^2}p3ISzK#cSa*ztt#0W<<~fY{N0KKRn1JRj@> zMSuGfGluC2pNl&zI(KF)DHaXBs$W4CTy$2Ea~pVf@kaA8h0uhxtW_xChu1A`)Yx=SFZW z(qxet0CA+QLp=>395u1?=5RQn>9V!basO7tj#w}d+wX|n19TnG`vAKG1H?;ZL#vn} zJM8>2Whcgcz|K%$<1(3jMr>R-1i}%5jwA8|%47ZqAnJQo$VMPxrL2R<*aRE6=FB|J z*3W@*=(ro`>OlSFvijmDkb%eVJ8%RW+Ob+Tq)AW^J?CV}R`+5khaPKY%gzUGtb_MK z$HQvo8d-fWXa^mG6KO)kjEMQIti!>Ok5lFi#52E}th_kwIy8WburD--j+CvFb!5I? zrdI>8qAig{(2FH>kQf0g85k29hYU?f2wlL@gvc<`lTZ&G%Ln3+6QBlgF%TW7+=x0H z{}$jO7Kqv;i}Wi*fCU_&A#{uj#ERX(K`ghLjpz^9QGXBY0=x~>2TFiAa=U@(KsFG| z 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 Aj{pDw delta 35481 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 KBd^r;ivJJyt;q2J diff --git a/components/EventInfoDisplay.tsx b/components/EventInfoDisplay.tsx index 07afae5..9adb34f 100644 --- a/components/EventInfoDisplay.tsx +++ b/components/EventInfoDisplay.tsx @@ -4,6 +4,7 @@ import React, { useState } from 'react' import AddGuestFromGuestBook from './AddGuestFromGuestBook' +import EventNotesEditor from './EventNotesEditor' interface Creator { id: string @@ -21,6 +22,7 @@ interface EventData { createdAt: string creator: Creator guests: any[] + notes?: string eventGuests: any[] } @@ -167,7 +169,7 @@ export default function EventInfoDisplay({ event }: Props) {

{formatDate(event.createdAt)}

- {error &&

{error}

} + {error &&

{error}

} {isEditing && (
)} +
+ +
diff --git a/components/EventNotesEditor.tsx b/components/EventNotesEditor.tsx new file mode 100644 index 0000000..562fe6f --- /dev/null +++ b/components/EventNotesEditor.tsx @@ -0,0 +1,103 @@ +'use client' +import { useSession } from 'next-auth/react' +import React, { useEffect, useRef, useState } from 'react' +import ReactMarkdown from 'react-markdown' +import remarkGfm from 'remark-gfm' +import InfoIcon from './icons/InfoIcon' + +interface Props { + eventId: string + initialNotes: string + canEdit: boolean +} + +export default function EventNotesEditor({ eventId, initialNotes, canEdit }: Props) { + const [notes, setNotes] = useState(initialNotes || ''); + const [isEditing, setIsEditing] = useState(false) + const [saving, setSaving] = useState(false); + const textareaRef = useRef(null) + const { data: session } = useSession() + + const isAuthorized = + session?.user?.role === 'COUPLE' || session?.user?.role === 'PLANNER' + + useEffect(() => { + if (isEditing && textareaRef.current) { + textareaRef.current.focus() + } + }, [isEditing]) + + async function saveNotes() { + setSaving(true) + try { + const res = await fetch(`/api/events/${eventId}`, { + method: 'PATCH', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ notes }), + }) + + if (!res.ok) throw new Error('Failed to save notes') + setIsEditing(false) + } catch (err) { + console.error(err) + } finally { + setSaving(false) + } + } + + if (!canEdit) { + return ( +
+

Event Notes

+
+ {notes || '_No notes yet._'} +
+
+ ) + } + + function handleBlur() { + if (notes.trim() !== initialNotes?.trim()) { + saveNotes() + } else { + setIsEditing(false) + } + } + + return ( +
+

+ Notes +

+
{ + if (isAuthorized) setIsEditing(true) + }} + > + {isEditing ? ( +