@burdenoff/microfe-atheletebridge 2026.1031.3 → 2026.1102.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/atheletebridge/AthleteBridgeRoot.d.ts.map +1 -1
- package/dist/atheletebridge/AthleteBridgeRoot.js +63 -47
- package/dist/atheletebridge/AthleteBridgeRoot.js.map +1 -1
- package/dist/atheletebridge/AthleteBridgeRoutes.d.ts.map +1 -1
- package/dist/atheletebridge/AthleteBridgeRoutes.js +62 -6
- package/dist/atheletebridge/AthleteBridgeRoutes.js.map +1 -1
- package/dist/atheletebridge/components/StatusBadge.d.ts.map +1 -1
- package/dist/atheletebridge/components/StatusBadge.js +13 -1
- package/dist/atheletebridge/components/StatusBadge.js.map +1 -1
- package/dist/atheletebridge/components/registration/PaymentSummaryPanel.d.ts +6 -0
- package/dist/atheletebridge/components/registration/PaymentSummaryPanel.d.ts.map +1 -0
- package/dist/atheletebridge/components/registration/PaymentSummaryPanel.js +104 -0
- package/dist/atheletebridge/components/registration/PaymentSummaryPanel.js.map +1 -0
- package/dist/atheletebridge/components/registration/RegistrationEntryFields.d.ts +15 -0
- package/dist/atheletebridge/components/registration/RegistrationEntryFields.d.ts.map +1 -0
- package/dist/atheletebridge/components/registration/RegistrationEntryFields.js +236 -0
- package/dist/atheletebridge/components/registration/RegistrationEntryFields.js.map +1 -0
- package/dist/atheletebridge/components/registration/entryRules.d.ts +23 -0
- package/dist/atheletebridge/components/registration/entryRules.d.ts.map +1 -0
- package/dist/atheletebridge/components/registration/entryRules.js +29 -0
- package/dist/atheletebridge/components/registration/entryRules.js.map +1 -0
- package/dist/atheletebridge/hooks/useAthleteBridgeApi.d.ts +1 -0
- package/dist/atheletebridge/hooks/useAthleteBridgeApi.d.ts.map +1 -1
- package/dist/atheletebridge/hooks/useAthleteBridgeApi.js +1 -1
- package/dist/atheletebridge/hooks/useAthleteBridgeApi.js.map +1 -1
- package/dist/atheletebridge/hooks/useRegistrationApi.d.ts +54 -0
- package/dist/atheletebridge/hooks/useRegistrationApi.d.ts.map +1 -0
- package/dist/atheletebridge/hooks/useRegistrationApi.js +265 -0
- package/dist/atheletebridge/hooks/useRegistrationApi.js.map +1 -0
- package/dist/atheletebridge/pages/registrations/MyRegistrationsPage.d.ts +10 -0
- package/dist/atheletebridge/pages/registrations/MyRegistrationsPage.d.ts.map +1 -0
- package/dist/atheletebridge/pages/registrations/MyRegistrationsPage.js +89 -0
- package/dist/atheletebridge/pages/registrations/MyRegistrationsPage.js.map +1 -0
- package/dist/atheletebridge/pages/registrations/RecordRegistrationPage.d.ts +10 -0
- package/dist/atheletebridge/pages/registrations/RecordRegistrationPage.d.ts.map +1 -0
- package/dist/atheletebridge/pages/registrations/RecordRegistrationPage.js +94 -0
- package/dist/atheletebridge/pages/registrations/RecordRegistrationPage.js.map +1 -0
- package/dist/atheletebridge/pages/registrations/RegisterPage.d.ts +11 -0
- package/dist/atheletebridge/pages/registrations/RegisterPage.d.ts.map +1 -0
- package/dist/atheletebridge/pages/registrations/RegisterPage.js +160 -0
- package/dist/atheletebridge/pages/registrations/RegisterPage.js.map +1 -0
- package/dist/atheletebridge/pages/registrations/RegistrationFormBuilderPage.d.ts +10 -0
- package/dist/atheletebridge/pages/registrations/RegistrationFormBuilderPage.d.ts.map +1 -0
- package/dist/atheletebridge/pages/registrations/RegistrationFormBuilderPage.js +602 -0
- package/dist/atheletebridge/pages/registrations/RegistrationFormBuilderPage.js.map +1 -0
- package/dist/atheletebridge/pages/registrations/RegistrationFormDetailPage.d.ts +9 -0
- package/dist/atheletebridge/pages/registrations/RegistrationFormDetailPage.d.ts.map +1 -0
- package/dist/atheletebridge/pages/registrations/RegistrationFormDetailPage.js +317 -0
- package/dist/atheletebridge/pages/registrations/RegistrationFormDetailPage.js.map +1 -0
- package/dist/atheletebridge/pages/registrations/RegistrationFormsListPage.d.ts +9 -0
- package/dist/atheletebridge/pages/registrations/RegistrationFormsListPage.d.ts.map +1 -0
- package/dist/atheletebridge/pages/registrations/RegistrationFormsListPage.js +127 -0
- package/dist/atheletebridge/pages/registrations/RegistrationFormsListPage.js.map +1 -0
- package/dist/atheletebridge/pages/registrations/RegistrationSubmissionPage.d.ts +11 -0
- package/dist/atheletebridge/pages/registrations/RegistrationSubmissionPage.d.ts.map +1 -0
- package/dist/atheletebridge/pages/registrations/RegistrationSubmissionPage.js +411 -0
- package/dist/atheletebridge/pages/registrations/RegistrationSubmissionPage.js.map +1 -0
- package/dist/atheletebridge/types/registration.d.ts +220 -0
- package/dist/atheletebridge/types/registration.d.ts.map +1 -0
- package/dist/atheletebridge/utils/money.d.ts +22 -0
- package/dist/atheletebridge/utils/money.d.ts.map +1 -0
- package/dist/atheletebridge/utils/money.js +38 -0
- package/dist/atheletebridge/utils/money.js.map +1 -0
- package/dist/atheletebridge/utils/registration.d.ts +17 -0
- package/dist/atheletebridge/utils/registration.d.ts.map +1 -0
- package/dist/atheletebridge/utils/registration.js +25 -0
- package/dist/atheletebridge/utils/registration.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PaymentSummaryPanel.js","names":[],"sources":["../../../../src/atheletebridge/components/registration/PaymentSummaryPanel.tsx"],"sourcesContent":["/**\n * Registration fee reconciliation panel (BOFF-4135)\n * @module atheletebridge/components/registration\n *\n * KPI tiles for one form or the whole workspace: what is owed, collected,\n * refunded and still outstanding (one row per currency — never summed across\n * currencies), plus how many registrations sit in each payment state. Renders\n * nothing when the viewer cannot read the payment ledger (e.g. a coach), so the\n * submissions view stays usable without leaking that a ledger exists.\n */\n\nimport type { FC } from 'react';\nimport { CircleDollarSign, ClipboardList, HandCoins, Hourglass } from 'lucide-react';\nimport { MetricsCard } from '../MetricsCard';\nimport { useRegistrationPaymentSummary } from '../../hooks/useRegistrationApi';\nimport { formatMoney } from '../../utils/money';\n\nexport const PaymentSummaryPanel: FC<{ formId?: string }> = ({ formId }) => {\n const summary = useRegistrationPaymentSummary(formId);\n if (!summary.data) return null;\n const data = summary.data;\n const totals = data.totals.length > 0 ? data.totals : null;\n\n return (\n <section\n aria-label=\"Fee reconciliation\"\n className=\"mb-6 space-y-3\"\n data-testid=\"registration-summary\"\n >\n <div className=\"grid grid-cols-2 gap-4 lg:grid-cols-4\">\n <MetricsCard\n icon={<ClipboardList className=\"h-5 w-5\" />}\n value={data.submissionCount}\n label={`Registrations (${data.acceptedCount} accepted)`}\n />\n <MetricsCard\n icon={<HandCoins className=\"h-5 w-5\" />}\n value={data.paidCount}\n label=\"Paid in full\"\n tone=\"success\"\n />\n <MetricsCard\n icon={<Hourglass className=\"h-5 w-5\" />}\n value={data.unpaidCount + data.partiallyPaidCount}\n label={`Awaiting payment (${data.partiallyPaidCount} partial)`}\n />\n <MetricsCard\n icon={<CircleDollarSign className=\"h-5 w-5\" />}\n value={data.notRequiredCount + data.refundedCount}\n label=\"Free or refunded\"\n />\n </div>\n {totals && (\n <div className=\"overflow-x-auto rounded-lg border border-border-seam\">\n <table className=\"w-full text-sm\">\n <thead className=\"bg-bg-sunken text-left text-xs uppercase tracking-wide text-text-secondary\">\n <tr>\n <th className=\"px-4 py-2 font-medium\">Currency</th>\n <th className=\"px-4 py-2 text-right font-medium\">Due</th>\n <th className=\"px-4 py-2 text-right font-medium\">Collected</th>\n <th className=\"px-4 py-2 text-right font-medium\">Refunded</th>\n <th className=\"px-4 py-2 text-right font-medium\">Outstanding</th>\n </tr>\n </thead>\n <tbody className=\"divide-y divide-border-seam\">\n {totals.map((row) => (\n <tr key={row.currency} className=\"text-text-primary\">\n <td className=\"px-4 py-2 font-medium\">{row.currency}</td>\n <td className=\"px-4 py-2 text-right tabular-nums\">\n {formatMoney(row.amountDue, row.currency)}\n </td>\n <td className=\"px-4 py-2 text-right tabular-nums\">\n {formatMoney(row.amountCollected, row.currency)}\n </td>\n <td className=\"px-4 py-2 text-right tabular-nums\">\n {formatMoney(row.amountRefunded, row.currency)}\n </td>\n <td\n className=\"px-4 py-2 text-right font-semibold tabular-nums\"\n data-testid=\"summary-outstanding\"\n >\n {formatMoney(row.amountOutstanding, row.currency)}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )}\n </section>\n );\n};\n"],"mappings":";;;;;;AAiBA,IAAa,KAAgD,EAAE,gBAAa;CAC1E,IAAM,IAAU,EAA8B,CAAM;CACpD,IAAI,CAAC,EAAQ,MAAM,OAAO;CAC1B,IAAM,IAAO,EAAQ,MACf,IAAS,EAAK,OAAO,SAAS,IAAI,EAAK,SAAS;CAEtD,OACE,kBAAC,WAAD;EACE,cAAW;EACX,WAAU;EACV,eAAY;YAHd,CAKE,kBAAC,OAAD;GAAK,WAAU;aAAf;IACE,kBAAC,GAAD;KACE,MAAM,kBAAC,GAAD,EAAe,WAAU,UAAW,CAAA;KAC1C,OAAO,EAAK;KACZ,OAAO,kBAAkB,EAAK,cAAc;IAC7C,CAAA;IACD,kBAAC,GAAD;KACE,MAAM,kBAAC,GAAD,EAAW,WAAU,UAAW,CAAA;KACtC,OAAO,EAAK;KACZ,OAAM;KACN,MAAK;IACN,CAAA;IACD,kBAAC,GAAD;KACE,MAAM,kBAAC,GAAD,EAAW,WAAU,UAAW,CAAA;KACtC,OAAO,EAAK,cAAc,EAAK;KAC/B,OAAO,qBAAqB,EAAK,mBAAmB;IACrD,CAAA;IACD,kBAAC,GAAD;KACE,MAAM,kBAAC,GAAD,EAAkB,WAAU,UAAW,CAAA;KAC7C,OAAO,EAAK,mBAAmB,EAAK;KACpC,OAAM;IACP,CAAA;GACE;MACJ,KACC,kBAAC,OAAD;GAAK,WAAU;aACb,kBAAC,SAAD;IAAO,WAAU;cAAjB,CACE,kBAAC,SAAD;KAAO,WAAU;eACf,kBAAC,MAAD,EAAA,UAAA;MACE,kBAAC,MAAD;OAAI,WAAU;iBAAwB;MAAY,CAAA;MAClD,kBAAC,MAAD;OAAI,WAAU;iBAAmC;MAAO,CAAA;MACxD,kBAAC,MAAD;OAAI,WAAU;iBAAmC;MAAa,CAAA;MAC9D,kBAAC,MAAD;OAAI,WAAU;iBAAmC;MAAY,CAAA;MAC7D,kBAAC,MAAD;OAAI,WAAU;iBAAmC;MAAe,CAAA;KAC9D,EAAA,CAAA;IACC,CAAA,GACP,kBAAC,SAAD;KAAO,WAAU;eACd,EAAO,KAAK,MACX,kBAAC,MAAD;MAAuB,WAAU;gBAAjC;OACE,kBAAC,MAAD;QAAI,WAAU;kBAAyB,EAAI;OAAa,CAAA;OACxD,kBAAC,MAAD;QAAI,WAAU;kBACX,EAAY,EAAI,WAAW,EAAI,QAAQ;OACtC,CAAA;OACJ,kBAAC,MAAD;QAAI,WAAU;kBACX,EAAY,EAAI,iBAAiB,EAAI,QAAQ;OAC5C,CAAA;OACJ,kBAAC,MAAD;QAAI,WAAU;kBACX,EAAY,EAAI,gBAAgB,EAAI,QAAQ;OAC3C,CAAA;OACJ,kBAAC,MAAD;QACE,WAAU;QACV,eAAY;kBAEX,EAAY,EAAI,mBAAmB,EAAI,QAAQ;OAC9C,CAAA;MACF;QAjBK,EAAI,QAiBT,CACL;IACI,CAAA,CACF;;EACJ,CAAA,CAEA;;AAEb"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
import { AthRegistrationFee, AthRegistrationField } from '../../types/registration';
|
|
3
|
+
import { RegistrationEntryState } from './entryRules';
|
|
4
|
+
|
|
5
|
+
interface RegistrationEntryFieldsProps {
|
|
6
|
+
fields: AthRegistrationField[];
|
|
7
|
+
fees: AthRegistrationFee[];
|
|
8
|
+
currency: string;
|
|
9
|
+
waiverText: string | null;
|
|
10
|
+
state: RegistrationEntryState;
|
|
11
|
+
onChange: (next: RegistrationEntryState) => void;
|
|
12
|
+
}
|
|
13
|
+
export declare const RegistrationEntryFields: FC<RegistrationEntryFieldsProps>;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=RegistrationEntryFields.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RegistrationEntryFields.d.ts","sourceRoot":"","sources":["../../../../src/atheletebridge/components/registration/RegistrationEntryFields.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAGhC,OAAO,KAAK,EAEV,kBAAkB,EAClB,oBAAoB,EACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,KAAK,sBAAsB,EAAqB,MAAM,cAAc,CAAC;AAyF9E,UAAU,4BAA4B;IACpC,MAAM,EAAE,oBAAoB,EAAE,CAAC;IAC/B,IAAI,EAAE,kBAAkB,EAAE,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,EAAE,sBAAsB,CAAC;IAC9B,QAAQ,EAAE,CAAC,IAAI,EAAE,sBAAsB,KAAK,IAAI,CAAC;CAClD;AAED,eAAO,MAAM,uBAAuB,EAAE,EAAE,CAAC,4BAA4B,CAwJpE,CAAC"}
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
import { FormField as e, fieldInputClass as t } from "../form.js";
|
|
2
|
+
import { formatMoney as n } from "../../utils/money.js";
|
|
3
|
+
import { registrationTotal as r } from "./entryRules.js";
|
|
4
|
+
import { jsx as i, jsxs as a } from "react/jsx-runtime";
|
|
5
|
+
//#region src/atheletebridge/components/registration/RegistrationEntryFields.tsx
|
|
6
|
+
var o = ({ field: n, value: r, onChange: o }) => {
|
|
7
|
+
let s = `q-${n.key}`;
|
|
8
|
+
if (n.fieldType === "CHECKBOX") return /* @__PURE__ */ a("label", {
|
|
9
|
+
className: "flex items-start gap-2.5 text-sm text-text-primary",
|
|
10
|
+
htmlFor: s,
|
|
11
|
+
children: [/* @__PURE__ */ i("input", {
|
|
12
|
+
id: s,
|
|
13
|
+
type: "checkbox",
|
|
14
|
+
checked: r === !0,
|
|
15
|
+
onChange: (e) => o(e.target.checked),
|
|
16
|
+
className: "mt-0.5 h-4 w-4 rounded border-border-seam text-action-primary-bg focus:ring-[var(--color-focus-ring)]"
|
|
17
|
+
}), /* @__PURE__ */ a("span", { children: [
|
|
18
|
+
n.label,
|
|
19
|
+
n.required && /* @__PURE__ */ i("span", {
|
|
20
|
+
className: "ml-0.5 text-status-error-text",
|
|
21
|
+
children: "*"
|
|
22
|
+
}),
|
|
23
|
+
n.helpText && /* @__PURE__ */ i("span", {
|
|
24
|
+
className: "block text-xs text-text-secondary",
|
|
25
|
+
children: n.helpText
|
|
26
|
+
})
|
|
27
|
+
] })]
|
|
28
|
+
});
|
|
29
|
+
let c = r === void 0 ? "" : String(r), l;
|
|
30
|
+
return l = n.fieldType === "LONG_TEXT" ? /* @__PURE__ */ i("textarea", {
|
|
31
|
+
id: s,
|
|
32
|
+
rows: 3,
|
|
33
|
+
className: t,
|
|
34
|
+
value: c,
|
|
35
|
+
onChange: (e) => o(e.target.value)
|
|
36
|
+
}) : n.fieldType === "SELECT" ? /* @__PURE__ */ a("select", {
|
|
37
|
+
id: s,
|
|
38
|
+
className: t,
|
|
39
|
+
value: c,
|
|
40
|
+
onChange: (e) => o(e.target.value),
|
|
41
|
+
children: [/* @__PURE__ */ i("option", {
|
|
42
|
+
value: "",
|
|
43
|
+
children: "Select…"
|
|
44
|
+
}), n.options.map((e) => /* @__PURE__ */ i("option", {
|
|
45
|
+
value: e,
|
|
46
|
+
children: e
|
|
47
|
+
}, e))]
|
|
48
|
+
}) : /* @__PURE__ */ i("input", {
|
|
49
|
+
id: s,
|
|
50
|
+
type: {
|
|
51
|
+
EMAIL: "email",
|
|
52
|
+
PHONE: "tel",
|
|
53
|
+
NUMBER: "number",
|
|
54
|
+
DATE: "date"
|
|
55
|
+
}[n.fieldType] ?? "text",
|
|
56
|
+
className: t,
|
|
57
|
+
value: c,
|
|
58
|
+
onChange: (e) => o(e.target.value)
|
|
59
|
+
}), /* @__PURE__ */ i(e, {
|
|
60
|
+
label: n.label,
|
|
61
|
+
htmlFor: s,
|
|
62
|
+
required: n.required,
|
|
63
|
+
hint: n.helpText ?? void 0,
|
|
64
|
+
children: l
|
|
65
|
+
});
|
|
66
|
+
}, s = ({ fields: s, fees: c, currency: l, waiverText: u, state: d, onChange: f }) => {
|
|
67
|
+
let p = (e, t) => f({
|
|
68
|
+
...d,
|
|
69
|
+
[e]: t
|
|
70
|
+
}), m = r(c, d.optionalFeeIds);
|
|
71
|
+
return /* @__PURE__ */ a("div", {
|
|
72
|
+
className: "space-y-6",
|
|
73
|
+
children: [
|
|
74
|
+
/* @__PURE__ */ a("section", {
|
|
75
|
+
className: "space-y-4",
|
|
76
|
+
"aria-labelledby": "reg-participant",
|
|
77
|
+
children: [
|
|
78
|
+
/* @__PURE__ */ i("h2", {
|
|
79
|
+
id: "reg-participant",
|
|
80
|
+
className: "text-base font-semibold text-text-primary",
|
|
81
|
+
children: "Participant"
|
|
82
|
+
}),
|
|
83
|
+
/* @__PURE__ */ i(e, {
|
|
84
|
+
label: "Participant name",
|
|
85
|
+
htmlFor: "participantName",
|
|
86
|
+
required: !0,
|
|
87
|
+
children: /* @__PURE__ */ i("input", {
|
|
88
|
+
id: "participantName",
|
|
89
|
+
className: t,
|
|
90
|
+
value: d.participantName,
|
|
91
|
+
onChange: (e) => p("participantName", e.target.value),
|
|
92
|
+
placeholder: "Athlete's full name"
|
|
93
|
+
})
|
|
94
|
+
}),
|
|
95
|
+
/* @__PURE__ */ a("div", {
|
|
96
|
+
className: "grid grid-cols-1 gap-4 sm:grid-cols-3",
|
|
97
|
+
children: [
|
|
98
|
+
/* @__PURE__ */ i(e, {
|
|
99
|
+
label: "Contact name",
|
|
100
|
+
htmlFor: "contactName",
|
|
101
|
+
hint: "Parent or guardian, if applicable.",
|
|
102
|
+
children: /* @__PURE__ */ i("input", {
|
|
103
|
+
id: "contactName",
|
|
104
|
+
className: t,
|
|
105
|
+
value: d.contactName,
|
|
106
|
+
onChange: (e) => p("contactName", e.target.value)
|
|
107
|
+
})
|
|
108
|
+
}),
|
|
109
|
+
/* @__PURE__ */ i(e, {
|
|
110
|
+
label: "Contact email",
|
|
111
|
+
htmlFor: "contactEmail",
|
|
112
|
+
children: /* @__PURE__ */ i("input", {
|
|
113
|
+
id: "contactEmail",
|
|
114
|
+
type: "email",
|
|
115
|
+
className: t,
|
|
116
|
+
value: d.contactEmail,
|
|
117
|
+
onChange: (e) => p("contactEmail", e.target.value)
|
|
118
|
+
})
|
|
119
|
+
}),
|
|
120
|
+
/* @__PURE__ */ i(e, {
|
|
121
|
+
label: "Contact phone",
|
|
122
|
+
htmlFor: "contactPhone",
|
|
123
|
+
children: /* @__PURE__ */ i("input", {
|
|
124
|
+
id: "contactPhone",
|
|
125
|
+
type: "tel",
|
|
126
|
+
className: t,
|
|
127
|
+
value: d.contactPhone,
|
|
128
|
+
onChange: (e) => p("contactPhone", e.target.value)
|
|
129
|
+
})
|
|
130
|
+
})
|
|
131
|
+
]
|
|
132
|
+
})
|
|
133
|
+
]
|
|
134
|
+
}),
|
|
135
|
+
s.length > 0 && /* @__PURE__ */ a("section", {
|
|
136
|
+
className: "space-y-4",
|
|
137
|
+
"aria-labelledby": "reg-questions",
|
|
138
|
+
children: [/* @__PURE__ */ i("h2", {
|
|
139
|
+
id: "reg-questions",
|
|
140
|
+
className: "text-base font-semibold text-text-primary",
|
|
141
|
+
children: "Questions"
|
|
142
|
+
}), s.map((e) => /* @__PURE__ */ i(o, {
|
|
143
|
+
field: e,
|
|
144
|
+
value: d.answers[e.key],
|
|
145
|
+
onChange: (t) => p("answers", {
|
|
146
|
+
...d.answers,
|
|
147
|
+
[e.key]: t
|
|
148
|
+
})
|
|
149
|
+
}, e.id))]
|
|
150
|
+
}),
|
|
151
|
+
c.length > 0 && /* @__PURE__ */ a("section", {
|
|
152
|
+
className: "space-y-3",
|
|
153
|
+
"aria-labelledby": "reg-fees",
|
|
154
|
+
children: [/* @__PURE__ */ i("h2", {
|
|
155
|
+
id: "reg-fees",
|
|
156
|
+
className: "text-base font-semibold text-text-primary",
|
|
157
|
+
children: "Fees"
|
|
158
|
+
}), /* @__PURE__ */ a("ul", {
|
|
159
|
+
className: "divide-y divide-border-seam rounded-lg border border-border-seam",
|
|
160
|
+
children: [c.map((e) => {
|
|
161
|
+
let t = e.feeType === "OPTIONAL";
|
|
162
|
+
return /* @__PURE__ */ a("li", {
|
|
163
|
+
className: "flex items-center justify-between gap-3 px-4 py-3",
|
|
164
|
+
children: [/* @__PURE__ */ a("label", {
|
|
165
|
+
className: "flex items-start gap-2.5 text-sm text-text-primary",
|
|
166
|
+
children: [/* @__PURE__ */ i("input", {
|
|
167
|
+
type: "checkbox",
|
|
168
|
+
checked: !t || d.optionalFeeIds.includes(e.id),
|
|
169
|
+
disabled: !t,
|
|
170
|
+
"aria-label": `${e.name}${t ? " (optional)" : " (required)"}`,
|
|
171
|
+
onChange: (t) => p("optionalFeeIds", t.target.checked ? [...d.optionalFeeIds, e.id] : d.optionalFeeIds.filter((t) => t !== e.id)),
|
|
172
|
+
className: "mt-0.5 h-4 w-4 rounded border-border-seam text-action-primary-bg focus:ring-[var(--color-focus-ring)] disabled:opacity-60"
|
|
173
|
+
}), /* @__PURE__ */ a("span", { children: [
|
|
174
|
+
e.name,
|
|
175
|
+
/* @__PURE__ */ i("span", {
|
|
176
|
+
className: "ml-1.5 text-xs text-text-secondary",
|
|
177
|
+
children: t ? "Optional" : "Required"
|
|
178
|
+
}),
|
|
179
|
+
e.description && /* @__PURE__ */ i("span", {
|
|
180
|
+
className: "block text-xs text-text-secondary",
|
|
181
|
+
children: e.description
|
|
182
|
+
})
|
|
183
|
+
] })]
|
|
184
|
+
}), /* @__PURE__ */ i("span", {
|
|
185
|
+
className: "text-sm font-medium tabular-nums text-text-primary",
|
|
186
|
+
children: n(e.amount, l)
|
|
187
|
+
})]
|
|
188
|
+
}, e.id);
|
|
189
|
+
}), /* @__PURE__ */ a("li", {
|
|
190
|
+
className: "flex items-center justify-between px-4 py-3 text-sm font-semibold text-text-primary",
|
|
191
|
+
children: [/* @__PURE__ */ i("span", { children: "Total due" }), /* @__PURE__ */ i("span", {
|
|
192
|
+
className: "tabular-nums",
|
|
193
|
+
"data-testid": "registration-total",
|
|
194
|
+
children: n(m, l)
|
|
195
|
+
})]
|
|
196
|
+
})]
|
|
197
|
+
})]
|
|
198
|
+
}),
|
|
199
|
+
u && /* @__PURE__ */ a("section", {
|
|
200
|
+
className: "space-y-3",
|
|
201
|
+
"aria-labelledby": "reg-waiver",
|
|
202
|
+
children: [
|
|
203
|
+
/* @__PURE__ */ i("h2", {
|
|
204
|
+
id: "reg-waiver",
|
|
205
|
+
className: "text-base font-semibold text-text-primary",
|
|
206
|
+
children: "Waiver"
|
|
207
|
+
}),
|
|
208
|
+
/* @__PURE__ */ i("p", {
|
|
209
|
+
className: "whitespace-pre-line rounded-lg border border-border-seam bg-bg-sunken p-4 text-sm text-text-secondary",
|
|
210
|
+
children: u
|
|
211
|
+
}),
|
|
212
|
+
/* @__PURE__ */ a("label", {
|
|
213
|
+
className: "flex items-center gap-2.5 text-sm text-text-primary",
|
|
214
|
+
children: [
|
|
215
|
+
/* @__PURE__ */ i("input", {
|
|
216
|
+
type: "checkbox",
|
|
217
|
+
checked: d.waiverAccepted,
|
|
218
|
+
onChange: (e) => p("waiverAccepted", e.target.checked),
|
|
219
|
+
className: "h-4 w-4 rounded border-border-seam text-action-primary-bg focus:ring-[var(--color-focus-ring)]"
|
|
220
|
+
}),
|
|
221
|
+
"I have read and accept the waiver",
|
|
222
|
+
/* @__PURE__ */ i("span", {
|
|
223
|
+
className: "text-status-error-text",
|
|
224
|
+
children: "*"
|
|
225
|
+
})
|
|
226
|
+
]
|
|
227
|
+
})
|
|
228
|
+
]
|
|
229
|
+
})
|
|
230
|
+
]
|
|
231
|
+
});
|
|
232
|
+
};
|
|
233
|
+
//#endregion
|
|
234
|
+
export { s as RegistrationEntryFields };
|
|
235
|
+
|
|
236
|
+
//# sourceMappingURL=RegistrationEntryFields.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RegistrationEntryFields.js","names":[],"sources":["../../../../src/atheletebridge/components/registration/RegistrationEntryFields.tsx"],"sourcesContent":["/**\n * Registration entry fields (BOFF-4135)\n * @module atheletebridge/components/registration\n *\n * Renders a registration form's participant/contact block, its questions, its\n * fees (REQUIRED always included, OPTIONAL opt-in) and its waiver. Shared by\n * the family-facing share-link page and the staff \"record a registration\"\n * page so both collect exactly what the server validates.\n */\n\nimport type { FC } from 'react';\nimport { FormField, fieldInputClass } from '../form';\nimport { formatMoney } from '../../utils/money';\nimport type {\n AthRegistrationAnswerValue,\n AthRegistrationFee,\n AthRegistrationField,\n} from '../../types/registration';\nimport { type RegistrationEntryState, registrationTotal } from './entryRules';\n\ninterface QuestionInputProps {\n field: AthRegistrationField;\n value: AthRegistrationAnswerValue | undefined;\n onChange: (value: AthRegistrationAnswerValue) => void;\n}\n\nconst QuestionInput: FC<QuestionInputProps> = ({ field, value, onChange }) => {\n const id = `q-${field.key}`;\n if (field.fieldType === 'CHECKBOX') {\n return (\n <label className=\"flex items-start gap-2.5 text-sm text-text-primary\" htmlFor={id}>\n <input\n id={id}\n type=\"checkbox\"\n checked={value === true}\n onChange={(e) => onChange(e.target.checked)}\n className=\"mt-0.5 h-4 w-4 rounded border-border-seam text-action-primary-bg focus:ring-[var(--color-focus-ring)]\"\n />\n <span>\n {field.label}\n {field.required && <span className=\"ml-0.5 text-status-error-text\">*</span>}\n {field.helpText && (\n <span className=\"block text-xs text-text-secondary\">{field.helpText}</span>\n )}\n </span>\n </label>\n );\n }\n\n const text = value === undefined ? '' : String(value);\n let control;\n if (field.fieldType === 'LONG_TEXT') {\n control = (\n <textarea\n id={id}\n rows={3}\n className={fieldInputClass}\n value={text}\n onChange={(e) => onChange(e.target.value)}\n />\n );\n } else if (field.fieldType === 'SELECT') {\n control = (\n <select\n id={id}\n className={fieldInputClass}\n value={text}\n onChange={(e) => onChange(e.target.value)}\n >\n <option value=\"\">Select…</option>\n {field.options.map((option) => (\n <option key={option} value={option}>\n {option}\n </option>\n ))}\n </select>\n );\n } else {\n const inputType: Record<string, string> = {\n EMAIL: 'email',\n PHONE: 'tel',\n NUMBER: 'number',\n DATE: 'date',\n };\n control = (\n <input\n id={id}\n type={inputType[field.fieldType] ?? 'text'}\n className={fieldInputClass}\n value={text}\n onChange={(e) => onChange(e.target.value)}\n />\n );\n }\n\n return (\n <FormField\n label={field.label}\n htmlFor={id}\n required={field.required}\n hint={field.helpText ?? undefined}\n >\n {control}\n </FormField>\n );\n};\n\ninterface RegistrationEntryFieldsProps {\n fields: AthRegistrationField[];\n fees: AthRegistrationFee[];\n currency: string;\n waiverText: string | null;\n state: RegistrationEntryState;\n onChange: (next: RegistrationEntryState) => void;\n}\n\nexport const RegistrationEntryFields: FC<RegistrationEntryFieldsProps> = ({\n fields,\n fees,\n currency,\n waiverText,\n state,\n onChange,\n}) => {\n const set = <K extends keyof RegistrationEntryState>(key: K, value: RegistrationEntryState[K]) =>\n onChange({ ...state, [key]: value });\n const total = registrationTotal(fees, state.optionalFeeIds);\n\n return (\n <div className=\"space-y-6\">\n <section className=\"space-y-4\" aria-labelledby=\"reg-participant\">\n <h2 id=\"reg-participant\" className=\"text-base font-semibold text-text-primary\">\n Participant\n </h2>\n <FormField label=\"Participant name\" htmlFor=\"participantName\" required>\n <input\n id=\"participantName\"\n className={fieldInputClass}\n value={state.participantName}\n onChange={(e) => set('participantName', e.target.value)}\n placeholder=\"Athlete's full name\"\n />\n </FormField>\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-3\">\n <FormField\n label=\"Contact name\"\n htmlFor=\"contactName\"\n hint=\"Parent or guardian, if applicable.\"\n >\n <input\n id=\"contactName\"\n className={fieldInputClass}\n value={state.contactName}\n onChange={(e) => set('contactName', e.target.value)}\n />\n </FormField>\n <FormField label=\"Contact email\" htmlFor=\"contactEmail\">\n <input\n id=\"contactEmail\"\n type=\"email\"\n className={fieldInputClass}\n value={state.contactEmail}\n onChange={(e) => set('contactEmail', e.target.value)}\n />\n </FormField>\n <FormField label=\"Contact phone\" htmlFor=\"contactPhone\">\n <input\n id=\"contactPhone\"\n type=\"tel\"\n className={fieldInputClass}\n value={state.contactPhone}\n onChange={(e) => set('contactPhone', e.target.value)}\n />\n </FormField>\n </div>\n </section>\n\n {fields.length > 0 && (\n <section className=\"space-y-4\" aria-labelledby=\"reg-questions\">\n <h2 id=\"reg-questions\" className=\"text-base font-semibold text-text-primary\">\n Questions\n </h2>\n {fields.map((field) => (\n <QuestionInput\n key={field.id}\n field={field}\n value={state.answers[field.key]}\n onChange={(value) => set('answers', { ...state.answers, [field.key]: value })}\n />\n ))}\n </section>\n )}\n\n {fees.length > 0 && (\n <section className=\"space-y-3\" aria-labelledby=\"reg-fees\">\n <h2 id=\"reg-fees\" className=\"text-base font-semibold text-text-primary\">\n Fees\n </h2>\n <ul className=\"divide-y divide-border-seam rounded-lg border border-border-seam\">\n {fees.map((fee) => {\n const optional = fee.feeType === 'OPTIONAL';\n const checked = !optional || state.optionalFeeIds.includes(fee.id);\n return (\n <li key={fee.id} className=\"flex items-center justify-between gap-3 px-4 py-3\">\n <label className=\"flex items-start gap-2.5 text-sm text-text-primary\">\n <input\n type=\"checkbox\"\n checked={checked}\n disabled={!optional}\n aria-label={`${fee.name}${optional ? ' (optional)' : ' (required)'}`}\n onChange={(e) =>\n set(\n 'optionalFeeIds',\n e.target.checked\n ? [...state.optionalFeeIds, fee.id]\n : state.optionalFeeIds.filter((feeId) => feeId !== fee.id)\n )\n }\n className=\"mt-0.5 h-4 w-4 rounded border-border-seam text-action-primary-bg focus:ring-[var(--color-focus-ring)] disabled:opacity-60\"\n />\n <span>\n {fee.name}\n <span className=\"ml-1.5 text-xs text-text-secondary\">\n {optional ? 'Optional' : 'Required'}\n </span>\n {fee.description && (\n <span className=\"block text-xs text-text-secondary\">{fee.description}</span>\n )}\n </span>\n </label>\n <span className=\"text-sm font-medium tabular-nums text-text-primary\">\n {formatMoney(fee.amount, currency)}\n </span>\n </li>\n );\n })}\n <li className=\"flex items-center justify-between px-4 py-3 text-sm font-semibold text-text-primary\">\n <span>Total due</span>\n <span className=\"tabular-nums\" data-testid=\"registration-total\">\n {formatMoney(total, currency)}\n </span>\n </li>\n </ul>\n </section>\n )}\n\n {waiverText && (\n <section className=\"space-y-3\" aria-labelledby=\"reg-waiver\">\n <h2 id=\"reg-waiver\" className=\"text-base font-semibold text-text-primary\">\n Waiver\n </h2>\n <p className=\"whitespace-pre-line rounded-lg border border-border-seam bg-bg-sunken p-4 text-sm text-text-secondary\">\n {waiverText}\n </p>\n <label className=\"flex items-center gap-2.5 text-sm text-text-primary\">\n <input\n type=\"checkbox\"\n checked={state.waiverAccepted}\n onChange={(e) => set('waiverAccepted', e.target.checked)}\n className=\"h-4 w-4 rounded border-border-seam text-action-primary-bg focus:ring-[var(--color-focus-ring)]\"\n />\n I have read and accept the waiver\n <span className=\"text-status-error-text\">*</span>\n </label>\n </section>\n )}\n </div>\n );\n};\n"],"mappings":";;;;;AA0BA,IAAM,KAAyC,EAAE,UAAO,UAAO,kBAAe;CAC5E,IAAM,IAAK,KAAK,EAAM;CACtB,IAAI,EAAM,cAAc,YACtB,OACE,kBAAC,SAAD;EAAO,WAAU;EAAqD,SAAS;YAA/E,CACE,kBAAC,SAAD;GACM;GACJ,MAAK;GACL,SAAS,MAAU;GACnB,WAAW,MAAM,EAAS,EAAE,OAAO,OAAO;GAC1C,WAAU;EACX,CAAA,GACD,kBAAC,QAAD,EAAA,UAAA;GACG,EAAM;GACN,EAAM,YAAY,kBAAC,QAAD;IAAM,WAAU;cAAgC;GAAO,CAAA;GACzE,EAAM,YACL,kBAAC,QAAD;IAAM,WAAU;cAAqC,EAAM;GAAe,CAAA;EAExE,EAAA,CAAA,CACD;;CAIX,IAAM,IAAO,MAAU,KAAA,IAAY,KAAK,OAAO,CAAK,GAChD;CA6CJ,OA5CA,AAiCE,IAjCE,EAAM,cAAc,cAEpB,kBAAC,YAAD;EACM;EACJ,MAAM;EACN,WAAW;EACX,OAAO;EACP,WAAW,MAAM,EAAS,EAAE,OAAO,KAAK;CACzC,CAAA,IAEM,EAAM,cAAc,WAE3B,kBAAC,UAAD;EACM;EACJ,WAAW;EACX,OAAO;EACP,WAAW,MAAM,EAAS,EAAE,OAAO,KAAK;YAJ1C,CAME,kBAAC,UAAD;GAAQ,OAAM;aAAG;EAAe,CAAA,GAC/B,EAAM,QAAQ,KAAK,MAClB,kBAAC,UAAD;GAAqB,OAAO;aACzB;EACK,GAFK,CAEL,CACT,CACK;MAUR,kBAAC,SAAD;EACM;EACJ,MAAM;GARR,OAAO;GACP,OAAO;GACP,QAAQ;GACR,MAAM;EAKE,EAAU,EAAM,cAAc;EACpC,WAAW;EACX,OAAO;EACP,WAAW,MAAM,EAAS,EAAE,OAAO,KAAK;CACzC,CAAA,GAKH,kBAAC,GAAD;EACE,OAAO,EAAM;EACb,SAAS;EACT,UAAU,EAAM;EAChB,MAAM,EAAM,YAAY,KAAA;YAEvB;CACQ,CAAA;AAEf,GAWa,KAA6D,EACxE,WACA,SACA,aACA,eACA,UACA,kBACI;CACJ,IAAM,KAA+C,GAAQ,MAC3D,EAAS;EAAE,GAAG;GAAQ,IAAM;CAAM,CAAC,GAC/B,IAAQ,EAAkB,GAAM,EAAM,cAAc;CAE1D,OACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,WAAD;IAAS,WAAU;IAAY,mBAAgB;cAA/C;KACE,kBAAC,MAAD;MAAI,IAAG;MAAkB,WAAU;gBAA4C;KAE3E,CAAA;KACJ,kBAAC,GAAD;MAAW,OAAM;MAAmB,SAAQ;MAAkB,UAAA;gBAC5D,kBAAC,SAAD;OACE,IAAG;OACH,WAAW;OACX,OAAO,EAAM;OACb,WAAW,MAAM,EAAI,mBAAmB,EAAE,OAAO,KAAK;OACtD,aAAY;MACb,CAAA;KACQ,CAAA;KACX,kBAAC,OAAD;MAAK,WAAU;gBAAf;OACE,kBAAC,GAAD;QACE,OAAM;QACN,SAAQ;QACR,MAAK;kBAEL,kBAAC,SAAD;SACE,IAAG;SACH,WAAW;SACX,OAAO,EAAM;SACb,WAAW,MAAM,EAAI,eAAe,EAAE,OAAO,KAAK;QACnD,CAAA;OACQ,CAAA;OACX,kBAAC,GAAD;QAAW,OAAM;QAAgB,SAAQ;kBACvC,kBAAC,SAAD;SACE,IAAG;SACH,MAAK;SACL,WAAW;SACX,OAAO,EAAM;SACb,WAAW,MAAM,EAAI,gBAAgB,EAAE,OAAO,KAAK;QACpD,CAAA;OACQ,CAAA;OACX,kBAAC,GAAD;QAAW,OAAM;QAAgB,SAAQ;kBACvC,kBAAC,SAAD;SACE,IAAG;SACH,MAAK;SACL,WAAW;SACX,OAAO,EAAM;SACb,WAAW,MAAM,EAAI,gBAAgB,EAAE,OAAO,KAAK;QACpD,CAAA;OACQ,CAAA;MACR;;IACE;;GAER,EAAO,SAAS,KACf,kBAAC,WAAD;IAAS,WAAU;IAAY,mBAAgB;cAA/C,CACE,kBAAC,MAAD;KAAI,IAAG;KAAgB,WAAU;eAA4C;IAEzE,CAAA,GACH,EAAO,KAAK,MACX,kBAAC,GAAD;KAES;KACP,OAAO,EAAM,QAAQ,EAAM;KAC3B,WAAW,MAAU,EAAI,WAAW;MAAE,GAAG,EAAM;OAAU,EAAM,MAAM;KAAM,CAAC;IAC7E,GAJM,EAAM,EAIZ,CACF,CACM;;GAGV,EAAK,SAAS,KACb,kBAAC,WAAD;IAAS,WAAU;IAAY,mBAAgB;cAA/C,CACE,kBAAC,MAAD;KAAI,IAAG;KAAW,WAAU;eAA4C;IAEpE,CAAA,GACJ,kBAAC,MAAD;KAAI,WAAU;eAAd,CACG,EAAK,KAAK,MAAQ;MACjB,IAAM,IAAW,EAAI,YAAY;MAEjC,OACE,kBAAC,MAAD;OAAiB,WAAU;iBAA3B,CACE,kBAAC,SAAD;QAAO,WAAU;kBAAjB,CACE,kBAAC,SAAD;SACE,MAAK;SACI,SAND,CAAC,KAAY,EAAM,eAAe,SAAS,EAAI,EAAE;SAOzD,UAAU,CAAC;SACX,cAAY,GAAG,EAAI,OAAO,IAAW,gBAAgB;SACrD,WAAW,MACT,EACE,kBACA,EAAE,OAAO,UACL,CAAC,GAAG,EAAM,gBAAgB,EAAI,EAAE,IAChC,EAAM,eAAe,QAAQ,MAAU,MAAU,EAAI,EAAE,CAC7D;SAEF,WAAU;QACX,CAAA,GACD,kBAAC,QAAD,EAAA,UAAA;SACG,EAAI;SACL,kBAAC,QAAD;UAAM,WAAU;oBACb,IAAW,aAAa;SACrB,CAAA;SACL,EAAI,eACH,kBAAC,QAAD;UAAM,WAAU;oBAAqC,EAAI;SAAkB,CAAA;QAEzE,EAAA,CAAA,CACD;WACP,kBAAC,QAAD;QAAM,WAAU;kBACb,EAAY,EAAI,QAAQ,CAAQ;OAC7B,CAAA,CACJ;SA9BK,EAAI,EA8BT;KAER,CAAC,GACD,kBAAC,MAAD;MAAI,WAAU;gBAAd,CACE,kBAAC,QAAD,EAAA,UAAM,YAAe,CAAA,GACrB,kBAAC,QAAD;OAAM,WAAU;OAAe,eAAY;iBACxC,EAAY,GAAO,CAAQ;MACxB,CAAA,CACJ;OACF;MACG;;GAGV,KACC,kBAAC,WAAD;IAAS,WAAU;IAAY,mBAAgB;cAA/C;KACE,kBAAC,MAAD;MAAI,IAAG;MAAa,WAAU;gBAA4C;KAEtE,CAAA;KACJ,kBAAC,KAAD;MAAG,WAAU;gBACV;KACA,CAAA;KACH,kBAAC,SAAD;MAAO,WAAU;gBAAjB;OACE,kBAAC,SAAD;QACE,MAAK;QACL,SAAS,EAAM;QACf,WAAW,MAAM,EAAI,kBAAkB,EAAE,OAAO,OAAO;QACvD,WAAU;OACX,CAAA;OAAC;OAEF,kBAAC,QAAD;QAAM,WAAU;kBAAyB;OAAO,CAAA;MAC3C;;IACA;;EAER;;AAET"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { AthRegistrationAnswerValue, AthRegistrationFee, AthRegistrationField } from '../../types/registration';
|
|
2
|
+
|
|
3
|
+
export interface RegistrationEntryState {
|
|
4
|
+
participantName: string;
|
|
5
|
+
contactName: string;
|
|
6
|
+
contactEmail: string;
|
|
7
|
+
contactPhone: string;
|
|
8
|
+
answers: Record<string, AthRegistrationAnswerValue>;
|
|
9
|
+
optionalFeeIds: string[];
|
|
10
|
+
waiverAccepted: boolean;
|
|
11
|
+
}
|
|
12
|
+
export declare const EMPTY_REGISTRATION_ENTRY: RegistrationEntryState;
|
|
13
|
+
/** Total due for the current fee selection, in minor units. */
|
|
14
|
+
export declare function registrationTotal(fees: AthRegistrationFee[], optionalFeeIds: string[]): number;
|
|
15
|
+
/**
|
|
16
|
+
* Client-side pre-check mirroring the server's required-answer rule, so the
|
|
17
|
+
* family sees what is missing before a round trip. The server stays the
|
|
18
|
+
* authority on every rule.
|
|
19
|
+
*/
|
|
20
|
+
export declare function missingRequiredAnswer(fields: AthRegistrationField[], state: RegistrationEntryState): string | null;
|
|
21
|
+
/** Strip blank answers so optional unanswered questions are simply omitted. */
|
|
22
|
+
export declare function cleanAnswers(answers: Record<string, AthRegistrationAnswerValue>): Record<string, AthRegistrationAnswerValue>;
|
|
23
|
+
//# sourceMappingURL=entryRules.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entryRules.d.ts","sourceRoot":"","sources":["../../../../src/atheletebridge/components/registration/entryRules.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,0BAA0B,EAC1B,kBAAkB,EAClB,oBAAoB,EACrB,MAAM,0BAA0B,CAAC;AAElC,MAAM,WAAW,sBAAsB;IACrC,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC;IACpD,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,eAAO,MAAM,wBAAwB,EAAE,sBAQtC,CAAC;AAEF,+DAA+D;AAC/D,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,kBAAkB,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,MAAM,CAI9F;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,oBAAoB,EAAE,EAC9B,KAAK,EAAE,sBAAsB,GAC5B,MAAM,GAAG,IAAI,CAcf;AAED,+EAA+E;AAC/E,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,0BAA0B,CAAC,GAClD,MAAM,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAM5C"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
//#region src/atheletebridge/components/registration/entryRules.ts
|
|
2
|
+
var e = {
|
|
3
|
+
participantName: "",
|
|
4
|
+
contactName: "",
|
|
5
|
+
contactEmail: "",
|
|
6
|
+
contactPhone: "",
|
|
7
|
+
answers: {},
|
|
8
|
+
optionalFeeIds: [],
|
|
9
|
+
waiverAccepted: !1
|
|
10
|
+
};
|
|
11
|
+
function t(e, t) {
|
|
12
|
+
return e.filter((e) => e.feeType === "REQUIRED" || t.includes(e.id)).reduce((e, t) => e + t.amount, 0);
|
|
13
|
+
}
|
|
14
|
+
function n(e, t) {
|
|
15
|
+
if (!t.participantName.trim()) return "Participant name";
|
|
16
|
+
for (let n of e) {
|
|
17
|
+
if (!n.required) continue;
|
|
18
|
+
let e = t.answers[n.key];
|
|
19
|
+
if (n.fieldType === "CHECKBOX" ? e !== !0 : e === void 0 || String(e).trim() === "") return n.label;
|
|
20
|
+
}
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
function r(e) {
|
|
24
|
+
return Object.fromEntries(Object.entries(e).filter(([, e]) => !(typeof e == "string" && e.trim() === "")));
|
|
25
|
+
}
|
|
26
|
+
//#endregion
|
|
27
|
+
export { e as EMPTY_REGISTRATION_ENTRY, r as cleanAnswers, n as missingRequiredAnswer, t as registrationTotal };
|
|
28
|
+
|
|
29
|
+
//# sourceMappingURL=entryRules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entryRules.js","names":[],"sources":["../../../../src/atheletebridge/components/registration/entryRules.ts"],"sourcesContent":["/**\n * Pure rules for the registration entry form (BOFF-4135).\n * @module atheletebridge/components/registration\n */\n\nimport type {\n AthRegistrationAnswerValue,\n AthRegistrationFee,\n AthRegistrationField,\n} from '../../types/registration';\n\nexport interface RegistrationEntryState {\n participantName: string;\n contactName: string;\n contactEmail: string;\n contactPhone: string;\n answers: Record<string, AthRegistrationAnswerValue>;\n optionalFeeIds: string[];\n waiverAccepted: boolean;\n}\n\nexport const EMPTY_REGISTRATION_ENTRY: RegistrationEntryState = {\n participantName: '',\n contactName: '',\n contactEmail: '',\n contactPhone: '',\n answers: {},\n optionalFeeIds: [],\n waiverAccepted: false,\n};\n\n/** Total due for the current fee selection, in minor units. */\nexport function registrationTotal(fees: AthRegistrationFee[], optionalFeeIds: string[]): number {\n return fees\n .filter((fee) => fee.feeType === 'REQUIRED' || optionalFeeIds.includes(fee.id))\n .reduce((total, fee) => total + fee.amount, 0);\n}\n\n/**\n * Client-side pre-check mirroring the server's required-answer rule, so the\n * family sees what is missing before a round trip. The server stays the\n * authority on every rule.\n */\nexport function missingRequiredAnswer(\n fields: AthRegistrationField[],\n state: RegistrationEntryState\n): string | null {\n if (!state.participantName.trim()) return 'Participant name';\n for (const field of fields) {\n if (!field.required) continue;\n const value = state.answers[field.key];\n if (\n field.fieldType === 'CHECKBOX'\n ? value !== true\n : value === undefined || String(value).trim() === ''\n ) {\n return field.label;\n }\n }\n return null;\n}\n\n/** Strip blank answers so optional unanswered questions are simply omitted. */\nexport function cleanAnswers(\n answers: Record<string, AthRegistrationAnswerValue>\n): Record<string, AthRegistrationAnswerValue> {\n return Object.fromEntries(\n Object.entries(answers).filter(\n ([, value]) => !(typeof value === 'string' && value.trim() === '')\n )\n );\n}\n"],"mappings":";AAqBA,IAAa,IAAmD;CAC9D,iBAAiB;CACjB,aAAa;CACb,cAAc;CACd,cAAc;CACd,SAAS,CAAC;CACV,gBAAgB,CAAC;CACjB,gBAAgB;AAClB;AAGA,SAAgB,EAAkB,GAA4B,GAAkC;CAC9F,OAAO,EACJ,QAAQ,MAAQ,EAAI,YAAY,cAAc,EAAe,SAAS,EAAI,EAAE,CAAC,EAC7E,QAAQ,GAAO,MAAQ,IAAQ,EAAI,QAAQ,CAAC;AACjD;AAOA,SAAgB,EACd,GACA,GACe;CACf,IAAI,CAAC,EAAM,gBAAgB,KAAK,GAAG,OAAO;CAC1C,KAAK,IAAM,KAAS,GAAQ;EAC1B,IAAI,CAAC,EAAM,UAAU;EACrB,IAAM,IAAQ,EAAM,QAAQ,EAAM;EAClC,IACE,EAAM,cAAc,aAChB,MAAU,KACV,MAAU,KAAA,KAAa,OAAO,CAAK,EAAE,KAAK,MAAM,IAEpD,OAAO,EAAM;CAEjB;CACA,OAAO;AACT;AAGA,SAAgB,EACd,GAC4C;CAC5C,OAAO,OAAO,YACZ,OAAO,QAAQ,CAAO,EAAE,QACrB,GAAG,OAAW,EAAE,OAAO,KAAU,YAAY,EAAM,KAAK,MAAM,GACjE,CACF;AACF"}
|
|
@@ -22,6 +22,7 @@ export declare class AthApiError extends Error {
|
|
|
22
22
|
}
|
|
23
23
|
/** Whether an unknown thrown value is an AI-provider outage we can explain. */
|
|
24
24
|
export declare const isAiProviderUnavailable: (error: unknown) => error is AthApiError;
|
|
25
|
+
export declare const athQuery: <TData>(query: string, variables: Record<string, unknown>, baseUrl?: string) => Promise<TData>;
|
|
25
26
|
export interface TeamFilters {
|
|
26
27
|
sport?: AthSport;
|
|
27
28
|
status?: AthTeamStatus;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAthleteBridgeApi.d.ts","sourceRoot":"","sources":["../../../src/atheletebridge/hooks/useAthleteBridgeApi.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAcH,OAAO,KAAK,EACV,WAAW,EACX,qBAAqB,EACrB,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,eAAe,EAEf,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,QAAQ,EACR,UAAU,EAEV,gBAAgB,EAChB,uBAAuB,EACvB,wBAAwB,EACxB,kBAAkB,EAClB,SAAS,EAET,eAAe,EACf,oBAAoB,EAEpB,iBAAiB,EACjB,UAAU,EACV,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,UAAU,EACV,oBAAoB,EACpB,gBAAgB,EAChB,uBAAuB,EACvB,QAAQ,EACR,WAAW,EAEX,OAAO,EACP,iBAAiB,EACjB,aAAa,EACb,qBAAqB,EACrB,kBAAkB,EAClB,aAAa,EACb,uBAAuB,EACvB,oBAAoB,EACpB,eAAe,EAChB,MAAM,UAAU,CAAC;AAMlB,kFAAkF;AAClF,eAAO,MAAM,uBAAuB,4BAA4B,CAAC;AAEjE;;;;;;;;;;GAUG;AACH,qBAAa,WAAY,SAAQ,KAAK;IACpC,mEAAmE;IACnE,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,yEAAyE;IACzE,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;gBAEvB,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAQlE;AAED,+EAA+E;AAC/E,eAAO,MAAM,uBAAuB,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,WACM,CAAC;
|
|
1
|
+
{"version":3,"file":"useAthleteBridgeApi.d.ts","sourceRoot":"","sources":["../../../src/atheletebridge/hooks/useAthleteBridgeApi.ts"],"names":[],"mappings":"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"}
|
|
@@ -983,6 +983,6 @@ var we = (t = {}) => {
|
|
|
983
983
|
});
|
|
984
984
|
};
|
|
985
985
|
//#endregion
|
|
986
|
-
export { d as AI_PROVIDER_UNAVAILABLE, f as AthApiError, J as directoryUserName, oe as useAddDrill, j as useAddMember, Oe as useAdjustPlanFromPerformance, Te as useAgentRun, we as useAgentRuns, be as useAiModelCatalog, ae as useArchiveProgram, A as useArchiveTeam, ve as useAthleteProfile, le as useAvailability, B as useBookSession, U as useCancelSession, ye as useCoachAnalytics, H as useCompleteSession, V as useConfirmSession, ne as useCreateProgram, O as useCreateTeam, me as useFile, P as useFixture, N as useFixtures, De as useGenerateProgram, K as useLogWorkout, ke as useOverrideAgentRun, G as usePerformanceMetrics, te as useProgram, Ee as useProgramAiState, ee as usePrograms, _e as useRecentActivity, L as useRecordFixtureResult, ce as useRecordMetric, de as useRemindAvailability, se as useRemoveDrill, M as useRemoveMember, I as useScheduleFixture, z as useSession, R as useSessions, ue as useSetAvailability, xe as useSetWorkspaceAiModel, Se as useSetWorkspaceAutoPilot, F as useStandings, E as useTeam, D as useTeamMembers, T as useTeams, ie as useTransitionProgram, re as useUpdateProgram, k as useUpdateTeam, pe as useUploadFile, ge as useUserDirectory, he as useUserSearch, Y as useUsersByIds, W as useWorkoutLogs, $ as useWorkspaceAiConfig };
|
|
986
|
+
export { d as AI_PROVIDER_UNAVAILABLE, f as AthApiError, p as athQuery, J as directoryUserName, oe as useAddDrill, j as useAddMember, Oe as useAdjustPlanFromPerformance, Te as useAgentRun, we as useAgentRuns, be as useAiModelCatalog, ae as useArchiveProgram, A as useArchiveTeam, ve as useAthleteProfile, le as useAvailability, B as useBookSession, U as useCancelSession, ye as useCoachAnalytics, H as useCompleteSession, V as useConfirmSession, ne as useCreateProgram, O as useCreateTeam, me as useFile, P as useFixture, N as useFixtures, De as useGenerateProgram, K as useLogWorkout, ke as useOverrideAgentRun, G as usePerformanceMetrics, te as useProgram, Ee as useProgramAiState, ee as usePrograms, _e as useRecentActivity, L as useRecordFixtureResult, ce as useRecordMetric, de as useRemindAvailability, se as useRemoveDrill, M as useRemoveMember, I as useScheduleFixture, z as useSession, R as useSessions, ue as useSetAvailability, xe as useSetWorkspaceAiModel, Se as useSetWorkspaceAutoPilot, F as useStandings, E as useTeam, D as useTeamMembers, T as useTeams, ie as useTransitionProgram, re as useUpdateProgram, k as useUpdateTeam, pe as useUploadFile, ge as useUserDirectory, he as useUserSearch, Y as useUsersByIds, W as useWorkoutLogs, $ as useWorkspaceAiConfig };
|
|
987
987
|
|
|
988
988
|
//# sourceMappingURL=useAthleteBridgeApi.js.map
|