diff --git a/declarations/i18next.d.ts b/declarations/i18next.d.ts index a25acbd1b..a54e1c106 100644 --- a/declarations/i18next.d.ts +++ b/declarations/i18next.d.ts @@ -5,11 +5,17 @@ import common from "~/public/locales/en/common.json"; import errors from "~/public/locales/en/errors.json"; import homepage from "~/public/locales/en/homepage.json"; -declare module "next-i18next" { - interface Resources { - homepage: typeof homepage; - app: typeof app; - common: typeof common; - errors: typeof errors; +interface I18nNamespaces { + homepage: typeof homepage; + app: typeof app; + common: typeof common; + errors: typeof errors; +} + +declare module "i18next" { + interface CustomTypeOptions { + defaultNS: "common"; + resources: I18nNamespaces; + returnNull: false; } } diff --git a/next-i18next.config.js b/next-i18next.config.js index 42ef2a32a..6c11870bb 100644 --- a/next-i18next.config.js +++ b/next-i18next.config.js @@ -28,4 +28,5 @@ module.exports = { }, reloadOnPrerender: process.env.NODE_ENV === "development", localePath: path.resolve("./public/locales"), + returnNull: false, }; diff --git a/package.json b/package.json index 45be878ba..2a7847bed 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ "lodash": "^4.17.21", "nanoid": "^4.0.0", "next": "13.0.6", - "next-i18next": "^12.1.0", + "next-i18next": "^13.0.3", "next-seo": "^5.15.0", "nodemailer": "^6.7.2", "postcss": "^8.4.21", diff --git a/src/components/auth/login-form.tsx b/src/components/auth/login-form.tsx index f1a93c6ef..9055c6ee2 100644 --- a/src/components/auth/login-form.tsx +++ b/src/components/auth/login-form.tsx @@ -65,6 +65,7 @@ const VerifyCode: React.VoidFunctionComponent<{ b: , a: ( { e.preventDefault(); diff --git a/src/utils/auth.ts b/src/utils/auth.ts index be46fb9d9..39582b805 100644 --- a/src/utils/auth.ts +++ b/src/utils/auth.ts @@ -124,6 +124,7 @@ export function withSessionSsr( const res = await composedHandler(ctx); if ("props" in res) { return { + ...res, props: { ...res.props, trpcState: ssg.dehydrate(), diff --git a/tests/authentication.spec.ts b/tests/authentication.spec.ts index 9afdcd510..5d2008477 100644 --- a/tests/authentication.spec.ts +++ b/tests/authentication.spec.ts @@ -1,4 +1,4 @@ -import { expect, test } from "@playwright/test"; +import { expect, Page, test } from "@playwright/test"; import { load } from "cheerio"; import smtpTester from "smtp-tester"; @@ -92,7 +92,7 @@ test.describe.serial(() => { ).toBeVisible(); }); - test("user login", async ({ page }) => { + const login = async (page: Page) => { await page.goto("/login"); await page.getByPlaceholder("jessie.smith@email.com").type(testUserEmail); @@ -104,7 +104,15 @@ test.describe.serial(() => { await page.getByPlaceholder("Enter your 6-digit code").type(code); await page.getByText("Continue").click(); + }; + test("user login", async ({ page }) => { + await login(page); await expect(page.getByText("Your details")).toBeVisible(); }); + + test("logged in user can't access login page", async ({ page }) => { + await login(page); + await expect(page).toHaveURL("/profile"); + }); }); diff --git a/yarn.lock b/yarn.lock index e397ac181..b86bd4072 100644 --- a/yarn.lock +++ b/yarn.lock @@ -997,7 +997,7 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/runtime@^7.10.2", "@babel/runtime@^7.16.3", "@babel/runtime@^7.17.2": +"@babel/runtime@^7.10.2", "@babel/runtime@^7.16.3": version "7.17.8" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.8.tgz#3e56e4aff81befa55ac3ac6a0967349fd1c5bca2" integrity sha512-dQpEpK0O9o6lj6oPu0gRDbbnk+4LeHlNcBpspf6Olzt3GIX4P1lWF1gS+pHLDFlaJvbR6q7jCfQ08zA4QJBnmA== @@ -1011,7 +1011,7 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/runtime@^7.13.8", "@babel/runtime@^7.18.6", "@babel/runtime@^7.18.9": +"@babel/runtime@^7.13.8", "@babel/runtime@^7.18.6": version "7.20.1" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.1.tgz#1148bb33ab252b165a06698fde7576092a78b4a9" integrity sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg== @@ -3963,17 +3963,10 @@ i18n-unused@^0.12.0: esm "^3.2.25" ts-import "^2.0.39" -i18next-fs-backend@^1.1.5: - version "1.2.0" - resolved "https://registry.yarnpkg.com/i18next-fs-backend/-/i18next-fs-backend-1.2.0.tgz#c498c68c8e6a8ae5ed59bea5e5392a11991de696" - integrity sha512-pUx3AcgXCbur0jpFA7U67Z2RJflAcIi698Y8VL+phdOqUchahxriV3Cs+M6UkPNQSS/zPEzWLfdJ8EgjB7HVxg== - -i18next@^21.9.1: - version "21.10.0" - resolved "https://registry.yarnpkg.com/i18next/-/i18next-21.10.0.tgz#85429af55fdca4858345d0e16b584ec29520197d" - integrity sha512-YeuIBmFsGjUfO3qBmMOc0rQaun4mIpGKET5WDwvu8lU7gvwpcariZLNtL0Fzj+zazcHUrlXHiptcFhBMFaxzfg== - dependencies: - "@babel/runtime" "^7.17.2" +i18next-fs-backend@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/i18next-fs-backend/-/i18next-fs-backend-2.1.1.tgz#07c6393be856c5a398e3dfc1257bf8439841cd89" + integrity sha512-FTnj+UmNgT3YRml5ruRv0jMZDG7odOL/OP5PF5mOqvXud2vHrPOOs68Zdk6iqzL47cnnM0ZVkK2BAvpFeDJToA== i18next@^22.4.9: version "22.4.9" @@ -4691,18 +4684,16 @@ natural-compare@^1.4.0: resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= -next-i18next@^12.1.0: - version "12.1.0" - resolved "https://registry.yarnpkg.com/next-i18next/-/next-i18next-12.1.0.tgz#70926fbe966bc4750d2f68573307bfe36eadba46" - integrity sha512-rhos/PVULmZPdC0jpec2MDBQMXdGZ3+Mbh/tZfrDtjgnVN3ucdq7k8BlwsJNww6FnqC8AC31n6dSYuqVzYsGsw== +next-i18next@^13.0.3: + version "13.0.3" + resolved "https://registry.yarnpkg.com/next-i18next/-/next-i18next-13.0.3.tgz#f0d5194c9ec3657d114c0c491ba7fbb031788fe1" + integrity sha512-7AA8J6WbkxRBtSf1+97LSAE7btxWZHsBIJEJ3FuTSBgYtpRiO5NGjcb8XbNAlz6yGU0TtS+yZE+/Wu83KhIT1Q== dependencies: - "@babel/runtime" "^7.18.9" + "@babel/runtime" "^7.20.6" "@types/hoist-non-react-statics" "^3.3.1" core-js "^3" hoist-non-react-statics "^3.3.2" - i18next "^21.9.1" - i18next-fs-backend "^1.1.5" - react-i18next "^11.18.4" + i18next-fs-backend "^2.1.0" next-seo@^5.15.0: version "5.15.0" @@ -5278,14 +5269,6 @@ react-hot-toast@^2.4.0: dependencies: goober "^2.1.10" -react-i18next@^11.18.4: - version "11.18.6" - resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-11.18.6.tgz#e159c2960c718c1314f1e8fcaa282d1c8b167887" - integrity sha512-yHb2F9BiT0lqoQDt8loZ5gWP331GwctHz9tYQ8A2EIEUu+CcEdjBLQWli1USG3RdWQt3W+jqQLg/d4rrQR96LA== - dependencies: - "@babel/runtime" "^7.14.5" - html-parse-stringify "^3.0.1" - react-i18next@^12.0.0: version "12.0.0" resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-12.0.0.tgz#634015a2c035779c5736ae4c2e5c34c1659753b1"