Browse Source

Disable features if the value is not from the current provider.

pull/22628/head
maliming 10 months ago
parent
commit
fca2c99457
No known key found for this signature in database GPG Key ID: A646B9CB645ECEA4
  1. 4
      modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Components/FeatureManagementModal.razor
  2. 2
      modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/FeatureManager.cs
  3. 86
      modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/FeatureManagementModal.cshtml
  4. 10
      modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/FeatureManagementModal.cshtml.cs
  5. 14
      modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/feature-management-modal.css
  6. 2
      modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManager.cs

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

@ -57,7 +57,7 @@
var selectedValue = SelectionStringValues[feature.Name];
<Field Style="@GetFeatureStyles(feature)">
<FieldLabel>@feature.DisplayName</FieldLabel>
<Select TValue="string" SelectedValue="selectedValue" SelectedValueChanged="s => SelectionStringValues[feature.Name] = s">
<Select TValue="string" Disabled="disabled" SelectedValue="selectedValue" SelectedValueChanged="s => SelectionStringValues[feature.Name] = s">
@foreach (var item in items)
{
<SelectItem Value="@item.Value">
@ -75,7 +75,7 @@
if (feature.ValueType is ToggleStringValueType)
{
<Field Style="@GetFeatureStyles(feature)">
<Check TValue="bool" Checked="@ToggleValues[feature.Name]" CheckedChanged="@(async (v) => await OnSelectedValueChangedAsync(v, feature))">
<Check TValue="bool" Disabled="disabled" Checked="@ToggleValues[feature.Name]" CheckedChanged="@(async (v) => await OnSelectedValueChangedAsync(v, feature))">
@feature.DisplayName
</Check>
@if (feature.Description != null)

2
modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/FeatureManager.cs

@ -152,7 +152,7 @@ public class FeatureManager : IFeatureManager, ISingletonDependency
await using (await providers[0].HandleContextAsync(providerName, providerKey))
{
var fallbackValue = await GetOrNullInternalAsync(name, providers[1].Name, null);
if (fallbackValue.Value == value)
if (fallbackValue.Value.Equals(value, StringComparison.OrdinalIgnoreCase))
{
//Clear the value if it's same as it's fallback value
value = null;

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

@ -51,20 +51,21 @@
@if (feature.ValueType is ToggleStringValueType)
{
<abp-input asp-for="@feature.Value"
type="checkbox"
class="d-inline"
abp-id-name="@Model.FeatureGroups[i].Features[j].BoolValue"
label="@feature.DisplayName"
group-data-feature-name="@feature.Name"
group-data-parent-name="@(feature.ParentName ?? "")"
group-style="margin-inline-start: @(feature.Depth * 20)px"/>
@if (feature.Description != null)
{
<div class="form-text" style="margin-inline-start: @(feature.Depth * 20)px">@feature.Description</div>
}
<div class="@(Model.IsDisabled(feature) ? "disabled-container" : "")">
<abp-input asp-for="@feature.Value"
type="checkbox"
class="d-inline"
abp-id-name="@Model.FeatureGroups[i].Features[j].BoolValue"
label="@feature.DisplayName"
group-data-feature-name="@feature.Name"
group-data-parent-name="@(feature.ParentName ?? "")"
group-style="margin-inline-start: @(feature.Depth * 20)px"/>
@if (feature.Description != null)
{
<div class="form-text" style="margin-inline-start: @(feature.Depth * 20)px">@feature.Description</div>
}
</div>
}
@if (feature.ValueType is FreeTextStringValueType)
@ -74,42 +75,45 @@
{
type = "number";
}
<abp-input asp-for="@feature.Value"
label="@feature.DisplayName"
abp-id-name="@Model.FeatureGroups[i].Features[j].Value"
type="@type"
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="@(Model.IsDisabled(feature) ? "disabled-container" : "")">
<abp-input asp-for="@feature.Value"
label="@feature.DisplayName"
abp-id-name="@Model.FeatureGroups[i].Features[j].Value"
type="@type"
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>
}
@if (feature.ValueType is SelectionStringValueType selectType)
{
<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>
<div class="@(Model.IsDisabled(feature) ? "disabled-container" : "")">
<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>
<select id="@feature.Name" name="FeatureGroups[@i].Features[@j].Value" class="form-select">
@foreach (var item in selectType.ItemSource.Items)
{
if (item.Value == feature.Value)
{
<option value="@item.Value" selected="selected"> @CreateHtmlLocalizer(item.DisplayText.ResourceName).GetString(item.DisplayText.Name) </option>
}
else
<select id="@feature.Name" name="FeatureGroups[@i].Features[@j].Value" class="form-select">
@foreach (var item in selectType.ItemSource.Items)
{
<option value="@item.Value"> @CreateHtmlLocalizer(item.DisplayText.ResourceName).GetString(item.DisplayText.Name) </option>
if (item.Value == feature.Value)
{
<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>
@if (feature.Description != null)
{
<div class="form-text" style="margin-inline-start: @(feature.Depth * 25)px">@feature.Description</div>
}
</select>
@if (feature.Description != null)
{
<div class="form-text" style="margin-inline-start: @(feature.Depth * 25)px">@feature.Description</div>
}
</div>
</div>
}

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

@ -25,9 +25,9 @@ public class FeatureManagementModal : AbpPageModel
[HiddenInput]
[BindProperty(SupportsGet = true)]
public string ProviderKey { get; set; }
[HiddenInput]
[BindProperty(SupportsGet = true)]
[BindProperty(SupportsGet = true)]
public string ProviderKeyDisplayName { get; set; }
[BindProperty]
@ -85,6 +85,12 @@ public class FeatureManagementModal : AbpPageModel
return NoContent();
}
public bool IsDisabled(FeatureDto featureDto)
{
return featureDto.Provider.Name != ProviderName &&
featureDto.Provider.Name != DefaultValueFeatureValueProvider.ProviderName;
}
public class FeatureGroupViewModel
{
public List<FeatureViewModel> Features { get; set; }

14
modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/feature-management-modal.css

@ -5,4 +5,16 @@
.custom-scroll-container > .col-md-4 {
max-height: 500px;
}
}
.disabled-container {
pointer-events: none;
opacity: 0.5;
}
.disabled-container input,
.disabled-container select,
.disabled-container button {
background-color: #e9ecef;
color: #6c757d;
}

2
modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManager.cs

@ -136,7 +136,7 @@ public class SettingManager : ISettingManager, ISingletonDependency
if (providers.Count > 1 && !forceToSet && setting.IsInherited && value != null)
{
var fallbackValue = await GetOrNullInternalAsync(name, providers[1].Name, null);
if (fallbackValue == value)
if (fallbackValue.Equals(value, StringComparison.OrdinalIgnoreCase))
{
//Clear the value if it's same as it's fallback value
value = null;

Loading…
Cancel
Save