diff --git a/src/Agenda3/components/calendar/Calendar.tsx b/src/Agenda3/components/calendar/Calendar.tsx
index 9d40aa7..3c8ea54 100644
--- a/src/Agenda3/components/calendar/Calendar.tsx
+++ b/src/Agenda3/components/calendar/Calendar.tsx
@@ -42,6 +42,7 @@ const Calendar = ({ onCalendarTitleChange }: CalendarProps, ref) => {
const { updateEntity } = useAgendaEntities()
const tasksWithStart = useAtomValue(tasksWithStartAtom)
const settings = useAtomValue(settingsAtom)
+ const startingDay = settings.general?.startOfWeek
const groupType = settings.selectedFilters?.length ? 'filter' : 'page'
const showTasks = tasksWithStart?.filter((task) =>
settings.viewOptions?.hideCompleted ? task.status === 'todo' : true,
@@ -185,7 +186,7 @@ const Calendar = ({ onCalendarTitleChange }: CalendarProps, ref) => {
weekNumbers
weekNumberContent={({ num, date }) => }
defaultTimedEventDuration="00:30"
- firstDay={1}
+ firstDay={Number(startingDay)}
fixedWeekCount={false}
ref={calendarRef}
height="100%"
diff --git a/src/Agenda3/components/modals/SettingsModal/GeneralSettingsForm.tsx b/src/Agenda3/components/modals/SettingsModal/GeneralSettingsForm.tsx
index 7bc545e..0e3d3e1 100644
--- a/src/Agenda3/components/modals/SettingsModal/GeneralSettingsForm.tsx
+++ b/src/Agenda3/components/modals/SettingsModal/GeneralSettingsForm.tsx
@@ -8,7 +8,7 @@ const GeneralSettingsForm = () => {
const { t, i18n } = useTranslation()
const { settings, setSettings } = useSettings()
- const onChange = (key: string, value: string | boolean | undefined | Filter[] | string[]) => {
+ const onChange = (key: string, value: number | string | boolean | undefined | Filter[] | string[]) => {
setSettings(key, value)
}
// 当切换语言时,更新 i18n 的语言
@@ -44,6 +44,24 @@ const GeneralSettingsForm = () => {
]}
/>
+
+
Start of Week
+
>
)
diff --git a/src/Agenda3/hooks/useSettings.ts b/src/Agenda3/hooks/useSettings.ts
index 6eab839..8009b1b 100644
--- a/src/Agenda3/hooks/useSettings.ts
+++ b/src/Agenda3/hooks/useSettings.ts
@@ -1,15 +1,19 @@
import { useLocalStorageValue } from '@react-hookz/web'
import { useAtom } from 'jotai'
-import { clone, set } from 'lodash-es'
+import { clone, set, merge } from 'lodash-es'
-import { type Settings, settingsAtom, type Filter } from '@/Agenda3/models/settings'
+import { type Settings, settingsAtom, type Filter, DEFAULT_SETTINGS } from '@/Agenda3/models/settings'
+import initializeDayjs from '@/register/dayjs'
const isPlugin = import.meta.env.VITE_MODE === 'plugin'
const useSettings = () => {
const [settings, setAtomSettings] = useAtom(settingsAtom)
const { set: setLocalStorage, value: valueLocalStorage } = useLocalStorageValue('settings')
- const setSettings = (key: string, value: string | boolean | undefined | Filter[] | string[]) => {
+ const setSettings = (key: string, value: number | string | boolean | undefined | Filter[] | string[]) => {
+ if (key === 'general.startOfWeek') {
+ initializeDayjs(Number(value))
+ }
setAtomSettings((oldSettings) => {
const newSettings = set(clone(oldSettings), key, value)
if (isPlugin) {
@@ -27,13 +31,12 @@ const useSettings = () => {
}
// initialize settings
const initializeSettings = () => {
- const base: Settings = { isInitialized: true }
- if (isPlugin) {
- const _settings = (logseq.settings as unknown as Settings) ?? {}
- setAtomSettings(_settings ? { ..._settings, isInitialized: true } : base)
- } else {
- setAtomSettings(valueLocalStorage ? { ...valueLocalStorage, isInitialized: true } : base)
+ const getNewSettings = (userSettings?: Settings) => {
+ return merge({}, DEFAULT_SETTINGS, userSettings, { isInitialized: true })
}
+ const userSettings = isPlugin ? (logseq.settings as unknown as Settings) : valueLocalStorage
+ initializeDayjs(userSettings?.general?.startOfWeek ?? DEFAULT_SETTINGS.general.startOfWeek)
+ setAtomSettings(getNewSettings(userSettings))
}
return {
settings,
diff --git a/src/Agenda3/index.tsx b/src/Agenda3/index.tsx
index d6800d7..3ecd149 100644
--- a/src/Agenda3/index.tsx
+++ b/src/Agenda3/index.tsx
@@ -7,7 +7,6 @@ import useAgendaEntities from '@/Agenda3/hooks/useAgendaEntities'
import usePages from '@/Agenda3/hooks/usePages'
import { appAtom } from '@/Agenda3/models/app'
import { logseqAtom } from '@/Agenda3/models/logseq'
-import initializeDayjs from '@/register/dayjs'
import { cn } from '@/util/util'
import MultipleView from './components/MainArea'
@@ -30,7 +29,6 @@ const Dashboard = () => {
const [connectionErrorModal, setConnectionErrorModal] = useState(false)
const loadData = useCallback(() => {
- initializeDayjs(1)
refreshEntities().catch((error) => {
console.error('retrieve tasks failed', error)
if (import.meta.env.VITE_MODE === 'web') {
@@ -72,7 +70,9 @@ const Dashboard = () => {
return (
({ isInitialized: false, viewOptions: { showTimeLog: false } })
+export const DEFAULT_SETTINGS = {
+ isInitialized: false,
+ general: { language: 'en', startOfWeek: 1 },
+ viewOptions: { showTimeLog: false },
+} satisfies Settings
+export const settingsAtom = atom(DEFAULT_SETTINGS)
export type Filter = {
id: string
diff --git a/src/register/dayjs.ts b/src/register/dayjs.ts
index 391a0b3..b2b2c34 100644
--- a/src/register/dayjs.ts
+++ b/src/register/dayjs.ts
@@ -22,7 +22,7 @@ dayjs.extend(quarterOfYear)
dayjs.extend(isoWeek)
dayjs.extend(weekOfYear) // Use plugin
-const initializeDayjs = (weekStartDay: 0 | 1) => {
+const initializeDayjs = (weekStartDay: number) => {
// dayjs.locale('zh-cn')
dayjs.updateLocale('en', {
weekStart: weekStartDay,