2026-06-03 15:55:21 +01:00

183 lines
9.0 KiB
Plaintext

@model ProjectSceneMetricsViewModel
@{
ViewData["Title"] = "Scene Metrics";
}
<nav class="breadcrumb-trail">
<a asp-controller="Projects" asp-action="Details" asp-route-id="@Model.Project.ProjectID">@Model.Project.ProjectName</a>
<span>Scene Metrics</span>
</nav>
<div class="page-heading compact">
<div>
<p class="eyebrow">Project Settings</p>
<h1>Scene Metrics</h1>
<p class="lead-text">Create and manage the metric sliders available when editing scenes.</p>
</div>
<div class="button-row">
<a class="btn btn-outline-secondary" asp-controller="Timeline" asp-action="Settings" asp-route-projectId="@Model.Project.ProjectID">Timeline Settings</a>
<a class="btn btn-outline-secondary" asp-controller="Projects" asp-action="Details" asp-route-id="@Model.Project.ProjectID">Back to project</a>
</div>
</div>
@if (TempData["ProjectMetricMessage"] is string message)
{
<div class="alert alert-info">@message</div>
}
<section class="story-bible-section">
<div class="story-bible-section-heading">
<div>
<p class="eyebrow">Defaults</p>
<h2>Add missing default metrics</h2>
</div>
</div>
<p class="muted">Adds any missing core metrics for this project without duplicating existing metrics.</p>
<form asp-action="AddMissingDefaults" method="post">
<input type="hidden" name="projectId" value="@Model.Project.ProjectID" />
<button class="btn btn-outline-primary" type="submit">Add missing default metrics</button>
</form>
</section>
<section class="story-bible-section">
<div class="story-bible-section-heading">
<div>
<p class="eyebrow">New Metric</p>
<h2>Add scene metric</h2>
</div>
</div>
<form asp-action="Save" method="post" class="row g-3">
<input asp-for="NewMetric.ProjectID" type="hidden" name="ProjectID" />
<div class="col-md-4">
<label class="form-label" for="MetricName">Metric name</label>
<input class="form-control" id="MetricName" name="MetricName" maxlength="100" required />
</div>
<div class="col-md-8">
<label class="form-label" for="Description">Description</label>
<input class="form-control" id="Description" name="Description" maxlength="500" />
</div>
<div class="col-md-2">
<label class="form-label" for="MinValue">Min</label>
<input class="form-control" id="MinValue" name="MinValue" type="number" value="1" />
</div>
<div class="col-md-2">
<label class="form-label" for="MaxValue">Max</label>
<input class="form-control" id="MaxValue" name="MaxValue" type="number" value="10" />
</div>
<div class="col-md-2">
<label class="form-label" for="DefaultValue">Default</label>
<input class="form-control" id="DefaultValue" name="DefaultValue" type="number" value="5" />
</div>
<div class="col-md-2">
<label class="form-label" for="SortOrder">Sort order</label>
<input class="form-control" id="SortOrder" name="SortOrder" type="number" value="100" />
</div>
<div class="col-md-2 d-flex align-items-end">
<label class="form-check mb-2">
<input class="form-check-input" name="IsActive" type="checkbox" value="true" checked />
<span class="form-check-label">Active</span>
</label>
</div>
<div class="col-md-2 d-flex align-items-end">
<button class="btn btn-primary w-100" type="submit">Add Metric</button>
</div>
</form>
</section>
<section class="story-bible-section">
<div class="story-bible-section-heading">
<div>
<p class="eyebrow">Available Metrics</p>
<h2>Project scene metrics</h2>
</div>
<span class="soft-count">@Model.Metrics.Count metric@(Model.Metrics.Count == 1 ? "" : "s")</span>
</div>
@if (!Model.Metrics.Any())
{
<div class="empty-panel compact">
<p>This project has no scene metrics yet.</p>
<form asp-action="AddMissingDefaults" method="post">
<input type="hidden" name="projectId" value="@Model.Project.ProjectID" />
<button class="btn btn-primary" type="submit">Add default metrics</button>
</form>
</div>
}
else
{
<div class="table-responsive">
<table class="table align-middle">
<thead>
<tr>
<th>Metric</th>
<th>Range</th>
<th>Default</th>
<th>Sort</th>
<th>Status</th>
<th>Values</th>
<th class="text-end">Actions</th>
</tr>
</thead>
<tbody>
@foreach (var metric in Model.Metrics)
{
var canMove = metric.IsEnabledForProject || metric.ProjectID == Model.Project.ProjectID;
var canRemove = !metric.IsActive && metric.ProjectID == Model.Project.ProjectID && metric.ValueCount == 0;
<tr class="@(metric.IsActive ? "" : "text-muted")">
<td>
<strong>@metric.MetricName</strong>
@if (!string.IsNullOrWhiteSpace(metric.Description))
{
<div class="muted">@metric.Description</div>
}
</td>
<td>@metric.MinValue-@metric.MaxValue</td>
<td>@metric.DefaultValue</td>
<td>@metric.SortOrder</td>
<td>
<span class="status-pill">@(metric.IsActive ? "Active" : "Inactive")</span>
</td>
<td>@metric.ValueCount</td>
<td>
<div class="button-row justify-content-end">
<form asp-action="Move" method="post">
<input type="hidden" name="projectId" value="@Model.Project.ProjectID" />
<input type="hidden" name="id" value="@metric.MetricTypeID" />
<input type="hidden" name="direction" value="Up" />
<button class="btn btn-outline-secondary btn-sm" type="submit" disabled="@(!canMove)">Up</button>
</form>
<form asp-action="Move" method="post">
<input type="hidden" name="projectId" value="@Model.Project.ProjectID" />
<input type="hidden" name="id" value="@metric.MetricTypeID" />
<input type="hidden" name="direction" value="Down" />
<button class="btn btn-outline-secondary btn-sm" type="submit" disabled="@(!canMove)">Down</button>
</form>
<a class="btn btn-outline-secondary btn-sm" asp-action="Edit" asp-route-projectId="@Model.Project.ProjectID" asp-route-id="@metric.MetricTypeID">Edit</a>
<form asp-action="SetActive" method="post">
<input type="hidden" name="projectId" value="@Model.Project.ProjectID" />
<input type="hidden" name="id" value="@metric.MetricTypeID" />
<input type="hidden" name="isActive" value="@(metric.IsActive ? "false" : "true")" />
<button class="btn btn-outline-secondary btn-sm" type="submit">@(metric.IsActive ? "Deactivate" : "Reactivate")</button>
</form>
@if (canRemove)
{
<form asp-action="Remove" method="post"
data-confirm-title="Remove unused metric?"
data-confirm-body="This metric has no scene values and can be removed safely."
data-confirm-button-text="Remove"
data-confirm-button-class="btn-danger">
<input type="hidden" name="projectId" value="@Model.Project.ProjectID" />
<input type="hidden" name="id" value="@metric.MetricTypeID" />
<button class="btn btn-outline-danger btn-sm" type="submit">Remove</button>
</form>
}
</div>
</td>
</tr>
}
</tbody>
</table>
</div>
}
</section>