From 9b1903f465115d6696f0ae5f88c3b9b666b59d4c Mon Sep 17 00:00:00 2001 From: Polianin Nikita Date: Sat, 17 Feb 2024 12:17:30 +0300 Subject: [PATCH] refactor: transfer responsibility for the data to the parent --- .../schedule-tabs-group.component.ts | 27 ++++++++++--------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/src/components/schedule-tabs/schedule-tabs-group/schedule-tabs-group.component.ts b/src/components/schedule-tabs/schedule-tabs-group/schedule-tabs-group.component.ts index f4247d3..073e08d 100644 --- a/src/components/schedule-tabs/schedule-tabs-group/schedule-tabs-group.component.ts +++ b/src/components/schedule-tabs/schedule-tabs-group/schedule-tabs-group.component.ts @@ -1,6 +1,5 @@ -import {Component, EventEmitter, Output, ViewChild} from '@angular/core'; +import {Component, EventEmitter, Input, Output, ViewChild} from '@angular/core'; import {MatExpansionModule, MatExpansionPanel} from "@angular/material/expansion"; -import {ApiService} from "@service/api.service"; import {DataSpinnerComponent} from "@component/data-spinner/data-spinner.component"; import {MatChipListboxChange, MatChipsModule} from '@angular/material/chips'; import {FormControl, ReactiveFormsModule} from "@angular/forms"; @@ -23,12 +22,11 @@ import {GroupResponse} from "@model/groupResponse"; styleUrl: './schedule-tabs-group.component.css' }) export class ScheduleTabsGroupComponent { - protected faculties: Observable; protected facultiesId: number | null = null; protected courseNumber: number | null = null; - protected groups: Observable = of([]); protected filteredGroups: Observable = of([]); protected courseNumbers: Observable = of([]); + protected groups: Observable = of([]); protected chipCourse: FormControl = new FormControl(); protected chipGroup: FormControl = new FormControl(); @@ -36,12 +34,20 @@ export class ScheduleTabsGroupComponent { @ViewChild('courseNumberPanel') courseNumberPanel!: MatExpansionPanel; @ViewChild('groupPanel') groupPanel!: MatExpansionPanel; - @Output() groupSelected = new EventEmitter(); + @Input() faculties: Observable = of([]); - constructor(private api: ApiService) { - this.faculties = api.get("Faculty/Get"); + @Input() set groupsSet(data: Observable) { + this.groups = data; + this.courseNumbers = this.groups.pipe( + map(data => data.map(g => g.courseNumber)), + map(courseNumbersArray => courseNumbersArray.filter((value, index, self) => self.indexOf(value) === index)), + map(uniqueCourseNumbers => uniqueCourseNumbers.sort((a, b) => a - b)) + ); } + @Output() groupSelected = new EventEmitter(); + @Output() facultySelected = new EventEmitter(); + protected selectedFaculty(event: MatChipListboxChange) { this.courseNumber = null; this.groups = of([]); @@ -55,12 +61,7 @@ export class ScheduleTabsGroupComponent { this.facultiesId = event.value; this.courseNumberPanel.open(); - this.groups = this.api.get("Group/GetByFacultyId/" + this.facultiesId); - this.courseNumbers = this.groups.pipe( - map(data => data.map(g => g.courseNumber)), - map(courseNumbersArray => courseNumbersArray.filter((value, index, self) => self.indexOf(value) === index)), - map(uniqueCourseNumbers => uniqueCourseNumbers.sort((a, b) => a - b)) - ); + this.facultySelected.emit(this.facultiesId!); } protected selectCourseNumber(event: MatChipListboxChange) {