diff options
Diffstat (limited to 'ufund-ui/src/app/components/need-page')
3 files changed, 63 insertions, 93 deletions
diff --git a/ufund-ui/src/app/components/need-page/need-page.component.css b/ufund-ui/src/app/components/need-page/need-page.component.css index 47aa8b3..6ca1350 100644 --- a/ufund-ui/src/app/components/need-page/need-page.component.css +++ b/ufund-ui/src/app/components/need-page/need-page.component.css @@ -4,11 +4,13 @@  }  #box { +    /*padding-top: 7.5%;*/      display: flex;      flex-direction: column;      width: 800px;      justify-content: start;      gap: 10px; +    padding: 0 10px;  }  .needName { @@ -22,32 +24,19 @@      /*margin-bottom: 20px;*/  } -.split { -    display: flex; -    flex-direction: row; -    justify-content: space-between; - - -    .left { -        display: flex; -        flex-direction: column; -        width : 50%; -    } - -    .right { -        display: flex; -        flex-direction: column; -        align-items: end; -    } -}  .need-image { -    width: 400px; -    height: auto; +    width: calc(100% + 40px); +    height: 40%; +    /*position: absolute;*/ +    left: 22.5%;      aspect-ratio: 16/9;      object-fit: cover; +    mask-image: linear-gradient(to bottom, rgba(255,255,255,1) 0%, rgba(255,255,255,.2) 80%, rgba(255,255,255,.1) 90%, transparent 100%);      border-radius: 10px; -    box-shadow: var(--dark-highlight-clor) 0 0 50px; +    margin-left: -20px; +    margin-right: -20px; +    margin-bottom: -80px;  }  .urgent { @@ -66,8 +55,8 @@  .actionArea {      display: flex; -    padding: 5px; -    gap: 5px; +    padding: 5px 0; +    gap: 10px;      margin-top: 10px;  } diff --git a/ufund-ui/src/app/components/need-page/need-page.component.html b/ufund-ui/src/app/components/need-page/need-page.component.html index 6921eac..2629346 100644 --- a/ufund-ui/src/app/components/need-page/need-page.component.html +++ b/ufund-ui/src/app/components/need-page/need-page.component.html @@ -1,51 +1,50 @@  <div id="box"> -    <h1>{{need.name}}</h1> -    <span class="needType">{{need.type}} GOAL</span> -    <p>{{need.description}}</p> -    <div class="prog"> -<!--        <span>{{need?.current}} / {{need?.maxGoal}}</span>--> -        <progress [value]="need.current" [max]="need.maxGoal"></progress> -        <span>This goal is <strong>{{(((need.current)*100) / (need.maxGoal)).toFixed(0)}}%</strong> complete!</span> -    </div> - +    @if (need) { +        <img *ngIf="need.image" alt="Need image" class="need-image" [src]="need.image"/> +        <h1>{{need.name}}</h1> +        <span class="needType">{{need.type}} GOAL</span> +        <p>{{need.description}}</p> +        <div class="prog"> +            <progress [value]="need.current" [max]="need.maxGoal"></progress> +            <span>This goal is <strong>{{(((need.current)*100) / (need.maxGoal)).toFixed(0)}}%</strong> complete!</span> +        </div> -    <div class="split"> -      <div class="left">          <span><strong>Target Goal:</strong> {{(need.type === GoalType.MONETARY) ? "$" : ""}}{{need.maxGoal}}</span>          <span><strong>Amount Currently Collected:</strong> {{need.type.toString() == 'MONETARY' ? '$' : ''}}{{need.current}}</span>          <span><strong>Location:</strong> {{need.location}}</span> -            <span><strong>Urgency: </strong> -                <span *ngIf="!need.urgent">Not urgent</span> -                <span *ngIf="need.urgent" class="urgent">URGENT</span> -            </span> -         -            <div *ngIf="need.filterAttributes.length > 0"> -                <strong>Tags:</strong> -                <ul style="display: flex; column-gap: 24px;"> -                    <li *ngFor="let tag of need?.filterAttributes"> -                        <p>{{tag}}</p> -                    </li> -                </ul> -            </div> -        </div> -        <div class="right"> -          <img *ngIf="need.image" alt="Need image" class="need-image" [src]="need.image"/> +        <span><strong>Urgency: </strong> +            <span *ngIf="!need.urgent">Not urgent</span> +            <span *ngIf="need.urgent" class="urgent">URGENT</span> +        </span> + +        <div *ngIf="need.filterAttributes?.length"> +            <strong>Tags:</strong> +            <ul style="display: flex; column-gap: 24px;"> +                <li *ngFor="let tag of need?.filterAttributes"> +                    <p>{{tag}}</p> +                </li> +            </ul>          </div> -    </div> -     -    <div class="actionArea"> -        <button *ngIf="isHelper()" (click)="add(need!)"> -            <span class="icon">add</span>Add To Basket -        </button> -<!--        <button *ngIf="isManager()" (click)="edit(need!)">--> -<!--            <span class="icon">edit</span>Edit Need--> -<!--        </button>--> -        <button *ngIf="isManager()" (click)="delete(need!.id)" > -            <span class="icon">delete</span>Delete Need -        </button> -    </div> +        <div class="actionArea"> +            <button *ngIf="usersService.isHelper()" (click)="add(need)" [disabled]="usersService.inBasket(usersService.getBasket() | async, need)"> +                <span class="icon">{{usersService.inBasket(usersService.getBasket() | async, need)? "check": "add" }}</span>Add To Basket +            </button> +            <ng-template #edit> +                <app-need-edit [mode]="'Edit'" *ngIf="need" [need]="need" (refreshNeedList)="ngOnInit()"></app-need-edit> +            </ng-template> +            <button *ngIf="usersService.isManager()" (click)="modalService.showModal(edit)"> +                <span class="icon">edit</span>Edit Need +            </button> +            <button *ngIf="usersService.isManager()" (click)="delete(need!.id)" > +                <span class="icon">delete</span>Delete Need +            </button> +        </div> +    } @else { +        <h1>Need not found</h1> +        <span>The requested need does not exist. <a routerLink="/cupboard">Browse the cupboard</a></span> +    }  </div> diff --git a/ufund-ui/src/app/components/need-page/need-page.component.ts b/ufund-ui/src/app/components/need-page/need-page.component.ts index ad4cacf..17e330c 100644 --- a/ufund-ui/src/app/components/need-page/need-page.component.ts +++ b/ufund-ui/src/app/components/need-page/need-page.component.ts @@ -1,12 +1,12 @@ -import {Component, Input} from '@angular/core'; +import {Component, Input, OnInit} from '@angular/core';  import {GoalType, Need} from '../../models/Need';  import {ActivatedRoute, Router} from "@angular/router";  import {CupboardService} from "../../services/cupboard.service"; -import {userType} from '../../models/User';  import {AuthService} from '../../services/auth.service';  import {catchError, of} from 'rxjs';  import {ToastsService, ToastType} from '../../services/toasts.service';  import {UsersService} from '../../services/users.service'; +import {ModalService} from '../../services/modal.service';  @Component({      selector: 'app-need-page', @@ -14,18 +14,17 @@ import {UsersService} from '../../services/users.service';      templateUrl: './need-page.component.html',      styleUrl: './need-page.component.css'  }) -export class NeedPageComponent { +export class NeedPageComponent implements OnInit {      constructor(          private route: ActivatedRoute,          private cupboardService: CupboardService,          private authService: AuthService, -        private usersService: UsersService, +        protected usersService: UsersService,          private toastService: ToastsService, -        private router: Router +        private router: Router, +        protected modalService: ModalService      ) {} -    public GoalType = GoalType; -      @Input() need!: Need;      ngOnInit(): void { @@ -33,29 +32,15 @@ export class NeedPageComponent {          this.cupboardService.getNeed(id).subscribe(n => this.need = n);      } -    back() { -        window.history.back(); -    } - -    isManager() { -        const type = this.authService.getCurrentUser()?.type; -        return type === ("MANAGER" as unknown as userType); -    } - -    isHelper() { -        const type = this.authService.getCurrentUser()?.type; -        return type === ("HELPER" as unknown as userType); -    } -      add(need: Need) {          const currentUser = this.authService.getCurrentUser(); -        //console.log("get current user in angular:", currentUser)          if (currentUser) {              if (!currentUser.basket.includes(need.id)) {                  currentUser.basket.push(need.id);                  this.usersService.updateUser(currentUser)                      .pipe(catchError((err, _) =>  { -                        console.error(err); +                        let action = {label: "View Basket", onAction: () => this.router.navigate(['/basket'])} +                        this.toastService.sendToast(ToastType.INFO, `"${need.name}" Added to basket`, action)                          return of();                      }))                      .subscribe(() => { @@ -69,19 +54,16 @@ export class NeedPageComponent {      delete(id : number) {          this.cupboardService.deleteNeed(id) -            .pipe(catchError((ex, r) => { +            .pipe(catchError((ex, _) => {                  this.toastService.sendToast(ToastType.ERROR, ex.error)                  return of()              }))              .subscribe(() => { -                // this.needs = this.needs.filter(n => n.id !== id) -                this.toastService.sendToast(ToastType.INFO, "Need deleted") -                this.router.navigate(['/']) +                this.toastService.sendToast(ToastType.INFO, "Need deleted.") +                this.router.navigate(['/cupboard'])              })          // this.refresh();      } -    edit(need: Need) { - -    } +    readonly GoalType = GoalType  }  | 
