All files / src/components/UploadFile/hooks useUploadCustomerFile.tsx

5.26% Statements 1/19
0% Branches 0/4
0% Functions 0/5
5.55% Lines 1/18

Press n or j to go to the next uncovered block, b, p or k for the previous block.

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                                46x                                                                                                                  
import { customInstance } from "@services/api";
import { useMutation, useQueryClient } from "react-query";
import { buildAccountsUrl } from "@services/api/utils.api";
import { UploadProgressParams } from "@components/UploadFile/hooks/useUploadFiles";
import { useUploadSingleImage as useUploadSingleImageNew } from "@hooks/upload-api/uploadHooks";
 
type Props = {
  list: {
    file: File;
    id: string;
  }[];
  onUploadProgress: (params: UploadProgressParams) => void;
  onUploadFinish(params: { identifiers: (number | string)[] }): void;
  onUploadFailed(params: { fileIds: string[] }): void;
};
 
export const useUploadCustomerFile = () => {
  const { handleUpload, isLoading } = useUploadSingleImageNew();
 
  const queryClient = useQueryClient();
 
  const createImageMutation = useMutation(({ data, onUploadProgress }: any) => {
    return customInstance({
      url: buildAccountsUrl("media-items"),
      method: "POST",
      data,
      onUploadProgress,
    });
  });
 
  const handlePostImage = async ({
    list,
    onUploadFailed,
    onUploadFinish,
    onUploadProgress,
  }: Props) => {
    try {
      const tempUrl = await handleUpload({
        file: list[0]?.file,
        formType: "customer_avatar",
      });
 
      if (!tempUrl) return "";
 
      const promise = await createImageMutation.mutateAsync(
        {
          data: { label: "main_pic", url: tempUrl },
          onUploadProgress: (progressEvent: ProgressEvent) => {
            onUploadProgress({
              identifier: tempUrl,
              fileId: list?.[0].id,
              progress: (progressEvent.loaded * 100) / progressEvent.total,
            });
          },
        },
        {
          onSettled: () => {
            onUploadFinish({ identifiers: [tempUrl] });
          },
        },
      );
 
      await queryClient.invalidateQueries("get-all-media-items");
      const url: string = promise.URL || "";
      return url;
    } catch (err) {
      onUploadFailed({ fileIds: [list?.[0]?.id] });
      return "";
    }
  };
 
  return { handlePostImage, isLoading };
};