Added saved filters modal

pull/6/head
Alvaro Puente Mella 2024-08-02 11:52:31 +02:00
parent 18ff06afb2
commit a125e9b4e5
4 changed files with 71 additions and 27 deletions

View File

@ -69,6 +69,7 @@ import {
import { LegendComponent } from './components/groups/legend/legend.component'; import { LegendComponent } from './components/groups/legend/legend.component';
import { ClassroomViewDialogComponent } from './components/groups/classroom-view/classroom-view-modal'; import { ClassroomViewDialogComponent } from './components/groups/classroom-view/classroom-view-modal';
import {MatPaginator} from "@angular/material/paginator"; import {MatPaginator} from "@angular/material/paginator";
import { SaveFiltersDialogComponent } from './components/groups/save-filters-dialog/save-filters-dialog.component';
@NgModule({ @NgModule({
declarations: [ declarations: [
@ -100,7 +101,8 @@ import {MatPaginator} from "@angular/material/paginator";
ShowOrganizationalUnitComponent, ShowOrganizationalUnitComponent,
TreeViewComponent, TreeViewComponent,
LegendComponent, LegendComponent,
ClassroomViewDialogComponent ClassroomViewDialogComponent,
SaveFiltersDialogComponent
], ],
bootstrap: [AppComponent], bootstrap: [AppComponent],
imports: [BrowserModule, imports: [BrowserModule,

View File

@ -156,4 +156,23 @@ export class DataService {
); );
} }
getFilter(id: string): Observable<any> {
return this.http.get<any>('http://127.0.0.1:8080/views/' + id).pipe(
map(response => {
if (response.name && response.filters) {
return response;
} else {
throw new Error('Unexpected response format');
}
}),
catchError(error => {
console.error('Error fetching filters', error);
return throwError(error);
})
);
}
} }

View File

@ -160,7 +160,7 @@
<mat-label i18n="@@selectFilterLabel">Seleccione filtro</mat-label> <mat-label i18n="@@selectFilterLabel">Seleccione filtro</mat-label>
<mat-select (selectionChange)="loadSelectedFilter($event.value)"> <mat-select (selectionChange)="loadSelectedFilter($event.value)">
<mat-option *ngFor="let savedFilter of savedFilterNames" [value]="savedFilter"> <mat-option *ngFor="let savedFilter of savedFilterNames" [value]="savedFilter">
{{ savedFilter }} {{ savedFilter[0] }}
</mat-option> </mat-option>
</mat-select> </mat-select>
</mat-form-field> </mat-form-field>
@ -168,13 +168,6 @@
<mat-divider class="divider"></mat-divider> <mat-divider class="divider"></mat-divider>
<div class="main-content"> <div class="main-content">
<div class="filters"> <div class="filters">
<mat-form-field>
<mat-label i18n="@@selectOptionLabel">Selecciona una opción</mat-label>
<mat-select [(value)]="selectedFilter1" (selectionChange)="applyFilter()">
<mat-option value="ou" i18n="@@organizationalUnitsOption">Unidades organizativas</mat-option>
<mat-option value="client" i18n="@@clientsOption">Clientes</mat-option>
</mat-select>
</mat-form-field>
<mat-form-field class="example-full-width"> <mat-form-field class="example-full-width">
<mat-label i18n="@@nameLabel">Nombre</mat-label> <mat-label i18n="@@nameLabel">Nombre</mat-label>
<input matInput placeholder="Unidad organizativa" (input)="applyFilter()" [(ngModel)]="filterName" i18n-placeholder="@@namePlaceholder"> <input matInput placeholder="Unidad organizativa" (input)="applyFilter()" [(ngModel)]="filterName" i18n-placeholder="@@namePlaceholder">
@ -188,6 +181,13 @@
<mat-option value="client-group" i18n="@@clientGroupOption">Grupos de clientes</mat-option> <mat-option value="client-group" i18n="@@clientGroupOption">Grupos de clientes</mat-option>
</mat-select> </mat-select>
</mat-form-field> </mat-form-field>
<mat-form-field>
<mat-label i18n="@@selectOptionLabel">Selecciona una opción</mat-label>
<mat-select [(value)]="selectedFilter1" (selectionChange)="applyFilter()">
<mat-option value="ou" i18n="@@organizationalUnitsOption">Unidades organizativas</mat-option>
<mat-option value="client" i18n="@@clientsOption">Clientes</mat-option>
</mat-select>
</mat-form-field>
<mat-form-field> <mat-form-field>
<mat-label i18n="@@selectAnotherOptionLabel">Selecciona otra opción</mat-label> <mat-label i18n="@@selectAnotherOptionLabel">Selecciona otra opción</mat-label>
<mat-select [(value)]="selectedFilter1" (selectionChange)="applyFilter()"> <mat-select [(value)]="selectedFilter1" (selectionChange)="applyFilter()">

View File

@ -18,6 +18,7 @@ import { ClassroomViewDialogComponent } from './classroom-view/classroom-view-mo
import {HttpClient} from "@angular/common/http"; import {HttpClient} from "@angular/common/http";
import {Observable} from "rxjs"; import {Observable} from "rxjs";
import {PageEvent} from "@angular/material/paginator"; import {PageEvent} from "@angular/material/paginator";
import { SaveFiltersDialogComponent } from './save-filters-dialog/save-filters-dialog.component';
@Component({ @Component({
selector: 'app-groups', selector: 'app-groups',
@ -61,9 +62,7 @@ export class GroupsComponent implements OnInit {
getFilters(): void { getFilters(): void {
this.dataService.getFilters().subscribe( this.dataService.getFilters().subscribe(
data => { data => {
this.savedFilterNames = data.map((filter: any) => filter.name); this.savedFilterNames = data.map((filter: any) => [filter.name, filter.uuid]);
console.log('data:', data);
console.log('Saved filters:', this.savedFilterNames);
}, },
error => { error => {
console.error('Error fetching filters:', error); console.error('Error fetching filters:', error);
@ -315,11 +314,18 @@ export class GroupsComponent implements OnInit {
this.itemsPerPage = event.pageSize; this.itemsPerPage = event.pageSize;
this.applyFilter(); this.applyFilter();
} }
saveFilters() { saveFilters() {
const dialogRef = this.dialog.open(SaveFiltersDialogComponent);
dialogRef.afterClosed().subscribe(result => {
if (result) {
const filters = { const filters = {
name: this.filterName || `Filter ${new Date().toISOString()}`, name: result,
favourite: true, favourite: true,
filters: { filters: {
filter0: this.filterName,
filter1: this.selectedFilter1, filter1: this.selectedFilter1,
filter2: this.selectedFilter2 filter2: this.selectedFilter2
} }
@ -333,8 +339,25 @@ export class GroupsComponent implements OnInit {
console.error('Error:', error); console.error('Error:', error);
}); });
} }
});
}
loadSelectedFilter(savedFilter: any) { loadSelectedFilter(savedFilter: any) {
const url = 'http://127.0.0.1:8080/views/' + savedFilter[1];
console.log('llamando a:', url);
this.dataService.getFilter(savedFilter[1]).subscribe(response => {
console.log('Response from server:', response.filters);
if (response) {
console.log('Filter1:', response.filters);
this.filterName = response.filters.filter0 || '';
this.selectedFilter1 = response.filters.filter1 || null;
this.selectedFilter2 = response.filters.filter2 || '';
}
}, error => {
console.error('Error:', error);
});
} }
} }