Template management will be available in a future phase.
+
+
+
+ @if (_loading)
+ {
+
+ }
+ else if (_errorMessage != null)
+ {
+
@_errorMessage
+ }
+ else if (_selectedTemplate == null)
+ {
+ @* Template list view *@
+
+
Templates
+
+
+
+ @if (_showCreateForm)
+ {
+
+
+
Create Template
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ @if (_createError != null)
+ {
+
@_createError
+ }
+
+
+ }
+
+ @* Inheritance tree visualization *@
+
+
+ @foreach (var node in BuildTemplateTree())
+ {
+
SelectTemplate(node.Template.Id)">
+ @(node.HasChildren ? "[+]" : " -")
+
+ @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
+ }
+
+
+ }
+
+
+ }
+ 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 *@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ @* 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 {
+ [Parameter] public int TemplateIdParam { get; set; }
+
+ private List