@model OnboardingJourneyHeaderViewModel
@{
var characterReviewStepCount = Math.Max(1, Model.TotalSteps - 9);
var steps = Model.TotalSteps <= 10
? BuildDefaultSteps()
: BuildDynamicSteps(characterReviewStepCount, Model.TotalSteps);
var progressWidth = Model.TotalSteps <= 1
? 100
: ((Math.Clamp(Model.CurrentStep, 1, Model.TotalSteps) - 1) * 100) / (Model.TotalSteps - 1);
}
Step @Model.CurrentStep of @Model.TotalSteps
@foreach (var step in steps)
{
-
@step.Order
@step.Label
}
@functions {
private sealed record HeaderStep(string Label, int Order);
private static IReadOnlyList BuildDefaultSteps() =>
[
new("Welcome", 1),
new("Writing Stage", 2),
new("Writing Software", 3),
new("Project", 4),
new("Book", 5),
new("Connect Word", 6),
new("Review Chapters", 7),
new("Review Characters", 8),
new("Story Context", 9),
new("Complete", 10)
];
private static IReadOnlyList BuildDynamicSteps(int characterReviewStepCount, int totalSteps)
{
var steps = new List
{
new("Welcome", 1),
new("Writing Stage", 2),
new("Writing Software", 3),
new("Project", 4),
new("Book", 5),
new("Connect Word", 6),
new("Review Chapters", 7)
};
for (var index = 1; index <= characterReviewStepCount; index++)
{
steps.Add(new HeaderStep($"Characters {index}", 7 + index));
}
steps.Add(new HeaderStep("Story Context", totalSteps - 1));
steps.Add(new HeaderStep("Complete", totalSteps));
return steps;
}
private static string StepClass(int order, int currentStep)
{
if (order < currentStep)
{
return "is-complete";
}
return order == currentStep ? "is-current" : "is-upcoming";
}
}