import React, { useEffect, useMemo, useState } from "react"; import { AppCircle, AppCircleContainer, AppCircleLabel, AppDownloadButton, AppDownloadButtonText, AppInfoAppName, AppInfoSnippetContainer, AppInfoSnippetLeft, AppInfoSnippetMiddle, AppInfoSnippetRight, AppInfoUserName, AppsCategoryInfo, AppsCategoryInfoLabel, AppsCategoryInfoSub, AppsCategoryInfoValue, AppsInfoDescription, AppsLibraryContainer, AppsParent, AppsWidthLimiter, } from "./Apps-styles"; import { Avatar, Box, ButtonBase, InputBase } from "@mui/material"; import { Add } from "@mui/icons-material"; import { getBaseApiReact, isMobile } from "../../App"; import LogoSelected from "../../assets/svgs/LogoSelected.svg"; import { Spacer } from "../../common/Spacer"; import { executeEvent } from "../../utils/events"; import { AppRating } from "./AppRating"; import { settingsLocalLastUpdatedAtom, sortablePinnedAppsAtom } from "../../atoms/global"; import { saveToLocalStorage } from "./AppsNavBar"; import { useRecoilState, useSetRecoilState } from "recoil"; export const AppInfo = ({ app, myName }) => { const isInstalled = app?.status?.status === "READY"; const [sortablePinnedApps, setSortablePinnedApps] = useRecoilState(sortablePinnedAppsAtom); const isSelectedAppPinned = !!sortablePinnedApps?.find((item)=> item?.name === app?.name && item?.service === app?.service) const setSettingsLocalLastUpdated = useSetRecoilState(settingsLocalLastUpdatedAtom); return ( {!isMobile && } center-icon {app?.metadata?.title || app?.name} {app?.name} { setSortablePinnedApps((prev) => { let updatedApps; if (isSelectedAppPinned) { // Remove the selected app if it is pinned updatedApps = prev.filter( (item) => !(item?.name === app?.name && item?.service === app?.service) ); } else { // Add the selected app if it is not pinned updatedApps = [...prev, { name: app?.name, service: app?.service, }]; } saveToLocalStorage('ext_saved_settings', 'sortablePinnedApps', updatedApps) return updatedApps; }); setSettingsLocalLastUpdated(Date.now()) }} sx={{ backgroundColor: "#359ff7ff", width: "100%", maxWidth: "320px", height: "29px", opacity: isSelectedAppPinned ? 0.6 : 1 }} > {!isMobile ? ( <> {isSelectedAppPinned ? 'Unpin from dashboard' : 'Pin to dashboard'} ) : ( <> {isSelectedAppPinned ? 'Unpin' : 'Pin'} )} { executeEvent("addTab", { data: app, }); }} sx={{ backgroundColor: isInstalled ? "#0091E1" : "#247C0E", width: "100%", maxWidth: "320px", height: "29px", }} > {isInstalled ? "Open" : "Download"} Category: {app?.metadata?.categoryName || "none"} About this Q-App {app?.metadata?.description || "No description"} ); };