Skip to content

Commit dcdec9f

Browse files
fix: EventModuleProvider now extends BaseModuleProvider (#3596)
* fix: EventModuleProvider extends BaseModuleProvider and removes subscribe method - EventModuleProvider now extends BaseModuleProvider as required by module system - Removed subscribe method from interface and implementation - Consumers should use event$.subscribe() for full RxJS Observable functionality - Updated documentation and changeset with migration notes - Uses BaseModuleProvider teardown system for proper cleanup BREAKING CHANGE: modules.event.subscribe() removed, use modules.event.event$.subscribe() instead * Update packages/modules/event/src/provider.ts Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
1 parent a13de68 commit dcdec9f

File tree

3 files changed

+28
-26
lines changed

3 files changed

+28
-26
lines changed
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
---
2+
"@equinor/fusion-framework-module-event": minor
3+
---
4+
5+
Fix EventModuleProvider to extend BaseModuleProvider as required by the module system. This resolves telemetry errors indicating the provider was not properly extending the base class.
6+
7+
Also removed the subscribe method from the IEventModuleProvider interface and implementation, as consumers can use the event$ Observable property for subscription instead.
8+
9+
**Migration:** Replace `modules.event.subscribe(...)` with `modules.event.event$.subscribe(...)`. The `event$` property provides full Observable functionality including `pipe`, `map`, `filter`, and other RxJS operators.
10+
11+
*Note: Using minor version bump since the framework internally does not use subscribe or pipe on the event module.*

packages/modules/event/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,9 +92,9 @@ if(!event.defaultPrevent){
9292
### Subscribe to all events
9393
> note that when subscribing to events, it does not allow side-effects, like `preventDefault` and `stopPropagation`
9494
```ts
95-
const subscription = modules.event.subscribe(console.log);
95+
const subscription = modules.event.event$.subscribe(console.log);
9696
subscription.add(
97-
modules.event.subscribe({
97+
modules.event.event$.subscribe({
9898
next: (event) => console.log(event),
9999
error: (err) => console.error(err),
100100
complete: () => 'event provider disposed'

packages/modules/event/src/provider.ts

Lines changed: 15 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
import { Observable, type Observer, Subject, type Subscription } from 'rxjs';
1+
import { type Observable, Subject } from 'rxjs';
2+
3+
import { BaseModuleProvider } from '@equinor/fusion-framework-module/provider';
4+
import { version } from './version.js';
25

36
import type { IEventModuleConfigurator } from './configurator';
47
import { FrameworkEventDispatcher, type FrameworkEventHandler } from './dispatcher';
@@ -12,15 +15,16 @@ import {
1215
} from './event';
1316

1417
export interface IEventModuleProvider {
18+
/** Observable stream of all dispatched events for subscription */
1519
readonly event$: Observable<IFrameworkEvent>;
1620

17-
/** subscribe to a known mapped event @see {@link FrameworkEventMap} */
21+
/** listen to a known mapped event @see {@link FrameworkEventMap} */
1822
addEventListener<TKey extends keyof FrameworkEventMap>(
1923
type: TKey,
2024
handler: FrameworkEventHandler<FrameworkEventMap[TKey]>,
2125
): VoidFunction;
2226

23-
/** subscribe to generic type */
27+
/** listen to generic type events */
2428
addEventListener<TType extends FrameworkEvent = FrameworkEvent>(
2529
type: string,
2630
handler: FrameworkEventHandler<TType>,
@@ -43,23 +47,11 @@ export interface IEventModuleProvider {
4347
event: TType,
4448
): Promise<FrameworkEvent>;
4549

46-
/**
47-
* subscribe to events
48-
* __note__: does not allow side effects
49-
*/
50-
subscribe(observer?: Partial<Observer<IFrameworkEvent>>): Subscription;
51-
52-
/**
53-
* subscribe to events
54-
* __note__: does not allow side effects
55-
*/
56-
subscribe(next: (value: IFrameworkEvent) => void): Subscription;
57-
5850
dispose: VoidFunction;
5951
}
6052

6153
export class EventModuleProvider
62-
extends Observable<IFrameworkEvent>
54+
extends BaseModuleProvider<IEventModuleConfigurator>
6355
implements IEventModuleProvider
6456
{
6557
private __listeners: Array<{
@@ -80,13 +72,17 @@ export class EventModuleProvider
8072
}
8173

8274
constructor(config: IEventModuleConfigurator) {
83-
super((subscriber) => {
84-
this.__event$.subscribe(subscriber);
85-
});
75+
super({ version, config });
8676
this.__dispatcher = new FrameworkEventDispatcher({
8777
onDispatch: config.onDispatch,
8878
onBubble: config.onBubble,
8979
});
80+
// complete the event$ subject when the provider is disposed
81+
// and clear the listeners
82+
this._addTeardown(() => {
83+
this.__listeners = [];
84+
this.__event$.complete();
85+
});
9086
}
9187

9288
public addEventListener(type: string, handler: FrameworkEventHandler): VoidFunction {
@@ -132,9 +128,4 @@ export class EventModuleProvider
132128
}
133129
return event;
134130
}
135-
136-
public dispose() {
137-
this.__listeners = [];
138-
this.__event$.complete();
139-
}
140131
}

0 commit comments

Comments
 (0)