import { useState } from "react"; import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; import { groupSourcesPutMutation, groupSourcesQuery } from "@/lib/queries"; import type { Blocklist } from "@/lib/types"; import { sameSet, toggleSource } from "./sourceSet"; import InlineError from "@/lib/InlineError"; interface Props { groupId: number; blocklists: Blocklist[]; } export default function GroupSourcesEditor({ groupId, blocklists }: Props) { const queryClient = useQueryClient(); const sources = useQuery(groupSourcesQuery(groupId)); const mutation = useMutation(groupSourcesPutMutation(queryClient)); const [selected, setSelected] = useState(null); if (sources.isPending) { return (

Loading sources…

); } if (sources.isError) return ; if (blocklists.length === 0) { return (

No blocklist sources exist yet — add them on the Blocklists page.

); } const current = selected ?? sources.data; const dirty = !sameSet(current, sources.data); return (
    {blocklists.map((blocklist) => (
  • ))}
{dirty && ( )}
); }