import React, { useMemo, useState, useCallback } from 'react'
import {
Button,
Datagrid,
TextField,
TopToolbar,
useNotify,
useRecordContext,
useRefresh,
useTranslate,
} from 'react-admin'
import { makeStyles } from '@material-ui/core/styles'
import { useMediaQuery, Tooltip, Chip, Typography } from '@material-ui/core'
import { MdError, MdRefresh } from 'react-icons/md'
import { List, DateField, SimpleList, useResourceRefresh } from '../common'
import { httpClient } from '../dataProvider'
import ToggleEnabledSwitch from './ToggleEnabledSwitch'
const useStyles = makeStyles((theme) => ({
errorIcon: {
color: theme.palette.error.main,
marginRight: theme.spacing(0.5),
verticalAlign: 'middle',
},
errorChip: {
backgroundColor: theme.palette.error.light,
color: theme.palette.error.contrastText,
},
}))
const useManifest = () => {
const record = useRecordContext()
return useMemo(() => {
if (!record?.manifest) return null
try {
return JSON.parse(record.manifest)
} catch {
return null
}
}, [record?.manifest])
}
const EnabledOrErrorField = () => {
const record = useRecordContext()
const translate = useTranslate()
const classes = useStyles()
const manifest = useManifest()
if (record.lastError) {
return (
}
label={translate('resources.plugin.fields.hasError')}
className={classes.errorChip}
/>
)
}
return
}
const ManifestField = ({ source }) => {
const manifest = useManifest()
if (!manifest) {
return -
}
return {manifest[source] || '-'}
}
const PluginListActions = () => {
const translate = useTranslate()
const notify = useNotify()
const refresh = useRefresh()
const [loading, setLoading] = useState(false)
const handleRescan = useCallback(() => {
setLoading(true)
httpClient('/api/plugin/rescan', { method: 'POST' })
.then(() => {
refresh()
})
.catch((error) => {
notify(error.message || 'ra.page.error', { type: 'warning' })
})
.finally(() => {
setLoading(false)
})
}, [notify, refresh])
return (
)
}
const PluginList = (props) => {
const isXsmall = useMediaQuery((theme) => theme.breakpoints.down('xs'))
const translate = useTranslate()
useResourceRefresh('plugin')
return (
}
>
{isXsmall ? (
record.id}
secondaryText={(record) => {
try {
const manifest = JSON.parse(record.manifest)
return manifest.description || ''
} catch {
return ''
}
}}
tertiaryText={(record) =>
record.enabled
? translate('resources.plugin.status.enabled')
: translate('resources.plugin.status.disabled')
}
linkType="show"
/>
) : (
{!isXsmall && }
)}
)
}
export default PluginList