diff --git a/src/app/debug/table/table.component.html b/src/app/debug/table/table.component.html
index 4716ff11..9439477e 100644
--- a/src/app/debug/table/table.component.html
+++ b/src/app/debug/table/table.component.html
@@ -103,7 +103,7 @@
}
}
-
+
@if (hasTimedOut) {
[One or more reports are in progress for more
@@ -161,6 +161,8 @@ [One or more reports are in progress for mor
+} @else {
+
}
diff --git a/src/app/debug/table/table.component.ts b/src/app/debug/table/table.component.ts
index 7a44beb7..d04fb777 100644
--- a/src/app/debug/table/table.component.ts
+++ b/src/app/debug/table/table.component.ts
@@ -11,9 +11,7 @@ import { TabService } from '../../shared/services/tab.service';
import { FilterService } from '../filter-side-drawer/filter.service';
import { ReportData } from '../../shared/interfaces/report-data';
import { TableCellShortenerPipe } from '../../shared/pipes/table-cell-shortener.pipe';
-import { ToastComponent } from '../../shared/components/toast/toast.component';
import { MatSort, MatSortModule } from '@angular/material/sort';
-import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
import { ActiveFiltersComponent } from '../active-filters/active-filters.component';
import { FormControl, FormsModule, ReactiveFormsModule, ValidatorFn, Validators } from '@angular/forms';
import {
@@ -24,7 +22,7 @@ import {
NgbDropdownToggle,
} from '@ng-bootstrap/ng-bootstrap';
import { FilterSideDrawerComponent } from '../filter-side-drawer/filter-side-drawer.component';
-import { KeyValuePipe, NgClass } from '@angular/common';
+import { NgClass } from '@angular/common';
import { MatTableDataSource, MatTableModule } from '@angular/material/table';
import { View } from '../../shared/interfaces/view';
import { OptionsSettings } from '../../shared/interfaces/options-settings';
@@ -34,6 +32,7 @@ import { DebugTabService } from '../debug-tab.service';
import { ViewDropdownComponent } from '../../shared/components/view-dropdown/view-dropdown.component';
import { DeleteModalComponent } from '../../shared/components/delete-modal/delete-modal.component';
import { RefreshCondition } from '../../shared/interfaces/refresh-condition';
+import { LoadingSpinnerComponent } from '../../shared/components/loading-spinner/loading-spinner.component';
@Component({
selector: 'app-table',
@@ -50,16 +49,14 @@ import { RefreshCondition } from '../../shared/interfaces/refresh-condition';
ReactiveFormsModule,
FormsModule,
ActiveFiltersComponent,
- MatProgressSpinnerModule,
MatSortModule,
NgClass,
TableSettingsModalComponent,
- ToastComponent,
- KeyValuePipe,
TableCellShortenerPipe,
MatTableModule,
ViewDropdownComponent,
DeleteModalComponent,
+ LoadingSpinnerComponent,
],
})
export class TableComponent implements OnInit, OnDestroy {
diff --git a/src/app/shared/components/loading-spinner/loading-spinner.component.css b/src/app/shared/components/loading-spinner/loading-spinner.component.css
new file mode 100644
index 00000000..ef79e785
--- /dev/null
+++ b/src/app/shared/components/loading-spinner/loading-spinner.component.css
@@ -0,0 +1,5 @@
+.loading-spinner {
+ color: #fdc300;
+ width: 3rem;
+ height: 3rem;
+}
diff --git a/src/app/shared/components/loading-spinner/loading-spinner.component.html b/src/app/shared/components/loading-spinner/loading-spinner.component.html
new file mode 100644
index 00000000..3f72d40f
--- /dev/null
+++ b/src/app/shared/components/loading-spinner/loading-spinner.component.html
@@ -0,0 +1,5 @@
+
diff --git a/src/app/shared/components/loading-spinner/loading-spinner.component.spec.ts b/src/app/shared/components/loading-spinner/loading-spinner.component.spec.ts
new file mode 100644
index 00000000..24d148f9
--- /dev/null
+++ b/src/app/shared/components/loading-spinner/loading-spinner.component.spec.ts
@@ -0,0 +1,22 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { LoadingSpinnerComponent } from './loading-spinner.component';
+
+describe('LoadingSpinnerComponent', () => {
+ let component: LoadingSpinnerComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ imports: [LoadingSpinnerComponent],
+ }).compileComponents();
+
+ fixture = TestBed.createComponent(LoadingSpinnerComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/shared/components/loading-spinner/loading-spinner.component.ts b/src/app/shared/components/loading-spinner/loading-spinner.component.ts
new file mode 100644
index 00000000..f7a2016c
--- /dev/null
+++ b/src/app/shared/components/loading-spinner/loading-spinner.component.ts
@@ -0,0 +1,10 @@
+import { Component } from '@angular/core';
+
+@Component({
+ selector: 'app-loading-spinner',
+ standalone: true,
+ imports: [],
+ templateUrl: './loading-spinner.component.html',
+ styleUrl: './loading-spinner.component.css',
+})
+export class LoadingSpinnerComponent {}
diff --git a/src/app/test/test.component.html b/src/app/test/test.component.html
index 983b39ab..f8ee20b0 100644
--- a/src/app/test/test.component.html
+++ b/src/app/test/test.component.html
@@ -1,4 +1,4 @@
-
+
Generator is {{ generatorEnabled|booleanToString: 'enabled':'disabled' }}
-
-
-
+ @if (loading) {
+
+ } @else {
+
+
+ }
diff --git a/src/app/test/test.component.ts b/src/app/test/test.component.ts
index 4bac08bc..e1c9de29 100644
--- a/src/app/test/test.component.ts
+++ b/src/app/test/test.component.ts
@@ -10,7 +10,6 @@ import { HelperService } from '../shared/services/helper.service';
import { ToastService } from '../shared/services/toast.service';
import { UpdatePathSettings } from '../shared/interfaces/update-path-settings';
import { TestFolderTreeComponent } from './test-folder-tree/test-folder-tree.component';
-import { ToastComponent } from '../shared/components/toast/toast.component';
import { FormsModule, NgModel, ReactiveFormsModule } from '@angular/forms';
import { TestListItem } from '../shared/interfaces/test-list-item';
import { OptionsSettings } from '../shared/interfaces/options-settings';
@@ -20,6 +19,7 @@ import { HttpErrorResponse } from '@angular/common/http';
import { TestReportsService } from './test-reports.service';
import { TestTableComponent } from './test-table/test-table.component';
import { DeleteModalComponent } from '../shared/components/delete-modal/delete-modal.component';
+import { LoadingSpinnerComponent } from '../shared/components/loading-spinner/loading-spinner.component';
export const updatePathActionConst = ['move', 'copy'] as const;
export type UpdatePathAction = (typeof updatePathActionConst)[number];
@@ -33,12 +33,12 @@ export type UpdatePathAction = (typeof updatePathActionConst)[number];
TestFolderTreeComponent,
ReactiveFormsModule,
FormsModule,
- ToastComponent,
TestSettingsModalComponent,
CloneModalComponent,
BooleanToStringPipe,
DeleteModalComponent,
TestTableComponent,
+ LoadingSpinnerComponent,
],
})
export class TestComponent implements OnInit, OnDestroy {
@@ -48,18 +48,18 @@ export class TestComponent implements OnInit, OnDestroy {
protected filteredReports: TestListItem[] = [];
protected generatorEnabled: boolean = false;
protected currentFilter: string = '';
+ protected loading: boolean = true;
+
protected showStorageIds?: boolean;
- private updatePathAction: UpdatePathAction = 'move';
- @ViewChild(CloneModalComponent) cloneModal!: CloneModalComponent;
- @ViewChild(TestSettingsModalComponent)
- testSettingsModal!: TestSettingsModalComponent;
- @ViewChild(DeleteModalComponent) deleteModal!: DeleteModalComponent;
- @ViewChild(TestFolderTreeComponent)
- testFileTreeComponent!: TestFolderTreeComponent;
- @ViewChild('moveToInput', { read: NgModel }) moveToInputModel!: NgModel;
- @ViewChild(TestTableComponent) testTableComponent!: TestTableComponent;
+ @ViewChild(CloneModalComponent) protected cloneModal!: CloneModalComponent;
+ @ViewChild(TestSettingsModalComponent) protected testSettingsModal!: TestSettingsModalComponent;
+ @ViewChild(DeleteModalComponent) protected deleteModal!: DeleteModalComponent;
+ @ViewChild(TestFolderTreeComponent) protected testFileTreeComponent!: TestFolderTreeComponent;
+ @ViewChild('moveToInput', { read: NgModel }) protected moveToInputModel!: NgModel;
+ @ViewChild(TestTableComponent) protected testTableComponent!: TestTableComponent;
+ private updatePathAction: UpdatePathAction = 'move';
private testReportServiceSubscription?: Subscription;
constructor(
@@ -108,6 +108,7 @@ export class TestComponent implements OnInit, OnDestroy {
}
loadData(path?: string): void {
+ this.loading = true;
if (path && path.endsWith('/')) {
path = path.slice(0, -1);
}
@@ -119,8 +120,8 @@ export class TestComponent implements OnInit, OnDestroy {
this.testFileTreeComponent.tree.selectItem(path ?? this.testFileTreeComponent.rootFolder.name);
}
this.matches();
+ this.loading = false;
},
- error: () => catchError(this.errorHandler.handleError()),
});
this.testReportsService.getReports();
}