From a3560ee845cce5bf80e9ad39d397e2d1b77f1a3b Mon Sep 17 00:00:00 2001 From: juancarmore Date: Wed, 2 Jul 2025 20:33:09 +0200 Subject: [PATCH] frontend: add loading state handling in DevelopersComponent --- .../developers/developers.component.html | 255 ++++++++++-------- .../developers/developers.component.ts | 14 +- .../users-permissions.component.ts | 2 +- 3 files changed, 146 insertions(+), 125 deletions(-) diff --git a/frontend/projects/shared-meet-components/src/lib/pages/console/developers/developers.component.html b/frontend/projects/shared-meet-components/src/lib/pages/console/developers/developers.component.html index fec017f..3adff39 100644 --- a/frontend/projects/shared-meet-components/src/lib/pages/console/developers/developers.component.html +++ b/frontend/projects/shared-meet-components/src/lib/pages/console/developers/developers.component.html @@ -7,48 +7,65 @@

Everyting you need to embed OpenVidu Meet in your applications.

-
- - - -
- vpn_key -
- API KEY - Generate and manage your API key for REST API access -
- - - @if (apiKeyData()) { -
- - API Key - - - - -
- -
+ @if (isLoading()) { +
+
+
+
+ settings +

Loading Settings

+

Please wait while we fetch your settings...

+
- + + +
+ vpn_key +
+ API KEY + Generate and manage your API key for REST API access +
+ + + @if (apiKeyData()) { +
+ + API Key + + + + +
+ +
+
+ + - } @else { -
-

No API Key Generated

-

Generate an API key to access OpenVidu Meet REST API endpoints.

- +
+ } +
+ + @if (apiKeyData()) { + + -
+ + } - + - @if (apiKeyData()) { - - - - - } - - - - - -
- webhook -
- WEBHOOKS - Configure webhook notifications for real-time event updates -
- - -
- -

Webhook Notifications

-
- Enable webhook notifications - + + + +
+ webhook
+ WEBHOOKS + Configure webhook notifications for real-time event updates +
- -

Webhook URL

-

- Enter the URL where you want to receive webhook notifications. -

- - Webhook URL - - link - @if (webhookForm.get('url')?.hasError('required')) { - Webhook URL is required - } - @if (webhookForm.get('url')?.hasError('pattern')) { - Please enter a valid HTTP(S) URL - } - + + + +

Webhook Notifications

+
+ Enable webhook notifications + +
+ +

Webhook URL

+

+ Enter the URL where you want to receive webhook notifications. +

+ + Webhook URL + + link + @if (webhookForm.get('url')?.hasError('required')) { + Webhook URL is required + } + @if (webhookForm.get('url')?.hasError('pattern')) { + Please enter a valid HTTP(S) URL + } + - - + - -
+ + - - - - -
-
+ + + + +
+
+ }
diff --git a/frontend/projects/shared-meet-components/src/lib/pages/console/developers/developers.component.ts b/frontend/projects/shared-meet-components/src/lib/pages/console/developers/developers.component.ts index 6c519e1..63292da 100644 --- a/frontend/projects/shared-meet-components/src/lib/pages/console/developers/developers.component.ts +++ b/frontend/projects/shared-meet-components/src/lib/pages/console/developers/developers.component.ts @@ -1,15 +1,13 @@ import { Clipboard } from '@angular/cdk/clipboard'; -import { CommonModule } from '@angular/common'; import { Component, OnInit, signal } from '@angular/core'; import { FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms'; import { MatButtonModule } from '@angular/material/button'; import { MatCardModule } from '@angular/material/card'; -import { MatDividerModule } from '@angular/material/divider'; import { MatFormFieldModule } from '@angular/material/form-field'; import { MatIconModule } from '@angular/material/icon'; import { MatInputModule } from '@angular/material/input'; +import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; import { MatSlideToggleModule } from '@angular/material/slide-toggle'; -import { MatSnackBarModule } from '@angular/material/snack-bar'; import { MatTooltipModule } from '@angular/material/tooltip'; import { AuthService, GlobalPreferencesService, NotificationService } from '@lib/services'; import { MeetApiKey } from '@lib/typings/ce'; @@ -18,22 +16,22 @@ import { MeetApiKey } from '@lib/typings/ce'; selector: 'ov-developers-settings', standalone: true, imports: [ - CommonModule, MatCardModule, MatButtonModule, MatIconModule, MatInputModule, MatFormFieldModule, MatSlideToggleModule, - MatSnackBarModule, MatTooltipModule, - MatDividerModule, - ReactiveFormsModule + ReactiveFormsModule, + MatProgressSpinnerModule ], templateUrl: './developers.component.html', styleUrl: './developers.component.scss' }) export class DevelopersSettingsComponent implements OnInit { + isLoading = signal(true); + apiKeyData = signal(undefined); showApiKey = signal(false); @@ -66,8 +64,10 @@ export class DevelopersSettingsComponent implements OnInit { } async ngOnInit() { + this.isLoading.set(true); await this.loadApiKeyData(); await this.loadWebhookConfig(); + this.isLoading.set(false); } // ===== API KEY METHODS ===== diff --git a/frontend/projects/shared-meet-components/src/lib/pages/console/users-permissions/users-permissions.component.ts b/frontend/projects/shared-meet-components/src/lib/pages/console/users-permissions/users-permissions.component.ts index 2e54575..5722cfd 100644 --- a/frontend/projects/shared-meet-components/src/lib/pages/console/users-permissions/users-permissions.component.ts +++ b/frontend/projects/shared-meet-components/src/lib/pages/console/users-permissions/users-permissions.component.ts @@ -31,7 +31,7 @@ import { AuthMode } from '@lib/typings/ce'; styleUrl: './users-permissions.component.scss' }) export class UsersPermissionsComponent implements OnInit { - isLoading = signal(false); + isLoading = signal(true); adminCredentialsForm = new FormGroup({ adminUsername: new FormControl({ value: '', disabled: true }, [Validators.required]),