feat: Admin Shows - add link filter buttons, increase limit to 1000
Some checks are pending
Deploy Elmeg / deploy (push) Waiting to run
Some checks are pending
Deploy Elmeg / deploy (push) Waiting to run
This commit is contained in:
parent
6ba55a595a
commit
97d40c0f4e
1 changed files with 49 additions and 14 deletions
|
|
@ -43,6 +43,7 @@ export default function AdminShowsPage() {
|
||||||
const [shows, setShows] = useState<Show[]>([])
|
const [shows, setShows] = useState<Show[]>([])
|
||||||
const [loading, setLoading] = useState(true)
|
const [loading, setLoading] = useState(true)
|
||||||
const [search, setSearch] = useState("")
|
const [search, setSearch] = useState("")
|
||||||
|
const [linkFilter, setLinkFilter] = useState<"all" | "missing" | "has_links">("all")
|
||||||
const [editingShow, setEditingShow] = useState<Show | null>(null)
|
const [editingShow, setEditingShow] = useState<Show | null>(null)
|
||||||
const [saving, setSaving] = useState(false)
|
const [saving, setSaving] = useState(false)
|
||||||
|
|
||||||
|
|
@ -63,7 +64,7 @@ export default function AdminShowsPage() {
|
||||||
if (!token) return
|
if (!token) return
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const res = await fetch(`${getApiUrl()}/shows?limit=100&sort=date_desc`, {
|
const res = await fetch(`${getApiUrl()}/shows?limit=1000&sort=date_desc`, {
|
||||||
headers: { Authorization: `Bearer ${token}` }
|
headers: { Authorization: `Bearer ${token}` }
|
||||||
})
|
})
|
||||||
if (res.ok) {
|
if (res.ok) {
|
||||||
|
|
@ -115,11 +116,20 @@ export default function AdminShowsPage() {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
const filteredShows = shows.filter(s =>
|
const filteredShows = shows.filter(s => {
|
||||||
s.venue_name?.toLowerCase().includes(search.toLowerCase()) ||
|
const matchesSearch =
|
||||||
s.venue_city?.toLowerCase().includes(search.toLowerCase()) ||
|
s.venue?.name?.toLowerCase().includes(search.toLowerCase()) ||
|
||||||
|
s.venue?.city?.toLowerCase().includes(search.toLowerCase()) ||
|
||||||
s.date.includes(search)
|
s.date.includes(search)
|
||||||
)
|
|
||||||
|
const hasAnyLink = s.nugs_link || s.bandcamp_link || s.youtube_link
|
||||||
|
const matchesLinkFilter =
|
||||||
|
linkFilter === "all" ||
|
||||||
|
(linkFilter === "missing" && !hasAnyLink) ||
|
||||||
|
(linkFilter === "has_links" && hasAnyLink)
|
||||||
|
|
||||||
|
return matchesSearch && matchesLinkFilter
|
||||||
|
})
|
||||||
|
|
||||||
if (loading) {
|
if (loading) {
|
||||||
return (
|
return (
|
||||||
|
|
@ -141,7 +151,8 @@ export default function AdminShowsPage() {
|
||||||
</h2>
|
</h2>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="relative max-w-sm">
|
<div className="flex flex-wrap gap-4 items-center">
|
||||||
|
<div className="relative max-w-sm flex-1">
|
||||||
<Search className="absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground" />
|
<Search className="absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground" />
|
||||||
<Input
|
<Input
|
||||||
placeholder="Search by venue, city, or date..."
|
placeholder="Search by venue, city, or date..."
|
||||||
|
|
@ -150,6 +161,30 @@ export default function AdminShowsPage() {
|
||||||
className="pl-9"
|
className="pl-9"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
<div className="flex gap-1">
|
||||||
|
<Button
|
||||||
|
variant={linkFilter === "all" ? "secondary" : "ghost"}
|
||||||
|
size="sm"
|
||||||
|
onClick={() => setLinkFilter("all")}
|
||||||
|
>
|
||||||
|
All
|
||||||
|
</Button>
|
||||||
|
<Button
|
||||||
|
variant={linkFilter === "missing" ? "secondary" : "ghost"}
|
||||||
|
size="sm"
|
||||||
|
onClick={() => setLinkFilter("missing")}
|
||||||
|
>
|
||||||
|
Missing Links
|
||||||
|
</Button>
|
||||||
|
<Button
|
||||||
|
variant={linkFilter === "has_links" ? "secondary" : "ghost"}
|
||||||
|
size="sm"
|
||||||
|
onClick={() => setLinkFilter("has_links")}
|
||||||
|
>
|
||||||
|
Has Links
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<Card>
|
<Card>
|
||||||
<CardContent className="p-0">
|
<CardContent className="p-0">
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue