Update carousels, card hover, and IranBay branding.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+131
@@ -0,0 +1,131 @@
|
||||
import type { DashboardType } from "@/types/auth";
|
||||
|
||||
export type HostApp = "admin" | "customer" | "business";
|
||||
|
||||
const BUSINESS_PREFIX = "business.";
|
||||
const CUSTOMER_PREFIX = "customer.";
|
||||
|
||||
/** Host without port, lowercased. */
|
||||
export function normalizeHost(hostHeader: string | null | undefined): string {
|
||||
if (!hostHeader) return "";
|
||||
return hostHeader.split(":")[0]?.toLowerCase() ?? "";
|
||||
}
|
||||
|
||||
export function isBusinessHost(hostHeader: string | null | undefined): boolean {
|
||||
const host = normalizeHost(hostHeader);
|
||||
if (!host) return false;
|
||||
if (host === "business.localhost") return true;
|
||||
return host.startsWith(BUSINESS_PREFIX);
|
||||
}
|
||||
|
||||
export function isCustomerHost(hostHeader: string | null | undefined): boolean {
|
||||
const host = normalizeHost(hostHeader);
|
||||
if (!host) return false;
|
||||
if (host === "customer.localhost") return true;
|
||||
return host.startsWith(CUSTOMER_PREFIX);
|
||||
}
|
||||
|
||||
export function hostAppFor(hostHeader: string | null | undefined): HostApp {
|
||||
if (isBusinessHost(hostHeader)) return "business";
|
||||
if (isCustomerHost(hostHeader)) return "customer";
|
||||
return "admin";
|
||||
}
|
||||
|
||||
/** @deprecated Prefer hostAppFor + access checks. */
|
||||
export function expectedDashboardForHost(
|
||||
hostHeader: string | null | undefined,
|
||||
): DashboardType {
|
||||
const app = hostAppFor(hostHeader);
|
||||
if (app === "business") return "business";
|
||||
if (app === "customer") return "customer";
|
||||
return "super_admin";
|
||||
}
|
||||
|
||||
function originFromEnv(
|
||||
envValue: string | undefined,
|
||||
fallbackLocal: string,
|
||||
fallbackProd: (root: string) => string,
|
||||
): string {
|
||||
const fromEnv = envValue?.replace(/\/$/, "");
|
||||
if (fromEnv) {
|
||||
if (fromEnv.startsWith("http://") || fromEnv.startsWith("https://")) {
|
||||
return fromEnv;
|
||||
}
|
||||
const protocol =
|
||||
fromEnv.includes("localhost") || fromEnv.startsWith("127.")
|
||||
? "http"
|
||||
: "https";
|
||||
return `${protocol}://${fromEnv}`;
|
||||
}
|
||||
|
||||
const root = process.env.NEXT_PUBLIC_ROOT_DOMAIN || "localhost";
|
||||
if (root === "localhost" || root.startsWith("127.")) {
|
||||
return fallbackLocal;
|
||||
}
|
||||
return fallbackProd(root);
|
||||
}
|
||||
|
||||
/** Absolute origin for the business dashboard (no trailing slash). */
|
||||
export function getBusinessDashboardOrigin(): string {
|
||||
return originFromEnv(
|
||||
process.env.NEXT_PUBLIC_BUSINESS_DASHBOARD_HOST,
|
||||
"http://business.localhost:3002",
|
||||
(root) => `https://business.${root}`,
|
||||
);
|
||||
}
|
||||
|
||||
/** Absolute origin for the customer dashboard. */
|
||||
export function getCustomerDashboardOrigin(): string {
|
||||
return originFromEnv(
|
||||
process.env.NEXT_PUBLIC_CUSTOMER_DASHBOARD_HOST,
|
||||
"http://customer.localhost:3002",
|
||||
(root) => `https://customer.${root}`,
|
||||
);
|
||||
}
|
||||
|
||||
/** Absolute origin for the superadmin dashboard. */
|
||||
export function getAdminDashboardOrigin(): string {
|
||||
return originFromEnv(
|
||||
process.env.NEXT_PUBLIC_ADMIN_DASHBOARD_HOST,
|
||||
"http://localhost:3002",
|
||||
(root) => `https://admin.${root}`,
|
||||
);
|
||||
}
|
||||
|
||||
/** Map public business URL path → internal /business/* path. */
|
||||
export function rewriteBusinessPath(pathname: string): string | null {
|
||||
if (pathname === "/") return "/business";
|
||||
if (pathname === "/login") return "/login";
|
||||
if (pathname === "/forgot-password") return "/forgot-password";
|
||||
if (pathname === "/auth/handoff") return "/auth/handoff";
|
||||
|
||||
const known = [
|
||||
"/profile",
|
||||
"/products",
|
||||
"/blog",
|
||||
"/portfolios",
|
||||
"/gallery",
|
||||
] as const;
|
||||
|
||||
for (const path of known) {
|
||||
if (pathname === path || pathname.startsWith(`${path}/`)) {
|
||||
return `/business${pathname}`;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/** Map public customer URL path → internal /customer/* path. */
|
||||
export function rewriteCustomerPath(pathname: string): string | null {
|
||||
if (pathname === "/") return "/customer";
|
||||
if (pathname === "/login") return "/login";
|
||||
if (pathname === "/forgot-password") return "/forgot-password";
|
||||
if (pathname === "/auth/handoff") return "/auth/handoff";
|
||||
|
||||
if (pathname === "/profile" || pathname.startsWith("/profile/")) {
|
||||
return `/customer${pathname}`;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
Reference in New Issue
Block a user