mirror of
https://github.com/spliit-app/spliit.git
synced 2025-12-06 09:29:39 +01:00
Select all/no participant for expenses (Fix #3)
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
'use client'
|
||||
import { AsyncButton } from '@/components/async-button'
|
||||
import { SubmitButton } from '@/components/submit-button'
|
||||
import { Button } from '@/components/ui/button'
|
||||
import {
|
||||
Card,
|
||||
CardContent,
|
||||
@@ -138,7 +139,6 @@ export function ExpenseForm({ group, expense, onSubmit, onDelete }: Props) {
|
||||
className="text-base max-w-[120px]"
|
||||
type="number"
|
||||
inputMode="decimal"
|
||||
min={0.01}
|
||||
step={0.01}
|
||||
placeholder="0.00"
|
||||
{...field}
|
||||
@@ -174,7 +174,34 @@ export function ExpenseForm({ group, expense, onSubmit, onDelete }: Props) {
|
||||
render={() => (
|
||||
<FormItem className="order-5">
|
||||
<div className="mb-4">
|
||||
<FormLabel>Paid for</FormLabel>
|
||||
<FormLabel>
|
||||
Paid for
|
||||
<Button
|
||||
variant="link"
|
||||
type="button"
|
||||
className="-m-2"
|
||||
onClick={() => {
|
||||
const paidFor = form.getValues().paidFor
|
||||
const allSelected =
|
||||
paidFor.length === group.participants.length
|
||||
const newPairFor = allSelected
|
||||
? []
|
||||
: group.participants.map((p) => p.id)
|
||||
form.setValue('paidFor', newPairFor, {
|
||||
shouldDirty: true,
|
||||
shouldTouch: true,
|
||||
shouldValidate: true,
|
||||
})
|
||||
}}
|
||||
>
|
||||
{form.getValues().paidFor.length ===
|
||||
group.participants.length ? (
|
||||
<>Select none</>
|
||||
) : (
|
||||
<>Select all</>
|
||||
)}
|
||||
</Button>
|
||||
</FormLabel>
|
||||
<FormDescription>
|
||||
Select who the expense was paid for.
|
||||
</FormDescription>
|
||||
@@ -219,7 +246,9 @@ export function ExpenseForm({ group, expense, onSubmit, onDelete }: Props) {
|
||||
</CardContent>
|
||||
|
||||
<CardFooter className="gap-2">
|
||||
<SubmitButton loadingContent="Submitting…">
|
||||
<SubmitButton
|
||||
loadingContent={isCreate ? <>Creating…</> : <>Saving…</>}
|
||||
>
|
||||
{isCreate ? <>Create</> : <>Save</>}
|
||||
</SubmitButton>
|
||||
{!isCreate && onDelete && (
|
||||
|
||||
@@ -66,7 +66,7 @@ export const expenseFormSchema = z.object({
|
||||
paidBy: z.string({ required_error: 'You must select a participant.' }),
|
||||
paidFor: z
|
||||
.array(z.string())
|
||||
.min(1, 'The expense must be paid for at least 1 participant.'),
|
||||
.min(1, 'The expense must be paid for at least one participant.'),
|
||||
isReimbursement: z.boolean(),
|
||||
})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user