diff --git a/package/src/get-params.ts b/package/src/get-params.ts index 0b66517..ad42c07 100644 --- a/package/src/get-params.ts +++ b/package/src/get-params.ts @@ -13,21 +13,16 @@ export const getParams = () => { const cleanUrlPathname = normalizePathname(urlPathname); const cleanPagePath = normalizePagePath(pagePath); - const pagePathParts = cleanPagePath - .split("/") - .slice(1) - .filter((part) => !part.match(/^(\([^)]+\)|\@.+)$/)); + const pagePathParts = cleanPagePath.split("/"); const pagePathInterceptedParts = normalizeInterceptingRoutes(pagePathParts); - const pathnameParts = cleanUrlPathname.split("/").slice(1); + const pathnameParts = cleanUrlPathname.split("/"); - const isRootPage = cleanUrlPathname === "" && cleanPagePath === ""; const isNotFoundPage = pagePath.match(/\/_not-found\/?$/); const isValidCatchALl = cleanPagePath.match(/\/\[\.\.\.[^\]]+\]/) && pathnameParts.length >= pagePathInterceptedParts.length; const isValidOptionalCatchALl = cleanPagePath.match(/\/\[\[\.\.\.[^\]]+\]\]/) && pathnameParts.length >= pagePathInterceptedParts.length - 1; const isCorrectMatched = - isRootPage || isNotFoundPage || pagePathInterceptedParts.length === pathnameParts.length || isValidCatchALl || diff --git a/package/src/utils.ts b/package/src/utils.ts index a3ee7ab..779c9f4 100644 --- a/package/src/utils.ts +++ b/package/src/utils.ts @@ -8,7 +8,8 @@ export const normalizePathname = (pathname: string) => { export const normalizePagePath = (pagePath: string) => { const cleanPagePath = pagePath && new URL(pagePath, "http://n").pathname; const pagePathWithoutFileType = cleanPagePath?.replace(/(\/page|\/_not-found)$/, ""); - return pagePathWithoutFileType || "/"; + const pagePathWithoutGroups = pagePathWithoutFileType.replace(/\/(\([^)]+\)|\@.+)/g, ""); + return pagePathWithoutGroups || "/"; }; export const parseSegments = (pagePathParts: string[], pathnameParts: string[]) => { diff --git a/tests/nextjs-app/app/(frontend)/(corporate)/groups/groups.spec.ts b/tests/nextjs-app/app/(frontend)/(corporate)/groups/groups.spec.ts new file mode 100644 index 0000000..d128d06 --- /dev/null +++ b/tests/nextjs-app/app/(frontend)/(corporate)/groups/groups.spec.ts @@ -0,0 +1,14 @@ +import { test, expect } from "@playwright/test"; + +test("should return correct page params and pathname", async ({ page }) => { + await page.goto("/groups"); + page.waitForSelector("#groups-page"); + + const pathname = await page.$("#get-pathname"); + const pathnameRow = await pathname?.textContent(); + expect(pathnameRow).toEqual("/groups"); + + const params = await page.$("#get-params"); + const paramsRow = await params?.textContent(); + expect(paramsRow && JSON.parse(paramsRow)).toEqual({}); +}); diff --git a/tests/nextjs-app/app/(frontend)/(corporate)/groups/page.tsx b/tests/nextjs-app/app/(frontend)/(corporate)/groups/page.tsx new file mode 100644 index 0000000..697df35 --- /dev/null +++ b/tests/nextjs-app/app/(frontend)/(corporate)/groups/page.tsx @@ -0,0 +1,23 @@ +import { getPathname } from "@nimpl/getters/get-pathname"; +import { getParams } from "@nimpl/getters/get-params"; +import { NamespaceServerContext } from "../../../../components/NamespaceServerContext"; +import BlockWithContext from "../../../../components/BlockWithContext"; +import Nav from "../../../../components/Nav"; + +export default function Page() { + const pathname = getPathname(); + const params = getParams(); + + return ( +
+
+ ); +}