diff --git a/src/components/GrilleSpectaclesPassés.astro b/src/components/GrilleSpectaclesPassés.astro new file mode 100644 index 0000000..2ea1586 --- /dev/null +++ b/src/components/GrilleSpectaclesPassés.astro @@ -0,0 +1,147 @@ +--- +const { evenements, limite = 6, afficherLienVoirTout = true } = Astro.props; +const evenementsAffiches = evenements.slice(0, limite); +--- + +{evenementsAffiches.length > 0 && ( +
+
+ {evenementsAffiches.map(evenement => ( + evenement.affiche && ( + + {`Affiche +
+ {evenement.nom} + {new Date(evenement.date).toLocaleDateString("fr-FR")} +
+
+ ) + ))} +
+ {afficherLienVoirTout && evenements.length > limite && ( + Voir tous nos spectacles passés → + )} +
+)} + + \ No newline at end of file diff --git a/src/lib/contentful.ts b/src/lib/contentful.ts index 70f5774..f61bdd0 100644 --- a/src/lib/contentful.ts +++ b/src/lib/contentful.ts @@ -18,6 +18,7 @@ export interface ContentFulEvenement { lieuUrl: EntryFieldTypes.Text, position: EntryFieldTypes.Location, affiche: EntryFieldTypes.AssetLink, + album?: EntryFieldTypes.Text, } } @@ -31,7 +32,8 @@ export const evenementFromContentfull = ({ affiche, lieu, lieuUrl, - position + position, + album } }: Entry): Évènement => ({ nom: nom as string, @@ -41,7 +43,8 @@ export const evenementFromContentfull = ({ affiche, lieu: lieu as string | undefined, lieuUrl: lieuUrl as string | undefined, - position + position, + album: album as string | undefined }) export const sortByDate = (evenements: Entry[]): Entry[] => { @@ -55,7 +58,7 @@ export const sortByDate = (evenements: Entry[]): Entry= 0); } +function estPassé(évènement: Évènement): boolean { + return !estÀVenir(évènement); +} + export const fetchEvenements = async () => { const entries = await contentfulClient.getEntries({ content_type: "evenement", @@ -78,6 +85,17 @@ export const fetchEvenements = async () => { .filter(estÀVenir) } +export const fetchEvenementsPassés = async () => { + const entries = await contentfulClient.getEntries({ + content_type: "evenement", + }); + + return sortByDate(entries.items) + .map(evenementFromContentfull) + .filter(estPassé) + .reverse() // Afficher les plus récents en premier +} + export const fetchEvenement = async (slug: string) => { const entries = await contentfulClient.getEntries({ content_type: "evenement", diff --git a/src/pages/evenements.astro b/src/pages/evenements.astro new file mode 100644 index 0000000..13693be --- /dev/null +++ b/src/pages/evenements.astro @@ -0,0 +1,67 @@ +--- +import Layout from '../layouts/Layout.astro'; +import { fetchEvenementsPassés } from "../lib/contentful"; +import GrilleSpectaclesPassés from "../components/GrilleSpectaclesPassés.astro"; + +export const prerender = false + +const evenementsPassés = await fetchEvenementsPassés() +--- + + +
+ + Logo + +

+ Nos spectacles passés +

+ + {evenementsPassés.length > 0 ? ( +
+

+ Découvrez les spectacles que nous avons eu le plaisir de jouer ! +

+ +
+ ) : ( +
+

+ Aucun spectacle passé pour le moment. Revenez bientôt ! +

+
+ )} +
+
+ + \ No newline at end of file diff --git a/src/pages/evenements/[slug].astro b/src/pages/evenements/[slug].astro index d38b8cb..d471396 100644 --- a/src/pages/evenements/[slug].astro +++ b/src/pages/evenements/[slug].astro @@ -9,22 +9,39 @@ export const prerender = false const {slug} = Astro.params -const { nom, description, date, lieu, lieuUrl, affiche } = await fetchEvenement(slug) +const { nom, description, date, lieu, lieuUrl, affiche, album } = await fetchEvenement(slug) const Wrapper = lieuUrl ? 'a' : 'div' + ---

{nom}

{affiche && `Affiche} - -
- à {lieu} -
- { - description &&
- } - +
+ +
+ à {lieu} +
+ { + description &&
+ } + + + {album && ( +
+
+ +
+
+ )} +
@@ -42,29 +59,75 @@ const Wrapper = lieuUrl ? 'a' : 'div'