Add currency

This commit is contained in:
Sebastien Castiel
2023-12-06 15:23:18 -05:00
parent 570aa713b1
commit 72fe199879
7 changed files with 49 additions and 13 deletions

View File

@@ -0,0 +1,2 @@
-- AlterTable
ALTER TABLE "Group" ADD COLUMN "currency" TEXT NOT NULL DEFAULT '$';

View File

@@ -14,6 +14,7 @@ datasource db {
model Group {
id String @id
name String
currency String @default("$")
participants Participant[]
expenses Expense[]
}

View File

@@ -86,8 +86,8 @@ export default async function GroupPage({
</Badge>
))}
</TableCell>
<TableCell className="text-right tabular-nums">
$&nbsp;{expense.amount.toFixed(2)}
<TableCell className="text-right tabular-nums whitespace-nowrap">
{group.currency} {expense.amount.toFixed(2)}
</TableCell>
<TableCell>
<Button

View File

@@ -118,16 +118,19 @@ export function ExpenseForm({ group, expense, onSubmit, onDelete }: Props) {
render={({ field }) => (
<FormItem className="order-2 sm:order-3">
<FormLabel>Amount</FormLabel>
<FormControl>
<Input
className="text-base"
type="number"
min={0.01}
step={0.01}
placeholder="0.00"
{...field}
/>
</FormControl>
<div className="flex items-baseline gap-2">
<span>{group.currency}</span>
<FormControl>
<Input
className="text-base max-w-[120px]"
type="number"
min={0.01}
step={0.01}
placeholder="0.00"
{...field}
/>
</FormControl>
</div>
<FormDescription>Enter the expense amount.</FormDescription>
<FormMessage />
</FormItem>

View File

@@ -36,10 +36,12 @@ export function GroupForm({ group, onSubmit }: Props) {
defaultValues: group
? {
name: group.name,
currency: group.currency,
participants: group.participants,
}
: {
name: '',
currency: '',
participants: [{ name: 'John' }, { name: 'Jane' }, { name: 'Jack' }],
},
})
@@ -60,7 +62,7 @@ export function GroupForm({ group, onSubmit }: Props) {
<CardHeader>
<CardTitle>Group information</CardTitle>
</CardHeader>
<CardContent>
<CardContent className="grid grid-cols-1 sm:grid-cols-2 gap-4">
<FormField
control={form.control}
name="name"
@@ -81,6 +83,28 @@ export function GroupForm({ group, onSubmit }: Props) {
</FormItem>
)}
/>
<FormField
control={form.control}
name="currency"
render={({ field }) => (
<FormItem>
<FormLabel>Currency symbol</FormLabel>
<FormControl>
<Input
className="text-base"
placeholder="$, €, £…"
max={5}
{...field}
/>
</FormControl>
<FormDescription>
Well used it to display amounts.
</FormDescription>
<FormMessage />
</FormItem>
)}
/>
</CardContent>
</Card>
<Card>

View File

@@ -9,6 +9,7 @@ export async function createGroup(groupFormValues: GroupFormValues) {
data: {
id: uuidv4(),
name: groupFormValues.name,
currency: groupFormValues.currency,
participants: {
createMany: {
data: groupFormValues.participants.map(({ name }) => ({
@@ -120,6 +121,7 @@ export async function updateGroup(
where: { id: groupId },
data: {
name: groupFormValues.name,
currency: groupFormValues.currency,
participants: {
deleteMany: existingGroup.participants.filter(
(p) => !groupFormValues.participants.some((p2) => p2.id === p.id),

View File

@@ -6,6 +6,10 @@ export const groupFormSchema = z
.string()
.min(2, 'Enter at least two characters.')
.max(50, 'Enter at most 50 characters.'),
currency: z
.string()
.min(1, 'Enter at least one character.')
.max(5, 'Enter at most five characters.'),
participants: z
.array(
z.object({