diff options
| author | Angelina Zhen <az8703@rit.edu> | 2025-03-17 22:18:47 -0400 | 
|---|---|---|
| committer | Angelina Zhen <az8703@rit.edu> | 2025-03-17 22:18:47 -0400 | 
| commit | 7a5c5073e9e410b3ccc3ab7902a0d6f558277c7d (patch) | |
| tree | fec30e2772f7d34c50465bdb583b0f3a4f2019a2 | |
| parent | e4e6ae9a3d142fc78f31ee19464ec5e54bfb516f (diff) | |
| download | JellySolutions-7a5c5073e9e410b3ccc3ab7902a0d6f558277c7d.tar.gz JellySolutions-7a5c5073e9e410b3ccc3ab7902a0d6f558277c7d.tar.bz2 JellySolutions-7a5c5073e9e410b3ccc3ab7902a0d6f558277c7d.zip | |
part of funding basket ts and html
| -rw-r--r-- | ufund-ui/src/app/components/funding-basket/funding-basket.component.html | 42 | ||||
| -rw-r--r-- | ufund-ui/src/app/components/funding-basket/funding-basket.component.ts | 79 | 
2 files changed, 118 insertions, 3 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 8b12306..1dcebc5 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,4 +1,9 @@ -import { Component } from '@angular/core'; +import { Component, OnInit } from '@angular/core'; +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';  @Component({    selector: 'app-funding-basket', @@ -6,6 +11,76 @@ import { Component } from '@angular/core';    templateUrl: './funding-basket.component.html',    styleUrl: './funding-basket.component.css'  }) -export class FundingBasketComponent { +export class FundingBasketComponent implements +  OnInit { +  user!: User; +  basket: Need[] = []; +  needCount = 0; +  need_quantity: {[key: number]: number} = {}; +  constructor( +    private router: Router, +      private usersService: UsersService +  ) {} +     +  ngOnInit(): void { +    if (!this.usersService.getCurrentUser()) { +      this.router.navigate(['/login'], {queryParams: {redir: this.router.url}}); +      return; +    } +    this.usersService.getCurrentUser()?.subscribe(user => { +      this.user = user; +      this.getBasketNeeds(); +    }); +  } + +  getBasketNeeds(): void { +    if (this.user && this.user.cupboard) { +      this.user.cupboard.forEach(need => { +        if (this.isInBasket(need)){ +          this.basket.push(need); +        } +      }); +    } +  } + +  isInBasket(need: Need): boolean { +    return this.basket.some(n => n.id == need.id); +  } +   +  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(); +  }  } | 
