import { memo } from "react"; import Application from "../../../features/applications/application.js"; import styles from "./AppIcon.module.css"; import { ReactSVG } from "react-svg"; import { useSettingsManager } from "../../../hooks/settings/settingsManagerContext.js"; import { useContextMenu } from "../../../hooks/modals/contextMenu.js"; import ModalsManager from "../../../features/modals/modals.js"; import { Actions } from "../../actions/Actions.jsx"; import { ClickAction } from "../../actions/actions/ClickAction.jsx"; import { faThumbTack, faTimes } from "@fortawesome/free-solid-svg-icons"; import { SettingsManager } from "../../../features/settings/settingsManager.js"; import { removeFromArray } from "../../../features/utils/array.js"; import AppsManager from "../../../features/applications/applications.js"; /** * @param {object} props * @param {Application} props.app * @param {ModalsManager} props.modalsManager * @param {string[]} props.pins * @param {boolean} props.focused */ export const AppButton = memo(({ app, windowsManager, modalsManager, pins, active, visible }) => { const isPinned = pins.includes(app.id); const settingsManager = useSettingsManager(); const { onContextMenu } = useContextMenu({ modalsManager, 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); 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 ( ); });