Problem Statement
The effects panel currently shows nothing while an effect is actively executing. The running: [] array is hardcoded as empty in the component. Users have no visibility into effects that are waiting for an Observable to emit only terminal states (completed/error) are ever surfaced.
This makes it impossible to debug effects that are slow, stuck, or never resolving.
Proposed Solution
Track the triggered lifecycle event that is already emitted by DevToolsEffectSources and surface it in the effects panel as a live "running" indicator. When an effect receives a triggered event and has no matching terminal event yet, show it in a dedicated Running section with an animated indicator and elapsed time.
Changes required:
effects-panel.component.ts: populate running from triggered events that have no matching executed/emitted/error event by executionId
effects-panel.component.html: render the running section (currently the template has the slot but it is always empty)
- No core library changes needed the
triggered lifecycle is already sent over WebSocket
Alternatives Considered
Polling the WebSocket for heartbeats to infer running state. But overly complex given the data is already available.
Component
Effects Panel (ngrx-devtool-ui)
Problem Statement
The effects panel currently shows nothing while an effect is actively executing. The
running: []array is hardcoded as empty in the component. Users have no visibility into effects that are waiting for an Observable to emit only terminal states (completed/error) are ever surfaced.This makes it impossible to debug effects that are slow, stuck, or never resolving.
Proposed Solution
Track the
triggeredlifecycle event that is already emitted byDevToolsEffectSourcesand surface it in the effects panel as a live "running" indicator. When an effect receives atriggeredevent and has no matching terminal event yet, show it in a dedicated Running section with an animated indicator and elapsed time.Changes required:
effects-panel.component.ts: populaterunningfromtriggeredevents that have no matchingexecuted/emitted/errorevent byexecutionIdeffects-panel.component.html: render the running section (currently the template has the slot but it is always empty)triggeredlifecycle is already sent over WebSocketAlternatives Considered
Polling the WebSocket for heartbeats to infer running state. But overly complex given the data is already available.
Component
Effects Panel (
ngrx-devtool-ui)