import { useState } from "react"; import { setIssueAssignees, setIssueLabels, setIssueLock } from "~/fns/labels"; import { useAction } from "~/hooks/use-action"; import { Avatar, LabelChip } from "./ui/Primitives"; import { Button } from "./ui/Button"; type Props = { owner: string; repo: string; number: number; canMaintain: boolean; locked: boolean; labels: Array<{ id: string; name: string; color: string }>; allLabels: Array<{ id: string; name: string; color: string }>; assignees: Array<{ name: string }>; assignable: string[]; children?: React.ReactNode; }; function Section({ title, onEdit, children }: { title: string; onEdit?: () => void; children: React.ReactNode }) { return (

{title}

{onEdit && ( )}
{children}
); } function Picker({ options, selected, onSave, pending, }: { options: string[]; selected: string[]; onSave: (values: string[]) => void; pending: boolean; }) { const [values, setValues] = useState(new Set(selected)); return (
{options.length === 0 &&

Nothing to choose from.

} {options.map((option) => ( ))}
); } export function IssueSidebar({ owner, repo, number, canMaintain, locked, labels, allLabels, assignees, assignable, children, }: Props) { const [editing, setEditing] = useState<"labels" | "assignees" | null>(null); const saveLabels = useAction(setIssueLabels); const saveAssignees = useAction(setIssueAssignees); const lock = useAction(setIssueLock); const toggle = (section: "labels" | "assignees") => setEditing((current) => (current === section ? null : section)); return ( ); }