@@ -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]
|
||||
})
|
||||
|
||||
2
src/components/keymap/edit/index.ts
Normal file
2
src/components/keymap/edit/index.ts
Normal file
@@ -0,0 +1,2 @@
|
||||
export { KeymapEditComponent } from './keymap-edit.component';
|
||||
export { KeymapEditGuard } from './keymap-edit-guard.service';
|
||||
30
src/components/keymap/edit/keymap-edit-guard.service.ts
Normal file
30
src/components/keymap/edit/keymap-edit-guard.service.ts
Normal 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));
|
||||
}
|
||||
}
|
||||
@@ -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',
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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;
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user