'use client'
import type { ReactNode } from 'react'
import type { PermissionSettingKey } from './permission-quick-panel'
import type { Permissions, PermissionType, PluginCategoryEnum } from '@/app/components/plugins/types'
import { Button } from '@langgenius/dify-ui/button'
import { cn } from '@langgenius/dify-ui/cn'
import { Popover, PopoverContent, PopoverTrigger } from '@langgenius/dify-ui/popover'
import { Tooltip, TooltipContent, TooltipTrigger } from '@langgenius/dify-ui/tooltip'
import { useRef } from 'react'
import { useTranslation } from 'react-i18next'
import DebugInfo from '@/app/components/plugins/plugin-page/debug-info'
import InstallPluginDropdown from '@/app/components/plugins/plugin-page/install-plugin-dropdown'
import PluginTasks from '@/app/components/plugins/plugin-page/plugin-tasks'
import { PermissionQuickPanel } from './permission-quick-panel'
import {
integrationSidebarInactiveNavItemClassName,
integrationSidebarNavItemClassName,
} from './sidebar-nav-item-styles'
type PermissionTooltipWrapperProps = {
children: ReactNode
className?: string
content: string
placement: 'top' | 'bottom'
show: boolean
}
const permissionTooltipClassName = 'w-[112px] text-left'
function PermissionTooltipWrapper({
children,
className,
content,
placement,
show,
}: PermissionTooltipWrapperProps) {
const trigger = (
{children}
)
if (!show)
return trigger
return (
{content}
)
}
export function IntegrationSidebarActions({
canManagement,
installContextCategory,
onSwitchToMarketplace,
}: {
canManagement: boolean
installContextCategory?: PluginCategoryEnum
onSwitchToMarketplace: () => void
}) {
const { t } = useTranslation()
return (
)
}
function IntegrationSidebarInstallActions({
canManagement,
installContextCategory,
installLabel,
permissionTooltip,
onSwitchToMarketplace,
}: {
canManagement: boolean
installContextCategory?: PluginCategoryEnum
installLabel: string
permissionTooltip: string
onSwitchToMarketplace: () => void
}) {
const actionRowRef = useRef(null)
return (
actionRowRef.current}
dropdownPlacement="bottom-start"
/>
)
}
const sidebarUtilityActionClassName = cn(
integrationSidebarNavItemClassName,
integrationSidebarInactiveNavItemClassName,
'justify-start border-none bg-transparent shadow-none',
)
export function IntegrationSidebarUtilityActions({
canDebugger,
permission,
showPermissionQuickPanel,
onPermissionChange,
}: {
canDebugger: boolean
permission?: Permissions
showPermissionQuickPanel: boolean
onPermissionChange: (key: PermissionSettingKey, value: PermissionType) => void
}) {
const { t } = useTranslation()
const debugLabel = t('debugInfo.title', { ns: 'plugin' })
const permissionsLabel = t('privilege.permissions', { ns: 'plugin' })
return (
{canDebugger && (
{debugLabel}
>
)}
/>
)}
{showPermissionQuickPanel && permission && (
{permissionsLabel}
)}
/>
)}
)
}