From 151a3223c263ba046f8b88aa1d5e43f7086d5141 Mon Sep 17 00:00:00 2001 From: apuente Date: Wed, 3 Jul 2024 23:49:04 +0200 Subject: [PATCH] =?UTF-8?q?Visualizaci=C3=B3n=20de=20aulas=20y=20clientes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../classroom-view.component.css | 47 +++++++++++++++ .../classroom-view.component.html | 14 +++++ .../classroom-view.component.spec.ts | 23 ++++++++ .../classroom-view.component.ts | 57 +++++++++++++++++++ 4 files changed, 141 insertions(+) create mode 100644 ogWebconsole/src/app/components/groups/classroom-view/classroom-view.component.css create mode 100644 ogWebconsole/src/app/components/groups/classroom-view/classroom-view.component.html create mode 100644 ogWebconsole/src/app/components/groups/classroom-view/classroom-view.component.spec.ts create mode 100644 ogWebconsole/src/app/components/groups/classroom-view/classroom-view.component.ts diff --git a/ogWebconsole/src/app/components/groups/classroom-view/classroom-view.component.css b/ogWebconsole/src/app/components/groups/classroom-view/classroom-view.component.css new file mode 100644 index 0000000..aaf3365 --- /dev/null +++ b/ogWebconsole/src/app/components/groups/classroom-view/classroom-view.component.css @@ -0,0 +1,47 @@ +/* src/app/classroom-view/classroom-view.component.css */ + +.classroom { + display: flex; + flex-direction: column; + align-items: center; +} + +.classroom-group { + margin: 10px; + width: 800px; + background-color: #fafafa; +} + +.organizational-unit-name { + font-weight: bold; + font-size: 18px; + margin-bottom: 10px; +} + +.client-row { + display: flex; + justify-content: center; + flex-wrap: wrap; + gap: 10px; +} + +.client-container { + margin: 5px; +} + +.client-box { + width: 100px; + height: 100px; + background-color: lightblue; + display: flex; + justify-content: center; + align-items: center; + border: 1px solid #000; + box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.1); + border-radius: 5px; + cursor: pointer; +} + +.client-box p { + margin: 0; +} diff --git a/ogWebconsole/src/app/components/groups/classroom-view/classroom-view.component.html b/ogWebconsole/src/app/components/groups/classroom-view/classroom-view.component.html new file mode 100644 index 0000000..cf19f6e --- /dev/null +++ b/ogWebconsole/src/app/components/groups/classroom-view/classroom-view.component.html @@ -0,0 +1,14 @@ +
+
+ +

{{ group.organizationalUnitName }}

+
+
+
+

{{ client.name }}

+
+
+
+
+
+
diff --git a/ogWebconsole/src/app/components/groups/classroom-view/classroom-view.component.spec.ts b/ogWebconsole/src/app/components/groups/classroom-view/classroom-view.component.spec.ts new file mode 100644 index 0000000..ce539a8 --- /dev/null +++ b/ogWebconsole/src/app/components/groups/classroom-view/classroom-view.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ClassroomViewComponent } from './classroom-view.component'; + +describe('ClassroomViewComponent', () => { + let component: ClassroomViewComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ClassroomViewComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(ClassroomViewComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/ogWebconsole/src/app/components/groups/classroom-view/classroom-view.component.ts b/ogWebconsole/src/app/components/groups/classroom-view/classroom-view.component.ts new file mode 100644 index 0000000..48f799b --- /dev/null +++ b/ogWebconsole/src/app/components/groups/classroom-view/classroom-view.component.ts @@ -0,0 +1,57 @@ +// src/app/classroom-view/classroom-view.component.ts + +import { Component, Input, OnInit } from '@angular/core'; + +interface GroupedClients { + organizationalUnitName: string; + clientRows: any[][]; +} + +@Component({ + selector: 'app-classroom-view', + templateUrl: './classroom-view.component.html', + styleUrls: ['./classroom-view.component.css'] +}) +export class ClassroomViewComponent implements OnInit { + @Input() clients: any[] = []; + @Input() pcInTable: number = 3; + groupedClients: GroupedClients[] = []; + + constructor() {} + + ngOnInit(): void { + this.groupClientsByOrganizationalUnit(); + } + + ngOnChanges(): void { + this.groupClientsByOrganizationalUnit(); + } + + groupClientsByOrganizationalUnit(): void { + const grouped = this.clients.reduce((acc, client) => { + const ouName = client.organizationalUnit.name; + if (!acc[ouName]) { + acc[ouName] = []; + } + acc[ouName].push(client); + return acc; + }, {}); + + this.groupedClients = Object.keys(grouped).map(ouName => ({ + organizationalUnitName: ouName, + clientRows: this.chunkArray(grouped[ouName], this.pcInTable) + })); + } + + chunkArray(arr: any[], chunkSize: number): any[][] { + const chunks = []; + for (let i = 0; i < arr.length; i += chunkSize) { + chunks.push(arr.slice(i, i + chunkSize)); + } + return chunks; + } + + handleClientClick(client: any): void { + console.log('Client clicked:', client); + } +}