Skip to content
Snippets Groups Projects

feat: add lab cards

Merged Moritz Stückler requested to merge feat/lab-cards into main
Files
10
+ 76
0
---
import MiniCardLinkWrapper from "./MiniCardLinkWrapper";
import LabsAccordionWrapper from "./LabsAccordionWrapper";
import { getCollection } from "astro:content";
interface Props {
names: string[];
name: string;
}
const { names = [], name } = Astro.props;
const combinedNames = [...names, name].filter(Boolean);
const labs = await getCollection("labs", (lab) =>
combinedNames.includes(lab.id.split("/").at(-1))
);
const accordionClasses = "fc-bg-grey-100 !fc-border-b-0";
---
<div class="fc-flex fc-flex-col fc-gap-y-6">
{
labs?.map(({ data: lab }) => (
<div class="fc-flex fc-flex-col fc-gap-y-2">
<MiniCardLinkWrapper
name={lab.name}
subtitle={lab.website}
socialMedia={lab.socialMedia}
tags={lab.tags.map((tag, i) => ({
id: lab.name + i,
title: tag,
}))}
image={{
alt: `Standort von ${lab.name}`,
src: `https://api.mapbox.com/styles/v1/mapbox/light-v11/static/pin-s+ee2f45(${lab.lng},${lab.lat})/${lab.lng},${lab.lat},13,0/180x180@2x?access_token=${import.meta.env.PUBLIC_MAPBOX_TOKEN}&logo=false`,
}}
rightImage={{ src: lab.logo, alt: `Logo von ${lab.name}` }}
className={"md:fc-max-w-none not-prose"}
/>
{lab.hours && (
<LabsAccordionWrapper
className={accordionClasses}
title="Öffnungszeiten"
icon="Time"
contentHtml={lab.hours}
/>
)}
{lab.directions && (
<LabsAccordionWrapper
className={accordionClasses}
title="Anfahrt"
icon="Milestone"
contentHtml={lab.directions}
/>
)}
{lab.fees && (
<LabsAccordionWrapper
className={accordionClasses}
title="Preise & Gebühren"
icon="CurrencyEuro"
contentHtml={lab.fees}
/>
)}
{lab.machines && (
<LabsAccordionWrapper
className={accordionClasses}
icon="Settings"
title="Maschinen & Geräte"
contentHtml={lab.machines}
/>
)}
</div>
))
}
</div>
Loading