Browse Source

Validation for Tenant create and edit modals

pull/6035/head
Mladen Macanovic 6 years ago
parent
commit
a62fb7be31
  1. 3
      modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantCreateOrUpdateDtoBase.cs
  2. 175
      modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor
  3. 32
      modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor.cs

3
modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantCreateOrUpdateDtoBase.cs

@ -8,11 +8,12 @@ namespace Volo.Abp.TenantManagement
{ {
[Required] [Required]
[DynamicStringLength(typeof(TenantConsts), nameof(TenantConsts.MaxNameLength))] [DynamicStringLength(typeof(TenantConsts), nameof(TenantConsts.MaxNameLength))]
[Display(Name = "TenantName")]
public string Name { get; set; } public string Name { get; set; }
public TenantCreateOrUpdateDtoBase() : base(false) public TenantCreateOrUpdateDtoBase() : base(false)
{ {
} }
} }
} }

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

@ -1,15 +1,15 @@
@page "/tenant-management/tenants" @page "/tenant-management/tenants"
@attribute [Authorize(TenantManagementPermissions.Tenants.Default)] @attribute [Authorize( TenantManagementPermissions.Tenants.Default )]
@using Microsoft.AspNetCore.Authorization @using Microsoft.AspNetCore.Authorization
@using Volo.Abp.FeatureManagement.Blazor.Components @using Volo.Abp.FeatureManagement.Blazor.Components
@using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Forms
@using Volo.Abp.TenantManagement.Localization
@inject AbpBlazorMessageLocalizerHelper<AbpTenantManagementResource> LH
@inherits AbpCrudPageBase<ITenantAppService, TenantDto, Guid, GetTenantsInput, TenantCreateDto, TenantUpdateDto> @inherits AbpCrudPageBase<ITenantAppService, TenantDto, Guid, GetTenantsInput, TenantCreateDto, TenantUpdateDto>
@* ************************* PAGE HEADER ************************* *@ @* ************************* PAGE HEADER ************************* *@
<Row> <Row>
<Column ColumnSize="ColumnSize.Is6"> <Column ColumnSize="ColumnSize.Is6">
<h1>@L["Tenants"]</h1> <Heading Size="HeadingSize.Is1">@L["Tenants"]</Heading>
</Column> </Column>
<Column ColumnSize="ColumnSize.Is6"> <Column ColumnSize="ColumnSize.Is6">
@if (HasCreatePermission) @if (HasCreatePermission)
@ -65,31 +65,52 @@
{ {
<Modal @ref="CreateModal"> <Modal @ref="CreateModal">
<ModalBackdrop /> <ModalBackdrop />
<ModalContent IsCentered="true"> <ModalContent Centered="true">
<ModalHeader> <Form id="TenantCreateForm">
<ModalTitle>@L["NewTenant"]</ModalTitle> <ModalHeader>
<CloseButton Clicked="CloseCreateModalAsync" /> <ModalTitle>@L["NewTenant"]</ModalTitle>
</ModalHeader> <CloseButton Clicked="CloseCreateModalAsync" />
<ModalBody> </ModalHeader>
<EditForm id="TenantCreateForm" Model="@NewEntity" OnValidSubmit="CreateEntityAsync"> <ModalBody>
<Field>
<FieldLabel>@L["TenantName"]</FieldLabel> <Validations @ref="@CreateValidationsRef" Model="@NewEntity" ValidateOnLoad="false">
<TextEdit @bind-text="@NewEntity.Name" /> <Validation MessageLocalizer="@LH.Localize">
</Field> <Field>
<Field> <FieldLabel>@L["TenantName"]</FieldLabel>
<FieldLabel>@L["DisplayName:AdminEmailAddress"]</FieldLabel> <TextEdit @bind-Text="@NewEntity.Name">
<TextEdit Role="@TextRole.Email" @bind-text="@NewEntity.AdminEmailAddress" /> <Feedback>
</Field> <ValidationError />
<Field> </Feedback>
<FieldLabel>@L["DisplayName:AdminPassword"]</FieldLabel> </TextEdit>
<TextEdit Role="@TextRole.Password" @bind-text="@NewEntity.AdminPassword" /> </Field>
</Field> </Validation>
</EditForm> <Validation MessageLocalizer="@LH.Localize">
</ModalBody> <Field>
<ModalFooter> <FieldLabel>@L["DisplayName:AdminEmailAddress"]</FieldLabel>
<Button Color="Color.Secondary" Clicked="CloseCreateModalAsync">@L["Cancel"]</Button> <TextEdit Role="@TextRole.Email" @bind-Text="@NewEntity.AdminEmailAddress">
<Button form="TenantCreateForm" Color="Color.Primary" Clicked="CreateEntityAsync">@L["Save"]</Button> <Feedback>
</ModalFooter> <ValidationError />
</Feedback>
</TextEdit>
</Field>
</Validation>
<Validation MessageLocalizer="@LH.Localize">
<Field>
<FieldLabel>@L["DisplayName:AdminPassword"]</FieldLabel>
<TextEdit Role="@TextRole.Password" @bind-Text="@NewEntity.AdminPassword">
<Feedback>
<ValidationError />
</Feedback>
</TextEdit>
</Field>
</Validation>
</Validations>
</ModalBody>
<ModalFooter>
<Button Color="Color.Secondary" Clicked="CloseCreateModalAsync">@L["Cancel"]</Button>
<Button form="TenantCreateForm" Type="ButtonType.Submit" PreventDefaultOnSubmit="true" Color="Color.Primary" Clicked="CreateEntityAsync">@L["Save"]</Button>
</ModalFooter>
</Form>
</ModalContent> </ModalContent>
</Modal> </Modal>
} }
@ -99,23 +120,31 @@
{ {
<Modal @ref="EditModal"> <Modal @ref="EditModal">
<ModalBackdrop /> <ModalBackdrop />
<ModalContent IsCentered="true"> <ModalContent Centered="true">
<ModalHeader> <Form id="TenantEditForm">
<ModalTitle>@L["Edit"]</ModalTitle> <ModalHeader>
<CloseButton Clicked="CloseEditModalAsync" /> <ModalTitle>@L["Edit"]</ModalTitle>
</ModalHeader> <CloseButton Clicked="CloseEditModalAsync" />
<ModalBody> </ModalHeader>
<EditForm id="TenantEditForm" Model="@EditingEntity" OnValidSubmit="UpdateEntityAsync"> <ModalBody>
<Field> <Validations @ref="@EditValidationsRef" Model="@EditingEntity" ValidateOnLoad="false">
<FieldLabel>@L["TenantName"]</FieldLabel> <Validation MessageLocalizer="@LH.Localize">
<TextEdit @bind-text="@EditingEntity.Name" /> <Field>
</Field> <FieldLabel>@L["TenantName"]</FieldLabel>
</EditForm> <TextEdit @bind-Text="@EditingEntity.Name">
</ModalBody> <Feedback>
<ModalFooter> <ValidationError />
<Button Color="Color.Secondary" Clicked="CloseEditModalAsync">@L["Cancel"]</Button> </Feedback>
<Button form="TenantEditForm" Color="Color.Primary" Clicked="UpdateEntityAsync">@L["Save"]</Button> </TextEdit>
</ModalFooter> </Field>
</Validation>
</Validations>
</ModalBody>
<ModalFooter>
<Button Color="Color.Secondary" Clicked="CloseEditModalAsync">@L["Cancel"]</Button>
<Button form="TenantEditForm" Type="ButtonType.Submit" PreventDefaultOnSubmit="true" Color="Color.Primary" Clicked="UpdateEntityAsync">@L["Save"]</Button>
</ModalFooter>
</Form>
</ModalContent> </ModalContent>
</Modal> </Modal>
} }
@ -125,30 +154,36 @@
{ {
<Modal @ref="@ManageConnectionStringModal"> <Modal @ref="@ManageConnectionStringModal">
<ModalBackdrop /> <ModalBackdrop />
<ModalContent IsCentered="true"> <ModalContent Centered="true">
<ModalHeader> <Form id="ConnectionStringEditForm">
<ModalTitle>@L["ConnectionStrings"]</ModalTitle> <ModalHeader>
<CloseButton Clicked="CloseEditConnectionStringModal" /> <ModalTitle>@L["ConnectionStrings"]</ModalTitle>
</ModalHeader> <CloseButton Clicked="CloseEditConnectionStringModal" />
<ModalBody> </ModalHeader>
<EditForm id="ConnectionStringEditForm" Model="@TenantInfo" OnValidSubmit="UpdateConnectionStringAsync"> <ModalBody>
<Field> <Validations @ref="@ManageConnectionStringValidations" Model="@TenantInfo" ValidateOnLoad="false">
<FieldLabel>@L["DisplayName:DefaultConnectionString"]</FieldLabel> <Validation MessageLocalizer="@LH.Localize">
<Check TValue="bool" @bind-Checked="@TenantInfo.UseSharedDatabase" Cursor="@Cursor.Pointer" /> <Field>
</Field> <FieldLabel>@L["DisplayName:DefaultConnectionString"]</FieldLabel>
@if (!TenantInfo.UseSharedDatabase) <Check TValue="bool" @bind-Checked="@TenantInfo.UseSharedDatabase" Cursor="@Cursor.Pointer" />
{ </Field>
<Field> </Validation>
<FieldLabel>@L["DisplayName:DefaultConnectionString"]</FieldLabel> @if (!TenantInfo.UseSharedDatabase)
<TextEdit @bind-text="@TenantInfo.DefaultConnectionString" /> {
</Field> <Validation MessageLocalizer="@LH.Localize">
} <Field>
</EditForm> <FieldLabel>@L["DisplayName:DefaultConnectionString"]</FieldLabel>
</ModalBody> <TextEdit @bind-Text="@TenantInfo.DefaultConnectionString" />
<ModalFooter> </Field>
<Button Color="Color.Secondary" Clicked="CloseEditConnectionStringModal">@L["Cancel"]</Button> </Validation>
<Button form="ConnectionStringEditForm" Color="Color.Primary" Clicked="UpdateConnectionStringAsync">@L["Save"]</Button> }
</ModalFooter> </Validations>
</ModalBody>
<ModalFooter>
<Button Color="Color.Secondary" Clicked="CloseEditConnectionStringModal">@L["Cancel"]</Button>
<Button form="ConnectionStringEditForm" Type="ButtonType.Submit" PreventDefaultOnSubmit="true" Color="Color.Primary" Clicked="UpdateConnectionStringAsync">@L["Save"]</Button>
</ModalFooter>
</Form>
</ModalContent> </ModalContent>
</Modal> </Modal>
} }

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

@ -1,4 +1,5 @@
using System; using System;
using System.ComponentModel.DataAnnotations;
using System.Threading.Tasks; using System.Threading.Tasks;
using Blazorise; using Blazorise;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
@ -20,9 +21,10 @@ namespace Volo.Abp.TenantManagement.Blazor.Pages.TenantManagement
protected FeatureManagementModal FeatureManagementModal; protected FeatureManagementModal FeatureManagementModal;
protected Modal ManageConnectionStringModal; protected Modal ManageConnectionStringModal;
protected Validations ManageConnectionStringValidations;
protected TenantInfoModel TenantInfo; protected TenantInfoModel TenantInfo;
public TenantManagement() public TenantManagement()
{ {
LocalizationResource = typeof(AbpTenantManagementResource); LocalizationResource = typeof(AbpTenantManagementResource);
@ -36,7 +38,7 @@ namespace Volo.Abp.TenantManagement.Blazor.Pages.TenantManagement
TenantInfo = new TenantInfoModel(); TenantInfo = new TenantInfoModel();
} }
protected async override Task SetPermissionsAsync() protected async override Task SetPermissionsAsync()
{ {
await base.SetPermissionsAsync(); await base.SetPermissionsAsync();
@ -47,6 +49,8 @@ namespace Volo.Abp.TenantManagement.Blazor.Pages.TenantManagement
protected virtual async Task OpenEditConnectionStringModalAsync(Guid id) protected virtual async Task OpenEditConnectionStringModalAsync(Guid id)
{ {
ManageConnectionStringValidations.ClearAll();
var tenantConnectionString = await AppService.GetDefaultConnectionStringAsync(id); var tenantConnectionString = await AppService.GetDefaultConnectionStringAsync(id);
TenantInfo = new TenantInfoModel TenantInfo = new TenantInfoModel
@ -67,18 +71,21 @@ namespace Volo.Abp.TenantManagement.Blazor.Pages.TenantManagement
protected virtual async Task UpdateConnectionStringAsync() protected virtual async Task UpdateConnectionStringAsync()
{ {
await CheckPolicyAsync(ManageConnectionStringsPolicyName); if (ManageConnectionStringValidations.ValidateAll())
if (TenantInfo.UseSharedDatabase || TenantInfo.DefaultConnectionString.IsNullOrWhiteSpace())
{ {
await AppService.DeleteDefaultConnectionStringAsync(TenantInfo.Id); await CheckPolicyAsync(ManageConnectionStringsPolicyName);
if (TenantInfo.UseSharedDatabase || TenantInfo.DefaultConnectionString.IsNullOrWhiteSpace())
{
await AppService.DeleteDefaultConnectionStringAsync(TenantInfo.Id);
}
else
{
await AppService.UpdateDefaultConnectionStringAsync(TenantInfo.Id, TenantInfo.DefaultConnectionString);
}
ManageConnectionStringModal.Hide();
} }
else
{
await AppService.UpdateDefaultConnectionStringAsync(TenantInfo.Id, TenantInfo.DefaultConnectionString);
}
ManageConnectionStringModal.Hide();
} }
protected override string GetDeleteConfirmationMessage(TenantDto entity) protected override string GetDeleteConfirmationMessage(TenantDto entity)
@ -93,6 +100,7 @@ namespace Volo.Abp.TenantManagement.Blazor.Pages.TenantManagement
public bool UseSharedDatabase { get; set; } public bool UseSharedDatabase { get; set; }
[Required]
public string DefaultConnectionString { get; set; } public string DefaultConnectionString { get; set; }
} }
} }
Loading…
Cancel
Save