feat: ne montre que les évènements à venir
parent
cb5660ed19
commit
7f29cfccb6
|
@ -1,4 +1,5 @@
|
||||||
import contentful, {type Entry, type EntryFieldTypes} from "contentful";
|
import contentful, {type Entry, type EntryFieldTypes} from "contentful";
|
||||||
|
import type { Document } from '@contentful/rich-text-types';
|
||||||
|
|
||||||
export const contentfulClient = contentful.createClient({
|
export const contentfulClient = contentful.createClient({
|
||||||
space: import.meta.env.CONTENTFUL_SPACE_ID,
|
space: import.meta.env.CONTENTFUL_SPACE_ID,
|
||||||
|
@ -21,8 +22,26 @@ export interface ContentFulEvenement {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export const evenementFromContentfull = ({ fields: { nom, slug, description, date, affiche, lieu, lieuUrl, position } }: Entry<ContentFulEvenement>) => ({
|
export const evenementFromContentfull = ({
|
||||||
nom, slug, description, date, affiche, lieu, lieuUrl, position
|
fields: {
|
||||||
|
nom,
|
||||||
|
slug,
|
||||||
|
description,
|
||||||
|
date,
|
||||||
|
affiche,
|
||||||
|
lieu,
|
||||||
|
lieuUrl,
|
||||||
|
position
|
||||||
|
}
|
||||||
|
}: Entry<ContentFulEvenement>): Évènement => ({
|
||||||
|
nom: nom as string,
|
||||||
|
slug: slug as string,
|
||||||
|
description: description as Document,
|
||||||
|
date: date as ContentfulDate,
|
||||||
|
affiche,
|
||||||
|
lieu: lieu as string | undefined,
|
||||||
|
lieuUrl: lieuUrl as string | undefined,
|
||||||
|
position
|
||||||
})
|
})
|
||||||
|
|
||||||
export const sortByDate = (evenements: Entry<ContentFulEvenement>[]): Entry<ContentFulEvenement>[] => {
|
export const sortByDate = (evenements: Entry<ContentFulEvenement>[]): Entry<ContentFulEvenement>[] => {
|
||||||
|
@ -33,10 +52,28 @@ export const sortByDate = (evenements: Entry<ContentFulEvenement>[]): Entry<Cont
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type ContentfulDate = `${number}-${number}-${number}T${number}:${number}:${number}Z`
|
||||||
|
|
||||||
|
interface Évènement {
|
||||||
|
nom: string, slug: string, description: Document, date: ContentfulDate, affiche: unknown, lieu?: string | undefined, lieuUrl?: string | undefined, position: unknown
|
||||||
|
}
|
||||||
|
|
||||||
|
function estÀVenir(évènement: Évènement): boolean {
|
||||||
|
const dateEvenement = new Date(évènement.date as string);
|
||||||
|
dateEvenement.setHours(0,0,0,0);
|
||||||
|
|
||||||
|
const aujourdhui = new Date();
|
||||||
|
aujourdhui.setHours(0, 0, 0, 0);
|
||||||
|
|
||||||
|
return (dateEvenement.getTime() - aujourdhui.getTime() >= 0);
|
||||||
|
}
|
||||||
|
|
||||||
export const fetchEvenements = async () => {
|
export const fetchEvenements = async () => {
|
||||||
const entries = await contentfulClient.getEntries<ContentFulEvenement>({
|
const entries = await contentfulClient.getEntries<ContentFulEvenement>({
|
||||||
content_type: "evenement",
|
content_type: "evenement",
|
||||||
});
|
});
|
||||||
|
|
||||||
return sortByDate(entries.items).map(evenementFromContentfull)
|
return sortByDate(entries.items)
|
||||||
|
.map(evenementFromContentfull)
|
||||||
|
.filter(estÀVenir)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue