File size: 1,332 Bytes
8a37e0a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
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;
};