import faviconPlaceholder from "@/assets/FaviconPlaceholder.svg"; import pagePlaceholder from "@/assets/PagePlaceholder.svg"; import { useDialog } from "@/contexts/DialogProvider"; import { useCollections } from "@/entrypoints/sidepanel/contexts/CollectionsProvider"; import useDndItem from "@/entrypoints/sidepanel/hooks/useDndItem"; import useSettings from "@/hooks/useSettings"; import { TabItem } from "@/models/CollectionModels"; import { Button, Caption1, Link, mergeClasses, Tooltip } from "@fluentui/react-components"; import { Dismiss20Regular } from "@fluentui/react-icons"; import { MouseEventHandler, ReactElement } from "react"; import { useStyles_TabView } from "./TabView.styles"; import CollectionContext, { CollectionContextType } from "../contexts/CollectionContext"; export default function TabView({ tab, indices, dragOverlay }: TabViewProps): ReactElement { const { removeItem, graphics, tilesView } = useCollections(); const { collection } = useContext(CollectionContext); const { setNodeRef, setActivatorNodeRef, nodeProps, activatorProps, isBeingDragged } = useDndItem({ id: indices.join("/"), data: { indices, item: tab } }); const dialog = useDialog(); const [deletePrompt] = useSettings("deletePrompt"); const [showToolbar] = useSettings("alwaysShowToolbars"); const cls = useStyles_TabView(); const handleDelete: MouseEventHandler = (args) => { args.preventDefault(); args.stopPropagation(); const removeIndex: number[] = [collection.timestamp, ...indices.slice(1)]; if (deletePrompt) dialog.pushPrompt({ title: i18n.t("tabs.delete"), content: i18n.t("common.delete_prompt"), destructive: true, confirmText: i18n.t("common.actions.delete"), onConfirm: () => removeItem(...removeIndex) }); else removeItem(...removeIndex); }; const handleClick: MouseEventHandler = (args) => { args.preventDefault(); browser.tabs.create({ url: tab.url, active: true }); }; const handleAuxClick: MouseEventHandler = (args) => { args.preventDefault(); if (args.button === 1) browser.tabs.create({ url: tab.url, active: false }); }; return ( { tilesView && e.currentTarget.src = pagePlaceholder } className={ cls.image } draggable={ false } /> }
e.currentTarget.src = faviconPlaceholder } height={ 20 } width={ 20 } className={ cls.icon } draggable={ false } /> { tab.title ?? tab.url }
); } export type TabViewProps = { tab: TabItem; indices: number[]; dragOverlay?: boolean; };