Add notes in expense (#126)

* Feature: Added notes in expense

* Add missing notes in form values

* Prettier

---------

Co-authored-by: deep.golani <deep.golani@bfhl.in>
Co-authored-by: Sebastien Castiel <sebastien@castiel.me>
This commit is contained in:
Deep Golani
2024-04-05 18:08:38 +05:30
committed by GitHub
parent b61d1836ea
commit 2fd38aadd9
5 changed files with 22 additions and 0 deletions

View File

@@ -0,0 +1,2 @@
-- AlterTable
ALTER TABLE "Expense" ADD COLUMN "notes" TEXT;

View File

@@ -52,6 +52,7 @@ model Expense {
splitMode SplitMode @default(EVENLY) splitMode SplitMode @default(EVENLY)
createdAt DateTime @default(now()) createdAt DateTime @default(now())
documents ExpenseDocument[] documents ExpenseDocument[]
notes String?
} }
model ExpenseDocument { model ExpenseDocument {

View File

@@ -50,6 +50,7 @@ import { useForm } from 'react-hook-form'
import { match } from 'ts-pattern' import { match } from 'ts-pattern'
import { DeletePopup } from './delete-popup' import { DeletePopup } from './delete-popup'
import { extractCategoryFromTitle } from './expense-form-actions' import { extractCategoryFromTitle } from './expense-form-actions'
import { Textarea } from './ui/textarea'
export type Props = { export type Props = {
group: NonNullable<Awaited<ReturnType<typeof getGroup>>> group: NonNullable<Awaited<ReturnType<typeof getGroup>>>
@@ -180,6 +181,7 @@ export function ExpenseForm({
saveDefaultSplittingOptions: false, saveDefaultSplittingOptions: false,
isReimbursement: expense.isReimbursement, isReimbursement: expense.isReimbursement,
documents: expense.documents, documents: expense.documents,
notes: expense.notes ?? '',
} }
: searchParams.get('reimbursement') : searchParams.get('reimbursement')
? { ? {
@@ -202,6 +204,7 @@ export function ExpenseForm({
splitMode: defaultSplittingOptions.splitMode, splitMode: defaultSplittingOptions.splitMode,
saveDefaultSplittingOptions: false, saveDefaultSplittingOptions: false,
documents: [], documents: [],
notes: '',
} }
: { : {
title: searchParams.get('title') ?? '', title: searchParams.get('title') ?? '',
@@ -228,6 +231,7 @@ export function ExpenseForm({
}, },
] ]
: [], : [],
notes: '',
}, },
}) })
const [isCategoryLoading, setCategoryLoading] = useState(false) const [isCategoryLoading, setCategoryLoading] = useState(false)
@@ -400,6 +404,18 @@ export function ExpenseForm({
</FormItem> </FormItem>
)} )}
/> />
<FormField
control={form.control}
name="notes"
render={({ field }) => (
<FormItem className="sm:order-6">
<FormLabel>Notes</FormLabel>
<FormControl>
<Textarea className="text-base" {...field} />
</FormControl>
</FormItem>
)}
/>
</CardContent> </CardContent>
</Card> </Card>

View File

@@ -72,6 +72,7 @@ export async function createExpense(
})), })),
}, },
}, },
notes: expenseFormValues.notes,
}, },
}) })
} }
@@ -185,6 +186,7 @@ export async function updateExpense(
id: doc.id, id: doc.id,
})), })),
}, },
notes: expenseFormValues.notes,
}, },
}) })
} }

View File

@@ -117,6 +117,7 @@ export const expenseFormSchema = z
}), }),
) )
.default([]), .default([]),
notes: z.string().optional(),
}) })
.superRefine((expense, ctx) => { .superRefine((expense, ctx) => {
let sum = 0 let sum = 0