import React, { useState } from 'react' import { Card, CardContent, Typography, Grid, Box, Chip, Tooltip, Link, ClickAwayListener, } from '@material-ui/core' import { useTranslate } from 'react-admin' import { DateField } from '../common' // Helper component for permission chips with clickable persistent tooltips const PermissionChip = ({ label, permission, classes }) => { const [open, setOpen] = useState(false) const translate = useTranslate() if (!permission) return null const hasHosts = permission.requiredHosts?.length > 0 const hasTooltip = permission.reason || hasHosts const handleClick = () => { if (hasTooltip) { setOpen((prev) => !prev) } } const handleClose = () => { setOpen(false) } const tooltipContent = ( {permission.reason && ( {permission.reason} )} {hasHosts && ( {translate('resources.plugin.messages.requiredHosts')}:{' '} {permission.requiredHosts.map((host, i) => ( {i > 0 && ', '} {host} ))} )} ) const chip = ( ) if (!hasTooltip) { return chip } return (
{chip}
) } // Info row component for responsive grid const InfoRow = ({ label, children, classes, isSmall }) => ( <> {label} {children} ) // Plugin information card export const InfoCard = ({ record, manifest, classes, translate, isSmall }) => ( {translate('resources.plugin.sections.info')} {record.id} {translate('resources.plugin.messages.idHelp')} {manifest?.name && ( {manifest.name} )} {manifest?.version && ( {manifest.version} )} {manifest?.description && ( {manifest.description} )} {manifest?.author && ( {manifest.author} )} {manifest?.website && ( {manifest.website} )} {manifest?.permissions && Object.keys(manifest.permissions).length > 0 && ( {Object.entries(manifest.permissions).map(([key, value]) => ( ))} {translate('resources.plugin.messages.clickPermissions')} )} {record.path} )