mirror of
https://github.com/jhbruhn/respira.git
synced 2026-01-27 02:13:41 +00:00
fix: Address Copilot review feedback on event subscriptions
Add error handling and documentation to event subscriptions based on Copilot review feedback. Changes: - Added try-catch blocks to all event callbacks for graceful error handling - Added comments documenting that subscriptions persist for app lifetime - Improved JSDoc for onPatternDeleted function with lifecycle details - Added error logging to help debug potential issues Benefits: - Prevents silent failures in event callbacks - Clear documentation about subscription lifecycle - Better developer experience with error messages 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
20e9fa13e7
commit
9299f5aed9
4 changed files with 47 additions and 9 deletions
|
|
@ -28,9 +28,17 @@ export const useEventStore = create<EventState>((set) => ({
|
||||||
}));
|
}));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Subscribe to pattern deleted event
|
* Subscribe to the pattern deleted event.
|
||||||
* @param callback - Function to call when event is emitted
|
*
|
||||||
* @returns Unsubscribe function
|
* The subscription remains active until the returned unsubscribe function is called.
|
||||||
|
* If the unsubscribe function is not called, the listener will persist for the
|
||||||
|
* lifetime of the event store (typically the lifetime of the application).
|
||||||
|
*
|
||||||
|
* Call the returned unsubscribe function when the listener is no longer needed,
|
||||||
|
* especially for short-lived components or non-module-level subscriptions.
|
||||||
|
*
|
||||||
|
* @param callback - Function to call when the event is emitted.
|
||||||
|
* @returns Unsubscribe function that removes the listener when invoked.
|
||||||
*/
|
*/
|
||||||
export const onPatternDeleted = (callback: () => void): (() => void) => {
|
export const onPatternDeleted = (callback: () => void): (() => void) => {
|
||||||
let prevCount = useEventStore.getState().patternDeletedCount;
|
let prevCount = useEventStore.getState().patternDeletedCount;
|
||||||
|
|
|
||||||
|
|
@ -194,7 +194,17 @@ export const useMachineCacheStore = create<MachineCacheState>((set, get) => ({
|
||||||
},
|
},
|
||||||
}));
|
}));
|
||||||
|
|
||||||
// Subscribe to pattern deleted event
|
// Subscribe to pattern deleted event.
|
||||||
|
// This subscription is intended to persist for the lifetime of the application,
|
||||||
|
// so the unsubscribe function returned by `onPatternDeleted` is intentionally
|
||||||
|
// not stored or called.
|
||||||
onPatternDeleted(() => {
|
onPatternDeleted(() => {
|
||||||
|
try {
|
||||||
useMachineCacheStore.getState().clearResumeState();
|
useMachineCacheStore.getState().clearResumeState();
|
||||||
|
} catch (error) {
|
||||||
|
console.error(
|
||||||
|
"[MachineCacheStore] Failed to clear resume state on pattern deleted event:",
|
||||||
|
error,
|
||||||
|
);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -128,7 +128,17 @@ export const useMachineUploadStore = create<MachineUploadState>((set) => ({
|
||||||
},
|
},
|
||||||
}));
|
}));
|
||||||
|
|
||||||
// Subscribe to pattern deleted event
|
// Subscribe to pattern deleted event.
|
||||||
|
// This subscription is intended to persist for the lifetime of the application,
|
||||||
|
// so the unsubscribe function returned by `onPatternDeleted` is intentionally
|
||||||
|
// not stored or called.
|
||||||
onPatternDeleted(() => {
|
onPatternDeleted(() => {
|
||||||
|
try {
|
||||||
useMachineUploadStore.getState().reset();
|
useMachineUploadStore.getState().reset();
|
||||||
|
} catch (error) {
|
||||||
|
console.error(
|
||||||
|
"[MachineUploadStore] Failed to reset on pattern deleted event:",
|
||||||
|
error,
|
||||||
|
);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -123,7 +123,17 @@ export const useUploadedPatternOffset = () =>
|
||||||
export const usePatternRotation = () =>
|
export const usePatternRotation = () =>
|
||||||
usePatternStore((state) => state.patternRotation);
|
usePatternStore((state) => state.patternRotation);
|
||||||
|
|
||||||
// Subscribe to pattern deleted event
|
// Subscribe to pattern deleted event.
|
||||||
|
// This subscription is intended to persist for the lifetime of the application,
|
||||||
|
// so the unsubscribe function returned by `onPatternDeleted` is intentionally
|
||||||
|
// not stored or called.
|
||||||
onPatternDeleted(() => {
|
onPatternDeleted(() => {
|
||||||
|
try {
|
||||||
usePatternStore.getState().clearUploadedPattern();
|
usePatternStore.getState().clearUploadedPattern();
|
||||||
|
} catch (error) {
|
||||||
|
console.error(
|
||||||
|
"[PatternStore] Failed to clear uploaded pattern on pattern deleted event:",
|
||||||
|
error,
|
||||||
|
);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue