92 lines
2.8 KiB
Plaintext
92 lines
2.8 KiB
Plaintext
|
@inject HttpClient HttpClient
|
||
|
|
||
|
<div class="dialog-title">
|
||
|
<h2>@Pizza.Special.Name</h2>
|
||
|
@Pizza.Special.Description
|
||
|
</div>
|
||
|
<form class="dialog-body">
|
||
|
<div>
|
||
|
<label>Größe:</label>
|
||
|
<input type="range" min="@Pizza.MinimumSize" max="@Pizza.MaximumSize" step="1" @bind="Pizza.Size" @bind:event="oninput" />
|
||
|
<span class="size-label">
|
||
|
@(Pizza.Size)" (€@(Pizza.GetFormattedTotalPrice()))
|
||
|
</span>
|
||
|
</div>
|
||
|
<div>
|
||
|
<label>Extra Beläge:</label>
|
||
|
@if (toppings == null)
|
||
|
{
|
||
|
<select class="custom-select" disabled>
|
||
|
<option>(Lade...)</option>
|
||
|
</select>
|
||
|
}
|
||
|
else if (Pizza.Toppings.Count >= 6)
|
||
|
{
|
||
|
<div>(maximale Anzahl erreicht)</div>
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
<select class="custom-select" @onchange="ToppingSelected">
|
||
|
<option value="-1" disabled selected>(select)</option>
|
||
|
@for (var i = 0; i < toppings.Count; i++)
|
||
|
{
|
||
|
<option value="@i">@toppings[i].Name - (€@(toppings[i].GetFormattedPrice()))</option>
|
||
|
}
|
||
|
</select>
|
||
|
}
|
||
|
</div>
|
||
|
|
||
|
<div class="toppings">
|
||
|
@foreach (var topping in Pizza.Toppings)
|
||
|
{
|
||
|
<div class="topping">
|
||
|
@topping.Topping.Name
|
||
|
<span class="topping-price">@topping.Topping.GetFormattedPrice()</span>
|
||
|
<button type="button" class="delete-topping" @onclick="@(() => RemoveTopping(topping.Topping))">x</button>
|
||
|
</div>
|
||
|
}
|
||
|
</div>
|
||
|
</form>
|
||
|
|
||
|
<div class="dialog-buttons">
|
||
|
<button class="btn btn-secondary mr-auto" @onclick="OnCancel">Abbrechen</button>
|
||
|
<span class="mr-center">
|
||
|
Kosten: <span class="price">@(Pizza.GetFormattedTotalPrice())</span>
|
||
|
</span>
|
||
|
<button class="btn btn-success ml-auto" @onclick="OnConfirm">Bestellen ></button>
|
||
|
</div>
|
||
|
|
||
|
@code {
|
||
|
List<Topping> toppings;
|
||
|
|
||
|
[Parameter] public Pizza Pizza { get; set; }
|
||
|
[Parameter] public EventCallback OnCancel { get; set; }
|
||
|
[Parameter] public EventCallback OnConfirm { get; set; }
|
||
|
|
||
|
protected async override Task OnInitializedAsync()
|
||
|
{
|
||
|
toppings = await HttpClient.GetFromJsonAsync<List<Topping>>("toppings");
|
||
|
}
|
||
|
|
||
|
void ToppingSelected(ChangeEventArgs e)
|
||
|
{
|
||
|
if (int.TryParse((string)e.Value, out var index) && index >= 0)
|
||
|
{
|
||
|
AddTopping(toppings[index]);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void AddTopping(Topping topping)
|
||
|
{
|
||
|
if (Pizza.Toppings.Find(pt => pt.Topping == topping) == null)
|
||
|
{
|
||
|
Pizza.Toppings.Add(new PizzaTopping() { Topping = topping });
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void RemoveTopping(Topping topping)
|
||
|
{
|
||
|
Pizza.Toppings.RemoveAll(pt => pt.Topping == topping);
|
||
|
}
|
||
|
}
|