diff --git a/components/coalition-funding.tsx b/components/coalition-funding.tsx index 846ba977..5912a22d 100644 --- a/components/coalition-funding.tsx +++ b/components/coalition-funding.tsx @@ -4,7 +4,7 @@ import { useId, useState } from 'react'; /** Only the viewer's own pledges and contributions offered to that viewer. */ export type CoalitionFundingView = { - targets: readonly { id: string; name: string; pledged: number; maximum: number }[]; + targets: readonly { id: string; name: string; pledged: number; maximum: number; minimum?: number }[]; incoming: readonly { donor: string; name: string; amount: number }[]; blocked: string | null; }; @@ -35,13 +35,15 @@ export function coalitionPledgeAction( ): CoalitionPledgeAction | null { if (busy || blocked || !/^(0|[1-9]\d*)$/.test(raw)) return null; const amount = Number(raw); - if (!Number.isSafeInteger(amount) || amount > safeMaximum(target.maximum)) return null; + if (!Number.isSafeInteger(amount) || amount < safeMaximum(target.minimum ?? 0) || + amount > safeMaximum(target.maximum)) return null; return { type: 'coalitionPledge', recipient: target.id, amount }; } -export function CoalitionFunding({ view, busy = false, act, onContributionsChange }: { +export function CoalitionFunding({ view, busy = false, act, onContributionsChange, purpose = 'shipment' }: { view: CoalitionFundingView; busy?: boolean; + purpose?: 'bid' | 'shipment'; act: (action: CoalitionPledgeAction) => void; onContributionsChange?: (contributions: CoalitionFundingContribution[]) => void; }) { @@ -66,9 +68,11 @@ export function CoalitionFunding({ view, busy = false, act, onContributionsChang const raw = pledges[target.id] ?? String(target.pledged); const action = coalitionPledgeAction(target, raw, view.blocked, busy); const inputId = `${id}-pledge-${index}`; + const minimum = safeMaximum(target.minimum ?? 0); return
- 0 &&

The current high bid commits {minimum} spice of this pledge.

} + setPledges(previous => ({ ...previous, [target.id]: event.target.value }))} />