mirror of
https://github.com/h44z/wg-portal.git
synced 2025-06-29 09:47:00 +00:00
153 lines
4.6 KiB
JavaScript
153 lines
4.6 KiB
JavaScript
|
import { defineStore } from 'pinia'
|
||
|
|
||
|
import {apiWrapper} from '@/helpers/fetch-wrapper'
|
||
|
import {notify} from "@kyvg/vue3-notification";
|
||
|
import { freshInterface } from '@/helpers/models';
|
||
|
import { base64_url_encode } from '@/helpers/encoding';
|
||
|
|
||
|
const baseUrl = `/interface`
|
||
|
|
||
|
export const interfaceStore = defineStore({
|
||
|
id: 'interfaces',
|
||
|
state: () => ({
|
||
|
interfaces: [],
|
||
|
prepared: freshInterface(),
|
||
|
configuration: "",
|
||
|
selected: "",
|
||
|
fetching: false,
|
||
|
}),
|
||
|
getters: {
|
||
|
Count: (state) => state.interfaces.length,
|
||
|
Prepared: (state) => {console.log("STATE:", state.prepared); return state.prepared},
|
||
|
All: (state) => state.interfaces,
|
||
|
Find: (state) => {
|
||
|
return (id) => state.interfaces.find((p) => p.Identifier === id)
|
||
|
},
|
||
|
GetSelected: (state) => state.interfaces.find((i) => i.Identifier === state.selected) || state.interfaces[0],
|
||
|
isFetching: (state) => state.fetching,
|
||
|
},
|
||
|
actions: {
|
||
|
setInterfaces(interfaces) {
|
||
|
this.interfaces = interfaces
|
||
|
if (this.interfaces.length > 0) {
|
||
|
this.selected = this.interfaces[0].Identifier
|
||
|
} else {
|
||
|
this.selected = ""
|
||
|
}
|
||
|
this.fetching = false
|
||
|
},
|
||
|
async LoadInterfaces() {
|
||
|
this.fetching = true
|
||
|
return apiWrapper.get(`${baseUrl}/all`)
|
||
|
.then(this.setInterfaces)
|
||
|
.catch(error => {
|
||
|
this.setInterfaces([])
|
||
|
console.log("Failed to load interfaces: ", error)
|
||
|
notify({
|
||
|
title: "Backend Connection Failure",
|
||
|
text: "Failed to load interfaces!",
|
||
|
})
|
||
|
})
|
||
|
},
|
||
|
setPreparedInterface(iface) {
|
||
|
this.prepared = iface;
|
||
|
},
|
||
|
setInterfaceConfig(ifaceConfig) {
|
||
|
this.configuration = ifaceConfig;
|
||
|
},
|
||
|
async PrepareInterface() {
|
||
|
return apiWrapper.get(`${baseUrl}/prepare`)
|
||
|
.then(this.setPreparedInterface)
|
||
|
.catch(error => {
|
||
|
this.prepared = freshInterface()
|
||
|
console.log("Failed to load prepared interface: ", error)
|
||
|
notify({
|
||
|
title: "Backend Connection Failure",
|
||
|
text: "Failed to load prepared interface!",
|
||
|
})
|
||
|
})
|
||
|
},
|
||
|
async LoadInterfaceConfig(id) {
|
||
|
return apiWrapper.get(`${baseUrl}/config/${base64_url_encode(id)}`)
|
||
|
.then(this.setInterfaceConfig)
|
||
|
.catch(error => {
|
||
|
this.configuration = ""
|
||
|
console.log("Failed to load interface configuration: ", error)
|
||
|
notify({
|
||
|
title: "Backend Connection Failure",
|
||
|
text: "Failed to load interface configuration!",
|
||
|
})
|
||
|
})
|
||
|
},
|
||
|
async DeleteInterface(id) {
|
||
|
this.fetching = true
|
||
|
return apiWrapper.delete(`${baseUrl}/${base64_url_encode(id)}`)
|
||
|
.then(() => {
|
||
|
this.interfaces = this.interfaces.filter(i => i.Identifier !== id)
|
||
|
if (this.interfaces.length > 0) {
|
||
|
this.selected = this.interfaces[0].Identifier
|
||
|
} else {
|
||
|
this.selected = ""
|
||
|
}
|
||
|
this.fetching = false
|
||
|
})
|
||
|
.catch(error => {
|
||
|
this.fetching = false
|
||
|
console.log(error)
|
||
|
throw new Error(error)
|
||
|
})
|
||
|
},
|
||
|
async UpdateInterface(id, formData) {
|
||
|
this.fetching = true
|
||
|
return apiWrapper.put(`${baseUrl}/${base64_url_encode(id)}`, formData)
|
||
|
.then(iface => {
|
||
|
let idx = this.interfaces.findIndex((i) => i.Identifier === id)
|
||
|
this.interfaces[idx] = iface
|
||
|
this.fetching = false
|
||
|
})
|
||
|
.catch(error => {
|
||
|
this.fetching = false
|
||
|
console.log(error)
|
||
|
throw new Error(error)
|
||
|
})
|
||
|
},
|
||
|
async CreateInterface(formData) {
|
||
|
this.fetching = true
|
||
|
return apiWrapper.post(`${baseUrl}/new`, formData)
|
||
|
.then(iface => {
|
||
|
this.interfaces.push(iface)
|
||
|
this.fetching = false
|
||
|
})
|
||
|
.catch(error => {
|
||
|
this.fetching = false
|
||
|
console.log(error)
|
||
|
throw new Error(error)
|
||
|
})
|
||
|
},
|
||
|
async ApplyPeerDefaults(id, formData) {
|
||
|
this.fetching = true
|
||
|
return apiWrapper.post(`${baseUrl}/${base64_url_encode(id)}/apply-peer-defaults`, formData)
|
||
|
.then(() => {
|
||
|
this.fetching = false
|
||
|
})
|
||
|
.catch(error => {
|
||
|
this.fetching = false
|
||
|
console.log(error)
|
||
|
throw new Error(error)
|
||
|
})
|
||
|
},
|
||
|
async SaveConfiguration(id) {
|
||
|
this.fetching = true
|
||
|
return apiWrapper.post(`${baseUrl}/${base64_url_encode(id)}/save-config`)
|
||
|
.then(() => {
|
||
|
this.fetching = false
|
||
|
})
|
||
|
.catch(error => {
|
||
|
this.fetching = false
|
||
|
console.log(error)
|
||
|
throw new Error(error)
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
})
|