From 00a08eb046ddc90e9c59258ef4e6748b759132f6 Mon Sep 17 00:00:00 2001
From: Lilian BRETON
Date: Fri, 18 Nov 2022 15:23:44 +0100
Subject: [PATCH] End of blazor components BUT weird things are
---
BlazorApp/BlazorApp/Components/Card.razor | 6 +
BlazorApp/BlazorApp/Components/Card.razor.cs | 16 +++
BlazorApp/BlazorApp/Components/Crafting.razor | 51 ++++++++
.../BlazorApp/Components/Crafting.razor.cs | 80 ++++++++++++
.../BlazorApp/Components/Crafting.razor.css | 19 +++
.../BlazorApp/Components/Crafting.razor.js | 19 +++
.../BlazorApp/Components/CraftingAction.cs | 11 ++
.../BlazorApp/Components/CraftingItem.razor | 14 ++
.../Components/CraftingItem.razor.cs | 63 +++++++++
.../Components/CraftingItem.razor.css | 6 +
.../BlazorApp/Components/CraftingRecipe.cs | 10 ++
.../Controllers/CultureController.cs | 34 +++++
BlazorApp/BlazorApp/Pages/Index.razor | 7 +-
BlazorApp/BlazorApp/Pages/Index.razor.cs | 32 +++++
BlazorApp/BlazorApp/Pages/List.razor | 3 +-
BlazorApp/BlazorApp/Pages/List.razor.cs | 4 +
BlazorApp/BlazorApp/Pages/_Layout.cshtml | 2 +
BlazorApp/BlazorApp/Program.cs | 3 +-
.../BlazorApp/Resources/Pages.List.fr-FR.resx | 123 ++++++++++++++++++
BlazorApp/BlazorApp/Resources/Pages.List.resx | 123 ++++++++++++++++++
.../BlazorApp/Services/DataLocalService.cs | 22 +++-
BlazorApp/BlazorApp/Services/IDataService.cs | 5 +-
22 files changed, 646 insertions(+), 7 deletions(-)
create mode 100644 BlazorApp/BlazorApp/Components/Card.razor
create mode 100644 BlazorApp/BlazorApp/Components/Card.razor.cs
create mode 100644 BlazorApp/BlazorApp/Components/Crafting.razor
create mode 100644 BlazorApp/BlazorApp/Components/Crafting.razor.cs
create mode 100644 BlazorApp/BlazorApp/Components/Crafting.razor.css
create mode 100644 BlazorApp/BlazorApp/Components/Crafting.razor.js
create mode 100644 BlazorApp/BlazorApp/Components/CraftingAction.cs
create mode 100644 BlazorApp/BlazorApp/Components/CraftingItem.razor
create mode 100644 BlazorApp/BlazorApp/Components/CraftingItem.razor.cs
create mode 100644 BlazorApp/BlazorApp/Components/CraftingItem.razor.css
create mode 100644 BlazorApp/BlazorApp/Components/CraftingRecipe.cs
create mode 100644 BlazorApp/BlazorApp/Controllers/CultureController.cs
create mode 100644 BlazorApp/BlazorApp/Pages/Index.razor.cs
create mode 100644 BlazorApp/BlazorApp/Resources/Pages.List.fr-FR.resx
create mode 100644 BlazorApp/BlazorApp/Resources/Pages.List.resx
diff --git a/BlazorApp/BlazorApp/Components/Card.razor b/BlazorApp/BlazorApp/Components/Card.razor
new file mode 100644
index 0000000..88f1b6a
--- /dev/null
+++ b/BlazorApp/BlazorApp/Components/Card.razor
@@ -0,0 +1,6 @@
+Card
+
+ @CardHeader
+ @CardBody
+ @CardFooter
+
\ No newline at end of file
diff --git a/BlazorApp/BlazorApp/Components/Card.razor.cs b/BlazorApp/BlazorApp/Components/Card.razor.cs
new file mode 100644
index 0000000..a0493a3
--- /dev/null
+++ b/BlazorApp/BlazorApp/Components/Card.razor.cs
@@ -0,0 +1,16 @@
+using Microsoft.AspNetCore.Components;
+
+namespace BlazorApp.Components
+{
+ public partial class Card
+ {
+ [Parameter]
+ public RenderFragment CardBody { get; set; }
+
+ [Parameter]
+ public RenderFragment CardFooter { get; set; }
+
+ [Parameter]
+ public RenderFragment CardHeader { get; set; }
+ }
+}
diff --git a/BlazorApp/BlazorApp/Components/Crafting.razor b/BlazorApp/BlazorApp/Components/Crafting.razor
new file mode 100644
index 0000000..774d351
--- /dev/null
+++ b/BlazorApp/BlazorApp/Components/Crafting.razor
@@ -0,0 +1,51 @@
+
+
+
+
+
+
Available items:
+
+
+
+ @foreach (var item in Items)
+ {
+
+ }
+
+
+
+
+
+
+
Recipe
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Result
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/BlazorApp/BlazorApp/Components/Crafting.razor.cs b/BlazorApp/BlazorApp/Components/Crafting.razor.cs
new file mode 100644
index 0000000..4e61aef
--- /dev/null
+++ b/BlazorApp/BlazorApp/Components/Crafting.razor.cs
@@ -0,0 +1,80 @@
+using BlazorApp.Models;
+using Microsoft.AspNetCore.Components;
+using Microsoft.JSInterop;
+using System.Collections.ObjectModel;
+using System.Collections.Specialized;
+
+namespace BlazorApp.Components
+{
+ public partial class Crafting
+ {
+ private Item _recipeResult;
+
+ public Crafting()
+ {
+ Actions = new ObservableCollection();
+ Actions.CollectionChanged += OnActionsCollectionChanged;
+ this.RecipeItems = new List- { null, null, null, null, null, null, null, null, null };
+ }
+
+ public ObservableCollection Actions { get; set; }
+ public Item CurrentDragItem { get; set; }
+
+ [Parameter]
+ public List
- Items { get; set; }
+
+ public List
- RecipeItems { get; set; }
+
+ public Item RecipeResult
+ {
+ get => this._recipeResult;
+ set
+ {
+ if (this._recipeResult == value)
+ {
+ return;
+ }
+
+ this._recipeResult = value;
+ this.StateHasChanged();
+ }
+ }
+
+ [Parameter]
+ public List Recipes { get; set; }
+
+ ///
+ /// Gets or sets the java script runtime.
+ ///
+ [Inject]
+ internal IJSRuntime JavaScriptRuntime { get; set; }
+
+ public void CheckRecipe()
+ {
+ RecipeResult = null;
+
+ // Get the current model
+ var currentModel = string.Join("|", this.RecipeItems.Select(s => s != null ? s.Name : string.Empty));
+
+ this.Actions.Add(new CraftingAction { Action = $"Items : {currentModel}" });
+
+ foreach (var craftingRecipe in Recipes)
+ {
+ // Get the recipe model
+ var recipeModel = string.Join("|", craftingRecipe.Have.SelectMany(s => s));
+
+ this.Actions.Add(new CraftingAction { Action = $"Recipe model : {recipeModel}" });
+
+ if (currentModel == recipeModel)
+ {
+ RecipeResult = craftingRecipe.Give;
+ }
+ }
+ }
+
+ private void OnActionsCollectionChanged(object? sender, NotifyCollectionChangedEventArgs e)
+ {
+ JavaScriptRuntime.InvokeVoidAsync("Crafting.AddActions", e.NewItems);
+ }
+ }
+}
diff --git a/BlazorApp/BlazorApp/Components/Crafting.razor.css b/BlazorApp/BlazorApp/Components/Crafting.razor.css
new file mode 100644
index 0000000..f8e0615
--- /dev/null
+++ b/BlazorApp/BlazorApp/Components/Crafting.razor.css
@@ -0,0 +1,19 @@
+.css-grid {
+ grid-template-columns: repeat(4,minmax(0,1fr));
+ gap: 10px;
+ display: grid;
+ width: 286px;
+}
+
+.css-recipe {
+ grid-template-columns: repeat(3,minmax(0,1fr));
+ gap: 10px;
+ display: grid;
+ width: 212px;
+}
+
+.actions {
+ border: 1px solid black;
+ height: 250px;
+ overflow: scroll;
+}
\ No newline at end of file
diff --git a/BlazorApp/BlazorApp/Components/Crafting.razor.js b/BlazorApp/BlazorApp/Components/Crafting.razor.js
new file mode 100644
index 0000000..ed9a843
--- /dev/null
+++ b/BlazorApp/BlazorApp/Components/Crafting.razor.js
@@ -0,0 +1,19 @@
+namespace BlazorApp.Components
+{
+ window.Crafting =
+ {
+ AddActions: function (data) {
+
+ data.forEach(element => {
+ var div = document.createElement('div');
+ div.innerHTML = 'Action: ' + element.action + ' - Index: ' + element.index;
+
+ if (element.item) {
+ div.innerHTML += ' - Item Name: ' + element.item.name;
+ }
+
+ document.getElementById('actions').appendChild(div);
+ });
+ }
+ }
+}
diff --git a/BlazorApp/BlazorApp/Components/CraftingAction.cs b/BlazorApp/BlazorApp/Components/CraftingAction.cs
new file mode 100644
index 0000000..219ffd5
--- /dev/null
+++ b/BlazorApp/BlazorApp/Components/CraftingAction.cs
@@ -0,0 +1,11 @@
+using BlazorApp.Models;
+
+namespace BlazorApp.Components
+{
+ public class CraftingAction
+ {
+ public string Action { get; set; }
+ public int Index { get; set; }
+ public Item Item { get; set; }
+ }
+}
diff --git a/BlazorApp/BlazorApp/Components/CraftingItem.razor b/BlazorApp/BlazorApp/Components/CraftingItem.razor
new file mode 100644
index 0000000..db4ca36
--- /dev/null
+++ b/BlazorApp/BlazorApp/Components/CraftingItem.razor
@@ -0,0 +1,14 @@
+
+
+ @if (Item != null)
+ {
+ @Item.DisplayName
+ }
+
\ No newline at end of file
diff --git a/BlazorApp/BlazorApp/Components/CraftingItem.razor.cs b/BlazorApp/BlazorApp/Components/CraftingItem.razor.cs
new file mode 100644
index 0000000..afd4806
--- /dev/null
+++ b/BlazorApp/BlazorApp/Components/CraftingItem.razor.cs
@@ -0,0 +1,63 @@
+using BlazorApp.Models;
+using Microsoft.AspNetCore.Components;
+
+namespace BlazorApp.Components
+{
+ public partial class CraftingItem
+ {
+ [Parameter]
+ public int Index { get; set; }
+
+ [Parameter]
+ public Item Item { get; set; }
+
+ [Parameter]
+ public bool NoDrop { get; set; }
+
+ [CascadingParameter]
+ public Crafting Parent { get; set; }
+
+ internal void OnDragEnter()
+ {
+ if (NoDrop)
+ {
+ return;
+ }
+
+ Parent.Actions.Add(new CraftingAction { Action = "Drag Enter", Item = this.Item, Index = this.Index });
+ }
+
+ internal void OnDragLeave()
+ {
+ if (NoDrop)
+ {
+ return;
+ }
+
+ Parent.Actions.Add(new CraftingAction { Action = "Drag Leave", Item = this.Item, Index = this.Index });
+ }
+
+ internal void OnDrop()
+ {
+ if (NoDrop)
+ {
+ return;
+ }
+
+ this.Item = Parent.CurrentDragItem;
+ Parent.RecipeItems[this.Index] = this.Item;
+
+ Parent.Actions.Add(new CraftingAction { Action = "Drop", Item = this.Item, Index = this.Index });
+
+ // Check recipe
+ Parent.CheckRecipe();
+ }
+
+ private void OnDragStart()
+ {
+ Parent.CurrentDragItem = this.Item;
+
+ Parent.Actions.Add(new CraftingAction { Action = "Drag Start", Item = this.Item, Index = this.Index });
+ }
+ }
+}
diff --git a/BlazorApp/BlazorApp/Components/CraftingItem.razor.css b/BlazorApp/BlazorApp/Components/CraftingItem.razor.css
new file mode 100644
index 0000000..1499794
--- /dev/null
+++ b/BlazorApp/BlazorApp/Components/CraftingItem.razor.css
@@ -0,0 +1,6 @@
+.item {
+ width: 64px;
+ height: 64px;
+ border: 1px solid;
+ overflow: hidden;
+}
\ No newline at end of file
diff --git a/BlazorApp/BlazorApp/Components/CraftingRecipe.cs b/BlazorApp/BlazorApp/Components/CraftingRecipe.cs
new file mode 100644
index 0000000..27d8a05
--- /dev/null
+++ b/BlazorApp/BlazorApp/Components/CraftingRecipe.cs
@@ -0,0 +1,10 @@
+using BlazorApp.Models;
+
+namespace BlazorApp.Components
+{
+ public class CraftingRecipe
+ {
+ public Item Give { get; set; }
+ public List> Have { get; set; }
+ }
+}
diff --git a/BlazorApp/BlazorApp/Controllers/CultureController.cs b/BlazorApp/BlazorApp/Controllers/CultureController.cs
new file mode 100644
index 0000000..9f455e0
--- /dev/null
+++ b/BlazorApp/BlazorApp/Controllers/CultureController.cs
@@ -0,0 +1,34 @@
+namespace BlazorApp.Controllers
+{
+ using Microsoft.AspNetCore.Localization;
+ using Microsoft.AspNetCore.Mvc;
+
+ ///
+ /// The culture controller.
+ ///
+ [Route("[controller]/[action]")]
+ public class CultureController : Controller
+ {
+ ///
+ /// Sets the culture.
+ ///
+ /// The culture.
+ /// The redirect URI.
+ ///
+ /// The action result.
+ ///
+ public IActionResult SetCulture(string culture, string redirectUri)
+ {
+ if (culture != null)
+ {
+ // Define a cookie with the selected culture
+ this.HttpContext.Response.Cookies.Append(
+ CookieRequestCultureProvider.DefaultCookieName,
+ CookieRequestCultureProvider.MakeCookieValue(
+ new RequestCulture(culture)));
+ }
+
+ return this.LocalRedirect(redirectUri);
+ }
+ }
+}
diff --git a/BlazorApp/BlazorApp/Pages/Index.razor b/BlazorApp/BlazorApp/Pages/Index.razor
index 9575fb1..d3bdca8 100644
--- a/BlazorApp/BlazorApp/Pages/Index.razor
+++ b/BlazorApp/BlazorApp/Pages/Index.razor
@@ -1,5 +1,10 @@
@using System.Globalization
+@using BlazorApp.Components
CurrentCulture: @CultureInfo.CurrentCulture
-
\ No newline at end of file
+
+
+
+
+
\ No newline at end of file
diff --git a/BlazorApp/BlazorApp/Pages/Index.razor.cs b/BlazorApp/BlazorApp/Pages/Index.razor.cs
new file mode 100644
index 0000000..2a2cb27
--- /dev/null
+++ b/BlazorApp/BlazorApp/Pages/Index.razor.cs
@@ -0,0 +1,32 @@
+using BlazorApp.Components;
+using BlazorApp.Models;
+using BlazorApp.Services;
+using Microsoft.AspNetCore.Components;
+
+namespace BlazorApp.Pages
+{
+ public partial class Index
+ {
+ [Inject]
+ public IDataService DataService { get; set; }
+
+ public List- Items { get; set; } = new List
- ();
+
+ private List Recipes { get; set; } = new List();
+
+ protected override async Task OnAfterRenderAsync(bool firstRender)
+ {
+ base.OnAfterRenderAsync(firstRender);
+
+ if (!firstRender)
+ {
+ return;
+ }
+
+ Items = await DataService.List(0, await DataService.Count());
+ Recipes = await DataService.GetRecipes();
+
+ StateHasChanged();
+ }
+ }
+}
diff --git a/BlazorApp/BlazorApp/Pages/List.razor b/BlazorApp/BlazorApp/Pages/List.razor
index 2dc7255..ac46291 100644
--- a/BlazorApp/BlazorApp/Pages/List.razor
+++ b/BlazorApp/BlazorApp/Pages/List.razor
@@ -1,8 +1,7 @@
@page "/list"
@using BlazorApp.Models
-
-
List
+@Localizer["Title"]
diff --git a/BlazorApp/BlazorApp/Pages/List.razor.cs b/BlazorApp/BlazorApp/Pages/List.razor.cs
index 39e689e..4aed928 100644
--- a/BlazorApp/BlazorApp/Pages/List.razor.cs
+++ b/BlazorApp/BlazorApp/Pages/List.razor.cs
@@ -6,11 +6,15 @@ using BlazorApp.Services;
using BlazorApp.Modals;
using Blazored.Modal;
using Blazored.Modal.Services;
+using Microsoft.Extensions.Localization;
namespace BlazorApp.Pages
{
public partial class List
{
+ [Inject]
+ public IStringLocalizer Localizer { get; set; }
+
private List- items;
private int totalItem;
diff --git a/BlazorApp/BlazorApp/Pages/_Layout.cshtml b/BlazorApp/BlazorApp/Pages/_Layout.cshtml
index 5264e45..2a95d9c 100644
--- a/BlazorApp/BlazorApp/Pages/_Layout.cshtml
+++ b/BlazorApp/BlazorApp/Pages/_Layout.cshtml
@@ -28,6 +28,8 @@
🗙
+
+
diff --git a/BlazorApp/BlazorApp/Program.cs b/BlazorApp/BlazorApp/Program.cs
index d527894..d58726e 100644
--- a/BlazorApp/BlazorApp/Program.cs
+++ b/BlazorApp/BlazorApp/Program.cs
@@ -31,8 +31,6 @@ builder.Services.AddScoped();
builder.Services.AddBlazoredModal();
-var app = builder.Build();
-
// Add the controller of the app
builder.Services.AddControllers();
@@ -50,6 +48,7 @@ builder.Services.Configure(options =>
options.SupportedUICultures = new List { new CultureInfo("en-US"), new CultureInfo("fr-FR") };
});
+var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
diff --git a/BlazorApp/BlazorApp/Resources/Pages.List.fr-FR.resx b/BlazorApp/BlazorApp/Resources/Pages.List.fr-FR.resx
new file mode 100644
index 0000000..9b8a321
--- /dev/null
+++ b/BlazorApp/BlazorApp/Resources/Pages.List.fr-FR.resx
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Liste d'Utilisateurs
+
+
\ No newline at end of file
diff --git a/BlazorApp/BlazorApp/Resources/Pages.List.resx b/BlazorApp/BlazorApp/Resources/Pages.List.resx
new file mode 100644
index 0000000..47ca797
--- /dev/null
+++ b/BlazorApp/BlazorApp/Resources/Pages.List.resx
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Users List
+
+
\ No newline at end of file
diff --git a/BlazorApp/BlazorApp/Services/DataLocalService.cs b/BlazorApp/BlazorApp/Services/DataLocalService.cs
index 47fc1fa..1e0f889 100644
--- a/BlazorApp/BlazorApp/Services/DataLocalService.cs
+++ b/BlazorApp/BlazorApp/Services/DataLocalService.cs
@@ -1,4 +1,5 @@
-using BlazorApp.Models;
+using BlazorApp.Components;
+using BlazorApp.Models;
using Blazored.LocalStorage;
using Microsoft.AspNetCore.Components;
@@ -174,5 +175,24 @@ namespace BlazorApp.Services
// Save the data
await _localStorage.SetItemAsync("data", currentData);
}
+
+ public Task> GetRecipes()
+ {
+ var items = new List
+ {
+ new CraftingRecipe
+ {
+ Give = new Item { DisplayName = "Diamond", Name = "diamond" },
+ Have = new List>
+ {
+ new List { "dirt", "dirt", "dirt" },
+ new List { "dirt", null, "dirt" },
+ new List { "dirt", "dirt", "dirt" }
+ }
+ }
+ };
+
+ return Task.FromResult(items);
+ }
}
}
diff --git a/BlazorApp/BlazorApp/Services/IDataService.cs b/BlazorApp/BlazorApp/Services/IDataService.cs
index 301f2d5..9576101 100644
--- a/BlazorApp/BlazorApp/Services/IDataService.cs
+++ b/BlazorApp/BlazorApp/Services/IDataService.cs
@@ -1,4 +1,5 @@
-using BlazorApp.Models;
+using BlazorApp.Components;
+using BlazorApp.Models;
namespace BlazorApp.Services
{
@@ -15,5 +16,7 @@ namespace BlazorApp.Services
Task Update(int id, ItemModel model);
Task Delete(int id);
+
+ Task> GetRecipes();
}
}