Files
lux/Lux.UI/Components/Pages/Vocabulary.razor.cs
T
Annamaria Sassi 19a01d258f Correzione warning
2026-06-11 12:17:08 +02:00

181 lines
5.5 KiB
C#

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<VocabolarioModel> FullVocab = new();
private bool isLoading = false;
#if false
private List<VocabolarioModel> FiltVocab = new();
private bool addNew = false;
private string langDef = "IT";
#endif
private List<LinguaModel> ListLingue = new();
private string SearchVal = "";
#endregion Private Fields
#region Private Properties
private string btnResetCss => string.IsNullOrEmpty(SearchVal) ? "btn-secondary" : "btn-primary";
#if false
[Inject]
private IVocabolarioService VService { get; set; } = null!;
#endif
#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();
}
/// <summary>
/// Imposto filtro da richiesta child obj
/// </summary>
/// <param name="newSearch"></param>
/// <returns></returns>
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<bool>())
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<bool, string> modalOpt = new Dictionary<bool, string>();
#endregion Private Methods
/// <summary>
/// Aggiunge i missing agli altri vocabolari
/// </summary>
/// <param name="srcLang"></param>
/// <returns></returns>
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<bool>())
return;
// FixMe: fare davero
List<string> listOther = new List<string>() { "EN" };
List<VocabolarioModel> 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<string>(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();
}
}
}