diff --git a/frontend/bec_atlas/src/app/core/model/session.ts b/frontend/bec_atlas/src/app/core/model/session.ts index adce990..73199a2 100644 --- a/frontend/bec_atlas/src/app/core/model/session.ts +++ b/frontend/bec_atlas/src/app/core/model/session.ts @@ -1,7 +1,7 @@ export interface Session { name: string; - deployment_id: string; + deployment_id?: string; _id: string; - owner_groups: string[]; - access_groups: []; // This should probably be string[] as well + owner_groups?: string[]; + access_groups?: []; // This should probably be string[] as well } diff --git a/frontend/bec_atlas/src/app/core/remote-data.service.ts b/frontend/bec_atlas/src/app/core/remote-data.service.ts index 087b072..12ec768 100644 --- a/frontend/bec_atlas/src/app/core/remote-data.service.ts +++ b/frontend/bec_atlas/src/app/core/remote-data.service.ts @@ -1,5 +1,6 @@ import { HttpClient, HttpHeaders } from '@angular/common/http'; import { Injectable } from '@angular/core'; +import { firstValueFrom } from 'rxjs'; import { Session } from './model/session'; import { ServerSettingsService } from '../server-settings.service'; import { ScanDataResponse } from './model/scan-data'; @@ -167,7 +168,7 @@ export class ScanDataService extends RemoteDataService { ) { let headers = new HttpHeaders(); headers = headers.set('Content-Type', 'application/json; charset=utf-8'); - return this.get>( + return firstValueFrom(this.get>( 'scans/session', { session_id: sessionId, @@ -178,7 +179,7 @@ export class ScanDataService extends RemoteDataService { includeUserData: includeUserData.toString(), }, headers - ); + )); } /** * Method for getting the scan count @@ -207,7 +208,7 @@ export class ScanDataService extends RemoteDataService { if (datasetNumber !== null) { filters['dataset_number'] = datasetNumber; } - return this.get('scans/count', filters, headers); + return firstValueFrom(this.get('scans/count', filters, headers)); } /** @@ -222,12 +223,12 @@ export class ScanDataService extends RemoteDataService { let headers = new HttpHeaders(); headers = headers.set('Content-Type', 'application/json; charset=utf-8'); console.log('Updating user data', userData); - return this.patch( + return firstValueFrom(this.patch( 'scans/user_data', { scan_id: scanId }, userData, headers - ); + )); } } @@ -246,10 +247,10 @@ export class SessionDataService extends RemoteDataService { getSessions(offset: number = 0, limit: number = 100) { let headers = new HttpHeaders(); headers = headers.set('Content-Type', 'application/json; charset=utf-8'); - return this.get( + return firstValueFrom(this.get( 'sessions', { offset: offset.toString(), limit: limit.toString() }, headers - ); + )); } } diff --git a/frontend/bec_atlas/src/app/scan-table/scan-table.component.ts b/frontend/bec_atlas/src/app/scan-table/scan-table.component.ts index ca35fcd..44454eb 100644 --- a/frontend/bec_atlas/src/app/scan-table/scan-table.component.ts +++ b/frontend/bec_atlas/src/app/scan-table/scan-table.component.ts @@ -24,7 +24,6 @@ import { import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; import { StarRatingModule } from 'angular-star-rating'; import { MatSort } from '@angular/material/sort'; -import { firstValueFrom, Observable } from 'rxjs'; import { ScanCountResponse } from '../core/model/scan-count'; import { MatMenuModule } from '@angular/material/menu'; import { MatCheckboxModule } from '@angular/material/checkbox'; @@ -155,19 +154,17 @@ export class ScanTableComponent { ? 'user_data' : element ); - columns.push('scan_id'); // always include scan_id + columns.includes('scan_id') ? null : columns.push('scan_id'); // always include scan_id let sessionId = request.session ? request.session._id : ''; console.log('Columns', columns); - return firstValueFrom( - this.scanData.getScanData( + return this.scanData.getScanData( sessionId, request.offset, request.limit, columns, false, { scan_number: this.sorting } - ) - ); + ); }, }); @@ -176,7 +173,7 @@ export class ScanTableComponent { request: () => this.reloadCriteria(), loader: ({ request, abortSignal }): Promise => { let sessionId = request.session ? request.session._id : ''; - return firstValueFrom(this.scanData.getScanCount(sessionId)); + return this.scanData.getScanCount(sessionId); }, }); @@ -209,6 +206,10 @@ export class ScanTableComponent { return data.count; } + // ----------------------------------------- + // -------------Constructor----------------- + // ---------------------------------------- + constructor(private scanData: ScanDataService) { this.tableData = computed(() => this.handleScanData(this.loadScanDataResource.value() || []) @@ -268,7 +269,7 @@ export class ScanTableComponent { console.log('Scan ID', scanId); if (scanId) { console.log('Updating user data', userData); - await firstValueFrom(this.scanData.updateUserData(scanId, userData)); + await this.scanData.updateUserData(scanId, userData); } } } diff --git a/frontend/bec_atlas/src/app/scan-table/side-panel/side-panel.component.spec.ts b/frontend/bec_atlas/src/app/scan-table/side-panel/side-panel.component.spec.ts index 07490d8..fc588df 100644 --- a/frontend/bec_atlas/src/app/scan-table/side-panel/side-panel.component.spec.ts +++ b/frontend/bec_atlas/src/app/scan-table/side-panel/side-panel.component.spec.ts @@ -5,18 +5,21 @@ import { provideHttpClient } from '@angular/common/http'; import { provideHttpClientTesting } from '@angular/common/http/testing'; import { AppConfigService } from '../../app-config.service'; import { provideAnimationsAsync } from '@angular/platform-browser/animations/async'; +import { SessionDataService } from '../../core/remote-data.service'; describe('SidePanelComponent', () => { let component: SidePanelComponent; let fixture: ComponentFixture; + let sessionDataServiceMock: any; + + sessionDataServiceMock = jasmine.createSpyObj('SessionDataService', ['getSessions']); + sessionDataServiceMock.getSessions.and.returnValue(Promise.resolve([{ _id: '1', name: 'test'}])); beforeEach(async () => { await TestBed.configureTestingModule({ providers: [ - provideHttpClient(), - provideHttpClientTesting(), provideAnimationsAsync(), - AppConfigService, + {provide: SessionDataService, useValue: sessionDataServiceMock}, ], imports: [SidePanelComponent], }).compileComponents(); @@ -29,4 +32,14 @@ describe('SidePanelComponent', () => { it('should create', () => { expect(component).toBeTruthy(); }); + + it('should select sessionId', async () => { + spyOn(component.sessionChanged, 'emit'); + component.onSessionChange(null); + expect(component.selectedSession).toBeNull(); + expect(component.sessionChanged.emit).toHaveBeenCalledWith(null); + component.onSessionChange({ _id: '1', name: 'test'}); + expect(component.selectedSession).toEqual({ _id: '1', name: 'test'}); + expect(component.sessionChanged.emit).toHaveBeenCalledWith({ _id: '1', name: 'test'}); + }); }); diff --git a/frontend/bec_atlas/src/app/scan-table/side-panel/side-panel.component.ts b/frontend/bec_atlas/src/app/scan-table/side-panel/side-panel.component.ts index 3dd69e2..cc36211 100644 --- a/frontend/bec_atlas/src/app/scan-table/side-panel/side-panel.component.ts +++ b/frontend/bec_atlas/src/app/scan-table/side-panel/side-panel.component.ts @@ -22,8 +22,10 @@ export class SidePanelComponent { constructor(private sessionDataService: SessionDataService) {} ngOnInit(): void { - this.sessionDataService.getSessions().subscribe((sessions) => { + this.sessionDataService.getSessions().then((sessions) => { this.sessions = sessions; + }).catch((error) => { + console.error('Failed to load sessions', error); }); }