99 行
2.8 KiB
JavaScript
99 行
2.8 KiB
JavaScript
import BooleanSetting from '../helpers/boolean_setting.vue'
|
|
import ChoiceSetting from '../helpers/choice_setting.vue'
|
|
import IntegerSetting from '../helpers/integer_setting.vue'
|
|
import StringSetting from '../helpers/string_setting.vue'
|
|
import GroupSetting from '../helpers/group_setting.vue'
|
|
import Popover from 'src/components/popover/popover.vue'
|
|
|
|
import SharedComputedObject from '../helpers/shared_computed_object.js'
|
|
import { library } from '@fortawesome/fontawesome-svg-core'
|
|
import {
|
|
faGlobe
|
|
} from '@fortawesome/free-solid-svg-icons'
|
|
|
|
library.add(
|
|
faGlobe
|
|
)
|
|
|
|
const FrontendsTab = {
|
|
provide () {
|
|
return {
|
|
defaultDraftMode: true,
|
|
defaultSource: 'admin'
|
|
}
|
|
},
|
|
components: {
|
|
BooleanSetting,
|
|
ChoiceSetting,
|
|
IntegerSetting,
|
|
StringSetting,
|
|
GroupSetting,
|
|
Popover
|
|
},
|
|
created () {
|
|
if (this.user.rights.admin) {
|
|
this.$store.dispatch('loadFrontendsStuff')
|
|
}
|
|
},
|
|
computed: {
|
|
frontends () {
|
|
return this.$store.state.adminSettings.frontends
|
|
},
|
|
...SharedComputedObject()
|
|
},
|
|
methods: {
|
|
canInstall (frontend) {
|
|
const fe = this.frontends.find(f => f.name === frontend.name)
|
|
if (!fe) return false
|
|
return fe.refs.includes(frontend.ref)
|
|
},
|
|
getSuggestedRef (frontend) {
|
|
const defaultFe = this.adminDraft[':pleroma'][':frontends'][':primary']
|
|
if (defaultFe.name === frontend.name && this.canInstall(defaultFe)) {
|
|
return defaultFe.ref
|
|
} else {
|
|
return frontend.refs[0]
|
|
}
|
|
},
|
|
update (frontend, suggestRef) {
|
|
const ref = suggestRef || this.getSuggestedRef(frontend)
|
|
const { name } = frontend
|
|
const payload = { name, ref }
|
|
|
|
this.$store.state.api.backendInteractor.installFrontend({ payload })
|
|
.then(async (response) => {
|
|
this.$store.dispatch('loadFrontendsStuff')
|
|
if (response.error) {
|
|
const reason = await response.error.json()
|
|
this.$store.dispatch('pushGlobalNotice', {
|
|
level: 'error',
|
|
messageKey: 'admin_dash.frontend.failure_installing_frontend',
|
|
messageArgs: {
|
|
version: name + '/' + ref,
|
|
reason: reason.error
|
|
},
|
|
timeout: 5000
|
|
})
|
|
} else {
|
|
this.$store.dispatch('pushGlobalNotice', {
|
|
level: 'success',
|
|
messageKey: 'admin_dash.frontend.success_installing_frontend',
|
|
messageArgs: {
|
|
version: name + '/' + ref
|
|
},
|
|
timeout: 2000
|
|
})
|
|
}
|
|
})
|
|
},
|
|
setDefault (frontend, suggestRef) {
|
|
const ref = suggestRef || this.getSuggestedRef(frontend)
|
|
const { name } = frontend
|
|
|
|
this.$store.commit('updateAdminDraft', { path: [':pleroma', ':frontends', ':primary'], value: { name, ref } })
|
|
}
|
|
}
|
|
}
|
|
|
|
export default FrontendsTab
|