diff --git a/webui2/src/components/bugs/LabelEditor.tsx b/webui2/src/components/bugs/LabelEditor.tsx index b2827c91dc9d61824c0ef8b90f11082fffbc3c6c..b3760170f57c217547b9ef43f81087455b68e5ca 100644 --- a/webui2/src/components/bugs/LabelEditor.tsx +++ b/webui2/src/components/bugs/LabelEditor.tsx @@ -1,10 +1,6 @@ import { Settings2 } from "lucide-react"; -import { - useValidLabelsQuery, - useBugChangeLabelsMutation, - BugDetailDocument, -} from "@/__generated__/graphql"; +import { useBugChangeLabelsMutation, BugDetailDocument } from "@/__generated__/graphql"; import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover"; import { useAuth } from "@/lib/auth"; @@ -15,19 +11,19 @@ interface LabelEditorProps { currentLabels: Array<{ name: string; color: { R: number; G: number; B: number } }>; /** Current repo slug, passed as `ref` in refetch query variables. */ ref_?: string | null; + /** Pre-fetched valid labels for the repository. */ + validLabels: Array<{ name: string; color: { R: number; G: number; B: number } }>; } // Gear-icon popover in the BugDetailPage sidebar for adding/removing labels. // Loads all valid labels from the repo and toggles them via bugChangeLabels. // Hidden in read-only mode. -export function LabelEditor({ bugPrefix, currentLabels, ref_ }: LabelEditorProps) { +export function LabelEditor({ bugPrefix, currentLabels, ref_, validLabels }: LabelEditorProps) { const { user } = useAuth(); - const { data } = useValidLabelsQuery({ skip: !user, variables: { ref: ref_ } }); const [changeLabels] = useBugChangeLabelsMutation({ refetchQueries: [{ query: BugDetailDocument, variables: { ref: ref_, prefix: bugPrefix } }], }); - const validLabels = data?.repository?.validLabels.nodes ?? []; const currentNames = new Set(currentLabels.map((l) => l.name)); async function toggleLabel(name: string) { diff --git a/webui2/src/routes/$repo/issues/$id.tsx b/webui2/src/routes/$repo/issues/$id.tsx index 5c878133d64538990e521c7d16e3b88a7a550a53..ae7d7aeda9e25e48d3b1486d7065062b8f97f973 100644 --- a/webui2/src/routes/$repo/issues/$id.tsx +++ b/webui2/src/routes/$repo/issues/$id.tsx @@ -3,7 +3,12 @@ import { createFileRoute, Link } from "@tanstack/react-router"; import { formatDistanceToNow } from "date-fns"; import { ArrowLeft } from "lucide-react"; -import { type BugDetailQuery, BugDetailDocument } from "@/__generated__/graphql"; +import { + type BugDetailQuery, + BugDetailDocument, + type ValidLabelsQuery, + ValidLabelsDocument, +} from "@/__generated__/graphql"; import { CommentBox } from "@/components/bugs/CommentBox"; import { LabelEditor } from "@/components/bugs/LabelEditor"; import { StatusBadge } from "@/components/bugs/StatusBadge"; @@ -22,6 +27,9 @@ export const Route = createFileRoute("/$repo/issues/$id")({ bugDetailRef: preloadQuery(BugDetailDocument, { variables: { ref: repo === "_" ? null : repo, prefix: id }, }), + labelsRef: preloadQuery(ValidLabelsDocument, { + variables: { ref: repo === "_" ? null : repo }, + }), }), }); @@ -29,8 +37,10 @@ export const Route = createFileRoute("/$repo/issues/$id")({ // comments and events, and a sidebar with labels and participants. function RouteComponent() { const repo = useRepo(); - const { bugDetailRef } = Route.useLoaderData(); + const { bugDetailRef, labelsRef } = Route.useLoaderData(); const { data } = useReadQuery(bugDetailRef); + const { data: labelsData } = useReadQuery(labelsRef); + const validLabels = labelsData?.repository?.validLabels.nodes ?? []; const bug = data?.repository?.bug; if (!bug) { @@ -79,7 +89,12 @@ function RouteComponent() { {/* Sidebar */}