| |
| import { useCallback } from 'react'; |
| import { useUpdateUserPluginsMutation } from 'librechat-data-provider/react-query'; |
| import type { |
| TError, |
| TUser, |
| TUpdateUserPlugins, |
| TPlugin, |
| TPluginAction, |
| } from 'librechat-data-provider'; |
| import { useSetRecoilState } from 'recoil'; |
| import store from '~/store'; |
|
|
| interface PluginStoreHandlers { |
| onInstallError?: (error: TError) => void; |
| onUninstallError?: (error: TError) => void; |
| onInstallSuccess?: (data: TUser, variables: TUpdateUserPlugins, context: unknown) => void; |
| onUninstallSuccess?: (data: TUser, variables: TUpdateUserPlugins, context: unknown) => void; |
| } |
|
|
| export default function usePluginInstall(handlers: PluginStoreHandlers = {}) { |
| const setAvailableTools = useSetRecoilState(store.availableTools); |
| const { onInstallError, onInstallSuccess, onUninstallError, onUninstallSuccess } = handlers; |
| const updateUserPlugins = useUpdateUserPluginsMutation(); |
|
|
| const installPlugin = useCallback( |
| (pluginAction: TPluginAction, plugin: TPlugin) => { |
| updateUserPlugins.mutate(pluginAction, { |
| onError: (error: unknown) => { |
| if (onInstallError) { |
| onInstallError(error as TError); |
| } |
| }, |
| onSuccess: (...rest) => { |
| setAvailableTools((prev) => { |
| return { ...prev, [plugin.pluginKey]: plugin }; |
| }); |
| if (onInstallSuccess) { |
| onInstallSuccess(...rest); |
| } |
| }, |
| }); |
| }, |
| [updateUserPlugins, onInstallError, onInstallSuccess, setAvailableTools], |
| ); |
|
|
| const uninstallPlugin = useCallback( |
| (plugin: string) => { |
| updateUserPlugins.mutate( |
| { pluginKey: plugin, action: 'uninstall', auth: null }, |
| { |
| onError: (error: unknown) => { |
| if (onUninstallError) { |
| onUninstallError(error as TError); |
| } |
| }, |
| onSuccess: (...rest) => { |
| setAvailableTools((prev) => { |
| const newAvailableTools = { ...prev }; |
| delete newAvailableTools[plugin]; |
| return newAvailableTools; |
| }); |
| if (onUninstallSuccess) { |
| onUninstallSuccess(...rest); |
| } |
| }, |
| }, |
| ); |
| }, |
| [updateUserPlugins, onUninstallError, onUninstallSuccess, setAvailableTools], |
| ); |
|
|
| return { |
| installPlugin, |
| uninstallPlugin, |
| }; |
| } |
|
|