refactor: rewrite for new models
This commit is contained in:
parent
799d2d8166
commit
83fc7df137
@ -4,8 +4,8 @@ import {MatIcon} from "@angular/material/icon";
|
|||||||
import {DatePipe} from "@angular/common";
|
import {DatePipe} from "@angular/common";
|
||||||
import {addDays} from "@progress/kendo-date-math";
|
import {addDays} from "@progress/kendo-date-math";
|
||||||
import {MatDivider} from "@angular/material/divider";
|
import {MatDivider} from "@angular/material/divider";
|
||||||
import {Schedule} from "@page/schedule/schedule.component";
|
|
||||||
import {DataSpinnerComponent} from "@component/common/data-spinner/data-spinner.component";
|
import {DataSpinnerComponent} from "@component/common/data-spinner/data-spinner.component";
|
||||||
|
import {ScheduleResponse} from "@api/v1/scheduleResponse";
|
||||||
|
|
||||||
interface TableData {
|
interface TableData {
|
||||||
pairNumber: number;
|
pairNumber: number;
|
||||||
@ -34,14 +34,14 @@ export class TableComponent implements OnChanges {
|
|||||||
protected tableDataSource: MatTableDataSource<TableData> = new MatTableDataSource<TableData>([]);
|
protected tableDataSource: MatTableDataSource<TableData> = new MatTableDataSource<TableData>([]);
|
||||||
protected daysOfWeek: string[] = ['Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота'];
|
protected daysOfWeek: string[] = ['Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота'];
|
||||||
protected displayedColumns: string[] = ['pairNumber'];
|
protected displayedColumns: string[] = ['pairNumber'];
|
||||||
protected dataSource: Schedule[] = [];
|
protected dataSource: ScheduleResponse[] = [];
|
||||||
protected isOneGroup: boolean = false;
|
protected isOneGroup: boolean = false;
|
||||||
|
|
||||||
@Input() currentWeek!: number;
|
@Input() currentWeek!: number;
|
||||||
@Input() startWeek!: Date;
|
@Input() startWeek!: Date;
|
||||||
@Input() isLoad: boolean = false;
|
@Input() isLoad: boolean = false;
|
||||||
|
|
||||||
@Input() set data(schedule: Schedule[]) {
|
@Input() set data(schedule: ScheduleResponse[]) {
|
||||||
this.dataSource = schedule;
|
this.dataSource = schedule;
|
||||||
this.convertData();
|
this.convertData();
|
||||||
this.isOneGroup = schedule.every((item, _, array) => item.group === array[0].group);
|
this.isOneGroup = schedule.every((item, _, array) => item.group === array[0].group);
|
||||||
@ -69,9 +69,13 @@ export class TableComponent implements OnChanges {
|
|||||||
|
|
||||||
for (let k: number = 1; k < 7; k++) {
|
for (let k: number = 1; k < 7; k++) {
|
||||||
convertedData.data[k.toString()] = this.dataSource.filter(x =>
|
convertedData.data[k.toString()] = this.dataSource.filter(x =>
|
||||||
x.pairNumber === i
|
x.pairNumber === i &&
|
||||||
&& x.dayOfWeek === k
|
x.dayOfWeek === k &&
|
||||||
&& x.isEven === (this.currentWeek % 2 === 0));
|
x.isEven === (this.currentWeek % 2 === 0) &&
|
||||||
|
(
|
||||||
|
(x.isExcludedWeeks && (!x.weeks || !x.weeks.includes(this.currentWeek))) ||
|
||||||
|
(!x.isExcludedWeeks && (!x.weeks || x.weeks.includes(this.currentWeek)))
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
tableData.push(convertedData);
|
tableData.push(convertedData);
|
||||||
@ -81,8 +85,8 @@ export class TableComponent implements OnChanges {
|
|||||||
this.isLoad = false;
|
this.isLoad = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected checkAvailableData(data: any[]): boolean {
|
protected checkAvailableData(data: any[] | any): boolean {
|
||||||
return data && data.length !== 0 && data.every(x => x !== null);
|
return data && data.length !== 0 && (!Array.isArray(data) || data.every(x => x !== null));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected readonly addDays = addDays;
|
protected readonly addDays = addDays;
|
||||||
|
@ -4,9 +4,9 @@ import {MatChipListboxChange, MatChipsModule} from '@angular/material/chips';
|
|||||||
import {FormControl, ReactiveFormsModule} from "@angular/forms";
|
import {FormControl, ReactiveFormsModule} from "@angular/forms";
|
||||||
import {AsyncPipe} from "@angular/common";
|
import {AsyncPipe} from "@angular/common";
|
||||||
import {map, Observable, of} from "rxjs";
|
import {map, Observable, of} from "rxjs";
|
||||||
import {FacultyResponse} from "@model/facultyResponse";
|
|
||||||
import {GroupResponse} from "@model/groupResponse";
|
|
||||||
import {LoadingIndicatorComponent} from "@component/common/loading-indicator/loading-indicator.component";
|
import {LoadingIndicatorComponent} from "@component/common/loading-indicator/loading-indicator.component";
|
||||||
|
import {GroupResponse} from "@api/v1/groupResponse";
|
||||||
|
import {FacultyResponse} from "@api/v1/facultyResponse";
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-group',
|
selector: 'app-group',
|
||||||
|
@ -3,10 +3,10 @@ import {AsyncPipe} from "@angular/common";
|
|||||||
import {MatAccordion, MatExpansionModule, MatExpansionPanel} from "@angular/material/expansion";
|
import {MatAccordion, MatExpansionModule, MatExpansionPanel} from "@angular/material/expansion";
|
||||||
import {MatChipListboxChange, MatChipsModule} from "@angular/material/chips";
|
import {MatChipListboxChange, MatChipsModule} from "@angular/material/chips";
|
||||||
import {Observable, of} from "rxjs";
|
import {Observable, of} from "rxjs";
|
||||||
import {CampusBasicInfoResponse} from "@model/campusBasicInfoResponse";
|
|
||||||
import {FormControl, ReactiveFormsModule} from "@angular/forms";
|
import {FormControl, ReactiveFormsModule} from "@angular/forms";
|
||||||
import {LectureHallResponse} from "@model/lectureHallResponse";
|
|
||||||
import {LoadingIndicatorComponent} from "@component/common/loading-indicator/loading-indicator.component";
|
import {LoadingIndicatorComponent} from "@component/common/loading-indicator/loading-indicator.component";
|
||||||
|
import {CampusBasicInfoResponse} from "@api/v1/campusBasicInfoResponse";
|
||||||
|
import {LectureHallResponse} from "@api/v1/lectureHallResponse";
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-lecture-hall',
|
selector: 'app-lecture-hall',
|
||||||
|
@ -43,6 +43,7 @@ export interface SelectData {
|
|||||||
templateUrl: './other.component.html',
|
templateUrl: './other.component.html',
|
||||||
styleUrl: './other.component.css'
|
styleUrl: './other.component.css'
|
||||||
})
|
})
|
||||||
|
|
||||||
export class OtherComponent {
|
export class OtherComponent {
|
||||||
private _searchQuery: string = '';
|
private _searchQuery: string = '';
|
||||||
protected filteredData: BehaviorSubject<SelectData[]> = new BehaviorSubject<SelectData[]>([]);
|
protected filteredData: BehaviorSubject<SelectData[]> = new BehaviorSubject<SelectData[]>([]);
|
||||||
|
@ -4,8 +4,8 @@ import {FormControl, ReactiveFormsModule} from "@angular/forms";
|
|||||||
import {MatAutocompleteModule, MatAutocompleteSelectedEvent} from "@angular/material/autocomplete";
|
import {MatAutocompleteModule, MatAutocompleteSelectedEvent} from "@angular/material/autocomplete";
|
||||||
import {AsyncPipe} from "@angular/common";
|
import {AsyncPipe} from "@angular/common";
|
||||||
import {map, Observable, startWith} from "rxjs";
|
import {map, Observable, startWith} from "rxjs";
|
||||||
import {ProfessorResponse} from "@model/professorResponse";
|
|
||||||
import {LoadingIndicatorComponent} from "@component/common/loading-indicator/loading-indicator.component";
|
import {LoadingIndicatorComponent} from "@component/common/loading-indicator/loading-indicator.component";
|
||||||
|
import {ProfessorResponse} from "@api/v1/professorResponse";
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-professor',
|
selector: 'app-professor',
|
||||||
|
@ -1,26 +1,26 @@
|
|||||||
import {Component, EventEmitter, Output, ViewChild} from '@angular/core';
|
import {Component, EventEmitter, Output, ViewChild} from '@angular/core';
|
||||||
import {HttpClientModule} from "@angular/common/http";
|
import {HttpClientModule} from "@angular/common/http";
|
||||||
import {ApiService} from '@service/api.service';
|
|
||||||
import {OtherComponent} from "@component/schedule/tabs/other/other.component";
|
import {OtherComponent} from "@component/schedule/tabs/other/other.component";
|
||||||
import {MatTab, MatTabChangeEvent, MatTabGroup} from "@angular/material/tabs";
|
import {MatTab, MatTabChangeEvent, MatTabGroup} from "@angular/material/tabs";
|
||||||
import {
|
|
||||||
ProfessorComponent
|
|
||||||
} from "@component/schedule/tabs/professor/professor.component";
|
|
||||||
import {GroupComponent} from "@component/schedule/tabs/group/group.component";
|
|
||||||
import {
|
|
||||||
LectureHallComponent
|
|
||||||
} from "@component/schedule/tabs/lecture-hall/lecture-hall.component";
|
|
||||||
import {ProfessorResponse} from "@model/professorResponse";
|
|
||||||
import {catchError, map, Observable, of, switchMap, tap} from "rxjs";
|
import {catchError, map, Observable, of, switchMap, tap} from "rxjs";
|
||||||
import {GroupResponse} from "@model/groupResponse";
|
|
||||||
import {FacultyResponse} from "@model/facultyResponse";
|
|
||||||
import {CampusBasicInfoResponse} from "@model/campusBasicInfoResponse";
|
|
||||||
import {LectureHallResponse} from "@model/lectureHallResponse";
|
|
||||||
import {ReactiveFormsModule} from "@angular/forms";
|
import {ReactiveFormsModule} from "@angular/forms";
|
||||||
import {AsyncPipe, NgIf} from "@angular/common";
|
import {AsyncPipe, NgIf} from "@angular/common";
|
||||||
import {DisciplineResponse} from "@model/disciplineResponse";
|
|
||||||
import {MatButton} from "@angular/material/button";
|
import {MatButton} from "@angular/material/button";
|
||||||
import {DataSpinnerComponent} from "@component/common/data-spinner/data-spinner.component";
|
import {DataSpinnerComponent} from "@component/common/data-spinner/data-spinner.component";
|
||||||
|
import {ProfessorResponse} from "@api/v1/professorResponse";
|
||||||
|
import {FacultyResponse} from "@api/v1/facultyResponse";
|
||||||
|
import {GroupResponse} from "@api/v1/groupResponse";
|
||||||
|
import {CampusBasicInfoResponse} from "@api/v1/campusBasicInfoResponse";
|
||||||
|
import {LectureHallResponse} from "@api/v1/lectureHallResponse";
|
||||||
|
import {DisciplineService} from "@api/v1/discipline.service";
|
||||||
|
import {GroupComponent} from "@component/schedule/tabs/group/group.component";
|
||||||
|
import {ProfessorComponent} from "@component/schedule/tabs/professor/professor.component";
|
||||||
|
import {LectureHallComponent} from "@component/schedule/tabs/lecture-hall/lecture-hall.component";
|
||||||
|
import {FacultyService} from "@api/v1/faculty.service";
|
||||||
|
import {GroupService} from "@api/v1/group.service";
|
||||||
|
import {ProfessorService} from "@api/v1/professor.service";
|
||||||
|
import {CampusService} from "@api/v1/campus.service";
|
||||||
|
import {LectureHallService} from "@api/v1/lectureHall.service";
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-tabs',
|
selector: 'app-tabs',
|
||||||
@ -30,17 +30,18 @@ import {DataSpinnerComponent} from "@component/common/data-spinner/data-spinner.
|
|||||||
OtherComponent,
|
OtherComponent,
|
||||||
MatTabGroup,
|
MatTabGroup,
|
||||||
MatTab,
|
MatTab,
|
||||||
ProfessorComponent,
|
|
||||||
GroupComponent,
|
|
||||||
LectureHallComponent,
|
|
||||||
ReactiveFormsModule,
|
ReactiveFormsModule,
|
||||||
AsyncPipe,
|
AsyncPipe,
|
||||||
NgIf,
|
NgIf,
|
||||||
MatButton,
|
MatButton,
|
||||||
DataSpinnerComponent
|
DataSpinnerComponent,
|
||||||
|
GroupComponent,
|
||||||
|
ProfessorComponent,
|
||||||
|
LectureHallComponent
|
||||||
],
|
],
|
||||||
templateUrl: './tabs.component.html',
|
templateUrl: './tabs.component.html',
|
||||||
styleUrl: './tabs.component.css'
|
styleUrl: './tabs.component.css',
|
||||||
|
providers: [FacultyService, GroupService, ProfessorService, CampusService, LectureHallService, DisciplineService ]
|
||||||
})
|
})
|
||||||
|
|
||||||
export class TabsComponent {
|
export class TabsComponent {
|
||||||
@ -66,12 +67,17 @@ export class TabsComponent {
|
|||||||
@Output() lectureHallSelected: EventEmitter<number> = new EventEmitter<number>();
|
@Output() lectureHallSelected: EventEmitter<number> = new EventEmitter<number>();
|
||||||
@Output() professorSelected: EventEmitter<number> = new EventEmitter<number>();
|
@Output() professorSelected: EventEmitter<number> = new EventEmitter<number>();
|
||||||
|
|
||||||
constructor(private api: ApiService) {
|
constructor(
|
||||||
|
private facultyApi: FacultyService,
|
||||||
|
private groupApi: GroupService,
|
||||||
|
private professorApi: ProfessorService,
|
||||||
|
private campusApi: CampusService,
|
||||||
|
private lectureHallApi: LectureHallService,
|
||||||
|
private disciplineApi: DisciplineService) {
|
||||||
this.facultyLoad().then();
|
this.facultyLoad().then();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async chooseTabs(event: MatTabChangeEvent) {
|
protected async chooseTabs(event: MatTabChangeEvent) {
|
||||||
console.log(event);
|
|
||||||
switch (event.index) {
|
switch (event.index) {
|
||||||
case 0:
|
case 0:
|
||||||
await this.facultyLoad();
|
await this.facultyLoad();
|
||||||
@ -92,7 +98,7 @@ export class TabsComponent {
|
|||||||
if (this.facultiesLoaded === null) this.facultiesLoaded = false;
|
if (this.facultiesLoaded === null) this.facultiesLoaded = false;
|
||||||
if (this.facultiesLoaded) return;
|
if (this.facultiesLoaded) return;
|
||||||
|
|
||||||
this.faculties = this.api.get<FacultyResponse[]>("Faculty/Get").pipe(
|
this.faculties = this.facultyApi.getFaculties().pipe(
|
||||||
tap(() => {
|
tap(() => {
|
||||||
this.facultiesLoaded = true;
|
this.facultiesLoaded = true;
|
||||||
}),
|
}),
|
||||||
@ -109,7 +115,7 @@ export class TabsComponent {
|
|||||||
if (this.groupLoaded)
|
if (this.groupLoaded)
|
||||||
this.groups = this.groupsData.pipe(map(data => data.filter(x => x.facultyId === id)));
|
this.groups = this.groupsData.pipe(map(data => data.filter(x => x.facultyId === id)));
|
||||||
else
|
else
|
||||||
this.groups = this.api.get<GroupResponse[]>("Group/GetByFaculty/" + id).pipe(
|
this.groups = this.groupApi.getByFaculty(id).pipe(
|
||||||
tap(() => {
|
tap(() => {
|
||||||
this.groupLoaded = false;
|
this.groupLoaded = false;
|
||||||
}),
|
}),
|
||||||
@ -125,7 +131,7 @@ export class TabsComponent {
|
|||||||
|
|
||||||
if (this.professorsLoaded) return;
|
if (this.professorsLoaded) return;
|
||||||
|
|
||||||
this.api.get<ProfessorResponse[]>("Professor/Get").pipe(
|
this.professorApi.getProfessors().pipe(
|
||||||
catchError((error) => {
|
catchError((error) => {
|
||||||
this.professorsLoaded = null;
|
this.professorsLoaded = null;
|
||||||
throw error;
|
throw error;
|
||||||
@ -147,7 +153,7 @@ export class TabsComponent {
|
|||||||
|
|
||||||
if (this.campusesLoaded) return;
|
if (this.campusesLoaded) return;
|
||||||
|
|
||||||
this.campuses = this.api.get<CampusBasicInfoResponse[]>("Campus/Get").pipe(
|
this.campuses = this.campusApi.getCampus().pipe(
|
||||||
tap(() => {
|
tap(() => {
|
||||||
this.campusesLoaded = true;
|
this.campusesLoaded = true;
|
||||||
}),
|
}),
|
||||||
@ -164,7 +170,7 @@ export class TabsComponent {
|
|||||||
if (this.lectureHallsLoaded)
|
if (this.lectureHallsLoaded)
|
||||||
this.lectureHalls = this.lectureHallsData.pipe(map(data => data.filter(x => x.campusId === id)));
|
this.lectureHalls = this.lectureHallsData.pipe(map(data => data.filter(x => x.campusId === id)));
|
||||||
else
|
else
|
||||||
this.lectureHalls = this.api.get<LectureHallResponse[]>("LectureHall/GetByCampus/" + id).pipe(
|
this.lectureHalls = this.lectureHallApi.getByCampus(id).pipe(
|
||||||
tap(() => {
|
tap(() => {
|
||||||
this.lectureHallsLoaded = false;
|
this.lectureHallsLoaded = false;
|
||||||
}),
|
}),
|
||||||
@ -180,7 +186,7 @@ export class TabsComponent {
|
|||||||
await this.campusLoad();
|
await this.campusLoad();
|
||||||
|
|
||||||
if (!this.lectureHallsLoaded) {
|
if (!this.lectureHallsLoaded) {
|
||||||
this.lectureHallsData = this.api.get<LectureHallResponse[]>("LectureHall/Get");
|
this.lectureHallsData = this.lectureHallApi.getLectureHalls();
|
||||||
this.lectureHallsData.pipe(
|
this.lectureHallsData.pipe(
|
||||||
switchMap(lectureHalls => this.campuses.pipe(
|
switchMap(lectureHalls => this.campuses.pipe(
|
||||||
map(campuses => {
|
map(campuses => {
|
||||||
@ -205,7 +211,7 @@ export class TabsComponent {
|
|||||||
|
|
||||||
protected async loadDisciplines() {
|
protected async loadDisciplines() {
|
||||||
if (!this.disciplinesLoaded) {
|
if (!this.disciplinesLoaded) {
|
||||||
this.api.get<DisciplineResponse[]>("Discipline/Get").pipe(
|
this.disciplineApi.getDisciplines().pipe(
|
||||||
catchError((error) => {
|
catchError((error) => {
|
||||||
this.disciplinesLoaded = null;
|
this.disciplinesLoaded = null;
|
||||||
throw error;
|
throw error;
|
||||||
@ -226,7 +232,7 @@ export class TabsComponent {
|
|||||||
await this.facultyLoad();
|
await this.facultyLoad();
|
||||||
|
|
||||||
if (!this.groupLoaded) {
|
if (!this.groupLoaded) {
|
||||||
this.groupsData = this.api.get<GroupResponse[]>("Group/Get");
|
this.groupsData = this.groupApi.getGroups();
|
||||||
this.groupsData.pipe(
|
this.groupsData.pipe(
|
||||||
switchMap(groups => this.faculties.pipe(
|
switchMap(groups => this.faculties.pipe(
|
||||||
map(campuses => {
|
map(campuses => {
|
||||||
@ -267,11 +273,4 @@ export class TabsComponent {
|
|||||||
@ViewChild('lecture') lectureHallEx!: OtherComponent;
|
@ViewChild('lecture') lectureHallEx!: OtherComponent;
|
||||||
@ViewChild('group') groupEx!: OtherComponent;
|
@ViewChild('group') groupEx!: OtherComponent;
|
||||||
@ViewChild('professor') professorEx!: OtherComponent;
|
@ViewChild('professor') professorEx!: OtherComponent;
|
||||||
|
|
||||||
onClickNagmi() {
|
|
||||||
console.log('huy = ' + this.disciplineEx.selectedIds);
|
|
||||||
console.log('huy2 = ' + this.lectureHallEx.selectedIds);
|
|
||||||
console.log('huy3 = ' + this.groupEx.selectedIds);
|
|
||||||
console.log('huy3 = ' + this.professorEx.selectedIds);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user