@page "/deployment/instances" @using ScadaLink.Security @using ScadaLink.Commons.Entities.Instances @using ScadaLink.Commons.Entities.Sites @using ScadaLink.Commons.Entities.Templates @using ScadaLink.Commons.Entities.Deployment @using ScadaLink.Commons.Interfaces.Repositories @using ScadaLink.Commons.Types.Enums @using ScadaLink.DeploymentManager @using ScadaLink.TemplateEngine.Services @attribute [Authorize(Policy = AuthorizationPolicies.RequireDeployment)] @inject ITemplateEngineRepository TemplateEngineRepository @inject ISiteRepository SiteRepository @inject IDeploymentManagerRepository DeploymentManagerRepository @inject DeploymentService DeploymentService @inject InstanceService InstanceService @inject AuthenticationStateProvider AuthStateProvider @inject NavigationManager NavigationManager

Instances

@if (_loading) { } else if (_errorMessage != null) {
@_errorMessage
} else { @* Filters *@
@if (_filteredInstances.Count == 0) { } @foreach (var inst in _pagedInstances) { @if (_overrideInstanceId == inst.Id) { } @if (_bindingInstanceId == inst.Id) { } }
Instance Name Template Site Area Status Staleness Actions
No instances match the current filters.
@inst.UniqueName @GetTemplateName(inst.TemplateId) @GetSiteName(inst.SiteId) @(inst.AreaId.HasValue ? GetAreaName(inst.AreaId.Value) : "—") @inst.State @{ var isStale = _stalenessMap.GetValueOrDefault(inst.Id); } @if (inst.State == InstanceState.NotDeployed) { } else if (isStale) { Stale } else { Current } @if (inst.State == InstanceState.Enabled) { } else if (inst.State == InstanceState.Disabled) { }
Attribute Overrides for @inst.UniqueName
@if (_overrideAttrs.Count == 0) {

No overridable (non-locked) attributes in this template.

} else { @foreach (var attr in _overrideAttrs) { }
AttributeTemplate ValueOverride Value
@attr.Name @attr.DataType @(attr.Value ?? "—")
}
Connection Bindings for @inst.UniqueName @if (_bindingDataSourceAttrs.Count > 0 && _siteConnections.Count > 0) {
}
@if (_bindingDataSourceAttrs.Count == 0) {

No data-sourced attributes in this template.

} else { @foreach (var attr in _bindingDataSourceAttrs) { }
AttributeTag PathConnection
@attr.Name @attr.DataSourceReference
}
@* Pagination *@ @if (_totalPages > 1) { }
@_filteredInstances.Count instance(s) total
@* Diff Modal *@ @if (_showDiffModal) { } }
@code { private async Task GetCurrentUserAsync() { var authState = await AuthStateProvider.GetAuthenticationStateAsync(); return authState.User.FindFirst("Username")?.Value ?? "unknown"; } private List _allInstances = new(); private List _filteredInstances = new(); private List _pagedInstances = new(); private List _sites = new(); private List