import { FC, memo } from "react"; import App from "../../../features/apps/app"; import styles from "./AppIcon.module.css"; import { ReactSVG } from "react-svg"; import { useSettingsManager } from "../../../hooks/settings/settingsManagerContext"; import { useContextMenu } from "../../../hooks/modals/contextMenu"; import { Actions } from "../../actions/Actions"; import { ClickAction } from "../../actions/actions/ClickAction"; import { faThumbTack, faTimes } from "@fortawesome/free-solid-svg-icons"; import { SettingsManager } from "../../../features/settings/settingsManager"; import { removeFromArray } from "../../../features/_utils/array.utils"; import AppsManager from "../../../features/apps/appsManager"; import WindowsManager from "../../../features/windows/windowsManager"; interface AppButtonProps { app: App; windowsManager: WindowsManager; pins: string[]; active: boolean; visible: boolean; } export const AppButton: FC = memo(({ app, windowsManager, pins, active, visible }: AppButtonProps) => { const isPinned = pins.includes(app.id); const settingsManager = useSettingsManager(); const { onContextMenu } = useContextMenu({ Actions: (props) => { windowsManager.open(app.id); }}/> { const newPins = [...pins]; if (isPinned) { removeFromArray(app.id, pins); } else { newPins.push(app.id); } const settings = settingsManager.get(SettingsManager.VIRTUAL_PATHS.taskbar); void settings.set("pins", newPins.join(",")); }}/> {active && { windowsManager.close(windowsManager.getAppWindowId(app.id)); }}/>} }); const classNames = [styles["App-icon"]]; if (active) classNames.push(styles.Active); if (!visible) classNames.push(styles.Hidden); if (!windowsManager) return; return ( ); });