Changes in Basket Integration
This commit is contained in:
parent
548d66d58c
commit
2ab72466fc
@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Windows.Input;
|
||||
using Xamarin.Forms;
|
||||
|
||||
namespace eShopOnContainers.Core.Controls
|
||||
@ -12,6 +13,9 @@ namespace eShopOnContainers.Core.Controls
|
||||
public static readonly BindableProperty SelectedItemProperty = BindableProperty.Create("SelectedItem",
|
||||
typeof(object), typeof(BindablePicker), null, BindingMode.TwoWay, propertyChanged: OnSelectedItemChanged);
|
||||
|
||||
public static readonly BindableProperty ItemSelectedCommandProperty = BindableProperty.Create("ItemSelectedCommand",
|
||||
typeof(ICommand), typeof(BindablePicker), null);
|
||||
|
||||
public BindablePicker()
|
||||
{
|
||||
SelectedIndexChanged += (o, e) =>
|
||||
@ -23,6 +27,7 @@ namespace eShopOnContainers.Core.Controls
|
||||
}
|
||||
|
||||
var index = 0;
|
||||
|
||||
foreach (var item in ItemsSource)
|
||||
{
|
||||
if (index == SelectedIndex)
|
||||
@ -54,6 +59,12 @@ namespace eShopOnContainers.Core.Controls
|
||||
}
|
||||
}
|
||||
|
||||
public ICommand ItemSelectedCommand
|
||||
{
|
||||
get { return (ICommand)GetValue(ItemSelectedCommandProperty); }
|
||||
set { SetValue(ItemSelectedCommandProperty, value); }
|
||||
}
|
||||
|
||||
public event EventHandler<SelectedItemChangedEventArgs> ItemSelected;
|
||||
|
||||
private void InternalUpdateSelectedIndex()
|
||||
@ -107,6 +118,11 @@ namespace eShopOnContainers.Core.Controls
|
||||
boundPicker.ItemSelected(boundPicker, new SelectedItemChangedEventArgs(newValue));
|
||||
}
|
||||
|
||||
if(boundPicker.ItemSelectedCommand != null)
|
||||
{
|
||||
boundPicker.ItemSelectedCommand.Execute(newValue);
|
||||
}
|
||||
|
||||
boundPicker.InternalUpdateSelectedIndex();
|
||||
}
|
||||
}
|
||||
|
@ -105,4 +105,4 @@ namespace eShopOnContainers.Core.Models.Basket
|
||||
return String.Format("Product Id: {0}, Quantity: {1}", ProductId, Quantity);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -29,19 +29,29 @@ namespace eShopOnContainers.Core.Services.Basket
|
||||
return MockCustomBasket;
|
||||
}
|
||||
|
||||
public async Task<CustomerBasket> UpdateBasketAsync(CustomerBasket customerBasket)
|
||||
public async Task<CustomerBasket> UpdateBasketAsync(CustomerBasket customerBasket, string token)
|
||||
{
|
||||
await Task.Delay(500);
|
||||
|
||||
if (string.IsNullOrEmpty(token))
|
||||
{
|
||||
return new CustomerBasket();
|
||||
}
|
||||
|
||||
MockCustomBasket = customerBasket;
|
||||
|
||||
return MockCustomBasket;
|
||||
}
|
||||
|
||||
public async Task ClearBasketAsync(string guidUser)
|
||||
public async Task ClearBasketAsync(string guidUser, string token)
|
||||
{
|
||||
await Task.Delay(500);
|
||||
|
||||
if (string.IsNullOrEmpty(token))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(guidUser))
|
||||
{
|
||||
MockCustomBasket.Items.Clear();
|
||||
|
@ -39,18 +39,18 @@ namespace eShopOnContainers.Core.Services.Basket
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<CustomerBasket> UpdateBasketAsync(CustomerBasket customerBasket)
|
||||
public async Task<CustomerBasket> UpdateBasketAsync(CustomerBasket customerBasket, string token)
|
||||
{
|
||||
UriBuilder builder = new UriBuilder(GlobalSetting.Instance.BasketEndpoint);
|
||||
|
||||
string uri = builder.ToString();
|
||||
|
||||
var result = await _requestProvider.PostAsync(uri, customerBasket);
|
||||
var result = await _requestProvider.PostAsync(uri, customerBasket, token);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public async Task ClearBasketAsync(string guidUser)
|
||||
public async Task ClearBasketAsync(string guidUser, string token)
|
||||
{
|
||||
UriBuilder builder = new UriBuilder(GlobalSetting.Instance.BasketEndpoint);
|
||||
|
||||
@ -58,7 +58,7 @@ namespace eShopOnContainers.Core.Services.Basket
|
||||
|
||||
string uri = builder.ToString();
|
||||
|
||||
await _requestProvider.DeleteAsync(uri);
|
||||
await _requestProvider.DeleteAsync(uri, token);
|
||||
}
|
||||
}
|
||||
}
|
@ -6,7 +6,7 @@ namespace eShopOnContainers.Core.Services.Basket
|
||||
public interface IBasketService
|
||||
{
|
||||
Task<CustomerBasket> GetBasketAsync(string guidUser, string token);
|
||||
Task<CustomerBasket> UpdateBasketAsync(CustomerBasket customerBasket);
|
||||
Task ClearBasketAsync(string guidUser);
|
||||
Task<CustomerBasket> UpdateBasketAsync(CustomerBasket customerBasket, string token);
|
||||
Task ClearBasketAsync(string guidUser, string token);
|
||||
}
|
||||
}
|
@ -4,18 +4,16 @@ namespace eShopOnContainers.Core.Services.RequestProvider
|
||||
{
|
||||
public interface IRequestProvider
|
||||
{
|
||||
Task<TResult> GetAsync<TResult>(string uri);
|
||||
Task<TResult> GetAsync<TResult>(string uri, string token = "");
|
||||
|
||||
Task<TResult> GetAsync<TResult>(string uri, string token);
|
||||
Task<TResult> PostAsync<TResult>(string uri, TResult data, string token = "");
|
||||
|
||||
Task<TResult> PostAsync<TResult>(string uri, TResult data);
|
||||
Task<TResult> PostAsync<TRequest, TResult>(string uri, TRequest data, string token = "");
|
||||
|
||||
Task<TResult> PostAsync<TRequest, TResult>(string uri, TRequest data);
|
||||
Task<TResult> PutAsync<TResult>(string uri, TResult data, string token = "");
|
||||
|
||||
Task<TResult> PutAsync<TResult>(string uri, TResult data);
|
||||
Task<TResult> PutAsync<TRequest, TResult>(string uri, TRequest data, string token = "");
|
||||
|
||||
Task<TResult> PutAsync<TRequest, TResult>(string uri, TRequest data);
|
||||
|
||||
Task DeleteAsync(string uri);
|
||||
Task DeleteAsync(string uri, string token = "");
|
||||
}
|
||||
}
|
@ -26,9 +26,9 @@ namespace eShopOnContainers.Core.Services.RequestProvider
|
||||
_serializerSettings.Converters.Add(new StringEnumConverter());
|
||||
}
|
||||
|
||||
public async Task<TResult> GetAsync<TResult>(string uri)
|
||||
public async Task<TResult> GetAsync<TResult>(string uri, string token = "")
|
||||
{
|
||||
HttpClient httpClient = CreateHttpClient();
|
||||
HttpClient httpClient = CreateHttpClient(token);
|
||||
HttpResponseMessage response = await httpClient.GetAsync(uri);
|
||||
|
||||
await HandleResponse(response);
|
||||
@ -41,30 +41,14 @@ namespace eShopOnContainers.Core.Services.RequestProvider
|
||||
return result;
|
||||
}
|
||||
|
||||
public async Task<TResult> GetAsync<TResult>(string uri, string token)
|
||||
public Task<TResult> PostAsync<TResult>(string uri, TResult data, string token = "")
|
||||
{
|
||||
HttpClient httpClient = CreateHttpClient();
|
||||
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
|
||||
HttpResponseMessage response = await httpClient.GetAsync(uri);
|
||||
|
||||
await HandleResponse(response);
|
||||
|
||||
string serialized = await response.Content.ReadAsStringAsync();
|
||||
|
||||
TResult result = await Task.Run(() =>
|
||||
JsonConvert.DeserializeObject<TResult>(serialized, _serializerSettings));
|
||||
|
||||
return result;
|
||||
return PostAsync<TResult, TResult>(uri, data, token);
|
||||
}
|
||||
|
||||
public Task<TResult> PostAsync<TResult>(string uri, TResult data)
|
||||
public async Task<TResult> PostAsync<TRequest, TResult>(string uri, TRequest data, string token = "")
|
||||
{
|
||||
return PostAsync<TResult, TResult>(uri, data);
|
||||
}
|
||||
|
||||
public async Task<TResult> PostAsync<TRequest, TResult>(string uri, TRequest data)
|
||||
{
|
||||
HttpClient httpClient = CreateHttpClient();
|
||||
HttpClient httpClient = CreateHttpClient(token);
|
||||
string serialized = await Task.Run(() => JsonConvert.SerializeObject(data, _serializerSettings));
|
||||
HttpResponseMessage response = await httpClient.PostAsync(uri, new StringContent(serialized, Encoding.UTF8, "application/json"));
|
||||
|
||||
@ -75,14 +59,14 @@ namespace eShopOnContainers.Core.Services.RequestProvider
|
||||
return await Task.Run(() => JsonConvert.DeserializeObject<TResult>(responseData, _serializerSettings));
|
||||
}
|
||||
|
||||
public Task<TResult> PutAsync<TResult>(string uri, TResult data)
|
||||
public Task<TResult> PutAsync<TResult>(string uri, TResult data, string token = "")
|
||||
{
|
||||
return PutAsync<TResult, TResult>(uri, data);
|
||||
return PutAsync<TResult, TResult>(uri, data, token);
|
||||
}
|
||||
|
||||
public async Task<TResult> PutAsync<TRequest, TResult>(string uri, TRequest data)
|
||||
public async Task<TResult> PutAsync<TRequest, TResult>(string uri, TRequest data, string token = "")
|
||||
{
|
||||
HttpClient httpClient = CreateHttpClient();
|
||||
HttpClient httpClient = CreateHttpClient(token);
|
||||
string serialized = await Task.Run(() => JsonConvert.SerializeObject(data, _serializerSettings));
|
||||
HttpResponseMessage response = await httpClient.PutAsync(uri, new StringContent(serialized, Encoding.UTF8, "application/json"));
|
||||
|
||||
@ -93,19 +77,24 @@ namespace eShopOnContainers.Core.Services.RequestProvider
|
||||
return await Task.Run(() => JsonConvert.DeserializeObject<TResult>(responseData, _serializerSettings));
|
||||
}
|
||||
|
||||
public async Task DeleteAsync(string uri)
|
||||
public async Task DeleteAsync(string uri, string token = "")
|
||||
{
|
||||
HttpClient httpClient = CreateHttpClient();
|
||||
HttpClient httpClient = CreateHttpClient(token);
|
||||
|
||||
await httpClient.DeleteAsync(uri);
|
||||
}
|
||||
|
||||
private HttpClient CreateHttpClient()
|
||||
private HttpClient CreateHttpClient(string token = "")
|
||||
{
|
||||
var httpClient = new HttpClient();
|
||||
|
||||
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
|
||||
|
||||
if (!string.IsNullOrEmpty(token))
|
||||
{
|
||||
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
|
||||
}
|
||||
|
||||
return httpClient;
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,5 @@
|
||||
using eShopOnContainers.Core.Models.Basket;
|
||||
using eShopOnContainers.Core.Helpers;
|
||||
using eShopOnContainers.Core.Models.Basket;
|
||||
using eShopOnContainers.Core.Models.Catalog;
|
||||
using eShopOnContainers.Core.Models.User;
|
||||
using eShopOnContainers.Core.Services.Basket;
|
||||
@ -133,12 +134,14 @@ namespace eShopOnContainers.Core.ViewModels
|
||||
{
|
||||
Total += (orderItem.Quantity * orderItem.UnitPrice);
|
||||
}
|
||||
|
||||
|
||||
var authToken = Settings.AuthAccessToken;
|
||||
|
||||
_basketService.UpdateBasketAsync(new CustomerBasket
|
||||
{
|
||||
BuyerId = _user.GuidUser,
|
||||
Items = BasketItems.ToList()
|
||||
});
|
||||
}, authToken);
|
||||
}
|
||||
|
||||
private void Checkout()
|
||||
|
@ -13,6 +13,7 @@ using eShopOnContainers.Core.Models.Basket;
|
||||
using System.Collections.Generic;
|
||||
using eShopOnContainers.Core.Services.Basket;
|
||||
using eShopOnContainers.Core.Services.Order;
|
||||
using eShopOnContainers.Core.Helpers;
|
||||
|
||||
namespace eShopOnContainers.Core.ViewModels
|
||||
{
|
||||
@ -94,8 +95,10 @@ namespace eShopOnContainers.Core.ViewModels
|
||||
|
||||
private async void Checkout()
|
||||
{
|
||||
var authToken = Settings.AuthAccessToken;
|
||||
|
||||
await _orderService.CreateOrderAsync(Order);
|
||||
await _basketService.ClearBasketAsync(User.GuidUser);
|
||||
await _basketService.ClearBasketAsync(User.GuidUser, authToken);
|
||||
|
||||
await NavigationService.NavigateToAsync<MainViewModel>(new TabParameter { TabIndex = 1 });
|
||||
await NavigationService.RemoveLastFromBackStackAsync();
|
||||
|
@ -186,9 +186,9 @@ namespace eShopOnContainers.Core.ViewModels
|
||||
|
||||
if(!string.IsNullOrEmpty(logoutRequest))
|
||||
{
|
||||
IsValid = false;
|
||||
LoginUrl = logoutRequest;
|
||||
Settings.AuthAccessToken = string.Empty;
|
||||
IsValid = true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -209,6 +209,13 @@ namespace eShopOnContainers.Core.ViewModels
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
if(url.Contains("endsession"))
|
||||
{
|
||||
await SignInAsync();
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
private bool Validate()
|
||||
|
Loading…
x
Reference in New Issue
Block a user