You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
202 lines
5.9 KiB
202 lines
5.9 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using AntDesign;
|
|
using JetBrains.Annotations;
|
|
using Microsoft.AspNetCore.Components;
|
|
using Microsoft.AspNetCore.Components.Web;
|
|
using Microsoft.Extensions.Localization;
|
|
using Microsoft.Extensions.Options;
|
|
using Volo.Abp.AspNetCore.Components.Messages;
|
|
using Volo.Abp.AspNetCore.Components.Web.Configuration;
|
|
using Volo.Abp.FeatureManagement;
|
|
using Volo.Abp.Features;
|
|
using Volo.Abp.Localization;
|
|
using Volo.Abp.Validation.StringValues;
|
|
|
|
namespace Lsw.Abp.FeatureManagement.Blazor.AntDesignUI.Components;
|
|
|
|
public partial class FeatureManagementModal
|
|
{
|
|
[Inject]
|
|
protected IFeatureAppService FeatureAppService { get; set; }
|
|
|
|
[Inject]
|
|
protected IUiMessageService UiMessageService { get; set; }
|
|
|
|
[Inject]
|
|
protected IStringLocalizerFactory HtmlLocalizerFactory { get; set; }
|
|
|
|
[Inject]
|
|
protected IOptions<AbpLocalizationOptions> LocalizationOptions { get; set; }
|
|
|
|
[Inject]
|
|
protected ICurrentApplicationConfigurationCacheResetService CurrentApplicationConfigurationCacheResetService { get; set; }
|
|
|
|
protected Modal Modal;
|
|
|
|
protected string ProviderName;
|
|
protected string ProviderKey;
|
|
|
|
protected List<FeatureGroupDto> Groups { get; set; }
|
|
|
|
protected Dictionary<string, bool> ToggleValues;
|
|
|
|
protected Dictionary<string, string> SelectionStringValues;
|
|
|
|
private bool _visible;
|
|
|
|
public virtual async Task OpenAsync([NotNull] string providerName, string providerKey = null)
|
|
{
|
|
try
|
|
{
|
|
ProviderName = providerName;
|
|
ProviderKey = providerKey;
|
|
|
|
ToggleValues = new Dictionary<string, bool>();
|
|
SelectionStringValues = new Dictionary<string, string>();
|
|
|
|
Groups = (await FeatureAppService.GetAsync(ProviderName, ProviderKey))?.Groups;
|
|
|
|
Groups ??= new List<FeatureGroupDto>();
|
|
|
|
foreach (var featureGroupDto in Groups)
|
|
{
|
|
foreach (var featureDto in featureGroupDto.Features)
|
|
{
|
|
if (featureDto.ValueType is ToggleStringValueType)
|
|
{
|
|
ToggleValues.Add(featureDto.Name, bool.Parse(featureDto.Value));
|
|
}
|
|
|
|
if (featureDto.ValueType is SelectionStringValueType)
|
|
{
|
|
SelectionStringValues.Add(featureDto.Name, featureDto.Value);
|
|
}
|
|
}
|
|
}
|
|
_visible = true;
|
|
await InvokeAsync(StateHasChanged);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
await HandleErrorAsync(ex);
|
|
}
|
|
}
|
|
|
|
public virtual void CloseModal()
|
|
{
|
|
_visible = false;
|
|
}
|
|
|
|
protected virtual async Task SaveAsync()
|
|
{
|
|
try
|
|
{
|
|
var features = new UpdateFeaturesDto
|
|
{
|
|
Features = Groups.SelectMany(g => g.Features).Select(f => new UpdateFeatureDto
|
|
{
|
|
Name = f.Name,
|
|
Value = f.ValueType is ToggleStringValueType ? ToggleValues[f.Name].ToString() :
|
|
f.ValueType is SelectionStringValueType ? SelectionStringValues[f.Name] : f.Value
|
|
}).ToList()
|
|
};
|
|
|
|
await FeatureAppService.UpdateAsync(ProviderName, ProviderKey, features);
|
|
|
|
await CurrentApplicationConfigurationCacheResetService.ResetAsync();
|
|
|
|
_visible = false;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
await HandleErrorAsync(ex);
|
|
}
|
|
}
|
|
|
|
protected virtual string GetNormalizedGroupName(string name)
|
|
{
|
|
return "FeatureGroup_" + name.Replace(".", "_");
|
|
}
|
|
|
|
protected virtual string GetFeatureStyles(FeatureDto feature)
|
|
{
|
|
return $"margin-left: {feature.Depth * 20}px; margin-top: 10px";
|
|
}
|
|
|
|
protected virtual bool IsDisabled(string providerName)
|
|
{
|
|
return providerName != ProviderName && providerName != DefaultValueFeatureValueProvider.ProviderName;
|
|
}
|
|
|
|
protected virtual async Task OnFeatureValueChangedAsync(string value, FeatureDto feature)
|
|
{
|
|
if (feature?.ValueType?.Validator.IsValid(value) == true)
|
|
{
|
|
feature.Value = value;
|
|
}
|
|
else
|
|
{
|
|
await UiMessageService.Warn(L["Volo.Abp.FeatureManagement:InvalidFeatureValue", feature.DisplayName]);
|
|
}
|
|
}
|
|
|
|
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)
|
|
{
|
|
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)
|
|
{
|
|
return StringLocalizerFactory.CreateByResourceNameOrNull(resourceName) ??
|
|
StringLocalizerFactory.CreateDefaultOrNull();
|
|
}
|
|
}
|
|
|