'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