@@ -30,7 +30,10 @@ const updateInfo = ref({ version: '', notes: '', releaseUrl: '' });
3030const updateProgress = ref (0 );
3131const updateInProgress = ref (false );
3232const updateError = ref (' ' );
33- const updateCheckerRef = ref (null );
33+ const updateCheckerRef = ref <InstanceType <typeof UpdateChecker > | null >(null );
34+
35+ // Store unsubscribe functions to properly clean them up when component is unmounted
36+ const unsubscribeFunctions = ref <Array <() => void >>([]);
3437
3538// Initialize cameras
3639async function initializeCameras() {
@@ -81,18 +84,18 @@ function toggleUpdateOverlay() {
8184}
8285
8386// Update handlers
84- function handleUpdateAvailable(info ) {
87+ function handleUpdateAvailable(info : { version : string ; notes : string ; releaseUrl : string } ) {
8588 updateAvailable .value = true ;
8689 updateInfo .value = info ;
8790 console .log (' Update available:' , info );
8891}
8992
90- function handleUpdateProgress(progress ) {
93+ function handleUpdateProgress(progress : number ) {
9194 updateProgress .value = progress ;
9295 updateInProgress .value = true ;
9396}
9497
95- function handleUpdateError(error ) {
98+ function handleUpdateError(error : Error | string ) {
9699 updateError .value = error instanceof Error ? error .message : String (error );
97100 updateInProgress .value = false ;
98101}
@@ -155,6 +158,7 @@ async function setupEventListeners() {
155158 console .log (' Received border radius event:' , event );
156159 borderRadius .value = event .payload as number ;
157160 });
161+ unsubscribeFunctions .value .push (unlistenRadius );
158162 console .log (' Border radius listener setup complete' );
159163 } catch (e ) {
160164 console .error (' Error setting up border-radius listener:' , e );
@@ -166,6 +170,7 @@ async function setupEventListeners() {
166170 console .log (' Received border width event:' , event );
167171 borderWidth .value = event .payload as number ;
168172 });
173+ unsubscribeFunctions .value .push (unlistenWidth );
169174 console .log (' Border width listener setup complete' );
170175 } catch (e ) {
171176 console .error (' Error setting up border-width listener:' , e );
@@ -177,6 +182,7 @@ async function setupEventListeners() {
177182 console .log (' Received border color event:' , event );
178183 borderColor .value = event .payload as string ;
179184 });
185+ unsubscribeFunctions .value .push (unlistenColor );
180186 console .log (' Border color listener setup complete' );
181187 } catch (e ) {
182188 console .error (' Error setting up border-color listener:' , e );
@@ -222,6 +228,15 @@ onMounted(async () => {
222228onUnmounted (() => {
223229 // Remove keyboard event listener
224230 window .removeEventListener (' keydown' , handleKeyboardShortcuts );
231+
232+ // Unsubscribe from all event listeners
233+ unsubscribeFunctions .value .forEach (unsubscribe => {
234+ try {
235+ unsubscribe ();
236+ } catch (e ) {
237+ console .error (' Error unsubscribing from event:' , e );
238+ }
239+ });
225240});
226241 </script >
227242
0 commit comments