Files
dify/web/app/components/plugins/plugin-page/use-reference-setting.ts

71 lines
2.5 KiB
TypeScript

import { toast } from '@langgenius/dify-ui/toast'
import { useSuspenseQuery } from '@tanstack/react-query'
import { useMemo } from 'react'
import { useTranslation } from 'react-i18next'
import { useAppContext } from '@/context/app-context'
import { systemFeaturesQueryOptions } from '@/service/system-features'
import { useInvalidateReferenceSettings, useMutationReferenceSettings, useReferenceSettings } from '@/service/use-plugins'
import { hasPermission } from '@/utils/permission'
import { PermissionType } from '../types'
const hasPluginPermission = (permission: PermissionType | undefined, isAdmin: boolean) => {
if (!permission)
return false
if (permission === PermissionType.noOne)
return false
if (permission === PermissionType.everyone)
return true
return isAdmin
}
const useReferenceSetting = () => {
const { t } = useTranslation()
const { isCurrentWorkspaceManager, isCurrentWorkspaceOwner, workspacePermissionKeys } = useAppContext()
const { data } = useReferenceSettings()
const { permission: permissions } = data || {}
const invalidateReferenceSettings = useInvalidateReferenceSettings()
const { mutate: updateReferenceSetting, isPending: isUpdatePending } = useMutationReferenceSettings({
onSuccess: () => {
invalidateReferenceSettings()
toast.success(t('api.actionSuccess', { ns: 'common' }))
},
})
const isAdmin = isCurrentWorkspaceManager || isCurrentWorkspaceOwner
const canInstall = hasPermission(workspacePermissionKeys, ['plugin.install', 'plugin.manage'])
const canUninstall = hasPermission(workspacePermissionKeys, ['plugin.uninstall', 'plugin.manage'])
const canSetPreferences = hasPermission(workspacePermissionKeys, ['plugin.preference.manage'])
return {
referenceSetting: data,
setReferenceSettings: updateReferenceSetting,
canInstall: hasPluginPermission(permissions?.install_permission, canInstall),
canUninstall,
canDebugger: hasPluginPermission(permissions?.debug_permission, isAdmin),
canSetPreferences,
isUpdatePending,
}
}
export const useCanInstallPluginFromMarketplace = () => {
const { data: enable_marketplace } = useSuspenseQuery({
...systemFeaturesQueryOptions(),
select: s => s.enable_marketplace,
})
const { canInstall } = useReferenceSetting()
const canInstallPluginFromMarketplace = useMemo(() => {
return enable_marketplace && canInstall
}, [enable_marketplace, canInstall])
return {
canInstallPluginFromMarketplace,
}
}
export default useReferenceSetting