'use client'; import { useState, useEffect, forwardRef, useImperativeHandle } from 'react'; import { PluginCardVO } from '@/app/home/plugins/plugin-installed/PluginCardVO'; import PluginCardComponent from '@/app/home/plugins/plugin-installed/plugin-card/PluginCardComponent'; import PluginForm from '@/app/home/plugins/plugin-installed/plugin-form/PluginForm'; import styles from '@/app/home/plugins/plugins.module.css'; import { httpClient } from '@/app/infra/http/HttpClient'; import { Dialog, DialogContent, DialogHeader, DialogTitle, } from '@/components/ui/dialog'; import { useTranslation } from 'react-i18next'; import { i18nObj } from '@/i18n/I18nProvider'; export interface PluginInstalledComponentRef { refreshPluginList: () => void; } // eslint-disable-next-line react/display-name const PluginInstalledComponent = forwardRef( (props, ref) => { const { t } = useTranslation(); const [pluginList, setPluginList] = useState([]); const [modalOpen, setModalOpen] = useState(false); const [selectedPlugin, setSelectedPlugin] = useState( null, ); useEffect(() => { initData(); // eslint-disable-next-line react-hooks/exhaustive-deps }, []); function initData() { getPluginList(); } function getPluginList() { httpClient.getPlugins().then((value) => { setPluginList( value.plugins.map((plugin) => { return new PluginCardVO({ author: plugin.author, description: i18nObj(plugin.description), enabled: plugin.enabled, name: plugin.name, version: plugin.version, status: plugin.status, tools: plugin.tools, event_handlers: plugin.event_handlers, repository: plugin.repository, priority: plugin.priority, }); }), ); }); } useImperativeHandle(ref, () => ({ refreshPluginList: getPluginList, })); function handlePluginClick(plugin: PluginCardVO) { setSelectedPlugin(plugin); setModalOpen(true); } return ( <> {pluginList.length === 0 ? (
{t('plugins.noPluginInstalled')}
) : (
{t('plugins.pluginConfig')}
{selectedPlugin && ( { setModalOpen(false); getPluginList(); }} onFormCancel={() => { setModalOpen(false); }} /> )}
{pluginList.map((vo, index) => { return (
handlePluginClick(vo)} />
); })}
)} ); }, ); export default PluginInstalledComponent;