From f818715a45626662fc6f4ffd43e87126ca74e5aa Mon Sep 17 00:00:00 2001 From: Anthony LC Date: Wed, 7 Feb 2024 15:31:13 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=9A(app-desk)=20change=20next=20router?= =?UTF-8?q?=20to=20pages?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 2 routers exists in Next.js, "app" router and "page" router. The "app" router has a bug introduced in Next.js 13.4.14, which is not fixed yet. For the moment we cannot use dynamic routes with "app" router with an SPA. As advised by the Next.js team, we migrated to the "pages" router. --- src/frontend/apps/desk/next.config.js | 7 ++++ .../apps/desk/{src/app => public}/favicon.ico | Bin .../pages.test.tsx} | 2 +- .../apps/desk/src/app/contacts/page.tsx | 7 ---- .../apps/desk/src/app/favorite/page.tsx | 7 ---- .../apps/desk/src/app/groups/page.tsx | 7 ---- src/frontend/apps/desk/src/app/help/page.tsx | 7 ---- src/frontend/apps/desk/src/app/layout.tsx | 37 ------------------ src/frontend/apps/desk/src/app/page.tsx | 35 ----------------- .../apps/desk/src/app/recent/page.tsx | 7 ---- .../apps/desk/src/app/teams/layout.tsx | 27 ------------- .../apps/desk/src/features/header/Header.tsx | 1 - .../apps/desk/src/pages/AppProvider.tsx | 26 ++++++++++++ .../InnerLayout.tsx => pages/MainLayout.tsx} | 6 +-- src/frontend/apps/desk/src/pages/_app.tsx | 28 +++++++++++++ .../apps/desk/src/pages/_document.tsx | 15 +++++++ .../apps/desk/src/pages/contacts/index.tsx | 16 ++++++++ .../apps/desk/src/pages/favorite/index.tsx | 16 ++++++++ .../apps/desk/src/{app => pages}/globals.css | 0 .../apps/desk/src/pages/groups/index.tsx | 16 ++++++++ src/frontend/apps/desk/src/pages/index.tsx | 29 ++++++++++++++ .../apps/desk/src/pages/recent/index.tsx | 16 ++++++++ .../apps/desk/src/pages/teams/TeamLayout.tsx | 29 ++++++++++++++ .../page.tsx => pages/teams/create.tsx} | 17 +++++--- src/frontend/apps/desk/src/types/next.ts | 5 +++ 25 files changed, 219 insertions(+), 144 deletions(-) rename src/frontend/apps/desk/{src/app => public}/favicon.ico (100%) rename src/frontend/apps/desk/src/{app/__tests__/page.test.tsx => __tests__/pages.test.tsx} (93%) delete mode 100644 src/frontend/apps/desk/src/app/contacts/page.tsx delete mode 100644 src/frontend/apps/desk/src/app/favorite/page.tsx delete mode 100644 src/frontend/apps/desk/src/app/groups/page.tsx delete mode 100644 src/frontend/apps/desk/src/app/help/page.tsx delete mode 100644 src/frontend/apps/desk/src/app/layout.tsx delete mode 100644 src/frontend/apps/desk/src/app/page.tsx delete mode 100644 src/frontend/apps/desk/src/app/recent/page.tsx delete mode 100644 src/frontend/apps/desk/src/app/teams/layout.tsx create mode 100644 src/frontend/apps/desk/src/pages/AppProvider.tsx rename src/frontend/apps/desk/src/{app/InnerLayout.tsx => pages/MainLayout.tsx} (67%) create mode 100644 src/frontend/apps/desk/src/pages/_app.tsx create mode 100644 src/frontend/apps/desk/src/pages/_document.tsx create mode 100644 src/frontend/apps/desk/src/pages/contacts/index.tsx create mode 100644 src/frontend/apps/desk/src/pages/favorite/index.tsx rename src/frontend/apps/desk/src/{app => pages}/globals.css (100%) create mode 100644 src/frontend/apps/desk/src/pages/groups/index.tsx create mode 100644 src/frontend/apps/desk/src/pages/index.tsx create mode 100644 src/frontend/apps/desk/src/pages/recent/index.tsx create mode 100644 src/frontend/apps/desk/src/pages/teams/TeamLayout.tsx rename src/frontend/apps/desk/src/{app/teams/create/page.tsx => pages/teams/create.tsx} (65%) create mode 100644 src/frontend/apps/desk/src/types/next.ts diff --git a/src/frontend/apps/desk/next.config.js b/src/frontend/apps/desk/next.config.js index f7946eb8d..d8ac8ba81 100644 --- a/src/frontend/apps/desk/next.config.js +++ b/src/frontend/apps/desk/next.config.js @@ -1,6 +1,13 @@ /** @type {import('next').NextConfig} */ const nextConfig = { output: 'export', + images: { + unoptimized: true, + }, + compiler: { + // Enables the styled-components SWC transform + styledComponents: true, + }, webpack(config) { // Grab the existing rule that handles SVG imports const fileLoaderRule = config.module.rules.find((rule) => diff --git a/src/frontend/apps/desk/src/app/favicon.ico b/src/frontend/apps/desk/public/favicon.ico similarity index 100% rename from src/frontend/apps/desk/src/app/favicon.ico rename to src/frontend/apps/desk/public/favicon.ico diff --git a/src/frontend/apps/desk/src/app/__tests__/page.test.tsx b/src/frontend/apps/desk/src/__tests__/pages.test.tsx similarity index 93% rename from src/frontend/apps/desk/src/app/__tests__/page.test.tsx rename to src/frontend/apps/desk/src/__tests__/pages.test.tsx index ee91d1f3e..1daa77a76 100644 --- a/src/frontend/apps/desk/src/app/__tests__/page.test.tsx +++ b/src/frontend/apps/desk/src/__tests__/pages.test.tsx @@ -3,7 +3,7 @@ import { render, screen } from '@testing-library/react'; import { AppWrapper } from '@/tests/utils'; -import Page from '../page'; +import Page from '../pages'; describe('Page', () => { it('checks Page rendering', () => { diff --git a/src/frontend/apps/desk/src/app/contacts/page.tsx b/src/frontend/apps/desk/src/app/contacts/page.tsx deleted file mode 100644 index 9717564ab..000000000 --- a/src/frontend/apps/desk/src/app/contacts/page.tsx +++ /dev/null @@ -1,7 +0,0 @@ -'use client'; - -import { Box } from '@/components'; - -export default function Contacts() { - return Contacts; -} diff --git a/src/frontend/apps/desk/src/app/favorite/page.tsx b/src/frontend/apps/desk/src/app/favorite/page.tsx deleted file mode 100644 index 1949c2b70..000000000 --- a/src/frontend/apps/desk/src/app/favorite/page.tsx +++ /dev/null @@ -1,7 +0,0 @@ -'use client'; - -import { Box } from '@/components'; - -export default function Favorite() { - return Favorite; -} diff --git a/src/frontend/apps/desk/src/app/groups/page.tsx b/src/frontend/apps/desk/src/app/groups/page.tsx deleted file mode 100644 index 79620d181..000000000 --- a/src/frontend/apps/desk/src/app/groups/page.tsx +++ /dev/null @@ -1,7 +0,0 @@ -'use client'; - -import { Box } from '@/components'; - -export default function Groups() { - return Groups; -} diff --git a/src/frontend/apps/desk/src/app/help/page.tsx b/src/frontend/apps/desk/src/app/help/page.tsx deleted file mode 100644 index 0fc13f7d2..000000000 --- a/src/frontend/apps/desk/src/app/help/page.tsx +++ /dev/null @@ -1,7 +0,0 @@ -'use client'; - -import { Box } from '@/components'; - -export default function Help() { - return Help; -} diff --git a/src/frontend/apps/desk/src/app/layout.tsx b/src/frontend/apps/desk/src/app/layout.tsx deleted file mode 100644 index 891a77818..000000000 --- a/src/frontend/apps/desk/src/app/layout.tsx +++ /dev/null @@ -1,37 +0,0 @@ -'use client'; - -import { CunninghamProvider } from '@openfun/cunningham-react'; -import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; -import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; - -import { useCunninghamTheme } from '@/cunningham'; -import { Auth } from '@/features/auth/Auth'; -import '@/i18n/initI18n'; - -import InnerLayout from './InnerLayout'; -import './globals.css'; - -const queryClient = new QueryClient(); - -export default function RootLayout({ - children, -}: { - children: React.ReactNode; -}) { - const { theme } = useCunninghamTheme(); - - return ( - - - - - - - {children} - - - - - - ); -} diff --git a/src/frontend/apps/desk/src/app/page.tsx b/src/frontend/apps/desk/src/app/page.tsx deleted file mode 100644 index 7e0470dea..000000000 --- a/src/frontend/apps/desk/src/app/page.tsx +++ /dev/null @@ -1,35 +0,0 @@ -'use client'; - -import { Button } from '@openfun/cunningham-react'; -import { useTranslation } from 'react-i18next'; -import styled from 'styled-components'; - -import { Box, StyledLink } from '@/components'; -import { useCunninghamTheme } from '@/cunningham'; -import { Panel } from '@/features/teams'; - -const StyledButton = styled(Button)` - width: fit-content; -`; - -export default function Home() { - const { t } = useTranslation(); - const { colorsTokens } = useCunninghamTheme(); - - return ( - - - - - {t('Create a new team')} - - - - ); -} diff --git a/src/frontend/apps/desk/src/app/recent/page.tsx b/src/frontend/apps/desk/src/app/recent/page.tsx deleted file mode 100644 index fbddbcc91..000000000 --- a/src/frontend/apps/desk/src/app/recent/page.tsx +++ /dev/null @@ -1,7 +0,0 @@ -'use client'; - -import { Box } from '@/components'; - -export default function Recent() { - return Recent; -} diff --git a/src/frontend/apps/desk/src/app/teams/layout.tsx b/src/frontend/apps/desk/src/app/teams/layout.tsx deleted file mode 100644 index b55616927..000000000 --- a/src/frontend/apps/desk/src/app/teams/layout.tsx +++ /dev/null @@ -1,27 +0,0 @@ -'use client'; - -import { PropsWithChildren } from 'react'; - -import { Box } from '@/components'; -import { useCunninghamTheme } from '@/cunningham'; -import { Panel } from '@/features/teams'; - -export default function Layout({ children }: PropsWithChildren) { - const { colorsTokens } = useCunninghamTheme(); - - return ( - - - - {children} - - - ); -} diff --git a/src/frontend/apps/desk/src/features/header/Header.tsx b/src/frontend/apps/desk/src/features/header/Header.tsx index 0c84049e1..6c40f5c85 100644 --- a/src/frontend/apps/desk/src/features/header/Header.tsx +++ b/src/frontend/apps/desk/src/features/header/Header.tsx @@ -95,7 +95,6 @@ export const Header = () => { priority src={IconMyAccount} alt={t(`Profile picture`)} - unoptimized /> ); -} +}; + +Page.getLayout = function getLayout(page: ReactElement) { + return {page}; +}; + +export default Page; diff --git a/src/frontend/apps/desk/src/types/next.ts b/src/frontend/apps/desk/src/types/next.ts new file mode 100644 index 000000000..1a85844d8 --- /dev/null +++ b/src/frontend/apps/desk/src/types/next.ts @@ -0,0 +1,5 @@ +import type { NextPage } from 'next'; + +export type NextPageWithLayout = NextPage & { + getLayout?: (page: React.ReactElement) => React.ReactNode; +};