-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathIndex.razor
More file actions
62 lines (54 loc) · 2.1 KB
/
Index.razor
File metadata and controls
62 lines (54 loc) · 2.1 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
@page "/"
@rendermode InteractiveServer
@using BlazorKanban.Components.DxKanban
@using BlazorKanban.Data
<DxKanban Data="@KanbanData" CardDropped=OnCardDropped
CssClass="my-kanban" ColumnNameFieldName="GroupName">
<Columns>
<DxKanbanColumn ColumnName="Not Started"></DxKanbanColumn>
<DxKanbanColumn ColumnName="Deferred"></DxKanbanColumn>
<DxKanbanColumn ColumnName="In Progress"></DxKanbanColumn>
<DxKanbanColumn ColumnName="Completed"></DxKanbanColumn>
</Columns>
<CardTemplate Context="ctx">
@{
var dataItem = ctx as KanbanModel;
}
<div class="card">
<div class="card-priority @dataItem!.PriorityCssClass"></div>
<div class="card-subject">@dataItem!.Subject</div>
<div class="card-assignee">@dataItem!.Assignee</div>
</div>
</CardTemplate>
</DxKanban>
@code {
public List<KanbanModel> KanbanData { get; set; } = [];
protected override void OnInitialized() {
KanbanData = KanbanExampleDataProvider.GetData();
}
private void OnCardDropped(GridItemsDroppedEventArgs e) {
if(e.DroppedItems[0] is not KanbanModel droppedCard) {
return;
}
var targetCard = e.TargetItem as KanbanModel;
var droppedCardIndex = KanbanData.IndexOf(droppedCard);
KanbanData.RemoveAt(droppedCardIndex);
var targetCardIndex = targetCard is null ? -1 : KanbanData.IndexOf(targetCard);
droppedCard.GroupName = e.Grid.KeyFieldName;
if(targetCard is null) {
KanbanData.Add(droppedCard!);
}
else {
KanbanData.Insert(targetCardIndex, droppedCard!);
if(e.DropPosition == GridItemDropPosition.After) {
SwapNeighbors(targetCardIndex);
}
}
}
private void SwapNeighbors(int targetCardIndex) {
if(targetCardIndex < 0 || targetCardIndex >= KanbanData.Count - 1)
return;
(KanbanData[targetCardIndex], KanbanData[targetCardIndex + 1])
= (KanbanData[targetCardIndex + 1], KanbanData[targetCardIndex]);
}
}