mirror of
https://gitee.com/ant-design-blazor/ant-design-blazor.git
synced 2024-12-15 09:21:24 +08:00
135 lines
4.0 KiB
C#
135 lines
4.0 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Threading.Tasks;
|
|
using Microsoft.AspNetCore.Components;
|
|
|
|
namespace AntDesign
|
|
{
|
|
public partial class Steps : AntDomComponentBase
|
|
{
|
|
private bool _showProgressDot;
|
|
private RenderFragment _progressDot;
|
|
public EventHandler Handler { get; }
|
|
|
|
internal List<Step> _children;
|
|
|
|
[Parameter] public int Current { get; set; }
|
|
|
|
[Parameter] public double? Percent { get; set; }
|
|
|
|
[Parameter]
|
|
public RenderFragment ProgressDot
|
|
{
|
|
get => _progressDot;
|
|
set
|
|
{
|
|
if (_progressDot != value)
|
|
{
|
|
_progressDot = value;
|
|
_showProgressDot = value != null;
|
|
ResetChildrenSteps();
|
|
}
|
|
}
|
|
}
|
|
|
|
[Parameter]
|
|
public bool ShowProgressDot
|
|
{
|
|
get => _showProgressDot;
|
|
set => _showProgressDot = value;
|
|
}
|
|
|
|
[Parameter] public string Direction { get; set; } = "horizontal";
|
|
|
|
[Parameter] public string LabelPlacement { get; set; } = "horizontal";
|
|
|
|
[Parameter] public string Type { get; set; } = "default";
|
|
|
|
[Parameter] public string Size { get; set; } = "default";
|
|
|
|
[Parameter] public int StartIndex { get; set; } = 0;
|
|
|
|
[Parameter] public string Status { get; set; } = "process";
|
|
|
|
[Parameter] public RenderFragment ChildContent { get; set; }
|
|
|
|
[Parameter] public EventCallback<int> OnChange { get; set; }
|
|
|
|
protected override void Dispose(bool disposing)
|
|
{
|
|
for (int i = 0; i < _children.Count; i++)
|
|
{
|
|
_children[i].Dispose();
|
|
}
|
|
|
|
_children.Clear();
|
|
base.Dispose(disposing);
|
|
}
|
|
|
|
internal void ResetChildrenSteps()
|
|
{
|
|
if (_children == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
for (int i = 0; i < _children.Count; i++)
|
|
{
|
|
_children[i].GroupStatus = this.Status;
|
|
_children[i].ShowProcessDot = this._showProgressDot;
|
|
if (this._progressDot != null)
|
|
{
|
|
_children[i].ProgressDot = this._progressDot;
|
|
}
|
|
_children[i].Clickable = OnChange.HasDelegate; //TODO: Develop event emitter
|
|
_children[i].Direction = this.Direction;
|
|
_children[i].Index = i + this.StartIndex;
|
|
_children[i].GroupCurrentIndex = this.Current;
|
|
_children[i].Percent = this.Percent;
|
|
_children[i].Size = this.Size;
|
|
_children[i].Last = _children.Count == i + 1;
|
|
}
|
|
}
|
|
|
|
internal void AddStep(Step step)
|
|
{
|
|
this._children ??= new List<Step>();
|
|
this._children.Add(step);
|
|
step.Index = _children.Count - 1;
|
|
|
|
ResetChildrenSteps();
|
|
}
|
|
|
|
protected override void OnParametersSet()
|
|
{
|
|
base.OnParametersSet();
|
|
|
|
ResetChildrenSteps();
|
|
SetClassMap();
|
|
}
|
|
|
|
internal void NavigateTo(int current)
|
|
{
|
|
this.Current = current;
|
|
if (OnChange.HasDelegate)
|
|
{
|
|
OnChange.InvokeAsync(current);
|
|
}
|
|
}
|
|
|
|
private void SetClassMap()
|
|
{
|
|
string prefixName = "ant-steps";
|
|
ClassMapper.Clear()
|
|
.Add(prefixName)
|
|
.If($"{prefixName}-{Direction}", () => !string.IsNullOrEmpty(Direction))
|
|
.If($"{prefixName}-label-horizontal", () => Direction == "horizontal")
|
|
.If($"{prefixName}-label-vertical", () => (_showProgressDot || LabelPlacement == "vertical") && Direction == "horizontal")
|
|
.If($"{prefixName}-dot", () => _showProgressDot)
|
|
.If($"{prefixName}-small", () => Size == "small")
|
|
.If($"{prefixName}-navigation", () => Type == "navigation")
|
|
;
|
|
}
|
|
}
|
|
}
|