CodeLiturgy.Dashboard/BlueWest.Views/Utils/LayoutCache.cs

180 lines
5.5 KiB
C#
Raw Normal View History

2022-09-26 04:05:23 +03:00
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
}