const form = useAppForm({
defaultValues: {
transactions: [{ id: 1, category: 'test' }, {id: 2, category: 'test2'}],
},
});
const [selected, setSelected] = useState<string[]>([])
const transactions = useStore(form.store, (store) => store.values.transactions);
const selectedTransactions = useMemo(() => transactions.filter((t) => selected.includes(t.id)), [transactions]);
const category = useMemo(
() =>
selectedTransactions.every((t) => t.category.key === selectedTransactions[0].category.key)
? transactions[0].category.key
: '',
[selectedTransactions],
);
// bulk edit
<FieldGroup>
<Field>
<Label>Category</Label>
<Select
value={category}
onValueChange={(e) => {
for (const id in selected) {
const index = transactions.findIndex((t) => t.id === id);
const category = categories.find((c) => c.key === e);
if (index) form.setFieldValue(`transactions[${index}].category`, (e) => category ?? e);
}
}}
>
<SelectTrigger className="rounded-none border-0 bg-background">
<SelectValue />
</SelectTrigger>
<SelectContent>
{categories.map((c) => (
<SelectItem value={c.key}>{c.value}</SelectItem>
))}
</SelectContent>
</Select>
</Field>
</FieldGroup>
const form = useAppForm({
defaultValues: {
transactions: [{ id: 1, category: 'test' }, {id: 2, category: 'test2'}],
},
});
const [selected, setSelected] = useState<string[]>([])
const transactions = useStore(form.store, (store) => store.values.transactions);
const selectedTransactions = useMemo(() => transactions.filter((t) => selected.includes(t.id)), [transactions]);
const category = useMemo(
() =>
selectedTransactions.every((t) => t.category.key === selectedTransactions[0].category.key)
? transactions[0].category.key
: '',
[selectedTransactions],
);
// bulk edit
<FieldGroup>
<Field>
<Label>Category</Label>
<Select
value={category}
onValueChange={(e) => {
for (const id in selected) {
const index = transactions.findIndex((t) => t.id === id);
const category = categories.find((c) => c.key === e);
if (index) form.setFieldValue(`transactions[${index}].category`, (e) => category ?? e);
}
}}
>
<SelectTrigger className="rounded-none border-0 bg-background">
<SelectValue />
</SelectTrigger>
<SelectContent>
{categories.map((c) => (
<SelectItem value={c.key}>{c.value}</SelectItem>
))}
</SelectContent>
</Select>
</Field>
</FieldGroup>