Skip to content

Commit 8a9748e

Browse files
authored
feat(CardUpload): support ValidateForm validate function (#7432)
* feat: 增加空集合验证样式 * refactor: 更正单词拼写错误 * feat: 增加验证逻辑 * fix: 修复空集合不报错问题 * refactor: 增加对 UploadFile 集合支持 * style: 更新样式 * chore: bump version 10.1.5-beta04
1 parent 67d4b2a commit 8a9748e

7 files changed

Lines changed: 70 additions & 12 deletions

File tree

src/BootstrapBlazor/BootstrapBlazor.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk.Razor">
22

33
<PropertyGroup>
4-
<Version>10.1.5-beta03</Version>
4+
<Version>10.1.5-beta04</Version>
55
</PropertyGroup>
66

77
<ItemGroup>

src/BootstrapBlazor/Components/Upload/AvatarUpload.razor.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -187,19 +187,19 @@ public override async Task ToggleMessage(IReadOnlyCollection<ValidationResult> r
187187

188188
ValidateModule ??= await LoadValidateModule();
189189

190-
var invalidItems = IsInValiadOnAddItem
190+
var invalidItems = IsInValidOnAddItem
191191
? [new { Id = AddId, _results.First().ErrorMessage }]
192192
: _results.Select(i => new { Id = i.MemberNames.FirstOrDefault(), i.ErrorMessage }).ToList();
193193

194-
var items = IsInValiadOnAddItem
194+
var items = IsInValidOnAddItem
195195
? [AddId]
196196
: Files.Select(i => i.ValidateId).ToList();
197197

198-
var addId = IsInValiadOnAddItem ? null : AddId;
198+
var addId = IsInValidOnAddItem ? null : AddId;
199199
await ValidateModule.InvokeVoidAsync("executeUpload", items, invalidItems, addId);
200200
}
201201

202-
private bool IsInValiadOnAddItem => Files.Count == 0 && _results.Count > 0;
202+
private bool IsInValidOnAddItem => Files.Count == 0 && _results.Count > 0;
203203

204204
/// <summary>
205205
/// <inheritdoc/>
@@ -238,7 +238,7 @@ protected override async ValueTask DisposeAsync(bool disposing)
238238

239239
if (ValidateModule != null)
240240
{
241-
var items = IsInValiadOnAddItem
241+
var items = IsInValidOnAddItem
242242
? [AddId]
243243
: Files.Select(i => i.ValidateId).ToList();
244244

src/BootstrapBlazor/Components/Upload/CardUpload.razor

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
}
1515
@foreach (var item in Files)
1616
{
17-
<div @key="@item" class="@GetItemClassString(item)">
17+
<div @key="@item" id="@item.ValidateId" class="@GetItemClassString(item)">
1818
<div class="upload-item-body">
1919
@if (IconTemplate != null)
2020
{
@@ -98,7 +98,7 @@
9898

9999
@code {
100100
RenderFragment RenderAdd =>
101-
@<div class="@CardItemClass">
101+
@<div id="@AddId" class="@CardItemClass">
102102
<i class="@AddIcon"></i>
103103
</div>;
104104
}

src/BootstrapBlazor/Components/Upload/CardUpload.razor.cs

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ public partial class CardUpload<TValue>
1818
.AddClass("is-valid", item is { Uploaded: true, Code: 0 })
1919
.AddClass("is-invalid", item.Code != 0)
2020
.Build();
21+
2122
private string? ItemClassString => CssBuilder.Default("upload-item")
2223
.AddClass("disabled", CanUpload() == false)
2324
.Build();
@@ -162,6 +163,54 @@ protected override async Task TriggerOnChanged(UploadFile file)
162163
await base.TriggerOnChanged(file);
163164
}
164165

166+
private IReadOnlyCollection<ValidationResult> _results = [];
167+
168+
/// <summary>
169+
/// <inheritdoc/>
170+
/// </summary>
171+
/// <param name="results"></param>
172+
public override async Task ToggleMessage(IReadOnlyCollection<ValidationResult> results)
173+
{
174+
_results = results;
175+
IsValid = results.Count == 0;
176+
177+
ValidateModule ??= await LoadValidateModule();
178+
179+
var invalidItems = IsInValidOnAddItem
180+
? [new { Id = AddId, _results.First().ErrorMessage }]
181+
: _results.Select(i => new { Id = i.MemberNames.FirstOrDefault(), i.ErrorMessage }).ToList();
182+
183+
var items = IsInValidOnAddItem
184+
? [AddId]
185+
: Files.Select(i => i.ValidateId).ToList();
186+
187+
var addId = IsInValidOnAddItem ? null : AddId;
188+
await ValidateModule.InvokeVoidAsync("executeUpload", items, invalidItems, addId);
189+
}
190+
191+
private bool IsInValidOnAddItem => Files.Count == 0 && _results.Count > 0;
192+
193+
/// <summary>
194+
/// <inheritdoc/>
195+
/// </summary>
196+
/// <returns></returns>
197+
protected override ValueTask ShowValidResult() => ValueTask.CompletedTask;
198+
199+
/// <summary>
200+
/// <inheritdoc/>
201+
/// </summary>
202+
/// <param name="validateId"></param>
203+
/// <returns></returns>
204+
protected override async ValueTask RemoveValidResult(string? validateId = null)
205+
{
206+
if (!string.IsNullOrEmpty(validateId))
207+
{
208+
await base.RemoveValidResult(validateId);
209+
}
210+
}
211+
212+
private string? AddId => $"{Id}_new";
213+
165214
private async Task OnCardFileDelete(UploadFile item)
166215
{
167216
await OnFileDelete(item);

src/BootstrapBlazor/Components/Upload/InputUpload.razor.scss

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@
119119
.upload .upload-body.is-avatar .upload-item:not(.is-form):not(.is-valid):not(.is-invalid):hover,
120120
.upload .upload-body.is-avatar .upload-item:not(.is-form).is-valid,
121121
.upload .upload-body.is-card .upload-item.is-valid,
122-
.upload .upload-body.is-card .upload-item:not(.disabled):hover {
122+
.upload .upload-body.is-card .upload-item:not(.disabled):not(.is-valid):not(.is-invalid):hover {
123123
border-color: var(--bb-upload-body-list-item-hover-color);
124124
}
125125

@@ -194,10 +194,14 @@
194194
display: block;
195195
}
196196

197-
.upload .upload-body.is-card .is-invalid .upload-item-body {
197+
.upload .upload-body.is-card .upload-item.is-invalid {
198198
border-color: var(--bs-danger);
199199
}
200200

201+
.upload .upload-body.is-card .upload-item.is-valid {
202+
border-color: var(--bs-success);
203+
}
204+
201205
.upload .upload-body.is-card .upload-item-body {
202206
border-radius: var(--bs-border-radius);
203207
width: var(--bb-upload-card-item-width);

src/BootstrapBlazor/Components/Upload/UploadBase.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,11 @@ protected async Task OnFileChange(InputFileChangeEventArgs args)
190190
await OnAllFileUploaded(items);
191191
}
192192

193-
if (ValueType.IsAssignableTo(typeof(IEnumerable<IBrowserFile>)))
193+
if (ValueType.IsAssignableTo(typeof(IEnumerable<UploadFile>)))
194+
{
195+
CurrentValue = (TValue)(object)items;
196+
}
197+
else if (ValueType.IsAssignableTo(typeof(IEnumerable<IBrowserFile>)))
194198
{
195199
CurrentValue = (TValue)(object)items.Select(f => f.File).ToList();
196200
}

src/BootstrapBlazor/Components/ValidateForm/ValidateForm.razor.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Licensed to the .NET Foundation under one or more agreements.
1+
// Licensed to the .NET Foundation under one or more agreements.
22
// The .NET Foundation licenses this file to you under the Apache 2.0 License
33
// See the LICENSE file in the project root for more information.
44
// Maintainer: Argo Zhang(argo@live.ca) Website: https://www.blazor.zone
@@ -508,6 +508,7 @@ private async Task ValidateAsync(IValidateComponent validator, ValidationContext
508508
else
509509
{
510510
// 未选择文件
511+
propertyValue = null;
511512
ValidateDataAnnotations(propertyValue, context, messages, pi);
512513
}
513514

0 commit comments

Comments
 (0)