diff --git a/BlazorProject/Components/Card.razor b/BlazorProject/Components/Card.razor new file mode 100644 index 0000000..b474fdc --- /dev/null +++ b/BlazorProject/Components/Card.razor @@ -0,0 +1,6 @@ +@typeparam TItem +
+ @CardHeader(Item) + @CardBody(Item) + @CardFooter +
\ No newline at end of file diff --git a/BlazorProject/Components/Card.razor.cs b/BlazorProject/Components/Card.razor.cs new file mode 100644 index 0000000..10798ef --- /dev/null +++ b/BlazorProject/Components/Card.razor.cs @@ -0,0 +1,18 @@ +using Microsoft.AspNetCore.Components; + +namespace BlazorProject.Components; + +public partial class Card +{ + [Parameter] + public RenderFragment CardBody { get; set; } + + [Parameter] + public RenderFragment CardFooter { get; set; } + + [Parameter] + public RenderFragment CardHeader { get; set; } + + [Parameter] + public TItem Item { get; set; } +} \ No newline at end of file diff --git a/BlazorProject/Components/ShowItems.razor b/BlazorProject/Components/ShowItems.razor new file mode 100644 index 0000000..c1820e4 --- /dev/null +++ b/BlazorProject/Components/ShowItems.razor @@ -0,0 +1,11 @@ +@typeparam TItem + +
+ @if ((Items?.Count ?? 0) != 0) + { + @foreach (var item in Items) + { + @ShowTemplate(item); + } + } +
\ No newline at end of file diff --git a/BlazorProject/Components/ShowItems.razor.cs b/BlazorProject/Components/ShowItems.razor.cs new file mode 100644 index 0000000..9e0e0e2 --- /dev/null +++ b/BlazorProject/Components/ShowItems.razor.cs @@ -0,0 +1,12 @@ +using Microsoft.AspNetCore.Components; + +namespace BlazorProject.Components; + +public partial class ShowItems +{ + [Parameter] + public List Items { get; set; } + + [Parameter] + public RenderFragment ShowTemplate { get; set; } +} \ No newline at end of file diff --git a/BlazorProject/Layout/MainLayout.razor b/BlazorProject/Layout/MainLayout.razor index ab1a579..2020ed2 100644 --- a/BlazorProject/Layout/MainLayout.razor +++ b/BlazorProject/Layout/MainLayout.razor @@ -1,5 +1,6 @@ @using System.Globalization @using BlazorProject.Pages +@using BlazorProject.Components @inherits LayoutComponentBase
-
@Body
+ + + +
+
+ Cake Token Id - @CakeContext.Id +
+
+
@CakeContext.Name
+

Price $@CakeContext.Cost

+
+ +
+
+
diff --git a/BlazorProject/Layout/MainLayout.razor.cs b/BlazorProject/Layout/MainLayout.razor.cs new file mode 100644 index 0000000..35ee323 --- /dev/null +++ b/BlazorProject/Layout/MainLayout.razor.cs @@ -0,0 +1,36 @@ +using BlazorProject.Models; + +namespace BlazorProject.Layout; + +public partial class MainLayout +{ + public List Cakes { get; set; } + + protected override Task OnAfterRenderAsync(bool firstRender) + { + LoadCakes(); + StateHasChanged(); + return base.OnAfterRenderAsync(firstRender); + } + + public void LoadCakes() + { + Cakes = new List + { + // items hidden for display purpose + new Cake + { + Id = 1, + Name = "Red Velvet", + Cost = 60 + }, + new Cake + { + Id = 2, + Name = "Black Forest", + Cost = 50 + }, + }; + } + +} \ No newline at end of file diff --git a/BlazorProject/Layout/TableTemplate.razor b/BlazorProject/Layout/TableTemplate.razor new file mode 100644 index 0000000..39ee6ed --- /dev/null +++ b/BlazorProject/Layout/TableTemplate.razor @@ -0,0 +1,28 @@ +@typeparam TItem +@using System.Diagnostics.CodeAnalysis + + + + @TableHeader + + + @foreach (var item in Items) + { + if (RowTemplate is not null) + { + @RowTemplate(item) + } + } + +
+ +@code { + [Parameter] + public RenderFragment? TableHeader { get; set; } + + [Parameter] + public RenderFragment? RowTemplate { get; set; } + + [Parameter, AllowNull] + public IReadOnlyList Items { get; set; } +} \ No newline at end of file diff --git a/BlazorProject/Models/Cake.cs b/BlazorProject/Models/Cake.cs new file mode 100644 index 0000000..987227d --- /dev/null +++ b/BlazorProject/Models/Cake.cs @@ -0,0 +1,8 @@ +namespace BlazorProject.Models; + +public class Cake +{ + public int Id { get; set; } + public string Name { get; set; } + public decimal Cost { get; set; } +} \ No newline at end of file diff --git a/BlazorProject/Pages/Pets1.razor b/BlazorProject/Pages/Pets1.razor new file mode 100644 index 0000000..89d973a --- /dev/null +++ b/BlazorProject/Pages/Pets1.razor @@ -0,0 +1,29 @@ +@page "/pets1" + +

Pets

+ + + + ID + Name + + + @pet.PetId + @pet.Name + + + +@code { + private List pets = new() + { + new Pet { PetId = 2, Name = "Mr. Bigglesworth" }, + new Pet { PetId = 4, Name = "Salem Saberhagen" }, + new Pet { PetId = 7, Name = "K-9" } + }; + + private class Pet + { + public int PetId { get; set; } + public string? Name { get; set; } + } +} \ No newline at end of file diff --git a/BlazorProject/Pages/Pets2.razor b/BlazorProject/Pages/Pets2.razor new file mode 100644 index 0000000..7dd51c4 --- /dev/null +++ b/BlazorProject/Pages/Pets2.razor @@ -0,0 +1,29 @@ +@page "/pets2" + +

Pets

+ + + + ID + Name + + + @pet.PetId + @pet.Name + + + +@code { + private List pets = new() + { + new Pet { PetId = 2, Name = "Mr. Bigglesworth" }, + new Pet { PetId = 4, Name = "Salem Saberhagen" }, + new Pet { PetId = 7, Name = "K-9" } + }; + + private class Pet + { + public int PetId { get; set; } + public string? Name { get; set; } + } +} \ No newline at end of file