mirror of
https://github.com/btcpayserver/btcpayserver.git
synced 2025-02-22 14:22:40 +01:00
Fix settigs sidebar activation (#4138)
* Fix settigs sidebar activation * remove active payout from settings * Fix Store Settings nav highlight Fixes #4134. Co-authored-by: Dennis Reimann <mail@dennisreimann.de>
This commit is contained in:
parent
9e31270459
commit
cadcb586a7
8 changed files with 25 additions and 23 deletions
|
@ -1,5 +1,7 @@
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
|
using System.Linq;
|
||||||
using Microsoft.AspNetCore.Html;
|
using Microsoft.AspNetCore.Html;
|
||||||
using Microsoft.AspNetCore.Mvc.ViewFeatures;
|
using Microsoft.AspNetCore.Mvc.ViewFeatures;
|
||||||
|
|
||||||
|
@ -10,6 +12,7 @@ namespace BTCPayServer.Abstractions.Extensions
|
||||||
private const string ACTIVE_CATEGORY_KEY = "ActiveCategory";
|
private const string ACTIVE_CATEGORY_KEY = "ActiveCategory";
|
||||||
private const string ACTIVE_PAGE_KEY = "ActivePage";
|
private const string ACTIVE_PAGE_KEY = "ActivePage";
|
||||||
private const string ACTIVE_ID_KEY = "ActiveId";
|
private const string ACTIVE_ID_KEY = "ActiveId";
|
||||||
|
private const string ActivePageClass = "active";
|
||||||
|
|
||||||
public static void SetActivePage<T>(this ViewDataDictionary viewData, T activePage, string title = null, string activeId = null)
|
public static void SetActivePage<T>(this ViewDataDictionary viewData, T activePage, string title = null, string activeId = null)
|
||||||
where T : IConvertible
|
where T : IConvertible
|
||||||
|
@ -52,7 +55,7 @@ namespace BTCPayServer.Abstractions.Extensions
|
||||||
var activeCategory = viewData[ACTIVE_CATEGORY_KEY]?.ToString();
|
var activeCategory = viewData[ACTIVE_CATEGORY_KEY]?.ToString();
|
||||||
var categoryMatch = category.Equals(activeCategory, StringComparison.InvariantCultureIgnoreCase);
|
var categoryMatch = category.Equals(activeCategory, StringComparison.InvariantCultureIgnoreCase);
|
||||||
var idMatch = id == null || activeId == null || id.Equals(activeId);
|
var idMatch = id == null || activeId == null || id.Equals(activeId);
|
||||||
return categoryMatch && idMatch ? "active" : null;
|
return categoryMatch && idMatch ? ActivePageClass : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string IsActivePage<T>(this ViewDataDictionary viewData, T page, object id = null)
|
public static string IsActivePage<T>(this ViewDataDictionary viewData, T page, object id = null)
|
||||||
|
@ -60,6 +63,14 @@ namespace BTCPayServer.Abstractions.Extensions
|
||||||
{
|
{
|
||||||
return IsActivePage(viewData, page.ToString(), page.GetType().ToString(), id);
|
return IsActivePage(viewData, page.ToString(), page.GetType().ToString(), id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static string IsActivePage<T>(this ViewDataDictionary viewData, IEnumerable<T> pages, object id = null)
|
||||||
|
where T : IConvertible
|
||||||
|
{
|
||||||
|
return pages.Any(page => IsActivePage(viewData, page.ToString(), page.GetType().ToString(), id) == ActivePageClass)
|
||||||
|
? ActivePageClass
|
||||||
|
: null;
|
||||||
|
}
|
||||||
|
|
||||||
public static string IsActivePage(this ViewDataDictionary viewData, string page, string category, object id = null)
|
public static string IsActivePage(this ViewDataDictionary viewData, string page, string category, object id = null)
|
||||||
{
|
{
|
||||||
|
@ -72,7 +83,7 @@ namespace BTCPayServer.Abstractions.Extensions
|
||||||
var activeCategory = viewData[ACTIVE_CATEGORY_KEY]?.ToString();
|
var activeCategory = viewData[ACTIVE_CATEGORY_KEY]?.ToString();
|
||||||
var categoryAndPageMatch = (category == null || activeCategory.Equals(category, StringComparison.InvariantCultureIgnoreCase)) && page.Equals(activePage, StringComparison.InvariantCultureIgnoreCase);
|
var categoryAndPageMatch = (category == null || activeCategory.Equals(category, StringComparison.InvariantCultureIgnoreCase)) && page.Equals(activePage, StringComparison.InvariantCultureIgnoreCase);
|
||||||
var idMatch = id == null || activeId == null || id.Equals(activeId);
|
var idMatch = id == null || activeId == null || id.Equals(activeId);
|
||||||
return categoryAndPageMatch && idMatch ? "active" : null;
|
return categoryAndPageMatch && idMatch ? ActivePageClass : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static HtmlString ToBrowserDate(this DateTimeOffset date)
|
public static HtmlString ToBrowserDate(this DateTimeOffset date)
|
||||||
|
|
|
@ -7,9 +7,6 @@
|
||||||
@using BTCPayServer.Views.Wallets
|
@using BTCPayServer.Views.Wallets
|
||||||
@using BTCPayServer.Abstractions.Extensions
|
@using BTCPayServer.Abstractions.Extensions
|
||||||
@using BTCPayServer.Client
|
@using BTCPayServer.Client
|
||||||
@using BTCPayServer.Components.Icon
|
|
||||||
@using BTCPayServer.Components.ThemeSwitch
|
|
||||||
@using BTCPayServer.Components.UIExtensionPoint
|
|
||||||
@using BTCPayServer.Services
|
@using BTCPayServer.Services
|
||||||
@using BTCPayServer.Views.CustodianAccounts
|
@using BTCPayServer.Views.CustodianAccounts
|
||||||
@inject BTCPayServerEnvironment Env
|
@inject BTCPayServerEnvironment Env
|
||||||
|
@ -35,7 +32,7 @@
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a asp-area="" asp-controller="UIStores" asp-action="GeneralSettings" asp-route-storeId="@Model.Store.Id" class="nav-link js-scroll-trigger @ViewData.IsActivePage(StoreNavPages.Rates) @ViewData.IsActivePage(StoreNavPages.CheckoutAppearance) @ViewData.IsActivePage(StoreNavPages.General) @ViewData.IsActivePage(StoreNavPages.Tokens) @ViewData.IsActivePage(StoreNavPages.Users) @ViewData.IsActivePage(StoreNavPages.Plugins) @ViewData.IsActivePage(StoreNavPages.Webhooks)" id="StoreNav-StoreSettings">
|
<a asp-area="" asp-controller="UIStores" asp-action="GeneralSettings" asp-route-storeId="@Model.Store.Id" class="nav-link js-scroll-trigger @ViewData.IsActivePage(new [] {StoreNavPages.Rates, StoreNavPages.CheckoutAppearance, StoreNavPages.General, StoreNavPages.Tokens, StoreNavPages.Users, StoreNavPages.Plugins, StoreNavPages.Webhooks, StoreNavPages.PayoutProcessors, StoreNavPages.Emails})" id="StoreNav-StoreSettings">
|
||||||
<vc:icon symbol="settings"/>
|
<vc:icon symbol="settings"/>
|
||||||
<span>Settings</span>
|
<span>Settings</span>
|
||||||
</a>
|
</a>
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
@using BTCPayServer.Abstractions.Extensions
|
@using BTCPayServer.Abstractions.Extensions
|
||||||
|
@using BTCPayServer.Views.Stores
|
||||||
|
@using Microsoft.AspNetCore.Mvc.TagHelpers
|
||||||
@model BTCPayServer.PayoutProcessors.Lightning.UILightningAutomatedPayoutProcessorsController.LightningTransferViewModel
|
@model BTCPayServer.PayoutProcessors.Lightning.UILightningAutomatedPayoutProcessorsController.LightningTransferViewModel
|
||||||
@{
|
@{
|
||||||
ViewData["NavPartialName"] = "../UIStores/_Nav";
|
ViewData["NavPartialName"] = "../UIStores/_Nav";
|
||||||
Layout = "../Shared/_NavLayout.cshtml";
|
Layout = "../Shared/_NavLayout.cshtml";
|
||||||
ViewData.SetActivePage("PayoutProcessors", "Lightning Payout Processor", Context.GetStoreData().Id);
|
ViewData.SetActivePage(StoreNavPages.PayoutProcessors, "Lightning Payout Processor", Context.GetStoreData().Id);
|
||||||
}
|
}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xl-8 col-xxl-constrain">
|
<div class="col-xl-8 col-xxl-constrain">
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
@using BTCPayServer.Abstractions.Extensions
|
@using BTCPayServer.Abstractions.Extensions
|
||||||
|
@using BTCPayServer.Views.Stores
|
||||||
@model BTCPayServer.PayoutProcessors.OnChain.UIOnChainAutomatedPayoutProcessorsController.OnChainTransferViewModel
|
@model BTCPayServer.PayoutProcessors.OnChain.UIOnChainAutomatedPayoutProcessorsController.OnChainTransferViewModel
|
||||||
@{
|
@{
|
||||||
ViewData["NavPartialName"] = "../UIStores/_Nav";
|
ViewData["NavPartialName"] = "../UIStores/_Nav";
|
||||||
Layout = "../Shared/_NavLayout.cshtml";
|
Layout = "../Shared/_NavLayout.cshtml";
|
||||||
ViewData.SetActivePage("PayoutProcessors", "On-Chain Payout Processor", Context.GetStoreData().Id);
|
ViewData.SetActivePage(StoreNavPages.PayoutProcessors, "On-Chain Payout Processor", Context.GetStoreData().Id);
|
||||||
}
|
}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xl-8 col-xxl-constrain">
|
<div class="col-xl-8 col-xxl-constrain">
|
||||||
|
|
|
@ -1,11 +1,13 @@
|
||||||
@using BTCPayServer.Abstractions.Extensions
|
@using BTCPayServer.Views.Stores
|
||||||
|
@using Microsoft.AspNetCore.Mvc.TagHelpers
|
||||||
|
@using BTCPayServer.Abstractions.Extensions
|
||||||
@using BTCPayServer.Abstractions.Models
|
@using BTCPayServer.Abstractions.Models
|
||||||
@model List<BTCPayServer.PayoutProcessors.UIPayoutProcessorsController.StorePayoutProcessorsView>
|
@model List<BTCPayServer.PayoutProcessors.UIPayoutProcessorsController.StorePayoutProcessorsView>
|
||||||
@{
|
@{
|
||||||
ViewData["NavPartialName"] = "../UIStores/_Nav";
|
ViewData["NavPartialName"] = "../UIStores/_Nav";
|
||||||
Layout = "../Shared/_NavLayout.cshtml";
|
Layout = "../Shared/_NavLayout.cshtml";
|
||||||
var storeId = Context.GetStoreData().Id;
|
var storeId = Context.GetStoreData().Id;
|
||||||
ViewData.SetActivePage("PayoutProcessors", "Payout Processors", storeId);
|
ViewData.SetActivePage(StoreNavPages.PayoutProcessors, "Payout Processors", storeId);
|
||||||
}
|
}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xl-8 col-xxl-constrain">
|
<div class="col-xl-8 col-xxl-constrain">
|
||||||
|
|
|
@ -1,11 +0,0 @@
|
||||||
@model BTCPayServer.Models.ServerViewModels.EmailsViewModel
|
|
||||||
@{
|
|
||||||
Layout = "../Shared/_NavLayout.cshtml";
|
|
||||||
ViewData.SetActivePage(StoreNavPages.Emails, "Email Server", Context.GetStoreData().Id);
|
|
||||||
}
|
|
||||||
|
|
||||||
<partial name="EmailsBody" model="Model" />
|
|
||||||
|
|
||||||
@section PageFootContent {
|
|
||||||
<partial name="_ValidationScriptsPartial" />
|
|
||||||
}
|
|
|
@ -19,6 +19,7 @@ namespace BTCPayServer.Views.Stores
|
||||||
Webhooks,
|
Webhooks,
|
||||||
PullPayments,
|
PullPayments,
|
||||||
Payouts,
|
Payouts,
|
||||||
|
PayoutProcessors,
|
||||||
[Obsolete("Use StoreNavPages.Plugins instead")]
|
[Obsolete("Use StoreNavPages.Plugins instead")]
|
||||||
Integrations,
|
Integrations,
|
||||||
Emails
|
Emails
|
||||||
|
|
|
@ -14,10 +14,9 @@
|
||||||
<a permission="@Policies.CanModifyStoreSettings" id="SectionNav-@(nameof(StoreNavPages.CheckoutAppearance))" class="nav-link @ViewData.IsActivePage(StoreNavPages.CheckoutAppearance)" asp-controller="UIStores" asp-action="CheckoutAppearance" asp-route-storeId="@storeId">Checkout Appearance</a>
|
<a permission="@Policies.CanModifyStoreSettings" id="SectionNav-@(nameof(StoreNavPages.CheckoutAppearance))" class="nav-link @ViewData.IsActivePage(StoreNavPages.CheckoutAppearance)" asp-controller="UIStores" asp-action="CheckoutAppearance" asp-route-storeId="@storeId">Checkout Appearance</a>
|
||||||
<a permission="@Policies.CanModifyStoreSettings" id="SectionNav-@(nameof(StoreNavPages.Tokens))" class="nav-link @ViewData.IsActivePage(StoreNavPages.Tokens)" asp-controller="UIStores" asp-action="ListTokens" asp-route-storeId="@storeId">Access Tokens</a>
|
<a permission="@Policies.CanModifyStoreSettings" id="SectionNav-@(nameof(StoreNavPages.Tokens))" class="nav-link @ViewData.IsActivePage(StoreNavPages.Tokens)" asp-controller="UIStores" asp-action="ListTokens" asp-route-storeId="@storeId">Access Tokens</a>
|
||||||
<a permission="@Policies.CanModifyStoreSettings" id="SectionNav-@(nameof(StoreNavPages.Users))" class="nav-link @ViewData.IsActivePage(StoreNavPages.Users)" asp-controller="UIStores" asp-action="StoreUsers" asp-route-storeId="@storeId">Users</a>
|
<a permission="@Policies.CanModifyStoreSettings" id="SectionNav-@(nameof(StoreNavPages.Users))" class="nav-link @ViewData.IsActivePage(StoreNavPages.Users)" asp-controller="UIStores" asp-action="StoreUsers" asp-route-storeId="@storeId">Users</a>
|
||||||
@* ReSharper disable once CSharpWarnings::CS0618 *@
|
|
||||||
<a permission="@Policies.CanModifyStoreSettings" id="SectionNav-@(nameof(StoreNavPages.Plugins))" class="nav-link @ViewData.IsActivePage(StoreNavPages.Plugins)" asp-controller="UIStores" asp-action="Plugins" asp-route-storeId="@storeId">Plugins</a>
|
<a permission="@Policies.CanModifyStoreSettings" id="SectionNav-@(nameof(StoreNavPages.Plugins))" class="nav-link @ViewData.IsActivePage(StoreNavPages.Plugins)" asp-controller="UIStores" asp-action="Plugins" asp-route-storeId="@storeId">Plugins</a>
|
||||||
<a permission="@Policies.CanModifyStoreSettings" id="SectionNav-@(nameof(StoreNavPages.Webhooks))" class="nav-link @ViewData.IsActivePage(StoreNavPages.Webhooks)" asp-controller="UIStores" asp-action="Webhooks" asp-route-storeId="@storeId">Webhooks</a>
|
<a permission="@Policies.CanModifyStoreSettings" id="SectionNav-@(nameof(StoreNavPages.Webhooks))" class="nav-link @ViewData.IsActivePage(StoreNavPages.Webhooks)" asp-controller="UIStores" asp-action="Webhooks" asp-route-storeId="@storeId">Webhooks</a>
|
||||||
<a permission="@Policies.CanModifyStoreSettings" id="SectionNav-PayoutProcessors" class="nav-link @ViewData.IsActivePage("PayoutProcessors")" asp-controller="UIPayoutProcessors" asp-action="ConfigureStorePayoutProcessors" asp-route-storeId="@storeId">Payout Processors</a>
|
<a permission="@Policies.CanModifyStoreSettings" id="SectionNav-@(nameof(StoreNavPages.PayoutProcessors))" class="nav-link @ViewData.IsActivePage(StoreNavPages.PayoutProcessors)" asp-controller="UIPayoutProcessors" asp-action="ConfigureStorePayoutProcessors" asp-route-storeId="@storeId">Payout Processors</a>
|
||||||
<a permission="@Policies.CanModifyStoreSettings" id="SectionNav-@(nameof(StoreNavPages.Emails))" class="nav-link @ViewData.IsActivePage(StoreNavPages.Emails)" asp-controller="UIStores" asp-action="StoreEmailSettings" asp-route-storeId="@storeId">Emails</a>
|
<a permission="@Policies.CanModifyStoreSettings" id="SectionNav-@(nameof(StoreNavPages.Emails))" class="nav-link @ViewData.IsActivePage(StoreNavPages.Emails)" asp-controller="UIStores" asp-action="StoreEmailSettings" asp-route-storeId="@storeId">Emails</a>
|
||||||
<vc:ui-extension-point location="store-nav" model="@Model"/>
|
<vc:ui-extension-point location="store-nav" model="@Model"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
Loading…
Add table
Reference in a new issue