File size: 2,430 Bytes
f0743f4 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | // hooks/Plugins/usePluginInstall.ts
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,
};
}
|