diff --git a/site/src/components/intake/steps/OfficerStep.astro b/site/src/components/intake/steps/OfficerStep.astro index d4ce09e..040bb52 100644 --- a/site/src/components/intake/steps/OfficerStep.astro +++ b/site/src/components/intake/steps/OfficerStep.astro @@ -21,11 +21,11 @@
- - +
@@ -48,7 +48,7 @@
- Officer 2 + Officer 2 (optional)
@@ -63,7 +63,7 @@
- Officer 3 + Officer 3 (optional)
@@ -105,12 +105,8 @@ const o3wrap = g("pw-o3-wrap"); const err = g("pw-officer-err"); - function syncCount() { - const n = Number(count.value); - o2wrap.hidden = n < 2; - o3wrap.hidden = n < 3; - } - count.addEventListener("change", syncCount); + // All 3 officer sections always visible — 2 & 3 are optional + function syncCount() {}; function officerFields(i: number) { return { @@ -211,22 +207,26 @@ window.addEventListener("pw:step-next", (evt: any) => { const PW = (window as any).PWIntake; if (PW.steps[PW.get().step_index] !== "officer") return; - const n = Number(count.value); const officers: any[] = []; const missing: string[] = []; - for (let i = 1; i <= n; i++) { + for (let i = 1; i <= 3; i++) { const f = officerFields(i); - if (!f.n.value.trim()) missing.push(`Officer ${i} name`); - if (!f.t.value.trim()) missing.push(`Officer ${i} title`); - // Address required for 499-A flows (not enforced for sole_prop) - if (!f.street.value.trim()) missing.push(`Officer ${i} street`); - if (!f.city.value.trim()) missing.push(`Officer ${i} city`); - officers.push({ - name: f.n.value.trim(), title: f.t.value.trim(), - email: f.e?.value.trim() || "", phone: f.p?.value.trim() || "", - street: f.street.value.trim(), city: f.city.value.trim(), - state: f.state.value.trim().toUpperCase(), zip: f.zip.value.trim(), - }); + if (i === 1) { + // Officer 1 is required + if (!f.n.value.trim()) missing.push("Officer 1 name"); + if (!f.t.value.trim()) missing.push("Officer 1 title"); + if (!f.street.value.trim()) missing.push("Officer 1 street address"); + if (!f.city.value.trim()) missing.push("Officer 1 city"); + } + // Only include officer if name is filled (skip blank optional officers) + if (f.n.value.trim()) { + officers.push({ + name: f.n.value.trim(), title: f.t.value.trim(), + email: f.e?.value.trim() || "", phone: f.p?.value.trim() || "", + street: f.street.value.trim(), city: f.city.value.trim(), + state: f.state.value.trim().toUpperCase(), zip: f.zip.value.trim(), + }); + } } if (missing.length) { err.hidden = false; err.textContent = `Required: ${missing.join(", ")}`;