BlazorStart/Start/Client/Store/Features/CreateContainer/CreateContainerEffects.cs

58 lines
1.8 KiB
C#
Raw Permalink Normal View History

2021-12-04 00:44:02 +00:00
using System.Threading.Tasks;
using Fluxor;
using Microsoft.AspNetCore.Components.WebAssembly.Authentication;
using Refit;
using Start.Shared;
using Start.Shared.Api;
using Start.Client.Store.Features.ContainersList;
2022-04-19 20:04:38 +00:00
using System.Collections.Generic;
using System.Linq;
2021-12-04 00:44:02 +00:00
namespace Start.Client.Store.Features.CreateContainer {
public class CreateContainerEffects {
2021-12-05 23:50:48 +00:00
public IBookmarkContainersApi BookmarkContainersApi { get; init; }
2021-12-04 00:44:02 +00:00
public CreateContainerEffects(IBookmarkContainersApi bookmarkContainersApi) {
this.BookmarkContainersApi = bookmarkContainersApi;
}
[EffectMethod]
public async Task SubmitCreateContainer(SubmitCreateContainerAction action,
IDispatcher dispatch) {
dispatch.Dispatch(new FetchCreateContainerAction());
try {
2022-04-19 20:04:38 +00:00
ApiResponse<IEnumerable<BookmarkContainerDto>>? containersResponse = await this
.BookmarkContainersApi
.GetAllBookmarkContainers();
if (containersResponse == null || containersResponse.Content == null) {
dispatch.Dispatch(new ErrorFetchingCreateContainerAction(
"There was an error checking bookmark containers"));
return;
}
int sortOrder = !containersResponse.Content.Any()
? 0
: containersResponse.Content.Max(c => c.SortOrder) + 1;
2021-12-04 00:44:02 +00:00
ApiResponse<BookmarkContainerDto?> apiResponse = await this.BookmarkContainersApi
2022-04-19 20:04:38 +00:00
.CreateBookmarkContainer(action.NewContainer.Title, sortOrder);
2021-12-04 00:44:02 +00:00
BookmarkContainerDto? container = apiResponse.Content;
2021-12-05 23:50:48 +00:00
if (container == null) {
2021-12-04 00:44:02 +00:00
dispatch.Dispatch(new ErrorFetchingCreateContainerAction(
"Failed to create container"));
2021-12-05 23:50:48 +00:00
return;
2021-12-04 00:44:02 +00:00
}
2021-12-05 23:50:48 +00:00
dispatch.Dispatch(new AddContainerToListAction(container));
dispatch.Dispatch(new ReceivedCreateContainerAction());
2021-12-04 00:44:02 +00:00
} catch (AccessTokenNotAvailableException e) {
e.Redirect();
}
}
}
}