diff --git a/ogWebconsole/src/app/app-routing.module.ts b/ogWebconsole/src/app/app-routing.module.ts
index 084a8e1..35e5640 100644
--- a/ogWebconsole/src/app/app-routing.module.ts
+++ b/ogWebconsole/src/app/app-routing.module.ts
@@ -9,6 +9,7 @@ import { AdminComponent } from './components/pages/admin/admin.component';
import { UsersComponent } from './components/pages/admin/users/users/users.component';
import { RolesComponent } from './components/pages/admin/roles/roles/roles.component';
import { GroupsComponent } from './components/groups/groups.component';
+import { ImagesComponent } from './components/images/images/images.component';
const routes: Routes = [
{ path: '', redirectTo: 'auth/login', pathMatch: 'full' },
{
@@ -20,6 +21,7 @@ const routes: Routes = [
{ path: 'users', component: UsersComponent },
{ path: 'user-groups', component: RolesComponent },
{ path: 'groups', component: GroupsComponent },
+ { path: 'images', component: ImagesComponent },
],
},
{
diff --git a/ogWebconsole/src/app/app.module.ts b/ogWebconsole/src/app/app.module.ts
index 9ac672f..355f949 100644
--- a/ogWebconsole/src/app/app.module.ts
+++ b/ogWebconsole/src/app/app.module.ts
@@ -71,6 +71,8 @@ import { ClassroomViewDialogComponent } from './components/groups/classroom-view
import {MatPaginator} from "@angular/material/paginator";
import { SaveFiltersDialogComponent } from './components/groups/save-filters-dialog/save-filters-dialog.component';
import { AcctionsModalComponent } from './components/groups/acctions-modal/acctions-modal.component';
+import { ImagesComponent } from './components/images/images/images.component';
+import { CreateImageComponent } from './components/images/images/create-image/create-image/create-image.component';
@NgModule({
declarations: [
@@ -104,7 +106,9 @@ import { AcctionsModalComponent } from './components/groups/acctions-modal/accti
LegendComponent,
ClassroomViewDialogComponent,
SaveFiltersDialogComponent,
- AcctionsModalComponent
+ AcctionsModalComponent,
+ ImagesComponent,
+ CreateImageComponent
],
bootstrap: [AppComponent],
imports: [BrowserModule,
diff --git a/ogWebconsole/src/app/components/images/images/create-image/create-image/create-image.component.css b/ogWebconsole/src/app/components/images/images/create-image/create-image/create-image.component.css
new file mode 100644
index 0000000..4525d20
--- /dev/null
+++ b/ogWebconsole/src/app/components/images/images/create-image/create-image/create-image.component.css
@@ -0,0 +1,4 @@
+.full-width {
+ width: 100%;
+ }
+
\ No newline at end of file
diff --git a/ogWebconsole/src/app/components/images/images/create-image/create-image/create-image.component.html b/ogWebconsole/src/app/components/images/images/create-image/create-image/create-image.component.html
new file mode 100644
index 0000000..5f6cfc4
--- /dev/null
+++ b/ogWebconsole/src/app/components/images/images/create-image/create-image/create-image.component.html
@@ -0,0 +1,15 @@
+
Añadir imagen ogLive
+
+
+ Nombre
+
+
+
+ URL
+
+
+
+
+
+
+
diff --git a/ogWebconsole/src/app/components/images/images/create-image/create-image/create-image.component.spec.ts b/ogWebconsole/src/app/components/images/images/create-image/create-image/create-image.component.spec.ts
new file mode 100644
index 0000000..3949532
--- /dev/null
+++ b/ogWebconsole/src/app/components/images/images/create-image/create-image/create-image.component.spec.ts
@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { CreateImageComponent } from './create-image.component';
+
+describe('CreateImageComponent', () => {
+ let component: CreateImageComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ declarations: [CreateImageComponent]
+ })
+ .compileComponents();
+
+ fixture = TestBed.createComponent(CreateImageComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/ogWebconsole/src/app/components/images/images/create-image/create-image/create-image.component.ts b/ogWebconsole/src/app/components/images/images/create-image/create-image/create-image.component.ts
new file mode 100644
index 0000000..227a730
--- /dev/null
+++ b/ogWebconsole/src/app/components/images/images/create-image/create-image/create-image.component.ts
@@ -0,0 +1,45 @@
+import { HttpClient } from '@angular/common/http';
+import { Component, Inject } from '@angular/core';
+import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
+import { ToastrService } from 'ngx-toastr';
+
+@Component({
+ selector: 'app-create-image',
+ templateUrl: './create-image.component.html',
+ styleUrl: './create-image.component.css'
+})
+export class CreateImageComponent {
+ name: string = '';
+ downloadUrl: string = '';
+
+ constructor(
+ private toastService: ToastrService,
+ private http: HttpClient,
+ public dialogRef: MatDialogRef,
+ @Inject(MAT_DIALOG_DATA) public data: any
+ ) { }
+
+ onNoClick(): void {
+ this.dialogRef.close();
+ }
+
+ addOgLive(): void {
+ const payload = {
+ name: this.name,
+ downloadUrl: this.downloadUrl
+ };
+
+ this.http.post('http://127.0.0.1:8080/og-lives', payload)
+ .subscribe({
+ next: (response) => {
+ console.log('Success:', response);
+ this.toastService.success('Image created successfully');
+ this.dialogRef.close();
+ },
+ error: (error) => {
+ console.error('Error:', error);
+ this.toastService.error(' Error creating image');
+ }
+ });
+ }
+}
diff --git a/ogWebconsole/src/app/components/images/images/images.component.css b/ogWebconsole/src/app/components/images/images/images.component.css
new file mode 100644
index 0000000..ae89817
--- /dev/null
+++ b/ogWebconsole/src/app/components/images/images/images.component.css
@@ -0,0 +1,60 @@
+.header-container {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ height: 100px;
+ padding: 10px;
+}
+
+.title {
+ font-size: 24px;
+}
+
+.images-button-row {
+ display: flex;
+ justify-content: flex-start;
+ margin-top: 16px;
+}
+
+button {
+ margin-left: 10px;
+ margin-bottom: 20px;
+}
+
+.divider {
+ margin: 20px 0;
+}
+
+.lists-container {
+ padding: 16px;
+}
+
+.imagesLists-container {
+ flex: 1;
+}
+
+.card.unidad-card {
+ height: 100%;
+ box-sizing: border-box;
+}
+
+.image-container {
+ display: flex;
+ align-items: center;
+ margin-bottom: 16px;
+ border-bottom: 1px solid rgba(122, 122, 122, 0.555);
+}
+
+.image-container h4 {
+ margin: 0;
+ flex: 1;
+}
+
+.mat-icon-button {
+ margin-left: 16px;
+ align-self: center;
+}
+
+.mat-menu {
+ min-width: 160px;
+}
diff --git a/ogWebconsole/src/app/components/images/images/images.component.html b/ogWebconsole/src/app/components/images/images/images.component.html
new file mode 100644
index 0000000..8018cd8
--- /dev/null
+++ b/ogWebconsole/src/app/components/images/images/images.component.html
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+ Imágenes
+
+ No hay imágenes disponibles.
+
+
+
{{ image.name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ogWebconsole/src/app/components/images/images/images.component.spec.ts b/ogWebconsole/src/app/components/images/images/images.component.spec.ts
new file mode 100644
index 0000000..53bd222
--- /dev/null
+++ b/ogWebconsole/src/app/components/images/images/images.component.spec.ts
@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { ImagesComponent } from './images.component';
+
+describe('ImagesComponent', () => {
+ let component: ImagesComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ declarations: [ImagesComponent]
+ })
+ .compileComponents();
+
+ fixture = TestBed.createComponent(ImagesComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/ogWebconsole/src/app/components/images/images/images.component.ts b/ogWebconsole/src/app/components/images/images/images.component.ts
new file mode 100644
index 0000000..196b020
--- /dev/null
+++ b/ogWebconsole/src/app/components/images/images/images.component.ts
@@ -0,0 +1,74 @@
+import { Component, OnInit } from '@angular/core';
+import { MatDialog } from '@angular/material/dialog';
+import { HttpClient } from '@angular/common/http';
+import { CreateImageComponent } from './create-image/create-image/create-image.component';
+
+@Component({
+ selector: 'app-images',
+ templateUrl: './images.component.html',
+ styleUrls: ['./images.component.css']
+})
+export class ImagesComponent implements OnInit {
+ images: { downloadUrl: string; name: string; uuid: string }[] = [];
+
+ private apiUrl = 'http://127.0.0.1:8080/og-lives';
+
+ constructor(public dialog: MatDialog, private http: HttpClient) {}
+
+ ngOnInit(): void {
+ this.loadImages();
+ }
+
+ loadImages(): void {
+ this.http.get(`${this.apiUrl}?page=1&itemsPerPage=30`).subscribe({
+ next: (response) => {
+ this.images = response['hydra:member'].map((item: any) => ({
+ downloadUrl: item.downloadUrl,
+ name: item.name,
+ uuid: item.uuid
+ }));
+ },
+ error: (error) => {
+ console.error('Error al cargar las imágenes:', error);
+ }
+ });
+ }
+
+ addImage(): void {
+ const dialogRef = this.dialog.open(CreateImageComponent, {
+ width: '400px'
+ });
+
+ dialogRef.afterClosed().subscribe(result => {
+ console.log('The dialog was closed');
+ this.loadImages(); // Opcional: recargar imágenes después de añadir una nueva
+ });
+ }
+
+ showInfo(image: any): void {
+ // Implementar lógica para mostrar información
+ console.log('Mostrar info:', image);
+ }
+
+ toggleStatus(image: any): void {
+ // Implementar lógica para montar/desmontar
+ console.log('Montar/Desmontar:', image);
+ }
+
+ deleteImage(uuid: string): void {
+ this.http.delete(`${this.apiUrl}/${uuid}`).subscribe({
+ next: () => {
+ console.log('Imagen eliminada');
+ this.loadImages(); // Recargar imágenes después de eliminar
+ },
+ error: (error) => {
+ console.error('Error al eliminar la imagen:', error);
+ }
+ });
+ }
+
+ editImage(image: any): void {
+ // Implementar lógica para editar imagen
+ console.log('Editar:', image);
+ }
+}
diff --git a/ogWebconsole/src/app/components/layout/sidebar/sidebar.component.css b/ogWebconsole/src/app/components/layout/sidebar/sidebar.component.css
index d1640bb..23b5659 100644
--- a/ogWebconsole/src/app/components/layout/sidebar/sidebar.component.css
+++ b/ogWebconsole/src/app/components/layout/sidebar/sidebar.component.css
@@ -41,4 +41,17 @@ mat-icon {
mat-nav-list {
width: 0px;
}
-}
\ No newline at end of file
+}
+
+.mat-nav-list .mat-list-item .entry {
+ display: flex;
+ align-items: center;
+}
+
+.mat-nav-list .mat-list-item .entry mat-icon {
+ margin-right: 8px;
+}
+
+.mat-nav-list .mat-list-item .sub-menu-item {
+ padding-left: 32px;
+}
diff --git a/ogWebconsole/src/app/components/layout/sidebar/sidebar.component.html b/ogWebconsole/src/app/components/layout/sidebar/sidebar.component.html
index ef5da5d..ed96218 100644
--- a/ogWebconsole/src/app/components/layout/sidebar/sidebar.component.html
+++ b/ogWebconsole/src/app/components/layout/sidebar/sidebar.component.html
@@ -13,44 +13,68 @@
Grupos
+
chevron_right
Acciones
-
-
+
+
+
+
desktop_windows
- Imágenes
+ ogBoot
+
+
+
+
+
+ chevron_right
+ ogLive
+
+
+
+
+ chevron_right
+ PXE
+
+
+
+
-
+
settings_input_component
Componentes
+
-
+
warehouse
Repositorios
+
-
+
list
Menús
+
-
+
search
Buscar
+
-
+
calendar_month
Calendarios
diff --git a/ogWebconsole/src/app/components/layout/sidebar/sidebar.component.ts b/ogWebconsole/src/app/components/layout/sidebar/sidebar.component.ts
index 4beab49..46b38dd 100644
--- a/ogWebconsole/src/app/components/layout/sidebar/sidebar.component.ts
+++ b/ogWebconsole/src/app/components/layout/sidebar/sidebar.component.ts
@@ -14,6 +14,11 @@ export class SidebarComponent {
isSuperAdmin: boolean = false;
username: string = "";
decodedToken: any = "";
+ showSubList: boolean = false;
+
+ toggleSubList() {
+ this.showSubList = !this.showSubList;
+ }
constructor(public dialog: MatDialog) {}
ngOnInit(): void {