mirror of
https://github.com/spliit-app/spliit.git
synced 2025-12-06 01:19:29 +01:00
Fix: Correctly display loaded expense (#210)
* Fix #209: Correctly display loaded expense - Don't load default split options after displaying an existing expense - Re-validate form after changing the "paidFor" selection. This fixes the error message "The expense must be paid for at least one participant." after clicking "Select None" and the selecting one participant. * Fix Paid For Field reset in Edit Expense Page for split Mode 'Unevenly - By amount' --------- Co-authored-by: partho.kunda <partho.kunda@chaldal.net>
This commit is contained in:
@@ -253,28 +253,21 @@ export function ExpenseForm({
|
||||
|
||||
useEffect(() => {
|
||||
setManuallyEditedParticipants(new Set())
|
||||
const newPaidFor = defaultSplittingOptions.paidFor.map((participant) => ({
|
||||
...participant,
|
||||
shares: String(participant.shares) as unknown as number,
|
||||
}))
|
||||
form.setValue('paidFor', newPaidFor, { shouldValidate: true })
|
||||
}, [form.watch('splitMode'), form.watch('amount')])
|
||||
|
||||
useEffect(() => {
|
||||
const totalAmount = Number(form.getValues().amount) || 0
|
||||
const paidFor = form.getValues().paidFor
|
||||
const splitMode = form.getValues().splitMode
|
||||
|
||||
let newPaidFor = [...paidFor]
|
||||
|
||||
// Only auto-balance for split mode 'Unevenly - By amount'
|
||||
if (
|
||||
splitMode === 'EVENLY' ||
|
||||
splitMode === 'BY_SHARES' ||
|
||||
splitMode === 'BY_PERCENTAGE'
|
||||
splitMode === 'BY_AMOUNT' &&
|
||||
(form.getFieldState('paidFor').isDirty ||
|
||||
form.getFieldState('amount').isDirty)
|
||||
) {
|
||||
return
|
||||
} else {
|
||||
// Only auto-balance for split mode 'Unevenly - By amount'
|
||||
const totalAmount = Number(form.getValues().amount) || 0
|
||||
const paidFor = form.getValues().paidFor
|
||||
let newPaidFor = [...paidFor]
|
||||
|
||||
const editedParticipants = Array.from(manuallyEditedParticipants)
|
||||
let remainingAmount = totalAmount
|
||||
let remainingParticipants = newPaidFor.length - editedParticipants.length
|
||||
@@ -569,18 +562,29 @@ export function ExpenseForm({
|
||||
({ participant }) => participant === id,
|
||||
)}
|
||||
onCheckedChange={(checked) => {
|
||||
return checked
|
||||
? field.onChange([
|
||||
...field.value,
|
||||
{
|
||||
participant: id,
|
||||
shares: '1',
|
||||
},
|
||||
])
|
||||
: field.onChange(
|
||||
const options = {
|
||||
shouldDirty: true,
|
||||
shouldTouch: true,
|
||||
shouldValidate: true,
|
||||
}
|
||||
checked
|
||||
? form.setValue(
|
||||
'paidFor',
|
||||
[
|
||||
...field.value,
|
||||
{
|
||||
participant: id,
|
||||
shares: '1' as unknown as number,
|
||||
},
|
||||
],
|
||||
options,
|
||||
)
|
||||
: form.setValue(
|
||||
'paidFor',
|
||||
field.value?.filter(
|
||||
(value) => value.participant !== id,
|
||||
),
|
||||
options,
|
||||
)
|
||||
}}
|
||||
/>
|
||||
|
||||
Reference in New Issue
Block a user