File tree Expand file tree Collapse file tree 3 files changed +43
-0
lines changed Expand file tree Collapse file tree 3 files changed +43
-0
lines changed Original file line number Diff line number Diff line change
1
+ import { createListener } from "./"
2
+
3
+ describe ( "createListener" , ( ) => {
4
+ it ( 'receives an "event creator" and it returns a tuple with an observable and its corresponding event-emitter' , ( ) => {
5
+ const [ fooBar$ , onFooBar ] = createListener ( ( foo : number , bar : string ) => ( {
6
+ foo,
7
+ bar,
8
+ } ) )
9
+ let receivedValue
10
+ fooBar$ . subscribe ( ( val ) => {
11
+ receivedValue = val
12
+ } )
13
+ expect ( receivedValue ) . toBe ( undefined )
14
+ onFooBar ( 0 , "1" )
15
+ expect ( receivedValue ) . toEqual ( { foo : 0 , bar : "1" } )
16
+ } )
17
+ it ( 'returns a tuple with a void observable and its corresponding event-emitter when no "event creator" is provided' , ( ) => {
18
+ const [ clicks$ , onClick ] = createListener ( )
19
+ let count = 0
20
+ clicks$ . subscribe ( ( ) => {
21
+ count ++
22
+ } )
23
+ expect ( count ) . toBe ( 0 )
24
+ onClick ( )
25
+ expect ( count ) . toBe ( 1 )
26
+ } )
27
+ } )
Original file line number Diff line number Diff line change
1
+ import { Observable , Subject } from "rxjs"
2
+
3
+ const defaultMapper : any = ( ) => { }
4
+
5
+ export function createListener < A extends unknown [ ] , T > (
6
+ mapper : ( ...args : A ) => T ,
7
+ ) : [ Observable < T > , ( ...args : A ) => void ]
8
+ export function createListener ( ) : [ Observable < void > , ( ) => void ]
9
+
10
+ export function createListener < A extends unknown [ ] , T > (
11
+ mapper : ( ...args : A ) => T = defaultMapper ,
12
+ ) : [ Observable < T > , ( ...args : A ) => void ] {
13
+ const subject = new Subject < T > ( )
14
+ return [ subject . asObservable ( ) , ( ...args : A ) => subject . next ( mapper ( ...args ) ) ]
15
+ }
Original file line number Diff line number Diff line change 1
1
export { collectValues } from "./collectValues"
2
2
export { collect } from "./collect"
3
+ export { createListener } from "./createListener"
3
4
export { mergeWithKey } from "./mergeWithKey"
4
5
export { split } from "./split"
5
6
export { suspend } from "./suspend"
You can’t perform that action at this time.
0 commit comments