Compare commits
No commits in common. "fe81271ab3537531ff70bdbefc85b99e3f1b474d" and "465017cda9d41ab4645d2a8e047f018c22b75f10" have entirely different histories.
fe81271ab3
...
465017cda9
2 changed files with 23 additions and 78 deletions
|
|
@ -177,7 +177,6 @@ class Show(SQLModel, table=True):
|
||||||
bandcamp_link: Optional[str] = Field(default=None)
|
bandcamp_link: Optional[str] = Field(default=None)
|
||||||
nugs_link: Optional[str] = Field(default=None)
|
nugs_link: Optional[str] = Field(default=None)
|
||||||
youtube_link: Optional[str] = Field(default=None)
|
youtube_link: Optional[str] = Field(default=None)
|
||||||
relisten_link: Optional[str] = Field(default=None, description="Link to Relisten.net or archive.org")
|
|
||||||
|
|
||||||
vertical: Vertical = Relationship(back_populates="shows")
|
vertical: Vertical = Relationship(back_populates="shows")
|
||||||
venue: Optional[Venue] = Relationship(back_populates="shows")
|
venue: Optional[Venue] = Relationship(back_populates="shows")
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
"use client"
|
"use client"
|
||||||
|
|
||||||
import { useRouter } from "next/navigation"
|
import { useRouter } from "next/navigation"
|
||||||
import { ChevronDown, Music } from "lucide-react"
|
import { ChevronDown } from "lucide-react"
|
||||||
import { Button } from "@/components/ui/button"
|
import { Button } from "@/components/ui/button"
|
||||||
import {
|
import {
|
||||||
DropdownMenu,
|
DropdownMenu,
|
||||||
|
|
@ -9,93 +9,39 @@ import {
|
||||||
DropdownMenuItem,
|
DropdownMenuItem,
|
||||||
DropdownMenuTrigger,
|
DropdownMenuTrigger,
|
||||||
} from "@/components/ui/dropdown-menu"
|
} from "@/components/ui/dropdown-menu"
|
||||||
import {
|
|
||||||
Sheet,
|
|
||||||
SheetContent,
|
|
||||||
SheetHeader,
|
|
||||||
SheetTitle,
|
|
||||||
SheetTrigger,
|
|
||||||
} from "@/components/ui/sheet"
|
|
||||||
import { useVertical, VERTICALS, VerticalSlug } from "@/contexts/vertical-context"
|
import { useVertical, VERTICALS, VerticalSlug } from "@/contexts/vertical-context"
|
||||||
import { useState } from "react"
|
|
||||||
|
|
||||||
export function BandSelector() {
|
export function BandSelector() {
|
||||||
const { current, setCurrent } = useVertical()
|
const { current, setCurrent } = useVertical()
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const [sheetOpen, setSheetOpen] = useState(false)
|
|
||||||
|
|
||||||
const handleSelect = (slug: VerticalSlug) => {
|
const handleSelect = (slug: VerticalSlug) => {
|
||||||
setCurrent(slug)
|
setCurrent(slug)
|
||||||
router.push(`/${slug}`)
|
router.push(`/${slug}`)
|
||||||
setSheetOpen(false)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Desktop: Dropdown menu
|
|
||||||
// Mobile: Sheet drawer
|
|
||||||
return (
|
return (
|
||||||
<>
|
<DropdownMenu>
|
||||||
{/* Desktop Dropdown (hidden on mobile) */}
|
<DropdownMenuTrigger asChild>
|
||||||
<div className="hidden md:block">
|
<Button
|
||||||
<DropdownMenu>
|
variant="ghost"
|
||||||
<DropdownMenuTrigger asChild>
|
className="flex items-center gap-2 font-bold text-lg"
|
||||||
<Button
|
>
|
||||||
variant="ghost"
|
<span>{current.name}</span>
|
||||||
className="flex items-center gap-2 font-bold text-lg"
|
<ChevronDown className="h-4 w-4 opacity-50" />
|
||||||
>
|
</Button>
|
||||||
<span>{current.name}</span>
|
</DropdownMenuTrigger>
|
||||||
<ChevronDown className="h-4 w-4 opacity-50" />
|
<DropdownMenuContent align="start" className="w-56">
|
||||||
</Button>
|
{VERTICALS.map((vertical) => (
|
||||||
</DropdownMenuTrigger>
|
<DropdownMenuItem
|
||||||
<DropdownMenuContent align="start" className="w-56">
|
key={vertical.slug}
|
||||||
{VERTICALS.map((vertical) => (
|
onClick={() => handleSelect(vertical.slug)}
|
||||||
<DropdownMenuItem
|
className={`cursor-pointer ${vertical.slug === current.slug ? "font-bold" : ""}`}
|
||||||
key={vertical.slug}
|
>
|
||||||
onClick={() => handleSelect(vertical.slug)}
|
{vertical.name}
|
||||||
className={`cursor-pointer ${vertical.slug === current.slug ? "font-bold" : ""}`}
|
</DropdownMenuItem>
|
||||||
>
|
))}
|
||||||
{vertical.name}
|
</DropdownMenuContent>
|
||||||
</DropdownMenuItem>
|
</DropdownMenu>
|
||||||
))}
|
|
||||||
</DropdownMenuContent>
|
|
||||||
</DropdownMenu>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{/* Mobile Sheet (hidden on desktop) */}
|
|
||||||
<div className="md:hidden">
|
|
||||||
<Sheet open={sheetOpen} onOpenChange={setSheetOpen}>
|
|
||||||
<SheetTrigger asChild>
|
|
||||||
<Button
|
|
||||||
variant="ghost"
|
|
||||||
size="lg"
|
|
||||||
className="flex items-center gap-2 font-bold text-lg px-3"
|
|
||||||
>
|
|
||||||
<span>{current.name}</span>
|
|
||||||
<ChevronDown className="h-4 w-4 opacity-50" />
|
|
||||||
</Button>
|
|
||||||
</SheetTrigger>
|
|
||||||
<SheetContent side="bottom" className="h-[60vh]">
|
|
||||||
<SheetHeader>
|
|
||||||
<SheetTitle className="flex items-center gap-2">
|
|
||||||
<Music className="h-5 w-5" />
|
|
||||||
Switch Band
|
|
||||||
</SheetTitle>
|
|
||||||
</SheetHeader>
|
|
||||||
<div className="grid gap-2 py-4">
|
|
||||||
{VERTICALS.map((vertical) => (
|
|
||||||
<Button
|
|
||||||
key={vertical.slug}
|
|
||||||
variant={vertical.slug === current.slug ? "default" : "outline"}
|
|
||||||
size="lg"
|
|
||||||
className="w-full justify-start text-lg h-14"
|
|
||||||
onClick={() => handleSelect(vertical.slug)}
|
|
||||||
>
|
|
||||||
{vertical.name}
|
|
||||||
</Button>
|
|
||||||
))}
|
|
||||||
</div>
|
|
||||||
</SheetContent>
|
|
||||||
</Sheet>
|
|
||||||
</div>
|
|
||||||
</>
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue