Co-authored-by: Dominik Pschenitschni <mail@celement.de> Reviewed-on: https://kolaente.dev/vikunja/frontend/pulls/2417 Reviewed-by: konrad <k@knt.li> Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de> Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
93 lines
No EOL
2 KiB
TypeScript
93 lines
No EOL
2 KiB
TypeScript
import {defineStore, acceptHMRUpdate} from 'pinia'
|
|
import {parseURL} from 'ufo'
|
|
|
|
import {HTTPFactory} from '@/http-common'
|
|
import {objectToCamelCase} from '@/helpers/case'
|
|
|
|
import type {IProvider} from '@/types/IProvider'
|
|
|
|
export interface ConfigState {
|
|
version: string,
|
|
frontendUrl: string,
|
|
motd: string,
|
|
linkSharingEnabled: boolean,
|
|
maxFileSize: string,
|
|
registrationEnabled: boolean,
|
|
availableMigrators: [],
|
|
taskAttachmentsEnabled: boolean,
|
|
totpEnabled: boolean,
|
|
enabledBackgroundProviders: [],
|
|
legal: {
|
|
imprintUrl: string,
|
|
privacyPolicyUrl: string,
|
|
},
|
|
caldavEnabled: boolean,
|
|
userDeletionEnabled: boolean,
|
|
taskCommentsEnabled: boolean,
|
|
auth: {
|
|
local: {
|
|
enabled: boolean,
|
|
},
|
|
openidConnect: {
|
|
enabled: boolean,
|
|
redirectUrl: string,
|
|
providers: IProvider[],
|
|
},
|
|
},
|
|
}
|
|
|
|
export const useConfigStore = defineStore('config', {
|
|
state: (): ConfigState => ({
|
|
// These are the api defaults.
|
|
version: '',
|
|
frontendUrl: '',
|
|
motd: '',
|
|
linkSharingEnabled: true,
|
|
maxFileSize: '20MB',
|
|
registrationEnabled: true,
|
|
availableMigrators: [],
|
|
taskAttachmentsEnabled: true,
|
|
totpEnabled: true,
|
|
enabledBackgroundProviders: [],
|
|
legal: {
|
|
imprintUrl: '',
|
|
privacyPolicyUrl: '',
|
|
},
|
|
caldavEnabled: false,
|
|
userDeletionEnabled: true,
|
|
taskCommentsEnabled: true,
|
|
auth: {
|
|
local: {
|
|
enabled: true,
|
|
},
|
|
openidConnect: {
|
|
enabled: false,
|
|
redirectUrl: '',
|
|
providers: [],
|
|
},
|
|
},
|
|
}),
|
|
getters: {
|
|
migratorsEnabled: (state) => state.availableMigrators?.length > 0,
|
|
apiBase() {
|
|
const {host, protocol} = parseURL(window.API_URL)
|
|
return protocol + '//' + host
|
|
},
|
|
},
|
|
actions: {
|
|
setConfig(config: ConfigState) {
|
|
Object.assign(this, config)
|
|
},
|
|
async update() {
|
|
const HTTP = HTTPFactory()
|
|
const {data: config} = await HTTP.get('info')
|
|
this.setConfig(objectToCamelCase(config))
|
|
return config
|
|
},
|
|
},
|
|
})
|
|
|
|
// support hot reloading
|
|
if (import.meta.hot) {
|
|
import.meta.hot.accept(acceptHMRUpdate(useConfigStore, import.meta.hot))
|
|
} |