Add deleting bookmarks
This commit is contained in:
parent
07a3245bfc
commit
93888369ce
10 changed files with 266 additions and 5 deletions
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue