using eNavigator.Routes; using MarketData.MarketDataModel; using MarketData.Service; using MarketData.Utils; using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components.Authorization; using Microsoft.JSInterop; using MudBlazor; namespace eNavigator.Pages { public partial class Headlines { [Inject] private NavigationManager NavigationManager { get; set; } = default!; [Inject] private AuthenticationStateProvider authenticationStateProvider { get; set; } = default; [Inject] private IJSRuntime JSRuntime { get; set; } = default; public bool IsBusy { get; set; } = false; public String BusyMessage { get; set;} = ""; public List HeadlinesCollection { get; set;} = new List(); public List AvailableDates { get; set;} = new List(); public DateTime SelectedDate { get; set; } = Utility.Epoch; private int selectedRowNumber = -1; private MudTable mudTable; protected override async Task OnInitializedAsync() { await base.OnInitializedAsync(); AuthenticationState authenticationState = await authenticationStateProvider.GetAuthenticationStateAsync(); if(!authenticationState.User.Identity.IsAuthenticated) { NavigationManager.NavigateTo(PageRoute.Login); return; } await LoadAvailableHeadlineDates(); SelectedDate = AvailableDates.Count()>0 ? AvailableDates[0] : SelectedDate; await LoadHeadlines(SelectedDate); StateHasChanged(); Task.Run(async () => await Task.Yield()).GetAwaiter(); } private async Task OnValueChanged() { await LoadHeadlines(SelectedDate); } private async Task LoadHeadlines(DateTime headlineDate) { BusyMessage = $"Loading Headlines for {headlineDate.ToShortDateString()}..."; IsBusy=true; ServiceResult serviceResult = await marketDataServiceClient.GetHeadlines(headlineDate); if(!serviceResult.Success) { DisplayToast("Error contacting server, could not load latest headlines."); return; } HeadlinesCollection = (serviceResult.ContextSpecificResult as List); DisplayToast($"Loaded {HeadlinesCollection.Count} headlines for {headlineDate.ToShortDateString()} in {Utility.FormatNumber(serviceResult.ElapsedTimeMS,0,true)}(ms)."); IsBusy = false; } private async Task LoadAvailableHeadlineDates() { BusyMessage = "Loading Available Headline Dates..."; IsBusy=true; ServiceResult serviceResult = await marketDataServiceClient.GetHeadlineDates(); IsBusy = false; if(!serviceResult.Success) { DisplayToast("Error contacting server, could not load headline dates."); return; } List availableDates = (serviceResult.ContextSpecificResult as List); availableDates = availableDates.Take(30).ToList(); for(int index=0;index DateTime.Parse(x)).ToList(); IsBusy = false; DisplayToast($"Loaded {AvailableDates.Count} headline dates in {Utility.FormatNumber(serviceResult.ElapsedTimeMS,0,true)}(ms)."); } protected void RowClickEvent(TableRowClickEventArgs tableRowClickEventArgs) { JSRuntime.InvokeAsync("open", $"https://www.google.com/search?q="+Uri.EscapeDataString(tableRowClickEventArgs.Item.Entry)); } protected async Task RefreshClicked() { SelectedDate = AvailableDates.Count()>0 ? AvailableDates[0] : SelectedDate; await LoadHeadlines(SelectedDate); StateHasChanged(); Task.Run(async () => await Task.Yield()).GetAwaiter(); } protected string SelectedRowClassFunc(Headline headline, int rowNumber) { if (selectedRowNumber == rowNumber) { selectedRowNumber = -1; return string.Empty; } else if (mudTable.SelectedItem != null && mudTable.SelectedItem.Equals(headline)) { selectedRowNumber = rowNumber; return "selected"; } else { return string.Empty; } } private void DisplayToast(String message) { snackbarService.Add(new MarkupString($"
  • {message}
")); } } }