UI implementation of Gateway Dashboard sync and migration to new tab
This commit is contained in:
parent
fdbe59c610
commit
edb2cdd5d8
@ -88,6 +88,7 @@ export enum MenuId {
|
|||||||
devices = 'devices',
|
devices = 'devices',
|
||||||
assets = 'assets',
|
assets = 'assets',
|
||||||
entity_views = 'entity_views',
|
entity_views = 'entity_views',
|
||||||
|
gateways = 'gateways',
|
||||||
profiles = 'profiles',
|
profiles = 'profiles',
|
||||||
device_profiles = 'device_profiles',
|
device_profiles = 'device_profiles',
|
||||||
asset_profiles = 'asset_profiles',
|
asset_profiles = 'asset_profiles',
|
||||||
@ -508,6 +509,16 @@ export const menuSectionMap = new Map<MenuId, MenuSection>([
|
|||||||
icon: 'view_quilt'
|
icon: 'view_quilt'
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
[
|
||||||
|
MenuId.gateways,
|
||||||
|
{
|
||||||
|
id: MenuId.gateways,
|
||||||
|
name: 'gateway.gateways',
|
||||||
|
type: 'link',
|
||||||
|
path: '/entities/gateways',
|
||||||
|
icon: 'device_hub'
|
||||||
|
}
|
||||||
|
],
|
||||||
[
|
[
|
||||||
MenuId.profiles,
|
MenuId.profiles,
|
||||||
{
|
{
|
||||||
@ -725,7 +736,8 @@ const defaultUserMenuMap = new Map<Authority, MenuReference[]>([
|
|||||||
pages: [
|
pages: [
|
||||||
{id: MenuId.devices},
|
{id: MenuId.devices},
|
||||||
{id: MenuId.assets},
|
{id: MenuId.assets},
|
||||||
{id: MenuId.entity_views}
|
{id: MenuId.entity_views},
|
||||||
|
{id: MenuId.gateways}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@ -0,0 +1,55 @@
|
|||||||
|
///
|
||||||
|
/// Copyright © 2016-2024 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 { inject, NgModule } from '@angular/core';
|
||||||
|
import { ActivatedRouteSnapshot, ResolveFn, RouterModule, RouterStateSnapshot, Routes } from '@angular/router';
|
||||||
|
import { Authority } from '@shared/models/authority.enum';
|
||||||
|
import { Dashboard } from '@shared/models/dashboard.models';
|
||||||
|
import { ResourcesService } from '@core/services/resources.service';
|
||||||
|
import { Observable } from 'rxjs';
|
||||||
|
import { MenuId } from '@core/services/menu.models';
|
||||||
|
import { GatewaysComponent } from '@home/pages/gateways/gateways.component';
|
||||||
|
|
||||||
|
const gatewaysDashboardJson = '/api/resource/dashboard/system/gateways_dashboard.json';
|
||||||
|
|
||||||
|
export const gatewaysDashboardResolver: ResolveFn<Dashboard> = (
|
||||||
|
route: ActivatedRouteSnapshot,
|
||||||
|
state: RouterStateSnapshot,
|
||||||
|
resourcesService = inject(ResourcesService)
|
||||||
|
): Observable<Dashboard> => resourcesService.loadJsonResource(gatewaysDashboardJson);
|
||||||
|
|
||||||
|
const routes: Routes = [
|
||||||
|
{
|
||||||
|
path: 'entities/gateways',
|
||||||
|
component: GatewaysComponent,
|
||||||
|
data: {
|
||||||
|
auth: [Authority.TENANT_ADMIN],
|
||||||
|
title: 'gateway.gateways',
|
||||||
|
breadcrumb: {
|
||||||
|
menuId: MenuId.gateways
|
||||||
|
}
|
||||||
|
},
|
||||||
|
resolve: {
|
||||||
|
gatewaysDashboard: gatewaysDashboardResolver
|
||||||
|
}
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
@NgModule({
|
||||||
|
imports: [RouterModule.forChild(routes)],
|
||||||
|
exports: [RouterModule]
|
||||||
|
})
|
||||||
|
export class GatewaysRoutingModule { }
|
||||||
@ -14,5 +14,6 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
:host {
|
:host {
|
||||||
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
@ -0,0 +1,37 @@
|
|||||||
|
///
|
||||||
|
/// Copyright © 2016-2024 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 { Component } from '@angular/core';
|
||||||
|
import { Store } from '@ngrx/store';
|
||||||
|
import { AppState } from '@core/core.state';
|
||||||
|
import { PageComponent } from '@shared/components/page.component';
|
||||||
|
import { Dashboard } from '@shared/models/dashboard.models';
|
||||||
|
import { ActivatedRoute } from '@angular/router';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'tb-gateways',
|
||||||
|
templateUrl: './gateways.component.html',
|
||||||
|
styleUrls: ['./gateways.component.scss']
|
||||||
|
})
|
||||||
|
export class GatewaysComponent extends PageComponent {
|
||||||
|
|
||||||
|
gatewaysDashboard: Dashboard = this.route.snapshot.data.gatewaysDashboard;
|
||||||
|
|
||||||
|
constructor(protected store: Store<AppState>,
|
||||||
|
private route: ActivatedRoute) {
|
||||||
|
super(store);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -14,15 +14,24 @@
|
|||||||
/// limitations under the License.
|
/// limitations under the License.
|
||||||
///
|
///
|
||||||
|
|
||||||
import { Pipe, PipeTransform } from '@angular/core';
|
import { NgModule } from '@angular/core';
|
||||||
|
import { CommonModule } from '@angular/common';
|
||||||
|
import { SharedModule } from '@app/shared/shared.module';
|
||||||
|
import { HomeComponentsModule } from '@modules/home/components/home-components.module';
|
||||||
|
import { GatewaysComponent } from '@home/pages/gateways/gateways.component';
|
||||||
|
import { GatewaysRoutingModule } from '@home/pages/gateways/gateways-routing.module';
|
||||||
|
|
||||||
@Pipe({
|
|
||||||
name: 'getRpcTemplateArrayView',
|
@NgModule({
|
||||||
standalone: true,
|
declarations:
|
||||||
|
[
|
||||||
|
GatewaysComponent
|
||||||
|
],
|
||||||
|
imports: [
|
||||||
|
CommonModule,
|
||||||
|
SharedModule,
|
||||||
|
HomeComponentsModule,
|
||||||
|
GatewaysRoutingModule
|
||||||
|
]
|
||||||
})
|
})
|
||||||
export class RpcTemplateArrayViewPipe implements PipeTransform {
|
export class GatewaysModule { }
|
||||||
|
|
||||||
transform(values: {value: string | boolean | number}[]): string {
|
|
||||||
return values.map(({value}) => value.toString()).join(', ');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -44,6 +44,7 @@ import { FeaturesModule } from '@home/pages/features/features.module';
|
|||||||
import { NotificationModule } from '@home/pages/notification/notification.module';
|
import { NotificationModule } from '@home/pages/notification/notification.module';
|
||||||
import { AccountModule } from '@home/pages/account/account.module';
|
import { AccountModule } from '@home/pages/account/account.module';
|
||||||
import { ScadaSymbolModule } from '@home/pages/scada-symbol/scada-symbol.module';
|
import { ScadaSymbolModule } from '@home/pages/scada-symbol/scada-symbol.module';
|
||||||
|
import { GatewaysModule } from '@home/pages/gateways/gateways.module';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
exports: [
|
exports: [
|
||||||
@ -70,6 +71,7 @@ import { ScadaSymbolModule } from '@home/pages/scada-symbol/scada-symbol.module'
|
|||||||
DashboardModule,
|
DashboardModule,
|
||||||
AuditLogModule,
|
AuditLogModule,
|
||||||
ApiUsageModule,
|
ApiUsageModule,
|
||||||
|
GatewaysModule,
|
||||||
OtaUpdateModule,
|
OtaUpdateModule,
|
||||||
UserModule,
|
UserModule,
|
||||||
VcModule,
|
VcModule,
|
||||||
|
|||||||
@ -2837,6 +2837,7 @@
|
|||||||
"function": "Function"
|
"function": "Function"
|
||||||
},
|
},
|
||||||
"gateway": {
|
"gateway": {
|
||||||
|
"gateways": "Gateways",
|
||||||
"address": "Address",
|
"address": "Address",
|
||||||
"address-required": "Address required",
|
"address-required": "Address required",
|
||||||
"add-entry": "Add configuration",
|
"add-entry": "Add configuration",
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user