aboutsummaryrefslogtreecommitdiffstats
path: root/apps/web/components/dashboard/feeds/FeedSelector.tsx
blob: db95a042ca780606d81e054c17d390db5743fe48 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import {
  Select,
  SelectContent,
  SelectGroup,
  SelectItem,
  SelectTrigger,
  SelectValue,
} from "@/components/ui/select";
import LoadingSpinner from "@/components/ui/spinner";
import { api } from "@/lib/trpc";
import { cn } from "@/lib/utils";

export function FeedSelector({
  value,
  onChange,
  placeholder = "Select a feed",
  className,
}: {
  className?: string;
  value?: string | null;
  onChange: (value: string) => void;
  placeholder?: string;
}) {
  const { data, isPending } = api.feeds.list.useQuery(undefined, {
    select: (data) => data.feeds,
  });

  if (isPending) {
    return <LoadingSpinner />;
  }

  return (
    <Select onValueChange={onChange} value={value ?? ""}>
      <SelectTrigger className={cn("w-full", className)}>
        <SelectValue placeholder={placeholder} />
      </SelectTrigger>
      <SelectContent>
        <SelectGroup>
          {data?.map((f) => (
            <SelectItem key={f.id} value={f.id}>
              {f.name}
            </SelectItem>
          ))}
          {(data ?? []).length == 0 && (
            <SelectItem value="nofeed" disabled>
              You don&apos;t currently have any feeds.
            </SelectItem>
          )}
        </SelectGroup>
      </SelectContent>
    </Select>
  );
}