This commit is contained in:
focp212@naver.com
2025-09-12 18:53:20 +09:00
parent 6e4d0c8bcd
commit a7ba6274b4
3 changed files with 60 additions and 14 deletions

View File

@@ -32,3 +32,7 @@ main {
} }
/* calendar */ /* calendar */
.react-calendar{
margin: 10% auto;
}

View File

@@ -3,29 +3,52 @@ import styled from "styled-components";
import { useState } from 'react'; import { useState } from 'react';
import Calendar from 'react-calendar'; import Calendar from 'react-calendar';
import 'react-calendar/dist/Calendar.css'; import 'react-calendar/dist/Calendar.css';
import { useEffect } from 'react';
interface NiceCalendarProps {
calendarOpen: boolean;
setNewDate: (date: string) => void;
};
const NiceCalendar = ({ const NiceCalendar = ({
calendarOpen, calendarOpen,
setNewDate setNewDate
}: any) => { }: NiceCalendarProps) => {
const [calendarDate, setCalendarDate] = useState<string>(moment().format('YYYY-MM-DD')); const [calendarDate, setCalendarDate] = useState<string>(moment().format('YYYY-MM-DD'));
const [isOpen, setIsOpen] = useState<boolean>(calendarOpen); const [isOpen, setIsOpen] = useState<boolean>(false);
const onchangeToDate = (selectedDate: any) => { const onchangeToDate = (selectedDate: any) => {
setNewDate(selectedDate) setNewDate(moment(selectedDate).format('YYYY-MM-DD'));
setIsOpen(false); setIsOpen(false);
}; };
useEffect(() => {
console.log(calendarOpen)
setIsOpen(calendarOpen);
}, [calendarOpen])
return ( return (
<> <>
{ (isOpen) &&
<Calendar <>
onChange={ onchangeToDate } <div className="bg-dim"></div>
value={ calendarDate } <CalendarWrapper>
></Calendar> <Calendar
onChange={ onchangeToDate }
value={ calendarDate }
></Calendar>
</CalendarWrapper>
</>
}
</> </>
); );
}; };
const CalendarWrapper = styled.div`
z-index: 1100;
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
`;
export default NiceCalendar; export default NiceCalendar;

View File

@@ -21,9 +21,10 @@ export const FilterCalendar = ({
setEndDate setEndDate
}: FilterCalendarProps) => { }: FilterCalendarProps) => {
const [filterTitle, setFilterTitle] = useState<string>(title || '조회기간'); const [filterTitle, setFilterTitle] = useState<string>(title || '조회기간');
const [dateReadOnly, setDateReadyOnly] = useState<boolean>(true); const [dateReadOnly, setDateReadyOnly] = useState<boolean>(false);
const [filterDateOptionsBtn, setFilterDateOptionsBtn] = useState<FilterDateOptions>(FilterDateOptions.Input); const [filterDateOptionsBtn, setFilterDateOptionsBtn] = useState<FilterDateOptions>(FilterDateOptions.Input);
const [calendarOpen, setCalendarOpen] = useState<boolean>(false); const [calendarOpen, setCalendarOpen] = useState<boolean>(false);
const [activceCalendar, setActiveCalendar] = useState<string>();
const setFilterDate = (dateOptions: FilterDateOptions) => { const setFilterDate = (dateOptions: FilterDateOptions) => {
if(dateOptions === FilterDateOptions.Today){ if(dateOptions === FilterDateOptions.Today){
@@ -51,15 +52,27 @@ export const FilterCalendar = ({
}; };
const onClickToOpenCalendar = () => { const onClickToOpenCalendar = (key: string) => {
if(!dateReadOnly){ if(!dateReadOnly){
setCalendarOpen(true); setCalendarOpen(true);
setActiveCalendar(key);
} }
else{ else{
setCalendarOpen(false); setCalendarOpen(false);
setActiveCalendar('');
} }
}; };
const setNewDate = (date: string) => {
if(activceCalendar === 'start'){
setStartDate(date);
}
else if(activceCalendar === 'end'){
setEndDate(date);
}
setCalendarOpen(false);
}
useEffect(() => { useEffect(() => {
}, []); }, []);
@@ -89,6 +102,7 @@ export const FilterCalendar = ({
<div className="range-row"> <div className="range-row">
<div className="input-wrapper date"> <div className="input-wrapper date">
<input <input
id="startDate"
className="date-input" className="date-input"
type="text" type="text"
placeholder="날짜 선택" placeholder="날짜 선택"
@@ -98,7 +112,7 @@ export const FilterCalendar = ({
<button <button
type="button" type="button"
className="date-btn" className="date-btn"
onClick={ () => onClickToOpenCalendar() } onClick={ () => onClickToOpenCalendar('start') }
> >
<img <img
src={ IMAGE_ROOT + '/ico_date.svg' } src={ IMAGE_ROOT + '/ico_date.svg' }
@@ -109,6 +123,7 @@ export const FilterCalendar = ({
<span className="beetween">~</span> <span className="beetween">~</span>
<div className="input-wrapper date"> <div className="input-wrapper date">
<input <input
id="endDate"
className="date-input" className="date-input"
type="text" type="text"
placeholder="날짜 선택" placeholder="날짜 선택"
@@ -118,7 +133,7 @@ export const FilterCalendar = ({
<button <button
type="button" type="button"
className="date-btn" className="date-btn"
onClick={ () => onClickToOpenCalendar() } onClick={ () => onClickToOpenCalendar('end') }
> >
<img <img
src={ IMAGE_ROOT + '/ico_date.svg' } src={ IMAGE_ROOT + '/ico_date.svg' }
@@ -129,6 +144,10 @@ export const FilterCalendar = ({
</div> </div>
</div> </div>
</div> </div>
<NiceCalendar
calendarOpen={ calendarOpen }
setNewDate={ setNewDate }
></NiceCalendar>
</> </>
); );
}; };