Skip to content

Commit

Permalink
Merge branch 'haydenull-feat/start-of-week' into feat/start-of-week
Browse files Browse the repository at this point in the history
  • Loading branch information
e-zz committed May 24, 2024
2 parents 3d61f97 + 8710982 commit 464577b
Show file tree
Hide file tree
Showing 5 changed files with 32 additions and 24 deletions.
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

0 comments on commit 464577b

Please sign in to comment.