All files / src/shared/FilePreview/hooks useDocumentPreviewV2.tsx

85% Statements 17/20
80% Branches 16/20
100% Functions 4/4
94.11% Lines 16/17

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 75                                        88x                 578x 578x 578x 578x   578x       14x 14x   14x                             578x 158x 2x 2x     2x 2x       578x              
import { TDocument } from "@common/FilePreview/types";
import { FILE_PREVIEW_MODAL_V2 } from "modals/modal_names";
import NiceModal, { useModal } from "@ebay/nice-modal-react";
import { FilePreviewType } from "../types";
import { useEffect, useRef } from "react";
import { fileFormatter } from "../utils";
import { isEqual } from "lodash";
 
type Props = {
  documentList?: TDocument[];
  entityId?: number;
  isDeleteHidden?: boolean;
  handleLocalDelete?:
    | ((fileId?: number, fileName?: string) => void)
    | ((index: number) => void);
  isBase64?: boolean;
  isMedia?: boolean;
  keepOpen?: boolean;
};
 
const useDocumentPreviewV2 = ({
  documentList,
  entityId,
  isDeleteHidden,
  handleLocalDelete,
  isBase64 = false,
  isMedia = false,
  keepOpen = true,
}: Props) => {
  const modalHandler = useModal(FILE_PREVIEW_MODAL_V2);
  const localRef = useRef(documentList);
  const { visible, args, show, remove } = modalHandler;
  const isListEqual = isEqual(localRef.current, documentList);
 
  const handlePreview = (
    fileData?: FilePreviewType,
    isBusinessOwnerID?: boolean,
  ) => {
    Iif (!fileData) return;
    const file = fileFormatter(fileData);
 
    NiceModal.show(FILE_PREVIEW_MODAL_V2, {
      file,
      documentList: documentList || [file],
      entityId,
      isDeleteHidden:
        isDeleteHidden || isBusinessOwnerID || fileData.isAutoGeneratedEvidence,
      handleLocalDelete,
      isBase64,
      isMedia,
      isPdfAsImage:
        ["jpeg", "png"].includes(fileData.fileType) &&
        fileData.isAutoGeneratedEvidence,
    });
  };
 
  useEffect(() => {
    if (isListEqual) return;
    localRef.current = documentList;
    Iif (visible) {
      show({ ...args, documentList });
    }
    return () => {
      Iif (visible && !keepOpen) remove();
    };
  }, [isListEqual]);
 
  return {
    handlePreview,
    modalHandler,
  };
};
 
export default useDocumentPreviewV2;