feat: add show raw discipline if checked

This commit is contained in:
Polianin Nikita 2024-08-28 01:22:45 +03:00
parent 1fa1e864da
commit 6a3a6a8d47
3 changed files with 60 additions and 12 deletions

View File

@ -31,7 +31,9 @@ interface Dictionary {
}) })
export class TableComponent implements OnChanges { export class TableComponent implements OnChanges {
private isDisciplineWithWeeks: boolean = false;
protected tableDataSource: MatTableDataSource<TableData> = new MatTableDataSource<TableData>([]); protected tableDataSource: MatTableDataSource<TableData> = new MatTableDataSource<TableData>([]);
private backupDisciplines: string[] = [];
protected daysOfWeek: string[] = ['Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота']; protected daysOfWeek: string[] = ['Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота'];
protected displayedColumns: string[] = ['pairNumber']; protected displayedColumns: string[] = ['pairNumber'];
protected dataSource: ScheduleResponse[] = []; protected dataSource: ScheduleResponse[] = [];
@ -41,6 +43,11 @@ export class TableComponent implements OnChanges {
@Input() startWeek!: Date; @Input() startWeek!: Date;
@Input() isLoad: boolean = false; @Input() isLoad: boolean = false;
@Input() set disciplineWithWeeks(value: boolean) {
this.isDisciplineWithWeeks = value;
this.convertData();
}
@Input() set data(schedule: ScheduleResponse[]) { @Input() set data(schedule: ScheduleResponse[]) {
this.dataSource = schedule; this.dataSource = schedule;
this.convertData(); this.convertData();
@ -68,17 +75,35 @@ 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 => let filteredData = 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 === undefined ||
x.weeks === undefined || if (!this.isDisciplineWithWeeks)
filteredData = filteredData.filter(x =>
x.isExcludedWeeks == undefined ||
x.weeks == undefined ||
(x.isExcludedWeeks && (!x.weeks.includes(this.currentWeek))) || (x.isExcludedWeeks && (!x.weeks.includes(this.currentWeek))) ||
(!x.isExcludedWeeks && (x.weeks.includes(this.currentWeek))) (!x.isExcludedWeeks && (x.weeks.includes(this.currentWeek)))
) );
);
filteredData.forEach(x => {
if (this.isDisciplineWithWeeks) {
if (x.isExcludedWeeks != undefined && x.weeks != undefined) {
if (this.backupDisciplines[x.disciplineId])
x.discipline = this.backupDisciplines[x.disciplineId];
else
this.backupDisciplines[x.disciplineId] = x.discipline;
x.discipline = `${(x.isExcludedWeeks ? 'кр.' : 'н.')} ${x.weeks.join(', ')} ${x.discipline}`;
}
} else if (this.backupDisciplines[x.disciplineId])
x.discipline = this.backupDisciplines[x.disciplineId];
});
convertedData.data[k.toString()] = filteredData;
} }
tableData.push(convertedData); tableData.push(convertedData);

View File

@ -1,6 +1,18 @@
<mat-sidenav-container class="schedule"> <mat-sidenav-container class="schedule">
<app-tabs (eventResult)="result($event)"/> <mat-sidenav-content>
<app-table-header [startWeek]="startWeek" [currentWeek]="currentWeek" (weekEvent)="handleWeekEvent($event)" <app-tabs (eventResult)="result($event)"/>
#tableHeader/> </mat-sidenav-content>
<app-table [currentWeek]="currentWeek" [startWeek]="startWeek" [data]="data" [isLoad]="isLoadTable"/>
<mat-sidenav-content>
<app-table-header [startWeek]="startWeek" [currentWeek]="currentWeek" (weekEvent)="handleWeekEvent($event)"
#tableHeader/>
</mat-sidenav-content>
<mat-sidenav-content>
<app-table [currentWeek]="currentWeek" [startWeek]="startWeek" [data]="data" [isLoad]="isLoadTable" [disciplineWithWeeks]="disciplineWithWeeks"/>
</mat-sidenav-content>
<mat-sidenav-content>
<mat-checkbox (change)="changeDisciplineWeeksView($event.checked)" [checked]="disciplineWithWeeks">Показать недели в дисциплине</mat-checkbox>
</mat-sidenav-content>
</mat-sidenav-container> </mat-sidenav-container>

View File

@ -38,11 +38,12 @@ import {MatCheckbox} from "@angular/material/checkbox";
}) })
export class ScheduleComponent { export class ScheduleComponent {
protected startWeek!: Date; protected startWeek: Date;
protected data: ScheduleResponse[] = []; protected data: ScheduleResponse[] = [];
protected startTerm: Date; protected startTerm: Date;
protected isLoadTable: boolean = false; protected isLoadTable: boolean = false;
protected pairPeriods: PeriodTimes = {}; protected pairPeriods: PeriodTimes = {};
protected disciplineWithWeeks: boolean = false;
@ViewChild('tableHeader') childComponent!: TableHeaderComponent; @ViewChild('tableHeader') childComponent!: TableHeaderComponent;
@ -50,6 +51,11 @@ export class ScheduleComponent {
this.startTerm = new Date(1, 1, 1); this.startTerm = new Date(1, 1, 1);
this.startWeek = new Date(1, 1, 1); this.startWeek = new Date(1, 1, 1);
let disciplineWithWeeksStorage = localStorage.getItem('disciplineWithWeeks');
if (disciplineWithWeeksStorage)
this.disciplineWithWeeks = disciplineWithWeeksStorage.toLowerCase() === 'true';
api.pairPeriod().subscribe(date => { api.pairPeriod().subscribe(date => {
this.pairPeriods = date; this.pairPeriods = date;
}); });
@ -122,4 +128,9 @@ export class ScheduleComponent {
return result; return result;
} }
protected changeDisciplineWeeksView(checked: boolean) {
localStorage.setItem('disciplineWithWeeks', checked.toString());
this.disciplineWithWeeks = checked;
}
} }