From d6f51a5d1c4a58d0a283759fe76d6067762d74d6 Mon Sep 17 00:00:00 2001 From: Polianin Nikita Date: Tue, 11 Jun 2024 00:24:25 +0300 Subject: [PATCH] feat: add setup/welcome page --- .../setup/welcome/welcome.component.html | 54 +++++++++++++++++++ src/pages/setup/welcome/welcome.component.ts | 45 ++++++++++++++++ 2 files changed, 99 insertions(+) create mode 100644 src/pages/setup/welcome/welcome.component.html create mode 100644 src/pages/setup/welcome/welcome.component.ts diff --git a/src/pages/setup/welcome/welcome.component.html b/src/pages/setup/welcome/welcome.component.html new file mode 100644 index 0000000..8609d32 --- /dev/null +++ b/src/pages/setup/welcome/welcome.component.html @@ -0,0 +1,54 @@ +

Установщик MIREA Schedule

+
+

+ Мы рады помочь вам начать работу с нашим приложением. + Этот мастер настройки проведет вас через ряд шагов по настройке основных параметров вашей системы. + К концу этого процесса у вас будет все готово для использования приложения в полной мере. +

+ +

+ Пожалуйста, внимательно следуйте инструкциям и предоставьте необходимую информацию при появлении запроса. + Если у вас есть какие-либо вопросы, обратитесь к документации или свяжитесь с нашей службой поддержки. +

+ +

+ Для получения ключа используете тот же хост, что и Backend приложение и выполните: +

+ + curl -X 'GET' '{{apiToGetToken}}/Setup/GenerateToken' -H 'accept: application/json' + +

+ Или +

+ + Invoke-RestMethod -Uri "{{apiToGetToken}}/Setup/GenerateToken" -Method Get -Headers @{accept="application/json"} + + +
+ + Токен сервера + + + @if (tokenControl.hasError('required')) { + + Токен является обязательным + + } + + @if (tokenControl.hasError('pattern')) { + + Токен должен содержать только BASE64 символы кратные 4 (цирфы, латинские буквы и символы "+/=") + + } + + @if (tokenControl.hasError('minlength')) { + + Токен не может быть меньше 16 символов + + } + +
+ +

Для начала необходимо ввести токен, который нужен для настройки столь важных данных!

diff --git a/src/pages/setup/welcome/welcome.component.ts b/src/pages/setup/welcome/welcome.component.ts new file mode 100644 index 0000000..24675a4 --- /dev/null +++ b/src/pages/setup/welcome/welcome.component.ts @@ -0,0 +1,45 @@ +import {Component} from '@angular/core'; +import {MatButton} from "@angular/material/button"; +import {NavigationService} from "@service/navigation.service"; +import {MatFormFieldModule} from "@angular/material/form-field"; +import {MatInput} from "@angular/material/input"; +import {AsyncPipe} from "@angular/common"; +import {FormControl, ReactiveFormsModule, Validators} from "@angular/forms"; +import SetupService from "@api/v1/setup.service"; +import {environment} from "@/config/environment"; +import {AvailableVersion} from "@api/api.service"; + +@Component({ + selector: 'app-welcome', + standalone: true, + imports: [ + MatButton, + MatFormFieldModule, + MatInput, + AsyncPipe, + ReactiveFormsModule + ], + templateUrl: './welcome.component.html' +}) + +export class WelcomeComponent { + protected tokenControl = new FormControl('', [ + Validators.required, + Validators.pattern(/^(?:[A-Za-z0-9+\/]{4})*(?:[A-Za-z0-9+\/]{4}|[A-Za-z0-9+\/]{3}=|[A-Za-z0-9+\/]{2}={2})$/), + Validators.minLength(16) + ]); + + protected apiToGetToken : string = environment.apiUrl; + + constructor(private navigationService: NavigationService, private api: SetupService) { + this.apiToGetToken += AvailableVersion[this.api.version]; + this.navigationService.nextButtonAction = () => { + return this.api.checkToken(this.tokenControl.value ?? ''); + }; + + this.navigationService.setNextButtonState(false); + this.tokenControl.valueChanges.subscribe(() => { + this.navigationService.setNextButtonState(this.tokenControl.valid); + }); + } +}