import { useSuspenseQuery } from "@tanstack/react-query"; import { Bell, Plus, RotateCcw } from "lucide-react"; import { useState } from "react"; import { EmptyState } from "~/client/components/empty-state"; import { StatusDot } from "~/client/components/status-dot"; import { Button } from "~/client/components/ui/button"; import { Card } from "~/client/components/ui/card"; import { Input } from "~/client/components/ui/input"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "~/client/components/ui/select"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "~/client/components/ui/table"; import { listNotificationDestinationsOptions } from "~/client/api-client/@tanstack/react-query.gen"; import { useNavigate } from "@tanstack/react-router"; import { cn } from "~/client/lib/utils"; export function NotificationsPage() { const [searchQuery, setSearchQuery] = useState(""); const [typeFilter, setTypeFilter] = useState(""); const [statusFilter, setStatusFilter] = useState(""); const clearFilters = () => { setSearchQuery(""); setTypeFilter(""); setStatusFilter(""); }; const navigate = useNavigate(); const { data } = useSuspenseQuery({ ...listNotificationDestinationsOptions(), }); const filteredNotifications = data.filter((notification) => { const matchesSearch = notification.name.toLowerCase().includes(searchQuery.toLowerCase()); const matchesType = !typeFilter || notification.type === typeFilter; const matchesStatus = !statusFilter || (statusFilter === "enabled" ? notification.enabled : !notification.enabled); return matchesSearch && matchesType && matchesStatus; }); const hasNoNotifications = data.length === 0; const hasNoFilteredNotifications = filteredNotifications.length === 0 && !hasNoNotifications; if (hasNoNotifications) { return ( navigate({ to: "/notifications/create" })}> Create Destination } /> ); } return (
setSearchQuery(e.target.value)} /> {(searchQuery || typeFilter || statusFilter) && ( )}
Name Type Status

No destinations match your filters.

{filteredNotifications.map((notification) => ( navigate({ to: `/notifications/${notification.id}` })} > {notification.name} {notification.type} ))}
{filteredNotifications.length} destination {filteredNotifications.length !== 1 ? "s" : ""}
); }