diff options
| author | Sebastien Castiel <sebastien@castiel.me> | 2023-12-06 19:50:56 -0500 |
|---|---|---|
| committer | Sebastien Castiel <sebastien@castiel.me> | 2023-12-06 19:50:56 -0500 |
| commit | 6ce2329f5ce20f8352e3ea15594f2532ab8a392c (patch) | |
| tree | d8d5fc4697ec0e51cd0267d5c3ffa9d048076c68 /src/app | |
| parent | e747ec3ea02dd01e9ffa9e398e24e6939a5b738c (diff) | |
Reimbursements
Diffstat (limited to 'src/app')
| -rw-r--r-- | src/app/groups/[groupId]/balances/page.tsx | 53 | ||||
| -rw-r--r-- | src/app/groups/[groupId]/reimbursement-list.tsx | 31 |
2 files changed, 68 insertions, 16 deletions
diff --git a/src/app/groups/[groupId]/balances/page.tsx b/src/app/groups/[groupId]/balances/page.tsx index 24818c9..33ba653 100644 --- a/src/app/groups/[groupId]/balances/page.tsx +++ b/src/app/groups/[groupId]/balances/page.tsx @@ -1,4 +1,5 @@ import { BalancesList } from '@/app/groups/[groupId]/balances-list' +import { ReimbursementList } from '@/app/groups/[groupId]/reimbursement-list' import { Card, CardContent, @@ -7,7 +8,7 @@ import { CardTitle, } from '@/components/ui/card' import { getGroup, getGroupExpenses } from '@/lib/api' -import { getBalances } from '@/lib/balances' +import { getBalances, getSuggestedReimbursements } from '@/lib/balances' import { notFound } from 'next/navigation' export default async function GroupPage({ @@ -20,22 +21,42 @@ export default async function GroupPage({ const expenses = await getGroupExpenses(groupId) const balances = getBalances(expenses) + const reimbursements = getSuggestedReimbursements(balances) + console.log(reimbursements) return ( - <Card className="mb-4"> - <CardHeader> - <CardTitle>Balances</CardTitle> - <CardDescription> - This is the amount that each participant paid or was paid for. - </CardDescription> - </CardHeader> - <CardContent> - <BalancesList - balances={balances} - participants={group.participants} - currency={group.currency} - /> - </CardContent> - </Card> + <> + <Card className="mb-4"> + <CardHeader> + <CardTitle>Balances</CardTitle> + <CardDescription> + This is the amount that each participant paid or was paid for. + </CardDescription> + </CardHeader> + <CardContent> + <BalancesList + balances={balances} + participants={group.participants} + currency={group.currency} + /> + </CardContent> + </Card> + <Card className="mb-4"> + <CardHeader> + <CardTitle>Suggested reimbursements</CardTitle> + <CardDescription> + Here are suggestions for optimized reimbursements between + participants. + </CardDescription> + </CardHeader> + <CardContent className="p-0"> + <ReimbursementList + reimbursements={reimbursements} + participants={group.participants} + currency={group.currency} + /> + </CardContent> + </Card> + </> ) } diff --git a/src/app/groups/[groupId]/reimbursement-list.tsx b/src/app/groups/[groupId]/reimbursement-list.tsx new file mode 100644 index 0000000..9d3ec49 --- /dev/null +++ b/src/app/groups/[groupId]/reimbursement-list.tsx @@ -0,0 +1,31 @@ +import { Reimbursement } from '@/lib/balances' +import { Participant } from '@prisma/client' + +type Props = { + reimbursements: Reimbursement[] + participants: Participant[] + currency: string +} + +export function ReimbursementList({ + reimbursements, + participants, + currency, +}: Props) { + const getParticipant = (id: string) => participants.find((p) => p.id === id) + return ( + <div className="text-sm"> + {reimbursements.map((reimbursement, index) => ( + <div className="border-t p-4 flex justify-between" key={index}> + <div> + <strong>{getParticipant(reimbursement.from)?.name}</strong> owes{' '} + <strong>{getParticipant(reimbursement.to)?.name}</strong> + </div> + <div> + {currency} {reimbursement.amount.toFixed(2)} + </div> + </div> + ))} + </div> + ) +} |
