main
ts 54 lines 1.26 KB
Raw
1 import type { PortalSettings } from "@/types/portal"
2 import { defineStore } from "pinia"
3 import Api from "@/api"
4 import { getAvatar } from "@/utils"
5 import { getNameInitials } from "@/utils/format"
6
7 export const usePortalSettingsStore = defineStore("portalSettings", {
8 state: () => ({
9 settings: null as PortalSettings | null,
10 loading: false
11 }),
12
13 getters: {
14 portalTitle(state) {
15 return state.settings?.title || ""
16 },
17 portalLogo(state) {
18 if (state.settings?.logo_base64 && state.settings?.logo_mime_type) {
19 return `data:${state.settings.logo_mime_type};base64,${state.settings.logo_base64}`
20 }
21 return null
22 },
23 portalInitials(): string {
24 return getNameInitials(this.portalTitle || "")
25 },
26 portalLogoInitials(): string {
27 return getAvatar({ seed: this.portalInitials, text: this.portalInitials, size: 64 })
28 }
29 },
30
31 actions: {
32 async fetchSettings() {
33 this.loading = true
34
35 try {
36 const response = await Api.portal.getSettings()
37
38 if (response.data.success && response.data.settings) {
39 this.settings = response.data.settings
40 }
41 } catch (error) {
42 console.error("Failed to load portal settings:", error)
43 } finally {
44 this.loading = false
45 }
46 }
47 },
48 persist: [
49 {
50 storage: sessionStorage,
51 pick: ["settings"]
52 }
53 ]
54 })