Fix x evitare doppia chiamata iniziale

This commit is contained in:
Samuele Locatelli
2025-10-29 16:19:24 +01:00
parent 86fe130edf
commit 1525dd1da1
3 changed files with 72 additions and 43 deletions
+64 -41
View File
@@ -28,7 +28,6 @@ namespace Test.UI.Components.Pages
#region Public Methods
public void Dispose()
{
DLService.PipeSvg.EA_NewMessage -= PipeSvg_EA_NewMessage;
@@ -45,11 +44,11 @@ namespace Test.UI.Components.Pages
/// </summary>
protected LivePayload CurrData = new LivePayload();
protected string prevJwd = "";
protected string currJwd = "...";
protected Dictionary<string, string> m_CurrArgs = new Dictionary<string, string>();
protected Dictionary<int, string> currGroupShape = new Dictionary<int, string>();
protected Dictionary<int, string> currHwOption = new Dictionary<int, string>();
protected string currJwd = "...";
protected Dictionary<string, string> m_CurrArgs = new Dictionary<string, string>();
protected string prevJwd = "";
/// <summary>
/// Configurazione elenchi anagrafiche
@@ -123,6 +122,17 @@ namespace Test.UI.Components.Pages
#region Protected Methods
protected override void OnAfterRender(bool firstRender)
{
if (firstRender)
{
// This only runs once the interactive circuit is established
Console.WriteLine("Now interactive!");
// JS interop or data fetches go here
isInteractive = true;
}
}
protected override async Task OnInitializedAsync()
{
ConfInit();
@@ -182,8 +192,14 @@ namespace Test.UI.Components.Pages
private Hardware hardwareMassUpdate;
private string hwOptionChannel = "";
private string imgBasePath = "";
/// <summary>
/// Semaforo x definire se sia già in modalità ionterattiva o di prerendering
/// </summary>
private bool isInteractive = false;
private string materialMassUpdate;
private string outClose = "";
@@ -192,10 +208,8 @@ namespace Test.UI.Components.Pages
private string profileMassUpdate;
private string svgChannel = "";
private string shapeChannel = "";
private string hwOptionChannel = "";
private string svgChannel = "";
private string windowUid = "CurrWindow";
#endregion Private Fields
@@ -223,46 +237,36 @@ namespace Test.UI.Components.Pages
hwOptionChannel = Config.GetValue<string>("ServerConf:HwOptChannel") ?? "";
}
/// <summary>
/// Esecuzione richiesta
/// </summary>
/// <param name="CurrArgs"></param>
/// <returns></returns>
private async Task ExecRequest(Dictionary<string, string> CurrArgs)
{
outClose = "";
outSave = "";
// verifico se contiene JWD, lo aggiorno
if (CurrArgs.ContainsKey("Jwd"))
// Proseguo solo se sono in interattivo (NO prerender pagina)
if (isInteractive)
{
currJwd = CurrArgs["Jwd"];
CurrData.CurrJwd = currJwd;
}
// se il SSE variato --> invio
if (!currJwd.Equals(prevJwd) || !EgwCoreLib.Lux.Core.DictUtils.DictAreEqual(m_CurrArgs, CurrArgs))
{
m_CurrArgs = CurrArgs;
prevJwd = currJwd;
CalcRequestDTO calcRequestDTO = new CalcRequestDTO();
calcRequestDTO.EnvType = EgwMultiEngineManager.Data.Constants.EXECENVIRONMENTS.WINDOW;
calcRequestDTO.DictExec = m_CurrArgs;
// chiamo la chiamata POST alla API, che manda la richiesta via REDIS
await ICService.CallRestPost($"{apiUrl}/{GenericBasePath}", $"{calcTag}/{CalcUid}", calcRequestDTO);
}
}
private async void PipeShape_EA_NewMessage(object? sender, EventArgs e)
{
// aggiorno visualizzazione
PubSubEventArgs currArgs = (PubSubEventArgs)e;
// conversione on-the-fly SVG da mostrare
if (!string.IsNullOrEmpty(currArgs.newMessage) && currArgs.newMessage.Length > 2)
{
if (currArgs.msgUid.StartsWith($"{shapeChannel}:{windowUid}"))
outClose = "";
outSave = "";
// verifico se contiene JWD, lo aggiorno
if (CurrArgs.ContainsKey("Jwd"))
{
// deserializzo il dizionario delle risposte...
var rawDict = JsonConvert.DeserializeObject<Dictionary<int, string>>(currArgs.newMessage);
currGroupShape = rawDict ?? new Dictionary<int, string>();
CurrData.DictShape = currGroupShape;
currJwd = CurrArgs["Jwd"];
CurrData.CurrJwd = currJwd;
}
// se il SSE variato --> invio
if (!currJwd.Equals(prevJwd) || !EgwCoreLib.Lux.Core.DictUtils.DictAreEqual(m_CurrArgs, CurrArgs))
{
m_CurrArgs = CurrArgs;
prevJwd = currJwd;
CalcRequestDTO calcRequestDTO = new CalcRequestDTO();
calcRequestDTO.EnvType = EgwMultiEngineManager.Data.Constants.EXECENVIRONMENTS.WINDOW;
calcRequestDTO.DictExec = m_CurrArgs;
// chiamo la chiamata POST alla API, che manda la richiesta via REDIS
await ICService.CallRestPost($"{apiUrl}/{GenericBasePath}", $"{calcTag}/{CalcUid}", calcRequestDTO);
}
await InvokeAsync(StateHasChanged);
}
await Task.Delay(1);
}
private async void PipeHwOption_EA_NewMessage(object? sender, EventArgs e)
@@ -306,6 +310,25 @@ namespace Test.UI.Components.Pages
await Task.Delay(1);
}
private async void PipeShape_EA_NewMessage(object? sender, EventArgs e)
{
// aggiorno visualizzazione
PubSubEventArgs currArgs = (PubSubEventArgs)e;
// conversione on-the-fly SVG da mostrare
if (!string.IsNullOrEmpty(currArgs.newMessage) && currArgs.newMessage.Length > 2)
{
if (currArgs.msgUid.StartsWith($"{shapeChannel}:{windowUid}"))
{
// deserializzo il dizionario delle risposte...
var rawDict = JsonConvert.DeserializeObject<Dictionary<int, string>>(currArgs.newMessage);
currGroupShape = rawDict ?? new Dictionary<int, string>();
CurrData.DictShape = currGroupShape;
}
await InvokeAsync(StateHasChanged);
}
await Task.Delay(1);
}
private async void PipeSvg_EA_NewMessage(object? sender, EventArgs e)
{
// aggiorno visualizzazione
+3 -1
View File
@@ -6,7 +6,7 @@
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<Version>2.7.10.2914</Version>
<Version>2.7.10.2916</Version>
<Authors>Annamaria Sassi</Authors>
<Company>Egalware</Company>
<Description>Componente gestione Configurazioni avanzate Window per LUX</Description>
@@ -180,6 +180,8 @@
@@ -6,7 +6,7 @@
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<Version>2.7.10.2914</Version>
<Version>2.7.10.2916</Version>
<Authors>Annamaria Sassi</Authors>
<Company>Egalware</Company>
<Description>Componente gestione JWD per LUX</Description>
@@ -251,6 +251,10 @@