diff --git a/messages/en.json b/messages/en.json index 424533b..179a93d 100644 --- a/messages/en.json +++ b/messages/en.json @@ -24,7 +24,9 @@ "sms_button_submit": "Send Message", "residents_title": "Residents", "residents_button_new": "New Resident", - "residents_modal_title": "Create a Resident", + "residents_table_edit": "Edit", + "residents_modal_title_new": "Create a Resident", + "residents_modal_title_edit": "Edit Resident", "residents_modal_submit": "Submit", "residents_modal_label_name": "Name", "residents_modal_label_phone": "Phone Number", diff --git a/src/lib/components/Residents/ResidentTable.svelte b/src/lib/components/Residents/ResidentTable.svelte index b9a9261..60caee6 100644 --- a/src/lib/components/Residents/ResidentTable.svelte +++ b/src/lib/components/Residents/ResidentTable.svelte @@ -1,23 +1,34 @@ + +
| + | # | Name | Phone Number | + {#if onEdit} +{index + 1} | {resident.name} | {resident.phoneNumber} | + {#if onEdit} ++ + | + {/if} {/each} {/if} diff --git a/src/lib/components/Residents/index.ts b/src/lib/components/Residents/index.ts index 08b406c..a613801 100644 --- a/src/lib/components/Residents/index.ts +++ b/src/lib/components/Residents/index.ts @@ -1 +1,2 @@ export { default as ResidentTable } from './ResidentTable.svelte'; +export * from './ResidentTable.svelte'; diff --git a/src/routes/app/residents/+page.server.ts b/src/routes/app/residents/+page.server.ts index 0f22441..df893b8 100644 --- a/src/routes/app/residents/+page.server.ts +++ b/src/routes/app/residents/+page.server.ts @@ -32,6 +32,11 @@ export const actions = { return fail(400, { error: 'message_missing' }); } + const id = form.get('id'); + if (id && typeof id !== 'string') { + return fail(400, { error: 'invalid_id' }); + } + const name = form.get('name'); if (typeof name !== 'string') { return fail(400, { error: 'invalid_name' }); @@ -47,12 +52,19 @@ export const actions = { return fail(400, { error: 'invalid_phone' }); } - await prisma.resident.create({ - data: { + await prisma.resident.upsert({ + where: { + id: id ?? '', + }, + create: { name: name, phoneNumber: phone, tenantId: event.locals.tenant.id, }, + update: { + name: name, + phoneNumber: phone, + }, }); }, }; diff --git a/src/routes/app/residents/+page.svelte b/src/routes/app/residents/+page.svelte index aa99bf6..363ac24 100644 --- a/src/routes/app/residents/+page.svelte +++ b/src/routes/app/residents/+page.svelte @@ -2,7 +2,7 @@ import { enhance } from '$app/forms'; import { Button, Modal, ModalActions, ModalBody } from '$lib/components/Actions'; import { TextInput } from '$lib/components/DataInput'; - import { ResidentTable } from '$lib/components/Residents'; + import { ResidentTable, type ResidentItem } from '$lib/components/Residents'; import { messages } from '$lib/i18n'; import { Phone, UserRound, UserRoundPlus } from 'lucide-svelte'; import { fade } from 'svelte/transition'; @@ -17,25 +17,42 @@ let residents = $derived(data.residents); - let dialog = $state
|---|