mirror of
https://github.com/EasyTier/EasyTier.git
synced 2026-05-06 17:59:11 +00:00
99 lines
2.7 KiB
TypeScript
99 lines
2.7 KiB
TypeScript
import type { NetworkConfig, NetworkInstance } from '~/types/network'
|
|
import { DEFAULT_NETWORK_CONFIG } from '~/types/network'
|
|
|
|
export const useNetworkStore = defineStore('networkStore', {
|
|
state: () => {
|
|
const networkList = [DEFAULT_NETWORK_CONFIG()]
|
|
return {
|
|
// for initially empty lists
|
|
networkList: networkList as NetworkConfig[],
|
|
// for data that is not yet loaded
|
|
curNetwork: networkList[0],
|
|
|
|
// uuid -> instance
|
|
instances: {} as Record<string, NetworkInstance>,
|
|
|
|
networkInfos: {} as Record<string, any>,
|
|
}
|
|
},
|
|
|
|
getters: {
|
|
lastNetwork(): NetworkConfig {
|
|
return this.networkList[this.networkList.length - 1]
|
|
},
|
|
|
|
curNetworkId(): string {
|
|
return this.curNetwork.instance_id
|
|
},
|
|
|
|
networkInstances(): Array<NetworkInstance> {
|
|
return Object.values(this.instances)
|
|
},
|
|
|
|
networkInstanceIds(): Array<string> {
|
|
return Object.keys(this.instances)
|
|
},
|
|
},
|
|
|
|
actions: {
|
|
addNewNetwork() {
|
|
this.networkList.push(DEFAULT_NETWORK_CONFIG())
|
|
},
|
|
|
|
delCurNetwork() {
|
|
const curNetworkIdx = this.networkList.indexOf(this.curNetwork)
|
|
this.networkList.splice(curNetworkIdx, 1)
|
|
const nextCurNetworkIdx = Math.min(curNetworkIdx, this.networkList.length - 1)
|
|
this.curNetwork = this.networkList[nextCurNetworkIdx]
|
|
},
|
|
|
|
removeNetworkInstance(instanceId: string) {
|
|
delete this.instances[instanceId]
|
|
},
|
|
|
|
addNetworkInstance(instanceId: string) {
|
|
this.instances[instanceId] = {
|
|
instance_id: instanceId,
|
|
running: false,
|
|
error_msg: '',
|
|
detail: {},
|
|
}
|
|
},
|
|
|
|
updateWithNetworkInfos(networkInfos: Record<string, any>) {
|
|
this.networkInfos = networkInfos
|
|
for (const [instanceId, info] of Object.entries(networkInfos)) {
|
|
if (this.instances[instanceId] === undefined)
|
|
this.addNetworkInstance(instanceId)
|
|
|
|
this.instances[instanceId].running = info.running
|
|
this.instances[instanceId].error_msg = info.error_msg
|
|
this.instances[instanceId].detail = info
|
|
}
|
|
},
|
|
|
|
loadFromLocalStorage() {
|
|
const networkList = JSON.parse(localStorage.getItem('networkList') || '[]')
|
|
const result = []
|
|
for (const cfg of networkList) {
|
|
result.push({
|
|
...DEFAULT_NETWORK_CONFIG,
|
|
...cfg,
|
|
})
|
|
}
|
|
if (result.length === 0)
|
|
result.push(DEFAULT_NETWORK_CONFIG)
|
|
|
|
this.networkList = result
|
|
this.curNetwork = this.networkList[0]
|
|
},
|
|
|
|
saveToLocalStorage() {
|
|
localStorage.setItem('networkList', JSON.stringify(this.networkList))
|
|
},
|
|
},
|
|
})
|
|
|
|
if (import.meta.hot)
|
|
import.meta.hot.accept(acceptHMRUpdate(useNetworkStore as any, import.meta.hot))
|