import { Box, Table, Tag } from '@rocket.chat/fuselage'; import React, { FC, useState, memo, KeyboardEvent, MouseEvent } from 'react'; import AppAvatar from '../../../components/avatar/AppAvatar'; import { useRoute } from '../../../contexts/RouterContext'; import { useTranslation } from '../../../contexts/TranslationContext'; import AppMenu from './AppMenu'; import AppStatus from './AppStatus'; import { App } from './types'; type AppRowProps = App & { medium: boolean; large: boolean; }; const AppRow: FC = ({ medium, ...props }) => { const { author: { name: authorName }, name, id, description, categories, iconFileData, marketplaceVersion, iconFileContent, installed, } = props; const t = useTranslation(); const [isFocused, setFocused] = useState(false); const [isHovered, setHovered] = useState(false); const isStatusVisible = isFocused || isHovered; const appsRoute = useRoute('admin-apps'); const handleClick = (): void => { appsRoute.push({ context: 'details', version: marketplaceVersion, id, }); }; const handleKeyDown = (e: KeyboardEvent): void => { if (!['Enter', 'Space'].includes(e.nativeEvent.code)) { return; } handleClick(); }; const preventClickPropagation = (e: MouseEvent): void => { e.stopPropagation(); }; return ( setFocused(true)} onBlur={(): void => setFocused(false)} onMouseEnter={(): void => setHovered(true)} onMouseLeave={(): void => setHovered(false)} > {name} {`${t('By')} ${authorName}`} {medium && ( {description} {categories && ( {categories.map((current) => ( {current} ))} )} )} {installed && } ); }; export default memo(AppRow);