diff --git a/package-lock.json b/package-lock.json index 03bb76b..50f0024 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,6 +13,7 @@ "axios": "^1.7.9", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", + "date-fns": "^4.1.0", "dayjs": "^1.11.13", "es-toolkit": "^1.32.0", "lenis": "^1.1.20", @@ -1890,9 +1891,10 @@ } }, "node_modules/date-fns": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz", - "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", + "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/kossnocorp" @@ -4721,6 +4723,16 @@ "react-dom": "^16.9.0 || ^17 || ^18 || ^19 || ^19.0.0-rc" } }, + "node_modules/react-datepicker/node_modules/date-fns": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz", + "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" + } + }, "node_modules/react-dom": { "version": "19.0.0", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.0.0.tgz", diff --git a/package.json b/package.json index 786d931..c6f4924 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "axios": "^1.7.9", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", + "date-fns": "^4.1.0", "dayjs": "^1.11.13", "es-toolkit": "^1.32.0", "lenis": "^1.1.20", diff --git a/src/app/(after-login)/form/page.tsx b/src/app/(after-login)/form/page.tsx index bb089a7..a4df8cb 100644 --- a/src/app/(after-login)/form/page.tsx +++ b/src/app/(after-login)/form/page.tsx @@ -66,7 +66,7 @@ export default function FormPage() { return (
-
+
{/* input sample : controlled */} diff --git a/src/assets/icons/circle_arrow_right.svg b/src/assets/icons/circle_arrow_right.svg new file mode 100644 index 0000000..07b3c56 --- /dev/null +++ b/src/assets/icons/circle_arrow_right.svg @@ -0,0 +1 @@ + diff --git a/src/components/ui/Field/DateInput.tsx b/src/components/ui/Field/DateInput.tsx index 24426a4..5c1e115 100644 --- a/src/components/ui/Field/DateInput.tsx +++ b/src/components/ui/Field/DateInput.tsx @@ -1,11 +1,21 @@ import { InputHTMLAttributes, useId } from 'react'; import Image from 'next/image'; -import DatePicker from 'react-datepicker'; +import dayjs from 'dayjs'; +import DatePicker, { ReactDatePickerCustomHeaderProps, registerLocale } from 'react-datepicker'; +import { ko } from 'date-fns/locale/ko'; +import { getMonth, getYear } from 'date-fns'; import { cn } from '@/utils/helper'; import { BaseError, baseErrorClassName, baseFieldClassName, BaseItem, BaseLabel } from './Base'; import calendarIcon from '@/assets/icons/calendar.svg'; import { BaseField } from './types'; +import arrowLeft from '@/assets/icons/circle_arrow_left.svg'; +import arrowRight from '@/assets/icons/circle_arrow_right.svg'; import 'react-datepicker/dist/react-datepicker.css'; +import '@/assets/css/datepicker.css'; + +registerLocale('ko', ko); + +type DayOfWeek = 'monday' | 'tuesday' | 'wednesday' | 'thursday' | 'friday' | 'saturday' | 'sunday'; type DateInputProps = BaseField & Omit, 'value' | 'onChange'> & { @@ -13,6 +23,10 @@ type DateInputProps = BaseField & onChange: (value: Date | null) => void; }; +const getDayClassName = (date: Date) => { + return dayjs(date).format('dddd').toLowerCase() as DayOfWeek; +}; + export function DateInput({ label, error, value, onChange, onBlur, placeholder, required, className, disabled, readOnly }: DateInputProps) { const id = useId(); @@ -25,7 +39,6 @@ export function DateInput({ label, error, value, onChange, onBlur, placeholder, )}
날짜선택 - {/* TODO: DatePicker 스타일링 및 locale 설정 예정 */} } />
{error && {error}} ); } + +function CustomHeader({ date, decreaseMonth, increaseMonth, prevMonthButtonDisabled, nextMonthButtonDisabled }: ReactDatePickerCustomHeaderProps) { + return ( +
+ +
+ {getYear(date)}년 {getMonth(date) + 1}월 +
+ +
+ ); +}