@page "/design/templates" @page "/design/templates/{TemplateIdParam:int}" @using ScadaLink.Security @using ScadaLink.Commons.Entities.Templates @using ScadaLink.Commons.Interfaces.Repositories @using ScadaLink.Commons.Types.Enums @using ScadaLink.TemplateEngine @using ScadaLink.TemplateEngine.Validation @using ScadaLink.TemplateEngine.Flattening @attribute [Authorize(Policy = AuthorizationPolicies.RequireDesign)] @inject ITemplateEngineRepository TemplateEngineRepository @inject TemplateService TemplateService @inject AuthenticationStateProvider AuthStateProvider @inject NavigationManager NavigationManager
@if (_loading) { } else if (_errorMessage != null) {
@_errorMessage
} else if (_selectedTemplate == null) { @* Template list view *@

Templates

@node.Template.Name @if (node.Template.ParentTemplateId.HasValue) { inherits @(_templates.FirstOrDefault(t => t.Id == node.Template.ParentTemplateId)?.Name) } @if (!string.IsNullOrEmpty(node.Template.Description)) { @node.Template.Description } @node.Template.Attributes.Count attr, @node.Template.Alarms.Count alm, @node.Template.Scripts.Count scr @if (node.Template.Compositions.Count > 0) { @node.Template.Compositions.Count comp } No templates. Create one to get started. } else { @* Template detail/edit view *@

@_selectedTemplate.Name

@if (_selectedTemplate.ParentTemplateId.HasValue) { inherits @(_templates.FirstOrDefault(t => t.Id == _selectedTemplate.ParentTemplateId)?.Name) }
@* Validation results *@ @if (_validationResult != null) {
@if (_validationResult.Errors.Count > 0) {
Validation Errors (@_validationResult.Errors.Count)
    @foreach (var err in _validationResult.Errors) {
  • [@err.Category] @err.Message @(err.EntityName != null ? $"({err.EntityName})" : "")
  • }
} @if (_validationResult.Warnings.Count > 0) {
Warnings (@_validationResult.Warnings.Count)
    @foreach (var warn in _validationResult.Warnings) {
  • [@warn.Category] @warn.Message
  • }
} @if (_validationResult.Errors.Count == 0 && _validationResult.Warnings.Count == 0) {
Validation passed with no errors or warnings.
}
} @* Template info edit *@
Template Properties
@* Tabs: Attributes, Alarms, Scripts, Compositions *@ @if (_activeTab == "attributes") { @RenderAttributesTab() } else if (_activeTab == "alarms") { @RenderAlarmsTab() } else if (_activeTab == "scripts") { @RenderScriptsTab() } else if (_activeTab == "compositions") { @RenderCompositionsTab() } }
@code { private async Task GetCurrentUserAsync() { var authState = await AuthStateProvider.GetAuthenticationStateAsync(); return authState.User.FindFirst("Username")?.Value ?? "unknown"; } [Parameter] public int TemplateIdParam { get; set; } private List