- Move all Launcher components to LANCommander.Launcher.UI namespace - Move all SCSS files next to components (when possible) - Refactor styles that control overflow of content into titlebar to MainWindow only - Remove use in launcher UI of SDK.Client
83 lines
No EOL
2.8 KiB
Text
83 lines
No EOL
2.8 KiB
Text
@using LANCommander.Launcher.Data.Models
|
|
@using LANCommander.SDK.Enums
|
|
@namespace LANCommander.Launcher.UI
|
|
@inherits FeedbackComponent<Models.ListItem, string>
|
|
@inject LibraryService LibraryService
|
|
@inject IMessageService MessageService
|
|
@inject ILogger<RemoveFromLibraryDialog> Logger
|
|
@inject LocalizationService LocalizationService
|
|
|
|
<div class="remove-from-library-dialog" style="padding: 16px;">
|
|
<div class="game-item">
|
|
<div class="icon">
|
|
<MediaImage Id="@Options.IconId" />
|
|
</div>
|
|
<span class="title-pre">@LocalizationService.GetString("BaseGame")</span>
|
|
<span class="title">@Options.Name</span>
|
|
</div>
|
|
|
|
@if (DependentGames.Any())
|
|
{
|
|
<Divider Text="@LocalizationService.GetString("AddonsToRemove")" Orientation="DividerOrientation.Left" Plain />
|
|
|
|
<CheckboxButtonGroup @bind-Selected="SelectedDependentGames" DataSource="DependentGames"
|
|
KeySelector="a => a.Id"
|
|
LabelSelector="a => a.Title"
|
|
Direction="SpaceDirection.Vertical"
|
|
IconSelected="@IconType.Outline.Close"
|
|
IconUnselected="@IconType.Fill.Pushpin"
|
|
ButtonPropsSelected="@(new[] { ("Danger", (object)true) })"
|
|
DisableSelector="g => g.Type == GameType.Mod || g.Type == GameType.Expansion"
|
|
/>
|
|
}
|
|
|
|
</div>
|
|
|
|
<Flex Gap="FlexGap.Middle" Style="padding: 16px; padding-top: 0px" Justify="FlexJustify.FlexEnd">
|
|
<Button Type="ButtonType.Primary" OnClick="RemoveFromLibrary">@LocalizationService.GetString("Remove")</Button>
|
|
<Button OnClick="() => Close()">@LocalizationService.GetString("Close")</Button>
|
|
</Flex>
|
|
|
|
@code {
|
|
Data.Models.Game? Game;
|
|
List<Data.Models.Game> DependentGames = new();
|
|
|
|
IEnumerable<Data.Models.Game> SelectedDependentGames = [];
|
|
|
|
protected override void OnInitialized()
|
|
{
|
|
base.OnInitialized();
|
|
|
|
Game = (Game)Options.DataItem;
|
|
DependentGames = Game?.DependentGames.OrderBy(g => g.SortTitle ?? g.Title).ToList() ?? [];
|
|
|
|
SelectedDependentGames = DependentGames?.Where(g => g.Type == GameType.Expansion || g.Type == GameType.Mod) ?? [];
|
|
}
|
|
|
|
async Task Close()
|
|
{
|
|
await CloseFeedbackAsync();
|
|
}
|
|
|
|
async Task RemoveFromLibrary()
|
|
{
|
|
if (Options.DataItem is Game game)
|
|
{
|
|
try
|
|
{
|
|
|
|
var addonIds = SelectedDependentGames?.Select(a => a.Id).ToArray() ?? [];
|
|
|
|
await LibraryService.RemoveFromLibraryAsync(game!.Id, addonIds);
|
|
await LibraryService.RefreshItemsAsync(true);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageService.Error(LocalizationService.GetString("CouldNotRemoveGame"));
|
|
Logger?.LogError(ex, "Could not remove game {GameTitle}", game.Title);
|
|
}
|
|
}
|
|
|
|
await CloseFeedbackAsync();
|
|
}
|
|
} |