
Centralized the code used to determine the available themes, panes, and containers. This isn't the most "ideal" way to handle this. However, it does improve the management of the code by centralizing the logic for theme selection. Future PR's development might improve this more.
179 lines
5.3 KiB
Plaintext
179 lines
5.3 KiB
Plaintext
@using Microsoft.AspNetCore.Components.Routing
|
|
@using Oqtane.Models
|
|
@using Oqtane.Services
|
|
@using Oqtane.Modules
|
|
@using Oqtane.Shared
|
|
@using Oqtane.Client.Modules.Controls
|
|
@inherits ModuleBase
|
|
@inject IUriHelper UriHelper
|
|
@inject IPageService PageService
|
|
@inject IThemeService ThemeService
|
|
|
|
<table class="form-group">
|
|
<tr>
|
|
<td>
|
|
<label for="Name" class="control-label">Name: </label>
|
|
</td>
|
|
<td>
|
|
<input class="form-control" bind="@name" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="Name" class="control-label">Path: </label>
|
|
</td>
|
|
<td>
|
|
<input class="form-control" bind="@path" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="Name" class="control-label">Parent: </label>
|
|
</td>
|
|
<td>
|
|
<select class="form-control" bind="@parentid">
|
|
<option value=""><Select Parent></option>
|
|
@foreach (Page p in PageState.Pages)
|
|
{
|
|
<option value="@p.PageId">@p.Name</option>
|
|
}
|
|
</select>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="Name" class="control-label">Order: </label>
|
|
</td>
|
|
<td>
|
|
<input class="form-control" bind="@order" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="Name" class="control-label">Navigation? </label>
|
|
</td>
|
|
<td>
|
|
<select class="form-control" bind="@isnavigation">
|
|
<option value="true">Yes</option>
|
|
<option value="false">No</option>
|
|
</select>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="Name" class="control-label">Theme: </label>
|
|
</td>
|
|
<td>
|
|
<select class="form-control" bind="@themetype">
|
|
<option value=""><Select Theme></option>
|
|
@foreach (KeyValuePair<string, string> item in themes)
|
|
{
|
|
<option value="@item.Key">@item.Value</option>
|
|
}
|
|
</select>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="Name" class="control-label">Layout: </label>
|
|
</td>
|
|
<td>
|
|
<select class="form-control" bind="@layouttype">
|
|
<option value=""><Select Layout></option>
|
|
@foreach (KeyValuePair<string, string> panelayout in panelayouts)
|
|
{
|
|
<option value="@panelayout.Key">@panelayout.Value</option>
|
|
}
|
|
</select>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="Name" class="control-label">Icon: </label>
|
|
</td>
|
|
<td>
|
|
<input class="form-control" bind="@icon" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="Name" class="control-label">View Permissions: </label>
|
|
</td>
|
|
<td>
|
|
<input class="form-control" bind="@viewpermissions" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="Name" class="control-label">Edit Permissions: </label>
|
|
</td>
|
|
<td>
|
|
<input class="form-control" bind="@editpermissions" />
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<button class="btn btn-success" onclick="@SavePage">Save</button>
|
|
<NavLink class="btn btn" href="@NavigateUrl()">Cancel</NavLink>
|
|
|
|
@functions {
|
|
public override SecurityAccessLevelEnum SecurityAccessLevel { get { return SecurityAccessLevelEnum.Admin; } }
|
|
|
|
Dictionary<string, string> themes = new Dictionary<string, string>();
|
|
Dictionary<string, string> panelayouts = new Dictionary<string, string>();
|
|
|
|
string name;
|
|
string path;
|
|
string parentid;
|
|
string order = "";
|
|
string isnavigation = "True";
|
|
string themetype;
|
|
string layouttype = "";
|
|
string icon = "";
|
|
string viewpermissions = "All Users";
|
|
string editpermissions = "Administrators";
|
|
|
|
protected override async Task OnInitAsync()
|
|
{
|
|
var Themes = await ThemeService.GetThemesAsync();
|
|
themes = ThemeService.CalculateSelectableThemes(Themes);
|
|
panelayouts = ThemeService.CalculateSelectablePaneLayouts(Themes);
|
|
}
|
|
|
|
private async Task SavePage()
|
|
{
|
|
Page p = new Page();
|
|
p.SiteId = PageState.Page.SiteId;
|
|
if (string.IsNullOrEmpty(parentid))
|
|
{
|
|
p.ParentId = null;
|
|
}
|
|
else
|
|
{
|
|
p.ParentId = Int32.Parse(parentid);
|
|
}
|
|
p.Name = name;
|
|
p.Path = path;
|
|
p.Order = (order == null ? 1 : Int32.Parse(order));
|
|
p.IsNavigation = (isnavigation == null ? true : Boolean.Parse(isnavigation));
|
|
p.ThemeType = themetype;
|
|
p.LayoutType = (layouttype == null ? "" : layouttype);
|
|
p.Icon = (icon == null ? "" : icon);
|
|
Type type;
|
|
if (!string.IsNullOrEmpty(layouttype))
|
|
{
|
|
type = Type.GetType(layouttype);
|
|
}
|
|
else
|
|
{
|
|
type = Type.GetType(themetype);
|
|
}
|
|
System.Reflection.PropertyInfo property = type.GetProperty("Panes");
|
|
p.Panes = (string)property.GetValue(Activator.CreateInstance(type), null);
|
|
p.ViewPermissions = viewpermissions;
|
|
p.EditPermissions = editpermissions;
|
|
await PageService.AddPageAsync(p);
|
|
StateHasChanged();
|
|
UriHelper.NavigateTo(NavigateUrl(path, true));
|
|
}
|
|
}
|