feat: antolatzailea erakusten du

This commit is contained in:
2025-09-24 18:29:02 +02:00
parent 011df14398
commit 0642066612
5 changed files with 137 additions and 0 deletions

View File

@@ -23,6 +23,7 @@ const ekintzak = defineCollection({
logo { logo {
formats formats
} }
esteka
} }
} }
hitzordua hitzordua

View File

@@ -1,8 +1,14 @@
import type { Erakundea } from "./Erakundea";
import type { ImageMedia } from "./ImageMedia"; import type { ImageMedia } from "./ImageMedia";
import type { Zikloa } from "./Zikloa"; import type { Zikloa } from "./Zikloa";
import dayjs from "dayjs"; import dayjs from "dayjs";
import "dayjs/locale/eu"; import "dayjs/locale/eu";
export interface Elkarlana {
label: string;
erakundeak?: Erakundea[];
}
export interface Ekintza { export interface Ekintza {
id: string; id: string;
slug: string; slug: string;
@@ -11,6 +17,7 @@ export interface Ekintza {
titularra: string; titularra: string;
deskribapena: string; deskribapena: string;
hitzordua: string; hitzordua: string;
elkarlana?: Elkarlana;
sarrera: { sarrera: {
label: string; label: string;
deskribapena: string; deskribapena: string;

View File

@@ -0,0 +1,7 @@
import type { ImageMedia } from "./ImageMedia";
export interface Erakundea {
izena: string;
logo?: ImageMedia;
esteka?: string;
}

View File

@@ -10,6 +10,7 @@ import { getUrl } from "models/Zikloa";
import { getImageData } from "models/ImageMedia"; import { getImageData } from "models/ImageMedia";
import "dayjs/locale/eu"; import "dayjs/locale/eu";
import Elkarlana from "./_components/Elkarlana.astro";
dayjs.locale("eu"); dayjs.locale("eu");
interface Props { interface Props {
@@ -37,6 +38,14 @@ const irudia = ekintza.mainMedia ? getImageData(ekintza.mainMedia) : null;
/> />
) )
} }
{
ekintza.elkarlana && (
<div class="elkarlana-wrapper-desktop">
<Elkarlana elkarlana={ekintza.elkarlana} />
</div>
)
}
</aside> </aside>
<article> <article>
<h1>{ekintza.izenburua}</h1> <h1>{ekintza.izenburua}</h1>
@@ -66,6 +75,14 @@ const irudia = ekintza.mainMedia ? getImageData(ekintza.mainMedia) : null;
</div> </div>
) )
} }
{
ekintza.elkarlana && (
<div class="elkarlana-wrapper-mobile">
<Elkarlana elkarlana={ekintza.elkarlana} />
</div>
)
}
</article> </article>
</main> </main>
@@ -178,8 +195,26 @@ const irudia = ekintza.mainMedia ? getImageData(ekintza.mainMedia) : null;
.deskribapena { .deskribapena {
margin-top: var(--space-04-mobile); margin-top: var(--space-04-mobile);
color: var(--marroia);
@include mediaQueries.aboveTablet { @include mediaQueries.aboveTablet {
margin-top: var(--space-05-desktop); margin-top: var(--space-05-desktop);
} }
} }
.elkarlana-wrapper-desktop {
margin-top: var(--space-07-desktop);
@include mediaQueries.belowTablet {
display: none;
}
}
.elkarlana-wrapper-mobile {
margin-top: var(--space-05-mobile);
@include mediaQueries.aboveTablet {
display: none;
}
}
</style> </style>

View File

@@ -0,0 +1,87 @@
---
import { type Elkarlana } from "models/Ekintza";
import { getImageData } from "models/ImageMedia";
interface Props {
elkarlana: Elkarlana;
}
const { elkarlana } = Astro.props;
---
<div>
<h2>{elkarlana.label}</h2>
{
elkarlana.erakundeak?.map((erakundea) => {
const irudia = erakundea.logo ? getImageData(erakundea.logo) : null;
return (
<a href={erakundea.esteka}>
{irudia && (
<img
src={irudia.src}
height={irudia.height}
width={irudia.width}
alt={irudia.alt}
/>
)}
<span>{erakundea.izena}</span>
</a>
);
})
}
</div>
<style lang="scss">
@use "../../../style/mixins/displayFonts.scss";
@use "../../../style/tools/mediaQueries.scss";
h2 {
@include displayFonts.display5;
color: var(--gorria);
margin-bottom: var(--space-03-mobile);
@include mediaQueries.aboveTablet {
margin-bottom: var(--space-05-desktop);
}
}
a {
display: inline-flex;
gap: var(--space-02-mobile);
color: var(--marroia);
text-decoration: none;
transition: opacity 0.3s ease-in;
@include displayFonts.display6;
@include mediaQueries.aboveTablet {
gap: var(--space-02-desktop);
}
&:hover {
opacity: 0.7;
}
&:not(:last-child) {
margin-bottom: var(--space-03-mobile);
@include mediaQueries.aboveTablet {
gap: var(--space-04-desktop);
}
}
}
img {
height: var(--space-08-mobile);
width: auto;
@include mediaQueries.aboveTablet {
height: var(--space-08-desktop);
}
}
</style>