@inherits LocalizableComponent @using Interfaces @implements Interfaces.IReportUI @inject IReportingHandler ReportingHandler @if (_showReportModal) { } @code { public Type ReportType => typeof(ReportComponent); [Parameter] public IReportable ReportableEntity { get; set; } private bool _showReportModal = false; private string _reportReason = ""; private Task ShowReportModal() { _reportReason = ""; _showReportModal = true; return Task.CompletedTask; } private void CloseReportModal() { _showReportModal = false; } public Dictionary ConstructParameterList(IReportable reportableEntity, object RenderModeBoundary) { Dictionary _parameters = new Dictionary(); _parameters["ReportableEntity"] = reportableEntity; _parameters["RenderModeBoundary"] = RenderModeBoundary; return _parameters; } private async Task ReportEntry() { // Basic null checks to avoid runtime NREs if (ReportingHandler == null) { Console.WriteLine("ReportingHandler is not available (null). Ensure it is registered and injected."); CloseReportModal(); return; } if (ReportableEntity == null) { Console.WriteLine("ReportableEntity is null. Cannot report."); CloseReportModal(); return; } try { // If the handler exposes an async API use it instead. We run the synchronous call off the UI thread to avoid blocking. await Task.Run(() => ReportingHandler.Report(ReportableEntity, _reportReason)); Console.WriteLine($"Eintrag gemeldet mit Grund: {_reportReason}"); AddModuleMessage($"Eintrag mit Grund {_reportReason} gemeldet.", MessageType.Success); } catch (Exception ex) { Console.WriteLine($"Reporting failed: {ex.Message}"); AddModuleMessage($"Eintrag konnte nicht gemeldet werden, bitte melden sie sich direkt beim Absolventenverein: ({ex.StackTrace}).", MessageType.Error); } finally { CloseReportModal(); StateHasChanged(); } } }