Add deleting bookmarks

This commit is contained in:
Neil Brommer 2021-12-16 10:46:22 -08:00
parent 07a3245bfc
commit 93888369ce
10 changed files with 266 additions and 5 deletions

View file

@ -0,0 +1,33 @@
using Start.Shared;
namespace Start.Client.Store.Features.DeleteBookmark {
public class ShowDeleteBookmarkFormAction {
public BookmarkDto BookmarkToDelete { get; init; }
public ShowDeleteBookmarkFormAction(BookmarkDto bookmarkToDelete) {
this.BookmarkToDelete = bookmarkToDelete;
}
}
public class HideDeleteBookmarkFormAction { }
public class FetchDeleteBookmarkAction { }
public class RecievedDeleteBookmarkAction { }
public class ErrorFetchingDeleteBookmarkAction {
public string ErrorMessage { get; init; }
public ErrorFetchingDeleteBookmarkAction(string errorMessage) {
this.ErrorMessage = errorMessage;
}
}
public class SubmitDeleteBookmarkFormAction {
public int BookmarkIdToDelete { get; init; }
public SubmitDeleteBookmarkFormAction(int bookmarkIdToDelete) {
this.BookmarkIdToDelete = bookmarkIdToDelete;
}
}
}

View file

@ -0,0 +1,50 @@
using System.Threading.Tasks;
using Fluxor;
using Microsoft.AspNetCore.Components.WebAssembly.Authentication;
using Start.Client.Store.Features.CurrentContainer;
using Start.Shared.Api;
namespace Start.Client.Store.Features.DeleteBookmark {
public class DeleteBookmarkEffects {
public IBookmarksApi BookmarksApi { get; init; }
public DeleteBookmarkEffects(IBookmarksApi bookmarksApi) {
this.BookmarksApi = bookmarksApi;
}
[EffectMethod]
public async Task SubmitDeleteBookmarkForm(SubmitDeleteBookmarkFormAction action,
IDispatcher dispatch) {
dispatch.Dispatch(new FetchDeleteBookmarkAction());
try {
System.Net.Http.HttpResponseMessage? apiResponse = await this.BookmarksApi
.DeleteBookmark(action.BookmarkIdToDelete);
if (apiResponse == null) {
dispatch.Dispatch(new ErrorFetchingDeleteBookmarkAction(
"Failed to make submit request"));
return;
}
if (apiResponse.StatusCode == System.Net.HttpStatusCode.NotFound) {
dispatch.Dispatch(new ErrorFetchingDeleteBookmarkAction(
"The bookmark to delete doesn't exist"));
return;
}
if (!apiResponse.IsSuccessStatusCode) {
dispatch.Dispatch(new ErrorFetchingDeleteBookmarkAction(
"There was an error deleting the bookmark"));
return;
}
dispatch.Dispatch(new RemoveBookmarkAction(action.BookmarkIdToDelete));
dispatch.Dispatch(new RecievedDeleteBookmarkAction());
dispatch.Dispatch(new HideDeleteBookmarkFormAction());
} catch (AccessTokenNotAvailableException e) {
e.Redirect();
}
}
}
}

View file

@ -0,0 +1,11 @@
using Fluxor;
namespace Start.Client.Store.Features.DeleteBookmark {
public class DeleteBookmarkFeature : Feature<DeleteBookmarkState> {
public override string GetName() => "Delete Bookmark";
protected override DeleteBookmarkState GetInitialState() {
return new DeleteBookmarkState();
}
}
}

View file

@ -0,0 +1,39 @@
using Fluxor;
namespace Start.Client.Store.Features.DeleteBookmark {
public static class DeleteBookmarkReducers {
[ReducerMethod]
public static DeleteBookmarkState ShowDeleteBookmarkForm(DeleteBookmarkState state,
ShowDeleteBookmarkFormAction action) {
return state with {
ShowDeleteBookmarkForm = true,
BookmarkToDelete = action.BookmarkToDelete,
IsLoadingDeleteBookmark = false,
DeleteBookmarkErrorMessage = null
};
}
[ReducerMethod(typeof(HideDeleteBookmarkFormAction))]
public static DeleteBookmarkState HideDeleteBookmarkForm(DeleteBookmarkState state) {
return state with {
ShowDeleteBookmarkForm = false
};
}
[ReducerMethod(typeof(FetchDeleteBookmarkAction))]
public static DeleteBookmarkState FetchDeleteBookmark(DeleteBookmarkState state) {
return state with {
IsLoadingDeleteBookmark = true,
DeleteBookmarkErrorMessage = null
};
}
[ReducerMethod(typeof(RecievedDeleteBookmarkAction))]
public static DeleteBookmarkState RecievedDeleteBookmark(DeleteBookmarkState state) {
return state with {
IsLoadingDeleteBookmark = false,
DeleteBookmarkErrorMessage = null
};
}
}
}

View file

@ -0,0 +1,21 @@
using Start.Client.Store.State;
using Start.Shared;
namespace Start.Client.Store.Features.DeleteBookmark {
public record DeleteBookmarkState : RootState {
public bool ShowDeleteBookmarkForm { get; init; }
public BookmarkDto? BookmarkToDelete { get; init; }
public bool IsLoadingDeleteBookmark { get; init; }
public string? DeleteBookmarkErrorMessage { get; init; }
public DeleteBookmarkState() { }
public DeleteBookmarkState(bool showDeleteBookmarkForm, BookmarkDto bookmarkToDelete,
bool isLoadingDeleteBookmark, string? deleteBookmarkErrorMessage) {
this.ShowDeleteBookmarkForm = showDeleteBookmarkForm;
this.BookmarkToDelete = bookmarkToDelete;
this.IsLoadingDeleteBookmark = isLoadingDeleteBookmark;
this.DeleteBookmarkErrorMessage = deleteBookmarkErrorMessage;
}
}
}