import { AppCircle, AppCircleContainer, AppDownloadButton, AppDownloadButtonText, AppInfoAppName, AppInfoSnippetContainer, AppInfoSnippetLeft, AppInfoSnippetMiddle, AppInfoUserName, AppsCategoryInfo, AppsCategoryInfoLabel, AppsCategoryInfoSub, AppsCategoryInfoValue, AppsInfoDescription, AppsLibraryContainer, AppsWidthLimiter, } from './Apps-styles'; import { Avatar, Box, useTheme } from '@mui/material'; import { getBaseApiReact } 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 './AppsNavBarDesktop'; import { useAtom, useSetAtom } from 'jotai'; import { useTranslation } from 'react-i18next'; export const AppInfo = ({ app, myName }) => { const isInstalled = app?.status?.status === 'READY'; const [sortablePinnedApps, setSortablePinnedApps] = useAtom( sortablePinnedAppsAtom ); const theme = useTheme(); const { t } = useTranslation([ 'auth', 'core', 'group', 'question', 'tutorial', ]); const isSelectedAppPinned = !!sortablePinnedApps?.find( (item) => item?.name === app?.name && item?.service === app?.service ); const setSettingsLocalLastUpdated = useSetAtom(settingsLocalLastUpdatedAtom); return ( 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: theme.palette.background.paper, height: '29px', maxWidth: '320px', opacity: isSelectedAppPinned ? 0.6 : 1, width: '100%', }} > {isSelectedAppPinned ? t('core:action.unpin_from_dashboard', { postProcess: 'capitalizeFirstChar', }) : t('core:action.pin_from_dashboard', { postProcess: 'capitalizeFirstChar', })} { executeEvent('addTab', { data: app, }); }} sx={{ backgroundColor: isInstalled ? theme.palette.primary.main : theme.palette.background.paper, height: '29px', maxWidth: '320px', width: '100%', }} > {isInstalled ? t('core:action.open', { postProcess: 'capitalizeFirstChar', }) : t('core:action.download', { postProcess: 'capitalizeFirstChar', })} {t('core:category', { postProcess: 'capitalizeFirstChar', })} : {app?.metadata?.categoryName || t('core:none', { postProcess: 'capitalizeFirstChar', })} {t('core:q_apps.about', { postProcess: 'capitalizeFirstChar', })} {app?.metadata?.description || t('core:message.generic.no_description', { postProcess: 'capitalizeFirstChar', })} ); };