Skip to content
This repository was archived by the owner on Feb 10, 2025. It is now read-only.

Commit 6446df2

Browse files
committed
refactor: reservation label values
1 parent cbc07e3 commit 6446df2

1 file changed

Lines changed: 91 additions & 59 deletions

File tree

apps/ui/pages/reservations/[id]/index.tsx

Lines changed: 91 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,14 @@ const SecondaryActions = styled(Flex)`
124124
margin-top: var(--spacing-l);
125125
`;
126126

127+
function formatReserveeName(
128+
reservation: Pick<NodeT, "reserveeFirstName" | "reserveeLastName">
129+
): string {
130+
return `${reservation.reserveeFirstName || ""} ${
131+
reservation.reserveeLastName || ""
132+
}`.trim();
133+
}
134+
127135
function ReserveeBusinessInfo({
128136
reservation,
129137
supportedFields,
@@ -140,50 +148,52 @@ function ReserveeBusinessInfo({
140148
supportedFields: Pick<ReservationMetadataFieldNode, "fieldName">[];
141149
}): JSX.Element {
142150
const { t } = useTranslation();
151+
const arr = [];
152+
if (containsField(supportedFields, "reserveeOrganisationName")) {
153+
arr.push({
154+
key: "organisationName",
155+
label: t("reservations:organisationName"),
156+
value: reservation.reserveeOrganisationName || "-",
157+
testId: "reservation__reservee-organisation-name",
158+
});
159+
}
160+
if (containsField(supportedFields, "reserveeId")) {
161+
arr.push({
162+
key: "id",
163+
label: t("reservations:reserveeId"),
164+
value: reservation.reserveeId || "-",
165+
testId: "reservation__reservee-id",
166+
});
167+
}
168+
if (containsNameField(supportedFields)) {
169+
arr.push({
170+
key: "name",
171+
label: t("reservations:contactName"),
172+
value: formatReserveeName(reservation),
173+
testId: "reservation__reservee-name",
174+
});
175+
}
176+
if (containsField(supportedFields, "reserveePhone")) {
177+
arr.push({
178+
key: "phone",
179+
label: t("reservations:contactPhone"),
180+
value: reservation.reserveePhone ?? "-",
181+
testId: "reservation__reservee-phone",
182+
});
183+
}
184+
if (containsField(supportedFields, "reserveeEmail")) {
185+
arr.push({
186+
key: "email",
187+
label: t("reservations:contactEmail"),
188+
value: reservation.reserveeEmail ?? "-",
189+
testId: "reservation__reservee-email",
190+
});
191+
}
143192
return (
144193
<>
145-
{containsField(supportedFields, "reserveeOrganisationName") && (
146-
<p>
147-
{t("reservations:organisationName")}:{" "}
148-
<span data-testid="reservation__reservee-organisation-name">
149-
{reservation.reserveeOrganisationName || "-"}
150-
</span>
151-
</p>
152-
)}
153-
{containsField(supportedFields, "reserveeId") && (
154-
<p>
155-
{t("reservations:reserveeId")}:
156-
<span data-testid="reservation__reservee-id">
157-
{reservation.reserveeId || "-"}
158-
</span>
159-
</p>
160-
)}
161-
{containsNameField(supportedFields) && (
162-
<p>
163-
{t("reservations:contactName")}:{" "}
164-
<span data-testid="reservation__reservee-name">
165-
{`${reservation.reserveeFirstName || ""} ${
166-
reservation.reserveeLastName || ""
167-
}`.trim()}
168-
</span>
169-
</p>
170-
)}
171-
{containsField(supportedFields, "reserveePhone") && (
172-
<p>
173-
{t("reservations:contactPhone")}:
174-
<span data-testid="reservation__reservee-phone">
175-
{reservation.reserveePhone}
176-
</span>
177-
</p>
178-
)}
179-
{containsField(supportedFields, "reserveeEmail") && (
180-
<p>
181-
{t("reservations:contactEmail")}:
182-
<span data-testid="reservation__reservee-email">
183-
{reservation.reserveeEmail}
184-
</span>
185-
</p>
186-
)}
194+
{arr.map(({ key, ...rest }) => (
195+
<LabelValuePair key={key} {...rest} />
196+
))}
187197
</>
188198
);
189199
}
@@ -203,9 +213,7 @@ function ReserveePersonInfo({
203213
if (containsNameField(supportedFields)) {
204214
arr.push({
205215
key: "name",
206-
value: `${reservation.reserveeFirstName || ""} ${
207-
reservation.reserveeLastName || ""
208-
}`.trim(),
216+
value: formatReserveeName(reservation),
209217
});
210218
}
211219
if (containsField(supportedFields, "reserveePhone")) {
@@ -222,12 +230,16 @@ function ReserveePersonInfo({
222230
}
223231
return (
224232
<>
225-
{arr.map(({ key, value }) => (
226-
<p key={key}>
227-
{t(`common:${key}`)}:{" "}
228-
<span data-testid={`reservation__reservee-${key}`}>{value}</span>
229-
</p>
230-
))}
233+
{arr
234+
.map(({ key, value }) => ({
235+
key,
236+
label: t(`common:${key}`),
237+
value,
238+
testId: `reservation__reservee-${key}`,
239+
}))
240+
.map(({ key, ...rest }) => (
241+
<LabelValuePair key={key} {...rest} />
242+
))}
231243
</>
232244
);
233245
}
@@ -296,18 +308,38 @@ function ReservationInfo({
296308
return (
297309
<div>
298310
<H4 as="h2">{t("reservationApplication:applicationInfo")}</H4>
299-
{fields.map((field) => (
300-
<p key={field}>
301-
{t(`reservationApplication:label.common.${field}`)}:{" "}
302-
<span data-testid={`reservation__${field}`}>
303-
{getReservationValue(reservation, field) || "-"}
304-
</span>
305-
</p>
306-
))}
311+
{fields
312+
.map((field) => ({
313+
key: field,
314+
label: t(`reservationApplication:label.common.${field}`),
315+
value: getReservationValue(reservation, field) ?? "-",
316+
testId: `reservation__${field}`,
317+
}))
318+
.map(({ key, ...rest }) => (
319+
<LabelValuePair key={key} {...rest} />
320+
))}
307321
</div>
308322
);
309323
}
310324

325+
type LabelValuePairProps = {
326+
label: string;
327+
value: string | number;
328+
testId: string;
329+
};
330+
331+
function LabelValuePair({
332+
label,
333+
value,
334+
testId,
335+
}: LabelValuePairProps): JSX.Element {
336+
return (
337+
<p>
338+
{label}: <span data-testid={testId}>{value}</span>
339+
</p>
340+
);
341+
}
342+
311343
// TODO add a state check => if state is Created redirect to the reservation funnel
312344
// if state is Cancelled, Denied, WaitingForPayment what then?
313345
function Reservation({

0 commit comments

Comments
 (0)