using EgwCoreLib.Lux.Data.DbModel.Admin; using EgwCoreLib.Razor; namespace Lux.UI.Components.Pages { public partial class Vocabulary { #region Protected Methods protected override Task OnInitializedAsync() { return ReloadDataAsync(); } #endregion Protected Methods #region Private Fields private VocabolarioModel? currRec = null; private List FullVocab = new(); private bool isLoading = false; private List ListLingue = new(); private string SearchVal = ""; #endregion Private Fields #region Private Properties private string btnResetCss => string.IsNullOrEmpty(SearchVal) ? "btn-secondary" : "btn-primary"; #endregion Private Properties #region Private Methods private void DoAddNew() { currRec = new(); } private void DoCancel() { currRec = null; } private async Task DoSave() { if (currRec != null) { // genero 1 rec x ogni LangSel var listNew = ListLingue.Select(x => new VocabolarioModel() { Lingua = x.Lingua, Lemma = currRec.Lemma, Traduzione = currRec.Traduzione }).ToList(); // salvo await VService.UpsertManyAsync(listNew); } currRec = null; //rileggo await ReloadDataAsync(); } private async Task ReloadDataAsync() { isLoading = true; ListLingue = await VService.ListLingueAsync(); FullVocab = await VService.GetAllAsync(); isLoading = false; } private void ResetSearch() { SearchVal = ""; } private async Task UpdateRec(VocabolarioModel updRec) { await VService.UpsertAsync(updRec); await ReloadDataAsync(); } /// /// Imposto filtro da richiesta child obj /// /// /// private void DoFilt(string newSearch) { SearchVal = newSearch; } private async Task DoCloneLang(string origLang) { mTitle = "Attenzione"; mMessage = "Sicuro di voler duplicare il vocabolario della LangSel selezionata?\n" + $"Sorgente: {origLang}"; mMode = BootstrapModal.ModalMode.Confirm; modalOpt = new(); modalOpt.Add(true, "Si"); modalOpt.Add(false, "No"); if (!await Modal!.ShowAsync()) return; // dovrebbe chiedere nuova LangSel... string destLang = "FR"; // ora duplica... await VService.CloneAsync(origLang, destLang); await ReloadDataAsync(); } private BootstrapModal Modal = new(); private string mTitle = ""; private string mMessage = ""; private BootstrapModal.ModalMode mMode = BootstrapModal.ModalMode.ND; private Dictionary modalOpt = new Dictionary(); #endregion Private Methods /// /// Aggiunge i missing agli altri vocabolari /// /// /// private async Task DoFixMissing(string srcLang) { mTitle = "Attenzione"; mMessage = $"Confermi di voler inserire i valori mancanti negli altri dizionari di lingua?\n" + $"Sorgente: {srcLang}"; mMode = BootstrapModal.ModalMode.Confirm; modalOpt = new(); modalOpt.Add(true, "Si"); modalOpt.Add(false, "No"); if (!await Modal!.ShowAsync()) return; // FixMe: fare davero List listOther = new List() { "EN" }; List rec2ins = new(); // prendo l'elenco lingua src... FIX IT var listSrc = FullVocab.Where(x => x.Lingua == srcLang).ToList(); // prendo elenco altre lingue foreach (var otherLang in listOther) { var listDest = FullVocab.Where(x => x.Lingua == otherLang).ToList(); // hastSet lemmi presenti var destLemmas = new HashSet(listDest.Select(x => x.Lemma)); var missing = listSrc .Where(x => !destLemmas.Contains(x.Lemma)) .ToList(); var projected = missing .Select(x => new VocabolarioModel { Lemma = x.Lemma, Lingua = otherLang, Traduzione = x.Traduzione }) .ToList(); // aggiungo a lista! rec2ins.AddRange(projected); } // ora chiamo update many await VService.UpsertManyAsync(rec2ins); // rileggo await ReloadDataAsync(); } } }