/* eslint-disable prop-types */ import React, {useRef, useEffect} from "react"; import "./ImageUploader.scss"; import classnames from "classnames"; import Preloader from "../preloader/Preloader"; import {IuseImageUploader} from "../../hooks/hook"; import JDVideo from "../video/Video"; import $ from "jquery"; import {s4} from "../../utils/utils"; export const DEFAULT_FILE:any = { filename: "", mimeType: "", tags: [], url: "", __typename: "JdFile" }; export interface ImageUploaderIProps extends IuseImageUploader { minHeight: string; height?: string; mode?: "noEffect" | "noBg"; className?: any; coverImg?: boolean; canUploadImg?: boolean; autoHeight?: boolean; } const ImageUploader: React.SFC = ({ uploading, file, isError, mode, coverImg, canUploadImg = true, onChangeFile, autoHeight, minHeight, height = "200px", // 옵션은 HOOK에 지정된 것들 option, ...props }) => { const {url, mimeType} = file || DEFAULT_FILE; const isVideo = mimeType.includes("video"); const isImg = mimeType.includes("image"); const imageUploaderRef = useRef(null); // 이미지 Hook으로 부터 스타일을 추출해낸다. const classes = classnames("imageUploader", props && props.className, { "imageUploader--error": isError, "imageUploader--loading": uploading, "imageUploader--coverImg": coverImg, "imageUploader--noBg": mode === "noBg", "imageUploader--noEffect": mode === "noEffect" }); const imageUploaderStyle = { height, minHeight }; const imageUploader_loading_style = { backgroundImage: "none", minHeight }; const imageStyle = { minHeight, backgroundImage: `url(${url})` }; const randomKey = s4(); useEffect(() => { if (autoHeight) { setTimeout(() => { const target = document.getElementById(`file${randomKey}`); if (!target) return; const toHeight = target.clientHeight; if (imageUploaderRef.current && url && toHeight) $(imageUploaderRef.current).height(toHeight); }, 200); } }); return (
{canUploadImg && ( )} {isImg &&
} {isVideo && } {/* 이 이미지는 이미지 크기를 재는 용도로만 사용됨 */}
); }; export default ImageUploader;