Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
"use client";

import type { ReactNode } from "react";
import {
Sidebar,
SidebarContent,
SidebarFooter,
SidebarGroup,
SidebarGroupContent,
SidebarGroupLabel,
SidebarHeader,
SidebarMenu,
SidebarMenuButton,
SidebarMenuItem,
} from "@/components/ui/sidebar";
import { ArrowLeftIcon } from "@radix-ui/react-icons";
import {
GiftIcon,
HistoryIcon,
HomeIcon,
PaletteIcon,
SettingsIcon,
TrophyIcon,
UsersIcon,
} from "lucide-react";
import Link from "next/link";
import { usePathname } from "next/navigation";
import { DarwinSidebarHeaderDragArea } from "@/host/desktop";
import { AboutGridaWestCard } from "./about-west-card";

type CampaignSidebarProps = {
baseUrl: string;
campaignsUrl: string;
campaignTitle: string;
};

type SidebarMenuLinkProps = {
href: string;
children: ReactNode;
size?: "default" | "sm" | "lg";
matchSubpaths?: boolean;
};

function SidebarMenuLink({
href,
children,
size = "sm",
matchSubpaths = true,
}: SidebarMenuLinkProps) {
const pathname = usePathname();
const isActive = matchSubpaths
? pathname === href || pathname.startsWith(`${href}/`)
: pathname === href;

return (
<SidebarMenuItem>
<SidebarMenuButton asChild size={size} isActive={isActive}>
<Link href={href}>{children}</Link>
</SidebarMenuButton>
</SidebarMenuItem>
);
}

export function CampaignSidebar({
baseUrl,
campaignsUrl,
campaignTitle,
}: CampaignSidebarProps) {
return (
<Sidebar>
<DarwinSidebarHeaderDragArea />
<SidebarHeader className="desktop-drag-area">
<SidebarMenu>
<SidebarMenuItem>
<SidebarMenuButton asChild>
<Link href={campaignsUrl}>
<ArrowLeftIcon />
<span className="truncate">{campaignTitle}</span>
</Link>
</SidebarMenuButton>
</SidebarMenuItem>
</SidebarMenu>
</SidebarHeader>
<SidebarContent>
<SidebarGroup>
<SidebarGroupContent>
<SidebarMenu>
<SidebarMenuLink href={baseUrl} matchSubpaths={false}>
<HomeIcon className="size-3" />
Home
</SidebarMenuLink>
<SidebarMenuLink href={`${baseUrl}/participants`}>
<UsersIcon className="size-3" />
Participants
</SidebarMenuLink>
<SidebarMenuLink href={`${baseUrl}/quests`}>
<TrophyIcon className="size-3" />
Quests
</SidebarMenuLink>
<SidebarMenuLink href={`${baseUrl}/rewards`}>
<GiftIcon className="size-3" />
Rewards
</SidebarMenuLink>
<SidebarMenuLink href={`${baseUrl}/observability`}>
<HistoryIcon className="size-3" />
Observability
</SidebarMenuLink>
</SidebarMenu>
</SidebarGroupContent>
</SidebarGroup>
<SidebarGroup>
<SidebarGroupLabel>Design</SidebarGroupLabel>
<SidebarGroupContent>
<SidebarMenu>
<SidebarMenuLink href={`${baseUrl}/design`}>
<PaletteIcon className="size-3" />
Design
</SidebarMenuLink>
<SidebarMenuLink href={`${baseUrl}/settings`}>
<SettingsIcon className="size-3" />
Settings
</SidebarMenuLink>
</SidebarMenu>
</SidebarGroupContent>
</SidebarGroup>
</SidebarContent>
<SidebarFooter>
<AboutGridaWestCard />
</SidebarFooter>
</Sidebar>
);
}
Original file line number Diff line number Diff line change
@@ -1,34 +1,9 @@
import React from "react";
import { createWestReferralClient } from "@/lib/supabase/server";
import { CampaignProvider } from "./store";
import {
Sidebar,
SidebarContent,
SidebarHeader,
SidebarGroup,
SidebarGroupContent,
SidebarMenu,
SidebarMenuButton,
SidebarMenuItem,
SidebarProvider,
SidebarFooter,
SidebarGroupLabel,
} from "@/components/ui/sidebar";
import Link from "next/link";
import { ArrowLeftIcon } from "@radix-ui/react-icons";
import {
GiftIcon,
HistoryIcon,
HomeIcon,
PaletteIcon,
SettingsIcon,
TrophyIcon,
UsersIcon,
} from "lucide-react";
import { AboutGridaWestCard } from "./about-west-card";
import { SidebarProvider } from "@/components/ui/sidebar";
import { notFound } from "next/navigation";
import { Metadata } from "next";
import { DarwinSidebarHeaderDragArea } from "@/host/desktop";
import { CampaignSidebar } from "./campaign-sidebar";
type Params = { org: string; proj: string; campaign: string };

export const metadata: Metadata = {
Expand All @@ -55,102 +30,19 @@ export default async function CampaignLayout({
return notFound();
}

const base_url = `/${org}/${proj}/campaigns/${campaign_id}`;
const campaignsUrl = `/${org}/${proj}/campaigns`;
const baseUrl = `${campaignsUrl}/${campaign_id}`;

return (
<CampaignProvider campaign={data}>
<SidebarProvider>
<div className="flex flex-1 h-full overflow-hidden">
<div className="h-full flex flex-1 w-full">
<Sidebar>
<DarwinSidebarHeaderDragArea />
<SidebarHeader className="desktop-drag-area">
<SidebarMenu>
<Link href={`/${org}/${proj}/campaigns`}>
<SidebarMenuItem>
<SidebarMenuButton>
<ArrowLeftIcon />
<span className="truncate">{data.title}</span>
</SidebarMenuButton>
</SidebarMenuItem>
</Link>
</SidebarMenu>
</SidebarHeader>
<SidebarContent>
<SidebarGroup>
<SidebarGroupContent>
<SidebarMenu>
<Link href={`${base_url}`}>
<SidebarMenuItem>
<SidebarMenuButton size="sm">
<HomeIcon className="size-3" />
Home
</SidebarMenuButton>
</SidebarMenuItem>
</Link>
<Link href={`${base_url}/participants`}>
<SidebarMenuItem>
<SidebarMenuButton size="sm">
<UsersIcon className="size-3" />
Participants
</SidebarMenuButton>
</SidebarMenuItem>
</Link>
<Link href={`${base_url}/quests`}>
<SidebarMenuItem>
<SidebarMenuButton size="sm">
<TrophyIcon className="size-3" />
Quests
</SidebarMenuButton>
</SidebarMenuItem>
</Link>
<Link href={`${base_url}/rewards`}>
<SidebarMenuItem>
<SidebarMenuButton size="sm">
<GiftIcon className="size-3" />
Rewards
</SidebarMenuButton>
</SidebarMenuItem>
</Link>
<Link href={`${base_url}/observability`}>
<SidebarMenuItem>
<SidebarMenuButton size="sm">
<HistoryIcon className="size-3" />
Observability
</SidebarMenuButton>
</SidebarMenuItem>
</Link>
</SidebarMenu>
</SidebarGroupContent>
</SidebarGroup>
<SidebarGroup>
<SidebarGroupLabel>Design</SidebarGroupLabel>
<SidebarGroupContent>
<SidebarMenu>
<Link href={`${base_url}/design`}>
<SidebarMenuItem>
<SidebarMenuButton size="sm">
<PaletteIcon className="size-3" />
Design
</SidebarMenuButton>
</SidebarMenuItem>
</Link>
<Link href={`${base_url}/settings`}>
<SidebarMenuItem>
<SidebarMenuButton size="sm">
<SettingsIcon className="size-3" />
Settings
</SidebarMenuButton>
</SidebarMenuItem>
</Link>
</SidebarMenu>
</SidebarGroupContent>
</SidebarGroup>
</SidebarContent>
<SidebarFooter>
<AboutGridaWestCard />
</SidebarFooter>
</Sidebar>
<CampaignSidebar
baseUrl={baseUrl}
campaignsUrl={campaignsUrl}
campaignTitle={data.title}
/>
<div className="flex flex-col h-full w-full">{children}</div>
</div>
</div>
Expand Down
Loading