Browse Source

Refactor feature management modal to improve disabled state handling and update feature selection logic

pull/22628/head
maliming 1 year ago
parent
commit
7304a0555b
No known key found for this signature in database GPG Key ID: A646B9CB645ECEA4
  1. 63
      modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/FeatureManagementModal.cshtml
  2. 6
      modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/FeatureManagementModal.cshtml.cs

63
modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/FeatureManagementModal.cshtml

@ -45,23 +45,23 @@
@for (var j = 0; j < featureGroup.Features.Count; j++) @for (var j = 0; j < featureGroup.Features.Count; j++)
{ {
var feature = featureGroup.Features[j]; var feature = featureGroup.Features[j];
var disabled = Model.IsDisabled(feature);
<div class="mt-2"> <div class="mt-2">
<input type="text" abp-id-name="@Model.FeatureGroups[i].Features[j].IsDisabled" value="@(disabled.ToString())" hidden/>
<input type="text" abp-id-name="@Model.FeatureGroups[i].Features[j].Type" value="@feature.ValueType?.Name" hidden/> <input type="text" abp-id-name="@Model.FeatureGroups[i].Features[j].Type" value="@feature.ValueType?.Name" hidden/>
@if (feature.ValueType is ToggleStringValueType) @if (feature.ValueType is ToggleStringValueType)
{ {
<abp-input asp-for="@feature.Value" <abp-input asp-for="@feature.Value"
type="checkbox" type="checkbox"
class="d-inline" class="d-inline"
abp-id-name="@Model.FeatureGroups[i].Features[j].BoolValue" abp-id-name="@Model.FeatureGroups[i].Features[j].BoolValue"
label="@feature.DisplayName" label="@feature.DisplayName"
disabled="@Model.IsDisabled(feature)" disabled="disabled"
group-data-feature-name="@feature.Name" group-data-feature-name="@feature.Name"
group-data-parent-name="@(feature.ParentName ?? "")" group-data-parent-name="@(feature.ParentName ?? "")"
group-style="margin-inline-start: @(feature.Depth * 20)px"/> group-style="margin-inline-start: @(feature.Depth * 20)px"/>
if (feature.Description != null)
@if (feature.Description != null)
{ {
<div class="form-text" style="margin-inline-start: @(feature.Depth * 20)px">@feature.Description</div> <div class="form-text" style="margin-inline-start: @(feature.Depth * 20)px">@feature.Description</div>
} }
@ -69,20 +69,16 @@
@if (feature.ValueType is FreeTextStringValueType) @if (feature.ValueType is FreeTextStringValueType)
{ {
var type = "text"; var type = feature.ValueType.Validator is NumericValueValidator ? "number" : "text";
if(feature.ValueType.Validator is NumericValueValidator) <abp-input asp-for="@feature.Value"
{ label="@feature.DisplayName"
type = "number"; abp-id-name="@Model.FeatureGroups[i].Features[j].Value"
} type="@type"
<abp-input asp-for="@feature.Value" disabled="disabled"
label="@feature.DisplayName" group-data-feature-name="@feature.Name"
abp-id-name="@Model.FeatureGroups[i].Features[j].Value" group-data-parent-name="@(feature.ParentName ?? "")"
type="@type" group-style="margin-inline-start: @(feature.Depth * 25)px"/>
disabled="@Model.IsDisabled(feature)" if (feature.Description != null)
group-data-feature-name="@feature.Name"
group-data-parent-name="@(feature.ParentName ?? "")"
group-style="margin-inline-start: @(feature.Depth * 25)px"/>
@if (feature.Description != null)
{ {
<div class="form-text" style="margin-inline-start: @(feature.Depth * 25)px">@feature.Description</div> <div class="form-text" style="margin-inline-start: @(feature.Depth * 25)px">@feature.Description</div>
} }
@ -90,20 +86,13 @@
@if (feature.ValueType is SelectionStringValueType selectType) @if (feature.ValueType is SelectionStringValueType selectType)
{ {
var disabled = Model.IsDisabled(feature) ? "disabled" : "";
<div data-feature-name="@feature.Name" data-parent-name="@(feature.ParentName ?? "")" style="margin-inline-start: @(feature.Depth * 25)px" class="mb-3"> <div data-feature-name="@feature.Name" data-parent-name="@(feature.ParentName ?? "")" style="margin-inline-start: @(feature.Depth * 25)px" class="mb-3">
<label class="form-label" for="@feature.Name">@feature.DisplayName</label> <label class="form-label" for="@feature.Name">@feature.DisplayName</label>
<select id="@feature.Name" name="FeatureGroups[@i].Features[@j].Value" class="form-select" @(disabled) > <select id="@feature.Name" name="FeatureGroups[@i].Features[@j].Value" class="form-select" @(disabled ? "disabled" : "")>
@foreach (var item in selectType.ItemSource.Items) @foreach (var item in selectType.ItemSource.Items)
{ {
if (item.Value == feature.Value) var selected = item.Value == feature.Value ? "selected=\"selected\"" : "";
{ <!option value="@item.Value" @(selected) >@CreateHtmlLocalizer(item.DisplayText.ResourceName).GetString(item.DisplayText.Name) </!option>
<option value="@item.Value" selected="selected"> @CreateHtmlLocalizer(item.DisplayText.ResourceName).GetString(item.DisplayText.Name) </option>
}
else
{
<option value="@item.Value"> @CreateHtmlLocalizer(item.DisplayText.ResourceName).GetString(item.DisplayText.Name) </option>
}
} }
</select> </select>
@if (feature.Description != null) @if (feature.Description != null)
@ -112,8 +101,8 @@
} }
</div> </div>
} }
<input value="@feature.Name" abp-id-name="@Model.FeatureGroups[i].Features[j].Name" hidden/> <input value="@feature.Name" abp-id-name="@Model.FeatureGroups[i].Features[j].Name" hidden/>
</div> </div>
} }
</div> </div>

6
modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/FeatureManagementModal.cshtml.cs

@ -69,7 +69,7 @@ public class FeatureManagementModal : AbpPageModel
{ {
var features = new UpdateFeaturesDto var features = new UpdateFeaturesDto
{ {
Features = FeatureGroups.SelectMany(g => g.Features).Where(x => !x.Value.IsNullOrWhiteSpace() || x.BoolValue.HasValue).Select(f => new UpdateFeatureDto Features = FeatureGroups.SelectMany(g => g.Features).Where(x => !x.IsDisabled).Select(f => new UpdateFeatureDto
{ {
Name = f.Name, Name = f.Name,
Value = f.Type == nameof(ToggleStringValueType) ? f.BoolValue.ToString() : f.Value Value = f.Type == nameof(ToggleStringValueType) ? f.BoolValue.ToString() : f.Value
@ -97,11 +97,13 @@ public class FeatureManagementModal : AbpPageModel
public class FeatureViewModel public class FeatureViewModel
{ {
public bool IsDisabled { get; set; }
public string Name { get; set; } public string Name { get; set; }
public string Value { get; set; } public string Value { get; set; }
public bool? BoolValue { get; set; } public bool BoolValue { get; set; }
public string Type { get; set; } public string Type { get; set; }
} }

Loading…
Cancel
Save