Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: Update dayjs configuration after modifying the start day of the week #1

Merged
merged 1 commit into from
May 24, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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 的语言
Expand Down Expand Up @@ -49,16 +49,16 @@ const GeneralSettingsForm = () => {
<Select
placeholder="Select Start of Week"
className="w-[300px]"
value={settings.general?.startOfWeek || '1'}
value={settings.general?.startOfWeek}
onChange={(e) => onChange('general.startOfWeek', e)}
options={[
{ label: 'Sun', value: '0' },
{ label: 'Mon', value: '1' },
{ label: 'Tue', value: '2' },
{ label: 'Wed', value: '3' },
{ label: 'Thu', value: '4' },
{ label: 'Fri', value: '5' },
{ label: 'Sat', value: '6' },
{ label: 'Sun', value: 0 },
{ label: 'Mon', value: 1 },
{ label: 'Tue', value: 2 },
{ label: 'Wed', value: 3 },
{ label: 'Thu', value: 4 },
{ label: 'Fri', value: 5 },
{ label: 'Sat', value: 6 },
]}
/>
</div>
Expand Down
21 changes: 12 additions & 9 deletions src/Agenda3/hooks/useSettings.ts
Original file line number Diff line number Diff line change
@@ -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>('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) {
Expand All @@ -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,
Expand Down
6 changes: 3 additions & 3 deletions src/Agenda3/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand All @@ -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') {
Expand Down Expand Up @@ -72,7 +70,9 @@ const Dashboard = () => {
return (
<div
className={cn(
"flex h-screen w-screen bg-gray-100 before:pointer-events-none before:absolute before:h-[180px] before:w-[240px] before:bg-gradient-conic before:from-sky-200 before:via-blue-200 before:blur-2xl before:transition-all before:content-[''] before:dark:from-sky-900 before:dark:via-[#0141ff] before:dark:opacity-40",
`flex h-screen w-screen bg-gray-100 before:pointer-events-none before:absolute before:h-[180px] before:w-[240px]
before:bg-gradient-conic before:from-sky-200 before:via-blue-200 before:blur-2xl before:transition-all
before:content-[''] before:dark:from-sky-900 before:dark:via-[#0141ff] before:dark:opacity-40`,
{
'pt-[30px]': import.meta.env.VITE_MODE === 'plugin',
},
Expand Down
9 changes: 7 additions & 2 deletions src/Agenda3/models/settings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ export type Settings = {
general?: {
useJournalDayAsSchedule?: boolean
language?: Language
startOfWeek?: string
startOfWeek?: number
}
ics?: {
repo?: string
Expand All @@ -23,7 +23,12 @@ export type Settings = {
objective?: boolean
}
}
export const settingsAtom = atom<Settings>({ 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<Settings>(DEFAULT_SETTINGS)

export type Filter = {
id: string
Expand Down
2 changes: 1 addition & 1 deletion src/register/dayjs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down