feat: add parameters as navigation
Now there is automatic navigation on the inserted url and on localStorage
This commit is contained in:
@ -9,7 +9,7 @@ import {FacultyResponse} from "@api/v1/facultyResponse";
|
||||
import {FacultyService} from "@api/v1/faculty.service";
|
||||
import {GroupService} from "@api/v1/group.service";
|
||||
import {IScheduleTab} from "@component/schedule/tabs/ischedule-tab";
|
||||
import {TabSelect, TabSelectType, TabStorageService} from "@service/tab-storage.service";
|
||||
import {TabSelect, TabSelectData, TabSelectType, TabStorageService} from "@service/tab-storage.service";
|
||||
|
||||
@Component({
|
||||
selector: 'app-group',
|
||||
@ -45,20 +45,17 @@ export class GroupComponent implements IScheduleTab {
|
||||
@ViewChild('courseChip') courseChip!: MatChipListbox;
|
||||
@ViewChild('groupChip') groupChip!: MatChipListbox;
|
||||
|
||||
private readonly selected: TabSelect[] | null = null;
|
||||
|
||||
@ViewChild('facultyIndicator') facultyIndicator!: LoadingIndicatorComponent;
|
||||
@ViewChild('courseIndicator') courseIndicator!: LoadingIndicatorComponent;
|
||||
@ViewChild('groupIndicator') groupIndicator!: LoadingIndicatorComponent;
|
||||
|
||||
@Output() eventResult = new EventEmitter<number>();
|
||||
|
||||
constructor(private facultyApi: FacultyService, private groupApi: GroupService) {
|
||||
let selectedData = TabStorageService.selected;
|
||||
if (selectedData !== null && selectedData.selected !== null) {
|
||||
if (selectedData.type === TabSelectType.group)
|
||||
this.selected = selectedData.selected;
|
||||
}
|
||||
constructor(private facultyApi: FacultyService, private groupApi: GroupService, private tabStorage: TabStorageService) {
|
||||
}
|
||||
|
||||
existParams(data: TabSelectData): boolean {
|
||||
return data.selected['group'] !== undefined || data.selected['course'] !== undefined || data.selected['faculty'] !== undefined;
|
||||
}
|
||||
|
||||
protected loadFaculties() {
|
||||
@ -70,11 +67,12 @@ export class GroupComponent implements IScheduleTab {
|
||||
.subscribe(data => {
|
||||
this.faculties = data;
|
||||
|
||||
if (this.selected !== null && this.selected.length >= 1) {
|
||||
let selectedFaculty = data.find(x => x.id === this.selected![0].index);
|
||||
let selected = TabStorageService.selected?.selected['faculty'];
|
||||
if (selected) {
|
||||
let selectedFaculty = data.find(x => x.id === selected.index);
|
||||
|
||||
if (selectedFaculty === undefined || selectedFaculty.name !== this.selected[0].name)
|
||||
selectedFaculty = data.find(x => x.name === this.selected![0].name);
|
||||
if (selectedFaculty === undefined || selectedFaculty.name !== selected.name)
|
||||
selectedFaculty = data.find(x => x.name === selected.name);
|
||||
|
||||
if (selectedFaculty !== undefined) {
|
||||
TabStorageService.trySelectChip(selectedFaculty.id, this.facultyChip);
|
||||
@ -104,8 +102,12 @@ export class GroupComponent implements IScheduleTab {
|
||||
.sort((a, b) => a - b))
|
||||
);
|
||||
|
||||
if (this.selected !== null && this.selected.length >= 2) {
|
||||
let selectedCourse = this.courseNumbers.find(x => x === this.selected![1].index);
|
||||
let selected = TabStorageService.selected?.selected['course'];
|
||||
if (selected) {
|
||||
let selectedCourse = this.courseNumbers.find(x => x === selected.index);
|
||||
|
||||
if (selectedCourse === undefined)
|
||||
selectedCourse = this.courseNumbers.find(x => x.toString() === selected.name);
|
||||
|
||||
if (selectedCourse !== undefined) {
|
||||
TabStorageService.trySelectChip(selectedCourse, this.courseChip);
|
||||
@ -113,11 +115,12 @@ export class GroupComponent implements IScheduleTab {
|
||||
}
|
||||
}
|
||||
|
||||
if (this.selected !== null && this.selected.length >= 3) {
|
||||
let selectedGroup = data.find(x => x.id === this.selected![2].index);
|
||||
let selectedGroupStorage = TabStorageService.selected?.selected['group'];
|
||||
if (selectedGroupStorage) {
|
||||
let selectedGroup = data.find(x => x.id === selectedGroupStorage.index);
|
||||
|
||||
if (selectedGroup === undefined || selectedGroup.name !== this.selected[2].name)
|
||||
selectedGroup = data.find(x => x.name === this.selected![2].name);
|
||||
if (selectedGroup === undefined || selectedGroup.name !== selectedGroupStorage.name)
|
||||
selectedGroup = data.find(x => x.name === selectedGroupStorage.name);
|
||||
|
||||
if (selectedGroup !== undefined) {
|
||||
TabStorageService.trySelectChip(selectedGroup.id, this.groupChip);
|
||||
@ -144,7 +147,7 @@ export class GroupComponent implements IScheduleTab {
|
||||
return;
|
||||
}
|
||||
|
||||
TabStorageService.select(new TabSelect(index, this.faculties!.find(x => x.id === index)?.name ?? ''), TabSelectType.group, 0);
|
||||
this.tabStorage.select(new TabSelect(index, this.faculties!.find(x => x.id === index)?.name ?? ''), TabSelectType.group, 'faculty');
|
||||
|
||||
this.facultyId = index;
|
||||
this.courseNumberPanel.open();
|
||||
@ -161,7 +164,7 @@ export class GroupComponent implements IScheduleTab {
|
||||
return;
|
||||
}
|
||||
|
||||
TabStorageService.select(new TabSelect(course, course.toString()), TabSelectType.group, 1);
|
||||
this.tabStorage.select(new TabSelect(course, course.toString()), TabSelectType.group, 'course');
|
||||
|
||||
this.courseNumber = course;
|
||||
this.groupPanel.open();
|
||||
@ -172,7 +175,7 @@ export class GroupComponent implements IScheduleTab {
|
||||
if (index === undefined)
|
||||
return;
|
||||
|
||||
TabStorageService.select(new TabSelect(index, this.groups!.find(x => x.id == index)?.name ?? ''), TabSelectType.group, 2);
|
||||
this.tabStorage.select(new TabSelect(index, this.groups!.find(x => x.id == index)?.name ?? ''), TabSelectType.group, 'group');
|
||||
|
||||
this.groupPanel.close();
|
||||
this.eventResult.emit(index);
|
||||
|
@ -1,6 +1,8 @@
|
||||
import {EventEmitter} from "@angular/core";
|
||||
import {TabSelectData} from "@service/tab-storage.service";
|
||||
|
||||
export interface IScheduleTab {
|
||||
load(): void;
|
||||
eventResult: EventEmitter<number>;
|
||||
existParams(data: TabSelectData): boolean;
|
||||
}
|
||||
|
@ -10,7 +10,7 @@ import {LectureHallResponse} from "@api/v1/lectureHallResponse";
|
||||
import {CampusService} from "@api/v1/campus.service";
|
||||
import {LectureHallService} from "@api/v1/lectureHall.service";
|
||||
import {IScheduleTab} from "@component/schedule/tabs/ischedule-tab";
|
||||
import {TabSelect, TabSelectType, TabStorageService} from "@service/tab-storage.service";
|
||||
import {TabSelect, TabSelectData, TabSelectType, TabStorageService} from "@service/tab-storage.service";
|
||||
|
||||
@Component({
|
||||
selector: 'app-lecture-hall',
|
||||
@ -45,14 +45,12 @@ export class LectureHallComponent implements IScheduleTab {
|
||||
@ViewChild('lectureChip') lectureChip!: MatChipListbox;
|
||||
|
||||
private lectureHalls: LectureHallResponse[] | null = null;
|
||||
private readonly selected: TabSelect[] | null = null;
|
||||
|
||||
constructor(private campusApi: CampusService, private lectureHallApi: LectureHallService) {
|
||||
let selectedData = TabStorageService.selected;
|
||||
if (selectedData !== null && selectedData.selected !== null) {
|
||||
if (selectedData.type === TabSelectType.lecture)
|
||||
this.selected = selectedData.selected;
|
||||
}
|
||||
constructor(private campusApi: CampusService, private lectureHallApi: LectureHallService, private tabStorage: TabStorageService) {
|
||||
}
|
||||
|
||||
existParams(data: TabSelectData): boolean {
|
||||
return data.selected['campus'] !== undefined || data.selected['lecture'] !== undefined;
|
||||
}
|
||||
|
||||
protected loadCampuses() {
|
||||
@ -64,11 +62,12 @@ export class LectureHallComponent implements IScheduleTab {
|
||||
.subscribe(data => {
|
||||
this.campuses = data;
|
||||
|
||||
if (this.selected !== null && this.selected.length >= 1) {
|
||||
let selectedCampus = data.find(x => x.id === this.selected![0].index);
|
||||
let selected = TabStorageService.selected?.selected['campus'];
|
||||
if (selected) {
|
||||
let selectedCampus = data.find(x => x.id === selected.index);
|
||||
|
||||
if (selectedCampus === undefined || selectedCampus.codeName !== this.selected![0].name)
|
||||
selectedCampus = data.find(x => x.codeName === this.selected![0].name);
|
||||
if (selectedCampus === undefined || selectedCampus.codeName !== selected.name)
|
||||
selectedCampus = data.find(x => x.codeName === selected.name);
|
||||
|
||||
if (selectedCampus !== undefined) {
|
||||
TabStorageService.trySelectChip(selectedCampus.id, this.campusChip);
|
||||
@ -85,7 +84,7 @@ export class LectureHallComponent implements IScheduleTab {
|
||||
protected onCampusSelected(index: number) {
|
||||
this.formLectureHalls.reset();
|
||||
|
||||
TabStorageService.select(new TabSelect(index, this.campuses!.find(x => x.id === index)?.codeName ?? ''), TabSelectType.lecture, 0);
|
||||
this.tabStorage.select(new TabSelect(index, this.campuses!.find(x => x.id === index)?.codeName ?? ''), TabSelectType.lecture, 'campus');
|
||||
|
||||
if (index === undefined) {
|
||||
this.campusId = null;
|
||||
@ -111,11 +110,13 @@ export class LectureHallComponent implements IScheduleTab {
|
||||
.subscribe(data => {
|
||||
this.lectureHalls = data;
|
||||
this.filteringLectureHalls();
|
||||
if (this.selected !== null && this.selected.length >= 2) {
|
||||
let selectedLecture = data.find(x => x.id === this.selected![1].index);
|
||||
|
||||
if (selectedLecture === undefined || selectedLecture.name !== this.selected![1].name)
|
||||
selectedLecture = data.find(x => x.name === this.selected![1].name);
|
||||
let selected = TabStorageService.selected?.selected['lecture'];
|
||||
if (selected) {
|
||||
let selectedLecture = data.find(x => x.id === selected.index);
|
||||
|
||||
if (selectedLecture === undefined || selectedLecture.name !== selected.name)
|
||||
selectedLecture = data.find(x => x.name === selected.name);
|
||||
|
||||
if (selectedLecture !== undefined) {
|
||||
TabStorageService.trySelectChip(selectedLecture.id, this.lectureChip);
|
||||
@ -129,7 +130,7 @@ export class LectureHallComponent implements IScheduleTab {
|
||||
if (index === undefined)
|
||||
return;
|
||||
|
||||
TabStorageService.select(new TabSelect(index, this.lectureHallsFiltered!.find(x => x.id === index)?.name ?? ''), TabSelectType.lecture, 1);
|
||||
this.tabStorage.select(new TabSelect(index, this.lectureHallsFiltered!.find(x => x.id === index)?.name ?? ''), TabSelectType.lecture, 'lecture');
|
||||
|
||||
this.lecturePanel.close();
|
||||
this.eventResult.emit(index);
|
||||
|
@ -8,7 +8,7 @@ import {LoadingIndicatorComponent} from "@component/common/loading-indicator/loa
|
||||
import {ProfessorResponse} from "@api/v1/professorResponse";
|
||||
import {ProfessorService} from "@api/v1/professor.service";
|
||||
import {IScheduleTab} from "@component/schedule/tabs/ischedule-tab";
|
||||
import {TabSelect, TabSelectType, TabStorageService} from "@service/tab-storage.service";
|
||||
import {TabSelect, TabSelectData, TabSelectType, TabStorageService} from "@service/tab-storage.service";
|
||||
|
||||
@Component({
|
||||
selector: 'app-professor',
|
||||
@ -30,18 +30,16 @@ export class ProfessorComponent implements OnInit, IScheduleTab {
|
||||
protected filteredProfessors!: Observable<ProfessorResponse[]>;
|
||||
|
||||
protected professors: ProfessorResponse[] | null = null;
|
||||
private readonly selected: TabSelect[] | null = null;
|
||||
|
||||
@ViewChild('professorIndicator') professorIndicator!: LoadingIndicatorComponent;
|
||||
|
||||
@Output() eventResult = new EventEmitter<number>();
|
||||
|
||||
constructor(private api: ProfessorService) {
|
||||
let selectedData = TabStorageService.selected;
|
||||
if (selectedData !== null && selectedData.selected !== null) {
|
||||
if (selectedData.type === TabSelectType.professor)
|
||||
this.selected = selectedData.selected;
|
||||
}
|
||||
constructor(private api: ProfessorService, private tabStorage: TabStorageService) {
|
||||
}
|
||||
|
||||
existParams(data: TabSelectData): boolean {
|
||||
return data.selected['professor'] !== undefined;
|
||||
}
|
||||
|
||||
protected loadProfessors() {
|
||||
@ -54,11 +52,12 @@ export class ProfessorComponent implements OnInit, IScheduleTab {
|
||||
.subscribe(data => {
|
||||
this.professors = data;
|
||||
|
||||
if (this.selected !== null && this.selected.length >= 1) {
|
||||
let selectedProfessor = data.find(x => x.id === this.selected![0].index);
|
||||
let selected = TabStorageService.selected?.selected['professor'];
|
||||
if (selected) {
|
||||
let selectedProfessor = data.find(x => x.id === selected.index);
|
||||
|
||||
if (selectedProfessor === undefined || selectedProfessor.name !== this.selected[0].name)
|
||||
selectedProfessor = data.find(x => x.name === this.selected![0].name);
|
||||
if (selectedProfessor === undefined || selectedProfessor.name !== selected.name)
|
||||
selectedProfessor = data.find(x => x.name === selected.name);
|
||||
|
||||
if (selectedProfessor !== undefined)
|
||||
this.onOptionSelected(selectedProfessor.id);
|
||||
@ -96,7 +95,7 @@ export class ProfessorComponent implements OnInit, IScheduleTab {
|
||||
this.professorControl.setValue(selectedOption.name);
|
||||
this.eventResult.emit(selectedOption.id);
|
||||
|
||||
TabStorageService.select(new TabSelect(selectedOption.id, selectedOption.name), TabSelectType.professor, 0);
|
||||
this.tabStorage.select(new TabSelect(selectedOption.id, selectedOption.name), TabSelectType.professor, 'professor');
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -61,8 +61,18 @@ export class TabsComponent implements AfterViewInit {
|
||||
let selected = TabStorageService.selected;
|
||||
|
||||
let index = 0;
|
||||
if (selected !== null)
|
||||
index = selected.type;
|
||||
|
||||
if (selected !== null) {
|
||||
if (selected.type === null) {
|
||||
if (this.groupTab.existParams(selected))
|
||||
index = 0;
|
||||
else if (this.professorTab.existParams(selected))
|
||||
index = 1;
|
||||
else if (this.lectureHallTab.existParams(selected))
|
||||
index = 2;
|
||||
} else
|
||||
index = selected.type;
|
||||
}
|
||||
|
||||
if (index === null || index === 0)
|
||||
this.chooseTabs(0).then();
|
||||
|
Reference in New Issue
Block a user