diff --git a/app/routes/u.$identifier/results.tsx b/app/routes/u.$identifier/results.tsx
index 8e9d8766e..a38db68dc 100644
--- a/app/routes/u.$identifier/results.tsx
+++ b/app/routes/u.$identifier/results.tsx
@@ -58,7 +58,7 @@ export default function UserResultsPage() {
player
) : (
{" "}
diff --git a/app/utils/urls.ts b/app/utils/urls.ts
index aeca7a550..153f32c81 100644
--- a/app/utils/urls.ts
+++ b/app/utils/urls.ts
@@ -1,5 +1,5 @@
import slugify from "slugify";
-import type { Badge, GearType } from "~/db/types";
+import type { Badge, GearType, User } from "~/db/types";
import type { ModeShort, weaponCategories } from "~/modules/in-game-lists";
import type {
Ability,
@@ -36,11 +36,22 @@ export const COMMON_PREVIEW_IMAGE = "/img/layout/common-preview.png";
export const ERROR_GIRL_IMAGE_PATH = `/img/layout/error-girl`;
export const LOGO_PATH = `/img/layout/logo`;
-export const userPage = (discordId: string) => `/u/${discordId}`;
-export const userBuildsPage = (discordId: string) =>
- `${userPage(discordId)}/builds`;
-export const userNewBuildPage = (discordId: string) =>
- `/u/${discordId}/builds/new`;
+interface UserLinkArgs {
+ discordId: User["discordId"];
+ customUrl?: User["customUrl"];
+}
+
+export const userPage = (user: UserLinkArgs) =>
+ `/u/${user.customUrl ?? user.discordId}`;
+export const userEditProfilePage = (user: UserLinkArgs) =>
+ `${userPage(user)}/edit`;
+export const userBuildsPage = (user: UserLinkArgs) =>
+ `${userPage(user)}/builds`;
+export const userResultsPage = (user: UserLinkArgs) =>
+ `${userPage(user)}/results`;
+export const userNewBuildPage = (user: UserLinkArgs) =>
+ `${userBuildsPage(user)}/new`;
+
export const impersonateUrl = (idToLogInAs: number) =>
`/auth/impersonate?id=${idToLogInAs}`;
export const badgePage = (badgeId: number) => `${BADGES_PAGE}/${badgeId}`;
@@ -101,3 +112,7 @@ export const mySlugify = (name: string) => {
strict: true,
});
};
+
+export const isCustomUrl = (value: string) => {
+ return Number.isNaN(Number(value));
+};
diff --git a/cypress/e2e/builds.cy.ts b/cypress/e2e/builds.cy.ts
index c4da08fb3..15652156f 100644
--- a/cypress/e2e/builds.cy.ts
+++ b/cypress/e2e/builds.cy.ts
@@ -9,7 +9,7 @@ describe("user builds tab", () => {
});
it("views builds of other user", () => {
- cy.visit(userBuildsPage(ADMIN_DISCORD_ID));
+ cy.visit(userBuildsPage({ discordId: ADMIN_DISCORD_ID }));
cy.getCy("build-card").its("length").should("eq", 50);
@@ -18,7 +18,7 @@ describe("user builds tab", () => {
it("operates ability selector", () => {
cy.auth(1);
- cy.visit(userBuildsPage(ADMIN_DISCORD_ID));
+ cy.visit(userBuildsPage({ discordId: ADMIN_DISCORD_ID }));
cy.getCy("new-build-button").click();
cy.getCy("UNKNOWN-ability").its("length").should("eq", 12);
@@ -39,7 +39,7 @@ describe("user builds tab", () => {
it("adds a new build", () => {
cy.auth(1);
- cy.visit(userBuildsPage(ADMIN_DISCORD_ID));
+ cy.visit(userBuildsPage({ discordId: ADMIN_DISCORD_ID }));
cy.getCy("new-build-button").click();
cy.getCy("weapon-combobox-input").type("Luna Blaster{enter}");
@@ -62,7 +62,7 @@ describe("user builds tab", () => {
it("edits build", () => {
cy.auth(1);
- cy.visit(userBuildsPage(ADMIN_DISCORD_ID));
+ cy.visit(userBuildsPage({ discordId: ADMIN_DISCORD_ID }));
cy.getCy("edit-build-button").first().click();
@@ -77,7 +77,7 @@ describe("user builds tab", () => {
it("deletes build", () => {
cy.auth(1);
- cy.visit(userBuildsPage(ADMIN_DISCORD_ID));
+ cy.visit(userBuildsPage({ discordId: ADMIN_DISCORD_ID }));
cy.contains("Builds (50)");
cy.getCy("delete-build-button").first().click();