84 lines
No EOL
2.7 KiB
Text
84 lines
No EOL
2.7 KiB
Text
@using LANCommander.Launcher.Data.Models
|
|
@using LANCommander.Launcher.Models
|
|
@using LANCommander.SDK.Extensions
|
|
@inherits FeedbackComponent<Models.ListItem, string>
|
|
@inject LibraryService LibraryService
|
|
@inject IMessageService MessageService
|
|
@inject ILogger<RemoveFromLibraryDialog> Logger
|
|
|
|
<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">Base Game</span>
|
|
<span class="title">@Options.Name</span>
|
|
</div>
|
|
|
|
@if (DependentGames.Any())
|
|
{
|
|
<Divider Text="Addons to remove" 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 == Data.Enums.GameType.Mod || g.Type == Data.Enums.GameType.Expansion"
|
|
/>
|
|
}
|
|
|
|
</div>
|
|
|
|
<Flex Gap="FlexGap.Middle" Style="padding: 16px; padding-top: 0px" Justify="FlexJustify.FlexEnd">
|
|
<Button Type="ButtonType.Primary" OnClick="RemoveFromLibrary">Remove</Button>
|
|
<Button OnClick="() => Close()">Close</Button>
|
|
</Flex>
|
|
|
|
@code {
|
|
Settings Settings = SettingService.GetSettings();
|
|
|
|
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 == Data.Enums.GameType.Expansion || g.Type == Data.Enums.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("Could not remove game");
|
|
Logger?.LogError(ex, "Could not remove game {GameTitle}", game.Title);
|
|
}
|
|
}
|
|
|
|
await CloseFeedbackAsync();
|
|
}
|
|
} |