Skip to content

Commit 4c71852

Browse files
authored
Page params refactor (#26)
* feat: refactored page settings * fix: search params * fix: removed all errors by replacing all usePageParams * fix: lint * fix: review
1 parent db1b133 commit 4c71852

File tree

23 files changed

+211
-170
lines changed

23 files changed

+211
-170
lines changed

src/app/assos/page.tsx

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ import { createInputFilter } from '@/components/filteredSearch/InputFilter';
44
import FilteredSearch, { FiltersDataType, GenericFiltersType } from '@/components/filteredSearch/FilteredSearch';
55
import Icons from '@/icons';
66
import { ResultsList } from '@/components/ResultsList';
7-
import { usePageSettings } from '@/module/pageSettings';
87
import { useAppTranslation } from '@/lib/i18n';
98
import { useAssos } from '@/api/assos/searchAssos.hook';
9+
import Page from '@/components/utilities/Page';
1010

1111
/**
1212
* The different filters that exist.
@@ -28,12 +28,11 @@ const assoFilters = Object.freeze({
2828
}, // This one does not need a name as it will never be displayed
2929
} satisfies FiltersDataType<FilterNames, AssoFiltersType>);
3030

31-
export default function Page() {
32-
usePageSettings({});
31+
export default function AssoPage() {
3332
const { t } = useAppTranslation();
3433
const [assos, totalAssosCount, updateAssos] = useAssos();
3534
return (
36-
<div className={styles.page}>
35+
<Page className={styles.page}>
3736
<h1 className={styles.title}>{t('assos:browser')}</h1>
3837
<div className={styles.content}>
3938
<FilteredSearch<FilterNames, AssoFiltersType> filtersData={assoFilters} updateSearch={updateAssos} />
@@ -52,6 +51,6 @@ export default function Page() {
5251
/>
5352
</div>
5453
</div>
55-
</div>
54+
</Page>
5655
);
5756
}

src/app/cookies/page.tsx

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
import styles from './style.module.scss';
33
import { useAppDispatch, useAppSelector } from '@/lib/hooks';
44
import { CookieNames, setCookiesAcceptance } from '@/module/cookies';
5-
import { usePageSettings } from '@/module/pageSettings';
65
import { useEffect, useState } from 'react';
76
import { NotParameteredTranslationKey, useAppTranslation } from '@/lib/i18n';
7+
import Page from '@/components/utilities/Page';
88

99
const DEFAULT_COOKIES = Object.fromEntries(Object.values(CookieNames).map((name) => [name, true])) as {
1010
[K in CookieNames]: boolean;
@@ -23,7 +23,6 @@ const cookies = [
2323
}>;
2424

2525
export default function CookiesPage() {
26-
usePageSettings({});
2726
const dispatch = useAppDispatch();
2827
const cookiesAcceptedFromRedux = useAppSelector((state) => state.cookies.cookiesAccepted);
2928
const [cookiesAccepted, setCookiesAccepted] = useState(cookiesAcceptedFromRedux ?? DEFAULT_COOKIES);
@@ -41,7 +40,7 @@ export default function CookiesPage() {
4140
};
4241

4342
return (
44-
<div className={styles.cookiesPage}>
43+
<Page className={styles.cookiesPage}>
4544
<h1>{t('cookies:title')}</h1>
4645
<h2>{t('cookies:whatIsIt.title')}</h2>
4746
<p>{t('cookies:whatIsIt.text')}</p>
@@ -60,6 +59,6 @@ export default function CookiesPage() {
6059
))}
6160
</div>
6261
<button onClick={() => dispatch(setCookiesAcceptance(cookiesAccepted))}>{t('cookies:validate')}</button>
63-
</div>
62+
</Page>
6463
);
6564
}

src/app/layout.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import Wrapper from '@/components/utilities/Wrapper';
77
import PageSearchParams from '@/components/utilities/PageSearchParams';
88
import { Lexend } from 'next/font/google';
99
import { CookiePopup } from '@/components/CookiePopup';
10+
import PageSettingsInitializer from '@/components/utilities/PageSettingsInitializer';
1011

1112
const lexend = Lexend({
1213
weight: ['400', '600', '700', '800'],
@@ -27,6 +28,7 @@ export default function RootLayout({ children }: { children: ReactNode }) {
2728
<Providers>
2829
<Redirecter />
2930
<AutoLogin />
31+
<PageSettingsInitializer />
3032
<Suspense>
3133
<PageSearchParams />
3234
</Suspense>

src/app/login/page.tsx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,16 @@ import { CasLoginRequestDto, CasLoginResponseDto } from '@/api/auth/casLogin';
66
import { setToken } from '@/module/session';
77
import { useAppDispatch } from '@/lib/hooks';
88
import { useEffect, useState } from 'react';
9-
import { usePageLoaded, usePageSettings, useSearchParam } from '@/module/pageSettings';
9+
import { usePageLoaded, useSearchParam } from '@/module/pageSettings';
1010
import Button from '@/components/UI/Button';
1111
import { RegisterResponseDto } from '@/api/auth/register';
1212
import { CasRegisterRequestDto } from '@/api/auth/casRegister';
1313
import { useAPI } from '@/api/api';
1414
import { useAppTranslation } from '@/lib/i18n';
1515
import { Trans } from 'react-i18next';
16+
import Page from '@/components/utilities/Page';
1617

1718
export default function LoginPage() {
18-
usePageSettings({ hasNavbar: false, permissions: 'public', needsLoading: true });
1919
const { internallyLoaded, markPageLoaded } = usePageLoaded();
2020
const ticket = useSearchParam('ticket');
2121
const router = useRouter();
@@ -52,7 +52,7 @@ export default function LoginPage() {
5252
}
5353
if (registerToken) {
5454
return (
55-
<div className={styles.confirmRegister}>
55+
<Page hasNavbar={true} permissions={'public'} needsLoading={true} className={styles.confirmRegister}>
5656
<div>
5757
<Trans
5858
i18nKey={'login:legal.text'}
@@ -83,12 +83,12 @@ export default function LoginPage() {
8383
{t('login:legal.dontConnect')}
8484
</Button>
8585
</div>
86-
</div>
86+
</Page>
8787
);
8888
}
8989
return (
90-
<div id="login-page" className={styles.loginPage}>
90+
<Page hasNavbar={true} permissions={'public'} needsLoading={true} id="login-page" className={styles.loginPage}>
9191
<LoginForm />
92-
</div>
92+
</Page>
9393
);
9494
}

src/app/not-found.tsx

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
'use client';
22

3-
import { usePageSettings } from '@/module/pageSettings';
3+
import Page from '@/components/utilities/Page';
44

55
export default function PageNotFound() {
6-
usePageSettings({});
7-
return <h1>404 - Page not found</h1>;
6+
return (
7+
<Page>
8+
<h1>404 - Page not found</h1>
9+
</Page>
10+
);
811
}

src/app/page.tsx

Lines changed: 14 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,14 @@
22

33
import styles from './style.module.scss';
44
import WidgetRenderer from '@/components/homeWidgets/WidgetRenderer';
5-
import { usePageLoaded, usePageSettings } from '@/module/pageSettings';
5+
import { usePageLoaded } from '@/module/pageSettings';
66
import Button from '@/components/UI/Button';
77
import { useStateWithReference } from '@/utils/hooks';
88
import { useAppDispatch, useAppSelector } from '@/lib/hooks';
99
import { addWidget, modifyBB, removeWidget, WIDGETS } from '@/module/homepage';
1010
import { useEffect, useMemo, useState } from 'react';
1111
import { isClientSide } from '@/utils/environment';
12+
import Page from '@/components/utilities/Page';
1213

1314
function AdditionalNavbarComponent({
1415
modifyingLayout,
@@ -21,7 +22,6 @@ function AdditionalNavbarComponent({
2122
onModify: () => void;
2223
onDone: () => void;
2324
}) {
24-
//usePageSettings({});
2525
const [widgetToAdd /*, setWidgetToAdd*/] = useState<keyof typeof WIDGETS>('ueBrowserWidget');
2626
return (
2727
<>
@@ -46,22 +46,16 @@ export default function HomePage() {
4646
const { markPageLoaded } = usePageLoaded();
4747
const [isSmallScreen, setIsSmallScreen] = useState(false);
4848
const [modifyingLayout, setModifyingLayout, modifyingLayoutRef] = useStateWithReference(false);
49-
usePageSettings(
50-
{
51-
navbarAdditionalComponent: isSmallScreen
52-
? null
53-
: () => (
54-
<AdditionalNavbarComponent
55-
modifyingLayout={modifyingLayoutRef.current}
56-
onModify={() => setModifyingLayout(true)}
57-
onDone={() => setModifyingLayout(false)}
58-
onAdd={(widget) => dispatch(addWidget(widget))}
59-
/>
60-
),
61-
needsLoading: true,
62-
},
63-
[modifyingLayout, isSmallScreen],
64-
);
49+
const navbarAdditionalComponent = isSmallScreen
50+
? null
51+
: () => (
52+
<AdditionalNavbarComponent
53+
modifyingLayout={modifyingLayoutRef.current}
54+
onModify={() => setModifyingLayout(true)}
55+
onDone={() => setModifyingLayout(false)}
56+
onAdd={(widget) => dispatch(addWidget(widget))}
57+
/>
58+
);
6559
const resizeObserver = useMemo(
6660
() =>
6761
isClientSide()
@@ -82,7 +76,7 @@ export default function HomePage() {
8276
return () => resizeObserver.disconnect();
8377
}, [resizeObserver]);
8478
return (
85-
<div className={styles.page}>
79+
<Page needsLoading={true} navbarAdditionalComponent={navbarAdditionalComponent} className={styles.page}>
8680
{!isSmallScreen
8781
? widgets.map((widget, i) => {
8882
return (
@@ -103,6 +97,6 @@ export default function HomePage() {
10397
const Widget = WIDGETS[widget.widget].component;
10498
return <Widget key={widget.id} />;
10599
})}
106-
</div>
100+
</Page>
107101
);
108102
}

src/app/profile/page.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
'use client';
2-
import { usePageSettings } from '@/module/pageSettings';
2+
33
// import { useConnectedUser } from '@/module/user';
44
import { setProfilePicture } from '@/api/profile/setProfilePicture';
55
import { useAPI } from '@/api/api';
66
import { useAppTranslation } from '@/lib/i18n';
7+
import Page from '@/components/utilities/Page';
78

89
export default function ProfilePage() {
9-
usePageSettings({});
1010
// const user = useConnectedUser();
1111
const api = useAPI();
1212
const { t } = useAppTranslation();
1313
return (
14-
<div>
14+
<Page>
1515
<h1>{t('users:profile.title')}</h1>
1616
<img src="/images/default-avatar.jpg" alt="Default avatar" />
1717
<input type="file" onChange={(e) => e.target.files && setProfilePicture(api, e.target.files[0])} />
18-
</div>
18+
</Page>
1919
);
2020
}

src/app/register/page.tsx

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
'use client';
22
import RegisterForm from '@/components/auth/RegisterForm';
33
import styles from '@/app/login/style.module.scss';
4-
import { usePageSettings } from '@/module/pageSettings';
4+
import Page from '@/components/utilities/Page';
55

66
export default function RegisterPage() {
7-
usePageSettings({ hasNavbar: false, permissions: 'public' });
87
return (
9-
<div id="register-page" className={styles.loginPage}>
8+
<Page hasNavbar={false} permissions={'public'} id="register-page" className={styles.loginPage}>
109
<RegisterForm />
11-
</div>
10+
</Page>
1211
);
1312
}

src/app/ues/[code]/comments/[commentId]/page.tsx

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import EditableText from '@/components/EditableText';
1313
import { editCommentReply } from '@/api/commentReply/editCommentReply';
1414
import { useAPI } from '@/api/api';
1515
import { sendCommentReply } from '@/api/commentReply/sendCommentReply';
16-
import { usePageSettings } from '@/module/pageSettings';
16+
import Page from '@/components/utilities/Page';
1717

1818
function CommentEditorFooter(originalComment: string, onUpdate: (text: string) => void, t: TFunction) {
1919
return function CommentEditorFooter({ text, disable }: { text: string; disable: () => void }) {
@@ -32,7 +32,6 @@ function CommentEditorFooter(originalComment: string, onUpdate: (text: string) =
3232
}
3333

3434
export default function CommentDetailsPage() {
35-
usePageSettings({});
3635
const { t } = useAppTranslation();
3736
const params = useParams<{ code: string; commentId: string }>();
3837
const [comment, setComment] = useUEComment(params.commentId);
@@ -44,7 +43,7 @@ export default function CommentDetailsPage() {
4443
return;
4544
}
4645
return (
47-
<div className={styles.page}>
46+
<Page className={styles.page}>
4847
<h1>
4948
{comment.isAnonymous
5049
? t('ues:detailed.comments.resume.anonymous', {
@@ -117,6 +116,6 @@ export default function CommentDetailsPage() {
117116
{t('ues:detailed.comments.answers.answerButton')}
118117
</Button>
119118
</div>
120-
</div>
119+
</Page>
121120
);
122121
}

src/app/ues/[code]/page.tsx

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,13 @@ import TextArea from '@/components/UI/TextArea';
1717
import { useState } from 'react';
1818
import sendComment from '@/api/comment/sendComment';
1919
import { useAPI } from '@/api/api';
20-
import { usePageSettings } from '@/module/pageSettings';
2120
import useAnnals from '@/api/annals/fetchAnnals';
2221
import useAnnalMetadata from '@/api/annals/fetchMetadata';
2322
import ExamList from '@/components/ues/ExamList';
2423
import ExamSender from '@/components/ues/ExamSender';
24+
import Page from '@/components/utilities/Page';
2525

2626
export default function UEDetailsPage() {
27-
usePageSettings({});
2827
const params = useParams<{ code: string }>();
2928
const { t } = useAppTranslation();
3029
const logged = useAppSelector((state) => state.session.logged);
@@ -63,7 +62,7 @@ export default function UEDetailsPage() {
6362
};
6463

6564
return (
66-
<div className={styles.page}>
65+
<Page className={styles.page}>
6766
<h1>{ue.code}</h1>
6867
<p>{ue.name}</p>
6968
<div className={styles.divider} />
@@ -176,6 +175,6 @@ export default function UEDetailsPage() {
176175
annalTypes={annalTypes}
177176
/>
178177
)}
179-
</div>
178+
</Page>
180179
);
181180
}

0 commit comments

Comments
 (0)