Skip to content
Merged
12 changes: 6 additions & 6 deletions CS/BlazorKanban/Components/App.razor
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,13 @@
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<base href="/" />
@DxResourceManager.RegisterTheme(Themes.Fluent)
@DxResourceManager.RegisterTheme(Themes.Fluent.Clone(properties => {
properties.AddFilePaths("css/my-styles.css");
properties.AddFilePaths("css/kanban.css");
properties.AddFilePaths("css/card-styles.css");
properties.AddFilePaths("BlazorKanban.styles.css");
}))
@DxResourceManager.RegisterScripts()
<link href=@AppendVersion("css/site.css") rel="stylesheet" />
<link href=@AppendVersion("css/kanban.css") rel="stylesheet" />
<link href=@AppendVersion("css/card-styles.css") rel="stylesheet" />
<link href=@AppendVersion("css/theme-fluent.css") rel="stylesheet" />
<link href=@AppendVersion("BlazorKanban.styles.css") rel="stylesheet" />
<HeadOutlet />
</head>
<body class="dxbl-theme-fluent">
Expand Down
4 changes: 3 additions & 1 deletion CS/BlazorKanban/Components/DxKanban/DxKanban.razor
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
<DxGrid CssClass="@GetGridCssClass()"
@namespace BlazorKanban.Components.DxKanban

<DxGrid CssClass="@GetGridCssClass()"
Data="sampleSingleCellData"
CustomizeElement="ApplyCssClassesToHeaderAndDataCells">
<Columns>
Expand Down
109 changes: 55 additions & 54 deletions CS/BlazorKanban/Components/DxKanban/DxKanban.razor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,74 +6,75 @@
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
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 Services
[Inject]
private IJSRuntime JS { get; set; } = default!;
#endregion

#region Parameters
[Parameter]
public IEnumerable? Data { get; set; }
#region Parameters
[Parameter]
public IEnumerable? Data { get; set; }

[Parameter]
public string? CssClass { get; set; }
[Parameter]
public string? CssClass { get; set; }

[Parameter]
public string? ColumnNameFieldName { get; set; }
[Parameter]
public string? ColumnNameFieldName { get; set; }

[Parameter]
public RenderFragment? Columns { get; set; }
[Parameter]
public RenderFragment? Columns { get; set; }

[Parameter]
public RenderFragment<object>? CardTemplate { get; set; }
[Parameter]
public RenderFragment<object>? CardTemplate { get; set; }

[Parameter]
public EventCallback<GridItemsDroppedEventArgs> CardDropped { get; set; }
#endregion
[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;
#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
#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");
#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");
}
await jsModule.InvokeVoidAsync("moveGridDataCellContentToAnchors");
}

public async ValueTask DisposeAsync() {
try {
if(jsModule != null) {
await jsModule.DisposeAsync();
public async ValueTask DisposeAsync() {
try {
if(jsModule != null) {
await jsModule.DisposeAsync();
}
}
catch(JSDisconnectedException) { }
}
catch(JSDisconnectedException) { }
}
#endregion
#endregion

#region Utility Methods
public void Refresh() => StateHasChanged();
#region Utility Methods
public void Refresh() => StateHasChanged();

private string GetGridCssClass() {
return $"kanban-layout-grid {CssClass}";
private string GetGridCssClass() {
return $"kanban-layout-grid {CssClass}";
}
#endregion
}
#endregion
}
}
4 changes: 3 additions & 1 deletion CS/BlazorKanban/Components/DxKanban/DxKanbanColumn.razor
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
<DxGridDataColumn Caption="@ColumnName"
@namespace BlazorKanban.Components.DxKanban

<DxGridDataColumn Caption="@ColumnName"
CaptionAlignment="GridTextAlignment.Center"
Width="260px"
VisibleIndexChanged="() => Kanban?.Refresh()">
Expand Down
23 changes: 12 additions & 11 deletions CS/BlazorKanban/Components/DxKanban/DxKanbanColumn.razor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,18 @@
using Microsoft.JSInterop;
using System.Reflection;

namespace BlazorKanban.Components.DxKanban;
public partial class DxKanbanColumn : ComponentBase {
#region Parameters
[CascadingParameter]
private DxKanban? Kanban { get; set; }
namespace BlazorKanban.Components.DxKanban {
public partial class DxKanbanColumn : ComponentBase {
#region Parameters
[CascadingParameter]
private DxKanban? Kanban { get; set; }

[Parameter]
public string? ColumnName { get; set; }
#endregion
[Parameter]
public string? ColumnName { get; set; }
#endregion

#region Event Handlers
protected override bool ShouldRender() => false; //t1135370
#endregion
#region Event Handlers
protected override bool ShouldRender() => false; //t1135370
#endregion
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
<DxGrid AllowDragRows=true
@namespace BlazorKanban.Components.DxKanban

<DxGrid AllowDragRows=true
AllowedDropTarget="GridAllowedDropTarget.All"
ItemsDropped="Kanban.CardDropped"
Data="GetDataFilteredByColumnName(ColumnName)"
Expand Down
69 changes: 35 additions & 34 deletions CS/BlazorKanban/Components/DxKanban/DxKanbanColumnGrid.razor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,44 +2,45 @@
using Microsoft.AspNetCore.Components;
using System.Reflection;

namespace BlazorKanban.Components.DxKanban;
public partial class DxKanbanColumnGrid : ComponentBase {
#region Parameters
[Parameter, EditorRequired]
public DxKanban Kanban { get; set; }
namespace BlazorKanban.Components.DxKanban {
public partial class DxKanbanColumnGrid : ComponentBase {
#region Parameters
[Parameter, EditorRequired]
public DxKanban Kanban { get; set; }

[Parameter]
public string? ColumnName { get; set; }
#endregion
[Parameter]
public string? ColumnName { get; set; }
#endregion

#region Event Handlers
private void ApplyCssClassesToDragAnchorsAndHints(GridCustomizeElementEventArgs e) {
switch(e.ElementType) {
case GridElementType.RowDragAnchorCell:
e.CssClass = "kanban-drag-anchor";
break;
case GridElementType.DragHint:
e.CssClass = "kanban-drag-hint";
break;
#region Event Handlers
private void ApplyCssClassesToDragAnchorsAndHints(GridCustomizeElementEventArgs e) {
switch(e.ElementType) {
case GridElementType.RowDragAnchorCell:
e.CssClass = "kanban-drag-anchor";
break;
case GridElementType.DragHint:
e.CssClass = "kanban-drag-hint";
break;
}
}
}
#endregion
#endregion

#region Utility Methods
private IEnumerable<object> GetDataFilteredByColumnName(string? columnName) {
if(Kanban.Data is null) {
return Array.Empty<object>();
}
#region Utility Methods
private IEnumerable<object> GetDataFilteredByColumnName(string? columnName) {
if(Kanban.Data is null) {
return Array.Empty<object>();
}

return Kanban.Data.OfType<object>()
.Where(item => GetColumnNameFromDataItem(item) == columnName);
}
return Kanban.Data.OfType<object>()
.Where(item => GetColumnNameFromDataItem(item) == columnName);
}

private string? GetColumnNameFromDataItem(object item) {
ArgumentNullException.ThrowIfNullOrEmpty(Kanban.ColumnNameFieldName);
PropertyInfo columnNameProperty = item.GetType().GetProperty(Kanban.ColumnNameFieldName)
?? throw new MissingMemberException($"The data item does not contain a property named '{Kanban.ColumnNameFieldName}'.");
return columnNameProperty.GetValue(item)?.ToString();
private string? GetColumnNameFromDataItem(object item) {
ArgumentNullException.ThrowIfNullOrEmpty(Kanban.ColumnNameFieldName);
PropertyInfo columnNameProperty = item.GetType().GetProperty(Kanban.ColumnNameFieldName)
?? throw new MissingMemberException($"The data item does not contain a property named '{Kanban.ColumnNameFieldName}'.");
return columnNameProperty.GetValue(item)?.ToString();
}
#endregion
}
#endregion
}
}
2 changes: 1 addition & 1 deletion CS/BlazorKanban/Components/Pages/Index.razor
Original file line number Diff line number Diff line change
Expand Up @@ -59,4 +59,4 @@
(KanbanData[targetCardIndex], KanbanData[targetCardIndex + 1])
= (KanbanData[targetCardIndex + 1], KanbanData[targetCardIndex]);
}
}
}
Loading
Loading