feat: implement patch and settings store
Signed-off-by: Sebastian <krupinski01@gmail.com>
This commit is contained in:
74
src/stores/mailSettingsStore.ts
Normal file
74
src/stores/mailSettingsStore.ts
Normal file
@@ -0,0 +1,74 @@
|
||||
import { computed } from 'vue'
|
||||
import { defineStore } from 'pinia'
|
||||
import { useUserStore } from '@KTXC'
|
||||
|
||||
const MESSAGE_READ_ENABLED_KEY = 'mail.behaviour.messageReadEnabled'
|
||||
const MESSAGE_READ_DELAY_KEY = 'mail.behaviour.messageReadDelay'
|
||||
const FOLDER_VIEW_MODE_KEY = 'mail.folderViewMode'
|
||||
|
||||
const DEFAULT_MESSAGE_READ_ENABLED = false
|
||||
const DEFAULT_MESSAGE_READ_DELAY = 5
|
||||
const DEFAULT_FOLDER_VIEW_MODE = 'tree'
|
||||
|
||||
export type FolderViewMode = 'tree' | 'page'
|
||||
|
||||
export const messageReadDelayOptions = [
|
||||
{ value: 2, title: '2 seconds' },
|
||||
{ value: 5, title: '5 seconds' },
|
||||
{ value: 10, title: '10 seconds' },
|
||||
{ value: 30, title: '30 seconds' },
|
||||
]
|
||||
|
||||
export const folderViewModeOptions = [
|
||||
{ value: 'tree', title: 'Tree' },
|
||||
{ value: 'page', title: 'Page' },
|
||||
]
|
||||
|
||||
function normalizeBoolean(value: unknown, fallback: boolean): boolean {
|
||||
if (typeof value === 'boolean') {
|
||||
return value
|
||||
}
|
||||
|
||||
return fallback
|
||||
}
|
||||
|
||||
function normalizePositiveNumber(value: unknown, fallback: number): number {
|
||||
const normalized = Number(value)
|
||||
|
||||
return Number.isFinite(normalized) && normalized > 0 ? normalized : fallback
|
||||
}
|
||||
|
||||
function normalizeFolderViewMode(value: unknown, fallback: FolderViewMode): FolderViewMode {
|
||||
return value === 'tree' || value === 'page' ? value : fallback
|
||||
}
|
||||
|
||||
export const useMailSettingsStore = defineStore('mailSettingsStore', () => {
|
||||
const userStore = useUserStore()
|
||||
|
||||
const messageReadEnabled = computed({
|
||||
get: () => normalizeBoolean(userStore.getSetting(MESSAGE_READ_ENABLED_KEY), DEFAULT_MESSAGE_READ_ENABLED),
|
||||
set: (value: boolean) => userStore.setSetting(MESSAGE_READ_ENABLED_KEY, value),
|
||||
})
|
||||
|
||||
const messageReadDelay = computed({
|
||||
get: () => normalizePositiveNumber(userStore.getSetting(MESSAGE_READ_DELAY_KEY), DEFAULT_MESSAGE_READ_DELAY),
|
||||
set: (value: number) => userStore.setSetting(
|
||||
MESSAGE_READ_DELAY_KEY,
|
||||
normalizePositiveNumber(value, DEFAULT_MESSAGE_READ_DELAY),
|
||||
),
|
||||
})
|
||||
|
||||
const folderViewMode = computed({
|
||||
get: () => normalizeFolderViewMode(userStore.getSetting(FOLDER_VIEW_MODE_KEY), DEFAULT_FOLDER_VIEW_MODE),
|
||||
set: (value: FolderViewMode) => userStore.setSetting(
|
||||
FOLDER_VIEW_MODE_KEY,
|
||||
normalizeFolderViewMode(value, DEFAULT_FOLDER_VIEW_MODE),
|
||||
),
|
||||
})
|
||||
|
||||
return {
|
||||
folderViewMode,
|
||||
messageReadEnabled,
|
||||
messageReadDelay,
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user