Keymap and macro redirection handling

Closes #174
This commit is contained in:
Farkas József
2016-12-15 23:17:09 +01:00
parent 6cab3b982a
commit f4dd809a93
7 changed files with 76 additions and 6 deletions

View File

@@ -68,6 +68,9 @@ import { KeymapEffects, MacroEffects } from './store/effects';
import { keymapReducer, macroReducer, presetReducer } from './store/reducers';
import { DataStorage } from './store/storage';
import { KeymapEditGuard } from './components/keymap/edit';
import { MacroNotFoundGuard } from './components/macro/not-found';
// Create DataStorage dependency injection
const storageProvider = ReflectiveInjector.resolve([DataStorage]);
const storageInjector = ReflectiveInjector.fromResolvedProviders(storageProvider);
@@ -149,7 +152,9 @@ const storeConfig = {
],
providers: [
MapperService,
appRoutingProviders
appRoutingProviders,
KeymapEditGuard,
MacroNotFoundGuard
],
bootstrap: [MainAppComponent]
})

View File

@@ -0,0 +1,2 @@
export { KeymapEditComponent } from './keymap-edit.component';
export { KeymapEditGuard } from './keymap-edit-guard.service';

View File

@@ -0,0 +1,30 @@
import { Injectable } from '@angular/core';
import { CanActivate, Router } from '@angular/router';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/of';
import 'rxjs/add/operator/do';
import 'rxjs/add/operator/let';
import 'rxjs/add/operator/switchMap';
import { Store } from '@ngrx/store';
import { AppState } from '../../../store/index';
import { getKeymapEntities } from '../../../store/reducers';
@Injectable()
export class KeymapEditGuard implements CanActivate {
constructor(private store: Store<AppState>, private router: Router) { }
canActivate(): Observable<boolean> {
return this.store
.let(getKeymapEntities())
.do(keymaps => {
const defaultKeymap = keymaps.find(keymap => keymap.isDefault);
this.router.navigate(['/keymap', defaultKeymap.abbreviation]);
})
.switchMap(() => Observable.of(false));
}
}

View File

@@ -1,7 +1,7 @@
import { Routes } from '@angular/router';
import { KeymapAddComponent } from './add/keymap-add.component';
import { KeymapEditComponent } from './edit/keymap-edit.component';
import { KeymapEditComponent, KeymapEditGuard } from './edit';
export const keymapRoutes: Routes = [
{
@@ -11,7 +11,8 @@ export const keymapRoutes: Routes = [
},
{
path: 'keymap',
component: KeymapEditComponent
component: KeymapEditComponent,
canActivate: [KeymapEditGuard]
},
{
path: 'keymap/add',

View File

@@ -1,12 +1,13 @@
import { Routes } from '@angular/router';
import { MacroEditComponent } from './edit/macro-edit.component';
import { MacroNotFoundComponent } from './not-found';
import { MacroNotFoundComponent, MacroNotFoundGuard } from './not-found';
export const macroRoutes: Routes = [
{
path: 'macro',
component: MacroNotFoundComponent
component: MacroNotFoundComponent,
canActivate: [MacroNotFoundGuard]
},
{
path: 'macro/:id',

View File

@@ -1 +1,2 @@
export { MacroNotFoundComponent} from './macro-not-found.component';
export { MacroNotFoundComponent } from './macro-not-found.component';
export { MacroNotFoundGuard } from './macro-not-found-guard.service';

View File

@@ -0,0 +1,30 @@
import { Injectable } from '@angular/core';
import { CanActivate, Router } from '@angular/router';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/let';
import 'rxjs/add/operator/map';
import { Store } from '@ngrx/store';
import { AppState } from '../../../store/index';
import { getMacroEntities } from '../../../store/reducers';
@Injectable()
export class MacroNotFoundGuard implements CanActivate {
constructor(private store: Store<AppState>, private router: Router) { }
canActivate(): Observable<boolean> {
return this.store
.let(getMacroEntities())
.map(macros => {
const hasMacros = macros.length > 0;
if (hasMacros) {
this.router.navigate(['/macro', macros[0].id]);
}
return !hasMacros;
});
}
}