using Microsoft.AspNetCore.Components;
using System;
using System.Diagnostics;
namespace GWMS.UI.Components
{
public abstract class BaseComp : ComponentBase, IDisposable
{
#region Public Methods
public virtual void Dispose()
{
// Opzionale: logga quando l'utente lascia la pagina/componente
}
#endregion Public Methods
#region Protected Fields
///
/// Sorgente statica condivisa per tutto il layer UI
///
protected static readonly ActivitySource UIActivitySource = new ActivitySource("GWMS.UI");
#endregion Protected Fields
#region Protected Properties
[Inject]
protected NavigationManager Navigation { get; set; } = default!;
#endregion Protected Properties
#region Protected Methods
///
/// Avvia un'attività tracciata con metadati standard del componente
///
protected Activity? StartTracing(string operationName)
{
// Verifica se qualcuno sta ascoltando questa sorgente
if (!UIActivitySource.HasListeners()) return null;
// init activity con nome gestito
var activity = UIActivitySource.StartActivity($"{GetType().Name}:{operationName}");
// Aggiungiamo tag standard utili per il debug su Uptrace
activity?.SetTag("ui.component_type", GetType().Name);
activity?.SetTag("ui.url", Navigation.Uri);
activity?.SetTag("data.source", "UI");
return activity;
}
#endregion Protected Methods
}
}