From 483f3f3231186f8e757690efdea16c524355760b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Farkas=20J=C3=B3zsef?= Date: Sat, 24 Sep 2016 12:30:00 +0200 Subject: [PATCH] Fix memory leak in Keymap add --- .../keymap/add/keymap-add.component.html | 6 +-- .../keymap/add/keymap-add.component.ts | 41 ++++++++++--------- 2 files changed, 24 insertions(+), 23 deletions(-) diff --git a/src/components/keymap/add/keymap-add.component.html b/src/components/keymap/add/keymap-add.component.html index 72b6a8d4..58835af1 100644 --- a/src/components/keymap/add/keymap-add.component.html +++ b/src/components/keymap/add/keymap-add.component.html @@ -10,11 +10,11 @@
- {{ (presets$ | async).length }} / {{ (presetsAll$ | async).length }} keymaps shown + {{ presets.length }} / {{ (presetsAll$ | async).length }} keymaps shown
-
+

{{ keymap.name }}

{{ keymap.description }} @@ -30,6 +30,6 @@

-
+
Sorry, no keyboard found under this search query.
\ No newline at end of file diff --git a/src/components/keymap/add/keymap-add.component.ts b/src/components/keymap/add/keymap-add.component.ts index 13cdd84f..856f7251 100644 --- a/src/components/keymap/add/keymap-add.component.ts +++ b/src/components/keymap/add/keymap-add.component.ts @@ -1,9 +1,10 @@ -import { Component } from '@angular/core'; +import { Component, OnDestroy } from '@angular/core'; import { Store } from '@ngrx/store'; -import 'rxjs/add/operator/publishReplay'; +import 'rxjs/add/operator/combineLatest'; +import { BehaviorSubject } from 'rxjs/BehaviorSubject'; import { Observable } from 'rxjs/Observable'; -import { ConnectableObservable } from 'rxjs/observable/ConnectableObservable'; +import { Subscription } from 'rxjs/Subscription'; import { Keymap } from '../../../config-serializer/config-items/Keymap'; import { AppState } from '../../../store'; @@ -14,30 +15,30 @@ import { KeymapActions } from '../../../store/actions'; template: require('./keymap-add.component.html'), styles: [require('./keymap-add.component.scss')] }) -export class KeymapAddComponent { - private presets$: Observable; +export class KeymapAddComponent implements OnDestroy { + private presets: Keymap[]; private presetsAll$: Observable; + private filterExpression$: BehaviorSubject; + private subscription: Subscription; constructor(private store: Store) { - let presetConnectable: ConnectableObservable = store - .select((appState: AppState) => appState.presetKeymaps) - .publishReplay(); - - this.presets$ = presetConnectable; - presetConnectable.connect(); - this.presetsAll$ = store.select((appState: AppState) => appState.presetKeymaps); + this.filterExpression$ = new BehaviorSubject(''); + + this.subscription = this.presetsAll$.combineLatest( + this.filterExpression$, + (keymaps: Keymap[], filterExpression: string) => { + return keymaps.filter((keymap: Keymap) => keymap.name.toLocaleLowerCase().includes(filterExpression)); + } + ).subscribe(keymaps => this.presets = keymaps); } - filterKeyboards(value: string) { - let presetConnectable: ConnectableObservable = this.presetsAll$ - .map((keymaps: Keymap[]) => keymaps.filter( - (keymap: Keymap) => keymap.name.toLocaleLowerCase().includes(value)) - ) - .publishReplay(); + ngOnDestroy() { + this.subscription.unsubscribe(); + } - this.presets$ = presetConnectable; - presetConnectable.connect(); + filterKeyboards(filterExpression: string) { + this.filterExpression$.next(filterExpression); } addKeymap(keymap: Keymap) {