Compare commits
12 Commits
e292587a36
...
standalone
| Author | SHA1 | Date | |
|---|---|---|---|
| eb65b56b78 | |||
| b0415ed972 | |||
| 4b211e425d | |||
| 9459eee606 | |||
| a81c458775 | |||
| ee0eab22f8 | |||
| 9ccb7a14b5 | |||
| 05cc0e985a | |||
| 6dc5ba1a1e | |||
| a6ae8e533e | |||
| 8e0572d35b | |||
| 697d3664aa |
25
pdb-js/src/app/app-routing.module.ts
Normal file
25
pdb-js/src/app/app-routing.module.ts
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
import { NgModule } from "@angular/core";
|
||||||
|
import { RouterModule, Routes } from "@angular/router";
|
||||||
|
import { VisualizationPageComponent } from "./visualization-page/visualization-page.component";
|
||||||
|
import { DashboardPageComponent } from "./dashboard-page/dashboard-page.component";
|
||||||
|
import { DashboardComponent } from "./dashboard-page/dashboard/dashboard.component";
|
||||||
|
|
||||||
|
const routes: Routes = [
|
||||||
|
{ path: "", loadComponent: () => import("./main-page/main-page.component").then(m => m.MainPageComponent) },
|
||||||
|
{ path: "vis", component: VisualizationPageComponent },
|
||||||
|
{ path: "dashboard", component: DashboardPageComponent },
|
||||||
|
{ path: "dashboard/:id", component: DashboardComponent },
|
||||||
|
{ path: "upload", loadComponent: () => import("./upload-page/upload-page.component").then(m => m.UploadPageComponent) },
|
||||||
|
{ path: "grid", loadComponent: () => import("./customizable-grid/customizable-grid.component").then(m => m.CustomizableGridComponent) },
|
||||||
|
{ path: "help", loadComponent: () => import("./help-page/help-page.component").then(m => m.HelpPageComponent) },
|
||||||
|
// { path: '**', component: PageNotFoundComponent }
|
||||||
|
];
|
||||||
|
|
||||||
|
@NgModule({
|
||||||
|
imports: [
|
||||||
|
RouterModule.forRoot(routes, {}),
|
||||||
|
],
|
||||||
|
declarations: [],
|
||||||
|
exports: [RouterModule],
|
||||||
|
})
|
||||||
|
export class AppRoutingModule {}
|
||||||
@@ -5,11 +5,13 @@ import { AppComponent } from './app.component';
|
|||||||
describe('AppComponent', () => {
|
describe('AppComponent', () => {
|
||||||
beforeEach(waitForAsync(() => {
|
beforeEach(waitForAsync(() => {
|
||||||
TestBed.configureTestingModule({
|
TestBed.configureTestingModule({
|
||||||
imports: [
|
imports: [
|
||||||
RouterTestingModule,
|
RouterTestingModule
|
||||||
|
],
|
||||||
|
declarations: [
|
||||||
AppComponent
|
AppComponent
|
||||||
],
|
],
|
||||||
}).compileComponents();
|
}).compileComponents();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
it('should create the app', () => {
|
it('should create the app', () => {
|
||||||
|
|||||||
@@ -1,15 +1,11 @@
|
|||||||
import { Component } from '@angular/core';
|
import { Component } from '@angular/core';
|
||||||
import {DomSanitizer} from '@angular/platform-browser';
|
import {DomSanitizer} from '@angular/platform-browser';
|
||||||
import {MatIconRegistry} from '@angular/material/icon';
|
import {MatIconRegistry} from '@angular/material/icon';
|
||||||
import { MatAnchor } from '@angular/material/button';
|
|
||||||
import { RouterLink, RouterOutlet } from '@angular/router';
|
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-root',
|
selector: 'app-root',
|
||||||
templateUrl: './app.component.html',
|
templateUrl: './app.component.html',
|
||||||
styleUrls: ['./app.component.scss'],
|
styleUrls: ['./app.component.scss']
|
||||||
standalone: true,
|
|
||||||
imports: [MatAnchor, RouterLink, RouterOutlet]
|
|
||||||
})
|
})
|
||||||
export class AppComponent {
|
export class AppComponent {
|
||||||
title = 'pdb';
|
title = 'pdb';
|
||||||
|
|||||||
115
pdb-js/src/app/app.module.ts
Normal file
115
pdb-js/src/app/app.module.ts
Normal file
@@ -0,0 +1,115 @@
|
|||||||
|
import { BrowserModule } from "@angular/platform-browser";
|
||||||
|
import { BrowserAnimationsModule } from "@angular/platform-browser/animations";
|
||||||
|
import { enableProdMode, NgModule } from "@angular/core";
|
||||||
|
import { provideHttpClient, withInterceptorsFromDi } from "@angular/common/http";
|
||||||
|
import { FormsModule, ReactiveFormsModule } from "@angular/forms";
|
||||||
|
|
||||||
|
import { AppRoutingModule } from "./app-routing.module";
|
||||||
|
import { AppComponent } from "./app.component";
|
||||||
|
import { VisualizationPageComponent } from "./visualization-page/visualization-page.component";
|
||||||
|
|
||||||
|
import { DatePickerComponent } from "./components/datepicker/date-picker.component";
|
||||||
|
|
||||||
|
import { MatAutocompleteModule } from "@angular/material/autocomplete";
|
||||||
|
import { MatButtonModule } from "@angular/material/button";
|
||||||
|
import { MatCheckboxModule } from "@angular/material/checkbox";
|
||||||
|
import { MatSelectModule } from "@angular/material/select";
|
||||||
|
import { MatFormFieldModule } from "@angular/material/form-field";
|
||||||
|
import { MatInputModule } from "@angular/material/input";
|
||||||
|
import { MatProgressBarModule } from "@angular/material/progress-bar";
|
||||||
|
import { MatProgressSpinnerModule } from "@angular/material/progress-spinner";
|
||||||
|
import { MatRadioModule } from "@angular/material/radio";
|
||||||
|
import { MatSnackBarModule } from "@angular/material/snack-bar";
|
||||||
|
import { MatTooltipModule } from "@angular/material/tooltip";
|
||||||
|
import { OverlayModule } from "@angular/cdk/overlay";
|
||||||
|
import { YAxisDefinitionComponent } from "./y-axis-definition/y-axis-definition.component";
|
||||||
|
import { QueryAutocompleteComponent } from "./query-autocomplete/query-autocomplete.component";
|
||||||
|
import { PlotDetailsComponent } from "./plot-details/plot-details.component";
|
||||||
|
import { PlotViewComponent } from "./plot-view/plot-view.component";
|
||||||
|
import {
|
||||||
|
GalleryFilterView,
|
||||||
|
GalleryItemView,
|
||||||
|
GalleryViewComponent,
|
||||||
|
} from "./gallery-view/gallery-view.component";
|
||||||
|
import { ImageToggleComponent } from "./image-toggle/image-toggle.component";
|
||||||
|
import { DashboardPageComponent } from "./dashboard-page/dashboard-page.component";
|
||||||
|
import {
|
||||||
|
MAT_DIALOG_DEFAULT_OPTIONS,
|
||||||
|
MatDialogModule,
|
||||||
|
} from "@angular/material/dialog";
|
||||||
|
import { MatTabsModule } from "@angular/material/tabs";
|
||||||
|
import { MatTableModule } from "@angular/material/table";
|
||||||
|
import { MatGridListModule } from "@angular/material/grid-list";
|
||||||
|
import { MatCardModule } from "@angular/material/card";
|
||||||
|
import { MatBadgeModule } from "@angular/material/badge";
|
||||||
|
import { DashboardComponent } from "./dashboard-page/dashboard/dashboard.component";
|
||||||
|
import { TextWidgetComponent } from "./dashboard-page/dashboard/text-widget/text-widget.component";
|
||||||
|
import { AddPlotDialogComponent } from "./dashboard-page/dashboard/add-plot-dialog/add-plot-dialog.component";
|
||||||
|
import { PlotWidgetComponent } from "./dashboard-page/dashboard/plot-widget/plot-widget.component";
|
||||||
|
import { FullScreenPlotDialogComponent } from "./dashboard-page/dashboard/full-screen-plot-dialog/full-screen-plot-dialog.component";
|
||||||
|
|
||||||
|
import { DragDropModule } from "@angular/cdk/drag-drop";
|
||||||
|
import { ConfirmationDialogComponent } from "./confirmation-dialog/confirmation-dialog.component";
|
||||||
|
import { FocusDirective } from "./focus.directive";
|
||||||
|
import { MarkdownModule } from "ngx-markdown";
|
||||||
|
import { MainPageComponent } from "./main-page/main-page.component";
|
||||||
|
import { LimitByComponent } from "./limit-by/limit-by.component";
|
||||||
|
|
||||||
|
@NgModule({ declarations: [
|
||||||
|
AppComponent,
|
||||||
|
VisualizationPageComponent,
|
||||||
|
QueryAutocompleteComponent,
|
||||||
|
PlotDetailsComponent,
|
||||||
|
PlotViewComponent,
|
||||||
|
GalleryViewComponent,
|
||||||
|
GalleryItemView,
|
||||||
|
GalleryFilterView,
|
||||||
|
DashboardPageComponent,
|
||||||
|
DashboardComponent,
|
||||||
|
TextWidgetComponent,
|
||||||
|
AddPlotDialogComponent,
|
||||||
|
PlotWidgetComponent,
|
||||||
|
FullScreenPlotDialogComponent,
|
||||||
|
ConfirmationDialogComponent,
|
||||||
|
FocusDirective,
|
||||||
|
],
|
||||||
|
bootstrap: [AppComponent],
|
||||||
|
imports: [
|
||||||
|
MarkdownModule.forRoot(),
|
||||||
|
BrowserModule,
|
||||||
|
AppRoutingModule,
|
||||||
|
FormsModule,
|
||||||
|
ReactiveFormsModule,
|
||||||
|
DatePickerComponent,
|
||||||
|
DragDropModule,
|
||||||
|
ImageToggleComponent,
|
||||||
|
LimitByComponent,
|
||||||
|
MainPageComponent,
|
||||||
|
MatAutocompleteModule,
|
||||||
|
MatBadgeModule,
|
||||||
|
MatButtonModule,
|
||||||
|
MatCardModule,
|
||||||
|
MatCheckboxModule,
|
||||||
|
MatDialogModule,
|
||||||
|
MatFormFieldModule,
|
||||||
|
MatGridListModule,
|
||||||
|
MatInputModule,
|
||||||
|
MatRadioModule,
|
||||||
|
MatProgressBarModule,
|
||||||
|
MatProgressSpinnerModule,
|
||||||
|
MatSelectModule,
|
||||||
|
MatSnackBarModule,
|
||||||
|
MatTabsModule,
|
||||||
|
MatTableModule,
|
||||||
|
MatTooltipModule,
|
||||||
|
BrowserAnimationsModule,
|
||||||
|
OverlayModule,
|
||||||
|
YAxisDefinitionComponent
|
||||||
|
],
|
||||||
|
providers: [{
|
||||||
|
provide: MAT_DIALOG_DEFAULT_OPTIONS,
|
||||||
|
useValue: { hasBackdrop: true },
|
||||||
|
}, provideHttpClient(withInterceptorsFromDi())] })
|
||||||
|
export class AppModule {}
|
||||||
|
|
||||||
|
enableProdMode();
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import { OverlayModule } from "@angular/cdk/overlay";
|
||||||
import {
|
import {
|
||||||
Component,
|
Component,
|
||||||
EventEmitter,
|
EventEmitter,
|
||||||
@@ -5,13 +6,21 @@ import {
|
|||||||
Input,
|
Input,
|
||||||
Output,
|
Output,
|
||||||
} from "@angular/core";
|
} from "@angular/core";
|
||||||
import { ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR, Validators, FormsModule, ReactiveFormsModule } from "@angular/forms";
|
import {
|
||||||
import { MatButton } from "@angular/material/button";
|
ControlValueAccessor,
|
||||||
import { MatTooltip } from "@angular/material/tooltip";
|
FormControl,
|
||||||
import { CdkOverlayOrigin, CdkConnectedOverlay } from "@angular/cdk/overlay";
|
FormsModule,
|
||||||
import { MatTabGroup, MatTab } from "@angular/material/tabs";
|
NG_VALUE_ACCESSOR,
|
||||||
import { MatFormField, MatLabel } from "@angular/material/form-field";
|
ReactiveFormsModule,
|
||||||
import { MatInput } from "@angular/material/input";
|
Validators,
|
||||||
|
} from "@angular/forms";
|
||||||
|
import { MatButtonModule } from "@angular/material/button";
|
||||||
|
import { MAT_DIALOG_DEFAULT_OPTIONS } from "@angular/material/dialog";
|
||||||
|
import { MatFormFieldModule } from "@angular/material/form-field";
|
||||||
|
import { MatInputModule } from "@angular/material/input";
|
||||||
|
import { MatTabsModule } from "@angular/material/tabs";
|
||||||
|
import { BrowserModule } from "@angular/platform-browser";
|
||||||
|
import { BrowserAnimationsModule } from "@angular/platform-browser/animations";
|
||||||
|
|
||||||
export type DateType = "QUICK" | "RELATIVE" | "ABSOLUTE";
|
export type DateType = "QUICK" | "RELATIVE" | "ABSOLUTE";
|
||||||
|
|
||||||
@@ -28,29 +37,30 @@ export class DatePickerChange {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: "app-date-picker",
|
selector: "app-date-picker",
|
||||||
templateUrl: "./date-picker.component.html",
|
templateUrl: "./date-picker.component.html",
|
||||||
providers: [
|
standalone: true,
|
||||||
{
|
imports: [
|
||||||
provide: NG_VALUE_ACCESSOR,
|
BrowserModule,
|
||||||
useExisting: forwardRef(() => DatePickerComponent),
|
MatButtonModule,
|
||||||
multi: true,
|
MatFormFieldModule,
|
||||||
},
|
MatInputModule,
|
||||||
],
|
MatTabsModule,
|
||||||
standalone: true,
|
FormsModule,
|
||||||
imports: [
|
ReactiveFormsModule,
|
||||||
MatButton,
|
OverlayModule
|
||||||
MatTooltip,
|
],
|
||||||
CdkOverlayOrigin,
|
providers: [
|
||||||
CdkConnectedOverlay,
|
{
|
||||||
MatTabGroup,
|
provide: NG_VALUE_ACCESSOR,
|
||||||
MatTab,
|
useExisting: forwardRef(() => DatePickerComponent),
|
||||||
MatFormField,
|
multi: true,
|
||||||
MatLabel,
|
},
|
||||||
MatInput,
|
{
|
||||||
FormsModule,
|
provide: MAT_DIALOG_DEFAULT_OPTIONS,
|
||||||
ReactiveFormsModule,
|
useValue: { hasBackdrop: true },
|
||||||
],
|
}
|
||||||
|
],
|
||||||
})
|
})
|
||||||
export class DatePickerComponent implements ControlValueAccessor {
|
export class DatePickerComponent implements ControlValueAccessor {
|
||||||
isOpen = false;
|
isOpen = false;
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ describe('ConfirmationDialogComponent', () => {
|
|||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
await TestBed.configureTestingModule({
|
await TestBed.configureTestingModule({
|
||||||
imports: [ConfirmationDialogComponent]
|
declarations: [ ConfirmationDialogComponent ]
|
||||||
})
|
})
|
||||||
.compileComponents();
|
.compileComponents();
|
||||||
|
|
||||||
fixture = TestBed.createComponent(ConfirmationDialogComponent);
|
fixture = TestBed.createComponent(ConfirmationDialogComponent);
|
||||||
|
|||||||
@@ -1,15 +1,9 @@
|
|||||||
import { Component, ElementRef, Inject, ViewChild } from '@angular/core';
|
import { Component, ElementRef, Inject, ViewChild } from '@angular/core';
|
||||||
import { MatDialogRef, MAT_DIALOG_DATA, MatDialogTitle, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog';
|
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
|
||||||
import { NgIf } from '@angular/common';
|
|
||||||
import { CdkScrollable } from '@angular/cdk/scrolling';
|
|
||||||
import { MatButton } from '@angular/material/button';
|
|
||||||
import { FocusDirective } from '../focus.directive';
|
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-confirmation-dialog',
|
selector: 'app-confirmation-dialog',
|
||||||
templateUrl: './confirmation-dialog.component.html',
|
templateUrl: './confirmation-dialog.component.html'
|
||||||
standalone: true,
|
|
||||||
imports: [NgIf, MatDialogTitle, CdkScrollable, MatDialogContent, MatDialogActions, MatButton, MatDialogClose, FocusDirective]
|
|
||||||
})
|
})
|
||||||
export class ConfirmationDialogComponent {
|
export class ConfirmationDialogComponent {
|
||||||
|
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ describe('CustomizableGridComponent', () => {
|
|||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
await TestBed.configureTestingModule({
|
await TestBed.configureTestingModule({
|
||||||
imports: [CustomizableGridComponent]
|
declarations: [ CustomizableGridComponent ]
|
||||||
})
|
})
|
||||||
.compileComponents();
|
.compileComponents();
|
||||||
|
|
||||||
fixture = TestBed.createComponent(CustomizableGridComponent);
|
fixture = TestBed.createComponent(CustomizableGridComponent);
|
||||||
|
|||||||
@@ -1,15 +1,18 @@
|
|||||||
import { Component } from '@angular/core';
|
import { Component } from '@angular/core';
|
||||||
import { CdkDragEnter, CdkDropList, moveItemInArray, DragRef, CdkDropListGroup, CdkDrag } from '@angular/cdk/drag-drop';
|
import { CdkDragEnter, CdkDropList, moveItemInArray, DragRef, DragDropModule} from '@angular/cdk/drag-drop';
|
||||||
import { AfterViewInit } from '@angular/core';
|
import { AfterViewInit } from '@angular/core';
|
||||||
import { ViewChild } from '@angular/core';
|
import { ViewChild } from '@angular/core';
|
||||||
import { NgFor, NgStyle, NgClass } from '@angular/common';
|
import { BrowserModule } from '@angular/platform-browser';
|
||||||
|
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-customizable-grid',
|
selector: 'app-customizable-grid',
|
||||||
templateUrl: './customizable-grid.component.html',
|
templateUrl: './customizable-grid.component.html',
|
||||||
standalone: true,
|
standalone: true,
|
||||||
imports: [NgFor, CdkDropListGroup, NgStyle, CdkDropList, CdkDrag, NgClass]
|
imports: [
|
||||||
|
BrowserModule,
|
||||||
|
DragDropModule
|
||||||
|
]
|
||||||
})
|
})
|
||||||
export class CustomizableGridComponent implements AfterViewInit {
|
export class CustomizableGridComponent implements AfterViewInit {
|
||||||
@ViewChild(CdkDropList) placeholder!: CdkDropList;
|
@ViewChild(CdkDropList) placeholder!: CdkDropList;
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ describe('DashboardPageComponent', () => {
|
|||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
await TestBed.configureTestingModule({
|
await TestBed.configureTestingModule({
|
||||||
imports: [DashboardPageComponent]
|
declarations: [ DashboardPageComponent ]
|
||||||
})
|
})
|
||||||
.compileComponents();
|
.compileComponents();
|
||||||
|
|
||||||
fixture = TestBed.createComponent(DashboardPageComponent);
|
fixture = TestBed.createComponent(DashboardPageComponent);
|
||||||
|
|||||||
@@ -5,17 +5,10 @@ import { MatSnackBar } from '@angular/material/snack-bar';
|
|||||||
import { ConfirmationDialogComponent } from '../confirmation-dialog/confirmation-dialog.component';
|
import { ConfirmationDialogComponent } from '../confirmation-dialog/confirmation-dialog.component';
|
||||||
import { Dashboard, DashboardCreationData, DashboardList, DashboardService } from '../dashboard.service';
|
import { Dashboard, DashboardCreationData, DashboardList, DashboardService } from '../dashboard.service';
|
||||||
import { NewDashboardComponent } from './new-dashboard/new-dashboard.component';
|
import { NewDashboardComponent } from './new-dashboard/new-dashboard.component';
|
||||||
import { NgIf } from '@angular/common';
|
|
||||||
import { MatProgressSpinner } from '@angular/material/progress-spinner';
|
|
||||||
import { MatButton, MatIconButton } from '@angular/material/button';
|
|
||||||
import { MatTable, MatColumnDef, MatHeaderCellDef, MatHeaderCell, MatCellDef, MatCell, MatHeaderRowDef, MatHeaderRow, MatRowDef, MatRow } from '@angular/material/table';
|
|
||||||
import { RouterLink } from '@angular/router';
|
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-dashboard-page',
|
selector: 'app-dashboard-page',
|
||||||
templateUrl: './dashboard-page.component.html',
|
templateUrl: './dashboard-page.component.html'
|
||||||
standalone: true,
|
|
||||||
imports: [NgIf, MatProgressSpinner, MatButton, MatTable, MatColumnDef, MatHeaderCellDef, MatHeaderCell, MatCellDef, MatCell, RouterLink, MatIconButton, MatHeaderRowDef, MatHeaderRow, MatRowDef, MatRow]
|
|
||||||
})
|
})
|
||||||
export class DashboardPageComponent implements OnInit {
|
export class DashboardPageComponent implements OnInit {
|
||||||
|
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ describe('AddPlotDialogComponent', () => {
|
|||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
await TestBed.configureTestingModule({
|
await TestBed.configureTestingModule({
|
||||||
imports: [AddPlotDialogComponent]
|
declarations: [ AddPlotDialogComponent ]
|
||||||
})
|
})
|
||||||
.compileComponents();
|
.compileComponents();
|
||||||
|
|
||||||
fixture = TestBed.createComponent(AddPlotDialogComponent);
|
fixture = TestBed.createComponent(AddPlotDialogComponent);
|
||||||
|
|||||||
@@ -1,16 +1,11 @@
|
|||||||
import { AfterViewInit, Component, ElementRef, Inject, ViewChild } from '@angular/core';
|
import { Component, Inject, ViewChild } from '@angular/core';
|
||||||
import { MatDialogRef, MAT_DIALOG_DATA, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog';
|
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
|
||||||
import { PlotConfig } from 'src/app/plot.service';
|
import { PlotConfig } from 'src/app/plot.service';
|
||||||
import { VisualizationPageComponent } from 'src/app/visualization-page/visualization-page.component';
|
import { VisualizationPageComponent } from 'src/app/visualization-page/visualization-page.component';
|
||||||
import { VisualizationPageComponent as VisualizationPageComponent_1 } from '../../../visualization-page/visualization-page.component';
|
|
||||||
import { CdkScrollable } from '@angular/cdk/scrolling';
|
|
||||||
import { MatButton } from '@angular/material/button';
|
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-add-plot-dialog',
|
selector: 'app-add-plot-dialog',
|
||||||
templateUrl: './add-plot-dialog.component.html',
|
templateUrl: './add-plot-dialog.component.html'
|
||||||
standalone: true,
|
|
||||||
imports: [VisualizationPageComponent_1, CdkScrollable, MatDialogContent, MatDialogActions, MatButton, MatDialogClose]
|
|
||||||
})
|
})
|
||||||
export class AddPlotDialogComponent {
|
export class AddPlotDialogComponent {
|
||||||
|
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ describe('AddTextDialogComponent', () => {
|
|||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
await TestBed.configureTestingModule({
|
await TestBed.configureTestingModule({
|
||||||
imports: [AddTextDialogComponent]
|
declarations: [ AddTextDialogComponent ]
|
||||||
})
|
})
|
||||||
.compileComponents();
|
.compileComponents();
|
||||||
|
|
||||||
fixture = TestBed.createComponent(AddTextDialogComponent);
|
fixture = TestBed.createComponent(AddTextDialogComponent);
|
||||||
|
|||||||
@@ -1,18 +1,28 @@
|
|||||||
import { Component, ElementRef, Inject, ViewChild } from '@angular/core';
|
import { Component, ElementRef, Inject, ViewChild } from '@angular/core';
|
||||||
import { MatDialogRef, MAT_DIALOG_DATA, MatDialogTitle, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog';
|
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
||||||
import { CdkScrollable } from '@angular/cdk/scrolling';
|
import { MatButtonModule } from '@angular/material/button';
|
||||||
import { MatFormField, MatLabel } from '@angular/material/form-field';
|
import { MatDialogRef, MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';
|
||||||
import { MatInput } from '@angular/material/input';
|
import { MatFormFieldModule } from '@angular/material/form-field';
|
||||||
import { FormsModule } from '@angular/forms';
|
import { MatInputModule } from '@angular/material/input';
|
||||||
import { FocusDirective } from '../../../focus.directive';
|
import { BrowserModule } from '@angular/platform-browser';
|
||||||
import { MarkdownComponent } from 'ngx-markdown';
|
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
|
||||||
import { MatButton } from '@angular/material/button';
|
import { MarkdownModule } from 'ngx-markdown';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-add-text-dialog',
|
selector: 'app-add-text-dialog',
|
||||||
templateUrl: './add-text-dialog.component.html',
|
templateUrl: './add-text-dialog.component.html',
|
||||||
standalone: true,
|
standalone: true,
|
||||||
imports: [MatDialogTitle, CdkScrollable, MatDialogContent, MatFormField, MatLabel, MatInput, FormsModule, FocusDirective, MarkdownComponent, MatDialogActions, MatButton, MatDialogClose]
|
imports: [
|
||||||
|
BrowserModule,
|
||||||
|
BrowserAnimationsModule,
|
||||||
|
FormsModule,
|
||||||
|
ReactiveFormsModule,
|
||||||
|
MarkdownModule,
|
||||||
|
MatButtonModule,
|
||||||
|
MatDialogModule,
|
||||||
|
MatFormFieldModule,
|
||||||
|
MatInputModule,
|
||||||
|
]
|
||||||
})
|
})
|
||||||
export class AddTextDialogComponent {
|
export class AddTextDialogComponent {
|
||||||
text = "";
|
text = "";
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ describe('DashboardComponent', () => {
|
|||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
await TestBed.configureTestingModule({
|
await TestBed.configureTestingModule({
|
||||||
imports: [DashboardComponent]
|
declarations: [ DashboardComponent ]
|
||||||
})
|
})
|
||||||
.compileComponents();
|
.compileComponents();
|
||||||
|
|
||||||
fixture = TestBed.createComponent(DashboardComponent);
|
fixture = TestBed.createComponent(DashboardComponent);
|
||||||
|
|||||||
@@ -1,27 +1,19 @@
|
|||||||
import { CdkDragDrop, moveItemInArray, transferArrayItem, CdkDropListGroup, CdkDropList, CdkDrag, CdkDragHandle } from '@angular/cdk/drag-drop';
|
import { CdkDragDrop, moveItemInArray, transferArrayItem } from '@angular/cdk/drag-drop';
|
||||||
import { HttpErrorResponse } from '@angular/common/http';
|
import { HttpErrorResponse } from '@angular/common/http';
|
||||||
import { Component, ElementRef, OnInit, ViewChild } from '@angular/core';
|
import { Component, ElementRef, OnInit, ViewChild } from '@angular/core';
|
||||||
import { MatDialog } from '@angular/material/dialog';
|
import { MatDialog } from '@angular/material/dialog';
|
||||||
import { MatSnackBar } from '@angular/material/snack-bar';
|
import { MatSnackBar } from '@angular/material/snack-bar';
|
||||||
import { ActivatedRoute, RouterLink } from '@angular/router';
|
import { ActivatedRoute } from '@angular/router';
|
||||||
import { Dashboard, DashboardCreationData, DashboardService, PlotWidget, PlotWidgetRenderData, TextWidget } from 'src/app/dashboard.service';
|
import { Dashboard, DashboardCreationData, DashboardService, PlotWidget, PlotWidgetRenderData, TextWidget } from 'src/app/dashboard.service';
|
||||||
import { PlotConfig, PlotResponse, PlotService } from 'src/app/plot.service';
|
import { PlotConfig, PlotResponse, PlotService } from 'src/app/plot.service';
|
||||||
import { NewDashboardComponent } from '../new-dashboard/new-dashboard.component';
|
import { NewDashboardComponent } from '../new-dashboard/new-dashboard.component';
|
||||||
import { AddPlotDialogComponent } from './add-plot-dialog/add-plot-dialog.component';
|
import { AddPlotDialogComponent } from './add-plot-dialog/add-plot-dialog.component';
|
||||||
import { AddTextDialogComponent } from './add-text-dialog/add-text-dialog.component';
|
import { AddTextDialogComponent } from './add-text-dialog/add-text-dialog.component';
|
||||||
import { DatePickerChange, DatePickerComponent } from 'src/app/components/datepicker/date-picker.component';
|
import { DatePickerChange, DatePickerComponent } from 'src/app/components/datepicker/date-picker.component';
|
||||||
import { NgIf, NgFor } from '@angular/common';
|
|
||||||
import { MatProgressSpinner } from '@angular/material/progress-spinner';
|
|
||||||
import { MatButton, MatIconButton } from '@angular/material/button';
|
|
||||||
import { DatePickerComponent as DatePickerComponent_1 } from '../../components/datepicker/date-picker.component';
|
|
||||||
import { TextWidgetComponent } from './text-widget/text-widget.component';
|
|
||||||
import { PlotWidgetComponent } from './plot-widget/plot-widget.component';
|
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-dashboard',
|
selector: 'app-dashboard',
|
||||||
templateUrl: './dashboard.component.html',
|
templateUrl: './dashboard.component.html'
|
||||||
standalone: true,
|
|
||||||
imports: [NgIf, MatProgressSpinner, RouterLink, MatButton, DatePickerComponent_1, MatIconButton, CdkDropListGroup, NgFor, CdkDropList, CdkDrag, CdkDragHandle, TextWidgetComponent, PlotWidgetComponent]
|
|
||||||
})
|
})
|
||||||
export class DashboardComponent implements OnInit{
|
export class DashboardComponent implements OnInit{
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,9 @@
|
|||||||
import { Component, Inject } from '@angular/core';
|
import { Component, Inject } from '@angular/core';
|
||||||
import { MatDialogRef, MAT_DIALOG_DATA, MatDialogClose } from '@angular/material/dialog';
|
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
|
||||||
import { MatIconButton } from '@angular/material/button';
|
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-full-screen-plot-dialog',
|
selector: 'app-full-screen-plot-dialog',
|
||||||
templateUrl: './full-screen-plot-dialog.component.html',
|
templateUrl: './full-screen-plot-dialog.component.html'
|
||||||
standalone: true,
|
|
||||||
imports: [MatIconButton, MatDialogClose]
|
|
||||||
})
|
})
|
||||||
export class FullScreenPlotDialogComponent {
|
export class FullScreenPlotDialogComponent {
|
||||||
|
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ describe('PlotWidgetComponent', () => {
|
|||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
await TestBed.configureTestingModule({
|
await TestBed.configureTestingModule({
|
||||||
imports: [PlotWidgetComponent]
|
declarations: [ PlotWidgetComponent ]
|
||||||
})
|
})
|
||||||
.compileComponents();
|
.compileComponents();
|
||||||
|
|
||||||
fixture = TestBed.createComponent(PlotWidgetComponent);
|
fixture = TestBed.createComponent(PlotWidgetComponent);
|
||||||
|
|||||||
@@ -6,14 +6,10 @@ import { PlotViewComponent } from 'src/app/plot-view/plot-view.component';
|
|||||||
import { PlotConfig, PlotResponse, PlotService } from 'src/app/plot.service';
|
import { PlotConfig, PlotResponse, PlotService } from 'src/app/plot.service';
|
||||||
import { AddPlotDialogComponent } from '../add-plot-dialog/add-plot-dialog.component';
|
import { AddPlotDialogComponent } from '../add-plot-dialog/add-plot-dialog.component';
|
||||||
import { FullScreenPlotDialogComponent } from '../full-screen-plot-dialog/full-screen-plot-dialog.component';
|
import { FullScreenPlotDialogComponent } from '../full-screen-plot-dialog/full-screen-plot-dialog.component';
|
||||||
import { NgClass, NgIf } from '@angular/common';
|
|
||||||
import { MatIconButton, MatButton } from '@angular/material/button';
|
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-plot-widget',
|
selector: 'app-plot-widget',
|
||||||
templateUrl: './plot-widget.component.html',
|
templateUrl: './plot-widget.component.html'
|
||||||
standalone: true,
|
|
||||||
imports: [NgClass, MatIconButton, NgIf, MatButton]
|
|
||||||
})
|
})
|
||||||
export class PlotWidgetComponent {
|
export class PlotWidgetComponent {
|
||||||
@Input("data")
|
@Input("data")
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ describe('TextWidgetComponent', () => {
|
|||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
await TestBed.configureTestingModule({
|
await TestBed.configureTestingModule({
|
||||||
imports: [TextWidgetComponent]
|
declarations: [ TextWidgetComponent ]
|
||||||
})
|
})
|
||||||
.compileComponents();
|
.compileComponents();
|
||||||
|
|
||||||
fixture = TestBed.createComponent(TextWidgetComponent);
|
fixture = TestBed.createComponent(TextWidgetComponent);
|
||||||
|
|||||||
@@ -3,14 +3,10 @@ import { MatDialog } from '@angular/material/dialog';
|
|||||||
import { ConfirmationDialogComponent } from 'src/app/confirmation-dialog/confirmation-dialog.component';
|
import { ConfirmationDialogComponent } from 'src/app/confirmation-dialog/confirmation-dialog.component';
|
||||||
import { TextWidget } from 'src/app/dashboard.service';
|
import { TextWidget } from 'src/app/dashboard.service';
|
||||||
import { AddTextDialogComponent } from '../add-text-dialog/add-text-dialog.component';
|
import { AddTextDialogComponent } from '../add-text-dialog/add-text-dialog.component';
|
||||||
import { MatIconButton } from '@angular/material/button';
|
|
||||||
import { MarkdownComponent } from 'ngx-markdown';
|
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-text-widget',
|
selector: 'app-text-widget',
|
||||||
templateUrl: './text-widget.component.html',
|
templateUrl: './text-widget.component.html'
|
||||||
standalone: true,
|
|
||||||
imports: [MatIconButton, MarkdownComponent]
|
|
||||||
})
|
})
|
||||||
export class TextWidgetComponent {
|
export class TextWidgetComponent {
|
||||||
@Input()
|
@Input()
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ describe('NewDashboardComponent', () => {
|
|||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
await TestBed.configureTestingModule({
|
await TestBed.configureTestingModule({
|
||||||
imports: [NewDashboardComponent]
|
declarations: [ NewDashboardComponent ]
|
||||||
})
|
})
|
||||||
.compileComponents();
|
.compileComponents();
|
||||||
|
|
||||||
fixture = TestBed.createComponent(NewDashboardComponent);
|
fixture = TestBed.createComponent(NewDashboardComponent);
|
||||||
|
|||||||
@@ -1,18 +1,26 @@
|
|||||||
import { Component, ElementRef, Inject, OnInit, ViewChild } from '@angular/core';
|
import { Component, ElementRef, Inject, OnInit, ViewChild } from '@angular/core';
|
||||||
import { MAT_DIALOG_DATA, MatDialogRef, MatDialogTitle, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog';
|
import {MAT_DIALOG_DATA, MatDialogModule, MatDialogRef} from '@angular/material/dialog';
|
||||||
import { DashboardCreationData } from 'src/app/dashboard.service';
|
import { DashboardCreationData } from 'src/app/dashboard.service';
|
||||||
import { AbstractControl, FormControl, FormGroup, ValidationErrors, ValidatorFn, Validators, FormsModule, ReactiveFormsModule } from '@angular/forms';
|
import { FormControl, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';
|
||||||
import { CdkScrollable } from '@angular/cdk/scrolling';
|
import { BrowserModule } from '@angular/platform-browser';
|
||||||
import { MatFormField, MatLabel, MatError } from '@angular/material/form-field';
|
import { MatButtonModule } from '@angular/material/button';
|
||||||
import { MatInput } from '@angular/material/input';
|
import { OverlayModule } from '@angular/cdk/overlay';
|
||||||
import { FocusDirective } from '../../focus.directive';
|
import { MatFormFieldModule } from '@angular/material/form-field';
|
||||||
import { MatButton } from '@angular/material/button';
|
import { MatInputModule } from '@angular/material/input';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-new-dashboard',
|
selector: 'app-new-dashboard',
|
||||||
templateUrl: './new-dashboard.component.html',
|
templateUrl: './new-dashboard.component.html',
|
||||||
standalone: true,
|
standalone: true,
|
||||||
imports: [FormsModule, ReactiveFormsModule, MatDialogTitle, CdkScrollable, MatDialogContent, MatFormField, MatLabel, MatInput, FocusDirective, MatError, MatDialogActions, MatButton, MatDialogClose]
|
imports: [
|
||||||
|
BrowserModule,
|
||||||
|
FormsModule,
|
||||||
|
MatButtonModule,
|
||||||
|
MatDialogModule,
|
||||||
|
MatFormFieldModule,
|
||||||
|
MatInputModule,
|
||||||
|
ReactiveFormsModule
|
||||||
|
]
|
||||||
})
|
})
|
||||||
export class NewDashboardComponent implements OnInit {
|
export class NewDashboardComponent implements OnInit {
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
import { AfterViewInit, Directive, ElementRef } from '@angular/core';
|
import { AfterViewInit, Directive, ElementRef } from '@angular/core';
|
||||||
|
|
||||||
@Directive({
|
@Directive({
|
||||||
selector: '[focus]',
|
selector: '[focus]'
|
||||||
standalone: true
|
|
||||||
})
|
})
|
||||||
export class FocusDirective implements AfterViewInit {
|
export class FocusDirective implements AfterViewInit {
|
||||||
|
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ describe('GalleryViewComponent', () => {
|
|||||||
|
|
||||||
beforeEach(waitForAsync(() => {
|
beforeEach(waitForAsync(() => {
|
||||||
TestBed.configureTestingModule({
|
TestBed.configureTestingModule({
|
||||||
imports: [GalleryViewComponent]
|
declarations: [ GalleryViewComponent ]
|
||||||
})
|
})
|
||||||
.compileComponents();
|
.compileComponents();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
|||||||
@@ -1,19 +1,7 @@
|
|||||||
import { Component, OnInit, Input, Output, ViewChild, EventEmitter, forwardRef } from '@angular/core';
|
import { Component, OnInit, Input, Output, ViewChild, EventEmitter } from '@angular/core';
|
||||||
import { MatSnackBar } from '@angular/material/snack-bar';
|
import { MatSnackBar } from '@angular/material/snack-bar';
|
||||||
import { PlotService, PlotRequest, PlotResponse, PlotResponseStats, DashTypeAndColor, RenderedImages } from '../plot.service';
|
import { PlotService, PlotRequest, PlotResponse, PlotResponseStats, DashTypeAndColor, RenderedImages } from '../plot.service';
|
||||||
import { UtilService } from '../utils.service';
|
import { UtilService } from '../utils.service';
|
||||||
import { NgIf, NgClass, NgFor } from '@angular/common';
|
|
||||||
import { MatFormField, MatLabel } from '@angular/material/form-field';
|
|
||||||
import { MatSelect } from '@angular/material/select';
|
|
||||||
import { MatOption } from '@angular/material/core';
|
|
||||||
import { ImageToggleComponent } from '../image-toggle/image-toggle.component';
|
|
||||||
import { MatCheckbox } from '@angular/material/checkbox';
|
|
||||||
import { FormsModule } from '@angular/forms';
|
|
||||||
import { MatProgressBar } from '@angular/material/progress-bar';
|
|
||||||
import { MatButton } from '@angular/material/button';
|
|
||||||
import { MatTooltip } from '@angular/material/tooltip';
|
|
||||||
import { PlotDetailsComponent } from '../plot-details/plot-details.component';
|
|
||||||
import { MatInput } from '@angular/material/input';
|
|
||||||
|
|
||||||
export class GalleryFilterData {
|
export class GalleryFilterData {
|
||||||
filterBy :string;
|
filterBy :string;
|
||||||
@@ -29,11 +17,9 @@ export class GalleryFilterData {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'pdb-gallery-filter-view',
|
selector: 'pdb-gallery-filter-view',
|
||||||
templateUrl: './gallery-filter-view.component.html',
|
templateUrl: './gallery-filter-view.component.html',
|
||||||
styleUrls: ['./gallery-filter-view.component.scss'],
|
styleUrls: ['./gallery-filter-view.component.scss']
|
||||||
standalone: true,
|
|
||||||
imports: [MatFormField, MatLabel, MatSelect, MatOption, NgIf, ImageToggleComponent, MatInput, FormsModule]
|
|
||||||
})
|
})
|
||||||
export class GalleryFilterView {
|
export class GalleryFilterView {
|
||||||
compareImages = JSON.stringify([
|
compareImages = JSON.stringify([
|
||||||
@@ -103,11 +89,9 @@ export class GalleryFilterView {
|
|||||||
|
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'pdb-gallery-view',
|
selector: 'pdb-gallery-view',
|
||||||
templateUrl: './gallery-view.component.html',
|
templateUrl: './gallery-view.component.html',
|
||||||
styleUrls: ['./gallery-view.component.scss'],
|
styleUrls: ['./gallery-view.component.scss']
|
||||||
standalone: true,
|
|
||||||
imports: [NgIf, MatFormField, MatLabel, MatSelect, MatOption, ImageToggleComponent, GalleryFilterView, MatCheckbox, FormsModule, MatProgressBar, MatButton, MatTooltip, NgClass, NgFor, forwardRef(() => GalleryItemView)]
|
|
||||||
})
|
})
|
||||||
export class GalleryViewComponent implements OnInit {
|
export class GalleryViewComponent implements OnInit {
|
||||||
|
|
||||||
@@ -329,11 +313,9 @@ export class GalleryViewComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'pdb-gallery-item-view',
|
selector: 'pdb-gallery-item-view',
|
||||||
templateUrl: './gallery-item-view.component.html',
|
templateUrl: './gallery-item-view.component.html',
|
||||||
styleUrls: ['./gallery-item-view.component.scss'],
|
styleUrls: ['./gallery-item-view.component.scss']
|
||||||
standalone: true,
|
|
||||||
imports: [NgClass, NgIf, PlotDetailsComponent]
|
|
||||||
})
|
})
|
||||||
export class GalleryItemView {
|
export class GalleryItemView {
|
||||||
@Input()
|
@Input()
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ describe('HelpPageComponent', () => {
|
|||||||
|
|
||||||
beforeEach(waitForAsync(() => {
|
beforeEach(waitForAsync(() => {
|
||||||
TestBed.configureTestingModule({
|
TestBed.configureTestingModule({
|
||||||
imports: [HelpPageComponent]
|
declarations: [ HelpPageComponent ]
|
||||||
})
|
})
|
||||||
.compileComponents();
|
.compileComponents();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
import { Component, OnInit } from '@angular/core';
|
import { Component, OnInit } from '@angular/core';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'pdb-help-page',
|
selector: 'pdb-help-page',
|
||||||
templateUrl: './help-page.component.html',
|
templateUrl: './help-page.component.html',
|
||||||
styleUrls: ['./help-page.component.scss'],
|
styleUrls: ['./help-page.component.scss'],
|
||||||
standalone: true
|
standalone: true
|
||||||
})
|
})
|
||||||
export class HelpPageComponent implements OnInit {
|
export class HelpPageComponent implements OnInit {
|
||||||
|
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ describe('ImageToggleComponent', () => {
|
|||||||
|
|
||||||
beforeEach(waitForAsync(() => {
|
beforeEach(waitForAsync(() => {
|
||||||
TestBed.configureTestingModule({
|
TestBed.configureTestingModule({
|
||||||
imports: [ImageToggleComponent]
|
declarations: [ ImageToggleComponent ]
|
||||||
})
|
})
|
||||||
.compileComponents();
|
.compileComponents();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,14 @@
|
|||||||
import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
|
import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
|
||||||
import { NgIf } from '@angular/common';
|
import { BrowserModule } from '@angular/platform-browser';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'pdb-image-toggle',
|
selector: 'pdb-image-toggle',
|
||||||
templateUrl: './image-toggle.component.html',
|
templateUrl: './image-toggle.component.html',
|
||||||
styleUrls: ['./image-toggle.component.scss'],
|
styleUrls: ['./image-toggle.component.scss'],
|
||||||
standalone: true,
|
standalone: true,
|
||||||
imports: [NgIf]
|
imports: [
|
||||||
|
BrowserModule
|
||||||
|
]
|
||||||
})
|
})
|
||||||
export class ImageToggleComponent implements OnInit {
|
export class ImageToggleComponent implements OnInit {
|
||||||
|
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ describe('LimitByComponent', () => {
|
|||||||
|
|
||||||
beforeEach(waitForAsync(() => {
|
beforeEach(waitForAsync(() => {
|
||||||
TestBed.configureTestingModule({
|
TestBed.configureTestingModule({
|
||||||
imports: [LimitByComponent]
|
declarations: [ LimitByComponent ]
|
||||||
})
|
})
|
||||||
.compileComponents();
|
.compileComponents();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
|||||||
@@ -1,17 +1,25 @@
|
|||||||
import { Component, Input} from '@angular/core';
|
import { Component } from '@angular/core';
|
||||||
import { FormControl, FormsModule } from '@angular/forms';
|
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
||||||
import { MatFormField, MatLabel } from '@angular/material/form-field';
|
import { MatFormField, MatLabel } from '@angular/material/form-field';
|
||||||
import { MatSelect } from '@angular/material/select';
|
|
||||||
import { MatOption } from '@angular/material/core';
|
|
||||||
import { NgIf } from '@angular/common';
|
|
||||||
import { MatInput } from '@angular/material/input';
|
import { MatInput } from '@angular/material/input';
|
||||||
|
import { MatOption, MatSelect } from '@angular/material/select';
|
||||||
|
import { BrowserModule } from '@angular/platform-browser';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'pdb-limit-by',
|
selector: 'pdb-limit-by',
|
||||||
templateUrl: './limit-by.component.html',
|
templateUrl: './limit-by.component.html',
|
||||||
styleUrls: ['./limit-by.component.scss'],
|
styleUrls: ['./limit-by.component.scss'],
|
||||||
standalone: true,
|
standalone: true,
|
||||||
imports: [MatFormField, MatLabel, MatSelect, MatOption, NgIf, MatInput, FormsModule]
|
imports: [
|
||||||
|
BrowserModule,
|
||||||
|
FormsModule,
|
||||||
|
MatFormField,
|
||||||
|
MatInput,
|
||||||
|
MatLabel,
|
||||||
|
MatSelect,
|
||||||
|
MatOption,
|
||||||
|
ReactiveFormsModule
|
||||||
|
]
|
||||||
})
|
})
|
||||||
export class LimitByComponent {
|
export class LimitByComponent {
|
||||||
|
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ describe('MainPageComponent', () => {
|
|||||||
|
|
||||||
beforeEach(waitForAsync(() => {
|
beforeEach(waitForAsync(() => {
|
||||||
TestBed.configureTestingModule({
|
TestBed.configureTestingModule({
|
||||||
imports: [MainPageComponent]
|
declarations: [ MainPageComponent ]
|
||||||
})
|
})
|
||||||
.compileComponents();
|
.compileComponents();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
|||||||
@@ -1,18 +1,14 @@
|
|||||||
import { Component, OnInit } from '@angular/core';
|
import { Component } from '@angular/core';
|
||||||
import { RouterLink } from '@angular/router';
|
import { RouterLink } from '@angular/router';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'pdb-main-page',
|
selector: 'pdb-main-page',
|
||||||
templateUrl: './main-page.component.html',
|
templateUrl: './main-page.component.html',
|
||||||
styleUrls: ['./main-page.component.scss'],
|
standalone: true,
|
||||||
standalone: true,
|
imports: [
|
||||||
imports: [RouterLink]
|
RouterLink
|
||||||
|
]
|
||||||
})
|
})
|
||||||
export class MainPageComponent implements OnInit {
|
export class MainPageComponent {
|
||||||
|
|
||||||
constructor() { }
|
|
||||||
|
|
||||||
ngOnInit() {
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,16 +1,11 @@
|
|||||||
import { Component, Input } from '@angular/core';
|
import { Component, Input } from '@angular/core';
|
||||||
import { DashTypeAndColor, PlotResponseStats, DataSeriesStats } from '../plot.service';
|
import { DashTypeAndColor, PlotResponseStats, DataSeriesStats } from '../plot.service';
|
||||||
import { UtilService } from '../utils.service';
|
import { UtilService } from '../utils.service';
|
||||||
import { MatRadioGroup, MatRadioButton } from '@angular/material/radio';
|
|
||||||
import { FormsModule } from '@angular/forms';
|
|
||||||
import { NgFor, NgIf } from '@angular/common';
|
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'pdb-plot-details',
|
selector: 'pdb-plot-details',
|
||||||
templateUrl: './plot-details.component.html',
|
templateUrl: './plot-details.component.html',
|
||||||
styleUrls: ['./plot-details.component.scss'],
|
styleUrls: ['./plot-details.component.scss']
|
||||||
standalone: true,
|
|
||||||
imports: [MatRadioGroup, FormsModule, MatRadioButton, NgFor, NgIf]
|
|
||||||
})
|
})
|
||||||
export class PlotDetailsComponent {
|
export class PlotDetailsComponent {
|
||||||
|
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ describe('PlotViewComponent', () => {
|
|||||||
|
|
||||||
beforeEach(waitForAsync(() => {
|
beforeEach(waitForAsync(() => {
|
||||||
TestBed.configureTestingModule({
|
TestBed.configureTestingModule({
|
||||||
imports: [PlotViewComponent]
|
declarations: [ PlotViewComponent ]
|
||||||
})
|
})
|
||||||
.compileComponents();
|
.compileComponents();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
|||||||
@@ -8,16 +8,11 @@ import { Overlay } from "@angular/cdk/overlay";
|
|||||||
import { DateTime, Duration } from "luxon";
|
import { DateTime, Duration } from "luxon";
|
||||||
import { DateValue } from '../components/datepicker/date-picker.component';
|
import { DateValue } from '../components/datepicker/date-picker.component';
|
||||||
import { Observable } from 'rxjs';
|
import { Observable } from 'rxjs';
|
||||||
import { CdkDrag, CdkDragHandle } from '@angular/cdk/drag-drop';
|
|
||||||
import { NgClass, NgFor, NgIf } from '@angular/common';
|
|
||||||
import { PlotDetailsComponent } from '../plot-details/plot-details.component';
|
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'pdb-plot-view',
|
selector: 'pdb-plot-view',
|
||||||
templateUrl: './plot-view.component.html',
|
templateUrl: './plot-view.component.html',
|
||||||
styleUrls: ['./plot-view.component.scss'],
|
styleUrls: ['./plot-view.component.scss']
|
||||||
standalone: true,
|
|
||||||
imports: [CdkDrag, NgClass, CdkDragHandle, NgFor, NgIf, PlotDetailsComponent]
|
|
||||||
})
|
})
|
||||||
export class PlotViewComponent {
|
export class PlotViewComponent {
|
||||||
|
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ describe('QueryAutocompleteComponent', () => {
|
|||||||
|
|
||||||
beforeEach(waitForAsync(() => {
|
beforeEach(waitForAsync(() => {
|
||||||
TestBed.configureTestingModule({
|
TestBed.configureTestingModule({
|
||||||
imports: [QueryAutocompleteComponent]
|
declarations: [ QueryAutocompleteComponent ]
|
||||||
})
|
})
|
||||||
.compileComponents();
|
.compileComponents();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
|||||||
@@ -1,19 +1,14 @@
|
|||||||
import { Component, OnInit, Input, ViewChild, AfterViewInit } from '@angular/core';
|
import { Component, OnInit, Input, ViewChild, AfterViewInit } from '@angular/core';
|
||||||
import { FormControl, UntypedFormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';
|
import {FormControl, UntypedFormControl} from '@angular/forms';
|
||||||
import {Observable} from 'rxjs';
|
import {Observable} from 'rxjs';
|
||||||
import {startWith, map} from 'rxjs/operators';
|
import {startWith, map} from 'rxjs/operators';
|
||||||
import { MatAutocompleteTrigger, MatAutocomplete } from '@angular/material/autocomplete';
|
import {MatAutocompleteTrigger } from '@angular/material/autocomplete';
|
||||||
import { PlotService, PlotType, AutocompleteResult, Suggestion, ResultMode } from '../plot.service';
|
import { PlotService, PlotType, AutocompleteResult, Suggestion, ResultMode } from '../plot.service';
|
||||||
import { MatInput } from '@angular/material/input';
|
|
||||||
import { NgFor, AsyncPipe } from '@angular/common';
|
|
||||||
import { MatOption } from '@angular/material/core';
|
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'pdb-query-autocomplete',
|
selector: 'pdb-query-autocomplete',
|
||||||
templateUrl: './query-autocomplete.component.html',
|
templateUrl: './query-autocomplete.component.html',
|
||||||
styleUrls: ['./query-autocomplete.component.scss'],
|
styleUrls: ['./query-autocomplete.component.scss']
|
||||||
standalone: true,
|
|
||||||
imports: [MatInput, FormsModule, MatAutocompleteTrigger, ReactiveFormsModule, MatAutocomplete, NgFor, MatOption, AsyncPipe]
|
|
||||||
})
|
})
|
||||||
export class QueryAutocompleteComponent implements OnInit {
|
export class QueryAutocompleteComponent implements OnInit {
|
||||||
|
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ describe('UploadPageComponent', () => {
|
|||||||
|
|
||||||
beforeEach(waitForAsync(() => {
|
beforeEach(waitForAsync(() => {
|
||||||
TestBed.configureTestingModule({
|
TestBed.configureTestingModule({
|
||||||
imports: [UploadPageComponent]
|
declarations: [ UploadPageComponent ]
|
||||||
})
|
})
|
||||||
.compileComponents();
|
.compileComponents();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
import { Component, OnInit } from '@angular/core';
|
import { Component, OnInit } from '@angular/core';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'pdb-upload-page',
|
selector: 'pdb-upload-page',
|
||||||
templateUrl: './upload-page.component.html',
|
templateUrl: './upload-page.component.html',
|
||||||
styleUrls: ['./upload-page.component.scss'],
|
styleUrls: ['./upload-page.component.scss'],
|
||||||
standalone: true
|
standalone: true
|
||||||
})
|
})
|
||||||
export class UploadPageComponent implements OnInit {
|
export class UploadPageComponent implements OnInit {
|
||||||
|
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ describe('VisualizationPageComponent', () => {
|
|||||||
|
|
||||||
beforeEach(waitForAsync(() => {
|
beforeEach(waitForAsync(() => {
|
||||||
TestBed.configureTestingModule({
|
TestBed.configureTestingModule({
|
||||||
imports: [VisualizationPageComponent]
|
declarations: [ VisualizationPageComponent ]
|
||||||
})
|
})
|
||||||
.compileComponents();
|
.compileComponents();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ import {
|
|||||||
Suggestion,
|
Suggestion,
|
||||||
TagField,
|
TagField,
|
||||||
} from "../plot.service";
|
} from "../plot.service";
|
||||||
import { UntypedFormControl, FormsModule } from "@angular/forms";
|
import { UntypedFormControl } from "@angular/forms";
|
||||||
import { MatSnackBar } from "@angular/material/snack-bar";
|
import { MatSnackBar } from "@angular/material/snack-bar";
|
||||||
import { LimitByComponent } from "../limit-by/limit-by.component";
|
import { LimitByComponent } from "../limit-by/limit-by.component";
|
||||||
import { YAxisDefinitionComponent } from "../y-axis-definition/y-axis-definition.component";
|
import { YAxisDefinitionComponent } from "../y-axis-definition/y-axis-definition.component";
|
||||||
@@ -34,41 +34,11 @@ import {
|
|||||||
DatePickerComponent,
|
DatePickerComponent,
|
||||||
DateValue,
|
DateValue,
|
||||||
} from "../components/datepicker/date-picker.component";
|
} from "../components/datepicker/date-picker.component";
|
||||||
import { MatFormField, MatLabel, MatError } from "@angular/material/form-field";
|
|
||||||
import { MatSelect } from "@angular/material/select";
|
|
||||||
import { NgFor, NgIf } from "@angular/common";
|
|
||||||
import { MatOption } from "@angular/material/core";
|
|
||||||
import { MatCheckbox } from "@angular/material/checkbox";
|
|
||||||
import { MatIconAnchor, MatButton } from "@angular/material/button";
|
|
||||||
import { RouterLink } from "@angular/router";
|
|
||||||
import { MatTooltip } from "@angular/material/tooltip";
|
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: "pdb-visualization-page",
|
selector: "pdb-visualization-page",
|
||||||
templateUrl: "./visualization-page.component.html",
|
templateUrl: "./visualization-page.component.html",
|
||||||
styleUrls: ["./visualization-page.component.scss"],
|
styleUrls: ["./visualization-page.component.scss"],
|
||||||
standalone: true,
|
|
||||||
imports: [
|
|
||||||
QueryAutocompleteComponent,
|
|
||||||
DatePickerComponent,
|
|
||||||
MatFormField,
|
|
||||||
MatLabel,
|
|
||||||
MatSelect,
|
|
||||||
FormsModule,
|
|
||||||
NgFor,
|
|
||||||
MatOption,
|
|
||||||
LimitByComponent,
|
|
||||||
MatCheckbox,
|
|
||||||
YAxisDefinitionComponent,
|
|
||||||
NgIf,
|
|
||||||
MatError,
|
|
||||||
MatIconAnchor,
|
|
||||||
RouterLink,
|
|
||||||
MatButton,
|
|
||||||
MatTooltip,
|
|
||||||
PlotViewComponent,
|
|
||||||
GalleryViewComponent,
|
|
||||||
],
|
|
||||||
})
|
})
|
||||||
export class VisualizationPageComponent implements OnInit, AfterViewInit {
|
export class VisualizationPageComponent implements OnInit, AfterViewInit {
|
||||||
readonly DATE_PATTERN = "YYYY-MM-DD HH:mm:ss"; // for moment-JS
|
readonly DATE_PATTERN = "YYYY-MM-DD HH:mm:ss"; // for moment-JS
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ describe('YAxisDefinitionComponent', () => {
|
|||||||
|
|
||||||
beforeEach(waitForAsync(() => {
|
beforeEach(waitForAsync(() => {
|
||||||
TestBed.configureTestingModule({
|
TestBed.configureTestingModule({
|
||||||
imports: [YAxisDefinitionComponent]
|
declarations: [ YAxisDefinitionComponent ]
|
||||||
})
|
})
|
||||||
.compileComponents();
|
.compileComponents();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
|||||||
@@ -1,18 +1,27 @@
|
|||||||
import { Component, Input } from '@angular/core';
|
import { Component, Input } from '@angular/core';
|
||||||
import { YAxisDefinition } from '../plot.service';
|
import { YAxisDefinition } from '../plot.service';
|
||||||
|
import { BrowserModule } from '@angular/platform-browser';
|
||||||
import { MatFormField, MatLabel } from '@angular/material/form-field';
|
import { MatFormField, MatLabel } from '@angular/material/form-field';
|
||||||
import { MatSelect } from '@angular/material/select';
|
import { MatOptgroup, MatOption, MatSelect } from '@angular/material/select';
|
||||||
import { MatOption, MatOptgroup } from '@angular/material/core';
|
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
||||||
import { NgIf } from '@angular/common';
|
|
||||||
import { MatInput } from '@angular/material/input';
|
import { MatInput } from '@angular/material/input';
|
||||||
import { FormsModule } from '@angular/forms';
|
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'pdb-y-axis-definition',
|
selector: 'pdb-y-axis-definition',
|
||||||
templateUrl: './y-axis-definition.component.html',
|
templateUrl: './y-axis-definition.component.html',
|
||||||
styleUrls: ['./y-axis-definition.component.scss'],
|
styleUrls: ['./y-axis-definition.component.scss'],
|
||||||
standalone: true,
|
standalone: true,
|
||||||
imports: [MatFormField, MatLabel, MatSelect, MatOption, MatOptgroup, NgIf, MatInput, FormsModule]
|
imports: [
|
||||||
|
BrowserModule,
|
||||||
|
FormsModule,
|
||||||
|
MatFormField,
|
||||||
|
MatInput,
|
||||||
|
MatLabel,
|
||||||
|
MatSelect,
|
||||||
|
MatOption,
|
||||||
|
MatOptgroup,
|
||||||
|
ReactiveFormsModule
|
||||||
|
]
|
||||||
})
|
})
|
||||||
export class YAxisDefinitionComponent {
|
export class YAxisDefinitionComponent {
|
||||||
|
|
||||||
|
|||||||
@@ -1,33 +1,8 @@
|
|||||||
import { enableProdMode, importProvidersFrom } from '@angular/core';
|
import { enableProdMode } from '@angular/core';
|
||||||
|
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
|
||||||
|
|
||||||
|
import { AppModule } from './app/app.module';
|
||||||
import { environment } from './environments/environment';
|
import { environment } from './environments/environment';
|
||||||
import { MAT_DIALOG_DEFAULT_OPTIONS, MatDialogModule } from '@angular/material/dialog';
|
|
||||||
import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';
|
|
||||||
import { MarkdownModule } from 'ngx-markdown';
|
|
||||||
import { BrowserModule, bootstrapApplication } from '@angular/platform-browser';
|
|
||||||
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
||||||
import { DragDropModule } from '@angular/cdk/drag-drop';
|
|
||||||
import { MatAutocompleteModule } from '@angular/material/autocomplete';
|
|
||||||
import { MatBadgeModule } from '@angular/material/badge';
|
|
||||||
import { MatButtonModule } from '@angular/material/button';
|
|
||||||
import { MatCardModule } from '@angular/material/card';
|
|
||||||
import { MatCheckboxModule } from '@angular/material/checkbox';
|
|
||||||
import { MatFormFieldModule } from '@angular/material/form-field';
|
|
||||||
import { MatGridListModule } from '@angular/material/grid-list';
|
|
||||||
import { MatInputModule } from '@angular/material/input';
|
|
||||||
import { MatRadioModule } from '@angular/material/radio';
|
|
||||||
import { MatProgressBarModule } from '@angular/material/progress-bar';
|
|
||||||
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
|
|
||||||
import { MatSelectModule } from '@angular/material/select';
|
|
||||||
import { MatSnackBarModule } from '@angular/material/snack-bar';
|
|
||||||
import { MatTabsModule } from '@angular/material/tabs';
|
|
||||||
import { MatTableModule } from '@angular/material/table';
|
|
||||||
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
||||||
import { provideAnimations } from '@angular/platform-browser/animations';
|
|
||||||
import { OverlayModule } from '@angular/cdk/overlay';
|
|
||||||
import { AppComponent } from './app/app.component';
|
|
||||||
import { provideRouter, Routes, withDebugTracing } from '@angular/router';
|
|
||||||
|
|
||||||
if (environment.production) {
|
if (environment.production) {
|
||||||
enableProdMode();
|
enableProdMode();
|
||||||
@@ -39,49 +14,5 @@ if (environment.production) {
|
|||||||
|
|
||||||
(<any>window).submitterId = (<any>window).randomId();
|
(<any>window).submitterId = (<any>window).randomId();
|
||||||
|
|
||||||
|
platformBrowserDynamic().bootstrapModule(AppModule)
|
||||||
const routes: Routes = [
|
|
||||||
{ path: "", loadComponent: () => import("./app/main-page/main-page.component").then( m => m.MainPageComponent) },
|
|
||||||
{ path: "vis", loadComponent: () => import("./app/visualization-page/visualization-page.component").then(m => m.VisualizationPageComponent) },
|
|
||||||
{ path: "dashboard", loadComponent: () => import("./app/dashboard-page/dashboard-page.component").then(m => m.DashboardPageComponent) },
|
|
||||||
{ path: "dashboard/:id", loadComponent: () => import("./app/dashboard-page/dashboard/dashboard.component").then(m => m.DashboardComponent) },
|
|
||||||
{ path: "upload", loadComponent: () => import("./app/upload-page/upload-page.component").then(m => m.UploadPageComponent) },
|
|
||||||
{ path: "grid", loadComponent: () => import("./app/customizable-grid/customizable-grid.component").then(m => m.CustomizableGridComponent) },
|
|
||||||
{ path: "help", loadComponent: () => import("./app/help-page/help-page.component").then(m => m.HelpPageComponent) },
|
|
||||||
];
|
|
||||||
|
|
||||||
bootstrapApplication(AppComponent, {
|
|
||||||
providers: [
|
|
||||||
provideRouter(routes, withDebugTracing()),
|
|
||||||
importProvidersFrom(
|
|
||||||
MarkdownModule.forRoot(),
|
|
||||||
BrowserModule,
|
|
||||||
FormsModule,
|
|
||||||
ReactiveFormsModule,
|
|
||||||
DragDropModule,
|
|
||||||
MatAutocompleteModule,
|
|
||||||
MatBadgeModule,
|
|
||||||
MatButtonModule,
|
|
||||||
MatCardModule,
|
|
||||||
MatCheckboxModule,
|
|
||||||
MatDialogModule,
|
|
||||||
MatFormFieldModule,
|
|
||||||
MatGridListModule,
|
|
||||||
MatInputModule,
|
|
||||||
MatRadioModule,
|
|
||||||
MatProgressBarModule,
|
|
||||||
MatProgressSpinnerModule,
|
|
||||||
MatSelectModule,
|
|
||||||
MatSnackBarModule,
|
|
||||||
MatTabsModule,
|
|
||||||
MatTableModule,
|
|
||||||
MatTooltipModule,
|
|
||||||
OverlayModule),
|
|
||||||
{
|
|
||||||
provide: MAT_DIALOG_DEFAULT_OPTIONS,
|
|
||||||
useValue: { hasBackdrop: true },
|
|
||||||
}, provideHttpClient(withInterceptorsFromDi()),
|
|
||||||
provideAnimations()
|
|
||||||
]
|
|
||||||
})
|
|
||||||
.catch(err => console.error(err));
|
.catch(err => console.error(err));
|
||||||
|
|||||||
Reference in New Issue
Block a user