diff --git a/frontend/projects/shared-meet-components/src/lib/pages/index.ts b/frontend/projects/shared-meet-components/src/lib/pages/index.ts index 58bb016..7e2bf59 100644 --- a/frontend/projects/shared-meet-components/src/lib/pages/index.ts +++ b/frontend/projects/shared-meet-components/src/lib/pages/index.ts @@ -13,3 +13,4 @@ export * from './login/login.component'; export * from './video-room/video-room.component'; export * from './participant-name-form/participant-name-form.component'; export * from './disconnected/disconnected.component'; +export * from './room-recordings/room-recordings.component'; diff --git a/frontend/projects/shared-meet-components/src/lib/pages/room-recordings/room-recordings.component.html b/frontend/projects/shared-meet-components/src/lib/pages/room-recordings/room-recordings.component.html new file mode 100644 index 0000000..f041c27 --- /dev/null +++ b/frontend/projects/shared-meet-components/src/lib/pages/room-recordings/room-recordings.component.html @@ -0,0 +1,8 @@ +@if (!loading) { + +} diff --git a/frontend/src/app/pages/admin-dashboard/admin-dashboard.component.scss b/frontend/projects/shared-meet-components/src/lib/pages/room-recordings/room-recordings.component.scss similarity index 100% rename from frontend/src/app/pages/admin-dashboard/admin-dashboard.component.scss rename to frontend/projects/shared-meet-components/src/lib/pages/room-recordings/room-recordings.component.scss diff --git a/frontend/projects/shared-meet-components/src/lib/pages/room-recordings/room-recordings.component.spec.ts b/frontend/projects/shared-meet-components/src/lib/pages/room-recordings/room-recordings.component.spec.ts new file mode 100644 index 0000000..4eac431 --- /dev/null +++ b/frontend/projects/shared-meet-components/src/lib/pages/room-recordings/room-recordings.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { RoomRecordingsComponent } from './room-recordings.component'; + +describe('RoomRecordingsComponent', () => { + let component: RoomRecordingsComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [RoomRecordingsComponent] + }).compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(RoomRecordingsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/frontend/projects/shared-meet-components/src/lib/pages/room-recordings/room-recordings.component.ts b/frontend/projects/shared-meet-components/src/lib/pages/room-recordings/room-recordings.component.ts new file mode 100644 index 0000000..8a4ac8f --- /dev/null +++ b/frontend/projects/shared-meet-components/src/lib/pages/room-recordings/room-recordings.component.ts @@ -0,0 +1,63 @@ +import { HttpErrorResponse } from '@angular/common/http'; +import { Component, OnInit } from '@angular/core'; +import { HttpService } from '@lib/services'; +import { + OpenViduComponentsModule, + ApiDirectiveModule, + RecordingDeleteRequestedEvent +} from 'openvidu-components-angular'; +import { MeetRecordingInfo } from 'shared-meet-components'; + +@Component({ + selector: 'app-room-recordings', + templateUrl: './room-recordings.component.html', + styleUrls: ['./room-recordings.component.scss'], + standalone: true, + imports: [OpenViduComponentsModule, ApiDirectiveModule] +}) +export class RoomRecordingsComponent implements OnInit { + recordings: MeetRecordingInfo[] = []; + loading = true; + error = ''; + private continuationToken: string | undefined; + + constructor(private httpService: HttpService) {} + + async ngOnInit() { + await this.loadRecordings(); + console.log('Recordings loaded:', this.recordings); + } + + async onLoadMoreRecordingsRequested() { + if (!this.continuationToken) { + console.warn('No more recordings to load'); + return; + } + + await this.loadRecordings(); + } + + async onRefreshRecordingsClicked() { + await this.loadRecordings(); + } + + async onDeleteRecordingClicked(deleteRequest: RecordingDeleteRequestedEvent) { + try { + await this.httpService.deleteRecording(deleteRequest.recordingId!); + } catch (error) { + console.log(error); + } + + await this.loadRecordings(); + } + + private async loadRecordings() { + try { + const { recordings, continuationToken } = await this.httpService.getRecordings(this.continuationToken); + this.recordings = recordings; + this.continuationToken = continuationToken; + } catch (error) { + console.log(error); + } + } +} diff --git a/frontend/src/app/pages/admin-dashboard/admin-dashboard.component.html b/frontend/src/app/pages/admin-dashboard/admin-dashboard.component.html deleted file mode 100644 index 80033fb..0000000 --- a/frontend/src/app/pages/admin-dashboard/admin-dashboard.component.html +++ /dev/null @@ -1,13 +0,0 @@ -@if (!loading && !isParticipantLoggedIn) { - -} - -@if (!loading && isParticipantLoggedIn) { - -} diff --git a/frontend/src/app/pages/admin-dashboard/admin-dashboard.component.spec.ts b/frontend/src/app/pages/admin-dashboard/admin-dashboard.component.spec.ts deleted file mode 100644 index 2b8661a..0000000 --- a/frontend/src/app/pages/admin-dashboard/admin-dashboard.component.spec.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { AdminDashboardComponent } from './admin-dashboard.component'; - -describe('AdminDashboardComponent', () => { - let component: AdminDashboardComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - imports: [AdminDashboardComponent] -}).compileComponents(); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(AdminDashboardComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/frontend/src/app/pages/admin-dashboard/admin-dashboard.component.ts b/frontend/src/app/pages/admin-dashboard/admin-dashboard.component.ts deleted file mode 100644 index b4d2cca..0000000 --- a/frontend/src/app/pages/admin-dashboard/admin-dashboard.component.ts +++ /dev/null @@ -1,97 +0,0 @@ -import { Component, OnDestroy, OnInit } from '@angular/core'; -import { HttpService } from '@services/http.service'; -import { StorageAppService } from '@services/storage.service'; -import { OpenViduComponentsModule, ApiDirectiveModule } from 'openvidu-components-angular'; - -@Component({ - selector: 'app-admin-dashboard', - templateUrl: './admin-dashboard.component.html', - styleUrls: ['./admin-dashboard.component.scss'], - standalone: true, - imports: [OpenViduComponentsModule, ApiDirectiveModule] -}) -export class AdminDashboardComponent implements OnInit, OnDestroy { - recordings = []; - loading = true; - isParticipantLoggedIn = false; - error: any; - private continuationToken: string; - constructor( - private httpService: HttpService, - private storageService: StorageAppService - ) {} - - async ngOnInit() { - try { - const adminCredentials = this.storageService.getAdminCredentials(); - - if (adminCredentials) { - await this.onLoginClicked(adminCredentials); - } - } catch (error) { - this.storageService.clearAdminCredentials(); - } - - this.loading = false; - } - - ngOnDestroy() { - this.onLogoutClicked(); - } - - async onLoginClicked(credentials: { username: string; password: string }) { - try { - await this.httpService.adminLogin(credentials); - this.storageService.setAdminCredentials(credentials); - const { recordings, continuationToken } = await this.httpService.getRecordings(); - this.recordings = recordings; - this.continuationToken = continuationToken; - this.isParticipantLoggedIn = true; - } catch (error) { - console.log(error); - this.onLogoutClicked(); - this.error = error; - } - } - - async onLogoutClicked() { - try { - this.isParticipantLoggedIn = false; - this.storageService.clearAdminCredentials(); - this.recordings = []; - this.continuationToken = null; - await this.httpService.adminLogout(); - } catch (error) { - console.error(error); - } - } - - async onLoadMoreRecordingsRequested() { - if (!this.continuationToken) return console.warn('No more recordings to load'); - - const response = await this.httpService.getRecordings(this.continuationToken); - this.recordings = response.recordings; - this.continuationToken = response.continuationToken; - } - - async onRefreshRecordingsClicked() { - try { - const response = await this.httpService.getRecordings(); - this.recordings = response.recordings; - this.continuationToken = response.continuationToken; - } catch (error) { - this.onLogoutClicked(); - } - } - - async onDeleteRecordingClicked(recordingId: string) { - try { - await this.httpService.deleteRecordingByAdmin(recordingId); - const response = await this.httpService.getRecordings(); - this.recordings = response.recordings; - this.continuationToken = response.continuationToken; - } catch (error) { - console.error(error); - } - } -}