From 7fe78bd14f8935f9f1ca42a1b54b23b6c3822025 Mon Sep 17 00:00:00 2001 From: Hardik Pithva Date: Sat, 27 Jan 2018 18:22:15 +0530 Subject: [PATCH 1/5] docs(operators): add documentation for windowToggle --- .../transformation/windowToggle.ts | 79 ++++++++++++++++++- 1 file changed, 77 insertions(+), 2 deletions(-) diff --git a/src/operator-docs/transformation/windowToggle.ts b/src/operator-docs/transformation/windowToggle.ts index a65058c0..8ee072ce 100644 --- a/src/operator-docs/transformation/windowToggle.ts +++ b/src/operator-docs/transformation/windowToggle.ts @@ -1,6 +1,81 @@ import { OperatorDoc } from '../operator.model'; export const windowToggle: OperatorDoc = { - 'name': 'windowToggle', - 'operatorType': 'transformation' + name: 'windowToggle', + operatorType: 'transformation', + signature: + 'public windowToggle(openings: Observable, closingSelector: function(value: O): Observable): Observable>', + marbleUrl: 'http://reactivex.io/rxjs/img/windowToggle.png', + parameters: [ + { + name: 'openings', + type: 'Observable', + attribute: '', + description: 'An observable of notifications to start new windows.' + }, + { + name: 'closingSelector', + type: 'function(value: O): Observable', + attribute: 'optional', + description: ` + A function that takes the value emitted by the 'openings' observable + and returns an Observable, which, when it emits (either 'next' or + 'complete'), signals that the associated window should complete. + ` + } + ], + shortDescription: { + description: ` + Branch out the source Observable values as a nested Observable starting + from an emission from openings and + ending when the output of closingSelector emits. + `, + extras: [ + { + type: 'Tip', + text: ` + It's like bufferToggle, + but emits a nested Observable instead of an array. + ` + } + ] + }, + walkthrough: { + description: ` +

+ Returns an Observable that emits windows of items it collects from the source Observable. + The output Observable emits windows that contain those items emitted by the source Observable + between the time when the openings Observable emits an + item and when the Observable returned by closingSelector + emits an item. +

+ ` + }, + examples: [ + { + name: 'Every other second, emit the click events from the next 500ms', + code: ` + import { mergeAll, windowToggle } from 'rxjs/operators'; + + const clicks = Rx.Observable.fromEvent(document, 'click'); + const openings = Rx.Observable.interval(1000); + const result = clicks.windowToggle(openings, i => + i % 2 ? Rx.Observable.interval(500) : Rx.Observable.empty() + ).mergeAll(); + result.subscribe(x => console.log(x)); + `, + externalLink: { + platform: 'JSBin', + url: 'http://jsbin.com/yugaha/embed?js,console,output' + } + } + ], + relatedOperators: [ + 'window', + 'windowTime', + 'windowCount', + 'windowWhen', + 'bufferToggle' + ], + additionalResources: [] }; From fe441e3e11e4d208e8defd83dd705f62ff4b2249 Mon Sep 17 00:00:00 2001 From: Hardik Pithva Date: Mon, 5 Feb 2018 21:05:54 +0530 Subject: [PATCH 2/5] fix(operators): add example --- .../transformation/windowToggle.ts | 29 ++++++++++++++++--- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/src/operator-docs/transformation/windowToggle.ts b/src/operator-docs/transformation/windowToggle.ts index 8ee072ce..dc2bd172 100644 --- a/src/operator-docs/transformation/windowToggle.ts +++ b/src/operator-docs/transformation/windowToggle.ts @@ -55,18 +55,39 @@ export const windowToggle: OperatorDoc = { { name: 'Every other second, emit the click events from the next 500ms', code: ` + import { fromEvent } from 'rxjs/observable/fromEvent'; + import { empty } from 'rxjs/observable/empty'; + import { interval } from 'rxjs/observable/interval'; import { mergeAll, windowToggle } from 'rxjs/operators'; - const clicks = Rx.Observable.fromEvent(document, 'click'); - const openings = Rx.Observable.interval(1000); + const clicks = fromEvent(document, 'click'); + const openings = interval(1000); const result = clicks.windowToggle(openings, i => - i % 2 ? Rx.Observable.interval(500) : Rx.Observable.empty() + i % 2 ? interval(500) : empty() ).mergeAll(); result.subscribe(x => console.log(x)); + + /* + Example console output + [object MouseEvent] { + altKey: false, + AT_TARGET: 2, + bubbles: true, + BUBBLING_PHASE: 3, + button: 0, + buttons: 0, + cancelable: true, + cancelBubble: false, + CAPTURING_PHASE: 1, + clientX: 80, + clientY: 70, + .... //Entire object properties + } + */ `, externalLink: { platform: 'JSBin', - url: 'http://jsbin.com/yugaha/embed?js,console,output' + url: 'http://jsbin.com/pemosar/embed?js,console,output' } } ], From ca7a55f927c88b4f3726b243c2e621265084d860 Mon Sep 17 00:00:00 2001 From: Hardik Pithva Date: Mon, 5 Feb 2018 21:07:00 +0530 Subject: [PATCH 3/5] fix(operators): remove generics --- src/operator-docs/transformation/windowToggle.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/operator-docs/transformation/windowToggle.ts b/src/operator-docs/transformation/windowToggle.ts index dc2bd172..635f2016 100644 --- a/src/operator-docs/transformation/windowToggle.ts +++ b/src/operator-docs/transformation/windowToggle.ts @@ -4,7 +4,7 @@ export const windowToggle: OperatorDoc = { name: 'windowToggle', operatorType: 'transformation', signature: - 'public windowToggle(openings: Observable, closingSelector: function(value: O): Observable): Observable>', + 'public windowToggle(openings: Observable, closingSelector: function(value: O): Observable): Observable', marbleUrl: 'http://reactivex.io/rxjs/img/windowToggle.png', parameters: [ { From 16afa162008729c2c7caa66ca1a91f35779fa4fc Mon Sep 17 00:00:00 2001 From: Hardik Pithva Date: Tue, 6 Feb 2018 12:33:32 +0530 Subject: [PATCH 4/5] fix(operators): clean it by wrapping in pipe --- src/operator-docs/transformation/windowToggle.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/operator-docs/transformation/windowToggle.ts b/src/operator-docs/transformation/windowToggle.ts index 635f2016..b1b1b112 100644 --- a/src/operator-docs/transformation/windowToggle.ts +++ b/src/operator-docs/transformation/windowToggle.ts @@ -62,9 +62,10 @@ export const windowToggle: OperatorDoc = { const clicks = fromEvent(document, 'click'); const openings = interval(1000); - const result = clicks.windowToggle(openings, i => - i % 2 ? interval(500) : empty() - ).mergeAll(); + const result = clicks.pipe( + windowToggle(openings, i => i % 2 ? interval(500) : empty()), + mergeAll() + ) result.subscribe(x => console.log(x)); /* From a7bd61394377c70ecc2bab0e306c8b20c58d1f83 Mon Sep 17 00:00:00 2001 From: Hardik Pithva Date: Tue, 6 Feb 2018 12:35:52 +0530 Subject: [PATCH 5/5] fix(operators): remove generic from parameter --- src/operator-docs/transformation/windowToggle.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/operator-docs/transformation/windowToggle.ts b/src/operator-docs/transformation/windowToggle.ts index b1b1b112..6762d6fb 100644 --- a/src/operator-docs/transformation/windowToggle.ts +++ b/src/operator-docs/transformation/windowToggle.ts @@ -9,7 +9,7 @@ export const windowToggle: OperatorDoc = { parameters: [ { name: 'openings', - type: 'Observable', + type: 'Observable', attribute: '', description: 'An observable of notifications to start new windows.' },