diff --git a/npm/ng-packs/packages/core/src/lib/components/dynamic-layout.component.ts b/npm/ng-packs/packages/core/src/lib/components/dynamic-layout.component.ts
index 49a0868967..2548cfece6 100644
--- a/npm/ng-packs/packages/core/src/lib/components/dynamic-layout.component.ts
+++ b/npm/ng-packs/packages/core/src/lib/components/dynamic-layout.component.ts
@@ -1,9 +1,10 @@
-import { Component, Injector, OnDestroy, Type, Optional, SkipSelf } from '@angular/core';
+import { Component, Injector, OnDestroy, Optional, SkipSelf, Type } from '@angular/core';
import { ActivatedRoute, NavigationEnd, Router } from '@angular/router';
import { Store } from '@ngxs/store';
import { eLayoutType } from '../enums/common';
import { ABP } from '../models';
import { ReplaceableComponents } from '../models/replaceable-components';
+import { LocalizationService } from '../services/localization.service';
import { RoutesService } from '../services/routes.service';
import { ReplaceableComponentsState } from '../states/replaceable-components.state';
import { findRoute, getRoutePath } from '../utils/route-utils';
@@ -16,15 +17,18 @@ import { TreeNode } from '../utils/tree-utils';
`,
})
export class DynamicLayoutComponent implements OnDestroy {
layout: Type;
+ isLayoutVisible = true;
+
constructor(
injector: Injector,
+ private localizationService: LocalizationService,
private store: Store,
@Optional() @SkipSelf() dynamicLayoutComponent: DynamicLayoutComponent,
) {
@@ -61,6 +65,15 @@ export class DynamicLayoutComponent implements OnDestroy {
this.layout = layouts[expectedLayout].component;
}
});
+
+ this.listenToLanguageChange();
+ }
+
+ private listenToLanguageChange() {
+ this.localizationService.languageChange.pipe(takeUntilDestroy(this)).subscribe(() => {
+ this.isLayoutVisible = false;
+ setTimeout(() => (this.isLayoutVisible = true), 0);
+ });
}
private getComponent(key: string): ReplaceableComponents.ReplaceableComponent {
diff --git a/npm/ng-packs/packages/core/src/lib/guards/permission.guard.ts b/npm/ng-packs/packages/core/src/lib/guards/permission.guard.ts
index c4b70d0b7b..6ba6bd18b5 100644
--- a/npm/ng-packs/packages/core/src/lib/guards/permission.guard.ts
+++ b/npm/ng-packs/packages/core/src/lib/guards/permission.guard.ts
@@ -1,34 +1,33 @@
import { Injectable } from '@angular/core';
-import { ActivatedRouteSnapshot, CanActivate, RouterStateSnapshot } from '@angular/router';
+import { ActivatedRouteSnapshot, CanActivate, RouterStateSnapshot, Router } from '@angular/router';
import { Store } from '@ngxs/store';
import { Observable, of } from 'rxjs';
import { tap } from 'rxjs/operators';
import snq from 'snq';
-import { RestOccurError } from '../actions';
-import { ConfigState } from '../states';
+import { RestOccurError } from '../actions/rest.actions';
+import { ConfigState } from '../states/config.state';
+import { RoutesService } from '../services/routes.service';
+import { findRoute, getRoutePath } from '../utils/route-utils';
@Injectable({
providedIn: 'root',
})
export class PermissionGuard implements CanActivate {
- constructor(private store: Store) {}
+ constructor(private router: Router, private routes: RoutesService, private store: Store) {}
- canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable {
- let resource =
- snq(() => route.data.routes.requiredPolicy) || snq(() => route.data.requiredPolicy as string);
- if (!resource) {
- resource = snq(
- () =>
- route.routeConfig.children.find(child => state.url.indexOf(child.path) > -1).data
- .requiredPolicy,
- );
+ canActivate(
+ route: ActivatedRouteSnapshot,
+ state: RouterStateSnapshot,
+ ): Observable | boolean {
+ let { requiredPolicy } = route.data || {};
- if (!resource) {
- return of(true);
- }
+ if (!requiredPolicy) {
+ requiredPolicy = findRoute(this.routes, getRoutePath(this.router, state.url))?.requiredPolicy;
+
+ if (!requiredPolicy) return true;
}
- return this.store.select(ConfigState.getGrantedPolicy(resource)).pipe(
+ return this.store.select(ConfigState.getGrantedPolicy(requiredPolicy)).pipe(
tap(access => {
if (!access) {
this.store.dispatch(new RestOccurError({ status: 403 }));
diff --git a/npm/ng-packs/packages/core/src/lib/utils/route-utils.ts b/npm/ng-packs/packages/core/src/lib/utils/route-utils.ts
index 57ffdd5285..a749090695 100644
--- a/npm/ng-packs/packages/core/src/lib/utils/route-utils.ts
+++ b/npm/ng-packs/packages/core/src/lib/utils/route-utils.ts
@@ -17,9 +17,9 @@ export function findRoute(routes: RoutesService, path: string): TreeNode path).join('/');
}