'use client'; import { useState } from 'react'; import { getLocalDateString } from '@/lib/utils/date'; // ===== 프리셋 타입 ===== export type DateRangePreset = 'currentYear' | 'currentMonth' | 'today' | 'none'; // ===== 반환 타입 ===== export interface UseDateRangeReturn { startDate: string; endDate: string; setStartDate: React.Dispatch>; setEndDate: React.Dispatch>; } // ===== 프리셋별 초기값 계산 ===== function getInitialDates(preset: DateRangePreset): { start: string; end: string } { const now = new Date(); switch (preset) { case 'currentYear': { const year = now.getFullYear(); return { start: `${year}-01-01`, end: `${year}-12-31` }; } case 'currentMonth': { const year = now.getFullYear(); const month = String(now.getMonth() + 1).padStart(2, '0'); const lastDay = new Date(year, now.getMonth() + 1, 0).getDate(); return { start: `${year}-${month}-01`, end: `${year}-${month}-${String(lastDay).padStart(2, '0')}`, }; } case 'today': { const today = getLocalDateString(now); return { start: today, end: today }; } case 'none': return { start: '', end: '' }; } } /** * 날짜 범위 상태 관리 훅 * * @param preset - 초기 날짜 범위 프리셋 * - 'currentYear': 올해 1/1 ~ 12/31 (회계 관리 기본값) * - 'currentMonth': 이번 달 1일 ~ 말일 * - 'today': 오늘 ~ 오늘 (로컬 시간대 기준) * - 'none': 빈 문자열 * * @example * const { startDate, endDate, setStartDate, setEndDate } = useDateRange('currentYear'); */ export function useDateRange(preset: DateRangePreset = 'currentYear'): UseDateRangeReturn { const [startDate, setStartDate] = useState(() => getInitialDates(preset).start); const [endDate, setEndDate] = useState(() => getInitialDates(preset).end); return { startDate, endDate, setStartDate, setEndDate }; }