mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-06-19 13:21:46 +00:00
52 lines
1.1 KiB
TypeScript
52 lines
1.1 KiB
TypeScript
import { create } from 'zustand'
|
|
import { addonsApi } from '../api/client'
|
|
|
|
interface Addon {
|
|
id: string
|
|
name: string
|
|
description?: string
|
|
type: string
|
|
icon: string
|
|
enabled: boolean
|
|
config?: Record<string, unknown>
|
|
fields?: Array<{
|
|
key: string
|
|
label: string
|
|
input_type: string
|
|
placeholder?: string | null
|
|
required: boolean
|
|
secret: boolean
|
|
settings_key?: string | null
|
|
payload_key?: string | null
|
|
sort_order: number
|
|
}>
|
|
}
|
|
|
|
interface AddonState {
|
|
addons: Addon[]
|
|
loaded: boolean
|
|
loadAddons: () => Promise<void>
|
|
isEnabled: (id: string) => boolean
|
|
}
|
|
|
|
export const useAddonStore = create<AddonState>((set, get) => ({
|
|
addons: [],
|
|
loaded: false,
|
|
|
|
loadAddons: async () => {
|
|
try {
|
|
const data = await addonsApi.enabled()
|
|
set({ addons: data.addons || [], loaded: true })
|
|
} catch {
|
|
set({ loaded: true })
|
|
}
|
|
},
|
|
|
|
isEnabled: (id: string) => {
|
|
if (id === 'memories') {
|
|
return get().addons.some(a => a.type === 'photo_provider' && a.enabled)
|
|
}
|
|
return get().addons.some(a => a.id === id && a.enabled)
|
|
},
|
|
}))
|