feat: add setup/schedule page
This commit is contained in:
		
							
								
								
									
										56
									
								
								src/pages/setup/schedule/schedule.component.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								src/pages/setup/schedule/schedule.component.html
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,56 @@ | ||||
| <h1>Основных настройки расписания</h1> | ||||
| <hr/> | ||||
| <p class="mat-body-2 secondary"> | ||||
|   На этой странице вы можете настроить основные настройки для расписания. | ||||
| </p> | ||||
| <p class="mat-body-2 secondary"> | ||||
|   Заполните необходимые поля, чтобы настроить корректное отображение расписания. | ||||
| </p> | ||||
|  | ||||
| <form [formGroup]="scheduleSettings"> | ||||
|   <p> | ||||
|     Ведите данные для настройки основных настроек расписания: | ||||
|   </p> | ||||
|  | ||||
|   <div style="display:flex; flex-direction: column;"> | ||||
|     <p> | ||||
|       Чтобы заполнить Cron можно воспользоваться <a href="https://crontab.guru/" target="_blank">сторонними</a> | ||||
|       ресурсами для их генерации | ||||
|     </p> | ||||
|     <mat-form-field color="accent"> | ||||
|       <mat-label>Укажите cron</mat-label> | ||||
|       <input matInput | ||||
|              matTooltip='Расписание для автоматического обновление расписания вуза' | ||||
|              required | ||||
|              formControlName="cron"> | ||||
|  | ||||
|       @if (scheduleSettings.get('cron')?.hasError('required')) { | ||||
|         <mat-error> | ||||
|           Cron является <i>обязательным</i> | ||||
|         </mat-error> | ||||
|       } | ||||
|  | ||||
|       @if (scheduleSettings.get('cron')?.hasError('pattern')) { | ||||
|         <mat-error> | ||||
|           Cron должен быть формата: (* * * * *) | ||||
|         </mat-error> | ||||
|       } | ||||
|     </mat-form-field> | ||||
|  | ||||
|     <mat-form-field color="accent"> | ||||
|       <mat-label>Начало семестра</mat-label> | ||||
|       <input matInput [matDatepicker]="picker" | ||||
|              matTooltip="Укажите начало семестра" | ||||
|              required | ||||
|              formControlName="startTerm"> | ||||
|       <mat-datepicker-toggle matIconSuffix [for]="picker"></mat-datepicker-toggle> | ||||
|       <mat-datepicker #picker></mat-datepicker> | ||||
|  | ||||
|       @if (scheduleSettings.get('startTerm')?.hasError('required')) { | ||||
|         <mat-error> | ||||
|           Начало семестра является <i>обязательным</i> | ||||
|         </mat-error> | ||||
|       } | ||||
|     </mat-form-field> | ||||
|   </div> | ||||
| </form> | ||||
							
								
								
									
										56
									
								
								src/pages/setup/schedule/schedule.component.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								src/pages/setup/schedule/schedule.component.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,56 @@ | ||||
| import {Component} from '@angular/core'; | ||||
| import {FormBuilder, FormGroup, ReactiveFormsModule, Validators} from "@angular/forms"; | ||||
| import {NavigationService} from "@service/navigation.service"; | ||||
| import SetupService from "@api/v1/setup.service"; | ||||
| import {DateAdapter, MatNativeDateModule} from "@angular/material/core"; | ||||
| import {MatFormFieldModule} from "@angular/material/form-field"; | ||||
| import {MatSelectModule} from "@angular/material/select"; | ||||
| import {MatInput} from "@angular/material/input"; | ||||
| import {MatTooltip} from "@angular/material/tooltip"; | ||||
| import {MatIconButton} from "@angular/material/button"; | ||||
| import {MatIcon} from "@angular/material/icon"; | ||||
| import {MatDatepickerModule} from "@angular/material/datepicker"; | ||||
|  | ||||
| @Component({ | ||||
|   selector: 'app-schedule-conf', | ||||
|   standalone: true, | ||||
|   imports: [ | ||||
|     ReactiveFormsModule, | ||||
|     MatFormFieldModule, | ||||
|     MatSelectModule, | ||||
|     MatInput, | ||||
|     MatTooltip, | ||||
|     MatIconButton, | ||||
|     MatIcon, | ||||
|     MatDatepickerModule, | ||||
|     MatNativeDateModule | ||||
|   ], | ||||
|   templateUrl: './schedule.component.html' | ||||
| }) | ||||
|  | ||||
| export class ScheduleComponent { | ||||
|   protected scheduleSettings!: FormGroup; | ||||
|  | ||||
|   constructor( | ||||
|     private navigationService: NavigationService, private formBuilder: FormBuilder, private api: SetupService, private _adapter: DateAdapter<any>) { | ||||
|     this._adapter.setLocale('ru'); | ||||
|     this.scheduleSettings = this.formBuilder.group({ | ||||
|         cron: ['0 */6 * * *', Validators.pattern(/^([^\s]+\s){4}[^\s]{1}$/)], | ||||
|         startTerm: ['', Validators.required] | ||||
|       } | ||||
|     ); | ||||
|  | ||||
|     this.navigationService.setNextButtonState(false); | ||||
|     this.scheduleSettings.valueChanges.subscribe(() => { | ||||
|       this.navigationService.setNextButtonState(this.scheduleSettings.valid); | ||||
|     }); | ||||
|  | ||||
|     this.navigationService.nextButtonAction = () => { | ||||
|       return this.api.setSchedule({ | ||||
|           "cronUpdateSchedule": this.scheduleSettings.get('cron')?.value, | ||||
|           "startTerm": this.scheduleSettings.get('startTerm')?.value | ||||
|         } | ||||
|       ); | ||||
|     }; | ||||
|   } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user