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) {