import React from 'react' import { Card, CardContent, Typography, Box, FormControlLabel, Switch, List, ListItem, ListItemIcon, ListItemText, Checkbox, } from '@material-ui/core' import CheckBoxIcon from '@material-ui/icons/CheckBox' import CheckBoxOutlineBlankIcon from '@material-ui/icons/CheckBoxOutlineBlank' import Alert from '@material-ui/lab/Alert' import { useGetList, useTranslate } from 'react-admin' import PropTypes from 'prop-types' export const LibraryPermissionCard = ({ manifest, classes, selectedLibraries, allLibraries, onSelectedLibrariesChange, onAllLibrariesChange, }) => { const translate = useTranslate() // Fetch all libraries const { data: librariesData, loading: librariesLoading } = useGetList( 'library', { pagination: { page: 1, perPage: 1000 }, sort: { field: 'name', order: 'ASC' }, }, ) const libraries = React.useMemo(() => { return librariesData ? Object.values(librariesData) : [] }, [librariesData]) const handleToggleLibrary = React.useCallback( (libraryId) => { const newSelected = selectedLibraries.includes(libraryId) ? selectedLibraries.filter((id) => id !== libraryId) : [...selectedLibraries, libraryId] onSelectedLibrariesChange(newSelected) }, [selectedLibraries, onSelectedLibrariesChange], ) const handleAllLibrariesToggle = React.useCallback( (event) => { onAllLibrariesChange(event.target.checked) }, [onAllLibrariesChange], ) // Get permission reason from manifest const libraryPermission = manifest?.permissions?.library const reason = libraryPermission?.reason // Check if permission is required but not configured const isConfigurationRequired = libraryPermission && !allLibraries && selectedLibraries.length === 0 if (!libraryPermission) { return null } return ( {translate('resources.plugin.sections.libraryPermission')} {reason && ( {translate('resources.plugin.messages.permissionReason')}: {reason} )} {isConfigurationRequired && ( {translate('resources.plugin.messages.librariesRequired')} )} } label={translate('resources.plugin.fields.allLibraries')} /> {translate('resources.plugin.messages.allLibrariesHelp')} {!allLibraries && ( {translate('resources.plugin.fields.selectedLibraries')} {librariesLoading ? ( {translate('ra.message.loading')} ) : libraries.length === 0 ? ( {translate('resources.plugin.messages.noLibraries')} ) : ( {libraries.map((library) => ( handleToggleLibrary(library.id)} dense > } checkedIcon={} checked={selectedLibraries.includes(library.id)} tabIndex={-1} disableRipple /> ))} )} )} ) } LibraryPermissionCard.propTypes = { manifest: PropTypes.object, classes: PropTypes.object.isRequired, selectedLibraries: PropTypes.array.isRequired, allLibraries: PropTypes.bool.isRequired, onSelectedLibrariesChange: PropTypes.func.isRequired, onAllLibrariesChange: PropTypes.func.isRequired, }