diff options
| author | Ankit Bahl <ankit2bahl@gmail.com> | 2024-01-09 05:08:17 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-01-09 08:08:17 -0500 |
| commit | 6bd3299331265ea2a0c800e3c3199ad4e32ce8de (patch) | |
| tree | 09632dd9b4ce5fc6cd9a7e39d7b21a70deb2862c /src/components | |
| parent | a942369193002218b3c0f154d8efe34b33c3b121 (diff) | |
Add activeUser for default payer per group (#16)
* Add activeUser for default payer per group
* Prettier, change labels, use useEffect
---------
Co-authored-by: Sebastien Castiel <sebastien@castiel.me>
Diffstat (limited to 'src/components')
| -rw-r--r-- | src/components/expense-form.tsx | 12 | ||||
| -rw-r--r-- | src/components/group-form.tsx | 70 |
2 files changed, 81 insertions, 1 deletions
diff --git a/src/components/expense-form.tsx b/src/components/expense-form.tsx index dff6867..d14d72e 100644 --- a/src/components/expense-form.tsx +++ b/src/components/expense-form.tsx @@ -51,6 +51,15 @@ export type Props = { export function ExpenseForm({ group, expense, onSubmit, onDelete }: Props) { const isCreate = expense === undefined const searchParams = useSearchParams() + const getSelectedPayer = (field?: { value: string }) => { + if (isCreate && typeof window !== 'undefined') { + const activeUser = localStorage.getItem(`${group.id}-activeUser`) + if (activeUser && activeUser !== 'None') { + return activeUser + } + } + return field?.value + } const form = useForm<ExpenseFormValues>({ resolver: zodResolver(expenseFormSchema), defaultValues: expense @@ -87,6 +96,7 @@ export function ExpenseForm({ group, expense, onSubmit, onDelete }: Props) { expenseDate: new Date(), amount: 0, paidFor: [], + paidBy: getSelectedPayer(), isReimbursement: false, splitMode: 'EVENLY', }, @@ -199,7 +209,7 @@ export function ExpenseForm({ group, expense, onSubmit, onDelete }: Props) { <FormLabel>Paid by</FormLabel> <Select onValueChange={field.onChange} - defaultValue={field.value} + defaultValue={getSelectedPayer(field)} > <SelectTrigger> <SelectValue placeholder="Select a participant" /> diff --git a/src/components/group-form.tsx b/src/components/group-form.tsx index 0d6ea68..fb4e0ae 100644 --- a/src/components/group-form.tsx +++ b/src/components/group-form.tsx @@ -24,6 +24,13 @@ import { HoverCardTrigger, } from '@/components/ui/hover-card' import { Input } from '@/components/ui/input' +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from '@/components/ui/select' import { getGroup } from '@/lib/api' import { GroupFormValues, groupFormSchema } from '@/lib/schemas' import { zodResolver } from '@hookform/resolvers/zod' @@ -61,6 +68,21 @@ export function GroupForm({ keyName: 'key', }) + let activeUser = 'None' + + const updateActiveUser = () => { + if (group?.id) { + const participant = group.participants.find((p) => p.name === activeUser) + if (participant?.id) { + localStorage.setItem(`${group.id}-activeUser`, participant.id) + } else { + localStorage.setItem(`${group.id}-newUser`, activeUser) + } + } else { + localStorage.setItem('newGroup-activeUser', activeUser) + } + } + return ( <Form {...form}> <form @@ -196,9 +218,57 @@ export function GroupForm({ </CardFooter> </Card> + <Card className="mb-4"> + <CardHeader> + <CardTitle>Local settings</CardTitle> + <CardDescription> + These settings are set per-device, and are used to customize your + experience. + </CardDescription> + </CardHeader> + <CardContent> + <div className="grid sm:grid-cols-2 gap-4"> + <FormItem> + <FormLabel>Active user</FormLabel> + <FormControl> + <Select + onValueChange={(value) => { + activeUser = value + }} + defaultValue={ + fields.find( + (f) => + f.id === + localStorage.getItem(`${group?.id}-activeUser`), + )?.name || 'None' + } + > + <SelectTrigger> + <SelectValue placeholder="Select a participant" /> + </SelectTrigger> + <SelectContent> + {[{ name: 'None' }, ...form.watch('participants')] + .filter((item) => item.name.length > 0) + .map(({ name }) => ( + <SelectItem key={name} value={name}> + {name} + </SelectItem> + ))} + </SelectContent> + </Select> + </FormControl> + <FormDescription> + User used as default for paying expenses. + </FormDescription> + </FormItem> + </div> + </CardContent> + </Card> + <SubmitButton size="lg" loadingContent={group ? 'Saving…' : 'Creating…'} + onClick={updateActiveUser} > <Save className="w-4 h-4 mr-2" /> {group ? <>Save</> : <> Create</>} </SubmitButton> |
