/** * πŸ“„ YearRangeSelectBox Component * 년도 λ²”μœ„ 선택 μ»΄ν¬λ„ŒνŠΈ * * - μ‹œμž‘λ…„λ„μ™€ μ’…λ£Œλ…„λ„ 선택 κΈ°λŠ₯ * - 년도 λ²”μœ„ μœ νš¨μ„± 검증 (μ‹œμž‘λ…„λ„ <= μ’…λ£Œλ…„λ„) * - 동적 μ˜΅μ…˜ 생성 및 필터링 * - 전체 선택 μ˜΅μ…˜ 제곡 * - μ»€μŠ€ν…€ 라벨 및 μŠ€νƒ€μΌλ§ 지원 * - 콜백 ν•¨μˆ˜λ₯Ό ν†΅ν•œ 선택 κ°’ 전달 */ import React from "react"; import { SelectBox } from '@common/business_components/ui' interface YearRangeSelectBoxProps { start: string; end: string; onChange: (range: { start: string; end: string }) => void; startLabel?: string; endLabel?: string; minYear?: number; maxYear?: number; className?: string; selectClass?: string; } // μ‹œμž‘λ…„λ„ selectArray 생성 ν•¨μˆ˜ export function getStartYearArray({ minYear = 1900, maxYear = new Date().getFullYear(), placeholder = "λ…„", endYear, }: { minYear?: number; maxYear?: number; placeholder?: string; endYear?: string; } = {}) { const years = Array.from({ length: maxYear - minYear + 1 }, (_, i) => (maxYear - i).toString() ).filter(y => !endYear || parseInt(y) <= parseInt(endYear)); return [ { val: "0", text: placeholder }, ...years.map(y => ({ val: y, text: y })), ]; } // μ’…λ£Œλ…„λ„ selectArray 생성 ν•¨μˆ˜ export function getEndYearArray({ minYear = 1900, maxYear = new Date().getFullYear(), placeholder = "λ…„", startYear, }: { minYear?: number; maxYear?: number; placeholder?: string; startYear?: string; } = {}) { const years = Array.from({ length: maxYear - minYear + 1 }, (_, i) => (maxYear - i).toString() ).filter(y => !startYear || parseInt(y) >= parseInt(startYear)); return [ { val: "9999", text: placeholder }, ...years.map(y => ({ val: y, text: y })), ]; } export function YearRangeSelectBox({ start, end, onChange, startLabel = "μ‹œμž‘λ…„λ„", endLabel = "", minYear = 1900, maxYear = new Date().getFullYear(), className = "", selectClass = "rounded-lg bg-white flex-shrink-0 w-[70px]" }: YearRangeSelectBoxProps) { // μ‹œμž‘λ…„λ„ λ°°μ—΄ const getStartYearArray = () => { const years = Array.from({ length: maxYear - minYear + 1 }, (_, i) => (maxYear - i).toString() ).filter(y => !end || parseInt(y) <= parseInt(end)); return [ { val: "0", text: "전체" }, ...years.map(y => ({ val: y, text: y })), ]; }; // μ’…λ£Œλ…„λ„ λ°°μ—΄ const getEndYearArray = () => { const years = Array.from({ length: maxYear - minYear + 1 }, (_, i) => (maxYear - i).toString() ).filter(y => !start || parseInt(y) >= parseInt(start)); return [ { val: "9999", text: "전체" }, ...years.map(y => ({ val: y, text: y })), ]; }; return (
onChange({ start: String(val), end })} value={start} selectContentClass="z-[101]" /> ~ onChange({ start, end: String(val) })} value={end} selectContentClass="z-[101]" />
); }