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 }))} />