diff --git a/src/main/webapp/src/app/app.module.ts b/src/main/webapp/src/app/app.module.ts index 6a2b6a9..ca10b74 100644 --- a/src/main/webapp/src/app/app.module.ts +++ b/src/main/webapp/src/app/app.module.ts @@ -17,6 +17,9 @@ import {ReactiveFormsModule} from "@angular/forms"; import {MatInputModule} from "@angular/material/input"; import {MatDialog, MatDialogModule} from "@angular/material/dialog"; import { GroupFormComponent } from './component/form/group-form/group-form.component'; +import { PersonSelectorComponent } from './component/selector/person-selector/person-selector.component'; +import { PersonListControlValueAccessorComponent } from './component/controlValueAccessor/person-list-control-value-accessor/person-list-control-value-accessor.component'; +import { ImportExportComponent } from './component/import-export/import-export.component'; @NgModule({ declarations: [ @@ -24,7 +27,10 @@ import { GroupFormComponent } from './component/form/group-form/group-form.compo PersonListComponent, GroupListComponent, PersonFromComponent, - GroupFormComponent + GroupFormComponent, + PersonSelectorComponent, + PersonListControlValueAccessorComponent, + ImportExportComponent ], imports: [ BrowserModule, diff --git a/src/main/webapp/src/app/component/controlValueAccessor/person-list-control-value-accessor/person-list-control-value-accessor.component.html b/src/main/webapp/src/app/component/controlValueAccessor/person-list-control-value-accessor/person-list-control-value-accessor.component.html new file mode 100644 index 0000000..1ffa13d --- /dev/null +++ b/src/main/webapp/src/app/component/controlValueAccessor/person-list-control-value-accessor/person-list-control-value-accessor.component.html @@ -0,0 +1,45 @@ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
L.p. {{getElementNumber(element)}} Id {{element.id}} Imię {{element.name}} Nazwisko {{element.surname}} Indeks {{element?.student?.index}} Usuń + +
+
diff --git a/src/main/webapp/src/app/component/controlValueAccessor/person-list-control-value-accessor/person-list-control-value-accessor.component.sass b/src/main/webapp/src/app/component/controlValueAccessor/person-list-control-value-accessor/person-list-control-value-accessor.component.sass new file mode 100644 index 0000000..e69de29 diff --git a/src/main/webapp/src/app/component/controlValueAccessor/person-list-control-value-accessor/person-list-control-value-accessor.component.spec.ts b/src/main/webapp/src/app/component/controlValueAccessor/person-list-control-value-accessor/person-list-control-value-accessor.component.spec.ts new file mode 100644 index 0000000..ee2e313 --- /dev/null +++ b/src/main/webapp/src/app/component/controlValueAccessor/person-list-control-value-accessor/person-list-control-value-accessor.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { PersonListControlValueAccessorComponent } from './person-list-control-value-accessor.component'; + +describe('PersonListControlValueAccessorComponent', () => { + let component: PersonListControlValueAccessorComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ PersonListControlValueAccessorComponent ] + }) + .compileComponents(); + + fixture = TestBed.createComponent(PersonListControlValueAccessorComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/main/webapp/src/app/component/controlValueAccessor/person-list-control-value-accessor/person-list-control-value-accessor.component.ts b/src/main/webapp/src/app/component/controlValueAccessor/person-list-control-value-accessor/person-list-control-value-accessor.component.ts new file mode 100644 index 0000000..c4b829e --- /dev/null +++ b/src/main/webapp/src/app/component/controlValueAccessor/person-list-control-value-accessor/person-list-control-value-accessor.component.ts @@ -0,0 +1,85 @@ +import { Component } from '@angular/core'; +import {Person} from "../../../model/person"; +import {MatDialog} from "@angular/material/dialog"; +import {tap} from "rxjs"; +import {MatTableDataSource} from "@angular/material/table"; +import {PersonSelectorComponent} from "../../selector/person-selector/person-selector.component"; +import {ControlValueAccessor, NG_VALUE_ACCESSOR} from "@angular/forms"; + +@Component({ + selector: 'app-person-list-control-value-accessor', + templateUrl: './person-list-control-value-accessor.component.html', + styleUrls: ['./person-list-control-value-accessor.component.sass'], + providers: [ + { + provide: NG_VALUE_ACCESSOR, + multi: true, + useExisting: PersonListControlValueAccessorComponent + } + ] +}) +export class PersonListControlValueAccessorComponent implements ControlValueAccessor{ + + disabled = false; + dataSource: MatTableDataSource; + displayedColumns: Map = new Map([ + ['lp', true], + ['id', true], + ['name', true], + ['surname', true], + ['index', true], + ['delete', true], + ]); + + constructor( + private dialog: MatDialog + ) { + this.dataSource = new MatTableDataSource() + } + + writeValue(people: Person[]): void { + this.dataSource.data = people; + } + registerOnChange(fn: (people: Person[] | null) => void): void { + this.onChange = fn; + } + registerOnTouched(fn: any): void { + this.onTouched = fn; + } + setDisabledState?(isDisabled: boolean): void { + this.disabled = isDisabled; + } + + onChange = (people: Person[] | null) => { + } + + onTouched = () => { + } + + openSelectorDialog() { + const dialogRef = this.dialog.open(PersonSelectorComponent); + dialogRef.afterClosed().pipe( + tap(person => { + if (person != null) { + this.dataSource.data = [...this.dataSource.data, person]; + this.onChange(this.dataSource.data); + } + }) + ).subscribe() + } + + deletePerson(id: number) { + this.dataSource.data = this.dataSource.data.filter(person => person.id !== id); + this.onChange(this.dataSource.data); + } + + getDisplayedColumns(): string[] { + return [...this.displayedColumns.entries()] + .filter(column => column[1]) + .map(column => column[0]); + } + + getElementNumber(t: Person): number { + return (this.dataSource.data?.indexOf(t) ?? 0)+1; + } +}