From bfcef5b832fc54694a0c4847c62bff470f9a16f6 Mon Sep 17 00:00:00 2001 From: Chuma McPhoy Date: Thu, 4 Jul 2024 15:19:17 +0200 Subject: [PATCH] chore: create a utils/languages file --- app/[lang]/(live)/error.tsx | 7 +++--- constants/languages.ts | 40 --------------------------------- middleware.ts | 3 ++- middlewares/authRequired.ts | 2 +- middlewares/cmsContent.ts | 2 +- middlewares/currentWebLogin.ts | 3 ++- middlewares/currentWebLogout.ts | 3 ++- middlewares/myPages.ts | 2 +- middlewares/utils.ts | 3 +-- middlewares/webView.ts | 2 +- server/routers/hotels/output.ts | 2 +- utils/languages.ts | 16 +++++++++++++ 12 files changed, 31 insertions(+), 54 deletions(-) create mode 100644 utils/languages.ts diff --git a/app/[lang]/(live)/error.tsx b/app/[lang]/(live)/error.tsx index 10bb4875e..1b1970475 100644 --- a/app/[lang]/(live)/error.tsx +++ b/app/[lang]/(live)/error.tsx @@ -4,10 +4,11 @@ import { useParams, usePathname } from "next/navigation" import { useEffect } from "react" import { useIntl } from "react-intl" -import { findLang } from "@/constants/languages" import { login } from "@/constants/routes/handleAuth" import { SESSION_EXPIRED } from "@/server/errors/trpc" +import { findLang } from "@/utils/languages" + import styles from "./error.module.css" import { LangParams } from "@/types/params" @@ -34,9 +35,7 @@ export default function Error({ const lang = findLang(pathname) return ( -
+
{lang}: {intl.formatMessage({ id: "Something went wrong!" })}
diff --git a/constants/languages.ts b/constants/languages.ts index d3fbfae27..8652df7a6 100644 --- a/constants/languages.ts +++ b/constants/languages.ts @@ -64,43 +64,3 @@ export const languageSelect = [ { label: "Norwegian", value: "No" }, { label: "Swedish", value: "Sv" }, ] - -// -- Lang util functions -- - -export function findLang(pathname: string) { - return Object.values(Lang).find( - (l) => pathname.startsWith(`/${l}/`) || pathname === `/${l}` - ) -} - -/** - * Helper function to convert langs in uppercase or capitalized format (e.g. the Hotel endpoint) - * to to Lang enum. - */ -export function fromUppercaseToLangEnum(lang: string): Lang | undefined { - const lowerCaseLang = lang.toLowerCase() - return Object.values(Lang).find((l) => l === lowerCaseLang) -} - -/** - * Helper function to convert Lang enum to uppercase - * Needed for certtain API (e.g. the Hotel endpoint). - */ -export const toUppercaseLang = (lang: Lang): string => { - switch (lang) { - case Lang.en: - return "En" - case Lang.sv: - return "Sv" - case Lang.no: - return "No" - case Lang.fi: - return "Fi" - case Lang.da: - return "Da" - case Lang.de: - return "De" - default: - throw new Error("Invalid language") - } -} diff --git a/middleware.ts b/middleware.ts index 299820632..1596231cf 100644 --- a/middleware.ts +++ b/middleware.ts @@ -1,6 +1,6 @@ import { NextMiddleware, NextResponse } from "next/server" -import { findLang, Lang } from "./constants/languages" +import { Lang } from "./constants/languages" import * as authRequired from "./middlewares/authRequired" import * as bookingFlow from "./middlewares/bookingFlow" import * as cmsContent from "./middlewares/cmsContent" @@ -9,6 +9,7 @@ import * as currentWebLogout from "./middlewares/currentWebLogout" import * as handleAuth from "./middlewares/handleAuth" import * as myPages from "./middlewares/myPages" import * as webView from "./middlewares/webView" +import { findLang } from "./utils/languages" export const middleware: NextMiddleware = async (request, event) => { const lang = findLang(request.nextUrl.pathname) diff --git a/middlewares/authRequired.ts b/middlewares/authRequired.ts index 268316d41..e103804c1 100644 --- a/middlewares/authRequired.ts +++ b/middlewares/authRequired.ts @@ -1,12 +1,12 @@ import { NextResponse } from "next/server" -import { findLang } from "@/constants/languages" import { authRequired } from "@/constants/routes/authRequired" import { login } from "@/constants/routes/handleAuth" import { env } from "@/env/server" import { internalServerError } from "@/server/errors/next" import { auth } from "@/auth" +import { findLang } from "@/utils/languages" import type { NextMiddleware } from "next/server" diff --git a/middlewares/cmsContent.ts b/middlewares/cmsContent.ts index 96b591793..1e9d74a96 100644 --- a/middlewares/cmsContent.ts +++ b/middlewares/cmsContent.ts @@ -1,9 +1,9 @@ import { NextResponse } from "next/server" -import { findLang } from "@/constants/languages" import { notFound } from "@/server/errors/next" import { resolve as resolveEntry } from "@/utils/entry" +import { findLang } from "@/utils/languages" import { removeTrailingSlash } from "@/utils/url" import { getDefaultRequestHeaders } from "./utils" diff --git a/middlewares/currentWebLogin.ts b/middlewares/currentWebLogin.ts index be95c440f..49c664be3 100644 --- a/middlewares/currentWebLogin.ts +++ b/middlewares/currentWebLogin.ts @@ -1,8 +1,9 @@ import { NextResponse } from "next/server" -import { findLang } from "@/constants/languages" import { badRequest } from "@/server/errors/next" +import { findLang } from "@/utils/languages" + import type { NextMiddleware } from "next/server" import type { MiddlewareMatcher } from "@/types/middleware" diff --git a/middlewares/currentWebLogout.ts b/middlewares/currentWebLogout.ts index 0b0263837..43fba7669 100644 --- a/middlewares/currentWebLogout.ts +++ b/middlewares/currentWebLogout.ts @@ -1,9 +1,10 @@ import { NextResponse } from "next/server" -import { findLang } from "@/constants/languages" import { env } from "@/env/server" import { badRequest, internalServerError } from "@/server/errors/next" +import { findLang } from "@/utils/languages" + import type { NextMiddleware } from "next/server" import type { MiddlewareMatcher } from "@/types/middleware" diff --git a/middlewares/myPages.ts b/middlewares/myPages.ts index c39fab3ab..3a1af1897 100644 --- a/middlewares/myPages.ts +++ b/middlewares/myPages.ts @@ -1,11 +1,11 @@ import { NextResponse } from "next/server" -import { findLang } from "@/constants/languages" import { myPages, overview } from "@/constants/routes/myPages" import { env } from "@/env/server" import { internalServerError, notFound } from "@/server/errors/next" import { resolve as resolveEntry } from "@/utils/entry" +import { findLang } from "@/utils/languages" import { getDefaultRequestHeaders } from "./utils" diff --git a/middlewares/utils.ts b/middlewares/utils.ts index 3daf5eb43..a96045ed6 100644 --- a/middlewares/utils.ts +++ b/middlewares/utils.ts @@ -1,5 +1,4 @@ -import { findLang } from "@/constants/languages" - +import { findLang } from "@/utils/languages" import { removeTrailingSlash } from "@/utils/url" import type { NextRequest } from "next/server" diff --git a/middlewares/webView.ts b/middlewares/webView.ts index d97d0f74c..c5e2a505b 100644 --- a/middlewares/webView.ts +++ b/middlewares/webView.ts @@ -1,6 +1,5 @@ import { type NextMiddleware, NextResponse } from "next/server" -import { findLang } from "@/constants/languages" import { loyaltyPagesWebviews, myPagesWebviews, @@ -12,6 +11,7 @@ import { badRequest, notFound } from "@/server/errors/next" import { decryptData } from "@/utils/aes" import { resolve as resolveEntry } from "@/utils/entry" +import { findLang } from "@/utils/languages" import { getDefaultRequestHeaders } from "./utils" diff --git a/server/routers/hotels/output.ts b/server/routers/hotels/output.ts index 86e9859e1..dbeac7bc9 100644 --- a/server/routers/hotels/output.ts +++ b/server/routers/hotels/output.ts @@ -1,6 +1,6 @@ import { z } from "zod" -import { fromUppercaseToLangEnum } from "@/constants/languages" +import { fromUppercaseToLangEnum } from "@/utils/languages" const RatingsSchema = z.object({ tripAdvisor: z.object({ diff --git a/utils/languages.ts b/utils/languages.ts new file mode 100644 index 000000000..bace608b3 --- /dev/null +++ b/utils/languages.ts @@ -0,0 +1,16 @@ +import { Lang } from "@/constants/languages" + +export function findLang(pathname: string) { + return Object.values(Lang).find( + (l) => pathname.startsWith(`/${l}/`) || pathname === `/${l}` + ) +} + +/** + * Helper function to convert langs in uppercase or capitalized format (e.g. the Hotel endpoint) + * to to Lang enum. + */ +export function fromUppercaseToLangEnum(lang: string): Lang | undefined { + const lowerCaseLang = lang.toLowerCase() + return Object.values(Lang).find((l) => l === lowerCaseLang) +}