180 lines
5.5 KiB
C#
180 lines
5.5 KiB
C#
|
using BlueWest.Views.Controllers;
|
||
|
using BlueWest.Views.Controllers.Data;
|
||
|
using Microsoft.AspNetCore.Mvc.ViewFeatures;
|
||
|
|
||
|
namespace BlueWest.Views.Utils;
|
||
|
|
||
|
internal class LayoutCache
|
||
|
{
|
||
|
#region Route Tree
|
||
|
|
||
|
private static readonly RouteRecord Root = new RouteRecord(
|
||
|
RootKeyName,
|
||
|
RootLocation,
|
||
|
nameof(HomeController),
|
||
|
new List<RouteRecord>()
|
||
|
{
|
||
|
new RouteRecord(
|
||
|
DataKeyName,
|
||
|
DataLocation,
|
||
|
nameof(DataController),
|
||
|
new List<RouteRecord>()
|
||
|
{
|
||
|
new RouteRecord(
|
||
|
CompaniesKeyName,
|
||
|
CompaniesLocation,
|
||
|
nameof(CompaniesController),
|
||
|
new List<RouteRecord>()
|
||
|
),
|
||
|
new RouteRecord(
|
||
|
CountriesKeyName,
|
||
|
CountriesLocation,
|
||
|
nameof(CountriesController),
|
||
|
new List<RouteRecord>()
|
||
|
),
|
||
|
new RouteRecord(
|
||
|
CurrenciesKeyName,
|
||
|
CurrenciesLocation,
|
||
|
nameof(CurrenciesController),
|
||
|
new List<RouteRecord>()
|
||
|
),
|
||
|
new RouteRecord(
|
||
|
BanksKeyName,
|
||
|
BanksLocation,
|
||
|
nameof(BanksController),
|
||
|
new List<RouteRecord>()
|
||
|
),
|
||
|
new RouteRecord(
|
||
|
DataUsersKeyName,
|
||
|
DataUsersLocation,
|
||
|
nameof(DataUsersController),
|
||
|
new List<RouteRecord>()
|
||
|
),
|
||
|
|
||
|
},
|
||
|
ViewType.Data
|
||
|
),
|
||
|
new RouteRecord(
|
||
|
SystemKeyName,
|
||
|
SystemRouteLocation,
|
||
|
nameof(SystemController),
|
||
|
new List<RouteRecord>()
|
||
|
{
|
||
|
new RouteRecord(
|
||
|
RolesKeyName,
|
||
|
RolesLocation,
|
||
|
nameof(RolesController),
|
||
|
new List<RouteRecord>()
|
||
|
),
|
||
|
new RouteRecord(
|
||
|
ApplicationUsersKeyName,
|
||
|
ApplicationUsersLocation,
|
||
|
nameof(ApplicationUsersController),
|
||
|
new List<RouteRecord>()
|
||
|
),
|
||
|
new RouteRecord(
|
||
|
LogsKeyName,
|
||
|
LogsLocation,
|
||
|
nameof(LogsController),
|
||
|
new List<RouteRecord>()
|
||
|
)
|
||
|
},
|
||
|
ViewType.System
|
||
|
),
|
||
|
new RouteRecord(
|
||
|
JobsKeyName,
|
||
|
JobsRouteLocation,
|
||
|
nameof(JobsController),
|
||
|
new List<RouteRecord>(),
|
||
|
ViewType.Jobs
|
||
|
),
|
||
|
}, ViewType.Root);
|
||
|
|
||
|
#endregion Route Tree
|
||
|
|
||
|
#region Routing Utils
|
||
|
|
||
|
internal static readonly RouteRecord SystemRoute =
|
||
|
Root.Children.FirstOrDefault(x => x.ViewType == ViewType.System)!;
|
||
|
|
||
|
internal static readonly RouteRecord DataRoute =
|
||
|
Root.Children.FirstOrDefault(x => x.ViewType == ViewType.Data)!;
|
||
|
|
||
|
internal static readonly RouteRecord JobRoute =
|
||
|
Root.Children.FirstOrDefault(x => x.ViewType == ViewType.Jobs)!;
|
||
|
|
||
|
internal static readonly RouteRecord ProfileRoute =
|
||
|
Root.Children.FirstOrDefault(x => x.ViewType == ViewType.Profile)!;
|
||
|
|
||
|
#endregion Routing Utils
|
||
|
|
||
|
#region Internal Menus
|
||
|
|
||
|
internal static List<RouteView> GetDefaultFooterMenu(ViewDataDictionary dictionary)
|
||
|
{
|
||
|
var location = GetLocation(dictionary);
|
||
|
|
||
|
var menu = LayoutCache
|
||
|
.Root
|
||
|
.Children;
|
||
|
|
||
|
if (dictionary[FooterMenuId] is List<RouteRecord> footerMenu)
|
||
|
{
|
||
|
menu = footerMenu;
|
||
|
}
|
||
|
|
||
|
return menu
|
||
|
.Select(x =>
|
||
|
{
|
||
|
if (Translation[x.routeKey].ContainsKey(location))
|
||
|
{
|
||
|
return new RouteView(Translation[x.routeKey][location],
|
||
|
location);
|
||
|
}
|
||
|
return new RouteView(Translation[x.routeKey][DefaultCultureName],
|
||
|
x.location);
|
||
|
|
||
|
})
|
||
|
|
||
|
.ToList();
|
||
|
|
||
|
}
|
||
|
|
||
|
internal static List<RouteView> GetDefaultHeaderMenu(ViewDataDictionary dictionary)
|
||
|
{
|
||
|
var location = GetLocation(dictionary);
|
||
|
|
||
|
var menu = LayoutCache
|
||
|
.Root
|
||
|
.Children;
|
||
|
|
||
|
if (dictionary[HeaderMenuId] is List<RouteRecord> footerMenu)
|
||
|
{
|
||
|
menu = footerMenu;
|
||
|
}
|
||
|
|
||
|
return menu
|
||
|
.Select(x =>
|
||
|
{
|
||
|
if (Translation[x.routeKey].ContainsKey(location))
|
||
|
{
|
||
|
return new RouteView(Translation[x.routeKey][location],
|
||
|
x.Location);
|
||
|
}
|
||
|
return new RouteView(Translation[x.routeKey][DefaultCultureName],
|
||
|
x.location);
|
||
|
|
||
|
})
|
||
|
|
||
|
.ToList();
|
||
|
}
|
||
|
|
||
|
internal static string GetLocation(ViewDataDictionary dictionary)
|
||
|
{
|
||
|
return (dictionary[LanguageViewStorage] as string)!;
|
||
|
}
|
||
|
|
||
|
|
||
|
#endregion Internal Menus
|
||
|
|
||
|
}
|