@@ -31,11 +31,13 @@ import { FastMap } from '../util/FastMap';
3131export function groupBy < T , K > ( this : Observable < T > , keySelector : ( value : T ) => K ) : Observable < GroupedObservable < K , T > > ;
3232export function groupBy < T , K > ( this : Observable < T > , keySelector : ( value : T ) => K , elementSelector : void , durationSelector : ( grouped : GroupedObservable < K , T > ) => Observable < any > ) : Observable < GroupedObservable < K , T > > ;
3333export function groupBy < T , K , R > ( this : Observable < T > , keySelector : ( value : T ) => K , elementSelector ?: ( value : T ) => R , durationSelector ?: ( grouped : GroupedObservable < K , R > ) => Observable < any > ) : Observable < GroupedObservable < K , R > > ;
34+ export function groupBy < T , K , R > ( this : Observable < T > , keySelector : ( value : T ) => K , elementSelector ?: ( value : T ) => R , durationSelector ?: ( grouped : GroupedObservable < K , R > ) => Observable < any > , subjectSelector ?: ( ) => Subject < R > ) : Observable < GroupedObservable < K , R > > ;
3435/* tslint:disable:max-line-length */
3536export function groupBy < T , K , R > ( this : Observable < T > , keySelector : ( value : T ) => K ,
3637 elementSelector ?: ( ( value : T ) => R ) | void ,
37- durationSelector ?: ( grouped : GroupedObservable < K , R > ) => Observable < any > ) : Observable < GroupedObservable < K , R > > {
38- return this . lift ( new GroupByOperator ( this , keySelector , elementSelector , durationSelector ) ) ;
38+ durationSelector ?: ( grouped : GroupedObservable < K , R > ) => Observable < any > ,
39+ subjectSelector ?: ( ) => Subject < R > ) : Observable < GroupedObservable < K , R > > {
40+ return this . lift ( new GroupByOperator ( keySelector , elementSelector , durationSelector , subjectSelector ) ) ;
3941}
4042
4143export interface RefCountSubscription {
@@ -46,15 +48,15 @@ export interface RefCountSubscription {
4648}
4749
4850class GroupByOperator < T , K , R > implements Operator < T , GroupedObservable < K , R > > {
49- constructor ( public source : Observable < T > ,
50- private keySelector : ( value : T ) => K ,
51+ constructor ( private keySelector : ( value : T ) => K ,
5152 private elementSelector ?: ( ( value : T ) => R ) | void ,
52- private durationSelector ?: ( grouped : GroupedObservable < K , R > ) => Observable < any > ) {
53+ private durationSelector ?: ( grouped : GroupedObservable < K , R > ) => Observable < any > ,
54+ private subjectSelector ?: ( ) => Subject < R > ) {
5355 }
5456
5557 call ( subscriber : Subscriber < GroupedObservable < K , R > > , source : any ) : any {
5658 return source . _subscribe ( new GroupBySubscriber (
57- subscriber , this . keySelector , this . elementSelector , this . durationSelector
59+ subscriber , this . keySelector , this . elementSelector , this . durationSelector , this . subjectSelector
5860 ) ) ;
5961 }
6062}
@@ -72,7 +74,8 @@ class GroupBySubscriber<T, K, R> extends Subscriber<T> implements RefCountSubscr
7274 constructor ( destination : Subscriber < GroupedObservable < K , R > > ,
7375 private keySelector : ( value : T ) => K ,
7476 private elementSelector ?: ( ( value : T ) => R ) | void ,
75- private durationSelector ?: ( grouped : GroupedObservable < K , R > ) => Observable < any > ) {
77+ private durationSelector ?: ( grouped : GroupedObservable < K , R > ) => Observable < any > ,
78+ private subjectSelector ?: ( ) => Subject < R > ) {
7679 super ( destination ) ;
7780 }
7881
@@ -109,7 +112,8 @@ class GroupBySubscriber<T, K, R> extends Subscriber<T> implements RefCountSubscr
109112 }
110113
111114 if ( ! group ) {
112- groups . set ( key , group = new Subject < R > ( ) ) ;
115+ group = this . subjectSelector ? this . subjectSelector ( ) : new Subject < R > ( ) ;
116+ groups . set ( key , group ) ;
113117 const groupedObservable = new GroupedObservable ( key , group , this ) ;
114118 this . destination . next ( groupedObservable ) ;
115119 if ( this . durationSelector ) {
0 commit comments