34 lines
1.0 KiB
TypeScript
34 lines
1.0 KiB
TypeScript
|
|
import { defineStore } from 'pinia'
|
||
|
|
import { ref, computed } from 'vue'
|
||
|
|
import type { UIMode } from '@/types/api'
|
||
|
|
|
||
|
|
const STORAGE_KEY = 'archipelago-ui-mode'
|
||
|
|
|
||
|
|
export const useUIModeStore = defineStore('uiMode', () => {
|
||
|
|
const mode = ref<UIMode>(loadFromStorage())
|
||
|
|
|
||
|
|
function loadFromStorage(): UIMode {
|
||
|
|
const stored = localStorage.getItem(STORAGE_KEY)
|
||
|
|
if (stored === 'gamer' || stored === 'easy' || stored === 'chat') return stored
|
||
|
|
return 'gamer'
|
||
|
|
}
|
||
|
|
|
||
|
|
function syncFromBackend(backendMode: UIMode | undefined) {
|
||
|
|
if (backendMode && ['gamer', 'easy', 'chat'].includes(backendMode)) {
|
||
|
|
mode.value = backendMode
|
||
|
|
localStorage.setItem(STORAGE_KEY, backendMode)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function setMode(newMode: UIMode) {
|
||
|
|
mode.value = newMode
|
||
|
|
localStorage.setItem(STORAGE_KEY, newMode)
|
||
|
|
}
|
||
|
|
|
||
|
|
const isGamer = computed(() => mode.value === 'gamer')
|
||
|
|
const isEasy = computed(() => mode.value === 'easy')
|
||
|
|
const isChat = computed(() => mode.value === 'chat')
|
||
|
|
|
||
|
|
return { mode, setMode, syncFromBackend, isGamer, isEasy, isChat }
|
||
|
|
})
|