using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components.Web; using Microsoft.JSInterop; namespace BlazorReorderList; public class ReorderService : IAsyncDisposable { private readonly Lazy> moduleTask; public List? originItems; public int elemIndex = -1; public TItem selected = default(TItem); public point elemClickPosition = new point(0, 0); public bool isDragging = false; private bool _copy = false; public ReorderService(IJSRuntime jsRuntime) { moduleTask = new(() => jsRuntime.InvokeAsync( "import", "./_content/BlazorReorderList/ReorderJsInterop.js").AsTask()); } public void Set(List list, TItem item, int index, point clickPoint, bool copy) { isDragging = true; originItems = list; selected = item; elemIndex = index; elemClickPosition = clickPoint; _copy = copy; } // whe copy only the first time public bool isCopy() { var tempcopy = _copy; _copy = false; return tempcopy; } public void Reset() { isDragging = false; originItems = default(List); selected = default(TItem); elemClickPosition = new point(0, 0); _copy = false; } public async ValueTask initEvents(DotNetObjectReference> dotNetInstance) { var module = await moduleTask.Value; await module.InvokeVoidAsync("initEvents", dotNetInstance); } public async ValueTask removeEvents(DotNetObjectReference> dotNetInstance) { var module = await moduleTask.Value; await module.InvokeVoidAsync("removeEvents", dotNetInstance); } public async ValueTask getWidth(ElementReference el) { var module = await moduleTask.Value; return await module.InvokeAsync("getWidth", el); } public async ValueTask getPosition(ElementReference el) { var module = await moduleTask.Value; return await module.InvokeAsync("getPosition", el); } public async ValueTask getPoint(double PageX, double PageY, double ClientX, double ClientY) { var module = await moduleTask.Value; return await module.InvokeAsync("getPoint", PageX, PageY, ClientX, ClientY); } public async ValueTask getClientRect(ElementReference el) { var module = await moduleTask.Value; return await module.InvokeAsync("getClientRect", el); } public async ValueTask DisposeAsync() { if (moduleTask.IsValueCreated) { var module = await moduleTask.Value; await module.DisposeAsync(); } } }