Compare commits
28 commits
4428e36945
...
82129b958e
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
82129b958e | ||
|
|
20fdb1ae11 | ||
|
|
4c110e2c71 | ||
|
|
fb543cffb9 | ||
|
|
aed5710da7 | ||
|
|
d1ffcf928d | ||
|
|
005e4955ae | ||
|
|
76dcec3ae2 | ||
|
|
038a4bf976 | ||
|
|
401b4f32b1 | ||
|
|
8486ce8fab | ||
|
|
74fca41d66 | ||
|
|
c9c1fe029b | ||
|
|
cfb48cc0ff | ||
|
|
e3f5fbad44 | ||
|
|
b256aff872 | ||
|
|
d9d75b76f2 | ||
|
|
8ad6ce66fc | ||
|
|
5976db0cfc | ||
|
|
4d5b1ee26e | ||
|
|
ac00733847 | ||
|
|
c6c67463c9 | ||
|
|
1824057e3e | ||
|
|
6cb8a46f6c | ||
|
|
5df8db657f | ||
|
|
400f5af716 | ||
|
|
d943e956ab | ||
|
|
39a21fe34a |
|
|
@ -3,19 +3,18 @@
|
|||
|
||||
## Setup Development Environment
|
||||
|
||||
### General
|
||||
|
||||
1. Install `python>=3.10` and development packages
|
||||
(`apt install python3-dev g++` on Ubuntu)
|
||||
2. Run `./setup.sh`
|
||||
|
||||
### Backend
|
||||
|
||||
1. Install `python>=3.8`
|
||||
2. Create a virtual environment with `python3 -m venv .venv`
|
||||
3. Activate your dev environment with `source .venv/bin/activate`
|
||||
4. Update pip packages with `pip install -U pip setuptools wheel`
|
||||
5. Install with `pip install .`
|
||||
6. Install development dependencies with `pip install tox black pytest pytest-aiohttp`
|
||||
7. Add git-hook to run test and stylecheck before commmit with
|
||||
`ln -s ../../git-hooks/pre-commit .git/hooks/pre-commit`
|
||||
8. Add git-hook to check commmit message format with
|
||||
`ln -s ../../git-hooks/commit-msg .git/hooks/commit-msg`
|
||||
9. Turn off production mode: `sudo su -c 'echo "production = 0" >> /etc/kibicara.conf'`
|
||||
0. `cd backend`
|
||||
1. Activate your dev environment with `source .venv/bin/activate`
|
||||
2. Install with `pip install .`
|
||||
3. Turn off production mode: `sudo su -c 'echo "production = 0" >> /etc/kibicara.conf'`
|
||||
|
||||
#### Cheatsheet
|
||||
|
||||
|
|
@ -23,7 +22,7 @@
|
|||
- Execute Kibicara with `kibicara` (verbose: `kibicara -vvv`)
|
||||
- Interact with Swagger REST-API Documentation: `http://localhost:8000/api/docs`
|
||||
- Test and stylecheck with `tox`
|
||||
- Fix style issues with `black -S kibicara tests`
|
||||
- Fix style issues with `black -S src tests`
|
||||
|
||||
### Frontend
|
||||
|
||||
|
|
@ -60,14 +59,9 @@ email address and register via frontend or manually at `http://localhost:8000/ap
|
|||
## Contribution Guidelines
|
||||
### Branches
|
||||
|
||||
- **Master:** The master branch tracks the last stable release.
|
||||
- Releases will be done using release tags.
|
||||
- Force push and pushes without group consent are disallowed.
|
||||
- There never should be a merge commit from development into master!
|
||||
- **Development:** The development branch is used to add new features.
|
||||
- Only rebase of feature branches is allowed.
|
||||
- On Release the development branch will be rebased onto master and a release
|
||||
tag will be created on master
|
||||
- On Release a release tag will be created
|
||||
- **Feature-Branches:**
|
||||
- A feature branch will be used to develop a feature.
|
||||
- It belongs to one developer only and force push is allowed.
|
||||
|
|
|
|||
5
backend/README.md
Normal file
5
backend/README.md
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
# Kibicara backend
|
||||
|
||||
Kibicara relays messages between different platforms (= social networks).
|
||||
This is just the backend. For info about the whole project see [our git
|
||||
repo](https://git.0x90.space/ticketfrei/ticketfrei3).
|
||||
6
backend/pyproject.toml
Normal file
6
backend/pyproject.toml
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
[build-system]
|
||||
requires = [
|
||||
"setuptools>=42",
|
||||
"wheel"
|
||||
]
|
||||
build-backend = "setuptools.build_meta"
|
||||
70
backend/setup.cfg
Normal file
70
backend/setup.cfg
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
[metadata]
|
||||
name = kibicara
|
||||
version = 0.1.0
|
||||
author = 0x90.space
|
||||
author_email = people@schleuder.0x90.space
|
||||
description = distribute messages across different social media
|
||||
long_description = file: README.md
|
||||
long_description_content_type = text/markdown
|
||||
url = https://git.0x90.space/ticketfrei/ticketfrei3
|
||||
project_urls =
|
||||
Bug Tracker = https://git.0x90.space/ticketfrei/ticketfrei3/issues
|
||||
classifiers =
|
||||
Programming Language :: Python :: 3
|
||||
License :: Public Domain
|
||||
|
||||
[options]
|
||||
package_dir =
|
||||
= src
|
||||
packages = find:
|
||||
python_requires = >=3.10
|
||||
install_requires =
|
||||
aiofiles
|
||||
aiogram
|
||||
aiosqlite
|
||||
argon2_cffi
|
||||
fastapi
|
||||
httpx
|
||||
hypercorn
|
||||
ormantic @ https://github.com/dl6tom/ormantic/tarball/master#egg=ormantic-0.0.32
|
||||
passlib
|
||||
peony-twitter[all]
|
||||
pynacl
|
||||
python-multipart
|
||||
pytoml
|
||||
requests
|
||||
scrypt
|
||||
|
||||
[options.packages.find]
|
||||
where = src
|
||||
|
||||
[options.entry_points]
|
||||
console_scripts =
|
||||
kibicara = kibicara.kibicara:Main
|
||||
kibicara_mda = kibicara.platforms.email.mda:Main
|
||||
|
||||
[tox:tox]
|
||||
envlist = lint, py310
|
||||
isolated_build = True
|
||||
|
||||
[testenv:lint]
|
||||
skip_install = True
|
||||
deps =
|
||||
black
|
||||
flake8
|
||||
mypy
|
||||
commands =
|
||||
black -S --check --diff src tests
|
||||
flake8 src tests
|
||||
# not yet
|
||||
#mypy src tests
|
||||
|
||||
[testenv]
|
||||
deps =
|
||||
pytest
|
||||
pytest-asyncio
|
||||
commands =
|
||||
pytest tests
|
||||
|
||||
[flake8]
|
||||
max_line_length = 88
|
||||
|
|
@ -32,6 +32,7 @@ speed-measure-plugin*.json
|
|||
.history/*
|
||||
|
||||
# misc
|
||||
/.angular/cache
|
||||
/.sass-cache
|
||||
/connect.lock
|
||||
/coverage
|
||||
|
|
@ -22,7 +22,6 @@
|
|||
"main": "src/main.ts",
|
||||
"polyfills": "src/polyfills.ts",
|
||||
"tsConfig": "tsconfig.app.json",
|
||||
"aot": true,
|
||||
"assets": ["src/favicon.ico", "src/assets"],
|
||||
"styles": [
|
||||
"./node_modules/@angular/material/prebuilt-themes/deeppurple-amber.css",
|
||||
|
|
@ -31,7 +30,13 @@
|
|||
"stylePreprocessorOptions": {
|
||||
"includePaths": ["src/sass"]
|
||||
},
|
||||
"scripts": []
|
||||
"scripts": [],
|
||||
"vendorChunk": true,
|
||||
"extractLicenses": false,
|
||||
"buildOptimizer": false,
|
||||
"sourceMap": true,
|
||||
"optimization": false,
|
||||
"namedChunks": true
|
||||
},
|
||||
"configurations": {
|
||||
"production": {
|
||||
|
|
@ -44,7 +49,6 @@
|
|||
"optimization": true,
|
||||
"outputHashing": "all",
|
||||
"sourceMap": false,
|
||||
"extractCss": true,
|
||||
"namedChunks": false,
|
||||
"extractLicenses": true,
|
||||
"vendorChunk": false,
|
||||
|
|
@ -62,7 +66,8 @@
|
|||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"defaultConfiguration": ""
|
||||
},
|
||||
"serve": {
|
||||
"builder": "@angular-devkit/build-angular:dev-server",
|
||||
|
|
@ -99,17 +104,6 @@
|
|||
"scripts": []
|
||||
}
|
||||
},
|
||||
"lint": {
|
||||
"builder": "@angular-devkit/build-angular:tslint",
|
||||
"options": {
|
||||
"tsConfig": [
|
||||
"tsconfig.app.json",
|
||||
"tsconfig.spec.json",
|
||||
"e2e/tsconfig.json"
|
||||
],
|
||||
"exclude": ["**/node_modules/**", "src/app/core/api/**"]
|
||||
}
|
||||
},
|
||||
"e2e": {
|
||||
"builder": "@angular-devkit/build-angular:protractor",
|
||||
"options": {
|
||||
|
|
@ -124,6 +118,5 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"defaultProject": "kibicara-frontend"
|
||||
}
|
||||
}
|
||||
|
|
@ -3,7 +3,7 @@
|
|||
"compilerOptions": {
|
||||
"outDir": "../out-tsc/e2e",
|
||||
"module": "commonjs",
|
||||
"target": "es5",
|
||||
"target": "es2018",
|
||||
"types": [
|
||||
"jasmine",
|
||||
"jasminewd2",
|
||||
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.6 KiB |
26775
frontend/package-lock.json
generated
Normal file
26775
frontend/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load diff
54
frontend/package.json
Normal file
54
frontend/package.json
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
{
|
||||
"name": "kibicara-frontend",
|
||||
"version": "0.0.0",
|
||||
"scripts": {
|
||||
"openapi-generator": "openapi-generator generate -g typescript-angular --additional-properties=providedInRoot=true -o src/app/core/api -i http://localhost:8000/api/openapi.json",
|
||||
"ng": "ng",
|
||||
"start": "ng serve",
|
||||
"build": "ng build",
|
||||
"test": "ng test",
|
||||
"lint": "ng lint",
|
||||
"e2e": "ng e2e"
|
||||
},
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"@angular/animations": "^15.2.3",
|
||||
"@angular/cdk": "^15.2.3",
|
||||
"@angular/common": "^15.2.3",
|
||||
"@angular/compiler": "^15.2.3",
|
||||
"@angular/core": "^15.2.3",
|
||||
"@angular/forms": "^15.2.3",
|
||||
"@angular/localize": "^15.2.3",
|
||||
"@angular/material": "^15.2.3",
|
||||
"@angular/platform-browser": "^15.2.3",
|
||||
"@angular/platform-browser-dynamic": "^15.2.3",
|
||||
"@angular/router": "^15.2.3",
|
||||
"ng2-search-filter": "^0.5.1",
|
||||
"rxjs": "~6.5.4",
|
||||
"tslib": "^2.0.0",
|
||||
"zone.js": "~0.11.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@angular-devkit/build-angular": "^15.2.4",
|
||||
"@angular/cli": "^15.2.4",
|
||||
"@angular/compiler-cli": "^15.2.3",
|
||||
"@angular/language-service": "^15.2.3",
|
||||
"@openapitools/openapi-generator-cli": "^1.0.18-5.0.0-beta2",
|
||||
"@types/jasmine": "~3.6.0",
|
||||
"@types/jasminewd2": "~2.0.3",
|
||||
"@types/node": "^12.12.64",
|
||||
"codelyzer": "^6.0.0",
|
||||
"jasmine-core": "~3.6.0",
|
||||
"jasmine-spec-reporter": "~5.0.0",
|
||||
"karma": "~6.4.1",
|
||||
"karma-chrome-launcher": "~3.1.0",
|
||||
"karma-coverage-istanbul-reporter": "~3.0.2",
|
||||
"karma-jasmine": "~4.0.0",
|
||||
"karma-jasmine-html-reporter": "^1.5.0",
|
||||
"ngx-markdown": "^15.1.2",
|
||||
"protractor": "~7.0.0",
|
||||
"ts-node": "~8.3.0",
|
||||
"tslint": "~6.1.0",
|
||||
"typescript": "~4.9.5"
|
||||
}
|
||||
}
|
||||
|
|
@ -28,7 +28,7 @@ const routes: Routes = [
|
|||
];
|
||||
|
||||
@NgModule({
|
||||
imports: [RouterModule.forRoot(routes), SharedModule],
|
||||
imports: [RouterModule.forRoot(routes, {}), SharedModule],
|
||||
exports: [RouterModule],
|
||||
})
|
||||
export class AppRoutingModule {}
|
||||
|
|
@ -1,9 +1,9 @@
|
|||
import { TestBed, async } from '@angular/core/testing';
|
||||
import { TestBed, waitForAsync } from '@angular/core/testing';
|
||||
import { RouterTestingModule } from '@angular/router/testing';
|
||||
import { AppComponent } from './app.component';
|
||||
|
||||
describe('AppComponent', () => {
|
||||
beforeEach(async(() => {
|
||||
beforeEach(waitForAsync(() => {
|
||||
TestBed.configureTestingModule({
|
||||
imports: [
|
||||
RouterTestingModule
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
|
||||
|
||||
import { ConfirmComponent } from './confirm.component';
|
||||
|
||||
|
|
@ -6,7 +6,7 @@ describe('ConfirmComponent', () => {
|
|||
let component: ConfirmComponent;
|
||||
let fixture: ComponentFixture<ConfirmComponent>;
|
||||
|
||||
beforeEach(async(() => {
|
||||
beforeEach(waitForAsync(() => {
|
||||
TestBed.configureTestingModule({
|
||||
declarations: [ ConfirmComponent ]
|
||||
})
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
<div class="container">
|
||||
<mat-card class="login-form">
|
||||
<mat-card appearance="outlined" class="login-form">
|
||||
<mat-card-header>
|
||||
<h2>Log in as hood admin!</h2>
|
||||
</mat-card-header>
|
||||
|
|
@ -7,7 +7,7 @@
|
|||
margin-top: 3%;
|
||||
}
|
||||
|
||||
.mat-card:not([class*="mat-elevation-z"]) {
|
||||
.mat-mdc-card:not([class*="mat-elevation-z"]) {
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
|
||||
|
||||
import { LoginComponent } from './login.component';
|
||||
|
||||
|
|
@ -6,7 +6,7 @@ describe('LoginComponent', () => {
|
|||
let component: LoginComponent;
|
||||
let fixture: ComponentFixture<LoginComponent>;
|
||||
|
||||
beforeEach(async(() => {
|
||||
beforeEach(waitForAsync(() => {
|
||||
TestBed.configureTestingModule({
|
||||
declarations: [ LoginComponent ]
|
||||
})
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
import { Component, OnInit } from '@angular/core';
|
||||
import { LoginService } from '../../core/auth/login.service';
|
||||
import { Router, ActivatedRoute } from '@angular/router';
|
||||
import { Validators, FormGroup, FormBuilder } from '@angular/forms';
|
||||
import { Validators, UntypedFormGroup, UntypedFormBuilder } from '@angular/forms';
|
||||
import { first } from 'rxjs/operators';
|
||||
import { MatSnackBar } from '@angular/material/snack-bar';
|
||||
|
||||
|
|
@ -11,7 +11,7 @@ import { MatSnackBar } from '@angular/material/snack-bar';
|
|||
styleUrls: ['./login.component.scss'],
|
||||
})
|
||||
export class LoginComponent implements OnInit {
|
||||
loginForm: FormGroup;
|
||||
loginForm: UntypedFormGroup;
|
||||
returnUrl: string;
|
||||
loading = false;
|
||||
submitted = false;
|
||||
|
|
@ -21,7 +21,7 @@ export class LoginComponent implements OnInit {
|
|||
private loginService: LoginService,
|
||||
private router: Router,
|
||||
private route: ActivatedRoute,
|
||||
private formBuilder: FormBuilder,
|
||||
private formBuilder: UntypedFormBuilder,
|
||||
private snackBar: MatSnackBar
|
||||
) {
|
||||
if (this.loginService.currentHoodAdminValue) {
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
<div class="container">
|
||||
<mat-card class="login-form">
|
||||
<mat-card appearance="outlined" class="login-form">
|
||||
<mat-card-header>
|
||||
<h2>Reset password</h2>
|
||||
</mat-card-header>
|
||||
|
|
@ -6,7 +6,7 @@
|
|||
margin-top: 3%;
|
||||
}
|
||||
|
||||
.mat-card:not([class*="mat-elevation-z"]) {
|
||||
.mat-mdc-card:not([class*="mat-elevation-z"]) {
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
|
||||
|
||||
import { PasswordResetComponent } from './password-reset.component';
|
||||
|
||||
|
|
@ -6,7 +6,7 @@ describe('PasswordResetComponent', () => {
|
|||
let component: PasswordResetComponent;
|
||||
let fixture: ComponentFixture<PasswordResetComponent>;
|
||||
|
||||
beforeEach(async(() => {
|
||||
beforeEach(waitForAsync(() => {
|
||||
TestBed.configureTestingModule({
|
||||
declarations: [PasswordResetComponent],
|
||||
}).compileComponents();
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
import { Component, OnInit } from '@angular/core';
|
||||
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
|
||||
import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms';
|
||||
import { MatSnackBar } from '@angular/material/snack-bar';
|
||||
import { ActivatedRoute, Router } from '@angular/router';
|
||||
import { first } from 'rxjs/operators';
|
||||
|
|
@ -12,7 +12,7 @@ import { LoginService } from 'src/app/core/auth/login.service';
|
|||
styleUrls: ['./password-reset.component.scss'],
|
||||
})
|
||||
export class PasswordResetComponent implements OnInit {
|
||||
resetForm: FormGroup;
|
||||
resetForm: UntypedFormGroup;
|
||||
returnUrl: string;
|
||||
loading = false;
|
||||
submitted = false;
|
||||
|
|
@ -23,7 +23,7 @@ export class PasswordResetComponent implements OnInit {
|
|||
private loginService: LoginService,
|
||||
private router: Router,
|
||||
private route: ActivatedRoute,
|
||||
private formBuilder: FormBuilder,
|
||||
private formBuilder: UntypedFormBuilder,
|
||||
private snackBar: MatSnackBar
|
||||
) {
|
||||
if (this.loginService.currentHoodAdminValue) {
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
<div class="container">
|
||||
<mat-card class="login-form">
|
||||
<mat-card appearance="outlined" class="login-form">
|
||||
<mat-card-header>
|
||||
<h2>Enter your new password</h2>
|
||||
</mat-card-header>
|
||||
|
|
@ -6,7 +6,7 @@
|
|||
margin-top: 3%;
|
||||
}
|
||||
|
||||
.mat-card:not([class*="mat-elevation-z"]) {
|
||||
.mat-mdc-card:not([class*="mat-elevation-z"]) {
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
|
||||
|
||||
import { SetPasswordComponent } from './set-password.component';
|
||||
|
||||
|
|
@ -6,7 +6,7 @@ describe('SetPasswordComponent', () => {
|
|||
let component: SetPasswordComponent;
|
||||
let fixture: ComponentFixture<SetPasswordComponent>;
|
||||
|
||||
beforeEach(async(() => {
|
||||
beforeEach(waitForAsync(() => {
|
||||
TestBed.configureTestingModule({
|
||||
declarations: [SetPasswordComponent],
|
||||
}).compileComponents();
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
import { Component, OnInit } from '@angular/core';
|
||||
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
|
||||
import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms';
|
||||
import { MatSnackBar } from '@angular/material/snack-bar';
|
||||
import { ActivatedRoute, Router } from '@angular/router';
|
||||
import { first } from 'rxjs/operators';
|
||||
|
|
@ -12,7 +12,7 @@ import { LoginService } from 'src/app/core/auth/login.service';
|
|||
styleUrls: ['./set-password.component.scss'],
|
||||
})
|
||||
export class SetPasswordComponent implements OnInit {
|
||||
resetForm: FormGroup;
|
||||
resetForm: UntypedFormGroup;
|
||||
returnUrl: string;
|
||||
loading = false;
|
||||
submitted = false;
|
||||
|
|
@ -24,7 +24,7 @@ export class SetPasswordComponent implements OnInit {
|
|||
private loginService: LoginService,
|
||||
private router: Router,
|
||||
private route: ActivatedRoute,
|
||||
private formBuilder: FormBuilder,
|
||||
private formBuilder: UntypedFormBuilder,
|
||||
private snackBar: MatSnackBar
|
||||
) {
|
||||
this.token = this.route.snapshot.queryParams.token;
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
<div class="container">
|
||||
<div class="banner"></div>
|
||||
<mat-card class="register-form">
|
||||
<mat-card appearance="outlined" class="register-form">
|
||||
<mat-card-header>
|
||||
<h2>Register as a hood admin!</h2>
|
||||
</mat-card-header>
|
||||
|
|
@ -7,7 +7,7 @@
|
|||
margin-top: 3%;
|
||||
}
|
||||
|
||||
.mat-card:not([class*="mat-elevation-z"]) {
|
||||
.mat-mdc-card:not([class*="mat-elevation-z"]) {
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
|
||||
|
||||
import { RegisterComponent } from './register.component';
|
||||
|
||||
|
|
@ -6,7 +6,7 @@ describe('RegisterComponent', () => {
|
|||
let component: RegisterComponent;
|
||||
let fixture: ComponentFixture<RegisterComponent>;
|
||||
|
||||
beforeEach(async(() => {
|
||||
beforeEach(waitForAsync(() => {
|
||||
TestBed.configureTestingModule({
|
||||
declarations: [ RegisterComponent ]
|
||||
})
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
import { Component, OnInit } from '@angular/core';
|
||||
import { AdminService } from '../../core/api';
|
||||
import { Validators, FormBuilder, FormGroup } from '@angular/forms';
|
||||
import { Validators, UntypedFormBuilder, UntypedFormGroup } from '@angular/forms';
|
||||
import { first } from 'rxjs/operators';
|
||||
import { Router, ActivatedRoute } from '@angular/router';
|
||||
import { LoginService } from 'src/app/core/auth/login.service';
|
||||
|
|
@ -12,13 +12,13 @@ import { MatSnackBar } from '@angular/material/snack-bar';
|
|||
styleUrls: ['./register.component.scss'],
|
||||
})
|
||||
export class RegisterComponent implements OnInit {
|
||||
registerForm: FormGroup;
|
||||
registerForm: UntypedFormGroup;
|
||||
loading = false;
|
||||
submitted = false;
|
||||
|
||||
constructor(
|
||||
private readonly adminService: AdminService,
|
||||
private formBuilder: FormBuilder,
|
||||
private formBuilder: UntypedFormBuilder,
|
||||
private route: ActivatedRoute,
|
||||
private loginService: LoginService,
|
||||
private router: Router,
|
||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue