diff options
| author | Tyler Ferrari <69283684+Sowgro@users.noreply.github.com> | 2025-04-01 02:17:25 -0400 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-04-01 02:17:25 -0400 | 
| commit | 233fe120d2a9b30e0150401ebdfeb946dc9c2c07 (patch) | |
| tree | 98583e1b1d21d1a0cc57e8ff3489fbbf758eccff /ufund-ui/src/app/components/need-page | |
| parent | c6bbb29f42eaea7d0c8aebdb7b95be0287cbf4f9 (diff) | |
| parent | 0e9c0803e35a23ef2e873dc7ebf224a49a92f207 (diff) | |
| download | JellySolutions-233fe120d2a9b30e0150401ebdfeb946dc9c2c07.tar.gz JellySolutions-233fe120d2a9b30e0150401ebdfeb946dc9c2c07.tar.bz2 JellySolutions-233fe120d2a9b30e0150401ebdfeb946dc9c2c07.zip  | |
Merge pull request #22 from RIT-SWEN-261-02/css
Merge css into main
Diffstat (limited to 'ufund-ui/src/app/components/need-page')
3 files changed, 175 insertions, 23 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 e69de29..844410f 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 @@ -0,0 +1,73 @@ +:host { +    display: flex; +    justify-content: center; +} + +#box { +    display: flex; +    flex-direction: column; +    width: 800px; +    justify-content: start; +    gap: 10px; +} + +.needName { +    font-weight: bold; +} + +.needType { +    text-transform: uppercase; +    /*font-size: 10pt;*/ +    margin-top: -20px; +    /*margin-bottom: 20px;*/ +} + +.split { +    display: flex; +    flex-direction: row; +    justify-content: space-between; + + +    .left { +        display: flex; +        flex-direction: column; +    } + +    .right { +        display: flex; +        flex-direction: column; +        align-items: end; +    } +} + +.urgent { +    font-size: 11pt; +    background-color: rgba(255, 165, 0, 0.27); +    color: rgba(255, 165, 0, 1); +    padding: 2px; +    border-radius: 5px; +} + +.prog { +    display: flex; +    flex-direction: column; +    margin-bottom: 15px; +} + +.actionArea { +    display: flex; +    padding: 5px; +    gap: 5px; +    margin-top: 10px; +} + +/*#editor {*/ +/*    position: absolute;*/ +/*    background-color: #4a4a4a;*/ +/*    display: flex;*/ +/*    flex-direction: column;*/ +/*    justify-self: center;*/ +/*    align-self: center;*/ +/*    padding: 20px;*/ +/*    box-shadow: 0 0 100px black;*/ +/*}*/ 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 90fd459..958dfa6 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,22 +1,45 @@ -<button routerLink="/dashboard">Back to dashboard</button> -<h1>Viewing Need: {{need?.name}}</h1> -<a>internal id: {{need?.id}}</a> -<div style="display: flex; column-gap: 6px;"> -    <h3>Looking for</h3> -    <h3><u>{{need?.type}}</u></h3> -    <h3>Donations.</h3> -</div> -<div *ngIf="need?.filterAttributes != null"> -    <p>Tags:</p> -    <ul style="display: flex; column-gap: 24px;"> -        <li *ngFor="let tag of need?.filterAttributes"> -            <p>{{tag}}</p> -        </li> -    </ul> -</div> +<div id="box"> +    <h1>{{need?.name}}</h1> +    <span class="needType">{{need?.type}} GOAL</span> + +    <img *ngIf="need.image" alt="Need image" [src]="need?.image"/> + +    <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 ?? 0)*100) / (need?.maxGoal ?? 0)).toFixed(0)}}%</strong> complete!</span> +    </div> + +    <span><strong>Target Goal:</strong> {{need.maxGoal}}</span> -<hr> +    <span><strong>Amount Currently Collected:</strong> {{need.current}}</span> -<p>Goal: {{need?.maxGoal}}</p> -<p>Current: {{need?.current}}</p> -<p>This goal is <strong>{{(((need?.current ?? 0)*100) / (need?.maxGoal ?? 0)).toFixed(0)}}%</strong> complete!</p>
\ No newline at end of file +    <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 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> 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 e38554c..ad4cacf 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,8 +1,12 @@  import {Component, Input} from '@angular/core';  import {GoalType, Need} from '../../models/Need'; -import {ActivatedRoute} from "@angular/router"; +import {ActivatedRoute, Router} from "@angular/router";  import {CupboardService} from "../../services/cupboard.service"; -import {NgFor} from '@angular/common'; +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';  @Component({      selector: 'app-need-page', @@ -14,11 +18,15 @@ export class NeedPageComponent {      constructor(          private route: ActivatedRoute,          private cupboardService: CupboardService, +        private authService: AuthService, +        private usersService: UsersService, +        private toastService: ToastsService, +        private router: Router      ) {}      public GoalType = GoalType; -    @Input() need?: Need; +    @Input() need!: Need;      ngOnInit(): void {          const id = Number(this.route.snapshot.paramMap.get('id')); @@ -28,4 +36,52 @@ export class NeedPageComponent {      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); +                        return of(); +                    })) +                    .subscribe(() => { +                        this.usersService.refreshBasket(); +                    }); +            } else { +                this.toastService.sendToast(ToastType.ERROR, "This need is already in your basket!") +            } +        } +    } + +    delete(id : number) { +        this.cupboardService.deleteNeed(id) +            .pipe(catchError((ex, r) => { +                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.refresh(); +    } + +    edit(need: Need) { + +    }  }  | 
