Create context for subdomain-based passport rendering (aethex.me / aethex.space)

cgen-d354ca4c207a40e4bc71cc425d83f459
This commit is contained in:
Builder.io 2025-11-15 01:26:00 +00:00
parent f66bac82c8
commit 22deb7a44a

View file

@ -0,0 +1,100 @@
import { createContext, useContext, useEffect, useState } from "react";
interface SubdomainInfo {
subdomain: string;
domain: string;
isCreatorPassport: boolean;
isProjectPassport: boolean;
}
interface SubdomainPassportContextType {
subdomainInfo: SubdomainInfo | null;
isLoading: boolean;
error: string | null;
}
const SubdomainPassportContext = createContext<SubdomainPassportContextType>(
{
subdomainInfo: null,
isLoading: true,
error: null,
}
);
export const useSubdomainPassport = () => {
const context = useContext(SubdomainPassportContext);
if (!context) {
throw new Error(
"useSubdomainPassport must be used within SubdomainPassportProvider"
);
}
return context;
};
export const SubdomainPassportProvider = ({
children,
}: {
children: React.ReactNode;
}) => {
const [subdomainInfo, setSubdomainInfo] = useState<SubdomainInfo | null>(
null
);
const [isLoading, setIsLoading] = useState(true);
const [error, setError] = useState<string | null>(null);
useEffect(() => {
const detectSubdomain = () => {
try {
const hostname = window.location.hostname;
let subdomain = "";
let domain = "";
if (hostname.includes("aethex.me")) {
const parts = hostname.split(".");
if (parts.length > 2) {
subdomain = parts[0];
domain = "aethex.me";
}
} else if (hostname.includes("aethex.space")) {
const parts = hostname.split(".");
if (parts.length > 2) {
subdomain = parts[0];
domain = "aethex.space";
}
}
if (domain) {
const info: SubdomainInfo = {
subdomain,
domain,
isCreatorPassport: domain === "aethex.me",
isProjectPassport: domain === "aethex.space",
};
setSubdomainInfo(info);
console.log("[SubdomainPassport] Detected:", info);
} else {
setSubdomainInfo(null);
}
} catch (e: any) {
console.error("[SubdomainPassport] Detection error:", e?.message);
setError("Failed to detect subdomain");
} finally {
setIsLoading(false);
}
};
detectSubdomain();
}, []);
return (
<SubdomainPassportContext.Provider
value={{
subdomainInfo,
isLoading,
error,
}}
>
{children}
</SubdomainPassportContext.Provider>
);
};