From 8959d4721efabffc1e34b456523c7fa4a094d2a0 Mon Sep 17 00:00:00 2001 From: juancarmore Date: Sat, 14 Jun 2025 13:53:20 +0200 Subject: [PATCH] frontend: create share recording dialog component --- .../basic-dialog}/dialog.component.html | 0 .../basic-dialog}/dialog.component.scss | 0 .../basic-dialog}/dialog.component.spec.ts | 0 .../basic-dialog}/dialog.component.ts | 2 +- .../share-recording-dialog.component.html | 26 +++++++++ .../share-recording-dialog.component.scss | 36 ++++++++++++ .../share-recording-dialog.component.spec.ts | 22 ++++++++ .../share-recording-dialog.component.ts | 55 +++++++++++++++++++ .../src/lib/components/index.ts | 3 +- .../notification/notification.service.ts | 2 +- 10 files changed, 143 insertions(+), 3 deletions(-) rename frontend/projects/shared-meet-components/src/lib/components/{dialog => dialogs/basic-dialog}/dialog.component.html (100%) rename frontend/projects/shared-meet-components/src/lib/components/{dialog => dialogs/basic-dialog}/dialog.component.scss (100%) rename frontend/projects/shared-meet-components/src/lib/components/{dialog => dialogs/basic-dialog}/dialog.component.spec.ts (100%) rename frontend/projects/shared-meet-components/src/lib/components/{dialog => dialogs/basic-dialog}/dialog.component.ts (96%) create mode 100644 frontend/projects/shared-meet-components/src/lib/components/dialogs/share-recording-dialog/share-recording-dialog.component.html create mode 100644 frontend/projects/shared-meet-components/src/lib/components/dialogs/share-recording-dialog/share-recording-dialog.component.scss create mode 100644 frontend/projects/shared-meet-components/src/lib/components/dialogs/share-recording-dialog/share-recording-dialog.component.spec.ts create mode 100644 frontend/projects/shared-meet-components/src/lib/components/dialogs/share-recording-dialog/share-recording-dialog.component.ts diff --git a/frontend/projects/shared-meet-components/src/lib/components/dialog/dialog.component.html b/frontend/projects/shared-meet-components/src/lib/components/dialogs/basic-dialog/dialog.component.html similarity index 100% rename from frontend/projects/shared-meet-components/src/lib/components/dialog/dialog.component.html rename to frontend/projects/shared-meet-components/src/lib/components/dialogs/basic-dialog/dialog.component.html diff --git a/frontend/projects/shared-meet-components/src/lib/components/dialog/dialog.component.scss b/frontend/projects/shared-meet-components/src/lib/components/dialogs/basic-dialog/dialog.component.scss similarity index 100% rename from frontend/projects/shared-meet-components/src/lib/components/dialog/dialog.component.scss rename to frontend/projects/shared-meet-components/src/lib/components/dialogs/basic-dialog/dialog.component.scss diff --git a/frontend/projects/shared-meet-components/src/lib/components/dialog/dialog.component.spec.ts b/frontend/projects/shared-meet-components/src/lib/components/dialogs/basic-dialog/dialog.component.spec.ts similarity index 100% rename from frontend/projects/shared-meet-components/src/lib/components/dialog/dialog.component.spec.ts rename to frontend/projects/shared-meet-components/src/lib/components/dialogs/basic-dialog/dialog.component.spec.ts diff --git a/frontend/projects/shared-meet-components/src/lib/components/dialog/dialog.component.ts b/frontend/projects/shared-meet-components/src/lib/components/dialogs/basic-dialog/dialog.component.ts similarity index 96% rename from frontend/projects/shared-meet-components/src/lib/components/dialog/dialog.component.ts rename to frontend/projects/shared-meet-components/src/lib/components/dialogs/basic-dialog/dialog.component.ts index b82aa4c..7c94f1e 100644 --- a/frontend/projects/shared-meet-components/src/lib/components/dialog/dialog.component.ts +++ b/frontend/projects/shared-meet-components/src/lib/components/dialogs/basic-dialog/dialog.component.ts @@ -1,7 +1,7 @@ import { ChangeDetectionStrategy, Component, Inject, inject } from '@angular/core'; import { MatButtonModule } from '@angular/material/button'; import { MAT_DIALOG_DATA, MatDialogActions, MatDialogContent, MatDialogRef } from '@angular/material/dialog'; -import type { DialogOptions } from '../../models'; +import type { DialogOptions } from '../../../models'; @Component({ selector: 'ov-dialog', diff --git a/frontend/projects/shared-meet-components/src/lib/components/dialogs/share-recording-dialog/share-recording-dialog.component.html b/frontend/projects/shared-meet-components/src/lib/components/dialogs/share-recording-dialog/share-recording-dialog.component.html new file mode 100644 index 0000000..8ac5133 --- /dev/null +++ b/frontend/projects/shared-meet-components/src/lib/components/dialogs/share-recording-dialog/share-recording-dialog.component.html @@ -0,0 +1,26 @@ +

Share Recording

+ + + Private (authenticated users) + Public (anyone with the link) + + +
+ +
+ + @if (recordingUrl) { +
+ + Shareable URL + + + +
+ } +
+ + + diff --git a/frontend/projects/shared-meet-components/src/lib/components/dialogs/share-recording-dialog/share-recording-dialog.component.scss b/frontend/projects/shared-meet-components/src/lib/components/dialogs/share-recording-dialog/share-recording-dialog.component.scss new file mode 100644 index 0000000..079ec8c --- /dev/null +++ b/frontend/projects/shared-meet-components/src/lib/components/dialogs/share-recording-dialog/share-recording-dialog.component.scss @@ -0,0 +1,36 @@ +.dialog-content { + display: flex; + flex-direction: column; + gap: 20px; + min-width: 100%; + + mat-radio-group { + display: flex; + flex-direction: column; + gap: 10px; + + mat-radio-button { + color: var(--ov-text-primary-color); + } + } +} + +.generate-btn-container { + display: flex; + justify-content: flex-start; +} + +.recording-url-container { + display: flex; + flex-direction: column; + gap: 10px; +} + +.url-field { + width: 100%; + + input { + font-size: 14px; + color: var(--ov-text-primary-color); + } +} diff --git a/frontend/projects/shared-meet-components/src/lib/components/dialogs/share-recording-dialog/share-recording-dialog.component.spec.ts b/frontend/projects/shared-meet-components/src/lib/components/dialogs/share-recording-dialog/share-recording-dialog.component.spec.ts new file mode 100644 index 0000000..cd9c93a --- /dev/null +++ b/frontend/projects/shared-meet-components/src/lib/components/dialogs/share-recording-dialog/share-recording-dialog.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ShareRecordingDialogComponent } from './share-recording-dialog.component'; + +describe('ShareRecordingDialogComponent', () => { + let component: ShareRecordingDialogComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ShareRecordingDialogComponent] + }).compileComponents(); + + fixture = TestBed.createComponent(ShareRecordingDialogComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/frontend/projects/shared-meet-components/src/lib/components/dialogs/share-recording-dialog/share-recording-dialog.component.ts b/frontend/projects/shared-meet-components/src/lib/components/dialogs/share-recording-dialog/share-recording-dialog.component.ts new file mode 100644 index 0000000..af65efd --- /dev/null +++ b/frontend/projects/shared-meet-components/src/lib/components/dialogs/share-recording-dialog/share-recording-dialog.component.ts @@ -0,0 +1,55 @@ +import { Component, Inject } from '@angular/core'; +import { FormsModule } from '@angular/forms'; +import { MatButtonModule } from '@angular/material/button'; +import { + MAT_DIALOG_DATA, + MatDialogActions, + MatDialogClose, + MatDialogContent, + MatDialogTitle +} from '@angular/material/dialog'; +import { MatFormFieldModule } from '@angular/material/form-field'; +import { MatIconModule } from '@angular/material/icon'; +import { MatInputModule } from '@angular/material/input'; +import { MatRadioModule } from '@angular/material/radio'; +import { HttpService } from 'shared-meet-components'; + +@Component({ + selector: 'ov-share-recording-dialog', + standalone: true, + imports: [ + FormsModule, + MatRadioModule, + MatFormFieldModule, + MatInputModule, + MatButtonModule, + MatIconModule, + MatDialogTitle, + MatDialogContent, + MatDialogActions, + MatDialogClose + ], + templateUrl: './share-recording-dialog.component.html', + styleUrl: './share-recording-dialog.component.scss' +}) +export class ShareRecordingDialogComponent { + accessType: 'private' | 'public' = 'private'; + recordingUrl: string | undefined; + + constructor( + @Inject(MAT_DIALOG_DATA) public data: { recordingId: string }, + private httpService: HttpService + ) {} + + async getRecordingUrl() { + const privateAccess = this.accessType === 'private'; + const { url } = await this.httpService.generateRecordingUrl(this.data.recordingId, privateAccess); + this.recordingUrl = url; + } + + copyToClipboard() { + if (this.recordingUrl) { + navigator.clipboard.writeText(this.recordingUrl); + } + } +} diff --git a/frontend/projects/shared-meet-components/src/lib/components/index.ts b/frontend/projects/shared-meet-components/src/lib/components/index.ts index fad1122..cccad47 100644 --- a/frontend/projects/shared-meet-components/src/lib/components/index.ts +++ b/frontend/projects/shared-meet-components/src/lib/components/index.ts @@ -3,7 +3,8 @@ export * from './cards/toggle-card/toggle-card.component'; export * from './cards/selection-card/selection-card.component'; export * from './cards/pro-feature/pro-feature.component'; export * from './console-nav/console-nav.component'; -export * from './dialog/dialog.component'; +export * from './dialogs/basic-dialog/dialog.component'; +export * from './dialogs/share-recording-dialog/share-recording-dialog.component'; export * from './dynamic-grid/dynamic-grid.component'; export * from './generics/list/list.component'; export * from './spinner/spinner.component'; diff --git a/frontend/projects/shared-meet-components/src/lib/services/notification/notification.service.ts b/frontend/projects/shared-meet-components/src/lib/services/notification/notification.service.ts index 99d8794..36ae4f0 100644 --- a/frontend/projects/shared-meet-components/src/lib/services/notification/notification.service.ts +++ b/frontend/projects/shared-meet-components/src/lib/services/notification/notification.service.ts @@ -4,7 +4,7 @@ import { Injectable } from '@angular/core'; import { MatDialog } from '@angular/material/dialog'; import { MatSnackBar } from '@angular/material/snack-bar'; import { SpinnerComponent } from '../../components/spinner/spinner.component'; -import { DialogComponent } from '../../components/dialog/dialog.component'; +import { DialogComponent } from '../../components/dialogs/basic-dialog/dialog.component'; import { DialogOptions } from '../../models'; @Injectable({