Browse Source

create collection from add to collection dialog (#79)

pull/80/head
Jason Dove 5 years ago committed by GitHub
parent
commit
1773691c39
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 52
      ErsatzTV/Shared/AddToCollectionDialog.razor

52
ErsatzTV/Shared/AddToCollectionDialog.razor

@ -1,8 +1,11 @@
@using Microsoft.Extensions.Caching.Memory @using Microsoft.Extensions.Caching.Memory
@using ErsatzTV.Application.MediaCollections @using ErsatzTV.Application.MediaCollections
@using ErsatzTV.Application.MediaCollections.Commands
@using ErsatzTV.Application.MediaCollections.Queries @using ErsatzTV.Application.MediaCollections.Queries
@inject IMediator Mediator @inject IMediator Mediator
@inject IMemoryCache MemoryCache @inject IMemoryCache MemoryCache
@inject ISnackbar Snackbar
@inject ILogger<AddToCollectionDialog> Logger
<MudDialog> <MudDialog>
<DialogContent> <DialogContent>
@ -18,10 +21,16 @@
<MudSelectItem Value="@collection">@collection.Name</MudSelectItem> <MudSelectItem Value="@collection">@collection.Name</MudSelectItem>
} }
</MudSelect> </MudSelect>
<MudTextFieldString Label="New Collection Name"
Disabled="@(_selectedCollection != _newCollection)"
@bind-Text="@_newCollectionName"
Immediate="true"
Class="mb-6 mx-4">
</MudTextFieldString>
</DialogContent> </DialogContent>
<DialogActions> <DialogActions>
<MudButton OnClick="Cancel">Cancel</MudButton> <MudButton OnClick="Cancel">Cancel</MudButton>
<MudButton Color="Color.Primary" Variant="Variant.Filled" Disabled="@(_selectedCollection == null)" OnClick="Submit"> <MudButton Color="Color.Primary" Variant="Variant.Filled" Disabled="@(!CanSubmit())" OnClick="Submit">
Add To Collection Add To Collection
</MudButton> </MudButton>
</DialogActions> </DialogActions>
@ -44,25 +53,58 @@
[Parameter] [Parameter]
public string DetailHighlight { get; set; } public string DetailHighlight { get; set; }
private readonly MediaCollectionViewModel _newCollection = new(-1, "(New Collection)");
private string _newCollectionName;
private List<MediaCollectionViewModel> _collections; private List<MediaCollectionViewModel> _collections;
private MediaCollectionViewModel _selectedCollection; private MediaCollectionViewModel _selectedCollection;
private bool CanSubmit() =>
_selectedCollection != null && (_selectedCollection != _newCollection || !string.IsNullOrWhiteSpace(_newCollectionName));
protected override async Task OnParametersSetAsync() protected override async Task OnParametersSetAsync()
{ {
_collections = await Mediator.Send(new GetAllCollections()); _collections = await Mediator.Send(new GetAllCollections())
.Map(list => new[] { _newCollection }.Append(list).ToList());
if (MemoryCache.TryGetValue("AddToCollectionDialog.SelectedCollectionId", out int id)) if (MemoryCache.TryGetValue("AddToCollectionDialog.SelectedCollectionId", out int id))
{ {
_selectedCollection = _collections.SingleOrDefault(c => c.Id == id); _selectedCollection = _collections.SingleOrDefault(c => c.Id == id);
} }
else
{
_selectedCollection = _newCollection;
}
} }
private string FormatText() => $"Select the collection to add the {EntityType} {EntityName}"; private string FormatText() => $"Select the collection to add the {EntityType} {EntityName}";
private void Submit() private async Task Submit()
{ {
MemoryCache.Set("AddToCollectionDialog.SelectedCollectionId", _selectedCollection.Id); if (_selectedCollection == _newCollection)
MudDialog.Close(DialogResult.Ok(_selectedCollection)); {
Either<BaseError, MediaCollectionViewModel> maybeResult =
await Mediator.Send(new CreateCollection(_newCollectionName));
maybeResult.Match(
collection =>
{
MemoryCache.Set("AddToCollectionDialog.SelectedCollectionId", collection.Id);
MudDialog.Close(DialogResult.Ok(collection));
},
error =>
{
Snackbar.Add(error.Value, Severity.Error);
Logger.LogError("Error creating new collection: {Error}", error.Value);
MudDialog.Close(DialogResult.Cancel());
});
}
else
{
MemoryCache.Set("AddToCollectionDialog.SelectedCollectionId", _selectedCollection.Id);
MudDialog.Close(DialogResult.Ok(_selectedCollection));
}
} }
private void Cancel() => MudDialog.Cancel(); private void Cancel() => MudDialog.Cancel();

Loading…
Cancel
Save