From 4a74549c1b09b6e347f581b9dc1c810d9d9078ee Mon Sep 17 00:00:00 2001 From: Shaun Walker Date: Tue, 26 Nov 2024 13:35:21 -0500 Subject: [PATCH] Revert "Rework for Tabstrip regression issue" --- .../Modules/Admin/Modules/Settings.razor | 1 + Oqtane.Client/Modules/Admin/Pages/Add.razor | 3 - Oqtane.Client/Modules/Admin/Pages/Edit.razor | 5 +- .../Modules/Controls/QuillJSTextEditor.razor | 8 +- Oqtane.Client/Modules/Controls/TabPanel.razor | 11 +- Oqtane.Client/Modules/Controls/TabStrip.razor | 109 ++++++++++-------- 6 files changed, 68 insertions(+), 69 deletions(-) diff --git a/Oqtane.Client/Modules/Admin/Modules/Settings.razor b/Oqtane.Client/Modules/Admin/Modules/Settings.razor index 828d402e..a949271f 100644 --- a/Oqtane.Client/Modules/Admin/Modules/Settings.razor +++ b/Oqtane.Client/Modules/Admin/Modules/Settings.razor @@ -242,6 +242,7 @@ private async Task SaveModule() { + validated = true; var interop = new Interop(JSRuntime); if (await interop.FormValid(form)) diff --git a/Oqtane.Client/Modules/Admin/Pages/Add.razor b/Oqtane.Client/Modules/Admin/Pages/Add.razor index 1f87ca93..57c2c588 100644 --- a/Oqtane.Client/Modules/Admin/Pages/Add.razor +++ b/Oqtane.Client/Modules/Admin/Pages/Add.razor @@ -469,7 +469,6 @@ } else { - _activetab = "Settings"; AddModuleMessage(Localizer["Message.Required.PageInfo"], MessageType.Warning); } @@ -477,13 +476,11 @@ catch (Exception ex) { await logger.LogError(ex, "Error Saving Page {Page} {Error}", page, ex.Message); - _activetab = "Settings"; AddModuleMessage(Localizer["Error.Page.Save"], MessageType.Error); } } else { - _activetab = "Settings"; AddModuleMessage(SharedLocalizer["Message.InfoRequired"], MessageType.Warning); } } diff --git a/Oqtane.Client/Modules/Admin/Pages/Edit.razor b/Oqtane.Client/Modules/Admin/Pages/Edit.razor index 55a7e985..36014225 100644 --- a/Oqtane.Client/Modules/Admin/Pages/Edit.razor +++ b/Oqtane.Client/Modules/Admin/Pages/Edit.razor @@ -523,7 +523,7 @@ private async Task SavePage() { - //_activetab = "Settings"; + _activetab = "Settings"; validated = true; var interop = new Interop(JSRuntime); if (await interop.FormValid(form)) @@ -672,20 +672,17 @@ } else { - _activetab = "Settings"; AddModuleMessage(Localizer["Message.Required.PageInfo"], MessageType.Warning); } } catch (Exception ex) { await logger.LogError(ex, "Error Saving Page {Page} {Error}", _page, ex.Message); - _activetab = "Settings"; AddModuleMessage(Localizer["Error.Page.Save"], MessageType.Error); } } else { - _activetab = "Settings"; AddModuleMessage(SharedLocalizer["Message.InfoRequired"], MessageType.Warning); } } diff --git a/Oqtane.Client/Modules/Controls/QuillJSTextEditor.razor b/Oqtane.Client/Modules/Controls/QuillJSTextEditor.razor index 26bc244f..cc458f02 100644 --- a/Oqtane.Client/Modules/Controls/QuillJSTextEditor.razor +++ b/Oqtane.Client/Modules/Controls/QuillJSTextEditor.razor @@ -7,7 +7,7 @@ @inject IStringLocalizer SharedLocalizer
- + @if (_allowRichText) { @@ -254,11 +254,11 @@ protected override void OnInitialized() { _interop = new QuillEditorInterop(JSRuntime); + if (string.IsNullOrEmpty(Placeholder)) { Placeholder = Localizer["Placeholder"]; } - // _activetab = "Rich"; } protected override void OnParametersSet() @@ -269,10 +269,6 @@ { _activetab = "Raw"; } - // else - // { - // _activetab = "Rich"; - // } } protected override async Task OnAfterRenderAsync(bool firstRender) diff --git a/Oqtane.Client/Modules/Controls/TabPanel.razor b/Oqtane.Client/Modules/Controls/TabPanel.razor index 0944df4a..fd1251c7 100644 --- a/Oqtane.Client/Modules/Controls/TabPanel.razor +++ b/Oqtane.Client/Modules/Controls/TabPanel.razor @@ -30,20 +30,15 @@ else [Parameter] public SecurityAccessLevel? Security { get; set; } // optional - can be used to specify SecurityAccessLevel + public bool IsActive { get; set; } + protected override void OnParametersSet() { base.OnParametersSet(); Parent.AddTabPanel((TabPanel)this); - if (string.IsNullOrEmpty(Heading)) - { - Heading = Localize(nameof(Name), Name); - } - else - { - Heading = Localize(nameof(Heading), Heading); - } + Heading = string.IsNullOrEmpty(Heading) ? Localize(nameof(Name), Name) : Localize(nameof(Heading), Heading); } public string DisplayHeading() diff --git a/Oqtane.Client/Modules/Controls/TabStrip.razor b/Oqtane.Client/Modules/Controls/TabStrip.razor index 9f66b9ee..70fc5102 100644 --- a/Oqtane.Client/Modules/Controls/TabStrip.razor +++ b/Oqtane.Client/Modules/Controls/TabStrip.razor @@ -8,18 +8,9 @@ @foreach (TabPanel tabPanel in _tabPanels) { } @@ -32,47 +23,70 @@ @code { - private List _tabPanels; - private string _tabpanelid = string.Empty; + private List _tabPanels; + private string _tabpanelid = string.Empty; - [Parameter] - public RenderFragment ChildContent { get; set; } // contains the TabPanels + [Parameter] + public RenderFragment ChildContent { get; set; } // contains the TabPanels - [Parameter] - public bool TabChangeEvent { get; set; } = true; + [Parameter] + public string ActiveTab { get; set; } // optional - defaults to first TabPanel if not specified. Can also be set using a "tab=" querystring parameter. - [Parameter] - public string ActiveTab { get; set; } // optional - defaults to first TabPanel if not specified. Can also be set using a "tab=" querystring parameter. + [Parameter] + public bool Refresh { get; set; } // optional - used in scenarios where TabPanels are added/removed dynamically within a parent form. ActiveTab may need to be reset as well when this property is used. - [Parameter] - public bool Refresh { get; set; } // optional - used in scenarios where TabPanels are added/removed dynamically within a parent form. ActiveTab may need to be reset as well when this property is used. - - [Parameter] - public string Id { get; set; } // optional - used to uniquely identify an instance of a tab strip component (will be set automatically if no value provided) + [Parameter] + public string Id { get; set; } // optional - used to uniquely identify an instance of a tab strip component (will be set automatically if no value provided) [Parameter] public string TabContentClass { get; set; } // optional - to extend the TabContent div. - protected override void OnInitialized() - { - if (string.IsNullOrEmpty(Id)) - { - // create unique id for component - Id = "TabStrip_" + Guid.NewGuid().ToString("N") + "_"; - } - } - + protected override void OnInitialized() + { + if (string.IsNullOrEmpty(Id)) + { + // create unique id for component + Id = "TabStrip_" + Guid.NewGuid().ToString("N") + "_" ; + } + } + protected override void OnParametersSet() { + base.OnParametersSet(); + if (PageState.QueryString.ContainsKey("tab")) { ActiveTab = PageState.QueryString["tab"]; } + if (_tabPanels == null || Refresh) { _tabPanels = new List(); } - StateHasChanged(); + + // Ensure the active tab is valid and exists + if (!string.IsNullOrEmpty(ActiveTab) && _tabPanels.Any()) + { + var activeTabExists = _tabPanels.Any(tp => tp.Name.Equals(ActiveTab, StringComparison.OrdinalIgnoreCase)); + if (!activeTabExists) + { + ActiveTab = _tabPanels[0].Name; + } + } + + // Update the active tab in the UI + UpdateActiveTab(); + } + + private void UpdateActiveTab() + { + if (!string.IsNullOrEmpty(ActiveTab) && _tabPanels != null) + { + foreach (var tabPanel in _tabPanels) + { + tabPanel.IsActive = tabPanel.Name.Equals(ActiveTab, StringComparison.OrdinalIgnoreCase); + } + } } internal void AddTabPanel(TabPanel tabPanel) @@ -80,12 +94,20 @@ if (!_tabPanels.Exists(item => item.Name == tabPanel.Name) && IsAuthorized(tabPanel)) { _tabPanels.Add(tabPanel); + if (string.IsNullOrEmpty(ActiveTab)) + { + ActiveTab = tabPanel.Name; + } + UpdateActiveTab(); StateHasChanged(); } - if (string.IsNullOrEmpty(ActiveTab)) - { - ActiveTab = tabPanel.Name; - } + } + + private void SetActiveTab(string tabName) + { + ActiveTab = tabName; + UpdateActiveTab(); + StateHasChanged(); } private bool IsAuthorized(TabPanel tabPanel) @@ -114,13 +136,4 @@ } return authorized; } - - private void ChangeTab(string tabName) - { - if (ActiveTab != tabName) - { - ActiveTab = tabName; - StateHasChanged(); - } - } }