From 1329a2792d2056c60ebaa09525fcebade253b9ec Mon Sep 17 00:00:00 2001 From: Clas Wen Date: Sat, 12 Jul 2025 15:02:10 +0800 Subject: [PATCH] Add mobile date selector for calendar page MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add sticky mobile date selector with year and month dropdowns - Hide existing calendar on mobile screens - Display selected values with 年/月 suffixes - Improve mobile user experience for date navigation 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- src/pages/calendar/Schedule.tsx | 59 +++++++++++++++++++++++++++++++-- 1 file changed, 57 insertions(+), 2 deletions(-) diff --git a/src/pages/calendar/Schedule.tsx b/src/pages/calendar/Schedule.tsx index 85be941..52d758d 100644 --- a/src/pages/calendar/Schedule.tsx +++ b/src/pages/calendar/Schedule.tsx @@ -1,7 +1,7 @@ import ICAL from "ical.js" import dayjs from "dayjs" import { useEffect, useMemo, useRef, useState } from "react" -import { Alert, Button, Calendar, Link, Spinner } from "@heroui/react" +import { Alert, Button, Calendar, Link, Spinner, Select, SelectItem } from "@heroui/react" import { today, getLocalTimeZone } from "@internationalized/date" import "dayjs/locale/zh-cn" @@ -83,7 +83,8 @@ const extractScheduleEvents = (icalComp: ICAL.Component): ScheduleEvent[] => { end: event.endDate.toJSDate(), summary: event.summary, description: event.description, - recurrenceId: "123", + recurrenceId: event.uid || event.startDate.toString(), + }] } return expandEventOccurrences(event, rangeEnd) @@ -109,6 +110,12 @@ export default function Schedule() { const calendarRef = useRef(null) const [loading, setLoading] = useState(true) + const currentYear = focusedDate.year + const currentMonth = focusedDate.month + + const years = Array.from({ length: 10 }, (_, i) => currentYear - 5 + i) + const months = Array.from({ length: 12 }, (_, i) => i + 1) + useEffect(() => { const rangeStart = ICAL.Time.fromJSDate(dayjs(focusedDate.toDate(getLocalTimeZone())).startOf("month").toDate()) const rangeEnd = ICAL.Time.fromJSDate(dayjs(focusedDate.toDate(getLocalTimeZone())).endOf("month").toDate()) @@ -191,6 +198,54 @@ export default function Schedule() {
日程
+ + {/* Mobile Date Selector */} +
+
+ + +
+