@@ -68,6 +68,9 @@ import { KeymapEffects, MacroEffects } from './store/effects';
|
|||||||
import { keymapReducer, macroReducer, presetReducer } from './store/reducers';
|
import { keymapReducer, macroReducer, presetReducer } from './store/reducers';
|
||||||
import { DataStorage } from './store/storage';
|
import { DataStorage } from './store/storage';
|
||||||
|
|
||||||
|
import { KeymapEditGuard } from './components/keymap/edit';
|
||||||
|
import { MacroNotFoundGuard } from './components/macro/not-found';
|
||||||
|
|
||||||
// Create DataStorage dependency injection
|
// Create DataStorage dependency injection
|
||||||
const storageProvider = ReflectiveInjector.resolve([DataStorage]);
|
const storageProvider = ReflectiveInjector.resolve([DataStorage]);
|
||||||
const storageInjector = ReflectiveInjector.fromResolvedProviders(storageProvider);
|
const storageInjector = ReflectiveInjector.fromResolvedProviders(storageProvider);
|
||||||
@@ -149,7 +152,9 @@ const storeConfig = {
|
|||||||
],
|
],
|
||||||
providers: [
|
providers: [
|
||||||
MapperService,
|
MapperService,
|
||||||
appRoutingProviders
|
appRoutingProviders,
|
||||||
|
KeymapEditGuard,
|
||||||
|
MacroNotFoundGuard
|
||||||
],
|
],
|
||||||
bootstrap: [MainAppComponent]
|
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 { Routes } from '@angular/router';
|
||||||
|
|
||||||
import { KeymapAddComponent } from './add/keymap-add.component';
|
import { KeymapAddComponent } from './add/keymap-add.component';
|
||||||
import { KeymapEditComponent } from './edit/keymap-edit.component';
|
import { KeymapEditComponent, KeymapEditGuard } from './edit';
|
||||||
|
|
||||||
export const keymapRoutes: Routes = [
|
export const keymapRoutes: Routes = [
|
||||||
{
|
{
|
||||||
@@ -11,7 +11,8 @@ export const keymapRoutes: Routes = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: 'keymap',
|
path: 'keymap',
|
||||||
component: KeymapEditComponent
|
component: KeymapEditComponent,
|
||||||
|
canActivate: [KeymapEditGuard]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: 'keymap/add',
|
path: 'keymap/add',
|
||||||
|
|||||||
@@ -1,12 +1,13 @@
|
|||||||
import { Routes } from '@angular/router';
|
import { Routes } from '@angular/router';
|
||||||
|
|
||||||
import { MacroEditComponent } from './edit/macro-edit.component';
|
import { MacroEditComponent } from './edit/macro-edit.component';
|
||||||
import { MacroNotFoundComponent } from './not-found';
|
import { MacroNotFoundComponent, MacroNotFoundGuard } from './not-found';
|
||||||
|
|
||||||
export const macroRoutes: Routes = [
|
export const macroRoutes: Routes = [
|
||||||
{
|
{
|
||||||
path: 'macro',
|
path: 'macro',
|
||||||
component: MacroNotFoundComponent
|
component: MacroNotFoundComponent,
|
||||||
|
canActivate: [MacroNotFoundGuard]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: 'macro/:id',
|
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