@if (!Scopes.Any())
{
}
@foreach (var scope in Scopes)
{
}
@code {
[Parameter] public IEnumerable Values { get; set; }
[Parameter] public EventCallback> ValuesChanged { get; set; }
List Scopes = new();
protected override void OnParametersSet()
{
var incoming = (Values ?? Enumerable.Empty()).ToList();
// Only rebuild local state when the incoming values actually differ. Without
// this guard, the round-trip caused by our own ValuesChanged would clobber
// in-progress edits on every re-render.
if (!incoming.SequenceEqual(Scopes.Select(s => s.Name)))
Scopes = incoming.Select(v => new ExternalProviderScope { Name = v }).ToList();
}
async Task OnScopeChanged(ExternalProviderScope scope, string value)
{
scope.Name = value;
await Update();
}
async Task Add()
{
Scopes.Add(new ExternalProviderScope());
await Update();
}
async Task Remove(ExternalProviderScope scope)
{
Scopes.Remove(scope);
await Update();
}
async Task Update()
{
if (ValuesChanged.HasDelegate)
await ValuesChanged.InvokeAsync(Scopes.Select(s => s.Name).ToList());
}
}