diff --git a/src/ScadaLink.CentralUI/Components/Pages/Design/Templates.razor b/src/ScadaLink.CentralUI/Components/Pages/Design/Templates.razor index a4c307c..222b5e6 100644 --- a/src/ScadaLink.CentralUI/Components/Pages/Design/Templates.razor +++ b/src/ScadaLink.CentralUI/Components/Pages/Design/Templates.razor @@ -19,6 +19,28 @@ + @if (_showRenameFolderDialog) + { + + } + @if (_loading) { @@ -469,10 +491,85 @@ // Folder selection: no-op (Section 4 design — folder click does not load detail). } - private RenderFragment RenderNodeContextMenu(TmplNode node) => __builder => { }; + private RenderFragment RenderNodeContextMenu(TmplNode node) => __builder => + { + switch (node.Kind) + { + case TmplNodeKind.Folder: + + + + + + break; + + case TmplNodeKind.Template: + + + + + break; + + case TmplNodeKind.Composition: + var composedKey = $"t:{node.Composition!.ComposedTemplateId}"; + + + break; + } + }; private void OpenNewFolderDialog(int? parentFolderId) { /* Task 17 */ } private void OpenNewTemplateDialog(int? parentFolderId) { /* Task 17 */ } + private void OpenMoveTemplateDialog(int templateId, string label) { /* Task 17 */ } + + // Rename folder dialog state + private bool _showRenameFolderDialog; + private int _renameFolderId; + private string _renameFolderName = string.Empty; + private string? _renameFolderError; + + private void OpenRenameFolderDialog(int folderId, string currentName) + { + _renameFolderId = folderId; + _renameFolderName = currentName; + _renameFolderError = null; + _showRenameFolderDialog = true; + } + + private async Task SubmitRenameFolder() + { + _renameFolderError = null; + var user = await GetCurrentUserAsync(); + var result = await TemplateFolderService.RenameFolderAsync(_renameFolderId, _renameFolderName.Trim(), user); + if (result.IsSuccess) + { + _showRenameFolderDialog = false; + _toast.ShowSuccess("Folder renamed."); + await LoadTemplatesAsync(); + } + else + { + _renameFolderError = result.Error; + } + } + + private async Task DeleteFolder(int folderId, string label) + { + var confirmed = await _confirmDialog.ShowAsync($"Delete folder '{label}'?", "Delete Folder"); + if (!confirmed) return; + + var user = await GetCurrentUserAsync(); + var result = await TemplateFolderService.DeleteFolderAsync(folderId, user); + if (result.IsSuccess) + { + _toast.ShowSuccess($"Folder '{label}' deleted."); + await LoadTemplatesAsync(); + } + else + { + _toast.ShowError(result.Error); + } + } private async Task DeleteTemplate(Template template) {