@genesislcap/foundation-events 14.67.2 → 14.67.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -1
- package/dist/dts/eventEmitter/eventEmitterDI.d.ts +43 -4
- package/dist/dts/eventEmitter/eventEmitterDI.d.ts.map +1 -1
- package/dist/dts/eventEmitter/eventEmitterMixin.d.ts +57 -317
- package/dist/dts/eventEmitter/eventEmitterMixin.d.ts.map +1 -1
- package/dist/dts/index.d.ts +1 -0
- package/dist/dts/index.d.ts.map +1 -1
- package/dist/dts/tsdoc-metadata.json +11 -0
- package/dist/dts/types.d.ts +78 -10
- package/dist/dts/types.d.ts.map +1 -1
- package/dist/dts/utils/index.d.ts +2 -0
- package/dist/dts/utils/index.d.ts.map +1 -0
- package/dist/dts/utils/logger.d.ts +5 -0
- package/dist/dts/utils/logger.d.ts.map +1 -0
- package/dist/esm/eventEmitter/eventEmitterDI.js +14 -0
- package/dist/esm/eventEmitter/eventEmitterMixin.js +57 -4
- package/dist/esm/index.js +1 -0
- package/dist/esm/types.js +48 -0
- package/dist/esm/utils/index.js +1 -0
- package/dist/esm/utils/logger.js +5 -0
- package/dist/foundation-events.api.json +1374 -0
- package/dist/foundation-events.d.ts +246 -0
- package/docs/.gitattributes +2 -0
- package/docs/api/foundation-events.constructabletypedeventemitter.md +16 -0
- package/docs/api/foundation-events.createinputemitter.md +27 -0
- package/docs/api/foundation-events.createselectemitter.md +27 -0
- package/docs/api/foundation-events.customevent.md +12 -0
- package/docs/api/foundation-events.customeventmap.md +16 -0
- package/docs/api/foundation-events.defaulteventemitterdi.emit.md +22 -0
- package/docs/api/foundation-events.defaulteventemitterdi.md +21 -0
- package/docs/api/foundation-events.emitargs.md +14 -0
- package/docs/api/foundation-events.emitoptions.md +12 -0
- package/docs/api/foundation-events.emitorigin.md +12 -0
- package/docs/api/foundation-events.emitreturn.md +12 -0
- package/docs/api/foundation-events.eventdetailmap.md +12 -0
- package/docs/api/foundation-events.eventemitter.md +59 -0
- package/docs/api/foundation-events.eventemitterdi.emit.md +22 -0
- package/docs/api/foundation-events.eventemitterdi.md +48 -0
- package/docs/api/foundation-events.eventemittertarget.md +16 -0
- package/docs/api/foundation-events.getbaseemitargs.md +12 -0
- package/docs/api/foundation-events.keysmatching.md +14 -0
- package/docs/api/foundation-events.logger.md +12 -0
- package/docs/api/foundation-events.md +47 -0
- package/docs/api/foundation-events.registeremitter.md +13 -0
- package/docs/api/foundation-events.targetfirstselectedvalue.md +12 -0
- package/docs/api/foundation-events.targetvalue.md +12 -0
- package/docs/api/foundation-events.typedemitter._emit.md +22 -0
- package/docs/api/foundation-events.typedemitter.md +19 -0
- package/docs/api/index.md +12 -0
- package/docs/api-report.md +106 -0
- package/package.json +24 -4
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
import { Binding } from '@microsoft/fast-element';
|
|
2
|
+
import { Constructable } from '@microsoft/fast-element';
|
|
3
|
+
import { Controller } from '@microsoft/fast-element';
|
|
4
|
+
import { ExecutionContext } from '@microsoft/fast-element';
|
|
5
|
+
import { FASTElement } from '@microsoft/fast-element';
|
|
6
|
+
import { InterfaceSymbol } from '@microsoft/fast-foundation';
|
|
7
|
+
import { Logger } from '@genesislcap/foundation-utils';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* @deprecated - Use {@link EventEmitterTarget} type instead.
|
|
11
|
+
* @public
|
|
12
|
+
*/
|
|
13
|
+
export declare type ConstructableTypedEventEmitter = Constructable<FASTElement & HTMLElement>;
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* `<input>` template emit helper.
|
|
17
|
+
*
|
|
18
|
+
* @remarks
|
|
19
|
+
* In some.template.ts file you create the helper upfront by passing in the full event map.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```ts
|
|
23
|
+
* const inputEmit = createInputEmitter<EventMap>();
|
|
24
|
+
* ...
|
|
25
|
+
* <zero-text-field @change="${inputEmit('some-input-changed')}">
|
|
26
|
+
* ```
|
|
27
|
+
*
|
|
28
|
+
* @public
|
|
29
|
+
*/
|
|
30
|
+
export declare const createInputEmitter: <TEventDetailMap extends EventDetailMap>() => <K extends KeysMatching<TEventDetailMap, string>>(type: K, options?: EmitOptions) => Binding;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* `<select>` template emit helper.
|
|
34
|
+
*
|
|
35
|
+
* @remarks
|
|
36
|
+
* In some.template.ts file you create the helper upfront by passing in the full event map.
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```ts
|
|
40
|
+
* const selectEmit = createSelectEmitter<EventMap>();
|
|
41
|
+
* ...
|
|
42
|
+
* <zero-select @change="${selectEmit('some-select-changed')}">
|
|
43
|
+
* ```
|
|
44
|
+
*
|
|
45
|
+
* @public
|
|
46
|
+
*/
|
|
47
|
+
export declare const createSelectEmitter: <TEventDetailMap extends EventDetailMap>() => <K extends KeysMatching<TEventDetailMap, string>>(type: K, options?: EmitOptions) => Binding;
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* @public
|
|
51
|
+
*/
|
|
52
|
+
export declare const customEvent: <TEventDetail = void>(ctx: ExecutionContext) => CustomEvent<TEventDetail>;
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* @public
|
|
56
|
+
*/
|
|
57
|
+
export declare type CustomEventMap<TEventDetailMap extends EventDetailMap> = {
|
|
58
|
+
[K in keyof TEventDetailMap]: CustomEvent<TEventDetailMap[K]>;
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Default EventEmitterDI.
|
|
63
|
+
* @typeParam TEventDetailMap - The {@link EventDetailMap}.
|
|
64
|
+
* @public
|
|
65
|
+
*/
|
|
66
|
+
export declare class DefaultEventEmitterDI<TEventDetailMap extends EventDetailMap> implements EventEmitterDI<TEventDetailMap> {
|
|
67
|
+
emit<K extends keyof TEventDetailMap>(...args: TEventDetailMap[K] extends void ? [origin: EmitOrigin, type: K, options?: EmitOptions] : [origin: EmitOrigin, type: K, detail: TEventDetailMap[K], options?: EmitOptions]): EmitReturn;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* @public
|
|
72
|
+
*/
|
|
73
|
+
export declare type EmitArgs = [string, {} | undefined, EmitOptions | undefined];
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* @public
|
|
77
|
+
*/
|
|
78
|
+
export declare type EmitOptions = Omit<CustomEventInit, 'detail'>;
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* @public
|
|
82
|
+
*/
|
|
83
|
+
export declare type EmitOrigin = FASTElement;
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* @public
|
|
87
|
+
*/
|
|
88
|
+
export declare type EmitReturn = boolean | void;
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* @public
|
|
92
|
+
*/
|
|
93
|
+
export declare type EventDetailMap = Record<string, unknown>;
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* EventEmitter mixin.
|
|
97
|
+
*
|
|
98
|
+
* @remarks
|
|
99
|
+
* Strongly types the components `$emit` method, allowing only the mapped events to be emitted.
|
|
100
|
+
*
|
|
101
|
+
* @example
|
|
102
|
+
* Apply mixin to the base {@link @microsoft/fast-element#FASTElement | FASTElement}
|
|
103
|
+
*
|
|
104
|
+
* # Import
|
|
105
|
+
* ```ts
|
|
106
|
+
* import { EventEmitter, SomeSystemLevelEventDetailMap } from '@genesislcap/foundation-events';
|
|
107
|
+
* import { StoreEventDetailMap, TradeEntryEventDetailMap } from '../store'; // < custom app level event maps
|
|
108
|
+
* ```
|
|
109
|
+
*
|
|
110
|
+
* # Create event map
|
|
111
|
+
* ```ts
|
|
112
|
+
* type EventMap = SomeSystemLevelEventDetailMap & StoreEventDetailMap & TradeEntryEventDetailMap;
|
|
113
|
+
* ```
|
|
114
|
+
*
|
|
115
|
+
* # Apply Mixin
|
|
116
|
+
* ```ts
|
|
117
|
+
* export class MyComponent extends EventEmitter<EventMap>(FASTElement) {
|
|
118
|
+
* onSomeComponentEvent() {
|
|
119
|
+
* this.$emit('some-allowed-event', { foo: 'expected data structure' });
|
|
120
|
+
* }
|
|
121
|
+
* }
|
|
122
|
+
* ```
|
|
123
|
+
*
|
|
124
|
+
* @example
|
|
125
|
+
* Apply mixin to a class in the inheritance chain requires a second generic type param.
|
|
126
|
+
*
|
|
127
|
+
* # Apply Mixin to MyComponent that extends MyBaseComponent (which might be abstract). Mixin can be applied at different levels.
|
|
128
|
+
* # Please note there's a current limitation on retaining protected member access with this approach, so apply to base where possible.
|
|
129
|
+
* # Also, super classes cannot emit typed events via inheritance. Each level must have an explicit map. Devs can use a Union and Pick to create these.
|
|
130
|
+
* ```ts
|
|
131
|
+
* export class MyComponent extends EventEmitter<EventMap, MyBaseComponent>(MyBaseComponent) {}
|
|
132
|
+
* ```
|
|
133
|
+
*
|
|
134
|
+
* @privateRemarks
|
|
135
|
+
* Failed to retain protected member access when the mixin is applied while keeping the typed emitter, we can revisit if needed.
|
|
136
|
+
* So in the last example, if `MyBaseComponent` had a protected member, `MyComponent` wouldn't be able to access it with the mixin
|
|
137
|
+
* applied. Public members are fine. It may be a limitation of TypeScript. Suggestions welcome, but be warned it's a time sink.
|
|
138
|
+
*
|
|
139
|
+
* @typeParam TEventDetailMap - The {@link EventDetailMap}.
|
|
140
|
+
* @typeParam TTarget - The target class.
|
|
141
|
+
* @param Target - The class to apply the mixin to which ultimately extends {@link @microsoft/fast-element#FASTElement | FASTElement}.
|
|
142
|
+
* @public
|
|
143
|
+
*/
|
|
144
|
+
export declare const EventEmitter: <TEventDetailMap extends EventDetailMap, TTarget extends FASTElement = FASTElement>(Target: EventEmitterTarget<TTarget>) => abstract new (...args: any[]) => {
|
|
145
|
+
$emit<K extends keyof TEventDetailMap & string>(...args: TEventDetailMap[K] extends void ? [type: K, options?: EmitOptions] : [type: K, detail: TEventDetailMap[K], options?: EmitOptions]): EmitReturn;
|
|
146
|
+
readonly $fastController: Controller;
|
|
147
|
+
connectedCallback(): void;
|
|
148
|
+
disconnectedCallback(): void;
|
|
149
|
+
attributeChangedCallback(name: string, oldValue: string, newValue: string): void;
|
|
150
|
+
};
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* EventEmitterDI interface.
|
|
154
|
+
*
|
|
155
|
+
* @remarks
|
|
156
|
+
* A strongly typed event emitter with events typed to {@link EventDetailMap} pairings. This is closely related to the
|
|
157
|
+
* {@link EventEmitter} mixin in terms of functionality, however its purpose is different. This allows you to create
|
|
158
|
+
* pre-configured EventEmitters that can be injected anywhere. These can emit typed events from an origin html element,
|
|
159
|
+
* without that element needing to be an actual {@link @microsoft/fast-element#FASTElement | FASTElement}. If you are
|
|
160
|
+
* starting out, we recommend using the {@link EventEmitter} mixin where possible.
|
|
161
|
+
*
|
|
162
|
+
* @example Create an emitter within the DI.
|
|
163
|
+
* ```ts
|
|
164
|
+
* import {registerEmitter} from '@genesislcap/foundation-events';
|
|
165
|
+
* ...
|
|
166
|
+
* export const MyEventEmitter = registerEmitter<MyEventDetailMap>();
|
|
167
|
+
* ```
|
|
168
|
+
*
|
|
169
|
+
* @example Use that emitter.
|
|
170
|
+
* ```ts
|
|
171
|
+
* export class MyComponent extends FASTElement {
|
|
172
|
+
* @observable someElement!: HTMLElement;
|
|
173
|
+
* @MyEventEmitter emitter: MyEventEmitter;
|
|
174
|
+
* connectedCallback() {
|
|
175
|
+
* this.emitter.emit(this.someElement, 'some-event', {foo: 'bar'});
|
|
176
|
+
* }
|
|
177
|
+
* }
|
|
178
|
+
* ```
|
|
179
|
+
*
|
|
180
|
+
* @typeParam TEventDetailMap - The {@link EventDetailMap}.
|
|
181
|
+
* @public
|
|
182
|
+
*/
|
|
183
|
+
export declare interface EventEmitterDI<TEventDetailMap extends EventDetailMap> {
|
|
184
|
+
emit<K extends keyof TEventDetailMap>(...args: TEventDetailMap[K] extends void ? [origin: EmitOrigin, type: K, options?: EmitOptions] : [origin: EmitOrigin, type: K, detail: TEventDetailMap[K], options?: EmitOptions]): EmitReturn;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* EventEmitterDI DI key.
|
|
189
|
+
* @internal
|
|
190
|
+
*/
|
|
191
|
+
export declare const EventEmitterDI: InterfaceSymbol<EventEmitterDI<EventDetailMap>>;
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* @remarks
|
|
195
|
+
* Using `abstract` here should cover mixing into both concrete and abstract classes.
|
|
196
|
+
* @public
|
|
197
|
+
*/
|
|
198
|
+
export declare type EventEmitterTarget<TBase extends FASTElement> = abstract new (...args: any[]) => TBase;
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* @public
|
|
202
|
+
*/
|
|
203
|
+
export declare const getBaseEmitArgs: (...args: unknown[]) => EmitArgs;
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* @public
|
|
207
|
+
*/
|
|
208
|
+
export declare type KeysMatching<T, V> = {
|
|
209
|
+
[K in keyof T]-?: T[K] extends V ? K : never;
|
|
210
|
+
}[keyof T];
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* @public
|
|
214
|
+
*/
|
|
215
|
+
export declare const logger: Logger;
|
|
216
|
+
|
|
217
|
+
/**
|
|
218
|
+
* Register an emitter with the DI.
|
|
219
|
+
* @typeParam TEventDetailMap - The {@link EventDetailMap}.
|
|
220
|
+
* @public
|
|
221
|
+
*/
|
|
222
|
+
export declare const registerEmitter: <TEventDetailMap extends EventDetailMap>() => InterfaceSymbol<EventEmitterDI<TEventDetailMap>>;
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* @public
|
|
226
|
+
*/
|
|
227
|
+
export declare const targetFirstSelectedValue: ValueGetter;
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
* @public
|
|
231
|
+
*/
|
|
232
|
+
export declare const targetValue: ValueGetter;
|
|
233
|
+
|
|
234
|
+
/**
|
|
235
|
+
* @public
|
|
236
|
+
*/
|
|
237
|
+
export declare interface TypedEmitter<TEventDetailMap extends EventDetailMap> {
|
|
238
|
+
$emit<K extends keyof TEventDetailMap & string>(...args: TEventDetailMap[K] extends void ? [type: K, options?: EmitOptions] : [type: K, detail: TEventDetailMap[K], options?: EmitOptions]): EmitReturn;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
/**
|
|
242
|
+
* @internal
|
|
243
|
+
*/
|
|
244
|
+
declare type ValueGetter = (ctx: ExecutionContext) => any;
|
|
245
|
+
|
|
246
|
+
export { }
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
|
|
2
|
+
|
|
3
|
+
[Home](./index.md) > [@genesislcap/foundation-events](./foundation-events.md) > [ConstructableTypedEventEmitter](./foundation-events.constructabletypedeventemitter.md)
|
|
4
|
+
|
|
5
|
+
## ConstructableTypedEventEmitter type
|
|
6
|
+
|
|
7
|
+
> Warning: This API is now obsolete.
|
|
8
|
+
>
|
|
9
|
+
> - Use [EventEmitterTarget](./foundation-events.eventemittertarget.md) type instead.
|
|
10
|
+
>
|
|
11
|
+
|
|
12
|
+
**Signature:**
|
|
13
|
+
|
|
14
|
+
```typescript
|
|
15
|
+
export type ConstructableTypedEventEmitter = Constructable<FASTElement & HTMLElement>;
|
|
16
|
+
```
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
|
|
2
|
+
|
|
3
|
+
[Home](./index.md) > [@genesislcap/foundation-events](./foundation-events.md) > [createInputEmitter](./foundation-events.createinputemitter.md)
|
|
4
|
+
|
|
5
|
+
## createInputEmitter variable
|
|
6
|
+
|
|
7
|
+
`<input>` template emit helper.
|
|
8
|
+
|
|
9
|
+
**Signature:**
|
|
10
|
+
|
|
11
|
+
```typescript
|
|
12
|
+
createInputEmitter: <TEventDetailMap extends EventDetailMap>() => <K extends KeysMatching<TEventDetailMap, string>>(type: K, options?: EmitOptions) => Binding
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Remarks
|
|
16
|
+
|
|
17
|
+
In some.template.ts file you create the helper upfront by passing in the full event map.
|
|
18
|
+
|
|
19
|
+
## Example
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
```ts
|
|
23
|
+
const inputEmit = createInputEmitter<EventMap>();
|
|
24
|
+
...
|
|
25
|
+
<zero-text-field @change="${inputEmit('some-input-changed')}">
|
|
26
|
+
```
|
|
27
|
+
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
|
|
2
|
+
|
|
3
|
+
[Home](./index.md) > [@genesislcap/foundation-events](./foundation-events.md) > [createSelectEmitter](./foundation-events.createselectemitter.md)
|
|
4
|
+
|
|
5
|
+
## createSelectEmitter variable
|
|
6
|
+
|
|
7
|
+
`<select>` template emit helper.
|
|
8
|
+
|
|
9
|
+
**Signature:**
|
|
10
|
+
|
|
11
|
+
```typescript
|
|
12
|
+
createSelectEmitter: <TEventDetailMap extends EventDetailMap>() => <K extends KeysMatching<TEventDetailMap, string>>(type: K, options?: EmitOptions) => Binding
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Remarks
|
|
16
|
+
|
|
17
|
+
In some.template.ts file you create the helper upfront by passing in the full event map.
|
|
18
|
+
|
|
19
|
+
## Example
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
```ts
|
|
23
|
+
const selectEmit = createSelectEmitter<EventMap>();
|
|
24
|
+
...
|
|
25
|
+
<zero-select @change="${selectEmit('some-select-changed')}">
|
|
26
|
+
```
|
|
27
|
+
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
|
|
2
|
+
|
|
3
|
+
[Home](./index.md) > [@genesislcap/foundation-events](./foundation-events.md) > [customEvent](./foundation-events.customevent.md)
|
|
4
|
+
|
|
5
|
+
## customEvent variable
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
**Signature:**
|
|
9
|
+
|
|
10
|
+
```typescript
|
|
11
|
+
customEvent: <TEventDetail = void>(ctx: ExecutionContext) => CustomEvent<TEventDetail>
|
|
12
|
+
```
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
|
|
2
|
+
|
|
3
|
+
[Home](./index.md) > [@genesislcap/foundation-events](./foundation-events.md) > [CustomEventMap](./foundation-events.customeventmap.md)
|
|
4
|
+
|
|
5
|
+
## CustomEventMap type
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
**Signature:**
|
|
9
|
+
|
|
10
|
+
```typescript
|
|
11
|
+
export type CustomEventMap<TEventDetailMap extends EventDetailMap> = {
|
|
12
|
+
[K in keyof TEventDetailMap]: CustomEvent<TEventDetailMap[K]>;
|
|
13
|
+
};
|
|
14
|
+
```
|
|
15
|
+
**References:** [EventDetailMap](./foundation-events.eventdetailmap.md)
|
|
16
|
+
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
|
|
2
|
+
|
|
3
|
+
[Home](./index.md) > [@genesislcap/foundation-events](./foundation-events.md) > [DefaultEventEmitterDI](./foundation-events.defaulteventemitterdi.md) > [emit](./foundation-events.defaulteventemitterdi.emit.md)
|
|
4
|
+
|
|
5
|
+
## DefaultEventEmitterDI.emit() method
|
|
6
|
+
|
|
7
|
+
**Signature:**
|
|
8
|
+
|
|
9
|
+
```typescript
|
|
10
|
+
emit<K extends keyof TEventDetailMap>(...args: TEventDetailMap[K] extends void ? [origin: EmitOrigin, type: K, options?: EmitOptions] : [origin: EmitOrigin, type: K, detail: TEventDetailMap[K], options?: EmitOptions]): EmitReturn;
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Parameters
|
|
14
|
+
|
|
15
|
+
| Parameter | Type | Description |
|
|
16
|
+
| --- | --- | --- |
|
|
17
|
+
| args | TEventDetailMap\[K\] extends void ? \[origin: [EmitOrigin](./foundation-events.emitorigin.md)<!-- -->, type: K, options?: [EmitOptions](./foundation-events.emitoptions.md)<!-- -->\] : \[origin: [EmitOrigin](./foundation-events.emitorigin.md)<!-- -->, type: K, detail: TEventDetailMap\[K\], options?: [EmitOptions](./foundation-events.emitoptions.md)<!-- -->\] | |
|
|
18
|
+
|
|
19
|
+
**Returns:**
|
|
20
|
+
|
|
21
|
+
[EmitReturn](./foundation-events.emitreturn.md)
|
|
22
|
+
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
|
|
2
|
+
|
|
3
|
+
[Home](./index.md) > [@genesislcap/foundation-events](./foundation-events.md) > [DefaultEventEmitterDI](./foundation-events.defaulteventemitterdi.md)
|
|
4
|
+
|
|
5
|
+
## DefaultEventEmitterDI class
|
|
6
|
+
|
|
7
|
+
Default EventEmitterDI.
|
|
8
|
+
|
|
9
|
+
**Signature:**
|
|
10
|
+
|
|
11
|
+
```typescript
|
|
12
|
+
export declare class DefaultEventEmitterDI<TEventDetailMap extends EventDetailMap> implements EventEmitterDI<TEventDetailMap>
|
|
13
|
+
```
|
|
14
|
+
**Implements:** [EventEmitterDI](./foundation-events.eventemitterdi.md)<!-- --><TEventDetailMap>
|
|
15
|
+
|
|
16
|
+
## Methods
|
|
17
|
+
|
|
18
|
+
| Method | Modifiers | Description |
|
|
19
|
+
| --- | --- | --- |
|
|
20
|
+
| [emit(args)](./foundation-events.defaulteventemitterdi.emit.md) | | |
|
|
21
|
+
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
|
|
2
|
+
|
|
3
|
+
[Home](./index.md) > [@genesislcap/foundation-events](./foundation-events.md) > [EmitArgs](./foundation-events.emitargs.md)
|
|
4
|
+
|
|
5
|
+
## EmitArgs type
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
**Signature:**
|
|
9
|
+
|
|
10
|
+
```typescript
|
|
11
|
+
export type EmitArgs = [string, {} | undefined, EmitOptions | undefined];
|
|
12
|
+
```
|
|
13
|
+
**References:** [EmitOptions](./foundation-events.emitoptions.md)
|
|
14
|
+
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
|
|
2
|
+
|
|
3
|
+
[Home](./index.md) > [@genesislcap/foundation-events](./foundation-events.md) > [EmitOptions](./foundation-events.emitoptions.md)
|
|
4
|
+
|
|
5
|
+
## EmitOptions type
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
**Signature:**
|
|
9
|
+
|
|
10
|
+
```typescript
|
|
11
|
+
export type EmitOptions = Omit<CustomEventInit, 'detail'>;
|
|
12
|
+
```
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
|
|
2
|
+
|
|
3
|
+
[Home](./index.md) > [@genesislcap/foundation-events](./foundation-events.md) > [EmitOrigin](./foundation-events.emitorigin.md)
|
|
4
|
+
|
|
5
|
+
## EmitOrigin type
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
**Signature:**
|
|
9
|
+
|
|
10
|
+
```typescript
|
|
11
|
+
export type EmitOrigin = FASTElement;
|
|
12
|
+
```
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
|
|
2
|
+
|
|
3
|
+
[Home](./index.md) > [@genesislcap/foundation-events](./foundation-events.md) > [EmitReturn](./foundation-events.emitreturn.md)
|
|
4
|
+
|
|
5
|
+
## EmitReturn type
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
**Signature:**
|
|
9
|
+
|
|
10
|
+
```typescript
|
|
11
|
+
export type EmitReturn = boolean | void;
|
|
12
|
+
```
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
|
|
2
|
+
|
|
3
|
+
[Home](./index.md) > [@genesislcap/foundation-events](./foundation-events.md) > [EventDetailMap](./foundation-events.eventdetailmap.md)
|
|
4
|
+
|
|
5
|
+
## EventDetailMap type
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
**Signature:**
|
|
9
|
+
|
|
10
|
+
```typescript
|
|
11
|
+
export type EventDetailMap = Record<string, unknown>;
|
|
12
|
+
```
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
|
|
2
|
+
|
|
3
|
+
[Home](./index.md) > [@genesislcap/foundation-events](./foundation-events.md) > [EventEmitter](./foundation-events.eventemitter.md)
|
|
4
|
+
|
|
5
|
+
## EventEmitter variable
|
|
6
|
+
|
|
7
|
+
EventEmitter mixin.
|
|
8
|
+
|
|
9
|
+
**Signature:**
|
|
10
|
+
|
|
11
|
+
```typescript
|
|
12
|
+
EventEmitter: <TEventDetailMap extends EventDetailMap, TTarget extends FASTElement = FASTElement>(Target: EventEmitterTarget<TTarget>) => abstract new (...args: any[]) => {
|
|
13
|
+
$emit<K extends keyof TEventDetailMap & string>(...args: TEventDetailMap[K] extends void ? [type: K, options?: EmitOptions] : [type: K, detail: TEventDetailMap[K], options?: EmitOptions]): EmitReturn;
|
|
14
|
+
readonly $fastController: import("@microsoft/fast-element").Controller;
|
|
15
|
+
connectedCallback(): void;
|
|
16
|
+
disconnectedCallback(): void;
|
|
17
|
+
attributeChangedCallback(name: string, oldValue: string, newValue: string): void;
|
|
18
|
+
}
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Remarks
|
|
22
|
+
|
|
23
|
+
Strongly types the components `$emit` method, allowing only the mapped events to be emitted.
|
|
24
|
+
|
|
25
|
+
## Example 1
|
|
26
|
+
|
|
27
|
+
Apply mixin to the base
|
|
28
|
+
|
|
29
|
+
\# Import
|
|
30
|
+
|
|
31
|
+
```ts
|
|
32
|
+
import { EventEmitter, SomeSystemLevelEventDetailMap } from '@genesislcap/foundation-events';
|
|
33
|
+
import { StoreEventDetailMap, TradeEntryEventDetailMap } from '../store'; // < custom app level event maps
|
|
34
|
+
```
|
|
35
|
+
\# Create event map
|
|
36
|
+
|
|
37
|
+
```ts
|
|
38
|
+
type EventMap = SomeSystemLevelEventDetailMap & StoreEventDetailMap & TradeEntryEventDetailMap;
|
|
39
|
+
```
|
|
40
|
+
\# Apply Mixin
|
|
41
|
+
|
|
42
|
+
```ts
|
|
43
|
+
export class MyComponent extends EventEmitter<EventMap>(FASTElement) {
|
|
44
|
+
onSomeComponentEvent() {
|
|
45
|
+
this.$emit('some-allowed-event', { foo: 'expected data structure' });
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Example 2
|
|
51
|
+
|
|
52
|
+
Apply mixin to a class in the inheritance chain requires a second generic type param.
|
|
53
|
+
|
|
54
|
+
\# Apply Mixin to MyComponent that extends MyBaseComponent (which might be abstract). Mixin can be applied at different levels. \# Please note there's a current limitation on retaining protected member access with this approach, so apply to base where possible. \# Also, super classes cannot emit typed events via inheritance. Each level must have an explicit map. Devs can use a Union and Pick to create these.
|
|
55
|
+
|
|
56
|
+
```ts
|
|
57
|
+
export class MyComponent extends EventEmitter<EventMap, MyBaseComponent>(MyBaseComponent) {}
|
|
58
|
+
```
|
|
59
|
+
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
|
|
2
|
+
|
|
3
|
+
[Home](./index.md) > [@genesislcap/foundation-events](./foundation-events.md) > [EventEmitterDI](./foundation-events.eventemitterdi.md) > [emit](./foundation-events.eventemitterdi.emit.md)
|
|
4
|
+
|
|
5
|
+
## EventEmitterDI.emit() method
|
|
6
|
+
|
|
7
|
+
**Signature:**
|
|
8
|
+
|
|
9
|
+
```typescript
|
|
10
|
+
emit<K extends keyof TEventDetailMap>(...args: TEventDetailMap[K] extends void ? [origin: EmitOrigin, type: K, options?: EmitOptions] : [origin: EmitOrigin, type: K, detail: TEventDetailMap[K], options?: EmitOptions]): EmitReturn;
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Parameters
|
|
14
|
+
|
|
15
|
+
| Parameter | Type | Description |
|
|
16
|
+
| --- | --- | --- |
|
|
17
|
+
| args | TEventDetailMap\[K\] extends void ? \[origin: [EmitOrigin](./foundation-events.emitorigin.md)<!-- -->, type: K, options?: [EmitOptions](./foundation-events.emitoptions.md)<!-- -->\] : \[origin: [EmitOrigin](./foundation-events.emitorigin.md)<!-- -->, type: K, detail: TEventDetailMap\[K\], options?: [EmitOptions](./foundation-events.emitoptions.md)<!-- -->\] | |
|
|
18
|
+
|
|
19
|
+
**Returns:**
|
|
20
|
+
|
|
21
|
+
[EmitReturn](./foundation-events.emitreturn.md)
|
|
22
|
+
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
|
|
2
|
+
|
|
3
|
+
[Home](./index.md) > [@genesislcap/foundation-events](./foundation-events.md) > [EventEmitterDI](./foundation-events.eventemitterdi.md)
|
|
4
|
+
|
|
5
|
+
## EventEmitterDI interface
|
|
6
|
+
|
|
7
|
+
EventEmitterDI interface.
|
|
8
|
+
|
|
9
|
+
**Signature:**
|
|
10
|
+
|
|
11
|
+
```typescript
|
|
12
|
+
export interface EventEmitterDI<TEventDetailMap extends EventDetailMap>
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Remarks
|
|
16
|
+
|
|
17
|
+
A strongly typed event emitter with events typed to [EventDetailMap](./foundation-events.eventdetailmap.md) pairings. This is closely related to the [EventEmitter](./foundation-events.eventemitter.md) mixin in terms of functionality, however its purpose is different. This allows you to create pre-configured EventEmitters that can be injected anywhere. These can emit typed events from an origin html element, without that element needing to be an actual . If you are starting out, we recommend using the [EventEmitter](./foundation-events.eventemitter.md) mixin where possible.
|
|
18
|
+
|
|
19
|
+
## Example 1
|
|
20
|
+
|
|
21
|
+
Create an emitter within the DI.
|
|
22
|
+
|
|
23
|
+
```ts
|
|
24
|
+
import {registerEmitter} from '@genesislcap/foundation-events';
|
|
25
|
+
...
|
|
26
|
+
export const MyEventEmitter = registerEmitter<MyEventDetailMap>();
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Example 2
|
|
30
|
+
|
|
31
|
+
Use that emitter.
|
|
32
|
+
|
|
33
|
+
```ts
|
|
34
|
+
export class MyComponent extends FASTElement {
|
|
35
|
+
@observable someElement!: HTMLElement;
|
|
36
|
+
@MyEventEmitter emitter: MyEventEmitter;
|
|
37
|
+
connectedCallback() {
|
|
38
|
+
this.emitter.emit(this.someElement, 'some-event', {foo: 'bar'});
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Methods
|
|
44
|
+
|
|
45
|
+
| Method | Description |
|
|
46
|
+
| --- | --- |
|
|
47
|
+
| [emit(args)](./foundation-events.eventemitterdi.emit.md) | |
|
|
48
|
+
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
|
|
2
|
+
|
|
3
|
+
[Home](./index.md) > [@genesislcap/foundation-events](./foundation-events.md) > [EventEmitterTarget](./foundation-events.eventemittertarget.md)
|
|
4
|
+
|
|
5
|
+
## EventEmitterTarget type
|
|
6
|
+
|
|
7
|
+
**Signature:**
|
|
8
|
+
|
|
9
|
+
```typescript
|
|
10
|
+
export type EventEmitterTarget<TBase extends FASTElement> = abstract new (...args: any[]) => TBase;
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Remarks
|
|
14
|
+
|
|
15
|
+
Using `abstract` here should cover mixing into both concrete and abstract classes.
|
|
16
|
+
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
|
|
2
|
+
|
|
3
|
+
[Home](./index.md) > [@genesislcap/foundation-events](./foundation-events.md) > [getBaseEmitArgs](./foundation-events.getbaseemitargs.md)
|
|
4
|
+
|
|
5
|
+
## getBaseEmitArgs variable
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
**Signature:**
|
|
9
|
+
|
|
10
|
+
```typescript
|
|
11
|
+
getBaseEmitArgs: (...args: unknown[]) => EmitArgs
|
|
12
|
+
```
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
|
|
2
|
+
|
|
3
|
+
[Home](./index.md) > [@genesislcap/foundation-events](./foundation-events.md) > [KeysMatching](./foundation-events.keysmatching.md)
|
|
4
|
+
|
|
5
|
+
## KeysMatching type
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
**Signature:**
|
|
9
|
+
|
|
10
|
+
```typescript
|
|
11
|
+
export type KeysMatching<T, V> = {
|
|
12
|
+
[K in keyof T]-?: T[K] extends V ? K : never;
|
|
13
|
+
}[keyof T];
|
|
14
|
+
```
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
|
|
2
|
+
|
|
3
|
+
[Home](./index.md) > [@genesislcap/foundation-events](./foundation-events.md) > [logger](./foundation-events.logger.md)
|
|
4
|
+
|
|
5
|
+
## logger variable
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
**Signature:**
|
|
9
|
+
|
|
10
|
+
```typescript
|
|
11
|
+
logger: import("@genesislcap/foundation-utils").Logger
|
|
12
|
+
```
|