DatePicker.js 1.54 KB
Newer Older
Kim, Subin's avatar
Kim, Subin committed
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
import { useState, useEffect } from "react";
import moment from "moment";
import styles from "./calender.module.scss";

const DatePicker = ({ selectDate, setSelectDate, month }) => {
    const [week, setWeek] = useState([])

    useEffect(() => {
        generate()
    }, [month])

    function generate() {
        const weekly = []
        const startWeek = moment(month.cur).startOf('month').week()
        const endWeek = moment(month.cur).endOf('month').week() === 1 ? 53 : moment(month.cur).endOf('month').week()
        for (let week = startWeek; week <= endWeek; week++) {
            weekly.push(<tr key={week}>{
                Array(7).fill(0).map((n, i) => {
                    let current = moment(month.cur).clone().week(week).startOf('week').add(n + i, 'day')
                    let isSelected = moment(selectDate).format('YYYYMMDD') === current.format('YYYYMMDD') ? `${styles.selectDate}` : ''
                    let isColor = current.format('MM') !== moment(month.cur).format('MM') ? 'text-secondary ' : ((i === 0) ? "text-danger" : (i === 6) ? "text-primary" : "")

                    return <td className={`text-center p-1 ${styles.cursor}`} key={i} data-bs-dismiss="modal" onClick={() => setSelectDate(current.format('YYYY-MM-DD'))}>
                        <span className={`d-block ${isColor} ${isSelected}`}>{current.format('D')}</span>
                    </td>
                })}</tr>)
        }
        setWeek(weekly)
    }

    return (
        <tbody>{week.length !== 0 ? week.map(row => row) : ''}</tbody>
    )
}

export default DatePicker