From 1a9cb24e6ed55decc0e48e69c3ca5b88e5993037 Mon Sep 17 00:00:00 2001 From: Astrian Zheng Date: Wed, 19 Feb 2025 14:57:21 +1100 Subject: [PATCH] refactor: simplify state management and enhance styling for SingleDatePicker component --- src/components/SingleDatePicker.tsx | 13 +++++++------ src/style.scss | 24 ++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/src/components/SingleDatePicker.tsx b/src/components/SingleDatePicker.tsx index efdbc8a..9ae7a58 100644 --- a/src/components/SingleDatePicker.tsx +++ b/src/components/SingleDatePicker.tsx @@ -8,16 +8,15 @@ export default () => { const [currentYear, setCurrentYear] = useState(new Date().getFullYear()) const [selectedDate, setSelectedDate] = useState(new Date()) const [dates, setDates] = useState([]) - const [l10nDays, setL10nDays] = useState(getL10Weekday()) + const l10nDays = getL10Weekday() useEffect(() => { setDates(getCalendarDates(currentMonth, currentYear)) }, [currentMonth, currentYear]) - useEffect(() => { - setCurrentMonth(selectedDate.getMonth()) - setCurrentYear(selectedDate.getFullYear()) - }, [selectedDate]) + function selectDate(date: Date) { + setSelectedDate(date) + } return (
@@ -29,8 +28,10 @@ export default () => { {l10nDays.map(day =>
{day}
)} - {dates.map(date => )}
) diff --git a/src/style.scss b/src/style.scss index 0fa15f7..3d45d6d 100644 --- a/src/style.scss +++ b/src/style.scss @@ -1,5 +1,11 @@ .datenel-component { + --main-color: #000000; + --accent-color: #000000; + --reversed-color: #ffffff; + --hover-color: #0000002a; + user-select: none; + color: var(--main-color); .header { padding: 0.75rem; @@ -22,6 +28,7 @@ display: grid; grid-template-columns: repeat(7, 1fr); padding: 0.75rem; + gap: 0.125rem; .item { width: 2rem; height: 2rem; @@ -37,11 +44,28 @@ border: none; background: none; cursor: pointer; + color: var(--main-color); } button.item.date{ + border-radius: 50%; + position: relative; &.extra-month { opacity: 0.3; } + &:hover { + background: var(--hover-color); + } + .today-indicator{ + position: absolute; + bottom: 0.25rem; + width: 0.25rem; + height: 0.25rem; + } + + &.active { + background: var(--accent-color); + color: var(--reversed-color); + } } }