Ensured tags deleted are not removed from list until modal has been hidden

This commit is contained in:
Alejandro Celaya
2022-11-07 22:19:44 +01:00
parent 0571a4a88f
commit dbb08a6ce0
4 changed files with 20 additions and 17 deletions

View File

@@ -13,15 +13,14 @@ interface DeleteTagConfirmModalProps extends TagModalProps {
export const DeleteTagConfirmModal = (
{ tag, toggle, isOpen, deleteTag, tagDelete, tagDeleted }: DeleteTagConfirmModalProps,
) => {
const { deleting, error, errorData } = tagDelete;
const { deleting, error, deleted, errorData } = tagDelete;
const doDelete = async () => {
await deleteTag(tag);
tagDeleted(tag);
toggle();
};
return (
<Modal toggle={toggle} isOpen={isOpen} centered>
<Modal toggle={toggle} isOpen={isOpen} centered onClosed={() => deleted && tagDeleted(tag)}>
<ModalHeader toggle={toggle} className="text-danger">Delete tag</ModalHeader>
<ModalBody>
Are you sure you want to delete tag <b>{tag}</b>?

View File

@@ -13,6 +13,7 @@ export const TAG_DELETED = 'shlink/deleteTag/TAG_DELETED';
export interface TagDeletion {
deleting: boolean;
deleted: boolean;
error: boolean;
errorData?: ProblemDetailsError;
}
@@ -23,13 +24,14 @@ export interface DeleteTagAction extends Action<string> {
const initialState: TagDeletion = {
deleting: false,
deleted: false,
error: false,
};
export default buildReducer<TagDeletion, ApiErrorAction>({
[DELETE_TAG_START]: () => ({ deleting: true, error: false }),
[DELETE_TAG_ERROR]: (_, { errorData }) => ({ deleting: false, error: true, errorData }),
[DELETE_TAG]: () => ({ deleting: false, error: false }),
[DELETE_TAG_START]: () => ({ deleting: true, deleted: false, error: false }),
[DELETE_TAG_ERROR]: (_, { errorData }) => ({ deleting: false, deleted: false, error: true, errorData }),
[DELETE_TAG]: () => ({ deleting: false, deleted: true, error: false }),
}, initialState);
export const deleteTag = (buildShlinkApiClient: ShlinkApiClientBuilder) => (tag: string) => async (