import { Calendar, Paperclip2, Profile2User, Tag, TickSquare, type Icon } from "iconsax-react"; import { type FC, type ReactNode, useRef } from "react"; import { useTranslation } from "react-i18next"; import TaskDetailPopoverPanel from "./TaskDetailPopoverPanel"; import type { TaskDetailTab } from "./types"; type TabItem = { id: TaskDetailTab; icon: Icon; labelKey: string; }; const TABS: TabItem[] = [ { id: "labels", icon: Tag, labelKey: "taskmanager.task_detail.labels" }, { id: "users", icon: Profile2User, labelKey: "taskmanager.task_detail.user_management" }, { id: "checklist", icon: TickSquare, labelKey: "taskmanager.task_detail.checklist" }, { id: "attachment", icon: Paperclip2, labelKey: "taskmanager.task_detail.attachment" }, { id: "date", icon: Calendar, labelKey: "taskmanager.task_detail.date_settings" }, ]; type Props = { activeTab: TaskDetailTab | null; onTabChange: (tab: TaskDetailTab) => void; labelsPopover?: ReactNode; usersPopover?: ReactNode; checklistPopover?: ReactNode; attachmentPopover?: ReactNode; datePopover?: ReactNode; }; const POPOVER_TABS = new Set(["labels", "users", "checklist", "attachment", "date"]); type PopoverTab = "labels" | "users" | "checklist" | "attachment" | "date"; const TaskDetailActionBar: FC = ({ activeTab, onTabChange, labelsPopover, usersPopover, checklistPopover, attachmentPopover, datePopover }) => { const { t } = useTranslation("global"); const anchorRefs = useRef>({ labels: { current: null }, users: { current: null }, checklist: { current: null }, attachment: { current: null }, date: { current: null }, }); const popoverByTab: Record = { labels: labelsPopover, users: usersPopover, checklist: checklistPopover, attachment: attachmentPopover, date: datePopover, }; return ( <>
{TABS.map(({ id, icon: Icon, labelKey }) => { const isActive = activeTab === id; const hasPopover = POPOVER_TABS.has(id); return (
{ if (!hasPopover) return; anchorRefs.current[id as PopoverTab].current = element; }} >
); })}
{(Object.keys(popoverByTab) as PopoverTab[]).map((tab) => popoverByTab[tab] ? ( {popoverByTab[tab]} ) : null, )} ); }; export default TaskDetailActionBar;