Browse Source
* Working on order model binding from checkout page - WIP * Small layout tweaks (#43) * Updating quantities implemented. * Fixed basket widget countmain
committed by
GitHub
9 changed files with 188 additions and 117 deletions
@ -1,27 +1,52 @@ |
|||
using ApplicationCore.Interfaces; |
|||
using Infrastructure.Identity; |
|||
using Microsoft.AspNetCore.Http; |
|||
using Microsoft.AspNetCore.Identity; |
|||
using Microsoft.AspNetCore.Mvc; |
|||
using Microsoft.eShopWeb.ViewModels; |
|||
using System; |
|||
using System.Linq; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Web.ViewComponents |
|||
{ |
|||
public class Basket : ViewComponent |
|||
{ |
|||
private readonly IBasketService _cartSvc; |
|||
private readonly IBasketService _basketService; |
|||
private readonly SignInManager<ApplicationUser> _signInManager; |
|||
|
|||
public Basket(IBasketService cartSvc) => _cartSvc = cartSvc; |
|||
public Basket(IBasketService basketService, |
|||
SignInManager<ApplicationUser> signInManager) |
|||
{ |
|||
_basketService = basketService; |
|||
_signInManager = signInManager; |
|||
} |
|||
|
|||
public async Task<IViewComponentResult> InvokeAsync(string userName) |
|||
{ |
|||
var vm = new BasketComponentViewModel(); |
|||
var itemsInCart = await ItemsInBasketAsync(userName); |
|||
vm.ItemsCount = itemsInCart; |
|||
vm.ItemsCount = (await GetBasketViewModelAsync()).Items.Sum(i => i.Quantity); |
|||
return View(vm); |
|||
} |
|||
private async Task<int> ItemsInBasketAsync(string userName) |
|||
|
|||
private async Task<BasketViewModel> GetBasketViewModelAsync() |
|||
{ |
|||
if (_signInManager.IsSignedIn(HttpContext.User)) |
|||
{ |
|||
return await _basketService.GetOrCreateBasketForUser(User.Identity.Name); |
|||
} |
|||
string anonymousId = GetBasketIdFromCookie(); |
|||
if (anonymousId == null) return new BasketViewModel(); |
|||
return await _basketService.GetOrCreateBasketForUser(anonymousId); |
|||
} |
|||
|
|||
private string GetBasketIdFromCookie() |
|||
{ |
|||
var basket = await _cartSvc.GetOrCreateBasketForUser(userName); |
|||
return basket.Items.Count; |
|||
if (Request.Cookies.ContainsKey(Constants.BASKET_COOKIENAME)) |
|||
{ |
|||
return Request.Cookies[Constants.BASKET_COOKIENAME]; |
|||
} |
|||
return null; |
|||
} |
|||
} |
|||
} |
|||
|
|||
@ -1,32 +1,38 @@ |
|||
@model PaginationInfoViewModel |
|||
|
|||
<div class="esh-pager"> |
|||
<div class="container"> |
|||
<article class="esh-pager-wrapper row"> |
|||
<nav> |
|||
<a class="esh-pager-item esh-pager-item--navigable @Model.Previous" |
|||
id="Previous" |
|||
asp-controller="Catalog" |
|||
asp-action="Index" |
|||
asp-route-page="@(Model.ActualPage -1)" |
|||
aria-label="Previous"> |
|||
Previous |
|||
</a> |
|||
|
|||
<span class="esh-pager-item"> |
|||
Showing @Model.ItemsPerPage of @Model.TotalItems products - Page @(Model.ActualPage + 1) - @Model.TotalPages |
|||
</span> |
|||
|
|||
<a class="esh-pager-item esh-pager-item--navigable @Model.Next" |
|||
id="Next" |
|||
asp-controller="Catalog" |
|||
asp-action="Index" |
|||
asp-route-page="@(Model.ActualPage + 1)" |
|||
aria-label="Next"> |
|||
Next |
|||
</a> |
|||
</nav> |
|||
</article> |
|||
</div> |
|||
<div class="container-fluid"> |
|||
<article class="esh-pager-wrapper row"> |
|||
<nav> |
|||
<div class="col-md-2 col-xs-12"> |
|||
<a class="esh-pager-item-left esh-pager-item--navigable @Model.Previous" |
|||
id="Previous" |
|||
asp-controller="Catalog" |
|||
asp-action="Index" |
|||
asp-route-page="@(Model.ActualPage - 1)" |
|||
aria-label="Previous"> |
|||
Previous |
|||
</a> |
|||
</div> |
|||
|
|||
<div class="col-md-8 col-xs-12"> |
|||
<span class="esh-pager-item"> |
|||
Showing @Model.ItemsPerPage of @Model.TotalItems products - Page @(Model.ActualPage + 1) - @Model.TotalPages |
|||
</span> |
|||
</div> |
|||
|
|||
<div class="col-md-2 col-xs-12"> |
|||
<a class="esh-pager-item-right esh-pager-item--navigable @Model.Next" |
|||
id="Next" |
|||
asp-controller="Catalog" |
|||
asp-action="Index" |
|||
asp-route-page="@(Model.ActualPage + 1)" |
|||
aria-label="Next"> |
|||
Next |
|||
</a> |
|||
</div> |
|||
</nav> |
|||
</article> |
|||
</div> |
|||
</div> |
|||
|
|||
|
|||
@ -1,89 +1,79 @@ |
|||
<!DOCTYPE html> |
|||
<html> |
|||
<head> |
|||
<meta charset="utf-8" /> |
|||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> |
|||
<title>@ViewData["Title"] - Microsoft.eShopOnWeb</title> |
|||
<meta charset="utf-8" /> |
|||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> |
|||
<title>@ViewData["Title"] - Microsoft.eShopOnWeb</title> |
|||
|
|||
<environment names="Development"> |
|||
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" /> |
|||
<environment names="Development"> |
|||
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" /> |
|||
<link rel="stylesheet" href="~/css/app.css" /> |
|||
<link rel="stylesheet" href="~/css/app.component.css" /> |
|||
@*<link rel="stylesheet" href="~/css/shared/components/header/header.css" /> |
|||
<link rel="stylesheet" href="~/css/shared/components/identity/identity.css" /> |
|||
<link rel="stylesheet" href="~/css/campaigns/campaigns.component.css" /> |
|||
<link rel="stylesheet" href="~/css/shared/components/pager/pager.css" />*@ |
|||
<link rel="stylesheet" href="~/css/basket/basket.component.css" /> |
|||
<link rel="stylesheet" href="~/css/basket/basket-status/basket-status.component.css" /> |
|||
<link rel="stylesheet" href="~/css/catalog/catalog.component.css" /> |
|||
@*<link rel="stylesheet" href="~/css/orders/orders.component.css" /> |
|||
<link rel="stylesheet" href="~/css/orders/orders-detail/orders-detail.component.css" /> |
|||
<link rel="stylesheet" href="~/css/orders/orders-new/orders-new.component.css" /> |
|||
<link rel="stylesheet" href="~/css/override.css" type="text/css" />*@ |
|||
</environment> |
|||
<environment names="Staging,Production"> |
|||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha.5/css/bootstrap.min.css" |
|||
asp-fallback-href="~/lib/bootstrap/dist/css/bootstrap.min.css" |
|||
asp-fallback-test-class="sr-only" asp-fallback-test-property="position" asp-fallback-test-value="absolute" /> |
|||
<link rel="stylesheet" href="~/css/app.min.css" asp-append-version="true" /> |
|||
</environment> |
|||
<environment names="Staging,Production"> |
|||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha.5/css/bootstrap.min.css" |
|||
asp-fallback-href="~/lib/bootstrap/dist/css/bootstrap.min.css" |
|||
asp-fallback-test-class="sr-only" asp-fallback-test-property="position" asp-fallback-test-value="absolute" /> |
|||
<link rel="stylesheet" href="~/css/app.min.css" asp-append-version="true" /> |
|||
</environment> |
|||
<link rel="stylesheet" href="~/css/app.component.css" /> |
|||
<link rel="stylesheet" href="~/css/basket/basket.component.css" /> |
|||
<link rel="stylesheet" href="~/css/catalog/pager.css" /> |
|||
<link rel="stylesheet" href="~/css/catalog/catalog.component.css" /> |
|||
<link rel="stylesheet" href="~/css/catalog/catalog.component.css" /> |
|||
<link rel="stylesheet" href="~/css/basket/basket-status/basket-status.component.css" /> |
|||
</head> |
|||
<body> |
|||
<header class="navbar navbar-light navbar-static-top"> |
|||
<div class="container"> |
|||
<article class="row"> |
|||
<header class="navbar navbar-light navbar-static-top"> |
|||
<div class="container"> |
|||
<article class="row"> |
|||
|
|||
<section class="col-lg-7 col-md-6 col-xs-12"> |
|||
<a class="navbar-brand" routerLink="catalog"> |
|||
<a asp-area="" asp-controller="Catalog" asp-action="Index"> |
|||
<img src="../images/brand.png" /> |
|||
</a> |
|||
</section> |
|||
@await Html.PartialAsync("_LoginPartial") |
|||
<section class="col-lg-1 col-xs-12"><a asp-controller="Basket" asp-action="Index">Basket</a></section> |
|||
<section class="col-lg-7 col-md-6 col-xs-12"> |
|||
<a asp-area="" asp-controller="Catalog" asp-action="Index" class="navbar-brand"> |
|||
<img src="../images/brand.png" alt="eShop On Web"/> |
|||
</a> |
|||
</section> |
|||
@await Html.PartialAsync("_LoginPartial") |
|||
<section class="col-lg-1 col-md-3 col-xs-6"><a asp-controller="Basket" asp-action="Index">Basket</a></section> |
|||
|
|||
</article> |
|||
</div> |
|||
</header> |
|||
</article> |
|||
</div> |
|||
</header> |
|||
|
|||
@RenderBody() |
|||
@RenderBody() |
|||
|
|||
|
|||
<footer class="esh-app-footer"> |
|||
<div class="container"> |
|||
<article class="row"> |
|||
<footer class="esh-app-footer"> |
|||
<div class="container"> |
|||
<article class="row"> |
|||
|
|||
<section class="col-sm-6"> |
|||
<img class="esh-app-footer-brand" src="../images/brand_dark.png" /> |
|||
</section> |
|||
<section class="col-sm-6"> |
|||
<img class="esh-app-footer-brand" src="../images/brand_dark.png" /> |
|||
</section> |
|||
|
|||
<section class="col-sm-6"> |
|||
<div class="esh-app-footer-text hidden-xs"> e-ShopOnWeb. All right reserved </div> |
|||
</section> |
|||
<section class="col-sm-6"> |
|||
<div class="esh-app-footer-text hidden-xs"> e-ShopOnWeb. All right reserved </div> |
|||
</section> |
|||
|
|||
</article> |
|||
</div> |
|||
</footer> |
|||
</article> |
|||
</div> |
|||
</footer> |
|||
|
|||
<environment names="Development"> |
|||
<script src="~/lib/jquery/dist/jquery.js"></script> |
|||
<script src="~/lib/bootstrap/dist/js/bootstrap.js"></script> |
|||
<script src="~/js/site.js" asp-append-version="true"></script> |
|||
</environment> |
|||
<environment names="Staging,Production"> |
|||
<script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-2.2.0.min.js" |
|||
asp-fallback-src="~/lib/jquery/dist/jquery.min.js" |
|||
asp-fallback-test="window.jQuery"> |
|||
</script> |
|||
<script src="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.6/bootstrap.min.js" |
|||
asp-fallback-src="~/lib/bootstrap/dist/js/bootstrap.min.js" |
|||
asp-fallback-test="window.jQuery && window.jQuery.fn && window.jQuery.fn.modal"> |
|||
</script> |
|||
<script src="~/js/site.min.js" asp-append-version="true"></script> |
|||
</environment> |
|||
<environment names="Development"> |
|||
<script src="~/lib/jquery/dist/jquery.js"></script> |
|||
<script src="~/lib/bootstrap/dist/js/bootstrap.js"></script> |
|||
<script src="~/js/site.js" asp-append-version="true"></script> |
|||
</environment> |
|||
<environment names="Staging,Production"> |
|||
<script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-2.2.0.min.js" |
|||
asp-fallback-src="~/lib/jquery/dist/jquery.min.js" |
|||
asp-fallback-test="window.jQuery"> |
|||
</script> |
|||
<script src="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.6/bootstrap.min.js" |
|||
asp-fallback-src="~/lib/bootstrap/dist/js/bootstrap.min.js" |
|||
asp-fallback-test="window.jQuery && window.jQuery.fn && window.jQuery.fn.modal"> |
|||
</script> |
|||
<script src="~/js/site.min.js" asp-append-version="true"></script> |
|||
</environment> |
|||
|
|||
@RenderSection("scripts", required: false) |
|||
@RenderSection("scripts", required: false) |
|||
</body> |
|||
</html> |
|||
|
|||
Loading…
Reference in new issue