feat(donorsoverview): Implemented delete confirmation with datatable
This commit is contained in:
parent
d98fb0d5b2
commit
7aec050419
@ -1,7 +1,7 @@
|
|||||||
<script>
|
<script>
|
||||||
import { _ } from "svelte-i18n";
|
import { _ } from "svelte-i18n";
|
||||||
import { clickOutside } from "../base/outsideclick";
|
import { clickOutside } from "../base/outsideclick";
|
||||||
|
|
||||||
import { DonorService } from "@odit/lfk-client-js";
|
import { DonorService } from "@odit/lfk-client-js";
|
||||||
import Toastify from "toastify-js";
|
import Toastify from "toastify-js";
|
||||||
import { createEventDispatcher } from "svelte";
|
import { createEventDispatcher } from "svelte";
|
||||||
@ -13,60 +13,61 @@
|
|||||||
dispatch("cancelDelete", { id: delete_donor.id });
|
dispatch("cancelDelete", { id: delete_donor.id });
|
||||||
}
|
}
|
||||||
function deleteDonor() {
|
function deleteDonor() {
|
||||||
DonorService.donorControllerRemove(
|
dispatch("delete", { id: delete_donor.id });
|
||||||
delete_donor.id,
|
|
||||||
true
|
|
||||||
)
|
|
||||||
.then((resp) => {
|
|
||||||
Toastify({
|
|
||||||
text: $_('donor-deleted'),
|
|
||||||
duration: 500,
|
|
||||||
backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)",
|
|
||||||
}).showToast();
|
|
||||||
location.replace("./");
|
|
||||||
})
|
|
||||||
.catch((err) => {});
|
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{#if modal_open}
|
{#if modal_open}
|
||||||
<div
|
<div
|
||||||
class="fixed z-10 inset-0 overflow-y-auto"
|
class="fixed z-10 inset-0 overflow-y-auto"
|
||||||
|
|
||||||
use:clickOutside
|
use:clickOutside
|
||||||
on:click_outside={cancelDelete}>
|
on:click_outside={cancelDelete}
|
||||||
|
>
|
||||||
<div
|
<div
|
||||||
class="flex items-end justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0">
|
class="flex items-end justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0"
|
||||||
|
>
|
||||||
<div class="fixed inset-0 transition-opacity" aria-hidden="true">
|
<div class="fixed inset-0 transition-opacity" aria-hidden="true">
|
||||||
<div
|
<div
|
||||||
class="absolute inset-0 bg-gray-500 opacity-75"
|
class="absolute inset-0 bg-gray-500 opacity-75"
|
||||||
data-id="modal_backdrop" />
|
data-id="modal_backdrop"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
<span
|
<span
|
||||||
class="hidden sm:inline-block sm:align-middle sm:h-screen"
|
class="hidden sm:inline-block sm:align-middle sm:h-screen"
|
||||||
aria-hidden="true">​</span>
|
aria-hidden="true">​</span
|
||||||
|
>
|
||||||
<div
|
<div
|
||||||
class="inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full"
|
class="inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full"
|
||||||
role="dialog"
|
role="dialog"
|
||||||
aria-modal="true"
|
aria-modal="true"
|
||||||
aria-labelledby="modal-headline">
|
aria-labelledby="modal-headline"
|
||||||
|
>
|
||||||
<div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4">
|
<div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4">
|
||||||
<div class="sm:flex sm:items-start">
|
<div class="sm:flex sm:items-start">
|
||||||
<div
|
<div
|
||||||
class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10">
|
class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10"
|
||||||
<svg class="h-6 w-6 text-blue-600" fill="currentColor" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M9.33 11.5h2.17A4.5 4.5 0 0116 16H9v1h8v-1a5.58 5.58 0 00-.89-3H19a5 5 0 014.52 2.85A13.15 13.15 0 0113 21c-2.76 0-5.1-.59-7-1.63v-9.3a6.97 6.97 0 013.33 1.43zM5 19a1 1 0 01-1 1H2a1 1 0 01-1-1v-9a1 1 0 011-1h2a1 1 0 011 1v9zM18 5a3 3 0 110 6 3 3 0 010-6zm-7-3a3 3 0 110 6 3 3 0 010-6z"/></svg>
|
>
|
||||||
|
<svg
|
||||||
|
class="h-6 w-6 text-blue-600"
|
||||||
|
fill="currentColor"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
><path fill="none" d="M0 0h24v24H0z" /><path
|
||||||
|
d="M9.33 11.5h2.17A4.5 4.5 0 0116 16H9v1h8v-1a5.58 5.58 0 00-.89-3H19a5 5 0 014.52 2.85A13.15 13.15 0 0113 21c-2.76 0-5.1-.59-7-1.63v-9.3a6.97 6.97 0 013.33 1.43zM5 19a1 1 0 01-1 1H2a1 1 0 01-1-1v-9a1 1 0 011-1h2a1 1 0 011 1v9zM18 5a3 3 0 110 6 3 3 0 010-6zm-7-3a3 3 0 110 6 3 3 0 010-6z"
|
||||||
|
/></svg
|
||||||
|
>
|
||||||
</div>
|
</div>
|
||||||
<div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left">
|
<div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left">
|
||||||
<h3 class="text-lg leading-6 font-medium text-gray-900">
|
<h3 class="text-lg leading-6 font-medium text-gray-900">
|
||||||
{$_('attention')}
|
{$_("attention")}
|
||||||
</h3>
|
</h3>
|
||||||
<div class="mt-2 mb-6">
|
<div class="mt-2 mb-6">
|
||||||
<p class="text-sm text-gray-500">
|
<p class="text-sm text-gray-500">
|
||||||
{$_(
|
{$_(
|
||||||
'do-you-want-to-delete-this-donor-with-all-related-donations'
|
"do-you-want-to-delete-this-donor-with-all-related-donations"
|
||||||
)}
|
)}
|
||||||
<br />
|
<br />
|
||||||
{$_('all-associated-donations-will-get-deleted-as-well')}
|
{$_("all-associated-donations-will-get-deleted-as-well")}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -76,14 +77,16 @@
|
|||||||
<button
|
<button
|
||||||
on:click={deleteDonor}
|
on:click={deleteDonor}
|
||||||
type="button"
|
type="button"
|
||||||
class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-red-600 text-base font-medium text-white hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500 sm:ml-3 sm:w-auto sm:text-sm">
|
class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-red-600 text-base font-medium text-white hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500 sm:ml-3 sm:w-auto sm:text-sm"
|
||||||
{$_('confirm-delete-donor-with-all-donations')}
|
>
|
||||||
|
{$_("confirm-delete-donor-with-all-donations")}
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
on:click={cancelDelete}
|
on:click={cancelDelete}
|
||||||
type="button"
|
type="button"
|
||||||
class="mt-3 w-full inline-flex justify-center rounded-md border border-gray-300 shadow-sm px-4 py-2 bg-white text-base font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm">
|
class="mt-3 w-full inline-flex justify-center rounded-md border border-gray-300 shadow-sm px-4 py-2 bg-white text-base font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm"
|
||||||
{$_('cancel-keep-donor')}
|
>
|
||||||
|
{$_("cancel-keep-donor")}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -73,7 +73,7 @@
|
|||||||
);
|
);
|
||||||
return renderComponent(DonorDonations, { donations });
|
return renderComponent(DonorDonations, { donations });
|
||||||
},
|
},
|
||||||
filterFn: `includesString`,
|
enableColumnFilter: false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
accessorKey: "donationAmount",
|
accessorKey: "donationAmount",
|
||||||
@ -83,7 +83,7 @@
|
|||||||
.toFixed(2)
|
.toFixed(2)
|
||||||
.toLocaleString("de-DE", { valute: "EUR" })}€`;
|
.toLocaleString("de-DE", { valute: "EUR" })}€`;
|
||||||
},
|
},
|
||||||
filterFn: `group`,
|
enableColumnFilter: false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
accessorKey: "paidDonationAmount",
|
accessorKey: "paidDonationAmount",
|
||||||
@ -102,10 +102,9 @@
|
|||||||
return renderComponent(TableActions, {
|
return renderComponent(TableActions, {
|
||||||
detailsLink: `./${info.row.original.id}`,
|
detailsLink: `./${info.row.original.id}`,
|
||||||
deleteAction: () => {
|
deleteAction: () => {
|
||||||
active_deletes =
|
active_deletes = current_donors.filter(
|
||||||
current_donors[
|
(r) => r.id == info.row.original.id
|
||||||
current_donors.findIndex((r) => r.id == info.row.original.id)
|
);
|
||||||
];
|
|
||||||
},
|
},
|
||||||
deleteEnabled:
|
deleteEnabled:
|
||||||
store.state.jwtinfo.userdetails.permissions.includes(
|
store.state.jwtinfo.userdetails.permissions.includes(
|
||||||
@ -169,12 +168,26 @@
|
|||||||
|
|
||||||
<ConfirmDonorDeletion
|
<ConfirmDonorDeletion
|
||||||
on:cancelDelete={(event) => {
|
on:cancelDelete={(event) => {
|
||||||
modal_open = false;
|
active_deletes = active_deletes.filter((a) => a.id !== event.detail.id);
|
||||||
active_deletes[event.detail.id] = false;
|
|
||||||
}}
|
}}
|
||||||
bind:modal_open
|
on:delete={async (event) => {
|
||||||
bind:delete_donor
|
await DonorService.donorControllerRemove(event.detail.id, true);
|
||||||
|
Toastify({
|
||||||
|
text: $_("donor-deleted"),
|
||||||
|
duration: 500,
|
||||||
|
backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)",
|
||||||
|
}).showToast();
|
||||||
|
current_donors = current_donors.filter((d) => d.id !== event.detail.id);
|
||||||
|
active_deletes = active_deletes.filter((a) => a.id !== event.detail.id);
|
||||||
|
options.update((options) => ({
|
||||||
|
...options,
|
||||||
|
data: current_donors,
|
||||||
|
}));
|
||||||
|
}}
|
||||||
|
modal_open={active_deletes.length > 0}
|
||||||
|
delete_donor={active_deletes[0]}
|
||||||
/>
|
/>
|
||||||
|
{active_deletes.length}
|
||||||
{#if store.state.jwtinfo.userdetails.permissions.includes("DONOR:GET")}
|
{#if store.state.jwtinfo.userdetails.permissions.includes("DONOR:GET")}
|
||||||
{#if !dataLoaded}
|
{#if !dataLoaded}
|
||||||
<div
|
<div
|
||||||
|
Loading…
x
Reference in New Issue
Block a user