using Microsoft.AspNetCore.Components; using Microsoft.JSInterop; using MP.FileData.DatabaseModels; using MP.Prog.Data; using NLog; using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; namespace MP.Prog.Pages { public partial class Archive : ComponentBase, IDisposable { #region Private Fields private static NLog.Logger Log = LogManager.GetCurrentClassLogger(); private FileModel currRecord = null; private List ListRecords; private List MacList; private List TagList; #endregion Private Fields #region Protected Fields protected string _SearchTag; protected string defTag = ""; protected int totalCount = 0; #endregion Protected Fields #region Private Properties private int currPage { get { return AppMService.File_Filter.PageNum; } set { AppMService.File_Filter.PageNum = value; } } private bool isLoading { get; set; } = false; private int numRecord { get { return AppMService.File_Filter.PageSize; } set { AppMService.File_Filter.PageSize = value; } } private bool OnlyActive { get { bool answ = false; if (AppMService.File_Filter != null) { answ = AppMService.File_Filter.OnlyActive; } return answ; } set { if (!AppMService.File_Filter.OnlyActive.Equals(value)) { AppMService.File_Filter.OnlyActive = value; var pUpd = Task.Run(async () => { await AsyncReload(); }); pUpd.Wait(); } } } private bool OnlyMod { get { bool answ = false; if (AppMService.File_Filter != null) { answ = AppMService.File_Filter.OnlyMod; } return answ; } set { if (!AppMService.File_Filter.OnlyMod.Equals(value)) { AppMService.File_Filter.OnlyMod = value; var pUpd = Task.Run(async () => { await AsyncReload(); }); pUpd.Wait(); } } } private string SelIdxMacc { get { string answ = ""; if (AppMService.File_Filter != null) { answ = AppMService.File_Filter.IdxMacchina; } return answ; } set { if (!AppMService.File_Filter.IdxMacchina.Equals(value)) { AppMService.File_Filter.IdxMacchina = value; var pUpd = Task.Run(async () => { await AsyncReload(); }); pUpd.Wait(); } } } #endregion Private Properties #region Protected Properties [Inject] protected MessageService AppMService { get; set; } [Inject] protected FileArchDataService DataService { get; set; } [Inject] protected IJSRuntime JSRuntime { get; set; } [Inject] protected NavigationManager NavManager { get; set; } protected string SearchTag { get { return _SearchTag; } set { _SearchTag = value; // se son > 3 char... debounce... if (string.IsNullOrEmpty(value)) { _SearchTag = defTag; } if (value.Length >= defTag.Length) { var pUpd = Task.Run(async () => { TagList = await DataService.TagGetFilt(SearchTag); }); pUpd.Wait(); } isLoading = false; } } #endregion Protected Properties #region Private Methods private string cssActive(bool active) { string answ = active ? "text-dark" : "text-secondary textStriked"; return answ; } private string cssStatusByCod(FileData.FileState currStatus) { string answ = "badge"; switch (currStatus) { case FileData.FileState.Changed: answ += " badge-warning"; break; case FileData.FileState.Deleted: answ += " badge-danger"; break; case FileData.FileState.Ok: answ += " badge-success"; break; case FileData.FileState.ND: default: answ += " badge-light"; break; } return answ; } #endregion Private Methods #region Protected Methods protected async Task AsyncReload() { isLoading = true; currRecord = null; ListRecords = null; await ReloadData(); isLoading = false; } protected void Edit(FileModel selRecord) { // rileggo dal DB il record corrente... var pUpd = Task.Run(async () => currRecord = await DataService.FileGetByKey(selRecord.FileId)); pUpd.Wait(); } protected async Task ForceCheck(int numDays) { currRecord = null; ListRecords = null; // importante altrimenti NON mostra update UI await Task.Delay(1); //AppMService.File_Filter = SelectData.Init(5, 10); var numCheck = await DataService.updateAllArchive(numDays, false); await ReloadAllData(); await Task.Delay(1); await RefreshDisplayLoading(); } protected override async Task OnInitializedAsync() { SearchTag = defTag; AppMService.ShowSearch = false; AppMService.PageName = "Archivio File Programmi"; AppMService.PageIcon = "fas fa-folder pr-2"; AppMService.EA_SearchUpdated += OnSeachUpdated; await ReloadAllData(); isLoading = false; } protected async Task PagerReloadNum(int newNum) { numRecord = newNum; await ReloadData(); isLoading = false; } protected async Task PagerReloadPage(int newNum) { currPage = newNum; await ReloadData(); isLoading = false; } protected async Task RefreshDisplayLoading() { await Task.Delay(1); isLoading = false; } protected async Task ReloadAllData() { isLoading = true; MacList = await DataService.MacchineGetAll(); SelIdxMacc = "0"; SearchTag = defTag; TagList = await DataService.TagGetFilt(SearchTag); await ReloadData(); } protected async Task ReloadData() { isLoading = true; // importante altrimenti NON mostra update UI await Task.Delay(1); totalCount = await DataService.FileCountFilt(AppMService.File_Filter); //SearchRecords = await DataService.FileGetFilt(AppMService.File_Filter); //// faccio paginazione SOLO NELLA DECINA attuale... (quindi non tutte le pagine ma solo subset) //ListRecords = SearchRecords.Skip(numRecord * (currPage % 10 - 1)).Take(numRecord).ToList(); ListRecords = await DataService.FileGetFilt(AppMService.File_Filter); } protected void ResetData() { DataService.rollBackEdit(currRecord); currRecord = null; } protected async Task ResetFilter() { currRecord = null; ListRecords = null; AppMService.File_Filter = SelectData.Init(5, 10); SearchTag = defTag; await ReloadAllData(); isLoading = false; } protected void ResetSearchTag() { SearchTag = defTag; } protected void Select(FileModel selRecord) { // applico filtro da selezione currRecord = selRecord; } protected async Task UpdateData() { currRecord = null; DataService.ResetController(); await ReloadData(); } #endregion Protected Methods #region Public Methods public string checkSelect(int FileId) { string answ = ""; if (currRecord != null) { try { answ = (currRecord.FileId == FileId) ? "table-info" : ""; } catch { } } return answ; } public void Dispose() { AppMService.EA_SearchUpdated -= OnSeachUpdated; } public async void OnSeachUpdated() { await InvokeAsync(() => { Task task = UpdateData(); StateHasChanged(); }); } #endregion Public Methods } }