@* * dbMango * * Copyright 2025 Deutsche Bank AG * SPDX-License-Identifier: Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *@ 
@if (string.IsNullOrWhiteSpace(Value.Db)) { } else { }
@code { [CascadingParameter] public IModalService Modal { get; set; } = null!; [Parameter] public string Name { get; set; } = $"newRole{++_count}"; [Parameter] public RoleInfoModel Value { get => field; set { if (field == value) return; field = value; UpdateSelectable(); } } = new(); [Parameter] public List AllRoles { get; set { if (field == value) return; field = value; UpdateSelectable(); } } = []; [Parameter] public List AllActions { get; set { if (field == value) return; field = value; UpdateSelectable(); } } = []; [Parameter] public List AllDatabases { get; set; } = []; [Parameter] public bool IsEnabled { get; set; } = true; [Parameter] public bool IsNew { get; set; } private static int _count; private EditContext EditContext => _editContext!; private EditContext? _editContext; public class SelectableString(string name, bool isSelected, Action update) { public override string ToString() => $"[{(IsSelected ? "X" : " ")}] {Name} {Db}"; public string Name { get; } = name; public string Db { get; init; } = string.Empty; public bool IsSelected { get; set { if (field == value) return; field = value; update(this, field); } } = isSelected; } private List SelectableActions { get; set; } = []; private PrivilegeModel SelectedPrivilege { get; set { field = value; UpdateSelectable(); } } = new(); protected override void OnInitialized() { _editContext = new(this); } private void UpdateSelectable() { SelectableActions = AllActions .Select(x => new SelectableString ( x, SelectedPrivilege.Actions.Contains(x), UpdateAllowedActions )) .ToList(); InvokeAsync(StateHasChanged); } private void UpdateAllowedActions(SelectableString name, bool isSelected) { if (isSelected) { if (!SelectedPrivilege.Actions.Contains(name.Name)) SelectedPrivilege.Actions.Add(name.Name); } else { SelectedPrivilege.Actions.Remove(name.Name); } } private async Task SelectedPrivilegeChanged((dynamic row, string col) arg) { if (arg.row is not PrivilegeModel privilege) return; SelectedPrivilege = privilege; await InvokeAsync(StateHasChanged); } private Task AddPrivileges() { var newPrivilege = new PrivilegeModel(); Value.Privileges.Add(newPrivilege); SelectedPrivilege = newPrivilege; return InvokeAsync(StateHasChanged); } private Task DeletePrivileges() { Value.Privileges.Remove(SelectedPrivilege); SelectedPrivilege = Value.Privileges.FirstOrDefault() ?? new PrivilegeModel(); return InvokeAsync(StateHasChanged); } }