Browse Source

Error handling in blazor UI

pull/8074/head
Halil İbrahim Kalkan 6 years ago
parent
commit
e377beaa7b
  1. 3
      framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/AbpComponentBase.cs
  2. 109
      framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs
  3. 69
      modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Components/FeatureManagementModal.razor.cs
  4. 32
      modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor.cs
  5. 2
      modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor
  6. 85
      modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor.cs
  7. 1
      modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/EmailSettingGroup/EmailSettingGroupViewComponent.razor
  8. 39
      modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/EmailSettingGroup/EmailSettingGroupViewComponent.razor.cs
  9. 15
      modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor.cs

3
framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/AbpComponentBase.cs

@ -140,8 +140,9 @@ namespace Volo.Abp.AspNetCore.Components
return localizer; return localizer;
} }
protected async Task ShowError(Exception exception) protected async Task HandleErrorAsync(Exception exception)
{ {
Logger.LogException(exception);
await InvokeAsync(async () => await InvokeAsync(async () =>
{ {
await UserExceptionInformer.InformAsync(new UserExceptionInformerContext(exception)); await UserExceptionInformer.InformAsync(new UserExceptionInformerContext(exception));

109
framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs

@ -227,10 +227,17 @@ namespace Volo.Abp.BlazoriseUI
protected virtual async Task GetEntitiesAsync() protected virtual async Task GetEntitiesAsync()
{ {
await UpdateGetListInputAsync(); try
var result = await AppService.GetListAsync(GetListInput); {
Entities = MapToListViewModel(result.Items); await UpdateGetListInputAsync();
TotalCount = (int?)result.TotalCount; var result = await AppService.GetListAsync(GetListInput);
Entities = MapToListViewModel(result.Items);
TotalCount = (int?)result.TotalCount;
}
catch (Exception ex)
{
await HandleErrorAsync(ex);
}
} }
private IReadOnlyList<TListViewModel> MapToListViewModel(IReadOnlyList<TGetListOutputDto> dtos) private IReadOnlyList<TListViewModel> MapToListViewModel(IReadOnlyList<TGetListOutputDto> dtos)
@ -287,20 +294,26 @@ namespace Volo.Abp.BlazoriseUI
protected virtual async Task OpenCreateModalAsync() protected virtual async Task OpenCreateModalAsync()
{ {
CreateValidationsRef?.ClearAll(); try
{
CreateValidationsRef?.ClearAll();
await CheckCreatePolicyAsync(); await CheckCreatePolicyAsync();
NewEntity = new TCreateViewModel(); NewEntity = new TCreateViewModel();
// Mapper will not notify Blazor that binded values are changed // Mapper will not notify Blazor that binded values are changed
// so we need to notify it manually by calling StateHasChanged // so we need to notify it manually by calling StateHasChanged
await InvokeAsync(() => await InvokeAsync(() =>
{
StateHasChanged();
CreateModal?.Show();
});
}
catch (Exception ex)
{ {
StateHasChanged(); await HandleErrorAsync(ex);
}
CreateModal?.Show();
});
} }
protected virtual Task CloseCreateModalAsync() protected virtual Task CloseCreateModalAsync()
@ -310,21 +323,27 @@ namespace Volo.Abp.BlazoriseUI
protected virtual async Task OpenEditModalAsync(TListViewModel entity) protected virtual async Task OpenEditModalAsync(TListViewModel entity)
{ {
EditValidationsRef?.ClearAll(); try
{
await CheckUpdatePolicyAsync(); EditValidationsRef?.ClearAll();
await CheckUpdatePolicyAsync();
var entityDto = await AppService.GetAsync(entity.Id); var entityDto = await AppService.GetAsync(entity.Id);
EditingEntityId = entity.Id; EditingEntityId = entity.Id;
EditingEntity = MapToEditingEntity(entityDto); EditingEntity = MapToEditingEntity(entityDto);
await InvokeAsync(() => await InvokeAsync(() =>
{
StateHasChanged();
EditModal?.Show();
});
}
catch (Exception ex)
{ {
StateHasChanged(); await HandleErrorAsync(ex);
}
EditModal?.Show();
});
} }
protected virtual TUpdateViewModel MapToEditingEntity(TGetOutputDto entityDto) protected virtual TUpdateViewModel MapToEditingEntity(TGetOutputDto entityDto)
@ -360,15 +379,22 @@ namespace Volo.Abp.BlazoriseUI
protected virtual async Task CreateEntityAsync() protected virtual async Task CreateEntityAsync()
{ {
if (CreateValidationsRef?.ValidateAll() ?? true) try
{ {
await OnCreatingEntityAsync(); if (CreateValidationsRef?.ValidateAll() ?? true)
{
await OnCreatingEntityAsync();
await CheckCreatePolicyAsync(); await CheckCreatePolicyAsync();
var createInput = MapToCreateInput(NewEntity); var createInput = MapToCreateInput(NewEntity);
await AppService.CreateAsync(createInput); await AppService.CreateAsync(createInput);
await OnCreatedEntityAsync(); await OnCreatedEntityAsync();
}
}
catch (Exception ex)
{
await HandleErrorAsync(ex);
} }
} }
@ -386,15 +412,22 @@ namespace Volo.Abp.BlazoriseUI
protected virtual async Task UpdateEntityAsync() protected virtual async Task UpdateEntityAsync()
{ {
if (EditValidationsRef?.ValidateAll() ?? true) try
{ {
await OnUpdatingEntityAsync(); if (EditValidationsRef?.ValidateAll() ?? true)
{
await OnUpdatingEntityAsync();
await CheckUpdatePolicyAsync(); await CheckUpdatePolicyAsync();
var updateInput = MapToUpdateInput(EditingEntity); var updateInput = MapToUpdateInput(EditingEntity);
await AppService.UpdateAsync(EditingEntityId, updateInput); await AppService.UpdateAsync(EditingEntityId, updateInput);
await OnUpdatedEntityAsync(); await OnUpdatedEntityAsync();
}
}
catch (Exception ex)
{
await HandleErrorAsync(ex);
} }
} }
@ -421,7 +454,7 @@ namespace Volo.Abp.BlazoriseUI
} }
catch (Exception ex) catch (Exception ex)
{ {
await ShowError(ex); await HandleErrorAsync(ex);
} }
} }

69
modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Components/FeatureManagementModal.razor.cs

@ -1,4 +1,5 @@
using System.Collections.Generic; using System;
using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Blazorise; using Blazorise;
@ -38,33 +39,40 @@ namespace Volo.Abp.FeatureManagement.Blazor.Components
public virtual async Task OpenAsync([NotNull]string providerName, string providerKey = null) public virtual async Task OpenAsync([NotNull]string providerName, string providerKey = null)
{ {
ProviderName = providerName; try
ProviderKey = providerKey; {
ProviderName = providerName;
ProviderKey = providerKey;
ToggleValues = new Dictionary<string, bool>(); ToggleValues = new Dictionary<string, bool>();
SelectionStringValues = new Dictionary<string, string>(); SelectionStringValues = new Dictionary<string, string>();
Groups = (await FeatureAppService.GetAsync(ProviderName, ProviderKey)).Groups; Groups = (await FeatureAppService.GetAsync(ProviderName, ProviderKey)).Groups;
SelectedTabName = GetNormalizedGroupName(Groups.First().Name); SelectedTabName = GetNormalizedGroupName(Groups.First().Name);
foreach (var featureGroupDto in Groups) foreach (var featureGroupDto in Groups)
{
foreach (var featureDto in featureGroupDto.Features)
{ {
if (featureDto.ValueType is ToggleStringValueType) foreach (var featureDto in featureGroupDto.Features)
{ {
ToggleValues.Add(featureDto.Name, bool.Parse(featureDto.Value)); if (featureDto.ValueType is ToggleStringValueType)
} {
ToggleValues.Add(featureDto.Name, bool.Parse(featureDto.Value));
if (featureDto.ValueType is SelectionStringValueType) }
{
SelectionStringValues.Add(featureDto.Name, featureDto.Value); if (featureDto.ValueType is SelectionStringValueType)
{
SelectionStringValues.Add(featureDto.Name, featureDto.Value);
}
} }
} }
}
await InvokeAsync(Modal.Show); await InvokeAsync(Modal.Show);
}
catch (Exception ex)
{
await HandleErrorAsync(ex);
}
} }
public virtual Task CloseModal() public virtual Task CloseModal()
@ -74,19 +82,26 @@ namespace Volo.Abp.FeatureManagement.Blazor.Components
protected virtual async Task SaveAsync() protected virtual async Task SaveAsync()
{ {
var features = new UpdateFeaturesDto try
{ {
Features = Groups.SelectMany(g => g.Features).Select(f => new UpdateFeatureDto var features = new UpdateFeaturesDto
{ {
Name = f.Name, Features = Groups.SelectMany(g => g.Features).Select(f => new UpdateFeatureDto
Value = f.ValueType is ToggleStringValueType ? ToggleValues[f.Name].ToString() : {
Name = f.Name,
Value = f.ValueType is ToggleStringValueType ? ToggleValues[f.Name].ToString() :
f.ValueType is SelectionStringValueType ? SelectionStringValues[f.Name] : f.Value f.ValueType is SelectionStringValueType ? SelectionStringValues[f.Name] : f.Value
}).ToList() }).ToList()
}; };
await FeatureAppService.UpdateAsync(ProviderName, ProviderKey, features); await FeatureAppService.UpdateAsync(ProviderName, ProviderKey, features);
await InvokeAsync(Modal.Hide); await InvokeAsync(Modal.Hide);
}
catch (Exception ex)
{
await HandleErrorAsync(ex);
}
} }
protected virtual string GetNormalizedGroupName(string name) protected virtual string GetNormalizedGroupName(string name)

32
modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor.cs

@ -46,7 +46,14 @@ namespace Volo.Abp.Identity.Blazor.Pages.Identity
{ {
await base.OnInitializedAsync(); await base.OnInitializedAsync();
Roles = (await AppService.GetAssignableRolesAsync()).Items; try
{
Roles = (await AppService.GetAssignableRolesAsync()).Items;
}
catch (Exception ex)
{
await HandleErrorAsync(ex);
}
} }
protected override async Task SetPermissionsAsync() protected override async Task SetPermissionsAsync()
@ -79,17 +86,24 @@ namespace Volo.Abp.Identity.Blazor.Pages.Identity
protected override async Task OpenEditModalAsync(IdentityUserDto entity) protected override async Task OpenEditModalAsync(IdentityUserDto entity)
{ {
EditModalSelectedTab = DefaultSelectedTab; try
{
EditModalSelectedTab = DefaultSelectedTab;
var userRoleNames = (await AppService.GetRolesAsync(entity.Id)).Items.Select(r => r.Name).ToList(); var userRoleNames = (await AppService.GetRolesAsync(entity.Id)).Items.Select(r => r.Name).ToList();
EditUserRoles = Roles.Select(x => new AssignedRoleViewModel EditUserRoles = Roles.Select(x => new AssignedRoleViewModel
{ {
Name = x.Name, Name = x.Name,
IsAssigned = userRoleNames.Contains(x.Name) IsAssigned = userRoleNames.Contains(x.Name)
}).ToArray(); }).ToArray();
await base.OpenEditModalAsync(entity); await base.OpenEditModalAsync(entity);
}
catch (Exception ex)
{
await HandleErrorAsync(ex);
}
} }
protected override Task OnUpdatingEntityAsync() protected override Task OnUpdatingEntityAsync()

2
modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor

@ -1,6 +1,6 @@
@using Microsoft.Extensions.Localization @using Microsoft.Extensions.Localization
@using Volo.Abp.PermissionManagement.Localization @using Volo.Abp.PermissionManagement.Localization
@inject IStringLocalizer<AbpPermissionManagementResource> L @inherits Volo.Abp.AspNetCore.Components.AbpComponentBase
<Modal @ref="_modal"> <Modal @ref="_modal">
<ModalBackdrop /> <ModalBackdrop />
<ModalContent Size="ModalSize.Large" IsCentered="true"> <ModalContent Size="ModalSize.Large" IsCentered="true">

85
modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor.cs

@ -1,8 +1,10 @@
using System.Collections.Generic; using System;
using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Blazorise; using Blazorise;
using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components;
using Volo.Abp.PermissionManagement.Localization;
namespace Volo.Abp.PermissionManagement.Blazor.Components namespace Volo.Abp.PermissionManagement.Blazor.Components
{ {
@ -65,39 +67,51 @@ namespace Volo.Abp.PermissionManagement.Blazor.Components
} }
} }
public PermissionManagementModal()
{
LocalizationResource = typeof(AbpPermissionManagementResource);
}
public async Task OpenAsync(string providerName, string providerKey, string entityDisplayName = null) public async Task OpenAsync(string providerName, string providerKey, string entityDisplayName = null)
{ {
_providerName = providerName; try
_providerKey = providerKey; {
_providerName = providerName;
_providerKey = providerKey;
var result = await PermissionAppService.GetAsync(_providerName, _providerKey); var result = await PermissionAppService.GetAsync(_providerName, _providerKey);
_entityDisplayName = entityDisplayName ?? result.EntityDisplayName; _entityDisplayName = entityDisplayName ?? result.EntityDisplayName;
_groups = result.Groups; _groups = result.Groups;
_grantedPermissionCount = 0; _grantedPermissionCount = 0;
_notGrantedPermissionCount = 0; _notGrantedPermissionCount = 0;
foreach (var permission in _groups.SelectMany(x => x.Permissions)) foreach (var permission in _groups.SelectMany(x => x.Permissions))
{
if (permission.IsGranted && permission.GrantedProviders.All(x => x.ProviderName != _providerName))
{ {
_disabledPermissions.Add(permission); if (permission.IsGranted && permission.GrantedProviders.All(x => x.ProviderName != _providerName))
continue; {
} _disabledPermissions.Add(permission);
continue;
}
if (permission.IsGranted) if (permission.IsGranted)
{ {
_grantedPermissionCount++; _grantedPermissionCount++;
} }
else else
{ {
_notGrantedPermissionCount++; _notGrantedPermissionCount++;
}
} }
}
_selectedTabName = GetNormalizedGroupName(_groups.First().Name); _selectedTabName = GetNormalizedGroupName(_groups.First().Name);
await InvokeAsync(_modal.Show); await InvokeAsync(_modal.Show);
}
catch (Exception ex)
{
await HandleErrorAsync(ex);
}
} }
private Task CloseModal() private Task CloseModal()
@ -107,17 +121,24 @@ namespace Volo.Abp.PermissionManagement.Blazor.Components
private async Task SaveAsync() private async Task SaveAsync()
{ {
var updateDto = new UpdatePermissionsDto try
{ {
Permissions = _groups var updateDto = new UpdatePermissionsDto
.SelectMany(g => g.Permissions) {
.Select(p => new UpdatePermissionDto { IsGranted = p.IsGranted, Name = p.Name }) Permissions = _groups
.ToArray() .SelectMany(g => g.Permissions)
}; .Select(p => new UpdatePermissionDto { IsGranted = p.IsGranted, Name = p.Name })
.ToArray()
};
await PermissionAppService.UpdateAsync(_providerName, _providerKey, updateDto); await PermissionAppService.UpdateAsync(_providerName, _providerKey, updateDto);
await InvokeAsync(_modal.Hide); await InvokeAsync(_modal.Hide);
}
catch (Exception ex)
{
await HandleErrorAsync(ex);
}
} }
private string GetNormalizedGroupName(string name) private string GetNormalizedGroupName(string name)

1
modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/EmailSettingGroup/EmailSettingGroupViewComponent.razor

@ -1,4 +1,5 @@
@using Volo.Abp.SettingManagement.Localization @using Volo.Abp.SettingManagement.Localization
@inherits Volo.Abp.AspNetCore.Components.AbpComponentBase
@inject AbpBlazorMessageLocalizerHelper<AbpSettingManagementResource> LH @inject AbpBlazorMessageLocalizerHelper<AbpSettingManagementResource> LH
@if (EmailSettings != null) @if (EmailSettings != null)

39
modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/EmailSettingGroup/EmailSettingGroupViewComponent.razor.cs

@ -1,9 +1,8 @@
using System.Threading.Tasks; using System;
using System.Threading.Tasks;
using Blazorise; using Blazorise;
using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components;
using Microsoft.Extensions.Localization;
using Volo.Abp.AspNetCore.Components.Messages; using Volo.Abp.AspNetCore.Components.Messages;
using Volo.Abp.ObjectMapping;
using Volo.Abp.SettingManagement.Localization; using Volo.Abp.SettingManagement.Localization;
namespace Volo.Abp.SettingManagement.Blazor.Pages.SettingManagement.EmailSettingGroup namespace Volo.Abp.SettingManagement.Blazor.Pages.SettingManagement.EmailSettingGroup
@ -16,26 +15,40 @@ namespace Volo.Abp.SettingManagement.Blazor.Pages.SettingManagement.EmailSetting
[Inject] [Inject]
protected IUiMessageService UiMessageService { get; set; } protected IUiMessageService UiMessageService { get; set; }
[Inject]
protected IStringLocalizer<AbpSettingManagementResource> L { get; set; }
[Inject]
protected IObjectMapper ObjectMapper { get; set; }
protected EmailSettingsDto EmailSettings; protected EmailSettingsDto EmailSettings;
protected Validations IdentitySettingValidation; protected Validations IdentitySettingValidation;
public EmailSettingGroupViewComponent()
{
ObjectMapperContext = typeof(AbpSettingManagementBlazorModule);
LocalizationResource = typeof(AbpSettingManagementResource);
}
protected override async Task OnInitializedAsync() protected override async Task OnInitializedAsync()
{ {
EmailSettings = await EmailSettingsAppService.GetAsync(); try
{
EmailSettings = await EmailSettingsAppService.GetAsync();
}
catch (Exception ex)
{
await HandleErrorAsync(ex);
}
} }
protected virtual async Task UpdateSettingsAsync() protected virtual async Task UpdateSettingsAsync()
{ {
await EmailSettingsAppService.UpdateAsync(ObjectMapper.Map<EmailSettingsDto, UpdateEmailSettingsDto>(EmailSettings)); try
{
await UiMessageService.Success(L["SuccessfullySaved"]); await EmailSettingsAppService.UpdateAsync(ObjectMapper.Map<EmailSettingsDto, UpdateEmailSettingsDto>(EmailSettings));
await UiMessageService.Success(L["SuccessfullySaved"]);
}
catch (Exception ex)
{
await HandleErrorAsync(ex);
}
} }
} }
} }

15
modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor.cs

@ -1,9 +1,5 @@
using System; using System.Threading.Tasks;
using System.ComponentModel.DataAnnotations;
using System.Threading.Tasks;
using Blazorise;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Volo.Abp.BlazoriseUI;
using Volo.Abp.FeatureManagement.Blazor.Components; using Volo.Abp.FeatureManagement.Blazor.Components;
using Volo.Abp.TenantManagement.Localization; using Volo.Abp.TenantManagement.Localization;
@ -18,8 +14,6 @@ namespace Volo.Abp.TenantManagement.Blazor.Pages.TenantManagement
protected FeatureManagementModal FeatureManagementModal; protected FeatureManagementModal FeatureManagementModal;
protected TenantInfoModel TenantInfo;
public TenantManagement() public TenantManagement()
{ {
LocalizationResource = typeof(AbpTenantManagementResource); LocalizationResource = typeof(AbpTenantManagementResource);
@ -30,8 +24,6 @@ namespace Volo.Abp.TenantManagement.Blazor.Pages.TenantManagement
DeletePolicyName = TenantManagementPermissions.Tenants.Delete; DeletePolicyName = TenantManagementPermissions.Tenants.Delete;
ManageFeaturesPolicyName = TenantManagementPermissions.Tenants.ManageFeatures; ManageFeaturesPolicyName = TenantManagementPermissions.Tenants.ManageFeatures;
TenantInfo = new TenantInfoModel();
} }
protected override async Task SetPermissionsAsync() protected override async Task SetPermissionsAsync()
@ -46,9 +38,4 @@ namespace Volo.Abp.TenantManagement.Blazor.Pages.TenantManagement
return string.Format(L["TenantDeletionConfirmationMessage"], entity.Name); return string.Format(L["TenantDeletionConfirmationMessage"], entity.Name);
} }
} }
public class TenantInfoModel
{
public Guid Id { get; set; }
}
} }

Loading…
Cancel
Save