Newer
Older
import React, { useState } from "react"
import MakeDay from "./MakeDay";
import MakeHeader from "./MakeHeader";
function MakeCell({ nowYear, nowMonth, usingDate, setUsingDate }){//주차 데이터를 담을 공간
const startDay = new Date(nowYear, nowMonth - 1, 1);
const lastDay = new Date(nowYear, nowMonth, 0);
const lastMonthDate = new Date(nowYear, nowMonth - 1, 0).getDate();
let nowDate = startDay.getDate();
const lastDate = lastDay.getDate();
const [dragging, setDragging] = useState("nope");
const [selectedDays, setSelectedDays] = useState([]); //선택된 날짜
const [isDragging, setIsDragging] = useState(false); //드래그 여부
const [dragStartDay, setDragStartDay] = useState(null); //드래그 시작 날짜
const [dragEndDay, setDragEndDay] = useState();
// 여기 달력 날짜 수정해야함
const fDay = new Date(nowYear, nowMonth - 1, 1 - startDay.getDay()) - (0);
const eDay = new Date(nowYear, nowMonth - 1, lastDate + 6 - lastDay.getDay()) - (0);
let startDate="";
let endDate="";
const handleDragStart = (newDate, idx, comp) => {
setIsDragging(!isDragging);
setDragStartDay(newDate);
for(let day = fDay; day <= eDay; day+=(60*60*24*1000)){
const elm = document.getElementById(day);
elm.classList.remove("dragging")
const handleDragWhile = (newDate, idx, comp) => {
if(!isDragging)return;
setDragEndDay(newDate);
let sd = dragStartDay - 0;
let ed = newDate - 0;
if(sd > ed){
let tmp = sd;
sd = ed;
ed = tmp;
}
for(let day = fDay; day <= eDay; day+=(60*60*24*1000)){
const elm = document.getElementById(day);
elm.classList.remove("dragging")
}
const elm2 = document.getElementById(comp);
if(elm2.classList.contains("dragging")){
for(let day = ed; day >= comp; day -= (60*60*24*1000)){
const elm = document.getElementById(day);
elm.classList.remove("dragging")
}
}
else {
for(let day = sd; day <= ed; day += (60*60*24*1000)){
const elm = document.getElementById(day);
elm.classList.add("dragging")
}
}
};
const handleDragEnd = (newDate, idx) => {
setIsDragging(false);
setDragging("nope");
if(dragStartDay - 0 < dragEndDay - 0){
startDate = dragStartDay.getFullYear() + '-' + (dragStartDay.getMonth()+1) + '-' + dragStartDay.getDate();
endDate = dragEndDay.getFullYear() + '-' + (dragEndDay.getMonth()+1) + '-' + dragEndDay.getDate();
}
else{
endDate = dragStartDay.getFullYear() + '-' + (dragStartDay.getMonth()+1) + '-' + dragStartDay.getDate();
startDate = dragEndDay.getFullYear() + '-' + (dragEndDay.getMonth()+1) + '-' + dragEndDay.getDate();
}
// console.log(startDate);
// console.log(endDate);
const handleClick = (newDate) => {
for(let day = fDay; day <= eDay; day+=(60*60*24*1000)){
const elm = document.getElementById(day);
elm.classList.remove("dragging")
}
const elm = document.getElementById(newDate - 0);
elm.classList.add("dragging")
console.log(`${newDate.getFullYear()}-${newDate.getMonth()+1}-${newDate.getDate()}`)
}
for(let day = fDay; day <= eDay; day += (60*60*24*1000)){
const tmpArr = [];
for(let i = 0; i < 7; i++){
let cn = "cella";
if(newDate.getMonth() + 1 !== nowMonth) cn = "cellb";
<TableCell k={day} cn={[cn, dragging].join(" ")} handleClick={handleClick} newDate={newDate} hds={handleDragStart} hdw={handleDragWhile} hde={handleDragEnd} i={i} value={newDate.getDate()}/>
}
calendarArr.push(
<tr>{tmpArr}</tr>
);
}
return(
<tbody>
{calendarArr}
</tbody>
);
}
function CalendarMonth({ usingDate, setUsingDate }){
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
const [currentDay, setCurrentDay] = useState(new Date());
// 일요일 0 시작
const nowDay = currentDay.getDay();
const [nowDate, setNowDate] = useState(currentDay.getDate());
const [nowMonth, setNowMonth] = useState(currentDay.getMonth() + 1); // zero-base
const [nowYear, setNowYear] = useState(currentDay.getFullYear());
const prevMonth = () => {
let newMonth = nowMonth - 1;
if(newMonth < 1){
newMonth = nowMonth + 11;
setNowYear(nowYear - 1);
}
setNowMonth(newMonth);
setCurrentDay(new Date(nowYear, nowMonth, nowDate));
}
const nextMonth = () => {
let newMonth = nowMonth + 1;
if(newMonth > 12){
newMonth = nowMonth - 11;
setNowYear(nowYear + 1);
}
setNowMonth(newMonth);
setCurrentDay(new Date(nowYear, nowMonth, nowDate));
}
return(
<div className="calendar">
<MakeHeader nowMonth={nowMonth} prevMonth={prevMonth} nextMonth={nextMonth}></MakeHeader>
<h1>{nowYear}</h1>
<table className="calendarTable">
<MakeDay/>
<MakeCell nowYear={nowYear} nowMonth={nowMonth} usingDate={usingDate} setUsingDate={setUsingDate}></MakeCell>