Add project files.
This commit is contained in:
@@ -0,0 +1,30 @@
|
||||
@using Elsa.Studio.Contracts
|
||||
@inherits LayoutComponentBase
|
||||
@implements IDisposable
|
||||
@inject IThemeService ThemeService
|
||||
|
||||
<MudThemeProvider Theme="CurrentTheme" IsDarkMode="@true"/>
|
||||
<MudSnackbarProvider/>
|
||||
<MudPopoverProvider/>
|
||||
|
||||
<MudLayout>
|
||||
@Body
|
||||
</MudLayout>
|
||||
|
||||
@code {
|
||||
|
||||
private MudTheme CurrentTheme => ThemeService.CurrentTheme;
|
||||
|
||||
protected override void OnInitialized()
|
||||
{
|
||||
ThemeService.CurrentThemeChanged += OnThemeChanged;
|
||||
StateHasChanged();
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
ThemeService.CurrentThemeChanged -= OnThemeChanged;
|
||||
}
|
||||
|
||||
private void OnThemeChanged() => StateHasChanged();
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
@inherits LayoutComponentBase
|
||||
|
||||
<MudThemeProvider IsDarkMode="@IsDarkMode" Theme="CurrentTheme"/>
|
||||
<MudPopoverProvider/>
|
||||
<MudDialogProvider/>
|
||||
<MudSnackbarProvider/>
|
||||
|
||||
<MudLayout>
|
||||
<MudAppBar Elevation="0" Color="Color.Inherit">
|
||||
<MudIconButton Icon="@Icons.Material.Filled.Menu" Color="Color.Inherit" Edge="Edge.Start" OnClick="@DrawerToggle"/>
|
||||
<MudSpacer/>
|
||||
@foreach (var appBarItem in AppBarService.AppBarItems)
|
||||
{
|
||||
@appBarItem
|
||||
}
|
||||
|
||||
<MudIconButton Icon="@Icons.Material.Outlined.Book" Color="Color.Inherit" Href="https://v3.elsaworkflows.io/" Target="_blank" Title="Documentation"/>
|
||||
<MudIconButton Icon="@Icons.Custom.Brands.GitHub" Color="Color.Inherit" Href="https://github.com/elsa-workflows/elsa-core" Target="_blank" Title="Source code"/>
|
||||
|
||||
@if (IsDarkMode)
|
||||
{
|
||||
<MudToggleIconButton Icon="@Icons.Material.Outlined.LightMode" Color="Color.Inherit" @onclick="@ToggleDarkMode"></MudToggleIconButton>
|
||||
}
|
||||
else
|
||||
{
|
||||
<MudToggleIconButton Icon="@Icons.Material.Outlined.DarkMode" Color="Color.Inherit" @onclick="@ToggleDarkMode"></MudToggleIconButton>
|
||||
}
|
||||
|
||||
<MudIconButton Icon="@Icons.Material.Outlined.Info" Color="Color.Inherit" @onclick="@ShowProductInfo"/>
|
||||
</MudAppBar>
|
||||
<MudDrawer @bind-Open="_drawerOpen" Elevation="0" ClipMode="DrawerClipMode.Always">
|
||||
<MudDrawerHeader>
|
||||
@BrandingProvider.Branding
|
||||
</MudDrawerHeader>
|
||||
<div class="mt-10">
|
||||
<NavMenu/>
|
||||
</div>
|
||||
</MudDrawer>
|
||||
<MudMainContent>
|
||||
<ErrorBoundary @ref="@_errorBoundary">
|
||||
<ChildContent>
|
||||
@Body
|
||||
</ChildContent>
|
||||
<ErrorContent>
|
||||
@if (context is UnauthorizedAccessException)
|
||||
{
|
||||
@UnauthorizedComponent
|
||||
}
|
||||
else
|
||||
{
|
||||
<Well>
|
||||
<MudAlert Severity="Severity.Error" Variant="Variant.Filled">
|
||||
@context.GetType().Name: @context.Message
|
||||
</MudAlert>
|
||||
</Well>
|
||||
}
|
||||
</ErrorContent>
|
||||
</ErrorBoundary>
|
||||
|
||||
</MudMainContent>
|
||||
</MudLayout>
|
||||
@@ -0,0 +1,94 @@
|
||||
using Blazored.LocalStorage;
|
||||
using Elsa.Studio.Branding;
|
||||
using Elsa.Studio.Components;
|
||||
using Elsa.Studio.Contracts;
|
||||
using Elsa.Studio.Extensions;
|
||||
using Elsa.Studio.Services;
|
||||
using Microsoft.AspNetCore.Components;
|
||||
using Microsoft.AspNetCore.Components.Authorization;
|
||||
using Microsoft.AspNetCore.Components.Web;
|
||||
using MudBlazor;
|
||||
|
||||
namespace Elsa.Studio.Layouts;
|
||||
|
||||
/// <summary>
|
||||
/// The main layout for the application.
|
||||
/// </summary>
|
||||
public partial class MainLayout : IDisposable
|
||||
{
|
||||
private bool _drawerOpen = true;
|
||||
private ErrorBoundary? _errorBoundary;
|
||||
|
||||
[Inject] private IThemeService ThemeService { get; set; } = null!;
|
||||
[Inject] private IAppBarService AppBarService { get; set; } = null!;
|
||||
[Inject] private IUnauthorizedComponentProvider UnauthorizedComponentProvider { get; set; } = null!;
|
||||
[Inject] private IFeatureService FeatureService { get; set; } = null!;
|
||||
[Inject] private IDialogService DialogService { get; set; } = null!;
|
||||
[Inject] private IBrandingProvider BrandingProvider { get; set; } = null!;
|
||||
[Inject] private IServiceProvider ServiceProvider { get; set; } = null!;
|
||||
[CascadingParameter] private Task<AuthenticationState>? AuthenticationState { get; set; }
|
||||
private MudTheme CurrentTheme => ThemeService.CurrentTheme;
|
||||
private bool IsDarkMode => ThemeService.IsDarkMode;
|
||||
private RenderFragment UnauthorizedComponent => UnauthorizedComponentProvider.GetUnauthorizedComponent();
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void OnInitialized()
|
||||
{
|
||||
ThemeService.CurrentThemeChanged += OnThemeChanged;
|
||||
AppBarService.AppBarItemsChanged += OnAppBarItemsChanged;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
if (AuthenticationState != null)
|
||||
{
|
||||
var authState = await AuthenticationState;
|
||||
if (authState.User.Identity?.IsAuthenticated == true && !authState.User.Claims.IsExpired())
|
||||
{
|
||||
await FeatureService.InitializeFeaturesAsync();
|
||||
StateHasChanged();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
await FeatureService.InitializeFeaturesAsync();
|
||||
StateHasChanged();
|
||||
}
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void OnParametersSet()
|
||||
{
|
||||
_errorBoundary?.Recover();
|
||||
}
|
||||
|
||||
private void OnThemeChanged() => StateHasChanged();
|
||||
private void OnAppBarItemsChanged() => InvokeAsync(StateHasChanged);
|
||||
|
||||
private void DrawerToggle()
|
||||
{
|
||||
_drawerOpen = !_drawerOpen;
|
||||
}
|
||||
|
||||
private void ToggleDarkMode()
|
||||
{
|
||||
ThemeService.IsDarkMode = !ThemeService.IsDarkMode;
|
||||
}
|
||||
|
||||
private async Task ShowProductInfo()
|
||||
{
|
||||
await DialogService.ShowAsync<ProductInfoDialog>($"Elsa Studio {ToolVersion.GetDisplayVersion()}", new DialogOptions
|
||||
{
|
||||
FullWidth = true,
|
||||
MaxWidth = MaxWidth.ExtraSmall,
|
||||
CloseButton = true,
|
||||
CloseOnEscapeKey = true
|
||||
});
|
||||
}
|
||||
|
||||
void IDisposable.Dispose()
|
||||
{
|
||||
ThemeService.CurrentThemeChanged -= OnThemeChanged;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user