Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/illinker-test-assets.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'wasm/BlazingPizza.Client/Shared/ConfigurePizzaDialog.razor')
-rw-r--r--wasm/BlazingPizza.Client/Shared/ConfigurePizzaDialog.razor92
1 files changed, 92 insertions, 0 deletions
diff --git a/wasm/BlazingPizza.Client/Shared/ConfigurePizzaDialog.razor b/wasm/BlazingPizza.Client/Shared/ConfigurePizzaDialog.razor
new file mode 100644
index 0000000..9dc2943
--- /dev/null
+++ b/wasm/BlazingPizza.Client/Shared/ConfigurePizzaDialog.razor
@@ -0,0 +1,92 @@
+@inject HttpClient HttpClient
+
+<div class="dialog-title">
+ <h2>@Pizza.Special.Name</h2>
+ @Pizza.Special.Description
+</div>
+<form class="dialog-body">
+ <div>
+ <label>Size:</label>
+ <input type="range" min="@Pizza.MinimumSize" max="@Pizza.MaximumSize" step="1" @bind-value="@Pizza.Size" @bind-value:event="oninput" />
+ <span class="size-label">
+ @(Pizza.Size)" (£@(Pizza.GetFormattedTotalPrice()))
+ </span>
+ </div>
+ <div>
+ <label>Extra Toppings:</label>
+ @if (toppings == null)
+ {
+ <select class="custom-select" disabled>
+ <option>(loading...)</option>
+ </select>
+ }
+ else if (Pizza.Toppings.Count >= 6)
+ {
+ <div>(maximum reached)</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">Cancel</button>
+ <span class="mr-center">
+ Price: <span class="price">@(Pizza.GetFormattedTotalPrice())</span>
+ </span>
+ <button class="btn btn-success ml-auto" @onclick="@OnConfirm">Order ></button>
+</div>
+
+@functions {
+ List<Topping> toppings;
+
+ [Parameter] Pizza Pizza { get; set; }
+ [Parameter] EventCallback OnCancel { get; set; }
+ [Parameter] EventCallback OnConfirm { get; set; }
+
+ protected async override Task OnInitAsync()
+ {
+ toppings = await HttpClient.GetJsonAsync<List<Topping>>("toppings");
+ }
+
+ void ToppingSelected(UIChangeEventArgs 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);
+ StateHasChanged();
+ }
+}