import React, {useState, useEffect, useRef} from 'react'; import {Link, useNavigate, useLocation, useParams} from 'react-router-dom'; import Modal from "react-bootstrap/Modal"; import * as EgovNet from 'api/egovFetch'; import URL from 'constants/url'; import CODE from 'constants/code'; import {default as EgovLeftNav} from 'components/leftmenu/EgovLeftNavAdmin'; import EgovRadioButtonGroup from 'components/EgovRadioButtonGroup'; import {Form} from "react-bootstrap"; function AboutSiteModal({props, reloadFunction}) { console.group("AboutSiteModal"); console.log("[Start] AboutSiteModal ------------------------------"); console.log("AboutSiteModal [props] : ", props); const navigate = useNavigate(); const location = useLocation(); const checkRef = useRef([]); const fileInputRef = useRef(null); console.log("AboutSiteModal [location] : ", location); let item = null; item = props; console.log("@@@ item : " + JSON.stringify(item)); const [modeInfo, setModeInfo] = useState(item != null ? {mode: props.mode} : {mode: CODE.MODE_CREATE}); const [boardDetail, setBoardDetail] = useState({}); console.log("@@@ mode : " + modeInfo.mode); useEffect(() => { initMode(); const fileDOM = document.querySelector('#file'); const preview = document.querySelector('.preview'); if(fileDOM) { fileDOM.addEventListener('change', () => { const reader = new FileReader(); reader.onload = ({target}) => { preview.src = target.result; }; reader.readAsDataURL(fileDOM.files[0]); }); } }, []); const initMode = () => { if (modeInfo.mode === CODE.MODE_MODIFY) { setBoardDetail(item); } } function editPartnerSite(e) { e.preventDefault(); e.stopPropagation(); const form = e.target; const formData = new FormData(form); // 새 FormData 객체 생성 // FormData 객체에 파일 데이터 추가 console.log("@@@ current : " + fileInputRef.current); console.log("@@@ file : " + fileInputRef.current.files[0]); formData.append('file', currentFile); formData.append('fileGrpId', props.fileGrpId); if (modeInfo.mode === CODE.MODE_MODIFY) { formData.append('siteSeq', props.siteSeq); // 수정 모드일 때 필요한 추가 정보 추가 } EgovNet.requestFetch( '/admin/config/partner-site-mgt', { method: "PUT", body: formData }, (resp) => { if (Number(resp.resultCode) === Number(CODE.RCV_SUCCESS)) { alert("저장되었습니다."); reloadFunction(); } else if (Number(resp.resultCode) === Number(CODE.RCV_ERROR_AUTH)) { console.log("토큰 갱신중.") } else { alert(resp.result.resultMessage) } } ) } function deletePartnerSite(partnerSite){ if(window.confirm("삭제하시겠습니까?")) { EgovNet.requestFetch( '/admin/config/partner-site-mgt', { method: "DELETE", headers: { 'Content-type': 'application/json' }, body: JSON.stringify(partnerSite) }, (resp) => { if (Number(resp.resultCode) === Number(CODE.RCV_SUCCESS)) { alert("삭제되었습니다.") reloadFunction(); } else if (Number(resp.resultCode) === Number(CODE.RCV_ERROR_AUTH)) { console.log("토큰 갱신중.") } else { alert(resp.result.resultMessage) } } ) } } const Logo = () => ( ) const [currentFile, setCurrentFile] = useState(null); const [uploadedInfo, setUploadedInfo] = useState(null); const [previewImage, setPreviewImage] = useState(null); const UploadBox = () => { const [isActive, setActive] = useState(false); const onDragEnter = (e: React.DragEvent) => { e.preventDefault(); e.stopPropagation(); }; const onDragLeave = (e: React.DragEvent) => { e.preventDefault(); e.stopPropagation(); }; const onDragOver = (e: React.DragEvent) => { e.preventDefault(); e.stopPropagation(); }; const setFileInfo = (file) => { const { name, size: byteSize, type } = file; const isImage = type.includes('image'); const size = (byteSize / (1024 * 1024)).toFixed(2) + 'mb'; setUploadedInfo({ name, size, type }); // name, size, type 정보를 uploadedInfo에 저장 if (!isImage) { setUploadedInfo({ name, size, type }); return; } const reader = new FileReader(); reader.onload = () => { setPreviewImage(reader.result); setUploadedInfo({ name, size, type, imageUrl: String(reader.result) }); }; reader.readAsDataURL(file); }; const onDrop = (e: React.DragEvent) => { e.preventDefault(); e.stopPropagation(); setActive(false); const droppedFile = e.dataTransfer.files[0]; console.log("@@@ handleDrop file : " + droppedFile); if (droppedFile.type.startsWith('image/')) { setCurrentFile(droppedFile); setFileInfo(droppedFile); } else { // 이미지 파일이 아닌 경우에 대한 처리 alert('이미지 파일만 업로드할 수 있습니다.'); } }; const handleUpload = (e: ChangeEvent) => { const file = e.target.files[0]; console.log("@@@ handleUpload file : " + file); if (file.type.startsWith('image/')) { setCurrentFile(file); setFileInfo(file); } else { // 이미지 파일이 아닌 경우에 대한 처리 alert('이미지 파일만 업로드할 수 있습니다.'); } }; return ( {previewImage && } {!uploadedInfo && ( <> 클릭 혹은 파일을 이곳에 드롭하세요. 파일당 최대 3MB > )} ); }; console.log("------------------------------AboutSiteModal [End]"); console.groupEnd("AboutSiteModal"); const defaultUseYn = props?.useYn ? props.useYn : "Y"; return ( <> {/* */} {modeInfo.mode === CODE.MODE_CREATE && '관련사이트 생성'} {modeInfo.mode === CODE.MODE_MODIFY && '관련사이트 수정'} {editPartnerSite(e)}} noValidate> 사이트명필수 URL필수 정렬순서필수 사용여부필수 {/* */} 저장 {modeInfo.mode === CODE.MODE_MODIFY && {deletePartnerSite(props)}}>삭제 } {reloadFunction()}}>목록 {/* */} > ); } export default AboutSiteModal;
클릭 혹은 파일을 이곳에 드롭하세요.
파일당 최대 3MB