diff options
Diffstat (limited to 'ufund-ui/src/app/components/funding-basket')
3 files changed, 160 insertions, 43 deletions
diff --git a/ufund-ui/src/app/components/funding-basket/funding-basket.component.css b/ufund-ui/src/app/components/funding-basket/funding-basket.component.css index 3dec496..a17f710 100644 --- a/ufund-ui/src/app/components/funding-basket/funding-basket.component.css +++ b/ufund-ui/src/app/components/funding-basket/funding-basket.component.css @@ -1,7 +1,82 @@ -td, p { -    border: 2px solid #000; +:host { +    display: flex; +    justify-content: center; +} + +#box { +    display: flex; +    width: 1000px; +    flex-direction: column; +    gap: 10px; +} + +.needEntry { +    background-color: #2e2e2e; +    display: flex; +    flex-direction: column;      border-radius: 5px; -    padding: 5px; -    margin: 5px; +} + +#needList { +    display: flex; +    flex-direction: column; +    gap: 10px; +    max-width: 1000px; +} + +.needName { +    font-weight: bold; +} + +.needType { +    text-transform: uppercase; +    font-size: 10pt; +} + +.split { +    display: flex; +    flex-direction: row; +    justify-content: space-between; + + +    .left { +        display: flex; +        flex-direction: column; +    } -}
\ No newline at end of file +    .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; +} + +.clickable { +    padding: 10px; +    background-color: #3a3a3a; +    border-radius: 5px; +    cursor: pointer; +} + +.clickable:hover { +    background-color: #444444; +} + +.actionArea { +    display: flex; +    padding: 5px; +    gap: 5px; +} 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 504e694..52b35c1 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,39 +1,81 @@ -<h1>Funding Basket</h1> -<div id="needCount"> -    <label for="needCount">Needs in Basket:</label> -    <span>{{ this.usersService.getBasket().getValue().length }}</span> -</div> +<!--<div id="needCount">--> +<!--    <label for="needCount">Needs in Basket:</label>--> +<!--    <span>{{ this.usersService.getBasket().getValue().length }}</span>--> +<!--</div>--> -<div *ngIf="this.usersService.getBasket().getValue().length == 0"> -    <h2>There are no needs in the basket</h2> -</div> +<!--<div *ngIf="this.usersService.getBasket().getValue().length == 0">--> +<!--    <h2>There are no needs in the basket</h2>--> +<!--</div>--> + +<!--<table class="needs" id="funding-basket" *ngIf="this.usersService.getBasket().getValue().length != 0">--> +<!--    <thead>--> +<!--        <tr>--> +<!--            <th class="need"></th>--> +<!--        </tr>--> +<!--    </thead>--> +<!--    <tbody>--> +<!--        <tr *ngFor="let need of usersService.getBasket().getValue()">--> +<!--            <td>--> +<!--                <a routerLink="/need/{{need.id}}">{{need.name}}</a>--> +<!--                <p>Goal: {{need.maxGoal}}</p>--> +<!--                <p>Current: {{(need.current).toFixed(2)}}</p>--> +<!--                <p>How much to Contribute: <input type="number" placeholder="insert value" min="1" id={{need.id}} class="contribution"></p>--> +<!--                <br>--> +<!--                <div>--> +<!--                    <button type="button" class="removeNeed" title="delete need"--> +<!--                    (click)="this.usersService.removeNeed(need.id)">Remove Need</button>--> +<!--                </div>--> +<!--            </td>--> +<!--        </tr>--> +<!--    </tbody>--> +<!--</table>--> +<!--<br>--> +<div id="box"> +    <h1>Funding Basket</h1> +    <ng-template [ngIf]="usersService.getBasket().getValue().length"> +        <div id="needList"> +            <div *ngFor="let need of usersService.getBasket().getValue()" class="needEntry"> +                <div [routerLink]="'/need/' + need.id" class="clickable"> +                    <div class="split"> +                        <div class="left"> +                            <span class="needName">{{need.name}}</span> +                            <span class="needType">{{need.type}}</span> +                        </div> + +                        <div class="right"> +                            <span *ngIf="need.urgent" class="urgent">URGENT</span> +                            <span *ngIf="need.location"><span class="icon">location_on</span>{{need.location}}</span> +                        </div> +                    </div> + +                    <br> -<table class="needs" id="funding-basket" *ngIf="this.usersService.getBasket().getValue().length != 0"> -    <thead> -        <tr> -            <th class="need"></th> -        </tr> -    </thead> -    <tbody> -        <tr *ngFor="let need of usersService.getBasket().getValue()"> -            <td> -                <a routerLink="/need/{{need.id}}">{{need.name}}</a> -                <p>Goal: {{need.maxGoal}}</p> -                <p>Current: {{(need.current).toFixed(2)}}</p> -                <p>How much to Contribute: <input type="number" placeholder="insert value" min="1" id={{need.id}} class="contribution"></p> -                <br> -                <div> -                    <button type="button" class="removeNeed" title="delete need" -                    (click)="this.usersService.removeNeed(need.id)">Remove Need</button> +                    <div class="prog"> +                        <span id="hover-status-label-{{need.id}}"> </span> +                        <span>{{need.current}}/{{need.maxGoal}} ({{((need.current / need.maxGoal) * 100).toFixed(0)}}%)</span> +                        <progress [value]="need.current" [max]="need.maxGoal"></progress> +                    </div> + +                    <!--            <div class="description">--> +                    <!--                {{need.description}}--> +                    <!--            </div>--> +                </div> + +                <div class="actionArea"> +                    <input type="number" placeholder="Quantity" min="1" id={{need.id}} class="contribution"> +                    <button class="removeNeed" title="delete need" (click)="this.usersService.removeNeed(need.id)"> +                        <span class="icon">delete</span> Remove from Basket +                    </button>                  </div> -            </td> -        </tr> -    </tbody> -</table> -<br> -<div> -    <p *ngIf="!isValid">Invalid input in funding basket!</p> -    <button type="submit" class="checkout" title="checkout" (click)="checkout()">Checkout</button> -    <span *ngIf="statusText">{{statusText | async}}</span> -</div>
\ No newline at end of file +            </div> +        </div> +        <br> +        <div id="footer"> +            <button class="button2" title="checkout" (click)="checkout()">Checkout</button> +        </div> +    </ng-template> +    <div *ngIf="!usersService.getBasket().getValue().length"> +        <span>There are no needs in your basket! </span><a routerLink="/cupboard">Browse the cupboard</a> +    </div> +</div> 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 54ae720..b3826be 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 @@ -39,7 +39,7 @@ export class FundingBasketComponent implements OnInit {      async checkout() {          this.isValid = true; -        for (let c of document.getElementById("funding-basket")?.querySelectorAll('.contribution')!) { +        for (let c of document.querySelectorAll('.contribution')!) {              let contribution = c as HTMLInputElement;              contribution.setAttribute("style", "");              if (contribution.value == '' || contribution.valueAsNumber <= 0) { @@ -63,7 +63,7 @@ export class FundingBasketComponent implements OnInit {          //     }          // }          if (this.isValid) { -            for (let c of document.getElementById("funding-basket")?.querySelectorAll('.contribution')!) { +            for (let c of document.querySelectorAll('.contribution')!) {                  let contribution = c as HTMLInputElement;                  let need = await firstValueFrom(this.cupboardService.getNeed(+contribution.id));                  need.current += +contribution.value; @@ -81,11 +81,11 @@ export class FundingBasketComponent implements OnInit {                      }))                      .subscribe((result) => {                          if (result) { -                            console.log('need updated successfully');                              //this.needList?.refresh()                          } else {                              console.log('need update failed');                          } +                        this.toastService.sendToast(ToastType.INFO, "Checkout successful");                      });              }          }  | 
