From 19db04506c3c8a047e39817a81dd3f6eadd10f56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=A9=E4=BB=93?= Date: Wed, 13 May 2026 14:25:03 +0800 Subject: [PATCH] fix: add company greeting fallback --- frontend/app/app/company/page.tsx | 5 ++++- frontend/components/AppNav.tsx | 3 ++- frontend/lib/display-names.ts | 14 ++++++++++++++ frontend/tests/display-names.test.ts | 16 ++++++++++++++++ 4 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 frontend/lib/display-names.ts create mode 100644 frontend/tests/display-names.test.ts diff --git a/frontend/app/app/company/page.tsx b/frontend/app/app/company/page.tsx index dc45734..af4ba5a 100644 --- a/frontend/app/app/company/page.tsx +++ b/frontend/app/app/company/page.tsx @@ -10,6 +10,7 @@ import { ReleaseModeBadge } from "@/components/ReleaseModePicker"; import { SubmissionsListModal } from "@/components/SubmissionsListModal"; import { useAuth } from "@/lib/auth"; import { fetchBountiesByCompany } from "@/lib/data"; +import { companyGreetingName } from "@/lib/display-names"; import type { Bounty, Company } from "@/lib/types"; type Filter = "all" | "open" | "reviewing" | "approved" | "rejected" | "paid" | "closed"; @@ -103,7 +104,9 @@ function CompanyDashboardInner() {
Company dashboard
-

Welcome back, {company.name}

+

+ Welcome back, {companyGreetingName(company.name)} +

{company.description}

diff --git a/frontend/components/AppNav.tsx b/frontend/components/AppNav.tsx index b891675..8cc2b3c 100644 --- a/frontend/components/AppNav.tsx +++ b/frontend/components/AppNav.tsx @@ -9,6 +9,7 @@ import { useAuth, usePrivyBackend } from "@/lib/auth-context"; import { useWallets } from "@privy-io/react-auth/solana"; import { mockWallet, setWallet } from "@/lib/store"; import { getConnection } from "@/lib/solana"; +import { companyDisplayName } from "@/lib/display-names"; import { Avatar } from "./Avatar"; import { DepositModal } from "./DepositModal"; import { WithdrawModal } from "./WithdrawModal"; @@ -35,7 +36,7 @@ export function AppNav() { if (!user) return null; const isCompany = user.role === "company"; - const displayName = isCompany ? user.name : user.username; + const displayName = isCompany ? companyDisplayName(user.name) : user.username; const walletAddress = privyMode ? privyWallet : user.wallet ?? null; const tabs = isCompany diff --git a/frontend/lib/display-names.ts b/frontend/lib/display-names.ts new file mode 100644 index 0000000..f2a9c05 --- /dev/null +++ b/frontend/lib/display-names.ts @@ -0,0 +1,14 @@ +const COMPANY_NAME_FALLBACK = "there"; +const COMPANY_DISPLAY_FALLBACK = "Company"; + +function cleanDisplayName(name: string | null | undefined): string { + return name?.trim() ?? ""; +} + +export function companyGreetingName(name: string | null | undefined): string { + return cleanDisplayName(name) || COMPANY_NAME_FALLBACK; +} + +export function companyDisplayName(name: string | null | undefined): string { + return cleanDisplayName(name) || COMPANY_DISPLAY_FALLBACK; +} diff --git a/frontend/tests/display-names.test.ts b/frontend/tests/display-names.test.ts new file mode 100644 index 0000000..9cdee9f --- /dev/null +++ b/frontend/tests/display-names.test.ts @@ -0,0 +1,16 @@ +import { describe, expect, it } from "vitest"; +import { companyDisplayName, companyGreetingName } from "@/lib/display-names"; + +describe("company display names", () => { + it("falls back when a company name is missing", () => { + expect(companyGreetingName(undefined)).toBe("there"); + expect(companyGreetingName(null)).toBe("there"); + expect(companyGreetingName("")).toBe("there"); + expect(companyGreetingName(" ")).toBe("there"); + }); + + it("preserves a configured company name", () => { + expect(companyGreetingName("Acme Labs")).toBe("Acme Labs"); + expect(companyDisplayName("Acme Labs")).toBe("Acme Labs"); + }); +});