Skip to content

Commit

Permalink
End of section 6
Browse files Browse the repository at this point in the history
  • Loading branch information
TryCatchLearn committed Aug 5, 2023
1 parent fe8fc0d commit 69af385
Show file tree
Hide file tree
Showing 24 changed files with 189 additions and 53 deletions.
Binary file modified API/datingapp.db
Binary file not shown.
8 changes: 5 additions & 3 deletions client/angular.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,11 @@
"src/assets"
],
"styles": [
"./node_modules/ngx-bootstrap/datepicker/bs-datepicker.css",
"./node_modules/bootstrap/dist/css/bootstrap.min.css",
"./node_modules/font-awesome/css/font-awesome.min.css",
"node_modules/ngx-bootstrap/datepicker/bs-datepicker.css",
"node_modules/bootstrap/dist/css/bootstrap.min.css",
"node_modules/bootswatch/dist/united/bootstrap.css",
"node_modules/font-awesome/css/font-awesome.min.css",
"node_modules/ngx-toastr/toastr.css",
"src/styles.css"
],
"scripts": []
Expand Down
20 changes: 20 additions & 0 deletions client/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions client/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,10 @@
"@angular/platform-browser-dynamic": "^16.1.0",
"@angular/router": "^16.1.0",
"bootstrap": "^5.2.3",
"bootswatch": "^5.3.1",
"font-awesome": "^4.7.0",
"ngx-bootstrap": "^11.0.2",
"ngx-toastr": "^17.0.2",
"rxjs": "~7.8.0",
"tslib": "^2.3.0",
"zone.js": "~0.13.0"
Expand Down
20 changes: 20 additions & 0 deletions client/src/app/_guards/auth.guard.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import { inject } from '@angular/core';
import { CanActivateFn } from '@angular/router';
import { AccountService } from '../_services/account.service';
import { ToastrService } from 'ngx-toastr';
import { map } from 'rxjs';

export const authGuard: CanActivateFn = (route, state) => {
const accountService = inject(AccountService);
const toastr = inject(ToastrService);

return accountService.currentUser$.pipe(
map(user => {
if (user) return true;
else {
toastr.error('you shall not pass!');
return false;
}
})
)
};
20 changes: 20 additions & 0 deletions client/src/app/_modules/shared.module.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { BsDropdownModule } from 'ngx-bootstrap/dropdown';
import { ToastrModule } from 'ngx-toastr';

@NgModule({
declarations: [],
imports: [
CommonModule,
BsDropdownModule.forRoot(),
ToastrModule.forRoot({
positionClass: 'toast-bottom-right'
})
],
exports: [
BsDropdownModule,
ToastrModule
]
})
export class SharedModule { }
22 changes: 21 additions & 1 deletion client/src/app/app-routing.module.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,27 @@
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { HomeComponent } from './home/home.component';
import { ListsComponent } from './lists/lists.component';
import { MemberDetailComponent } from './members/member-detail/member-detail.component';
import { MemberListComponent } from './members/member-list/member-list.component';
import { MessagesComponent } from './messages/messages.component';
import { authGuard } from './_guards/auth.guard';

const routes: Routes = [];
const routes: Routes = [
{path: '', component: HomeComponent},
{
path: '',
runGuardsAndResolvers: 'always',
canActivate: [authGuard],
children: [
{path: 'members', component: MemberListComponent},
{path: 'members/:id', component: MemberDetailComponent},
{path: 'lists', component: ListsComponent},
{path: 'messages', component: MessagesComponent}
]
},
{path: '**', component: HomeComponent, pathMatch: 'full'},
];

@NgModule({
imports: [RouterModule.forRoot(routes)],
Expand Down
2 changes: 1 addition & 1 deletion client/src/app/app.component.html
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<app-nav></app-nav>

<div class="container" style="margin-top: 100px">
<app-home></app-home>
<router-outlet></router-outlet>
</div>
14 changes: 11 additions & 3 deletions client/src/app/app.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,24 +7,32 @@ import { AppComponent } from './app.component';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { NavComponent } from './nav/nav.component';
import { FormsModule } from '@angular/forms';
import { BsDropdownModule } from 'ngx-bootstrap/dropdown';
import { HomeComponent } from './home/home.component';
import { RegisterComponent } from './register/register.component';
import { MemberListComponent } from './members/member-list/member-list.component';
import { MemberDetailComponent } from './members/member-detail/member-detail.component';
import { ListsComponent } from './lists/lists.component';
import { MessagesComponent } from './messages/messages.component';
import { SharedModule } from './_modules/shared.module';

@NgModule({
declarations: [
AppComponent,
NavComponent,
HomeComponent,
RegisterComponent
RegisterComponent,
MemberListComponent,
MemberDetailComponent,
ListsComponent,
MessagesComponent
],
imports: [
BrowserModule,
AppRoutingModule,
HttpClientModule,
BrowserAnimationsModule,
FormsModule,
BsDropdownModule.forRoot()
SharedModule
],
providers: [],
bootstrap: [AppComponent]
Expand Down
Empty file.
1 change: 1 addition & 0 deletions client/src/app/lists/lists.component.html
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<p>lists works!</p>
10 changes: 10 additions & 0 deletions client/src/app/lists/lists.component.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import { Component } from '@angular/core';

@Component({
selector: 'app-lists',
templateUrl: './lists.component.html',
styleUrls: ['./lists.component.css']
})
export class ListsComponent {

}
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<p>member-detail works!</p>
10 changes: 10 additions & 0 deletions client/src/app/members/member-detail/member-detail.component.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import { Component } from '@angular/core';

@Component({
selector: 'app-member-detail',
templateUrl: './member-detail.component.html',
styleUrls: ['./member-detail.component.css']
})
export class MemberDetailComponent {

}
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<p>member-list works!</p>
10 changes: 10 additions & 0 deletions client/src/app/members/member-list/member-list.component.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import { Component } from '@angular/core';

@Component({
selector: 'app-member-list',
templateUrl: './member-list.component.html',
styleUrls: ['./member-list.component.css']
})
export class MemberListComponent {

}
Empty file.
1 change: 1 addition & 0 deletions client/src/app/messages/messages.component.html
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<p>messages works!</p>
10 changes: 10 additions & 0 deletions client/src/app/messages/messages.component.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import { Component } from '@angular/core';

@Component({
selector: 'app-messages',
templateUrl: './messages.component.html',
styleUrls: ['./messages.component.css']
})
export class MessagesComponent {

}
70 changes: 32 additions & 38 deletions client/src/app/nav/nav.component.html
Original file line number Diff line number Diff line change
@@ -1,40 +1,34 @@
<nav class="navbar navbar-expand-md navbar-dark fixed-top bg-dark">
<div class="container">
<a class="navbar-brand" href="#">Dating App</a>
<ul class="navbar-nav me-auto mb-2 mb-md-0" *ngIf="accountService.currentUser$ | async">
<li class="nav-item">
<a class="nav-link">Matches</a>
</li>
<li class="nav-item">
<a class="nav-link">Lists</a>
</li>
<li class="nav-item">
<a class="nav-link">Messages</a>
</li>
</ul>
<nav class="navbar navbar-expand-md navbar-dark fixed-top bg-primary">
<div class="container">
<a class="navbar-brand" routerLink="/" routerLinkActive="active">Dating App</a>
<ul class="navbar-nav me-auto mb-2 mb-md-0">
<ng-container *ngIf="accountService.currentUser$ | async">
<li class="nav-item">
<a class="nav-link" routerLink="/members" routerLinkActive="active">Matches</a>
</li>
<li class="nav-item">
<a class="nav-link" routerLink="/lists" routerLinkActive="active">Lists</a>
</li>
<li class="nav-item">
<a class="nav-link" routerLink="/messages" routerLinkActive="active">Messages</a>
</li>
</ng-container>
</ul>

<div class="dropdown" *ngIf="accountService.currentUser$ | async" dropdown>
<a class="dropdown-toggle text-light text-decoration-none" dropdownToggle>Welcome user</a>
<div class="dropdown-menu" *dropdownMenu>
<a class="dropdown-item">Edit Profile</a>
<a class="dropdown-item" (click)="logout()" >Logout</a>
</div>
</div>

<form *ngIf="!(accountService.currentUser$ | async)" #loginForm="ngForm" class="d-flex" (ngSubmit)="login()" autocomplete="off">
<input
name="username"
[(ngModel)]="model.username"
class="form-control me-2"
type="text"
placeholder="Username">
<input
name="password"
[(ngModel)]="model.password"
class="form-control me-2"
type="password"
placeholder="Password">
<button class="btn btn-outline-success" type="submit">Login</button>
</form>
<div class="dropdown" *ngIf="(accountService.currentUser$ | async) as user" dropdown>
<a class="dropdown-toggle text-light text-decoration-none" dropdownToggle>Welcome {{user.username | titlecase}}</a>
<div class="dropdown-menu" *dropdownMenu>
<a class="dropdown-item">Edit Profile</a>
<a class="dropdown-item" (click)="logout()">Logout</a>
</div>
</nav>
</div>

<form *ngIf="!(accountService.currentUser$ | async)" #loginForm="ngForm" class="d-flex" (ngSubmit)="login()"
autocomplete="off">
<input name="username" [(ngModel)]="model.username" class="form-control me-2" type="text" placeholder="Username">
<input name="password" [(ngModel)]="model.password" class="form-control me-2" type="password"
placeholder="Password">
<button class="btn btn-success" type="submit">Login</button>
</form>
</div>
</nav>
12 changes: 7 additions & 5 deletions client/src/app/nav/nav.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ import { Component, OnInit } from '@angular/core';
import { AccountService } from '../_services/account.service';
import { Observable, of } from 'rxjs';
import { User } from '../_models/user';
import { Router } from '@angular/router';
import { ToastrService } from 'ngx-toastr';

@Component({
selector: 'app-nav',
Expand All @@ -11,22 +13,22 @@ import { User } from '../_models/user';
export class NavComponent implements OnInit {
model: any = {}

constructor(public accountService: AccountService) { }
constructor(public accountService: AccountService, private router: Router,
private toastr: ToastrService) { }

ngOnInit(): void {
}

login() {
this.accountService.login(this.model).subscribe({
next: response => {
console.log(response);
},
error: error => console.log(error)
next: _ => this.router.navigateByUrl('/members'),
error: error => this.toastr.error(error.error)
})
}

logout() {
this.accountService.logout();
this.router.navigateByUrl('/');
}

}
8 changes: 6 additions & 2 deletions client/src/app/register/register.component.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
import { AccountService } from '../_services/account.service';
import { ToastrService } from 'ngx-toastr';

@Component({
selector: 'app-register',
Expand All @@ -10,7 +11,7 @@ export class RegisterComponent implements OnInit {
@Output() cancelRegister = new EventEmitter();
model: any = {};

constructor(private accountService: AccountService) { }
constructor(private accountService: AccountService, private toastr: ToastrService) { }

ngOnInit(): void {
}
Expand All @@ -20,7 +21,10 @@ export class RegisterComponent implements OnInit {
next: () => {
this.cancel();
},
error: error => console.log(error)
error: error => {
this.toastr.error(error.error);
console.log(error);
}
})
}

Expand Down

0 comments on commit 69af385

Please sign in to comment.