-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDxKanban.razor.cs
More file actions
80 lines (67 loc) · 2.4 KB
/
DxKanban.razor.cs
File metadata and controls
80 lines (67 loc) · 2.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
using DevExpress.Blazor;
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Web;
using Microsoft.JSInterop;
using System.Collections;
using System.ComponentModel;
using System.Reflection;
namespace BlazorKanban.Components.DxKanban {
public partial class DxKanban : ComponentBase, IAsyncDisposable {
#region Fields
private IEnumerable sampleSingleCellData = Enumerable.Range(0, 1);
private IJSObjectReference? jsModule;
#endregion
#region Services
[Inject]
private IJSRuntime JS { get; set; } = default!;
#endregion
#region Parameters
[Parameter]
public IEnumerable? Data { get; set; }
[Parameter]
public string? CssClass { get; set; }
[Parameter]
public string? ColumnNameFieldName { get; set; }
[Parameter]
public RenderFragment? Columns { get; set; }
[Parameter]
public RenderFragment<object>? CardTemplate { get; set; }
[Parameter]
public EventCallback<GridItemsDroppedEventArgs> CardDropped { get; set; }
#endregion
#region Event Handlers
private void ApplyCssClassesToHeaderAndDataCells(GridCustomizeElementEventArgs e) {
switch(e.ElementType) {
case GridElementType.HeaderCell:
e.CssClass = "kanban-header-cell";
break;
case GridElementType.DataCell:
e.CssClass = "kanban-data-cell";
break;
}
}
#endregion
#region Lifecycle Methods
protected override async Task OnAfterRenderAsync(bool firstRender) {
if(jsModule is null) {
jsModule = await JS.InvokeAsync<IJSObjectReference>("import", "/Components/DxKanban/DxKanban.razor.js");
}
await jsModule.InvokeVoidAsync("moveGridDataCellContentToAnchors");
}
public async ValueTask DisposeAsync() {
try {
if(jsModule != null) {
await jsModule.DisposeAsync();
}
}
catch(JSDisconnectedException) { }
}
#endregion
#region Utility Methods
public void Refresh() => StateHasChanged();
private string GetGridCssClass() {
return $"kanban-layout-grid {CssClass}";
}
#endregion
}
}