| import { toast } from 'features/toast/toast'; | |
| import { useCallback } from 'react'; | |
| import { useTranslation } from 'react-i18next'; | |
| import { type InstallModelArg, useInstallModelMutation } from 'services/api/endpoints/models'; | |
| type InstallModelArgWithCallbacks = InstallModelArg & { | |
| onSuccess?: () => void; | |
| onError?: (error: unknown) => void; | |
| }; | |
| export const useInstallModel = () => { | |
| const { t } = useTranslation(); | |
| const [_installModel, request] = useInstallModelMutation(); | |
| const installModel = useCallback( | |
| ({ source, inplace, config, onSuccess, onError }: InstallModelArgWithCallbacks) => { | |
| config ||= {}; | |
| _installModel({ source, inplace, config }) | |
| .unwrap() | |
| .then((_) => { | |
| if (onSuccess) { | |
| onSuccess(); | |
| } | |
| toast({ | |
| id: 'MODEL_INSTALL_QUEUED', | |
| title: t('toast.modelAddedSimple'), | |
| status: 'success', | |
| }); | |
| }) | |
| .catch((error) => { | |
| if (onError) { | |
| onError(error); | |
| } | |
| if (error) { | |
| toast({ | |
| id: 'MODEL_INSTALL_QUEUE_FAILED', | |
| title: `${error.data.detail} `, | |
| status: 'error', | |
| }); | |
| } | |
| }); | |
| }, | |
| [_installModel, t] | |
| ); | |
| return [installModel, request] as const; | |
| }; | |