import { useState } from "react"; import clsx from "clsx"; import { Divider, Popover, Stack, Text } from "@mantine/core"; import { IconPlus } from "@tabler/icons-react"; import { useTranslation } from "react-i18next"; import { LabelChip } from "@/features/label/components/label-chip.tsx"; import { LabelPicker } from "@/features/label/components/label-picker.tsx"; import { useAddLabelsMutation, usePageLabelsQuery, useRemoveLabelMutation, } from "@/features/label/queries/label-query.ts"; import classes from "@/features/label/label.module.css"; type LabelsSectionProps = { pageId: string; canEdit: boolean; }; export function LabelsSection({ pageId, canEdit }: LabelsSectionProps) { const { t } = useTranslation(); const [open, setOpen] = useState(false); const { data } = usePageLabelsQuery(pageId); const addMutation = useAddLabelsMutation(pageId); const removeMutation = useRemoveLabelMutation(pageId); const labels = data?.items ?? []; if (!canEdit && labels.length === 0) { return null; } const handleAdd = (name: string) => { addMutation.mutate({ pageId, names: [name] }); }; const handleRemove = (labelId: string) => { removeMutation.mutate({ pageId, labelId }); }; return ( <> {t("Labels")}
{labels.map((label) => ( handleRemove(label.id) : undefined} /> ))} {canEdit && ( handleAdd(name)} onClose={() => setOpen(false)} /> )}
); }