diff --git a/ogWebconsole/src/app/app-routing.module.ts b/ogWebconsole/src/app/app-routing.module.ts index b015f6a..b10a835 100644 --- a/ogWebconsole/src/app/app-routing.module.ts +++ b/ogWebconsole/src/app/app-routing.module.ts @@ -39,6 +39,7 @@ import { import { MainRepositoryViewComponent } from "./components/repositories/main-repository-view/main-repository-view.component"; +import {EnvVarsComponent} from "./components/admin/env-vars/env-vars.component"; const routes: Routes = [ { path: '', redirectTo: 'auth/login', pathMatch: 'full' }, { @@ -48,6 +49,7 @@ const routes: Routes = [ { path: 'dashboard', component: DashboardComponent }, { path: 'admin', component: AdminComponent }, { path: 'users', component: UsersComponent }, + { path: 'env-vars', component: EnvVarsComponent }, { path: 'user-groups', component: RolesComponent }, { path: 'groups', component: GroupsComponent }, { path: 'pxe-images', component: PXEimagesComponent }, diff --git a/ogWebconsole/src/app/app.module.ts b/ogWebconsole/src/app/app.module.ts index eb9aa4c..1bee181 100644 --- a/ogWebconsole/src/app/app.module.ts +++ b/ogWebconsole/src/app/app.module.ts @@ -122,6 +122,7 @@ import { DeployImageComponent } from './components/groups/components/client-main import { MainRepositoryViewComponent } from './components/repositories/main-repository-view/main-repository-view.component'; import { ExecuteCommandOuComponent } from './components/groups/shared/execute-command-ou/execute-command-ou.component'; import { JoyrideModule } from 'ngx-joyride'; +import { EnvVarsComponent } from './components/admin/env-vars/env-vars.component'; @NgModule({ declarations: [ AppComponent, @@ -200,6 +201,7 @@ import { JoyrideModule } from 'ngx-joyride'; DeployImageComponent, MainRepositoryViewComponent, ExecuteCommandOuComponent, + EnvVarsComponent, ], bootstrap: [AppComponent], imports: [BrowserModule, diff --git a/ogWebconsole/src/app/components/admin/env-vars/env-vars.component.css b/ogWebconsole/src/app/components/admin/env-vars/env-vars.component.css new file mode 100644 index 0000000..f47d03e --- /dev/null +++ b/ogWebconsole/src/app/components/admin/env-vars/env-vars.component.css @@ -0,0 +1,38 @@ +.env-settings { + padding: 16px; + + h1 { + margin-bottom: 16px; + } + + .mat-table { + margin-bottom: 16px; + width: 100%; + } + + .value-input { + width: 100%; + } + + .actions { + display: flex; + gap: 16px; + justify-content: flex-end; + margin-top: 16px; + + button { + min-width: 120px; + } + } +} + +.header-container { + display: flex; + justify-content: space-between; + align-items: center; + padding: 10px; +} + +.mat-elevation-z8 { + box-shadow: 0px 0px 0px rgba(0,0,0,0.2); +} diff --git a/ogWebconsole/src/app/components/admin/env-vars/env-vars.component.html b/ogWebconsole/src/app/components/admin/env-vars/env-vars.component.html new file mode 100644 index 0000000..f12f8ce --- /dev/null +++ b/ogWebconsole/src/app/components/admin/env-vars/env-vars.component.html @@ -0,0 +1,29 @@ +
+

Editar Variables de Entorno

+ + + + + Variable + {{ variable.name }} + + + + + Valor + + + + + + + + + + + +
+ + +
+
diff --git a/ogWebconsole/src/app/components/admin/env-vars/env-vars.component.spec.ts b/ogWebconsole/src/app/components/admin/env-vars/env-vars.component.spec.ts new file mode 100644 index 0000000..5c75874 --- /dev/null +++ b/ogWebconsole/src/app/components/admin/env-vars/env-vars.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { EnvVarsComponent } from './env-vars.component'; + +describe('EnvVarsComponent', () => { + let component: EnvVarsComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [EnvVarsComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(EnvVarsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/ogWebconsole/src/app/components/admin/env-vars/env-vars.component.ts b/ogWebconsole/src/app/components/admin/env-vars/env-vars.component.ts new file mode 100644 index 0000000..3516e13 --- /dev/null +++ b/ogWebconsole/src/app/components/admin/env-vars/env-vars.component.ts @@ -0,0 +1,54 @@ +import { Component } from '@angular/core'; +import {HttpClient} from "@angular/common/http"; +import {ToastrService} from "ngx-toastr"; + +@Component({ + selector: 'app-env-vars', + templateUrl: './env-vars.component.html', + styleUrl: './env-vars.component.css' +}) +export class EnvVarsComponent { + baseUrl: string = import.meta.env.NG_APP_BASE_API_URL; + envVars: { name: string; value: string }[] = []; + displayedColumns: string[] = ['name', 'value']; + + private apiUrl = `${this.baseUrl}/env-vars`; + + constructor( + private http: HttpClient, + private toastService: ToastrService, + ) {} + + ngOnInit(): void { + this.loadEnvVars(); + } + + loadEnvVars(): void { + this.http.get<{ vars: Record }>(this.apiUrl).subscribe({ + next: (response) => { + this.envVars = Object.entries(response.vars).map(([name, value]) => ({ name, value })); + }, + error: (err) => { + console.error('Error al cargar las variables de entorno:', err); + this.toastService.error('No se pudieron cargar las variables de entorno.'); + } + }); + } + + saveEnvVars(): void { + const vars = this.envVars.reduce((acc, variable) => { + acc[variable.name] = variable.value; + return acc; + }, {} as Record); + + this.http.post(this.apiUrl, { vars }).subscribe({ + next: () => { + this.toastService.success('Variables de entorno guardadas correctamente.'); + }, + error: (err) => { + console.error('Error al guardar las variables de entorno:', err); + this.toastService.error('No se pudieron cargar las variables de entorno.'); + } + }); + } +} diff --git a/ogWebconsole/src/app/components/groups/components/advanced-search/advanced-search.component.css b/ogWebconsole/src/app/components/groups/components/advanced-search/advanced-search.component.css index 9b0d832..1513308 100644 --- a/ogWebconsole/src/app/components/groups/components/advanced-search/advanced-search.component.css +++ b/ogWebconsole/src/app/components/groups/components/advanced-search/advanced-search.component.css @@ -192,7 +192,7 @@ mat-spinner { max-width: 180px; height: 100%; padding: 10px; - margin: 5px 5px 10px; + margin: 10px 10px 10px 10px; border-radius: 8px; box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); display: flex; diff --git a/ogWebconsole/src/app/components/groups/components/client-main-view/client-main-view.component.html b/ogWebconsole/src/app/components/groups/components/client-main-view/client-main-view.component.html index cc9526d..944b729 100644 --- a/ogWebconsole/src/app/components/groups/components/client-main-view/client-main-view.component.html +++ b/ogWebconsole/src/app/components/groups/components/client-main-view/client-main-view.component.html @@ -69,7 +69,7 @@

Disco {{ disk.diskNumber }}

-

Usado: {{ disk.used }} GB ({{ disk.percentage }}%)

+

Usado: {{ (disk.used).toFixed(2) }} GB ({{ disk.percentage }}%)

Total: {{ disk.total }} GB

diff --git a/ogWebconsole/src/app/components/groups/groups.component.css b/ogWebconsole/src/app/components/groups/groups.component.css index 0028581..750ee2d 100644 --- a/ogWebconsole/src/app/components/groups/groups.component.css +++ b/ogWebconsole/src/app/components/groups/groups.component.css @@ -36,7 +36,7 @@ height: 600px; overflow-y: auto; box-shadow: none !important; - + } .elements-card { @@ -194,7 +194,8 @@ mat-spinner { .result-card { width: 100%; max-width: 250px; - height: 250px; + height: 250px; +} .paginator-container { display: flex; @@ -212,4 +213,4 @@ mat-card { .mat-tooltip { white-space: pre-line; -} \ No newline at end of file +} diff --git a/ogWebconsole/src/app/layout/header/header.component.html b/ogWebconsole/src/app/layout/header/header.component.html index 5ae3284..fb44be4 100644 --- a/ogWebconsole/src/app/layout/header/header.component.html +++ b/ogWebconsole/src/app/layout/header/header.component.html @@ -27,8 +27,10 @@ + -