Cascade select/deselect feature checkboxs.

Resolve #9200
pull/9226/head
maliming 4 years ago
parent 42966c1125
commit b968d873fc

@ -29,7 +29,7 @@
{
<TabPanel Name="@GetNormalizedGroupName(group.Name)">
<h4>@group.DisplayName</h4>
<hr class="mt-2 mb-3"/>
@foreach (var feature in group.Features)
{
var disabled = IsDisabled(feature.Provider.Name);
@ -40,7 +40,8 @@
<FieldLabel>@feature.DisplayName</FieldLabel>
<TextEdit Disabled="@disabled"
Text="@feature.Value"
TextChanged="@(async(v) => await OnFeatureValueChangedAsync(v, feature))" />
TextChanged="@(async(v) => await OnFeatureValueChangedAsync(v, feature))"
Style="@GetFeatureStyles(feature)" />
@if (feature.Description != null)
{
<span>@feature.Description</span>
@ -52,7 +53,7 @@
{
var items = ((SelectionStringValueType)feature.ValueType).ItemSource.Items;
<Field>
<Field Style="@GetFeatureStyles(feature)">
<FieldLabel>@feature.DisplayName</FieldLabel>
<Select TValue="string"
@bind-SelectedValue="@SelectionStringValues[feature.Name]">
@ -69,7 +70,8 @@
if (feature.ValueType is ToggleStringValueType)
{
<Field>
<Check TValue="bool" @bind-Checked="@ToggleValues[feature.Name]">@feature.DisplayName</Check>
<Check
TValue="bool" Checked="@ToggleValues[feature.Name]" CheckedChanged="@(async(v) => await OnSelectedValueChangedAsync(v, feature))" Style="@GetFeatureStyles(feature)">@feature.DisplayName</Check>
</Field>
}
}

@ -109,6 +109,11 @@ namespace Volo.Abp.FeatureManagement.Blazor.Components
return "FeatureGroup_" + name.Replace(".", "_");
}
protected virtual string GetFeatureStyles(FeatureDto feature)
{
return $"margin-left: {feature.Depth * 20}px";
}
protected virtual bool IsDisabled(string providerName)
{
return providerName != ProviderName && providerName != DefaultValueFeatureValueProvider.ProviderName;
@ -126,9 +131,55 @@ namespace Volo.Abp.FeatureManagement.Blazor.Components
}
}
protected virtual void SelectedValueChanged(string featureName, string value)
protected virtual Task OnSelectedValueChangedAsync(bool value, FeatureDto feature)
{
ToggleValues[feature.Name] = value;
if (value)
{
CheckParents(feature.ParentName);
}
else
{
UncheckChildren(feature.Name);
}
return Task.CompletedTask;
}
protected virtual void CheckParents(string parentName)
{
SelectionStringValues[featureName] = value;
if (parentName.IsNullOrWhiteSpace())
{
return;
}
foreach (var featureGroupDto in Groups)
{
foreach (var featureDto in featureGroupDto.Features)
{
if (featureDto.Name == parentName && ToggleValues.ContainsKey(featureDto.Name))
{
ToggleValues[featureDto.Name] = true;
CheckParents(featureDto.ParentName);
}
}
}
}
protected virtual void UncheckChildren(string featureName)
{
foreach (var featureGroupDto in Groups)
{
foreach (var featureDto in featureGroupDto.Features)
{
if (featureDto.ParentName == featureName && ToggleValues.ContainsKey(featureDto.Name))
{
ToggleValues[featureDto.Name] = false;
UncheckChildren(featureDto.Name);
}
}
}
}
protected virtual IStringLocalizer CreateStringLocalizer(string resourceName)

Loading…
Cancel
Save