2022-04-05 23:43:31 +02:00
|
|
|
using Microsoft.AspNetCore.Components;
|
|
|
|
using Microsoft.AspNetCore.Components.Web;
|
|
|
|
using Microsoft.JSInterop;
|
|
|
|
|
|
|
|
namespace BlazorReorderList;
|
|
|
|
|
2022-04-11 18:16:52 +02:00
|
|
|
public class ReorderService<TItem> : IAsyncDisposable
|
2022-04-05 23:43:31 +02:00
|
|
|
{
|
|
|
|
private readonly Lazy<Task<IJSObjectReference>> moduleTask;
|
2022-04-11 18:16:52 +02:00
|
|
|
public List<TItem>? originItems;
|
|
|
|
public int elemIndex = -1;
|
|
|
|
public TItem selected = default(TItem);
|
|
|
|
public point elemClickPosition = new point(0, 0);
|
|
|
|
public bool isDragging = false;
|
2022-04-11 22:22:41 +02:00
|
|
|
private bool _copy = false;
|
2022-04-05 23:43:31 +02:00
|
|
|
|
2022-04-11 18:16:52 +02:00
|
|
|
public ReorderService(IJSRuntime jsRuntime)
|
2022-04-05 23:43:31 +02:00
|
|
|
{
|
|
|
|
moduleTask = new(() => jsRuntime.InvokeAsync<IJSObjectReference>(
|
2022-04-11 18:16:52 +02:00
|
|
|
"import", "./_content/BlazorReorderList/ReorderJsInterop.js").AsTask());
|
|
|
|
}
|
|
|
|
|
2022-04-11 22:22:41 +02:00
|
|
|
public void Set(List<TItem> list, TItem item, int index, point clickPoint, bool copy)
|
2022-04-11 18:16:52 +02:00
|
|
|
{
|
|
|
|
isDragging = true;
|
|
|
|
originItems = list;
|
|
|
|
selected = item;
|
|
|
|
elemIndex = index;
|
|
|
|
elemClickPosition = clickPoint;
|
2022-04-11 22:22:41 +02:00
|
|
|
_copy = copy;
|
|
|
|
}
|
|
|
|
|
|
|
|
// whe copy only the first time
|
|
|
|
public bool isCopy()
|
|
|
|
{
|
|
|
|
var tempcopy = _copy;
|
|
|
|
_copy = false;
|
|
|
|
return tempcopy;
|
2022-04-11 18:16:52 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
public void Reset()
|
|
|
|
{
|
|
|
|
isDragging = false;
|
|
|
|
originItems = default(List<TItem>);
|
|
|
|
selected = default(TItem);
|
|
|
|
elemClickPosition = new point(0, 0);
|
2022-04-11 22:22:41 +02:00
|
|
|
_copy = false;
|
2022-04-05 23:43:31 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
public async ValueTask initEvents(DotNetObjectReference<Reorder<TItem>> dotNetInstance)
|
|
|
|
{
|
|
|
|
var module = await moduleTask.Value;
|
|
|
|
await module.InvokeVoidAsync("initEvents", dotNetInstance);
|
|
|
|
}
|
|
|
|
|
2022-04-11 18:16:52 +02:00
|
|
|
public async ValueTask removeEvents(DotNetObjectReference<Reorder<TItem>> dotNetInstance)
|
|
|
|
{
|
|
|
|
var module = await moduleTask.Value;
|
|
|
|
await module.InvokeVoidAsync("removeEvents", dotNetInstance);
|
|
|
|
}
|
|
|
|
|
2022-04-05 23:43:31 +02:00
|
|
|
public async ValueTask<int> getWidth(ElementReference el)
|
|
|
|
{
|
|
|
|
var module = await moduleTask.Value;
|
|
|
|
return await module.InvokeAsync<int>("getWidth", el);
|
|
|
|
}
|
|
|
|
|
|
|
|
public async ValueTask<point> getPosition(ElementReference el)
|
|
|
|
{
|
|
|
|
var module = await moduleTask.Value;
|
|
|
|
return await module.InvokeAsync<point>("getPosition", el);
|
|
|
|
}
|
|
|
|
|
|
|
|
public async ValueTask<point> getPoint(MouseEventArgs ev)
|
|
|
|
{
|
|
|
|
var module = await moduleTask.Value;
|
|
|
|
return await module.InvokeAsync<point>("getPoint", ev);
|
|
|
|
}
|
|
|
|
|
|
|
|
public async ValueTask<clientRect> getClientRect(ElementReference el)
|
|
|
|
{
|
|
|
|
var module = await moduleTask.Value;
|
|
|
|
return await module.InvokeAsync<clientRect>("getClientRect", el);
|
|
|
|
}
|
|
|
|
|
|
|
|
public async ValueTask DisposeAsync()
|
|
|
|
{
|
|
|
|
if (moduleTask.IsValueCreated)
|
|
|
|
{
|
|
|
|
var module = await moduleTask.Value;
|
|
|
|
await module.DisposeAsync();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|