aboutsummaryrefslogtreecommitdiff
path: root/ufund-ui/src/app/components/need-page
diff options
context:
space:
mode:
authorsowgro <tpoke.ferrari@gmail.com>2025-04-06 15:15:47 -0400
committersowgro <tpoke.ferrari@gmail.com>2025-04-06 15:15:47 -0400
commit9f14b3787a8cfc49fd168b1242adcc6d5fa8bfd6 (patch)
tree8af111a538a8d6361e1cf07467b9c31568284921 /ufund-ui/src/app/components/need-page
parent1ac878b4aaa19ab889c7a98b7dab6acd57c778b3 (diff)
parent04cb51b2e7891785c956c5faa73fb88cc04e82e0 (diff)
downloadJellySolutions-9f14b3787a8cfc49fd168b1242adcc6d5fa8bfd6.tar.gz
JellySolutions-9f14b3787a8cfc49fd168b1242adcc6d5fa8bfd6.tar.bz2
JellySolutions-9f14b3787a8cfc49fd168b1242adcc6d5fa8bfd6.zip
Merge branch 'main' into light-mode
# Conflicts: # ufund-ui/src/app/app.component.html # ufund-ui/src/app/components/funding-basket/funding-basket.component.html # ufund-ui/src/app/components/need-list/need-list.component.html # ufund-ui/src/app/components/need-page/need-page.component.css
Diffstat (limited to 'ufund-ui/src/app/components/need-page')
-rw-r--r--ufund-ui/src/app/components/need-page/need-page.component.css35
-rw-r--r--ufund-ui/src/app/components/need-page/need-page.component.html79
-rw-r--r--ufund-ui/src/app/components/need-page/need-page.component.ts42
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
}