import { useState } from "react"; import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; import * as stylex from "@stylexjs/stylex"; import { groupSourcesPutMutation, groupSourcesQuery } from "@/lib/queries"; import type { Blocklist } from "@/lib/types"; import { sameSet, toggleSource } from "./sourceSet"; import InlineError from "@/lib/InlineError"; import { styles as shared } from "@/ui/styles"; import { colors } from "@/ui/tokens.stylex"; interface Props { groupId: number; blocklists: Blocklist[]; } const styles = stylex.create({ note: { marginTop: "0.75rem", fontSize: "0.875rem", lineHeight: "1.25rem", color: colors.textMuted, }, root: { marginTop: "0.75rem", }, list: { display: "flex", flexDirection: "column", gap: "0.25rem", }, checkboxLabel: { display: "inline-flex", alignItems: "center", gap: "0.5rem", fontSize: "0.875rem", lineHeight: "1.25rem", }, buttonRow: { marginTop: "0.75rem", display: "flex", gap: "0.5rem", }, }); 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 Sources tab.

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