From b0b51aaebd1750aef64c6c807ed9123cff34b760 Mon Sep 17 00:00:00 2001 From: gaeon <rkdjs1104@ajou.ac.kr> Date: Sun, 10 Dec 2023 23:18:19 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20calendar=20=EC=A4=91=EB=B3=B5=EC=B2=98?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/calendar/calendar.js | 31 +++++--- src/components/calendar/duplicatedModal.js | 31 ++++++++ .../calendar/duplicatedModal.module.css | 70 +++++++++++++++++++ 3 files changed, 123 insertions(+), 9 deletions(-) create mode 100644 src/components/calendar/duplicatedModal.js create mode 100644 src/components/calendar/duplicatedModal.module.css diff --git a/src/components/calendar/calendar.js b/src/components/calendar/calendar.js index 2025dfd..1c3afa7 100644 --- a/src/components/calendar/calendar.js +++ b/src/components/calendar/calendar.js @@ -10,7 +10,7 @@ import ScheduleAddModal from './addModal' import ScheduleDeleteModal from './deleteModal'; import ScheduleInquiryModal from './inquiryModal'; import ScheduleListModal from './inquiryListModal'; -//import Header from '../Header' +import DuplicatedModal from "./duplicatedModal"; const defaultDate=new Date(); const MySchedulerApp = ({ setCount }) => { @@ -57,6 +57,8 @@ const MySchedulerApp = ({ setCount }) => { const[scheduleListModalOpen, setScheduleListModalOpen]=useState(false); //const [isContent, setIsContent]=useState(' 상세 내용이 없습니다. '); const [date, setDate]=useState(defaultDate); + const [duplicatedDates, setduplicatedDates]=useState([]); + const [duplicatedModal, setduplicatedModal]=useState(false); const openInModal=()=>{ //일정 조회 모달 열기 @@ -88,7 +90,12 @@ const MySchedulerApp = ({ setCount }) => { setIsDeModalOpen(false); }; - + const openDuplicatedModal=()=>{ + setduplicatedModal(true); + } + const closeDuplicatedModal=()=>{ + setduplicatedModal(false); + } const openScheduleListModal = () => { setScheduleListModalOpen(true); @@ -112,28 +119,29 @@ const MySchedulerApp = ({ setCount }) => { }, body: jsonData, }) - .then(response => { + .then(async response => { if(response.status===200){ - alert('중복된 일정이 존재합니다.'); + const responseData = await response.json(); + console.log('Server response:', responseData); + setduplicatedDates(responseData); + openDuplicatedModal(); + } + else if(response.status===400){ + alert('유효하지 않은 날짜입니다.'); } setCount( prevNum => (prevNum+1)) }) .then(data => { console.log(data); - }) .catch(error=>{ console.log(error); }) - .finally(()=>{ - const data={ InquiryDate: selectedDate } - - handleInquiryEvent(data, 0); }); } @@ -415,6 +423,11 @@ const CustomEditItem = (props) => { onClose={closeScheduleListModal} scheduleData={weeklySchedules} /> + <DuplicatedModal + isOpen={duplicatedModal} + onClose={closeDuplicatedModal} + duplicatedDates={duplicatedDates} + /> </div> diff --git a/src/components/calendar/duplicatedModal.js b/src/components/calendar/duplicatedModal.js new file mode 100644 index 0000000..d8727a9 --- /dev/null +++ b/src/components/calendar/duplicatedModal.js @@ -0,0 +1,31 @@ +// ScheduleItem.js + +import React from 'react'; +import duplicatedStyles from './duplicatedModal.module.css'; +const DuplicatedModal = ({ isOpen, onClose, duplicatedDates}) => { + + return ( + + <div className={`${duplicatedStyles.Dumodal} ${isOpen ? duplicatedStyles.open : ''}`}> + <div className={duplicatedStyles.Dumodal_content}> + <div className={duplicatedStyles.closeBtn} onClick={onClose}>X</div> + <label>중복된 날짜</label> + + {duplicatedDates.map((item) => ( + <div key={item.id} className={duplicatedStyles.block}> + <div className={duplicatedStyles.date}> + {item.date} {item.startTime} ~ {item.endTime} + </div> + <div className={duplicatedStyles.content}> + {item.title} {item. content} + </div> + </div> + ))} + </div> + </div> + ); + +} + + +export default DuplicatedModal; diff --git a/src/components/calendar/duplicatedModal.module.css b/src/components/calendar/duplicatedModal.module.css new file mode 100644 index 0000000..25048c1 --- /dev/null +++ b/src/components/calendar/duplicatedModal.module.css @@ -0,0 +1,70 @@ +/* deleteModal.css */ + +.Dumodal{ + display: none; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.5); /* 반투명한 배경 */ + justify-content: center; + align-items: center; + + z-index: 1000 !important; +} + +.Dumodal.open{ + display: flex; + z-index: 1000 !important; +} + +.Dumodal_content{ + background-color: white; + padding: 20px; + border-radius: 5px; + position: relative; + width: 300px; + padding: 20px; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); + border-radius: 8px; + display: flex; + flex-direction: column; + align-items: center; + overflow-y: auto; + height:400px; +} +.closeBtn{ + cursor: pointer; + margin-left:90%; + font-size: 20px; +} +.Dumodal_content label{ + font-size:22px; + margin-bottom:20px; +} +.content{ + margin-left:30%; + font-size: 18px; +} +.block{ + margin-bottom: 25px; +} +.date{ + font-weight: bold; + margin-bottom: 5px; +} +.Dumodal_content::-webkit-scrollbar{ + width: 5px; +} + +.Dumodal_content::-webkit-scrollbar-thumb { + background-color: #2f3542; + border-radius: 10px; +} + +.Dumodal_content::-webkit-scrollbar-track{ + background-color: grey; + border-radius: 10px; + box-shadow: inset 0px 0px 5px white; +} \ No newline at end of file -- GitLab