@if (IsVisible) { } @code { [Parameter] public bool IsVisible { get; set; } [Parameter] public EventCallback IsVisibleChanged { get; set; } [Parameter] public bool RequireSitePicker { get; set; } [Parameter] public string ContextLabel { get; set; } = string.Empty; [Parameter] public int? SiteId { get; set; } [Parameter] public int? ParentAreaId { get; set; } [Parameter] public IEnumerable<(int Id, string Label)> SiteOptions { get; set; } = Array.Empty<(int, string)>(); [Parameter] public IEnumerable<(int Id, string Label, int SiteId)> ParentOptions { get; set; } = Array.Empty<(int, string, int)>(); [Parameter] public string? ErrorMessage { get; set; } [Parameter] public EventCallback<(int SiteId, int? ParentAreaId, string Name)> OnSubmit { get; set; } private bool _wasVisible; private string _name = string.Empty; private int _siteId; private int _parentAreaId; protected override void OnParametersSet() { if (IsVisible && !_wasVisible) { _name = string.Empty; _siteId = SiteId ?? 0; _parentAreaId = ParentAreaId ?? 0; } _wasVisible = IsVisible; } private bool SelectedSiteMatches((int Id, string Label, int SiteId) opt) => _siteId == 0 || opt.SiteId == _siteId; private async Task Close() => await IsVisibleChanged.InvokeAsync(false); private async Task Submit() { var effectiveSite = RequireSitePicker ? _siteId : (SiteId ?? 0); var effectiveParent = RequireSitePicker ? (_parentAreaId == 0 ? (int?)null : _parentAreaId) : ParentAreaId; await OnSubmit.InvokeAsync((effectiveSite, effectiveParent, _name.Trim())); } }