Revert "hide admin nav links unless user has admin role"
This reverts commit 92a256bbe0.
This commit is contained in:
@@ -48,7 +48,6 @@ export default function Header() {
|
|||||||
const [searchFocused, setSearchFocused] = useState(false);
|
const [searchFocused, setSearchFocused] = useState(false);
|
||||||
const [currentUserId, setCurrentUserId] = useState<string | null>(null);
|
const [currentUserId, setCurrentUserId] = useState<string | null>(null);
|
||||||
const [currentUserEmail, setCurrentUserEmail] = useState<string | null>(null);
|
const [currentUserEmail, setCurrentUserEmail] = useState<string | null>(null);
|
||||||
const [isAdmin, setIsAdmin] = useState(false);
|
|
||||||
const [subEmail, setSubEmail] = useState("");
|
const [subEmail, setSubEmail] = useState("");
|
||||||
const [subStatus, setSubStatus] = useState<"idle" | "loading" | "success" | "error">("idle");
|
const [subStatus, setSubStatus] = useState<"idle" | "loading" | "success" | "error">("idle");
|
||||||
const [subMessage, setSubMessage] = useState("");
|
const [subMessage, setSubMessage] = useState("");
|
||||||
@@ -66,28 +65,14 @@ export default function Header() {
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const supabase = createClient();
|
const supabase = createClient();
|
||||||
|
|
||||||
const ADMIN_ROLES = new Set(["administrator", "admin", "super_admin"]);
|
|
||||||
|
|
||||||
const refreshAdmin = async (userId: string | null) => {
|
|
||||||
if (!userId) { setIsAdmin(false); return; }
|
|
||||||
const { data } = await supabase
|
|
||||||
.from("user_profiles")
|
|
||||||
.select("role")
|
|
||||||
.eq("id", userId)
|
|
||||||
.maybeSingle();
|
|
||||||
setIsAdmin(!!data?.role && ADMIN_ROLES.has(data.role));
|
|
||||||
};
|
|
||||||
|
|
||||||
supabase.auth.getUser().then(({ data: { user } }) => {
|
supabase.auth.getUser().then(({ data: { user } }) => {
|
||||||
setCurrentUserId(user?.id || null);
|
setCurrentUserId(user?.id || null);
|
||||||
setCurrentUserEmail(user?.email || null);
|
setCurrentUserEmail(user?.email || null);
|
||||||
refreshAdmin(user?.id || null);
|
|
||||||
});
|
});
|
||||||
const { data: { subscription } } = supabase.auth.onAuthStateChange((_event, session) => {
|
const supabase2 = createClient();
|
||||||
|
const { data: { subscription } } = supabase2.auth.onAuthStateChange((_event, session) => {
|
||||||
setCurrentUserId(session?.user?.id || null);
|
setCurrentUserId(session?.user?.id || null);
|
||||||
setCurrentUserEmail(session?.user?.email || null);
|
setCurrentUserEmail(session?.user?.email || null);
|
||||||
refreshAdmin(session?.user?.id || null);
|
|
||||||
});
|
});
|
||||||
return () => subscription.unsubscribe();
|
return () => subscription.unsubscribe();
|
||||||
}, []);
|
}, []);
|
||||||
@@ -252,52 +237,48 @@ export default function Header() {
|
|||||||
My Profile
|
My Profile
|
||||||
</Link>
|
</Link>
|
||||||
)}
|
)}
|
||||||
{isAdmin && (
|
<Link href="/admin/import" className="text-[#999] hover:text-[#3b82f6] focus:text-[#3b82f6] focus:outline-none focus-visible:ring-1 focus-visible:ring-[#3b82f6] transition-colors text-xs font-body font-bold uppercase tracking-wider">
|
||||||
<>
|
WP Import
|
||||||
<Link href="/admin/import" className="text-[#999] hover:text-[#3b82f6] focus:text-[#3b82f6] focus:outline-none focus-visible:ring-1 focus-visible:ring-[#3b82f6] transition-colors text-xs font-body font-bold uppercase tracking-wider">
|
</Link>
|
||||||
WP Import
|
<Link href="/admin/articles" className="text-[#999] hover:text-[#3b82f6] focus:text-[#3b82f6] focus:outline-none focus-visible:ring-1 focus-visible:ring-[#3b82f6] transition-colors text-xs font-body font-bold uppercase tracking-wider">
|
||||||
</Link>
|
Articles
|
||||||
<Link href="/admin/articles" className="text-[#999] hover:text-[#3b82f6] focus:text-[#3b82f6] focus:outline-none focus-visible:ring-1 focus-visible:ring-[#3b82f6] transition-colors text-xs font-body font-bold uppercase tracking-wider">
|
</Link>
|
||||||
Articles
|
<Link href="/dashboard/editorial" className="text-[#999] hover:text-[#3b82f6] focus:text-[#3b82f6] focus:outline-none focus-visible:ring-1 focus-visible:ring-[#3b82f6] transition-colors text-xs font-body font-bold uppercase tracking-wider">
|
||||||
</Link>
|
Editorial
|
||||||
<Link href="/dashboard/editorial" className="text-[#999] hover:text-[#3b82f6] focus:text-[#3b82f6] focus:outline-none focus-visible:ring-1 focus-visible:ring-[#3b82f6] transition-colors text-xs font-body font-bold uppercase tracking-wider">
|
</Link>
|
||||||
Editorial
|
<Link href="/admin/users" className="text-[#999] hover:text-[#3b82f6] focus:text-[#3b82f6] focus:outline-none focus-visible:ring-1 focus-visible:ring-[#3b82f6] transition-colors text-xs font-body font-bold uppercase tracking-wider">
|
||||||
</Link>
|
Users
|
||||||
<Link href="/admin/users" className="text-[#999] hover:text-[#3b82f6] focus:text-[#3b82f6] focus:outline-none focus-visible:ring-1 focus-visible:ring-[#3b82f6] transition-colors text-xs font-body font-bold uppercase tracking-wider">
|
</Link>
|
||||||
Users
|
<Link href="/admin/analytics" className="text-[#999] hover:text-[#3b82f6] focus:text-[#3b82f6] focus:outline-none focus-visible:ring-1 focus-visible:ring-[#3b82f6] transition-colors text-xs font-body font-bold uppercase tracking-wider">
|
||||||
</Link>
|
Analytics
|
||||||
<Link href="/admin/analytics" className="text-[#999] hover:text-[#3b82f6] focus:text-[#3b82f6] focus:outline-none focus-visible:ring-1 focus-visible:ring-[#3b82f6] transition-colors text-xs font-body font-bold uppercase tracking-wider">
|
</Link>
|
||||||
Analytics
|
<Link href="/admin/audit-log" className="text-[#999] hover:text-[#3b82f6] focus:text-[#3b82f6] focus:outline-none focus-visible:ring-1 focus-visible:ring-[#3b82f6] transition-colors text-xs font-body font-bold uppercase tracking-wider">
|
||||||
</Link>
|
Audit Log
|
||||||
<Link href="/admin/audit-log" className="text-[#999] hover:text-[#3b82f6] focus:text-[#3b82f6] focus:outline-none focus-visible:ring-1 focus-visible:ring-[#3b82f6] transition-colors text-xs font-body font-bold uppercase tracking-wider">
|
</Link>
|
||||||
Audit Log
|
<Link href="/admin/notifications" className="text-[#999] hover:text-[#3b82f6] focus:text-[#3b82f6] focus:outline-none focus-visible:ring-1 focus-visible:ring-[#3b82f6] transition-colors text-xs font-body font-bold uppercase tracking-wider">
|
||||||
</Link>
|
Notifications
|
||||||
<Link href="/admin/notifications" className="text-[#999] hover:text-[#3b82f6] focus:text-[#3b82f6] focus:outline-none focus-visible:ring-1 focus-visible:ring-[#3b82f6] transition-colors text-xs font-body font-bold uppercase tracking-wider">
|
</Link>
|
||||||
Notifications
|
<Link href="/admin/newsletter" className="text-[#999] hover:text-[#3b82f6] focus:text-[#3b82f6] focus:outline-none focus-visible:ring-1 focus-visible:ring-[#3b82f6] transition-colors text-xs font-body font-bold uppercase tracking-wider">
|
||||||
</Link>
|
Newsletter
|
||||||
<Link href="/admin/newsletter" className="text-[#999] hover:text-[#3b82f6] focus:text-[#3b82f6] focus:outline-none focus-visible:ring-1 focus-visible:ring-[#3b82f6] transition-colors text-xs font-body font-bold uppercase tracking-wider">
|
</Link>
|
||||||
Newsletter
|
<Link href="/admin/forum-seed" className="text-[#999] hover:text-[#3b82f6] focus:text-[#3b82f6] focus:outline-none focus-visible:ring-1 focus-visible:ring-[#3b82f6] transition-colors text-xs font-body font-bold uppercase tracking-wider">
|
||||||
</Link>
|
Forum Seed
|
||||||
<Link href="/admin/forum-seed" className="text-[#999] hover:text-[#3b82f6] focus:text-[#3b82f6] focus:outline-none focus-visible:ring-1 focus-visible:ring-[#3b82f6] transition-colors text-xs font-body font-bold uppercase tracking-wider">
|
</Link>
|
||||||
Forum Seed
|
<Link href="/admin/company-tracker" className="text-[#999] hover:text-[#3b82f6] focus:text-[#3b82f6] focus:outline-none focus-visible:ring-1 focus-visible:ring-[#3b82f6] transition-colors text-xs font-body font-bold uppercase tracking-wider">
|
||||||
</Link>
|
Company Tracker
|
||||||
<Link href="/admin/company-tracker" className="text-[#999] hover:text-[#3b82f6] focus:text-[#3b82f6] focus:outline-none focus-visible:ring-1 focus-visible:ring-[#3b82f6] transition-colors text-xs font-body font-bold uppercase tracking-wider">
|
</Link>
|
||||||
Company Tracker
|
<Link href="/dashboard/show-calendar" className="text-[#999] hover:text-[#3b82f6] focus:text-[#3b82f6] focus:outline-none focus-visible:ring-1 focus-visible:ring-[#3b82f6] transition-colors text-xs font-body font-bold uppercase tracking-wider">
|
||||||
</Link>
|
Show Calendar
|
||||||
<Link href="/dashboard/show-calendar" className="text-[#999] hover:text-[#3b82f6] focus:text-[#3b82f6] focus:outline-none focus-visible:ring-1 focus-visible:ring-[#3b82f6] transition-colors text-xs font-body font-bold uppercase tracking-wider">
|
</Link>
|
||||||
Show Calendar
|
<Link href="/dashboard/ai-console" className="text-[#3b82f6] hover:text-blue-300 focus:text-blue-300 focus:outline-none focus-visible:ring-1 focus-visible:ring-[#3b82f6] transition-colors text-xs font-body font-bold uppercase tracking-wider">
|
||||||
</Link>
|
AI Console
|
||||||
<Link href="/dashboard/ai-console" className="text-[#3b82f6] hover:text-blue-300 focus:text-blue-300 focus:outline-none focus-visible:ring-1 focus-visible:ring-[#3b82f6] transition-colors text-xs font-body font-bold uppercase tracking-wider">
|
</Link>
|
||||||
AI Console
|
<Link href="/admin/banned-terms" className="text-[#999] hover:text-[#3b82f6] focus:text-[#3b82f6] focus:outline-none focus-visible:ring-1 focus-visible:ring-[#3b82f6] transition-colors text-xs font-body font-bold uppercase tracking-wider">
|
||||||
</Link>
|
Banned Terms
|
||||||
<Link href="/admin/banned-terms" className="text-[#999] hover:text-[#3b82f6] focus:text-[#3b82f6] focus:outline-none focus-visible:ring-1 focus-visible:ring-[#3b82f6] transition-colors text-xs font-body font-bold uppercase tracking-wider">
|
</Link>
|
||||||
Banned Terms
|
<Link href="/admin" className="text-[#3b82f6] hover:text-blue-300 focus:text-blue-300 focus:outline-none focus-visible:ring-1 focus-visible:ring-[#3b82f6] transition-colors text-xs font-body font-bold uppercase tracking-wider">
|
||||||
</Link>
|
Dashboard
|
||||||
<Link href="/admin" className="text-[#3b82f6] hover:text-blue-300 focus:text-blue-300 focus:outline-none focus-visible:ring-1 focus-visible:ring-[#3b82f6] transition-colors text-xs font-body font-bold uppercase tracking-wider">
|
</Link>
|
||||||
Dashboard
|
|
||||||
</Link>
|
|
||||||
</>
|
|
||||||
)}
|
|
||||||
{/* Inline Email Subscription Form */}
|
{/* Inline Email Subscription Form */}
|
||||||
{subStatus === "success" ? (
|
{subStatus === "success" ? (
|
||||||
<span className="text-[#3b82f6] text-xs font-body font-bold whitespace-nowrap">{subMessage}</span>
|
<span className="text-[#3b82f6] text-xs font-body font-bold whitespace-nowrap">{subMessage}</span>
|
||||||
@@ -467,17 +448,15 @@ export default function Header() {
|
|||||||
Account
|
Account
|
||||||
</Link>
|
</Link>
|
||||||
{/* WP Import mobile link */}
|
{/* WP Import mobile link */}
|
||||||
{isAdmin && (
|
<Link
|
||||||
<Link
|
href="/admin/import"
|
||||||
href="/admin/import"
|
className="px-2 py-2.5 text-sm font-body font-bold uppercase tracking-wide text-[#cccccc] hover:text-[#3b82f6] hover:bg-[#1a1a1a] border-b border-[#222] transition-colors focus:outline-none focus-visible:ring-1 focus-visible:ring-inset focus-visible:ring-[#3b82f6] flex items-center gap-2"
|
||||||
className="px-2 py-2.5 text-sm font-body font-bold uppercase tracking-wide text-[#cccccc] hover:text-[#3b82f6] hover:bg-[#1a1a1a] border-b border-[#222] transition-colors focus:outline-none focus-visible:ring-1 focus-visible:ring-inset focus-visible:ring-[#3b82f6] flex items-center gap-2"
|
onClick={() => setMobileOpen(false)}>
|
||||||
onClick={() => setMobileOpen(false)}>
|
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" aria-hidden="true">
|
||||||
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" aria-hidden="true">
|
<path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" /><polyline points="7 10 12 15 17 10" /><line x1="12" y1="15" x2="12" y2="3" />
|
||||||
<path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" /><polyline points="7 10 12 15 17 10" /><line x1="12" y1="15" x2="12" y2="3" />
|
</svg>
|
||||||
</svg>
|
WP Import
|
||||||
WP Import
|
</Link>
|
||||||
</Link>
|
|
||||||
)}
|
|
||||||
</div>
|
</div>
|
||||||
<div className="flex flex-col gap-0 border-t border-[#252525] mt-1">
|
<div className="flex flex-col gap-0 border-t border-[#252525] mt-1">
|
||||||
{categoryLinks?.map((link) => (
|
{categoryLinks?.map((link) => (
|
||||||
|
|||||||
Reference in New Issue
Block a user