fix(po): pre-fill vendor from cart when all items share the same vendor
This commit is contained in:
parent
d769cae71e
commit
42c58d8c15
2 changed files with 14 additions and 3 deletions
|
|
@ -20,13 +20,15 @@ interface Props {
|
|||
accounts: Account[];
|
||||
vendors: Vendor[];
|
||||
initialLineItems?: LineItemInput[];
|
||||
initialVendorId?: string;
|
||||
}
|
||||
|
||||
export function NewPoForm({ vessels, accounts, vendors, initialLineItems }: Props) {
|
||||
export function NewPoForm({ vessels, accounts, vendors, initialLineItems, initialVendorId }: Props) {
|
||||
const router = useRouter();
|
||||
const [lineItems, setLineItems] = useState<LineItemInput[]>(
|
||||
initialLineItems && initialLineItems.length > 0 ? initialLineItems : [EMPTY_LINE]
|
||||
);
|
||||
const [vendorId, setVendorId] = useState(initialVendorId ?? "");
|
||||
const [files, setFiles] = useState<File[]>([]);
|
||||
const [submitting, setSubmitting] = useState<"draft" | "submit" | null>(null);
|
||||
const [error, setError] = useState("");
|
||||
|
|
@ -189,7 +191,12 @@ export function NewPoForm({ vessels, accounts, vendors, initialLineItems }: Prop
|
|||
<label className="block text-sm font-medium text-neutral-700 mb-1.5">
|
||||
Vendor (optional — can be added later)
|
||||
</label>
|
||||
<select name="vendorId" className={INPUT_CLS}>
|
||||
<select
|
||||
name="vendorId"
|
||||
value={vendorId}
|
||||
onChange={(e) => setVendorId(e.target.value)}
|
||||
className={INPUT_CLS}
|
||||
>
|
||||
<option value="">No vendor selected</option>
|
||||
{vendors.map((v) => (
|
||||
<option key={v.id} value={v.id}>
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ export default async function NewPoPage({ searchParams }: Props) {
|
|||
const { cart } = await searchParams;
|
||||
|
||||
let initialLineItems: LineItemInput[] | undefined;
|
||||
let initialVendorId: string | undefined;
|
||||
if (cart) {
|
||||
try {
|
||||
const cartItems: CartItem[] = JSON.parse(decodeURIComponent(cart));
|
||||
|
|
@ -38,6 +39,9 @@ export default async function NewPoPage({ searchParams }: Props) {
|
|||
gstRate: 0.18,
|
||||
productId: item.productId,
|
||||
}));
|
||||
// Pre-fill vendor only when all items share the same vendor
|
||||
const vendorIds = [...new Set(cartItems.map((i) => i.vendorId).filter(Boolean))];
|
||||
if (vendorIds.length === 1) initialVendorId = vendorIds[0];
|
||||
}
|
||||
} catch {
|
||||
// malformed cart param — ignore and start empty
|
||||
|
|
@ -58,7 +62,7 @@ export default async function NewPoPage({ searchParams }: Props) {
|
|||
Fill in the details below. You can save as draft or submit directly for approval.
|
||||
</p>
|
||||
</div>
|
||||
<NewPoForm vessels={vessels} accounts={accounts} vendors={vendors} initialLineItems={initialLineItems} />
|
||||
<NewPoForm vessels={vessels} accounts={accounts} vendors={vendors} initialLineItems={initialLineItems} initialVendorId={initialVendorId} />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue