diff --git a/CHANGELOG.md b/CHANGELOG.md index 4ddf0ce2..dbca388a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,10 @@ and this project adheres to ## [Unreleased] +## Added + +- 💄(frontend) add error pages #643 + ## Changed - 🛂(frontend) Restore version visibility #629 diff --git a/src/frontend/apps/e2e/__tests__/app-impress/doc-visibility.spec.ts b/src/frontend/apps/e2e/__tests__/app-impress/doc-visibility.spec.ts index 5e14408d..104a5437 100644 --- a/src/frontend/apps/e2e/__tests__/app-impress/doc-visibility.spec.ts +++ b/src/frontend/apps/e2e/__tests__/app-impress/doc-visibility.spec.ts @@ -100,7 +100,9 @@ test.describe('Doc Visibility: Restricted', () => { await page.goto(urlDoc); - await expect(page.getByRole('textbox', { name: 'password' })).toBeVisible(); + await expect( + page.getByText('Log in to access the document.'), + ).toBeVisible(); }); test('A doc is not accessible when authentified but not member.', async ({ @@ -379,7 +381,10 @@ test.describe('Doc Visibility: Authenticated', () => { await page.goto(urlDoc); await expect(page.locator('h2').getByText(docTitle)).toBeHidden(); - await expect(page.getByRole('textbox', { name: 'password' })).toBeVisible(); + + await expect( + page.getByText('Log in to access the document.'), + ).toBeVisible(); }); test('It checks a authenticated doc in read only mode', async ({ diff --git a/src/frontend/apps/impress/src/assets/icons/icon-401.png b/src/frontend/apps/impress/src/assets/icons/icon-401.png new file mode 100644 index 00000000..02c7c84d Binary files /dev/null and b/src/frontend/apps/impress/src/assets/icons/icon-401.png differ diff --git a/src/frontend/apps/impress/src/features/auth/components/ButtonLogin.tsx b/src/frontend/apps/impress/src/features/auth/components/ButtonLogin.tsx index e8b53bff..c03fbcc1 100644 --- a/src/frontend/apps/impress/src/features/auth/components/ButtonLogin.tsx +++ b/src/frontend/apps/impress/src/features/auth/components/ButtonLogin.tsx @@ -14,7 +14,11 @@ export const ButtonLogin = () => { if (!authenticated) { return ( - ); @@ -32,7 +36,7 @@ export const ProConnectButton = () => { return ( gotoLogin()} aria-label={t('Proconnect Login')} $css={css` background-color: var(--c--theme--colors--primary-text); diff --git a/src/frontend/apps/impress/src/features/auth/utils.ts b/src/frontend/apps/impress/src/features/auth/utils.ts index 766505eb..41d50cf0 100644 --- a/src/frontend/apps/impress/src/features/auth/utils.ts +++ b/src/frontend/apps/impress/src/features/auth/utils.ts @@ -16,8 +16,11 @@ export const setAuthUrl = () => { } }; -export const gotoLogin = () => { - setAuthUrl(); +export const gotoLogin = (withRedirect = true) => { + if (withRedirect) { + setAuthUrl(); + } + window.location.replace(LOGIN_URL); }; diff --git a/src/frontend/apps/impress/src/features/home/components/HomeBanner.tsx b/src/frontend/apps/impress/src/features/home/components/HomeBanner.tsx index 39da6ec4..61fdacc3 100644 --- a/src/frontend/apps/impress/src/features/home/components/HomeBanner.tsx +++ b/src/frontend/apps/impress/src/features/home/components/HomeBanner.tsx @@ -74,7 +74,7 @@ export default function HomeBanner() { ) : ( + + + ); +}; + +Page.getLayout = function getLayout(page: ReactElement) { + return {page}; +}; + +export default Page; diff --git a/src/frontend/apps/impress/src/pages/docs/[id]/index.tsx b/src/frontend/apps/impress/src/pages/docs/[id]/index.tsx index 7c3e359b..1462c16a 100644 --- a/src/frontend/apps/impress/src/pages/docs/[id]/index.tsx +++ b/src/frontend/apps/impress/src/pages/docs/[id]/index.tsx @@ -5,7 +5,7 @@ import { useRouter } from 'next/router'; import { useEffect, useState } from 'react'; import { Box, Text, TextErrors } from '@/components'; -import { gotoLogin } from '@/features/auth'; +import { setAuthUrl } from '@/features/auth'; import { DocEditor } from '@/features/docs/doc-editor'; import { Doc, @@ -110,7 +110,8 @@ const DocPage = ({ id }: DocProps) => { } if (error.status === 401) { - gotoLogin(); + setAuthUrl(); + void replace(`/401`); return null; }