Files
SharpIDE/src/SharpIDE.Photino/Components/RunPanel.razor
Matt Parker 163b11e6f2 fix warnings
2025-08-10 01:31:10 +10:00

77 lines
2.1 KiB
Plaintext

@using SharpIDE.Application.Features.Events
@using SharpIDE.Application.Features.Run
@using SharpIDE.Application.Features.SolutionDiscovery.VsPersistence
@implements IDisposable
@inject RunService RunService
<MudStack Style="height: 100%">
<style>
.lowercase-tab-header {
text-transform: none;
}
.panels-full-height {
height: 100%;
}
</style>
@* <MudText>Run</MudText> *@
<MudTabs @ref="_mudTabsRef" Style="height: 100%" KeepPanelsAlive="true" PanelClass="panels-full-height" TabPanelClass="lowercase-tab-header">
<ChildContent>
@foreach (var tab in OpenTabs)
{
<MudTabPanel Style="height: 100%" ID="@tab" Text="@tab.Name">
<RunOutputDisplay Project="@tab" OnProjectStarted="@SetActiveTab"/>
</MudTabPanel>
}
</ChildContent>
<TabPanelHeader>
@if (context.ID is SharpIdeProjectModel project)
{
@if (project.Running)
{
<MudIcon Icon="@Icons.Material.Filled.Circle" Class="pa-1" Size="Size.Small" Color="Color.Success"/>
}
else
{
<MudIconButton Color="Color.Inherit" Class="pa-0" Size="Size.Small" Icon="@Icons.Material.Filled.Close" OnClick="@(() => CloseTab(project))"/>
}
}
else throw new InvalidOperationException("Tab ID must be of type SharpIdeProjectModel");
</TabPanelHeader>
</MudTabs>
</MudStack>
@code {
[Parameter, EditorRequired]
public SharpIdeSolutionModel SolutionModel { get; set; } = null!;
private MudTabs _mudTabsRef = null!;
private IEnumerable<SharpIdeProjectModel> OpenTabs => SolutionModel.AllProjects.Where(s => s.OpenInRunPanel);
protected override async Task OnInitializedAsync()
{
var tasks = SolutionModel.AllProjects.Select(p => p.MsBuildEvaluationProjectTask);
await Task.WhenAll(tasks);
GlobalEvents.ProjectsRunningChanged += OnProjectsRunningChanged;
}
private void CloseTab(SharpIdeProjectModel project)
{
project.OpenInRunPanel = false;
}
private async Task OnProjectsRunningChanged()
{
await InvokeAsync(StateHasChanged);
}
public void Dispose() => GlobalEvents.ProjectsRunningChanged -= OnProjectsRunningChanged;
private void SetActiveTab(SharpIdeProjectModel project)
{
_mudTabsRef.ActivatePanel(project);
}
}