diff --git a/src/App.svelte b/src/App.svelte index 0ec9b765..ff087e81 100644 --- a/src/App.svelte +++ b/src/App.svelte @@ -61,6 +61,7 @@ import ResetPassword from "./components/auth/ResetPassword.svelte"; import Contacts from "./components/contacts/Contacts.svelte"; import ContactDetail from "./components/contacts/ContactDetail.svelte"; +import Donors from "./components/donors/Donors.svelte"; store.init(); registerSW(); @@ -143,6 +144,11 @@ + + + + + diff --git a/src/components/donors/Donors.svelte b/src/components/donors/Donors.svelte new file mode 100644 index 00000000..70997331 --- /dev/null +++ b/src/components/donors/Donors.svelte @@ -0,0 +1,31 @@ + + +
+ + $_('donors') + {#if store.state.jwtinfo.userdetails.permissions.includes('DONOR:CREATE')} + + {/if} + + +
+ + diff --git a/src/components/donors/DonorsEmptyState.svelte b/src/components/donors/DonorsEmptyState.svelte new file mode 100644 index 00000000..f0666ca3 --- /dev/null +++ b/src/components/donors/DonorsEmptyState.svelte @@ -0,0 +1,12 @@ + + +
+

+ + there are no donors yet
+ add your first donor +

+
diff --git a/src/components/donors/DonorsOverview.svelte b/src/components/donors/DonorsOverview.svelte new file mode 100644 index 00000000..0b6b2610 --- /dev/null +++ b/src/components/donors/DonorsOverview.svelte @@ -0,0 +1,262 @@ + + +{#if store.state.jwtinfo.userdetails.permissions.includes('DONOR:GET')} + {#await donors_promise} + + {:then} + {#if current_donors.length === 0} + + {:else} + + +
+ + + + + + + + + + + + + {#each current_donors as donor} + {#if donor.firstname + .toLowerCase() + .includes( + searchvalue.toLowerCase() + ) || donor.middlename + .toLowerCase() + .includes( + searchvalue.toLowerCase() + ) || donor.lastname + .toLowerCase() + .includes( + searchvalue.toLowerCase() + ) || should_display_based_on_id(donor.id)} + + + + + + + {#if active_deletes[donor.id] === true} + + {:else} + + {/if} + + {/if} + {/each} + +
+ { + const newstate = !current_donors.some((d) => d.is_selected === true); + current_donors = current_donors.map((r) => { + r.is_selected = newstate; + return r; + }); + }} + class="underline cursor-pointer select-none">{#if current_donors.some((d) => d.is_selected === true)} + {$_('deselect-all')} + {:else}{$_('select-all')}{/if} + + + {$_('name')} + + {$_('contact-information')} + + donations + + total donation amount + + {$_('action')} +
+ + +
+
+
+ {donor.firstname} + {donor.middlename || ''} + {donor.lastname} +
+
+
+
+ {#if donor.email} +
{donor.email}
+ {/if} + {#if donor.phone} +
{donor.phone}
+ {/if} + {#if donor.address.address1 !== null} + {donor.address.address1}
+ {donor.address.address2 || ''}
+ {donor.address.postalcode} + {donor.address.city} + {donor.address.country} + {/if} +
+ TODO + + {donor.donationAmount} + + + + + {$_('details')} + {#if store.state.jwtinfo.userdetails.permissions.includes('DONOR:DELETE')} + + {/if} +
+
+ {/if} + {:catch error} +
+ + {$_('general_promise_error')} + {error} + +
+ {/await} +{/if} diff --git a/src/components/donors/donors_empty.svg b/src/components/donors/donors_empty.svg new file mode 100644 index 00000000..32053770 --- /dev/null +++ b/src/components/donors/donors_empty.svg @@ -0,0 +1 @@ + \ No newline at end of file