@implements IDisposable; @inject ISearchService searchService @inject IJSRuntime jsRuntime @inject NavigationManager navigationManager @if (searchService.IsLoaded() && searchService.IsVisible) {
} @code { private ElementReference searchBox; private string SearchText { get; set; } = ""; protected override void OnInitialized() { searchService.Subscribe(OnSearchChanged); } private System.Threading.Timer timer = null!; private void OnSearchChanged() { if (searchService.IsVisible) { timer = new System.Threading.Timer(_ => { jsRuntime.InvokeVoidAsync("SetFocusToElement", "search-input-box"); InvokeAsync(StateHasChanged); }, null, 1, 1); } } public void Dispose() { searchService.Unsubscribe(OnSearchChanged); } public void CloseDialog() { searchService.Hide(); } public void NavigateTo(string url) { if (url.Contains("#")) { navigationManager.NavigateTo(url, navigationManager.Uri.Split("#").First().Contains(url.Split("#").First())); } else { navigationManager.NavigateTo(url); } } private void SearchChanged(ChangeEventArgs obj) { SearchText = obj.Value!.ToString()!; } private void OnSearch(SearchPointModel searchPoint) { NavigateTo(searchPoint.Href); searchService.Hide(); } }