mobile-react-infinite-calendar
Version:
A mobile-optimized infinite scroll calendar component for React
49 lines (48 loc) • 2.12 kB
JavaScript
/**
* 날짜 선택기 로직 훅
* DateSelector와 관련된 모든 이벤트 핸들러를 관리
*/
import { useCallback } from 'react';
import { uiLogger } from '../utils/logger';
export function useDateSelectorLogic({ selectedYear, selectedMonth, showYearDropdown, showMonthDropdown, setSelectedYear, setSelectedMonth, setShowYearDropdown, setShowMonthDropdown, confirmDateSelection, isDebugEnabled = false }) {
// 연도 선택 핸들러
const handleYearSelect = useCallback((year) => {
if (isDebugEnabled) {
uiLogger.debug('연도 선택', { year, previousYear: selectedYear });
}
setSelectedYear(year);
setShowYearDropdown(false);
}, [setSelectedYear, setShowYearDropdown, selectedYear, isDebugEnabled]);
// 월 선택 핸들러
const handleMonthSelect = useCallback((month) => {
if (isDebugEnabled) {
uiLogger.debug('월 선택', { month, previousMonth: selectedMonth });
}
setSelectedMonth(month);
setShowMonthDropdown(false);
}, [setSelectedMonth, setShowMonthDropdown, selectedMonth, isDebugEnabled]);
// 연도 드롭다운 토글
const handleToggleYearDropdown = useCallback(() => {
setShowYearDropdown(!showYearDropdown);
setShowMonthDropdown(false);
}, [showYearDropdown, setShowYearDropdown, setShowMonthDropdown]);
// 월 드롭다운 토글
const handleToggleMonthDropdown = useCallback(() => {
setShowMonthDropdown(!showMonthDropdown);
setShowYearDropdown(false);
}, [showMonthDropdown, setShowMonthDropdown, setShowYearDropdown]);
// 날짜 확인 핸들러
const handleConfirmDateSelection = useCallback(() => {
if (isDebugEnabled) {
uiLogger.info('날짜 선택 확인', { selectedYear, selectedMonth });
}
confirmDateSelection();
}, [confirmDateSelection, selectedYear, selectedMonth, isDebugEnabled]);
return {
handleYearSelect,
handleMonthSelect,
handleToggleYearDropdown,
handleToggleMonthDropdown,
handleConfirmDateSelection
};
}