added seeder for legacy apge and added the legacy page
This commit is contained in:
@@ -46,14 +46,12 @@ import { getServerEnv } from "~/lib/env.server";
|
||||
import { buildBreadcrumbJsonLd, buildMeta } from "~/lib/seo";
|
||||
|
||||
import type { Route } from "./+types/contact";
|
||||
import { Accordion, type AccordionItem } from "./_page-kit/accordion";
|
||||
import type { CmsContactPage } from "./_page-kit/cms-types";
|
||||
import { list, loadSingle, toImage } from "./_page-kit/cms.server";
|
||||
import { pageCopy } from "./_page-kit/copy";
|
||||
import { routeLocale } from "./_page-kit/locale";
|
||||
import { RichText } from "./_page-kit/rich-text";
|
||||
import {
|
||||
EmptyState,
|
||||
PageHero,
|
||||
PageSection,
|
||||
Prose,
|
||||
@@ -74,7 +72,6 @@ export async function loader({ params }: Route.LoaderArgs) {
|
||||
populate: {
|
||||
hero: { populate: { media: true, ctas: true } },
|
||||
socialLinks: true,
|
||||
consortiumContacts: true,
|
||||
seo: { populate: { ogImage: true } },
|
||||
},
|
||||
});
|
||||
@@ -95,15 +92,6 @@ export async function loader({ params }: Route.LoaderArgs) {
|
||||
href: link.href,
|
||||
isExternal: link.isExternal ?? true,
|
||||
})),
|
||||
consortiumContacts: list(page?.consortiumContacts).map((address) => ({
|
||||
id: String(address.id ?? address.organisation),
|
||||
organisation: address.organisation,
|
||||
addressLine: address.addressLine ?? null,
|
||||
city: address.city ?? null,
|
||||
country: address.country ?? null,
|
||||
email: address.email ?? null,
|
||||
phone: address.phone ?? null,
|
||||
})),
|
||||
seo: {
|
||||
title: page?.seo?.metaTitle ?? null,
|
||||
description: page?.seo?.metaDescription ?? null,
|
||||
@@ -362,8 +350,7 @@ export default function Contact({
|
||||
loaderData,
|
||||
actionData,
|
||||
}: Route.ComponentProps) {
|
||||
const { locale, hero, intro, generalEmail, socialLinks, consortiumContacts } =
|
||||
loaderData;
|
||||
const { locale, hero, intro, generalEmail, socialLinks } = loaderData;
|
||||
const t = createTranslator(locale);
|
||||
const copy = pageCopy(locale).contact;
|
||||
|
||||
@@ -390,32 +377,6 @@ export default function Contact({
|
||||
(message): message is string => typeof message === "string",
|
||||
);
|
||||
|
||||
/* The draft draws the consortium addresses as a disclosure list, which the
|
||||
approved draft also calls for ("optional accordion"). The answers are
|
||||
Markdown because that is what <Accordion /> renders; every value in them
|
||||
comes from the CMS, and the whole list is replaced by the localised empty
|
||||
state while the addresses are still "TBD". */
|
||||
const consortiumItems: readonly AccordionItem[] = consortiumContacts.map(
|
||||
(contact) => {
|
||||
const place = [contact.city, contact.country].filter(Boolean).join(", ");
|
||||
|
||||
return {
|
||||
id: contact.id,
|
||||
question: contact.organisation,
|
||||
answer: [
|
||||
contact.addressLine,
|
||||
place === "" ? null : place,
|
||||
contact.email ? `[${contact.email}](mailto:${contact.email})` : null,
|
||||
contact.phone
|
||||
? `[${contact.phone}](tel:${contact.phone.replace(/\s+/g, "")})`
|
||||
: null,
|
||||
]
|
||||
.filter((line): line is string => typeof line === "string")
|
||||
.join("\n\n"),
|
||||
};
|
||||
},
|
||||
);
|
||||
|
||||
/* A failed submit re-renders the page with the summary at the top of the
|
||||
form. Screen-reader users are left wherever they were, and keyboard users
|
||||
below the fold, so focus is moved onto the summary itself - it is
|
||||
@@ -664,24 +625,6 @@ export default function Contact({
|
||||
</dl>
|
||||
</div>
|
||||
|
||||
{/* CONSORTIUM CONTACTS - "TBD" in the draft, so the CMS owns them.
|
||||
The draft labels the list with an accent eyebrow rather than a
|
||||
section heading, so the heading takes the label role. */}
|
||||
<div className="sh-reveal flex flex-col gap-sm">
|
||||
<h2
|
||||
id="contact-consortium-heading"
|
||||
className="label-md uppercase text-[var(--text-accent)]"
|
||||
>
|
||||
{copy.consortiumHeading}
|
||||
</h2>
|
||||
|
||||
{consortiumItems.length > 0 ? (
|
||||
<Accordion items={consortiumItems} defaultOpenIndex={null} />
|
||||
) : (
|
||||
<EmptyState message={copy.consortiumEmpty} />
|
||||
)}
|
||||
</div>
|
||||
|
||||
{/* EU VISIBILITY - the funding note the draft prints at the foot of
|
||||
this column. The emblem and the statement come from the shared
|
||||
badge, so the wording and the artwork stay contractual. */}
|
||||
|
||||
Reference in New Issue
Block a user