From 3e8a4a66fe2bf7e26b4f94c8c8ec89d8251dbdef Mon Sep 17 00:00:00 2001 From: Joel Date: Fri, 27 Jun 2025 09:55:25 +0800 Subject: [PATCH] feat: api to refernce settings --- .../install-bundle/steps/install.tsx | 2 +- .../components/plugins/plugin-page/index.tsx | 12 +++++----- ...permission.ts => use-reference-setting.ts} | 22 +++++++++-------- .../plugins/reference-setting-modal/modal.tsx | 13 +++++----- web/app/components/plugins/types.ts | 6 +++++ web/service/use-plugins.ts | 24 +++++++++---------- 6 files changed, 43 insertions(+), 36 deletions(-) rename web/app/components/plugins/plugin-page/{use-permission.ts => use-reference-setting.ts} (68%) diff --git a/web/app/components/plugins/install-plugin/install-bundle/steps/install.tsx b/web/app/components/plugins/install-plugin/install-bundle/steps/install.tsx index 2d8bdcd3d9..fabad62397 100644 --- a/web/app/components/plugins/install-plugin/install-bundle/steps/install.tsx +++ b/web/app/components/plugins/install-plugin/install-bundle/steps/install.tsx @@ -10,7 +10,7 @@ import type { ExposeRefs } from './install-multi' import InstallMulti from './install-multi' import { useInstallOrUpdate } from '@/service/use-plugins' import useRefreshPluginList from '../../hooks/use-refresh-plugin-list' -import { useCanInstallPluginFromMarketplace } from '@/app/components/plugins/plugin-page/use-permission' +import { useCanInstallPluginFromMarketplace } from '@/app/components/plugins/plugin-page/use-reference-setting' import { useMittContextSelector } from '@/context/mitt-context' import Checkbox from '@/app/components/base/checkbox' const i18nPrefix = 'plugin.installModal' diff --git a/web/app/components/plugins/plugin-page/index.tsx b/web/app/components/plugins/plugin-page/index.tsx index 78e60aa37b..a0734790b9 100644 --- a/web/app/components/plugins/plugin-page/index.tsx +++ b/web/app/components/plugins/plugin-page/index.tsx @@ -17,7 +17,7 @@ import { } from './context' import InstallPluginDropdown from './install-plugin-dropdown' import { useUploader } from './use-uploader' -import usePermission from './use-permission' +import useReferenceSetting from './use-reference-setting' import DebugInfo from './debug-info' import PluginTasks from './plugin-tasks' import Button from '@/app/components/base/button' @@ -121,12 +121,12 @@ const PluginPage = ({ }, [packageId, bundleInfo]) const { + referenceSetting, canManagement, canDebugger, canSetPermissions, - permissions, - setPermissions, - } = usePermission() + setReferenceSettings, + } = useReferenceSetting() const [showPluginSettingModal, { setTrue: setShowPluginSettingModal, setFalse: setHidePluginSettingModal, @@ -277,9 +277,9 @@ const PluginPage = ({ {showPluginSettingModal && ( )} diff --git a/web/app/components/plugins/plugin-page/use-permission.ts b/web/app/components/plugins/plugin-page/use-reference-setting.ts similarity index 68% rename from web/app/components/plugins/plugin-page/use-permission.ts rename to web/app/components/plugins/plugin-page/use-reference-setting.ts index 918813fb44..dbf5097c07 100644 --- a/web/app/components/plugins/plugin-page/use-permission.ts +++ b/web/app/components/plugins/plugin-page/use-reference-setting.ts @@ -2,7 +2,7 @@ import { PermissionType } from '../types' import { useAppContext } from '@/context/app-context' import Toast from '../../base/toast' import { useTranslation } from 'react-i18next' -import { useInvalidatePermissions, useMutationPermissions, usePermissions } from '@/service/use-plugins' +import { useInvalidateReferenceSettings, useMutationReferenceSettings, useReferenceSettings } from '@/service/use-plugins' import { useMemo } from 'react' import { useGlobalPublicStore } from '@/context/global-public-context' @@ -19,14 +19,16 @@ const hasPermission = (permission: PermissionType | undefined, isAdmin: boolean) return isAdmin } -const usePermission = () => { +const useReferenceSetting = () => { const { t } = useTranslation() const { isCurrentWorkspaceManager, isCurrentWorkspaceOwner } = useAppContext() - const { data: permissions } = usePermissions() - const invalidatePermissions = useInvalidatePermissions() - const { mutate: updatePermission, isPending: isUpdatePending } = useMutationPermissions({ + const { data } = useReferenceSettings() + // console.log(data) + const { permission: permissions } = data || {} + const invalidateReferenceSettings = useInvalidateReferenceSettings() + const { mutate: updateReferenceSetting, isPending: isUpdatePending } = useMutationReferenceSettings({ onSuccess: () => { - invalidatePermissions() + invalidateReferenceSettings() Toast.notify({ type: 'success', message: t('common.api.actionSuccess'), @@ -36,18 +38,18 @@ const usePermission = () => { const isAdmin = isCurrentWorkspaceManager || isCurrentWorkspaceOwner return { + referenceSetting: data, + setReferenceSettings: updateReferenceSetting, canManagement: hasPermission(permissions?.install_permission, isAdmin), canDebugger: hasPermission(permissions?.debug_permission, isAdmin), canSetPermissions: isAdmin, - permissions, - setPermissions: updatePermission, isUpdatePending, } } export const useCanInstallPluginFromMarketplace = () => { const { enable_marketplace } = useGlobalPublicStore(s => s.systemFeatures) - const { canManagement } = usePermission() + const { canManagement } = useReferenceSetting() const canInstallPluginFromMarketplace = useMemo(() => { return enable_marketplace && canManagement @@ -58,4 +60,4 @@ export const useCanInstallPluginFromMarketplace = () => { } } -export default usePermission +export default useReferenceSetting diff --git a/web/app/components/plugins/reference-setting-modal/modal.tsx b/web/app/components/plugins/reference-setting-modal/modal.tsx index 0bf12cb2b5..9fefbdbb55 100644 --- a/web/app/components/plugins/reference-setting-modal/modal.tsx +++ b/web/app/components/plugins/reference-setting-modal/modal.tsx @@ -5,19 +5,18 @@ import { useTranslation } from 'react-i18next' import Modal from '@/app/components/base/modal' import OptionCard from '@/app/components/workflow/nodes/_base/components/option-card' import Button from '@/app/components/base/button' -import type { Permissions } from '@/app/components/plugins/types' +import type { Permissions, ReferenceSetting } from '@/app/components/plugins/types' import { PermissionType } from '@/app/components/plugins/types' import type { AutoUpdateConfig } from './auto-update-setting/types' import AutoUpdateSetting from './auto-update-setting' import { defaultValue as autoUpdateDefaultValue } from './auto-update-setting/config' import Label from './label' -type Payload = Permissions & { autoUpdate: AutoUpdateConfig } const i18nPrefix = 'plugin.privilege' type Props = { - payload: Payload + payload: ReferenceSetting onHide: () => void - onSave: (payload: Payload) => void + onSave: (payload: ReferenceSetting) => void } const PluginSettingModal: FC = ({ @@ -26,7 +25,7 @@ const PluginSettingModal: FC = ({ onSave, }) => { const { t } = useTranslation() - const { autoUpdate: autoUpdateConfig, ...privilege } = payload || {} + const { auto_upgrade: autoUpdateConfig, permission: privilege } = payload || {} const [tempPrivilege, setTempPrivilege] = useState(privilege) const [tempAutoUpdateConfig, setTempAutoUpdateConfig] = useState(autoUpdateConfig || autoUpdateDefaultValue) const handlePrivilegeChange = useCallback((key: string) => { @@ -40,8 +39,8 @@ const PluginSettingModal: FC = ({ const handleSave = useCallback(async () => { await onSave({ - ...tempPrivilege, - autoUpdate: tempAutoUpdateConfig, + permission: tempPrivilege, + auto_upgrade: tempAutoUpdateConfig, }) onHide() }, [onHide, onSave, tempAutoUpdateConfig, tempPrivilege]) diff --git a/web/app/components/plugins/types.ts b/web/app/components/plugins/types.ts index ac62d77437..0479d5461a 100644 --- a/web/app/components/plugins/types.ts +++ b/web/app/components/plugins/types.ts @@ -2,6 +2,7 @@ import type { CredentialFormSchemaBase } from '../header/account-setting/model-p import type { ToolCredential } from '@/app/components/tools/types' import type { Locale } from '@/i18n' import type { AgentFeature } from '@/app/components/workflow/nodes/agent/types' +import type { AutoUpdateConfig } from './reference-setting-modal/auto-update-setting/types' export enum PluginType { tool = 'tool', model = 'model', @@ -167,6 +168,11 @@ export type Permissions = { debug_permission: PermissionType } +export type ReferenceSetting = { + permission: Permissions + auto_upgrade: AutoUpdateConfig +} + export type UpdateFromMarketPlacePayload = { category: PluginType originalPackageInfo: { diff --git a/web/service/use-plugins.ts b/web/service/use-plugins.ts index 57829ebd5c..802c1e6428 100644 --- a/web/service/use-plugins.ts +++ b/web/service/use-plugins.ts @@ -12,7 +12,6 @@ import type { InstalledLatestVersionResponse, InstalledPluginListWithTotalResponse, PackageDependency, - Permissions, Plugin, PluginDeclaration, PluginDetail, @@ -21,6 +20,7 @@ import type { PluginType, PluginsFromMarketplaceByInfoResponse, PluginsFromMarketplaceResponse, + ReferenceSetting, VersionInfo, VersionListResponse, uploadGitHubResponse, @@ -39,7 +39,7 @@ import { useQueryClient, } from '@tanstack/react-query' import { useInvalidateAllBuiltInTools } from './use-tools' -import usePermission from '@/app/components/plugins/plugin-page/use-permission' +import useReferenceSetting from '@/app/components/plugins/plugin-page/use-reference-setting' import { uninstallPlugin } from '@/service/plugins' import useRefreshPluginList from '@/app/components/plugins/install-plugin/hooks/use-refresh-plugin-list' import { cloneDeep } from 'lodash-es' @@ -349,32 +349,32 @@ export const useDebugKey = () => { }) } -const usePermissionsKey = [NAME_SPACE, 'permissions'] -export const usePermissions = () => { +const useReferenceSettingKey = [NAME_SPACE, 'referenceSettings'] +export const useReferenceSettings = () => { return useQuery({ - queryKey: usePermissionsKey, - queryFn: () => get('/workspaces/current/plugin/permission/fetch'), + queryKey: useReferenceSettingKey, + queryFn: () => get('/workspaces/current/plugin/preferences/fetch'), }) } -export const useInvalidatePermissions = () => { +export const useInvalidateReferenceSettings = () => { const queryClient = useQueryClient() return () => { queryClient.invalidateQueries( { - queryKey: usePermissionsKey, + queryKey: useReferenceSettingKey, }) } } -export const useMutationPermissions = ({ +export const useMutationReferenceSettings = ({ onSuccess, }: { onSuccess?: () => void }) => { return useMutation({ - mutationFn: (payload: Permissions) => { - return post('/workspaces/current/plugin/permission/change', { body: payload }) + mutationFn: (payload: ReferenceSetting) => { + return post('/workspaces/current/plugin/preferences/change', { body: payload }) }, onSuccess, }) @@ -480,7 +480,7 @@ const usePluginTaskListKey = [NAME_SPACE, 'pluginTaskList'] export const usePluginTaskList = (category?: PluginType) => { const { canManagement, - } = usePermission() + } = useReferenceSetting() const { refreshPluginList } = useRefreshPluginList() const { data,