namespace NetinaShop.AdminPanel.PWA.Utilities.Models; public class CustomEventHelper { private readonly Func _callback; public CustomEventHelper(Func callback) { _callback = callback; } [JSInvokable] public Task OnCustomEvent(EventArgs args) => _callback(args); } public class CustomEventInterop : IDisposable { private readonly IJSRuntime _jsRuntime; private DotNetObjectReference Reference; public CustomEventInterop(IJSRuntime jsRuntime) { _jsRuntime = jsRuntime; } public ValueTask SetupCustomEventCallback(Func callback) { Reference = DotNetObjectReference.Create(new CustomEventHelper(callback)); // addCustomEventListener will be a js function we create later return _jsRuntime.InvokeAsync("addCustomEventListener", Reference); } public void Dispose() { Reference?.Dispose(); } }