diff options
| author | Hayden Hartman <haydenhartman10@gmail.com> | 2025-03-18 07:50:55 -0400 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-03-18 07:50:55 -0400 | 
| commit | 3362bba1ccf1cee3985be95ab74a2456e6503d7a (patch) | |
| tree | 64f6b52fbd4714a29be0102ac988cb7ab02dbb33 /ufund-ui/src/app/components | |
| parent | f063bf6e8634386f6ae3a3cf13fe2228e74454c9 (diff) | |
| parent | bd41fc58b5537a12072625bbf75baf75d5ed2274 (diff) | |
| download | JellySolutions-3362bba1ccf1cee3985be95ab74a2456e6503d7a.tar.gz JellySolutions-3362bba1ccf1cee3985be95ab74a2456e6503d7a.tar.bz2 JellySolutions-3362bba1ccf1cee3985be95ab74a2456e6503d7a.zip  | |
Merge pull request #13 from RIT-SWEN-261-02/funding_basketv2.0
funding-basket merge
Diffstat (limited to 'ufund-ui/src/app/components')
4 files changed, 149 insertions, 16 deletions
diff --git a/ufund-ui/src/app/components/funding-basket/funding-basket.component.html b/ufund-ui/src/app/components/funding-basket/funding-basket.component.html index 3fb2b5b..0a880af 100644 --- a/ufund-ui/src/app/components/funding-basket/funding-basket.component.html +++ b/ufund-ui/src/app/components/funding-basket/funding-basket.component.html @@ -1 +1,41 @@ -<p>funding-basket works!</p> +<h1>Funding Basket</h1> + +<div id="needCount"> +    <label for="needCount">Needs in Basket:</label> +    <span>{{ needCount }}</span> +</div> + +<div *ngIf="isBasketEmpty"> +    <h2>There are no needs in the basket</h2> +</div> + +<table class="needs" *ngIf="!isBasketEmpty"> +    <thead> +        <tr> +            <th class="need"></th> +        </tr> +    </thead> +    <tbody> +        <tr *ngFor="let need of basket"> +            <td> +                <a routerLink="/need/{{need.id}}"> +                    {{need.name}} +                </a> +                <div> +                <button type="button" class="addNeed" title="add need" +                (click)="addNeed(need)">Add Need</button> +                </div> +                <br> +                <div> +                <button type="button" class="removeNeed" title="delete need" +                (click)="removeNeed(need)">Remove Need</button> +                </div> +            </td> +        </tr> +    </tbody> +</table> +<br> +<div> +    <button type="submit" class="checkout" title="checkout" +    (click)="checkout()">Checkout</button> +</div>
\ No newline at end of file diff --git a/ufund-ui/src/app/components/funding-basket/funding-basket.component.ts b/ufund-ui/src/app/components/funding-basket/funding-basket.component.ts index c44aa27..dd68c0c 100644 --- a/ufund-ui/src/app/components/funding-basket/funding-basket.component.ts +++ b/ufund-ui/src/app/components/funding-basket/funding-basket.component.ts @@ -1,23 +1,91 @@  import {Component, OnInit} from '@angular/core'; -import {Router} from '@angular/router'; -import {UsersService} from '../../services/users.service'; +import {User} from '../../models/User'; +import { UsersService } from '../../services/users.service'; +import { Need } from '../../models/Need'; +import { NeedListComponent } from '../need-list/need-list.component'; +import { Router } from '@angular/router'; +import { CupboardService } from '../../services/cupboard.service';  @Component({ -  selector: 'app-funding-basket', -  standalone: false, -  templateUrl: './funding-basket.component.html', -  styleUrl: './funding-basket.component.css' +    selector: 'app-funding-basket', +    standalone: false, +    templateUrl: './funding-basket.component.html', +    styleUrl: './funding-basket.component.css'  }) -export class FundingBasketComponent implements OnInit{ -    constructor( -       private router: Router, -       private userService: UsersService -    ) {} - -    ngOnInit() { -        if (!this.userService.getCurrentUser()) { -            this.router.navigate(['/login'], {queryParams: {redir: this.router.url}}) +export class FundingBasketComponent implements +  OnInit { +  user!: User; +  needs: Need[] = []; +  basket: Need[] = []; +  needCount = 0; +  need_quantity: {[key: number]: number} = {}; + +  constructor( +    private router: Router, +      private cupboardService: CupboardService, private usersService: UsersService +  ) {} + +  ngOnInit(): void { +    if (!this.usersService.getCurrentUser()) { +      this.router.navigate(['/login'], {queryParams: {redir: this.router.url}}); +      return; +    } +    this.cupboardService.getNeeds().subscribe(n => this.needs = n) +    const currentUser = this.usersService.getCurrentUser(); +    if (currentUser) { +      this.user = currentUser; +    } +    this.getBasketNeeds(); +  } + +    getBasketNeeds(): void { +        if (this.user && this.user.basket) { +            this.user.basket.forEach(need => { +                // if (this.isInBasket(need)) { +                //     this.basket.push(need); +                // } +            });          }      } +    isInBasket(need: Need): boolean { +        return this.basket.includes(need) +    } + +    addNeed(need: Need, quantity: number = 1): void { +        if (this.user && !this.isInBasket(need)) { +            this.basket.push(need); +            this.need_quantity[need.id] = quantity; +        } +        if (this.isInBasket(need)) { +            this.need_quantity[need.id] += quantity; +        } +        this.needCount++; +    } + +    removeNeed(need: Need, quantity: number = 1): void { +        if (this.user && this.isInBasket(need)) { +            this.need_quantity[need.id] -= quantity; +            if (this.need_quantity[need.id] === 0) { +                this.basket = this.basket.filter(n => need.id !== n.id); +            } +            this.needCount--; +        } +    } + +    removeAllNeeds(): void { +        this.basket.forEach(need => { +            this.need_quantity = []; +        }); +        this.basket = []; +        this.needCount = 0; +    } + +    isBasketEmpty(): boolean { +        return this.needCount === 0; +    } + +    checkout(): void { +        this.removeAllNeeds(); +    }  } diff --git a/ufund-ui/src/app/components/need-list/need-list.component.html b/ufund-ui/src/app/components/need-list/need-list.component.html index 07f6735..4a67dfa 100644 --- a/ufund-ui/src/app/components/need-list/need-list.component.html +++ b/ufund-ui/src/app/components/need-list/need-list.component.html @@ -14,6 +14,7 @@                  {{need.name}}              </a>              <button (click)="delete(need.id)" *ngIf="isManager()">Delete</button> +            <!-- <button (click)="add(need)" *ngIf="isHelper()">Add To Basket</button> -->          </div>      </div>  </div> @@ -23,4 +24,5 @@          {{need.name}}      </a>      <button (click)="delete(need.id)" *ngIf="isManager()">Delete</button> +    <!-- <button (click)="add(need)" *ngIf="isHelper()">Add To Basket</button> -->  </li> diff --git a/ufund-ui/src/app/components/need-list/need-list.component.ts b/ufund-ui/src/app/components/need-list/need-list.component.ts index fc2a594..e1c0de1 100644 --- a/ufund-ui/src/app/components/need-list/need-list.component.ts +++ b/ufund-ui/src/app/components/need-list/need-list.component.ts @@ -100,6 +100,29 @@ export class NeedListComponent {      return type === ("MANAGER" as unknown as userType);    } +  isHelper() { +    const type = this.usersService.getCurrentUser()?.type; +    return type === ("HELPER" as unknown as userType); +  } + +  add(need: number) { +    const currentUser = this.usersService.getCurrentUser(); +    if (currentUser) { +      this.usersService.updateUser(currentUser.username, currentUser).subscribe(() => { +        const currentUser = this.usersService.getCurrentUser(); +        if (currentUser && currentUser.basket) { +          currentUser.basket.push(need); +          console.log("added to basket"); +        } +        error: (err: any) => { +          console.error(err); +        } +      }); + +    } + +  } +    back() {      this.searchResults = [];    }  | 
