68 lines
1.7 KiB
TypeScript
68 lines
1.7 KiB
TypeScript
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
|
|
},
|
|
})
|