/// /// Copyright © 2016-2020 The Thingsboard Authors /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. /// You may obtain a copy of the License at /// /// http://www.apache.org/licenses/LICENSE-2.0 /// /// Unless required by applicable law or agreed to in writing, software /// distributed under the License is distributed on an "AS IS" BASIS, /// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. /// See the License for the specific language governing permissions and /// limitations under the License. /// import { Injectable, NgModule } from '@angular/core'; import { ActivatedRouteSnapshot, Resolve, RouterModule, Routes } from '@angular/router'; import { EntitiesTableComponent } from '../../components/entity/entities-table.component'; import { Authority } from '@shared/models/authority.enum'; import { DashboardsTableConfigResolver } from './dashboards-table-config.resolver'; import { DashboardPageComponent } from '@home/pages/dashboard/dashboard-page.component'; import { BreadCrumbConfig, BreadCrumbLabelFunction } from '@shared/components/breadcrumb'; import { Observable } from 'rxjs'; import { Dashboard } from '@app/shared/models/dashboard.models'; import { DashboardService } from '@core/http/dashboard.service'; import { DashboardUtilsService } from '@core/services/dashboard-utils.service'; import { map } from 'rxjs/operators'; @Injectable() export class DashboardResolver implements Resolve { constructor(private dashboardService: DashboardService, private dashboardUtils: DashboardUtilsService) { } resolve(route: ActivatedRouteSnapshot): Observable { const dashboardId = route.params.dashboardId; return this.dashboardService.getDashboard(dashboardId).pipe( map((dashboard) => this.dashboardUtils.validateAndUpdateDashboard(dashboard)) ); } } export const dashboardBreadcumbLabelFunction: BreadCrumbLabelFunction = ((route, translate, component) => component.dashboard.title); const routes: Routes = [ { path: 'dashboards', data: { breadcrumb: { label: 'dashboard.dashboards', icon: 'dashboard' } }, children: [ { path: '', component: EntitiesTableComponent, data: { auth: [Authority.TENANT_ADMIN, Authority.CUSTOMER_USER], title: 'dashboard.dashboards', dashboardsType: 'tenant' }, resolve: { entitiesTableConfig: DashboardsTableConfigResolver } }, { path: ':dashboardId', component: DashboardPageComponent, data: { breadcrumb: { labelFunction: dashboardBreadcumbLabelFunction, icon: 'dashboard' } as BreadCrumbConfig, auth: [Authority.TENANT_ADMIN, Authority.CUSTOMER_USER], title: 'dashboard.dashboard', widgetEditMode: false }, resolve: { dashboard: DashboardResolver } } ] } ]; // @dynamic @NgModule({ imports: [RouterModule.forChild(routes)], exports: [RouterModule], providers: [ DashboardsTableConfigResolver, DashboardResolver ] }) export class DashboardRoutingModule { }