import type { Metadata } from "next"; import dynamic from "next/dynamic"; import { Suspense } from "react"; import messages from "../../../messages/en/index"; import { getAllBlogPosts } from "../../../lib/content"; import PageHeader from "../../components/type/PageHeader"; import CaseStudy from "../../components/cards/CaseStudy"; import UseCasesOrgs from "../../components/sections/UseCasesOrgs"; import QuoteBlock from "../../components/sections/QuoteBlock"; import Groups from "../../components/sections/Groups"; import type { GroupsItem } from "../../components/sections/Groups"; import TripleStep from "../../components/type/TripleStep"; import TripleTextBlock from "../../components/type/TripleTextBlock"; import type { TripleTextBlockColumn } from "../../components/type/TripleTextBlock"; import AskOrganizer from "../../components/sections/AskOrganizer"; import { MarketingRuleStackSection } from "../_components/MarketingRuleStackSection"; import { getAssetPath, vectorMarkPath } from "../../../lib/assetUtils"; const RelatedArticles = dynamic( () => import("../../components/sections/RelatedArticles"), { loading: () => (
), ssr: true, }, ); function asArray(value: unknown): T[] { return Array.isArray(value) ? value : []; } /** Matches `pages.useCases.groups.items` order ↔ `public/assets/vector/*.svg`. */ const USE_CASES_GROUP_VECTOR_SLUGS = [ "worker-coop", "mutual-aid", "open-source", "dao", ] as const; const USE_CASES_RELATED_SENTINEL_SLUG = "__use-cases-page__"; export async function generateMetadata(): Promise { const title = messages.metadata.useCases.title; const description = messages.metadata.useCases.description; const keywords = messages.metadata.useCases.keywords; return { title, description, keywords, openGraph: { title, description, type: "website", siteName: "CommunityRule", }, }; } export default function UseCasesPage() { const page = messages.pages.useCases; const tripleColumns = asArray(page.tripleTextBlock.columns); const groupItemsRaw = asArray<{ title: string; description: string }>( page.groups.items, ); const groupItems: GroupsItem[] = groupItemsRaw.map((item, index) => ({ ...item, icon: ( /* eslint-disable-next-line @next/next/no-img-element -- small vector marks from `public/assets/vector` */ ), })); const askOrganizerData = { title: page.askOrganizer.title, subtitle: page.askOrganizer.subtitle, buttonText: page.askOrganizer.buttonText, }; const allPosts = getAllBlogPosts(); const relatedPosts = allPosts.slice(0, 8); const slugOrder = allPosts.map((p) => p.slug); const tripleStepSteps = asArray<{ title: string; body: string }>( page.tripleStep.steps, ); return (
} >
); }