Finish dekete an item

pull/3/head
Alexis Drai 2 years ago
parent 9a76ce9216
commit c20cdf7761

@ -1,4 +1,5 @@
<Router AppAssembly="@typeof(App).Assembly">
<CascadingBlazoredModal>
<Router AppAssembly="@typeof(App).Assembly">
<Found Context="routeData">
<RouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" />
<FocusOnNavigate RouteData="@routeData" Selector="h1" />
@ -9,4 +10,5 @@
<p role="alert">Sorry, there's nothing at this address.</p>
</LayoutView>
</NotFound>
</Router>
</Router>
</CascadingBlazoredModal>

@ -0,0 +1,10 @@
<div class="simple-form">
<p>
Are you sure you want to delete @item.DisplayName ?
</p>
<button @onclick="ConfirmDelete" class="btn btn-primary">Delete</button>
<button @onclick="Cancel" class="btn btn-secondary">Cancel</button>
</div>

@ -0,0 +1,38 @@
using blazor_lab.Models;
using blazor_lab.Services;
using Blazored.Modal.Services;
using Blazored.Modal;
using Microsoft.AspNetCore.Components;
namespace blazor_lab.Modals
{
public partial class DeleteConfirmation
{
[CascadingParameter]
public BlazoredModalInstance ModalInstance { get; set; }
[Inject]
public IDataService DataService { get; set; }
[Parameter]
public int Id { get; set; }
private Item item = new();
protected override async Task OnInitializedAsync()
{
// Get the item
item = await DataService.GetById(Id);
}
void ConfirmDelete()
{
ModalInstance.CloseAsync(ModalResult.Ok(true));
}
void Cancel()
{
ModalInstance.CancelAsync();
}
}
}

@ -55,6 +55,9 @@
<a href="edit/@(context.Id)" class="btn btn-primary">
<i class="fa fa-edit" /> Editer
</a>
<button type="button" class="btn btn-primary" @onclick="() => OnDeleteAsync(context.Id)">
<i class="fa fa-trash"></i> Supprimer
</button>
</DisplayTemplate>
</DataGridColumn>
</DataGrid>

@ -1,6 +1,8 @@
using blazor_lab.Models;
using blazor_lab.Modals;
using blazor_lab.Models;
using blazor_lab.Services;
using Blazored.LocalStorage;
using Blazored.Modal;
using Blazored.Modal.Services;
using Blazorise.DataGrid;
using Microsoft.AspNetCore.Components;
@ -18,6 +20,12 @@ namespace blazor_lab.Pages
[Inject]
public IWebHostEnvironment WebHostEnvironment { get; set; }
[Inject]
public NavigationManager NavigationManager { get; set; }
[CascadingParameter]
public IModalService Modal { get; set; }
protected override async Task OnAfterRenderAsync(bool firstRender)
{
// Do not treat this action if is not the first render
@ -47,5 +55,26 @@ namespace blazor_lab.Pages
{
items = await DataService.List(1, 10);
}
private async Task OnDeleteAsync(int id)
{
var parameters = new ModalParameters
{
{ nameof(Item.Id), id }
};
var modal = Modal.Show<DeleteConfirmation>("Delete Confirmation", parameters);
var result = await modal.Result;
if (result.Cancelled)
{
return;
}
await DataService.Delete(id);
// Reload the page
NavigationManager.NavigateTo("list", true);
}
}
}

@ -28,6 +28,8 @@
</div>
<script src="_framework/blazor.server.js"></script>
<script src="_content/Blazored.Modal/blazored.modal.js"></script>
<link href="_content/Blazored.Modal/blazored-modal.css" rel="stylesheet" />
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.15.4/css/all.css">
<link href="_content/Blazorise/blazorise.css" rel="stylesheet" />
<link href="_content/Blazorise.Bootstrap/blazorise.bootstrap.css" rel="stylesheet" /></body>

@ -4,6 +4,7 @@ using Blazorise.Bootstrap;
using Blazorise.Icons.FontAwesome;
using Blazored.LocalStorage;
using blazor_lab.Services;
using Blazored.Modal;
var builder = WebApplication.CreateBuilder(args);
@ -22,6 +23,7 @@ builder.Services
builder.Services.AddBlazoredLocalStorage();
builder.Services.AddScoped<IDataService, DataLocalService>();
builder.Services.AddBlazoredModal();
var app = builder.Build();

@ -9,3 +9,5 @@
@using blazor_lab
@using blazor_lab.Shared
@using Blazorise.DataGrid
@using Blazored.Modal
@using Blazored.Modal.Services

@ -8,6 +8,7 @@
<ItemGroup>
<PackageReference Include="Blazored.LocalStorage" Version="4.3.0" />
<PackageReference Include="Blazored.Modal" Version="7.1.0" />
<PackageReference Include="Blazorise.Bootstrap" Version="1.1.5" />
<PackageReference Include="Blazorise.DataGrid" Version="1.1.5" />
<PackageReference Include="Blazorise.Icons.FontAwesome" Version="1.1.5" />

@ -0,0 +1,36 @@
TP2
1
A
Le problème reader/writer est différent.
Dans notre cas, on veut que des clients et des patissiers accèdent à une ressource partagée ; l'une en "lecture", l'autre en "écriture"
Mais on veut aussi empêcher un client de prendre une patisserie s'il n'yen a aucune de prete, par exemple.
Ca ressemble beaucoup plus à un problème producer/consumer.
B
La boutique peut jouer le role de moniteur, comme elle gère les inputs outputs et connait le stock
Elle définit un buffer de taille n, puis
put() {
if(getstock() == n) {
notFull.await(); // ne pas ajouter si plein
}
/*
do the putting ...
*/
// stock++ if necessary
notEmpty.signal(); // annoncer que non vide
}
Symmétriquement,
get() {
if(getstock() == 0) {
notEmpty.await(); // ne pas prendre si vide
}
/*
do the getting ...
*/
// stock-- if necessary
notFull.signal(); // annoncer que non plein
}
Avec un arrayList, on pourra / devra implémenter un buffer circulaire, càd tracer la tete et la queue en indexes variables qu'on incrémente, modulo, tout le bazar
Depuis le main, on start() les Customers et PastryChefs qui héritent de Runnable
Loading…
Cancel
Save