One Calendar is a privacy-first calendar web app built with Next.js. It has modern security features, including e2ee, password-protected sharing, and self-destructing share links ๐Ÿ“… calendar.xyehr.cn
5
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge pull request #194 from EvanTechDev/feature/fix-unlock-feature-and-settings-bug

fix(settings): sync restored default view and stabilize week start selection

authored by

Evan Huang and committed by
GitHub
3fddaa93 7b36dfb0

+15 -12
+12 -11
components/app/calendar.tsx
··· 136 136 "first-day-of-week", 137 137 0, 138 138 ); 139 + const normalizedFirstDayOfWeek = firstDayOfWeek === 1 ? 1 : 0; 140 + 141 + const handleFirstDayOfWeekChange = (day: number) => { 142 + setFirstDayOfWeek(day === 1 ? 1 : 0); 143 + }; 139 144 const [timezone, setTimezone] = useLocalStorage<string>( 140 145 "timezone", 141 146 Intl.DateTimeFormat().resolvedOptions().timeZone, ··· 189 194 const [toastPosition, setToastPosition] = useLocalStorage< 190 195 "bottom-left" | "bottom-center" | "bottom-right" 191 196 >("toast-position", "bottom-right"); 192 - const hasAppliedDefaultView = useRef(false); 193 - 194 197 useEffect(() => { 195 - if (hasAppliedDefaultView.current) return; 196 198 setView(isCalendarView(defaultView) ? defaultView : "week"); 197 - hasAppliedDefaultView.current = true; 198 199 }, [defaultView]); 199 200 200 201 useEffect(() => { ··· 915 916 onEventClick={handleEventClick} 916 917 onTimeSlotClick={handleTimeRangeSelect} 917 918 language={language} 918 - firstDayOfWeek={firstDayOfWeek} 919 + firstDayOfWeek={normalizedFirstDayOfWeek} 919 920 timezone={timezone} 920 921 timeFormat={timeFormat} 921 922 onEditEvent={handleEventEdit} ··· 942 943 onEventClick={handleEventClick} 943 944 onTimeSlotClick={handleTimeRangeSelect} 944 945 language={language} 945 - firstDayOfWeek={firstDayOfWeek} 946 + firstDayOfWeek={normalizedFirstDayOfWeek} 946 947 timezone={timezone} 947 948 timeFormat={timeFormat} 948 949 onEditEvent={handleEventEdit} ··· 970 971 events={filteredEvents} 971 972 onEventClick={handleEventClick} 972 973 language={language} 973 - firstDayOfWeek={firstDayOfWeek} 974 + firstDayOfWeek={normalizedFirstDayOfWeek} 974 975 timezone={timezone} 975 976 /> 976 977 )} ··· 980 981 events={filteredEvents} 981 982 onEventClick={handleEventClick} 982 983 language={language} 983 - firstDayOfWeek={firstDayOfWeek} 984 + firstDayOfWeek={normalizedFirstDayOfWeek} 984 985 isSidebarCollapsed={isSidebarCollapsed} 985 986 isSidebarExpanding={isSidebarExpanding} 986 987 /> ··· 999 1000 <Settings 1000 1001 language={language} 1001 1002 setLanguage={setLanguage} 1002 - firstDayOfWeek={firstDayOfWeek} 1003 - setFirstDayOfWeek={setFirstDayOfWeek} 1003 + firstDayOfWeek={normalizedFirstDayOfWeek} 1004 + setFirstDayOfWeek={handleFirstDayOfWeekChange} 1004 1005 timezone={timezone} 1005 1006 setTimezone={setTimezone} 1006 1007 notificationSound={notificationSound} ··· 1091 1092 </div> 1092 1093 </div> 1093 1094 ); 1094 - } 1095 + }
+3 -1
components/app/profile/settings.tsx
··· 193 193 <Label htmlFor="first-day">{t.firstDayOfWeek}</Label> 194 194 <Select 195 195 value={firstDayOfWeek.toString()} 196 - onValueChange={(value) => setFirstDayOfWeek(Number.parseInt(value))} 196 + onValueChange={(value) => 197 + setFirstDayOfWeek(value === "1" ? 1 : 0) 198 + } 197 199 > 198 200 <SelectTrigger id="first-day"> 199 201 <SelectValue />