demo version prepped

This commit is contained in:
2026-04-01 12:40:40 -04:00
parent d44e5f0ad1
commit ed319a6423
62 changed files with 8362 additions and 0 deletions

67
frontend/src/store.ts Normal file
View File

@@ -0,0 +1,67 @@
import { reactive } from 'vue'
export const store = reactive({
cellsites: [],
alarms: [],
incidents: [],
robots: [],
// FIXME: I am replacing the entire array, should merge when can. But it's okay for demo.
set_robots(data) {
this.robots = data
},
set_cellsites(data) {
this.cellsites = data
},
set_alarms(data) {
this.alarms = data
},
set_incidents(data) {
this.incidents = data
},
alarms_for_site(site_id) {
return this.alarms.filter(a => a.site_id === site_id)
},
severity_filter: null as number | null,
// active_tab: 'map' as 'map' | 'alarms' | 'incidents' | 'sites' | 'robots',
// NOTE: This is to retain the state when hitting the back button and be able to handle dynamic active tabs cross-component
detail_tabs: {},
// NOTE: The below manage state for the MODES: LIVE, Historical, Frozen.
is_frozen: false,
frozen_at: null as number | null,
refresh_interval_seconds: 30,
live_countdown: 30,
timeline_min: 0,
timeline_max: Date.now(),
timeline_position: Date.now(),
// NOTE: this is just in case the backend breaks, we FREEZE to avoid polling infinitely.
server_unreachable: false,
get is_live() {
return !this.is_frozen && this.timeline_position >= this.timeline_max - 2000 // NOTE: Buffer to deal with the flash of is_live, do not remove!
},
get is_historical() {
return !this.is_live
},
freeze() {
this.is_frozen = true
this.frozen_at = Date.now()
},
unfreeze() {
this.is_frozen = false
this.frozen_at = null
this.server_unreachable = false
},
set_timeline_position(val: number) {
this.timeline_position = val
},
set_refresh_interval(val: number) {
this.refresh_interval_seconds = val
},
})