From dadcedd307fcae71df1f5a1a4af866b67f3c34d7 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Thu, 28 May 2020 03:17:03 +0100 Subject: [PATCH] Add screen creation in admin view. --- .../Admin/Controllers/ScreensController.cs | 164 ------------------ .../Areas/Admin/Views/Screens/Create.cshtml | 69 -------- Marechai/Marechai.csproj | 1 + Marechai/Pages/Admin/Details/Screen.razor | 1 + Marechai/Pages/Admin/Details/Screen.razor.cs | 35 +++- Marechai/Pages/Admin/Screens.razor | 4 +- Marechai/Services/ScreensService.cs | 14 ++ 7 files changed, 44 insertions(+), 244 deletions(-) delete mode 100644 Marechai/Areas/Admin/Controllers/ScreensController.cs delete mode 100644 Marechai/Areas/Admin/Views/Screens/Create.cshtml diff --git a/Marechai/Areas/Admin/Controllers/ScreensController.cs b/Marechai/Areas/Admin/Controllers/ScreensController.cs deleted file mode 100644 index 7cfc7e49..00000000 --- a/Marechai/Areas/Admin/Controllers/ScreensController.cs +++ /dev/null @@ -1,164 +0,0 @@ -using System.Linq; -using System.Threading.Tasks; -using Marechai.Database.Models; -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.Rendering; -using Microsoft.EntityFrameworkCore; - -namespace Marechai.Areas.Admin.Controllers -{ - [Area("Admin"), Authorize] - public class ScreensController : Controller - { - readonly MarechaiContext _context; - - public ScreensController(MarechaiContext context) => _context = context; - - // GET: Screens - public async Task Index() => - View(await _context.Screens.OrderBy(s => s.Diagonal).ThenBy(s => s.EffectiveColors). - ThenBy(s => s.NativeResolution.ToString()).ThenBy(s => s.Type).ThenBy(s => s.Size). - ToListAsync()); - - // GET: Screens/Details/5 - public async Task Details(int? id) - { - if(id == null) - return NotFound(); - - Screen screen = await _context.Screens.FirstOrDefaultAsync(m => m.Id == id); - - if(screen == null) - return NotFound(); - - return View(screen); - } - - // GET: Screens/Create - public IActionResult Create() - { - ViewData["NativeResolutionId"] = new SelectList(_context.Resolutions.OrderBy(r => r.Chars). - ThenBy(r => r.Width).ThenBy(r => r.Height). - ThenBy(r => r.Colors).Select(r => new - { - r.Id, Name = r.ToString() - }), "Id", "Name"); - - return View(); - } - - // POST: Screens/Create - // To protect from overposting attacks, please enable the specific properties you want to bind to, for - // more details see http://go.microsoft.com/fwlink/?LinkId=317598. - [HttpPost, ValidateAntiForgeryToken] - public async Task Create( - [Bind("Width,Height,Diagonal,EffectiveColors,Type,NativeResolutionId,Id")] - Screen screen) - { - if(ModelState.IsValid) - { - _context.Add(screen); - await _context.SaveChangesAsync(); - - return RedirectToAction(nameof(Index)); - } - - ViewData["NativeResolutionId"] = new SelectList(_context.Resolutions.OrderBy(r => r.Chars). - ThenBy(r => r.Width).ThenBy(r => r.Height). - ThenBy(r => r.Colors).Select(r => new - { - r.Id, Name = r.ToString() - }), "Id", "Name"); - - return View(screen); - } - - // GET: Screens/Edit/5 - public async Task Edit(int? id) - { - if(id == null) - return NotFound(); - - Screen screen = await _context.Screens.FindAsync(id); - - if(screen == null) - return NotFound(); - - ViewData["NativeResolutionId"] = new SelectList(_context.Resolutions.OrderBy(r => r.Chars). - ThenBy(r => r.Width).ThenBy(r => r.Height). - ThenBy(r => r.Colors).Select(r => new - { - r.Id, Name = r.ToString() - }), "Id", "Name"); - - return View(screen); - } - - // POST: Screens/Edit/5 - // To protect from overposting attacks, please enable the specific properties you want to bind to, for - // more details see http://go.microsoft.com/fwlink/?LinkId=317598. - [HttpPost, ValidateAntiForgeryToken] - public async Task Edit( - int id, [Bind("Width,Height,Diagonal,EffectiveColors,NativeResolutionId,Type,Id")] - Screen screen) - { - if(id != screen.Id) - return NotFound(); - - if(ModelState.IsValid) - { - try - { - _context.Update(screen); - await _context.SaveChangesAsync(); - } - catch(DbUpdateConcurrencyException) - { - if(!ScreenExists(screen.Id)) - return NotFound(); - - throw; - } - - return RedirectToAction(nameof(Index)); - } - - ViewData["NativeResolutionId"] = new SelectList(_context.Resolutions.OrderBy(r => r.Chars). - ThenBy(r => r.Width).ThenBy(r => r.Height). - ThenBy(r => r.Colors).Select(r => new - { - r.Id, Name = r.ToString() - }), "Id", "Name"); - - return View(screen); - } - - // GET: Screens/Delete/5 - public async Task Delete(int? id) - { - if(id == null) - return NotFound(); - - Screen screen = await _context.Screens.FirstOrDefaultAsync(m => m.Id == id); - - if(screen == null) - return NotFound(); - - return View(screen); - } - - // POST: Screens/Delete/5 - [HttpPost, ActionName("Delete"), ValidateAntiForgeryToken] - public async Task DeleteConfirmed(int id) - { - Screen screen = await _context.Screens.FindAsync(id); - _context.Screens.Remove(screen); - await _context.SaveChangesAsync(); - - return RedirectToAction(nameof(Index)); - } - - bool ScreenExists(int id) => _context.Screens.Any(e => e.Id == id); - } -} \ No newline at end of file diff --git a/Marechai/Areas/Admin/Views/Screens/Create.cshtml b/Marechai/Areas/Admin/Views/Screens/Create.cshtml deleted file mode 100644 index 7a210fb2..00000000 --- a/Marechai/Areas/Admin/Views/Screens/Create.cshtml +++ /dev/null @@ -1,69 +0,0 @@ -@model Marechai.Database.Models.Screen - -@{ - ViewData["Title"] = "Create"; -} -

Create

-

Screen

-
-
-
-
-
-
-
- - - - -
-
- - - - -
-
- - - - -
-
- - - - -
-
- - - - -
-
- - - - -
- -
-
-
- -@section Scripts { - @{ await Html.RenderPartialAsync("_ValidationScriptsPartial"); } -} \ No newline at end of file diff --git a/Marechai/Marechai.csproj b/Marechai/Marechai.csproj index 56e2814f..30b320b3 100644 --- a/Marechai/Marechai.csproj +++ b/Marechai/Marechai.csproj @@ -140,5 +140,6 @@ <_ContentIncludedByDefault Remove="Areas\Admin\Views\Machines\Create.cshtml" /> <_ContentIncludedByDefault Remove="Areas\Admin\Views\People\Create.cshtml" /> <_ContentIncludedByDefault Remove="Areas\Admin\Views\Processors\Create.cshtml" /> + <_ContentIncludedByDefault Remove="Areas\Admin\Views\Screens\Create.cshtml" /> \ No newline at end of file diff --git a/Marechai/Pages/Admin/Details/Screen.razor b/Marechai/Pages/Admin/Details/Screen.razor index a96c76d9..bd385e66 100644 --- a/Marechai/Pages/Admin/Details/Screen.razor +++ b/Marechai/Pages/Admin/Details/Screen.razor @@ -32,6 +32,7 @@ @page "/admin/screens/details/{Id:int}" @page "/admin/screens/edit/{Id:int}" +@page "/admin/screens/create" @inherits OwningComponentBase @inject IStringLocalizer L @inject ResolutionsService ResolutionsService diff --git a/Marechai/Pages/Admin/Details/Screen.razor.cs b/Marechai/Pages/Admin/Details/Screen.razor.cs index 72c1a357..08676cb0 100644 --- a/Marechai/Pages/Admin/Details/Screen.razor.cs +++ b/Marechai/Pages/Admin/Details/Screen.razor.cs @@ -10,6 +10,7 @@ namespace Marechai.Pages.Admin.Details { public partial class Screen { + bool _creating; bool _editing; bool _loaded; ScreenViewModel _model; @@ -28,14 +29,19 @@ namespace Marechai.Pages.Admin.Details _loaded = true; - if(Id <= 0) + _creating = NavigationManager.ToBaseRelativePath(NavigationManager.Uri).ToLowerInvariant(). + StartsWith("admin/screens/create", StringComparison.InvariantCulture); + + if(Id <= 0 && + !_creating) return; _resolutions = await ResolutionsService.GetAsync(); - _model = await Service.GetAsync(Id); + _model = _creating ? new ScreenViewModel() : await Service.GetAsync(Id); - _editing = NavigationManager.ToBaseRelativePath(NavigationManager.Uri).ToLowerInvariant(). - StartsWith("admin/screens/edit/", StringComparison.InvariantCulture); + _editing = _creating || NavigationManager.ToBaseRelativePath(NavigationManager.Uri).ToLowerInvariant(). + StartsWith("admin/screens/edit/", + StringComparison.InvariantCulture); if(_editing) SetCheckboxes(); @@ -61,7 +67,15 @@ namespace Marechai.Pages.Admin.Details async void OnCancelClicked() { _editing = false; - _model = await Service.GetAsync(Id); + + if(_creating) + { + NavigationManager.ToBaseRelativePath("admin/screens"); + + return; + } + + _model = await Service.GetAsync(Id); SetCheckboxes(); StateHasChanged(); } @@ -88,9 +102,14 @@ namespace Marechai.Pages.Admin.Details else if(_model.EffectiveColors < 0) return; - _editing = false; - await Service.UpdateAsync(_model); - _model = await Service.GetAsync(Id); + if(_creating) + Id = await Service.CreateAsync(_model); + else + await Service.UpdateAsync(_model); + + _editing = false; + _creating = false; + _model = await Service.GetAsync(Id); SetCheckboxes(); StateHasChanged(); } diff --git a/Marechai/Pages/Admin/Screens.razor b/Marechai/Pages/Admin/Screens.razor index 078774a2..42209835 100644 --- a/Marechai/Pages/Admin/Screens.razor +++ b/Marechai/Pages/Admin/Screens.razor @@ -42,9 +42,7 @@ return; }

- - @L["Create new"] - + @L["Create new"]

diff --git a/Marechai/Services/ScreensService.cs b/Marechai/Services/ScreensService.cs index 3dc86249..5265a609 100644 --- a/Marechai/Services/ScreensService.cs +++ b/Marechai/Services/ScreensService.cs @@ -52,6 +52,20 @@ namespace Marechai.Services await _context.SaveChangesAsync(); } + public async Task CreateAsync(ScreenViewModel viewModel) + { + var model = new Screen + { + Diagonal = viewModel.Diagonal, EffectiveColors = viewModel.EffectiveColors, Height = viewModel.Height, + NativeResolutionId = viewModel.NativeResolutionId, Type = viewModel.Type, Width = viewModel.Width + }; + + await _context.Screens.AddAsync(model); + await _context.SaveChangesAsync(); + + return model.Id; + } + public async Task DeleteAsync(int id) { Screen item = await _context.Screens.FindAsync(id);