2 <Container id="charging-stations-container">
4 v-show="Array.isArray(uiServerConfigurations) && uiServerConfigurations.length > 1"
5 id="ui-server-container"
8 id="ui-server-selector"
9 v-model="state.uiServerIndex"
14 getFromLocalStorage<number>('uiServerConfigurationIndex', 0) !== state.uiServerIndex
16 setToLocalStorage<number>('uiServerConfigurationIndex', state.uiServerIndex)
17 app?.appContext.config.globalProperties.$uiClient.registerWSEventListener(
20 app!.appContext.config.globalProperties.$chargingStations = []
24 app?.appContext.config.globalProperties.$uiClient.setConfiguration(
25 app?.appContext.config.globalProperties.$configuration.uiServer[
26 getFromLocalStorage<number>('uiServerConfigurationIndex', state.uiServerIndex)
29 app?.appContext.config.globalProperties.$uiClient.registerWSEventListener(
32 loadChargingStations(() => (state.renderChargingStationsList = randomUUID()))
38 $toast.error('Error at changing UI server configuration')
39 console.error('Error at changing UI server configuration:', error)
45 v-for="uiServerConfiguration in uiServerConfigurations"
46 :value="uiServerConfiguration.index"
48 {{ uiServerConfiguration.configuration.host }}
52 <Container id="buttons-container">
53 <Button @click="startSimulator()">Start Simulator</Button>
54 <Button @click="stopSimulator()">Stop Simulator</Button>
55 <Button @click="$router.push({ name: 'add-charging-stations' })">
60 :loading="state.loading"
61 @click="loadChargingStations(() => (state.renderChargingStationsList = randomUUID()))"
66 Array.isArray(app?.appContext.config.globalProperties.$chargingStations) &&
67 app?.appContext.config.globalProperties.$chargingStations.length > 0
69 :key="state.renderChargingStationsList"
70 :charging-stations="app?.appContext.config.globalProperties.$chargingStations"
75 <script setup lang="ts">
76 import { getCurrentInstance, reactive } from 'vue'
77 import { useToast } from 'vue-toast-notification'
78 import CSTable from '@/components/charging-stations/CSTable.vue'
79 import type { ResponsePayload, UIServerConfigurationSection } from '@/types'
80 import Container from '@/components/Container.vue'
81 import ReloadButton from '@/components/buttons/ReloadButton.vue'
82 import Button from '@/components/buttons/Button.vue'
83 import { getFromLocalStorage, setToLocalStorage } from '@/composables'
85 const randomUUID = (): `${string}-${string}-${string}-${string}-${string}` => {
86 return crypto.randomUUID()
89 const state = reactive({
90 renderChargingStationsList: randomUUID(),
92 uiServerIndex: getFromLocalStorage<number>('uiServerConfigurationIndex', 0)
95 const app = getCurrentInstance()
96 const uiClient = app?.appContext.config.globalProperties.$uiClient
97 const uiServerConfigurations: { configuration: UIServerConfigurationSection; index: number }[] =
98 app?.appContext.config.globalProperties.$configuration.uiServer.map(
99 (configuration: UIServerConfigurationSection, index: number) => ({
105 const $toast = useToast()
107 const loadChargingStations = (renderCallback?: () => void): void => {
108 if (state.loading === false) {
111 .listChargingStations()
112 .then((response: ResponsePayload) => {
114 app.appContext.config.globalProperties.$chargingStations = response.chargingStations
117 .catch((error: Error) => {
118 $toast.error('Error at fetching charging stations')
119 console.error('Error at fetching charging stations:', error)
122 if (renderCallback != null) {
125 state.loading = false
130 const startSimulator = (): void => {
134 $toast.success('Simulator successfully started')
136 .catch((error: Error) => {
137 $toast.error('Error at starting simulator')
138 console.error('Error at starting simulator:', error)
141 const stopSimulator = (): void => {
146 app.appContext.config.globalProperties.$chargingStations = []
148 $toast.success('Simulator successfully stopped')
150 .catch((error: Error) => {
151 $toast.error('Error at stopping simulator')
152 console.error('Error at stopping simulator:', error)
158 #charging-stations-container {
162 flex-direction: column;
165 #ui-server-container {
170 #ui-server-selector {
187 background-color: blue;
191 justify-content: center;
194 #reload-button:hover {
195 background-color: rgb(0, 0, 225);
198 #reload-button:active {
199 background-color: red;
204 background-color: black;