'use client' import type { ReactNode } from 'react' import type { IntegrationSection } from './routes' import { ApiBasedExtensionPage } from '@/app/components/header/account-setting/api-based-extension-page' import DataSourcePage from '@/app/components/header/account-setting/data-source-page-new' import ModelProviderPage from '@/app/components/header/account-setting/model-provider-page' import InstallFromMarketplaceQuery from '@/app/components/plugins/install-plugin/install-from-marketplace-query' import { PluginCategoryEnum } from '@/app/components/plugins/types' import { toolsContentFrameClassNames, toolsContentInsetClassNames, } from '@/app/components/tools/content-inset' import { IntegrationPageHeader } from './page-header' import PluginCategoryPage from './plugin-category-page' import { IntegrationSectionLayout } from './section-layout' import ToolProviderList from './tool-provider-list' type IntegrationSectionRendererProps = { canInstallPlugin?: boolean canDeletePlugin?: boolean isInstallPermissionLoading?: boolean canUpdatePlugin?: boolean description?: ReactNode onProviderSearchTextChange: (value: string) => void onSwitchToMarketplace?: () => void pluginCategoryToolbarAction?: ReactNode providerSearchText: string scrollAreaLabel?: string section: IntegrationSection title?: ReactNode } const IntegrationSectionRenderer = ({ canInstallPlugin = true, canDeletePlugin = true, isInstallPermissionLoading = false, canUpdatePlugin = true, description, onProviderSearchTextChange, onSwitchToMarketplace, pluginCategoryToolbarAction, providerSearchText, scrollAreaLabel, section, title, }: IntegrationSectionRendererProps) => { const compactFrameClassName = `${toolsContentFrameClassNames.compact} ${toolsContentInsetClassNames.compact}` const renderHeader = (toolbar?: ReactNode) => ( ) const renderScrollBody = (body: ReactNode) => ( {body} ) const renderScrollableLayout = ({ body, toolbar }: { body: ReactNode; toolbar: ReactNode }) => ( <> {renderHeader(toolbar)} {renderScrollBody(body)} ) const renderDirectLayout = ({ body, toolbar }: { body: ReactNode; toolbar: ReactNode }) => ( <> {renderHeader(toolbar)} {body} ) const renderPluginCategoryPage = (category: PluginCategoryEnum) => ( ) const renderMarketplaceInstallQuery = (category: PluginCategoryEnum) => ( ) switch (section) { case 'provider': return ( <> {renderMarketplaceInstallQuery(PluginCategoryEnum.model)} ) case 'builtin': return renderPluginCategoryPage(PluginCategoryEnum.tool) case 'mcp': return case 'custom-tool': return case 'workflow-tool': return ( ) case 'data-source': return ( <> {renderMarketplaceInstallQuery(PluginCategoryEnum.datasource)} ) case 'custom-endpoint': return case 'trigger': return renderPluginCategoryPage(PluginCategoryEnum.trigger) case 'agent-strategy': return renderPluginCategoryPage(PluginCategoryEnum.agent) case 'extension': return renderPluginCategoryPage(PluginCategoryEnum.extension) default: return null } } export default IntegrationSectionRenderer