From faf0ee4dbd6c014f950997ad7a416231f3654288 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Tue, 28 Jan 2025 09:00:09 +0100 Subject: [PATCH] WIP define UI for invitations --- app/lib/guest.tsx | 6 ++++-- app/ui/guests/table.tsx | 44 ++++++++++++++++++++++++++++++++++------- 2 files changed, 41 insertions(+), 9 deletions(-) diff --git a/app/lib/guest.tsx b/app/lib/guest.tsx index 80fcfb7..e0ccaf9 100644 --- a/app/lib/guest.tsx +++ b/app/lib/guest.tsx @@ -14,8 +14,9 @@ export class Guest implements Entity { color?: string; status?: GuestStatus; children?: Guest[]; + invitationId?: string; - constructor(id?: string, name?: string, group_name?: string, groupId?: string, color?: string, status?: GuestStatus, children?: Guest[]) { + constructor(id?: string, name?: string, group_name?: string, groupId?: string, color?: string, status?: GuestStatus, children?: Guest[], invitationId?: string) { this.id = id; this.name = name; this.group_name = group_name; @@ -23,12 +24,13 @@ export class Guest implements Entity { this.color = color; this.status = status; this.children = children; + this.invitationId = invitationId; } } export class GuestSerializer implements Serializable { fromJson(data: any): Guest { - return new Guest(data.id, data.name, data.group?.name, data.group?.id, data.color, data.status, data.children); + return new Guest(data.id, data.name, data.group?.name, data.group?.id, data.color, data.status, data.children, data.invitation_id); } toJson(guest: Guest): string { diff --git a/app/ui/guests/table.tsx b/app/ui/guests/table.tsx index 93972d0..cbf05fa 100644 --- a/app/ui/guests/table.tsx +++ b/app/ui/guests/table.tsx @@ -3,9 +3,10 @@ 'use client'; import { AbstractApi } from '@/app/api/abstract-api'; -import { Guest , GuestSerializer} from '@/app/lib/guest'; -import { PencilIcon, TrashIcon } from '@heroicons/react/24/outline'; +import { Guest, GuestSerializer } from '@/app/lib/guest'; +import { EnvelopeIcon, FunnelIcon, PencilIcon, TrashIcon, UserPlusIcon } from '@heroicons/react/24/outline'; import clsx from 'clsx'; +import { useState } from 'react'; import TableOfContents from '../components/table-of-contents'; export default function guestsTable({ guests, onUpdate, onEdit }: { @@ -16,22 +17,40 @@ export default function guestsTable({ guests, onUpdate, onEdit }: { const api = new AbstractApi(); const serializer = new GuestSerializer(); + const [invitationId, setInvitationId] = useState(undefined); + const [selecting, setSelecting] = useState(false); + + function toggleInvitationId(id: string | undefined) { + console.log('toggleInvitationId', id, invitationId); + + if (id === invitationId) { + setInvitationId(undefined); + } else { + setInvitationId(id); + } + + console.log('invitationId', invitationId); + } return ( ( - - + + {guest.name} {guest.group_name} - + + + { + guest.invitationId && +
+ {!selecting && toggleInvitationId(guest?.invitationId)} />} + { invitationId === guest.invitationId && !selecting && setSelecting(!selecting)}/>} + { selecting && invitationId !== guest.invitationId && } +
+ } +
- { api.destroy(serializer, guest, onUpdate)}} /> + { api.destroy(serializer, guest, onUpdate) }} /> onEdit(guest)} /> +