Skip to content

Commit 0ee551c

Browse files
committed
wip: Ajoute la desérialisation des actus sur les pages
1 parent 4f6ccfd commit 0ee551c

File tree

5 files changed

+58
-12
lines changed

5 files changed

+58
-12
lines changed

src/pages/actualites/index.page.test.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { mockUseRouter } from '~/client/components/useRouter.mock';
99
import { mockScrollIntoView, mockSmallScreen } from '~/client/components/window.mock';
1010
import { DependenciesProvider } from '~/client/context/dependenciesContainer.context';
1111
import { aManualAnalyticsService } from '~/client/services/analytics/analytics.service.fixture';
12-
import ActualitesPage, { getStaticProps } from '~/pages/actualites/index.page';
12+
import { ActualitesPage, getStaticProps } from '~/pages/actualites/index.page';
1313
import { anActualite, anActualiteList } from '~/server/actualites/domain/actualite.fixture';
1414
import { createFailure, createSuccess } from '~/server/errors/either';
1515
import { ErreurMetier } from '~/server/errors/erreurMetier.types';

src/pages/actualites/index.page.tsx

+25-3
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,38 @@ import useAnalytics from '~/client/hooks/useAnalytics';
1010
import { Actualite } from '~/server/actualites/domain/actualite';
1111
import { isFailure } from '~/server/errors/either';
1212
import { dependencies } from '~/server/start';
13+
import { ISODateTime } from '~/shared/ISODateTime';
1314

1415
import analytics from './index.analytics';
1516
import styles from './index.module.scss';
1617

18+
type SerializedActualite = Omit<Actualite, 'dateMiseAJour'> & {
19+
dateMiseAJour?: ISODateTime
20+
}
21+
interface SerializedActualitesPageProps {
22+
cartesActualites: Array<SerializedActualite>
23+
}
1724
interface ActualitesPageProps {
1825
cartesActualites: Array<Actualite>
1926
}
2027

2128
const MAX_VISIBLE_ACTUALITES = 3;
22-
export default function ActualitesPage({ cartesActualites }: ActualitesPageProps) {
29+
30+
function deserialize(actualites: Array<SerializedActualite>): Array<Actualite> {
31+
return actualites.map((actualite) => ({
32+
...actualite,
33+
dateMiseAJour: actualite.dateMiseAJour ? new Date(actualite.dateMiseAJour) : undefined,
34+
}));
35+
}
36+
function serialize(cartesActualitesResponse: Array<Actualite>): Array<SerializedActualite> {
37+
return JSON.parse(JSON.stringify(cartesActualitesResponse));
38+
}
39+
40+
export default function Deserialize(props: SerializedActualitesPageProps) {
41+
const deserializedActus = deserialize(props.cartesActualites);
42+
return <ActualitesPage cartesActualites={deserializedActus} />;
43+
}
44+
export function ActualitesPage({ cartesActualites }: ActualitesPageProps) {
2345
useAnalytics(analytics);
2446

2547
const articleCardList = useMemo(() => {
@@ -54,7 +76,7 @@ export default function ActualitesPage({ cartesActualites }: ActualitesPageProps
5476
);
5577
}
5678

57-
export async function getStaticProps(): Promise<GetStaticPropsResult<ActualitesPageProps>> {
79+
export async function getStaticProps(): Promise<GetStaticPropsResult<SerializedActualitesPageProps>> {
5880
const isEspaceJeuneVisible = process.env.NEXT_PUBLIC_OLD_ESPACE_JEUNE_FEATURE === '0';
5981
if (!isEspaceJeuneVisible) {
6082
return { notFound: true };
@@ -68,7 +90,7 @@ export async function getStaticProps(): Promise<GetStaticPropsResult<ActualitesP
6890

6991
return {
7092
props: {
71-
cartesActualites: JSON.parse(JSON.stringify(cartesActualitesResponse.result)),
93+
cartesActualites: serialize(cartesActualitesResponse.result),
7294
},
7395
revalidate: dependencies.cmsDependencies.duréeDeValiditéEnSecondes(),
7496
};

src/pages/espace-jeune/index.page.test.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { mockUseRouter } from '~/client/components/useRouter.mock';
1010
import { mockScrollIntoView, mockSmallScreen } from '~/client/components/window.mock';
1111
import { DependenciesProvider } from '~/client/context/dependenciesContainer.context';
1212
import { aManualAnalyticsService } from '~/client/services/analytics/analytics.service.fixture';
13-
import EspaceJeunePage, { getStaticProps } from '~/pages/espace-jeune/index.page';
13+
import { EspaceJeunePage, getStaticProps } from '~/pages/espace-jeune/index.page';
1414
import { anActualite, anActualiteList } from '~/server/actualites/domain/actualite.fixture';
1515
import { aServiceJeune, aServiceJeuneList } from '~/server/services-jeunes/domain/servicesJeunes.fixture';
1616

src/pages/espace-jeune/index.page.tsx

+29-5
Original file line numberDiff line numberDiff line change
@@ -10,21 +10,45 @@ import { LightHero, LightHeroPrimaryText, LightHeroSecondaryText } from '~/clien
1010
import SeeMoreItemList from '~/client/components/ui/SeeMore/SeeMoreItemList';
1111
import useAnalytics from '~/client/hooks/useAnalytics';
1212
import analytics from '~/pages/espace-jeune/index.analytics';
13+
import { Accueil } from '~/pages/index.page';
1314
import { Actualite } from '~/server/actualites/domain/actualite';
1415
import { isFailure } from '~/server/errors/either';
1516
import { ServiceJeune } from '~/server/services-jeunes/domain/servicesJeunes';
1617
import { dependencies } from '~/server/start';
18+
import { ISODateTime } from '~/shared/ISODateTime';
1719

1820
import styles from './index.module.scss';
1921

20-
interface EspaceJeunePageProps {
21-
cartesActualites: Actualite[]
22+
type EspaceJeunePageProps = {
23+
cartesActualites: Array<Actualite>
2224
serviceJeuneList: Array<ServiceJeune>
2325
}
26+
type SerializedActualite = Omit<Actualite, 'dateMiseAJour'> & {
27+
dateMiseAJour?: ISODateTime
28+
}
29+
type SerializedEspaceJeunePageProps = {
30+
cartesActualites: Array<SerializedActualite>
31+
serviceJeuneList: Array<ServiceJeune>
32+
}
33+
2434

2535
const MAX_VISIBLE_ACTUALITES_LENGTH = 3;
36+
function deserialize(actualites: Array<SerializedActualite>): Array<Actualite> {
37+
return actualites.map((actualite) => ({
38+
...actualite,
39+
dateMiseAJour: actualite.dateMiseAJour ? new Date(actualite.dateMiseAJour) : undefined,
40+
}));
41+
}
42+
function serialize(cartesActualitesResponse: unknown): Record<string, unknown> {
43+
return JSON.parse(JSON.stringify(cartesActualitesResponse));
44+
}
45+
46+
export default function Deserialize(props: SerializedEspaceJeunePageProps) {
47+
const deserializedActus = deserialize(props.cartesActualites);
48+
return <Accueil actualites={deserializedActus} />;
49+
}
2650

27-
export default function EspaceJeunePage({ cartesActualites, serviceJeuneList }: EspaceJeunePageProps) {
51+
export function EspaceJeunePage({ cartesActualites, serviceJeuneList }: EspaceJeunePageProps) {
2852
useAnalytics(analytics);
2953

3054
const articleCardList: React.ReactNode[] = useMemo(() => {
@@ -87,8 +111,8 @@ export async function getStaticProps(): Promise<GetStaticPropsResult<EspaceJeune
87111

88112
return {
89113
props: {
90-
cartesActualites: JSON.parse(JSON.stringify(cartesActualitesResponse.result)),
91-
serviceJeuneList: JSON.parse(JSON.stringify(serviceJeuneList.result)),
114+
cartesActualites: serialize(cartesActualitesResponse.result),
115+
serviceJeuneList: serialize(serviceJeuneList.result),
92116
},
93117
revalidate: dependencies.cmsDependencies.duréeDeValiditéEnSecondes(),
94118
};

src/pages/index.page.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ interface CardContent {
2727
}
2828

2929
type SerializedActualite = Omit<Actualite, 'dateMiseAJour'> & {
30-
dateMiseAJour: ISODateTime
30+
dateMiseAJour?: ISODateTime
3131
}
3232
interface SerializedAccueilPageProps {
3333
actualites: Array<SerializedActualite>
@@ -38,7 +38,7 @@ interface AccueilPageProps {
3838
function deserialize(actualites: Array<SerializedActualite>): Array<Actualite> {
3939
return actualites.map((actualite) => ({
4040
...actualite,
41-
dateMiseAJour: new Date(actualite.dateMiseAJour),
41+
dateMiseAJour: actualite.dateMiseAJour ? new Date(actualite.dateMiseAJour) : undefined,
4242
}));
4343
}
4444
function serialize(cartesActualitesResponse: Array<Actualite>): Array<SerializedActualite> {

0 commit comments

Comments
 (0)