Skip to content

Instantly share code, notes, and snippets.

View LironHazan's full-sized avatar
🎸
666 -> 🦀

LironH LironHazan

🎸
666 -> 🦀
View GitHub Profile
@LironHazan
LironHazan / preventNull.ts
Created October 16, 2020 02:56
Gal Falah's example for rxjs post
notNullish<T>(input: null | undefined | T): boolean {
return input !== null && input !== undefined;
}
registerToggleCall() {
Interactor.onTogglingSomthing()
.pipe(distinctUntilChanged(), filter(this.notNullish))
.subscribe((_state: boolean) => {
this.state = _state;
});
@LironHazan
LironHazan / freeTextSerach.ts
Created October 16, 2020 02:48
Lior Levy's example for rxjs post
private searchQuery$ = new BehaviorSubject('');
result$: Observable<string>;
ngOnInit(): void {
this.result$ = this.searchQuery$.pipe(
debounceTime(300), // will drop some values if they occur too frequently
switchMap(() =>this.service.fetchSomething(
this.searchQuery$.getValue()) // will switch to the new inner observable when source emits and cancel the previus one
)
);
@LironHazan
LironHazan / preventDDOS.ts
Created October 13, 2020 17:04
Doron Sever's snippet for rxjs post
private myStream = new Subject();
private myStream$ = this.myStream.asObservable();
ngOnInit() {
// Will only fire after 100 ms.
this.myStream$
.pipe(auditTime(100))
.subscribe(e => console.log('will only fire after 100 miliseconds');
@LironHazan
LironHazan / getHttpDistinctResponse.ts
Created October 12, 2020 18:59
Yoni Argivi's snippet for rxjs post
public getHttpDistinctResponse(httpRequest$: Observable<any>): Observable<any> {
let cachedResponseStr = null;
return httpRequest$.pipe(
filter((response) => {
const currentResponseStr = JSON.stringify(response);
const areEquals = cachedResponseStr === currentResponseStr;
if (!areEquals) {
cachedResponseStr = currentResponseStr;
}
return !areEquals;
@LironHazan
LironHazan / handleError.ts
Created October 12, 2020 07:31
Assaf Azulai's example for rxjs post
interactionSubject = new Subject<void>();
ngOnInit() {
this.interactionSubject.asObservable().pipe(
switchMap((data) => {
this.server.fetchData(data).pipe(
catchError((err) => {
// handle error
})
)
})
@LironHazan
LironHazan / pollingOnResolved.ts
Created October 11, 2020 08:46
Ofir Fridman's example for blog post
export function pollingOnResolved(httpRequest$: Observable<any>, delayMs = 0): Observable<any> {
const polling$ = new BehaviorSubject({});
const rePolling$ =
of('').pipe(
delay(delayMs),
tap(() => polling$.next({})),
skip(1)
);
const httpPolling$ = concat(httpRequest$, rePolling$);
return polling$.pipe(switchMap(() => httpPolling$));
@LironHazan
LironHazan / expose-obs.ts
Created October 10, 2020 07:19
I promised I'll switch to new Observable - for our rxjs blog post
private async getTheBand(name: string): Promise<Artist> {
const artist = await import('../../../wasm/pkg/rust_wasm_part');
return artist.query_band(name);
}
getTheBand$(name): Observable<Artist> {
return defer(() => this.getTheBand(name));
}
@LironHazan
LironHazan / registerTransitionEnd.ts
Last active January 26, 2022 07:50
Amir Baraks's registerTransitionEnd used in an Angular directive for rxjs blog post
registerTransitionEnd<T extends {propertyName}>(el: FromEventTarget<T>, propName: string) {
// Returns an Observable from DOM event
fromEvent(el, 'transitionend')
.pipe(
filter(({ propertyName }: T) => propertyName === propName) // Will only emit value for the wanted css prop name e.g. height
)
.subscribe((_) => {
this.transitionEnd.emit();
});
}
@LironHazan
LironHazan / close-that-stream-if-no-need.ts
Created October 10, 2020 06:14
Irena's stop fetching recipe - for rxjs blog post
private unsubscribeDataFetch: Subject<void> = new Subject<void>();
// polling data till we get what we need and stop
fetchData() {
this.dataService
.pipe(takeUntil(this.unsubscribeDataFetch))
.subscribe((data) => actOnData(data));
}
actOnData(data) {
@LironHazan
LironHazan / oz_gonen_store.ts
Created October 8, 2020 10:08
rxjs_snippets_for_blog_post
import {BehaviorSubject, Observable} from 'rxjs';
export class StoreService<T> {
private readonly state$: BehaviorSubject<T>;
protected get state(): T {
return this.state$.getValue();
}
constructor(initialState: T) {
this.state$ = new BehaviorSubject<T>(initialState);
}
protected getState(): Observable<T> {