♻️ Moves analytics subscription handling to store

This commit is contained in:
Rune Harlyk
2026-01-03 17:41:42 +01:00
committed by nikguin04
parent 39f9e47e59
commit a31e001eb5
6 changed files with 128 additions and 81 deletions
+22 -7
View File
@@ -1,19 +1,34 @@
import { AnalyticsData } from '$lib/platform_shared/message'
import { writable } from 'svelte/store'
const analytics_data: AnalyticsData[] = []
import { socket } from './socket'
const maxAnalyticsData = 100
function createAnalytics() {
const { subscribe, update } = writable(analytics_data)
const { subscribe, update } = writable<AnalyticsData[]>([])
let unsubscribe: (() => void) | null = null
let listenerCount = 0
const addData = (content: AnalyticsData) => {
update(data => [...data, content].slice(-maxAnalyticsData))
}
return {
subscribe,
addData: (content: AnalyticsData) => {
update(analytics_data => {
return [...analytics_data, content].slice(-maxAnalyticsData)
})
addData,
listen: () => {
listenerCount++
if (!unsubscribe) {
unsubscribe = socket.on(AnalyticsData, addData)
}
},
stop: () => {
listenerCount = Math.max(0, listenerCount - 1)
if (listenerCount === 0 && unsubscribe) {
unsubscribe()
unsubscribe = null
}
}
}
}