Skip to content

Commit 34c86e1

Browse files
committed
آموزش در تاریخ 1399/03/20
ساعت 00:15
1 parent fafdf77 commit 34c86e1

File tree

11 files changed

+238
-4
lines changed

11 files changed

+238
-4
lines changed

BlazorMovies/Module 5 - Forms/BlazorMovies/Client/BlazorMovies.Client.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Build" Version="3.2.0" PrivateAssets="all" />
1212
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="3.2.0" PrivateAssets="all" />
1313
<PackageReference Include="System.Net.Http.Json" Version="3.2.0" />
14+
<PackageReference Include="Tewr.Blazor.FileReader" Version="1.5.0.20109" />
1415
</ItemGroup>
1516

1617
<ItemGroup>

BlazorMovies/Module 5 - Forms/BlazorMovies/Client/Pages/Genres/IndexGenres.razor

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
@page "/genres"
22

33
<h3>Index Genres</h3>
4+
45
<div class="form-group">
56
<a class="btn btn-info" href="genre/create">New Genre</a>
67
</div>
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
@page "/movies/search"
2+
@inject IRepository repository
3+
<h3>Search Movies</h3>
4+
5+
<div class="form-inline">
6+
<div class="form-group mb-2">
7+
<label for="title" class="sr-only">Title</label>
8+
<input type="text" class="form-control" id="title" placeholder="Movie Title"
9+
@bind-value="title" @bind-value:event="oninput"
10+
@onkeypress="@((KeyboardEventArgs e)=>TitleKeyPress(e))" />
11+
</div>
12+
13+
<div class="form-group mx-sm-3 mb-2">
14+
<select class="form-control" @bind="SelectedGenre">
15+
<option value="0">
16+
--Select Genre--
17+
</option>
18+
@foreach (var genre in Genres)
19+
{
20+
<option value="@genre.Id">@genre.Name</option>
21+
}
22+
</select>
23+
</div>
24+
25+
<div class="form-group mx-sm-3 mb-2">
26+
<input type="checkbox" class="form-check-input" id="upcomingReleases" @bind="upcomingReleases" />
27+
<label class="form-check-label" for="upcomingReleases">
28+
UpcomingReleases
29+
</label>
30+
</div>
31+
32+
<div class="form-group mx-sm-3 mb-2">
33+
<input type="checkbox" class="form-check-input" id="inTheaters" @bind="inTheaters" />
34+
<label class="form-check-label" for="inTheaters">
35+
InTheaters
36+
</label>
37+
</div>
38+
39+
<button class="btn btn-primary mb-2 mx-sm-3" @onclick="SearchForMovies">Filter</button>
40+
<button class="btn btn-danger mb-2" @onclick="Clear">Clear</button>
41+
</div>
42+
43+
<MoviesList Movies="Movies"/>
44+
@code {
45+
46+
string title = "";
47+
string SelectedGenre = "0";
48+
bool upcomingReleases = false;
49+
bool inTheaters = false;
50+
private List<Genre> Genres = new List<Genre>() { new Genre() { Id = 1, Name = "Action" },
51+
new Genre() { Id = 2, Name = "Comedy" } };
52+
private List<Movie> Movies;
53+
protected override void OnInitialized()
54+
{
55+
Movies = repository.GetMovies();
56+
}
57+
private void SearchForMovies()
58+
{
59+
Movies = Movies.Where(x => x.Title.Contains(title)).ToList();
60+
Console.WriteLine($"title:{title}");
61+
Console.WriteLine($"selectedGenre:{SelectedGenre}");
62+
Console.WriteLine($"upcomingReleases:{upcomingReleases}");
63+
Console.WriteLine($"inTheaters:{inTheaters}");
64+
}
65+
private void Clear()
66+
{
67+
Movies = repository.GetMovies();
68+
title = "";
69+
SelectedGenre = "0";
70+
upcomingReleases = false;
71+
inTheaters = false;
72+
}
73+
private void TitleKeyPress(KeyboardEventArgs e)
74+
{
75+
if (e.Key == "Enter")
76+
{
77+
SearchForMovies();
78+
}
79+
}
80+
}
Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
@page "/person/create"
2+
23
<h3>CreatePerson</h3>
34

4-
@code {
5+
<PersonForm Person="Person" OnValidSubmit="Create"/>
56

7+
@code {
8+
Person Person = new Person();
9+
private void Create()
10+
{
11+
Console.WriteLine("creating person...");
12+
}
613
}
Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,19 @@
11
@page "/person/edit/{PersonId:int}"
2-
<h3>EditPerson</h3>
32

3+
<h3>EditPerson</h3>
4+
@if (Person != null)
5+
{
6+
<PersonForm Person="Person" OnValidSubmit="Edit"/>
7+
}
48
@code {
59
[Parameter] public int PersonId { get; set; }
6-
7-
}
10+
Person Person;
11+
protected override void OnInitialized()
12+
{
13+
Person = new Person() { Name = "Felipe", DateOfBirth = DateTime.Today, Biography = "something" };
14+
}
15+
private void Edit()
16+
{
17+
Console.WriteLine("editing the person...");
18+
}
19+
}

BlazorMovies/Module 5 - Forms/BlazorMovies/Client/Pages/People/IndexPoeople.razor

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
<h3>IndexPoeople</h3>
44

5+
<div class="form-group">
6+
<a class="btn btn-info" href="person/create">New Person</a>
7+
</div>
8+
59
@code {
610

711
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
<EditForm Model="Person" OnValidSubmit="OnValidSubmit">
2+
<DataAnnotationsValidator/>
3+
<div class="form-group">
4+
<label for="name">Name</label>
5+
<div>
6+
<InputText class="form-control" @bind-Value="@Person.Name"/>
7+
<ValidationMessage For="@(()=>Person.Name)"/>
8+
</div>
9+
</div>
10+
11+
<div class="form-group">
12+
<label for="name">Date of Birth</label>
13+
<div>
14+
<InputDate class="form-control" @bind-Value="@Person.DateOfBirth"/>
15+
<ValidationMessage For="@(()=>Person.DateOfBirth)"/>
16+
</div>
17+
</div>
18+
19+
<div class="form-group">
20+
<InputeImage Label="Picture" ImageURL="@imageURL" OnSelectedImage="PictureSelected"/>
21+
</div>
22+
23+
<div class="form-group">
24+
25+
</div>
26+
27+
<button type="submit" class="btn btn-primary">Submit</button>
28+
29+
</EditForm>
30+
31+
32+
@code {
33+
[Parameter] public Person Person { get; set; }
34+
[Parameter] public EventCallback OnValidSubmit { get; set; }
35+
string imageURL;
36+
37+
protected override void OnInitialized()
38+
{
39+
if (!string.IsNullOrEmpty(Person.Picture))
40+
{
41+
imageURL = Person.Picture;
42+
Person.Picture = null;
43+
}
44+
}
45+
private void PictureSelected(string imageBase64)
46+
{
47+
Person.Picture = imageBase64;
48+
imageURL = null;
49+
Console.WriteLine(imageBase64);
50+
}
51+
}

BlazorMovies/Module 5 - Forms/BlazorMovies/Client/Program.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using Microsoft.Extensions.DependencyInjection;
99
using Microsoft.Extensions.Logging;
1010
using BlazorMovies.Client.Helpers;
11+
using Blazor.FileReader;
1112

1213
namespace BlazorMovies.Client
1314
{
@@ -20,6 +21,7 @@ public static async Task Main(string[] args)
2021

2122
builder.Services.AddTransient(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
2223
builder.Services.AddTransient<IRepository, RepositoryInMemory>();
24+
builder.Services.AddFileReaderService(options => options.InitializeOnFirstCall = true);
2325
await builder.Build().RunAsync();
2426
}
2527
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
@using System.IO
2+
@using Blazor.FileReader
3+
@inject IFileReaderService fileReaderService
4+
5+
<div>
6+
<label>@Label</label>
7+
<div>
8+
<input type="file" @ref="inputElement" @onchange="ImageFileSelected" accept=".jpg,.jpeg,.png" />
9+
</div>
10+
</div>
11+
12+
<div>
13+
@if (imageBase64 != null)
14+
{
15+
<div>
16+
<div style="margin:10px">
17+
<img src="data:image/jpeg;base64,@imageBase64" style="width:400px;" />
18+
</div>
19+
</div>
20+
}
21+
@if (ImageURL != null)
22+
{
23+
<div>
24+
<div style="margin:10px">
25+
<img src="@ImageURL" style="width:400px;" />
26+
</div>
27+
</div>
28+
}
29+
30+
</div>
31+
32+
@code {
33+
[Parameter] public string Label { get; set; } = "Image";
34+
[Parameter] public string ImageURL { get; set; }
35+
[Parameter] public EventCallback<string> OnSelectedImage { get; set; }
36+
private string imageBase64;
37+
ElementReference inputElement;
38+
39+
async Task ImageFileSelected()
40+
{
41+
foreach (var file in await fileReaderService.CreateReference(inputElement).EnumerateFilesAsync())
42+
{
43+
using (MemoryStream memoryStream = await file.CreateMemoryStreamAsync(4 * 1024))
44+
{
45+
var imageByte = new byte[memoryStream.Length];
46+
memoryStream.Read(imageByte, 0, (int)memoryStream.Length);
47+
imageBase64 = Convert.ToBase64String(imageByte);
48+
await OnSelectedImage.InvokeAsync(imageBase64);
49+
ImageURL = null;
50+
StateHasChanged();
51+
}
52+
}
53+
}
54+
}

BlazorMovies/Module 5 - Forms/BlazorMovies/Client/Shared/NavMenu.razor

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,11 @@
2222
<span class="oi oi-list-rich" aria-hidden="true"></span> Fetch data
2323
</NavLink>
2424
</li>
25+
<li class="nav-item px-3">
26+
<NavLink class="nav-link" href="/movies/search">
27+
<span class="oi oi-list-rich" aria-hidden="true"></span> Search Movies
28+
</NavLink>
29+
</li>
2530
<li class="nav-item px-3">
2631
<NavLink class="nav-link" href="genres">
2732
<span class="oi oi-list-rich" aria-hidden="true"></span> Genres

0 commit comments

Comments
 (0)