@@ -115,3 +117,5 @@
+
+
diff --git a/src/app/pages/agenda/agenda.component.scss b/src/app/pages/agenda/agenda.component.scss
index 399a180..91bc3fc 100644
--- a/src/app/pages/agenda/agenda.component.scss
+++ b/src/app/pages/agenda/agenda.component.scss
@@ -139,3 +139,23 @@ strong, p {
.date:hover {
text-decoration: underline;
}
+
+.dropdown{
+ padding-left: 12px;
+ padding-right: 12px;
+}
+
+.calendar {
+ animation: fadeIn 0.4s ease-out;
+}
+
+@keyframes fadeIn {
+ from {
+ opacity: 0;
+ transform: translateY(-15px);
+ }
+ to {
+ opacity: 1;
+ transform: translateY(0);
+ }
+}
diff --git a/src/app/pages/agenda/agenda.component.ts b/src/app/pages/agenda/agenda.component.ts
index 3f1430f..17065a2 100644
--- a/src/app/pages/agenda/agenda.component.ts
+++ b/src/app/pages/agenda/agenda.component.ts
@@ -18,13 +18,14 @@ import {DateFormatter} from '../../utils/date-formatter';
import {WeekDay} from '../../models/week-day';
import {NewItemComponent} from '../../components/new-item/new-item.component';
import {timeAfterStartValidator} from '../../models/validators/time-after-start-validator';
+import {DropdownContentComponent} from '../../components/dropdown-content/dropdown-content.component';
@Component({
selector: 'app-agenda',
imports: [NgFor,
TuiButton, CommonModule, NgIf, ModalComponent, ReactiveFormsModule,
TuiInputTimeModule, TuiTextfieldControllerModule,
- TuiInputModule, TuiTextareaModule, TuiInputDateModule, TuiIcon, DetailsComponent, TuiCalendar, NewItemComponent],
+ TuiInputModule, TuiTextareaModule, TuiInputDateModule, TuiIcon, DetailsComponent, TuiCalendar, NewItemComponent, DropdownContentComponent],
templateUrl: './agenda.component.html',
providers: [tuiDateFormatProvider({separator: '-'}), AppointmentService],
styleUrl: './agenda.component.scss'
diff --git a/src/app/pages/home/home.component.scss b/src/app/pages/home/home.component.scss
index 2ca785c..38e8645 100644
--- a/src/app/pages/home/home.component.scss
+++ b/src/app/pages/home/home.component.scss
@@ -48,9 +48,7 @@ tui-avatar {
font-size: 0.8125rem;
line-height: 1.25rem;
padding: 0.25rem 0.75rem;
- margin-left: 4px;
- margin-right: 20px;
- margin-bottom: 8px;
+ margin: 20px 20px 8px 4px;
min-width: 200px;
}
diff --git a/src/app/pages/home/home.component.ts b/src/app/pages/home/home.component.ts
index 1d74e02..4a6e352 100644
--- a/src/app/pages/home/home.component.ts
+++ b/src/app/pages/home/home.component.ts
@@ -3,13 +3,13 @@ import {FormsModule, ReactiveFormsModule} from '@angular/forms';
import {Router, RouterLink, RouterLinkActive, RouterModule} from '@angular/router';
import {TuiAvatar, TuiChevron,} from '@taiga-ui/kit';
import {AuthService} from '../../services/auth.service';
-import {User} from '../../models/user';
import {TuiButton, TuiDropdown} from '@taiga-ui/core';
import {TuiActiveZone, TuiObscured} from '@taiga-ui/cdk';
import {environment} from '../../../environments/environment';
import {Company} from '../../models/company';
-import {CompanyService} from '../../services/company.service';
import {TuiSelectModule} from '@taiga-ui/legacy';
+import {UserService} from '../../services/user.service';
+import {AppUserDto, CompanyDTO} from '../../models/app-user-dto';
@Component({
selector: 'app-home',
@@ -18,12 +18,13 @@ import {TuiSelectModule} from '@taiga-ui/legacy';
styleUrl: './home.component.scss'
})
export class HomeComponent implements OnInit {
- user: User
+ user: AppUserDto;
fullName: string
- companies: Company[]
+ companies: CompanyDTO[];
+ currentCompany: CompanyDTO;
getInitials(): string {
- this.user = this.authService.getUserInfo();
+ this.user = this.userService.userValue
this.fullName = this.user.firstName + ' ' + this.user.lastName;
return this.fullName.split(' ').map((n) => n[0]).join('').substring(0, 2);
}
@@ -44,29 +45,23 @@ export class HomeComponent implements OnInit {
this.open = active && this.open;
}
- constructor(private authService: AuthService, private router: Router, private companyService: CompanyService) {
+ constructor(private authService: AuthService, private router: Router, private userService: UserService) {
}
ngOnInit(): void {
- if (!this.authService.isAuthenticated()) {
+ if (!this.userService.userValue) {
this.router.navigate(['login']);
} else {
- this.companyService.getCompanies().subscribe(
- response => {
- this.companies = response
- this.authService.setCurrentCompany(response[0])
- console.log(this.companies)
- }
- )
+ this.companies = this.userService.userValue.companies.map(a => a.company)
+ this.currentCompany = this.companies[0];
}
}
logout() {
- this.authService.logout();
+ this.userService.clearUser();
this.router.navigate(['login']);
}
protected readonly environment = environment;
- currentCompany: Company;
}
diff --git a/src/app/pages/login/login.component.ts b/src/app/pages/login/login.component.ts
index 7bc6190..f387d8a 100644
--- a/src/app/pages/login/login.component.ts
+++ b/src/app/pages/login/login.component.ts
@@ -4,10 +4,11 @@ import {Router} from '@angular/router';
import {TuiAppearance, TuiButton, TuiError, TuiTextfield,} from '@taiga-ui/core';
import {TuiCardLarge, TuiForm, TuiHeader} from '@taiga-ui/layout';
import {AuthService} from '../../services/auth.service';
-import {UserDto} from '../../models/user-dto';
+import {AppUserDto} from '../../models/app-user-dto';
import {HttpErrorResponse} from '@angular/common/http';
import {TuiValidationError} from '@taiga-ui/cdk';
import {environment} from '../../../environments/environment';
+import {UserService} from '../../services/user.service';
@Component({
selector: 'app-login',
@@ -35,7 +36,7 @@ export class LoginComponent {
return this.enabled ? this.error : null;
}
- constructor(private router: Router, private authService: AuthService) {
+ constructor(private router: Router, private authService: AuthService, private userService: UserService) {
this.form = new FormGroup({
username: new FormControl('', Validators.required),
password: new FormControl('', Validators.required)
@@ -44,9 +45,10 @@ export class LoginComponent {
login() {
+ console.log('IM LOGGING IN')
this.authService.login(this.form.get('username').value, this.form.get('password').value).subscribe({
- next: (user: UserDto) => {
- localStorage.setItem('token', user.token);
+ next: (user: AppUserDto) => {
+ this.userService.setUser(user);
this.router.navigate(['/home/agenda']);
},
error: (err: HttpErrorResponse) => {
diff --git a/src/app/services/agenda.service.ts b/src/app/services/agenda.service.ts
new file mode 100644
index 0000000..40f48c1
--- /dev/null
+++ b/src/app/services/agenda.service.ts
@@ -0,0 +1,32 @@
+import {Injectable} from '@angular/core';
+import {environment} from '../../environments/environment';
+import {HttpClient} from '@angular/common/http';
+import {Observable} from 'rxjs';
+import {InviteEntity} from '../models/invite-entity';
+
+@Injectable({
+ providedIn: 'root'
+})
+export class AgendaService {
+
+ baseApi = `${environment.baseApi}/agenda`;
+
+ constructor(private http: HttpClient) {
+ }
+
+ sendInvite(url: string, email: string): Observable
{
+ return this.http.post(`${this.baseApi}/${email}`, {url});
+ }
+
+ createInvite(companyId: number, email: string): Observable {
+ return this.http.post(`${this.baseApi}/createinvite`, {companyId: companyId, email: email});
+ }
+
+ verifyInvite(token: string) {
+ return this.http.get(this.baseApi + `/verify?token=${token}`, {})
+ }
+
+ acceptInvite(user: number, company: number): Observable {
+ return this.http.post(this.baseApi + `/link?user=${user}&company=${company}`, {})
+ }
+}
diff --git a/src/app/services/auth.service.ts b/src/app/services/auth.service.ts
index f76a255..2a3c166 100644
--- a/src/app/services/auth.service.ts
+++ b/src/app/services/auth.service.ts
@@ -18,6 +18,7 @@ export class AuthService {
}
login(username: string, password: string): Observable {
+ console.log(username + ' is logging in');
return this.http.post(this.baseApi, {username, password});
}
diff --git a/src/app/services/company.service.ts b/src/app/services/company.service.ts
index 30f6603..f08df7b 100644
--- a/src/app/services/company.service.ts
+++ b/src/app/services/company.service.ts
@@ -3,6 +3,7 @@ import {HttpClient} from '@angular/common/http';
import {Observable} from 'rxjs';
import {environment} from '../../environments/environment';
import {Company} from '../models/company';
+import {CompanyDTO} from '../models/app-user-dto';
@Injectable({
providedIn: 'root',
@@ -16,4 +17,13 @@ export class CompanyService {
getCompanies(): Observable {
return this.http.get(`${this.baseApi}`);
}
+
+ getCompany(id: number): Observable {
+ console.log(id)
+ return this.http.get(`${this.baseApi}/${id}`);
+ }
+
+ linkCompany(user: number, token: string): Observable {
+ return this.http.post(this.baseApi + `/link?user=${user}&token=${token}`, {})
+ }
}
diff --git a/src/app/services/user.service.ts b/src/app/services/user.service.ts
new file mode 100644
index 0000000..8ed928c
--- /dev/null
+++ b/src/app/services/user.service.ts
@@ -0,0 +1,37 @@
+import { Injectable } from '@angular/core';
+import { BehaviorSubject, Observable } from 'rxjs';
+import {AppUserDto} from '../models/app-user-dto';
+
+@Injectable({
+ providedIn: 'root'
+})
+export class UserService {
+ private userSubject = new BehaviorSubject(null);
+
+ get user$(): Observable {
+ return this.userSubject.asObservable();
+ }
+
+ get userValue(): AppUserDto | null {
+ return this.userSubject.value;
+ }
+
+ constructor() {
+ const storedUser = localStorage.getItem('appUser');
+ if (storedUser) {
+ this.userSubject.next(JSON.parse(storedUser));
+ }
+ }
+
+ setUser(user: AppUserDto): void {
+ localStorage.setItem('appUser', JSON.stringify(user));
+ this.userSubject.next(user);
+ }
+
+ clearUser(): void {
+ localStorage.removeItem('appUser');
+ this.userSubject.next(null);
+ }
+
+}
+