import { ServicesComponent } from './ceph/cluster/services/services.component';
import { TelemetryComponent } from './ceph/cluster/telemetry/telemetry.component';
import { DashboardComponent } from './ceph/dashboard/dashboard/dashboard.component';
+import { NewDashboardComponent } from './ceph/new-dashboard/dashboard/dashboard.component';
import { NfsFormComponent } from './ceph/nfs/nfs-form/nfs-form.component';
import { NfsListComponent } from './ceph/nfs/nfs-list/nfs-list.component';
import { PerformanceCounterComponent } from './ceph/performance-counter/performance-counter/performance-counter.component';
canActivateChild: [AuthGuardService, ChangePasswordGuardService],
children: [
{ path: 'dashboard', component: DashboardComponent },
+ { path: 'dashboard_3', component: NewDashboardComponent },
{ path: 'error', component: ErrorComponent },
// Cluster
import { CephfsModule } from './cephfs/cephfs.module';
import { ClusterModule } from './cluster/cluster.module';
import { DashboardModule } from './dashboard/dashboard.module';
+import { NewDashboardModule } from './new-dashboard/dashboard.module';
import { NfsModule } from './nfs/nfs.module';
import { PerformanceCounterModule } from './performance-counter/performance-counter.module';
CommonModule,
ClusterModule,
DashboardModule,
+ NewDashboardModule,
PerformanceCounterModule,
CephfsModule,
NfsModule,
--- /dev/null
+<div class="card shadow-sm"
+ [ngClass]="cardClass">
+ <div class="card-body align-items-center justify-content-center">
+ <h4 class="card-title m-4">
+ <a *ngIf="link; else noLinkTitle"
+ [routerLink]="link">{{ cardTitle }}</a>
+
+ <ng-template #noLinkTitle>
+ {{ cardTitle }}
+ </ng-template>
+ </h4>
+
+ <div class="card-text text-center"
+ [ngClass]="contentClass">
+ <ng-content></ng-content>
+ </div>
+ </div>
+</div>
--- /dev/null
+@use './src/styles/vendor/variables' as vv;
+@use './src/styles/defaults/mixins';
+
+$card-font-min-width: 320px;
+$card-font-max-width: 2048px;
+$card-font-min-size: 12px;
+$card-font-max-size: 21px;
+
+.card {
+ @include mixins.fluid-font-size(
+ $card-font-min-width,
+ $card-font-max-width,
+ $card-font-min-size,
+ $card-font-max-size
+ );
+ border: 0.5px solid vv.$gray-300;
+ border-radius: 3px;
+ height: 100%;
+
+ .card-body {
+ padding-top: 40px !important;
+
+ .card-title {
+ left: -0.6rem;
+ position: absolute;
+ top: -0.3rem;
+ }
+ }
+}
+
+.no-center {
+ left: unset;
+ position: unset;
+ top: unset;
+ transform: unset;
+}
+
+.content-highlight {
+ font-weight: bold;
+}
--- /dev/null
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { RouterTestingModule } from '@angular/router/testing';
+
+import { configureTestBed } from '~/testing/unit-test-helper';
+import { CardComponent } from './card.component';
+
+describe('CardComponent', () => {
+ let component: CardComponent;
+ let fixture: ComponentFixture<CardComponent>;
+
+ configureTestBed({
+ imports: [RouterTestingModule],
+ declarations: [CardComponent]
+ });
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(CardComponent);
+ component = fixture.componentInstance;
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
--- /dev/null
+import { Component, Input } from '@angular/core';
+
+@Component({
+ selector: 'cd-card',
+ templateUrl: './card.component.html',
+ styleUrls: ['./card.component.scss']
+})
+export class CardComponent {
+ @Input()
+ cardTitle: string;
+ @Input()
+ link: string;
+ @Input()
+ cardClass = '';
+ @Input()
+ contentClass: string;
+}
--- /dev/null
+import { CommonModule } from '@angular/common';
+import { NgModule } from '@angular/core';
+import { FormsModule, ReactiveFormsModule } from '@angular/forms';
+import { RouterModule } from '@angular/router';
+
+import { NgbNavModule, NgbPopoverModule } from '@ng-bootstrap/ng-bootstrap';
+import { ChartsModule } from 'ng2-charts';
+
+import { SharedModule } from '~/app/shared/shared.module';
+import { CephSharedModule } from '../shared/ceph-shared.module';
+import { CardComponent } from './card/card.component';
+import { NewDashboardComponent } from './dashboard/dashboard.component';
+
+@NgModule({
+ imports: [
+ CephSharedModule,
+ CommonModule,
+ NgbNavModule,
+ SharedModule,
+ ChartsModule,
+ RouterModule,
+ NgbPopoverModule,
+ FormsModule,
+ ReactiveFormsModule
+ ],
+
+ declarations: [NewDashboardComponent, CardComponent]
+})
+export class NewDashboardModule {}
--- /dev/null
+<div class="container-fluid">
+ <div class="row mx-0">
+ <cd-card cardTitle="Details"
+ i18n-cardTitle
+ class="col-sm-3 px-3">
+ Text
+ </cd-card>
+
+ <cd-card cardTitle="Status"
+ i18n-cardTitle
+ class="col-sm-6 px-3">
+ Text
+ </cd-card>
+
+ <cd-card cardTitle="Capacity"
+ i18n-cardTitle
+ class="col-sm-3 px-3">
+ Text
+ </cd-card>
+ </div>
+
+ <div class="row mx-0">
+ <cd-card cardTitle="Inventory"
+ i18n-cardTitle
+ class="col-sm-3 px-3">
+ Text
+ </cd-card>
+
+ <cd-card cardTitle="Capacity utilization"
+ i18n-cardTitle
+ class="col-sm-6 px-3">
+ Text
+ </cd-card>
+
+ <cd-card cardTitle="Events"
+ i18n-cardTitle
+ class="col-sm-3 px-3">
+ Text
+ </cd-card>
+ </div>
+</div>
--- /dev/null
+div {
+ padding-top: 20px;
+}
--- /dev/null
+import { Component } from '@angular/core';
+
+@Component({
+ selector: 'cd-new-dashboard',
+ templateUrl: './dashboard.component.html',
+ styleUrls: ['./dashboard.component.scss']
+})
+export class NewDashboardComponent {}
}
isDashboardPage() {
- return this.router.url === '/dashboard';
+ return this.router.url === '/dashboard' || this.router.url === '/dashboard_3';
}
}