diff --git a/src/components/tools/DonationCreate.svelte b/src/components/tools/DonationCreate.svelte index 9fa6cb81..de6163e4 100644 --- a/src/components/tools/DonationCreate.svelte +++ b/src/components/tools/DonationCreate.svelte @@ -1,394 +1,422 @@
-

{$_("fast_donation_create")}

- -
-
- {#if last_created} -
-

- {$_("last-created-donation")}: #{last_created.id}: {last_created.amountPerDistance / - 100} € für {getRunnerLabel(last_created.runner)} von {getRunnerLabel( - last_created.donor - )} -

-
- {/if} +

{$_("fast_donation_create")}

+ +
+
+ {#if last_created} +
+

+ {$_("last-created-donation")}: #{last_created.id}: {last_created.amountPerDistance / + 100}€ für {getRunnerLabel(last_created.runner)} von {getRunnerLabel( + last_created.donor + )} +

+
+ {/if} - -
-

{$_("runner")}

- 0} - class:focus:border-red-500={!amount > 0} - class:focus:ring-red-500={!amount > 0} - bind:value={amount} - on:keydown={(e)=> - { - if(e.key==="Enter"){ - e.preventDefault(); - document.querySelector("#button_existing_donor").focus(); - } - }} - type="number" - step="0.01" - id="donation_amount_eur" - name="donation_amount_eur" - class="focus:ring-indigo-500 focus:border-indigo-500 flex-1 block w-full rounded-none rounded-l-md sm:text-sm border-neutral-300 border bg-neutral-50 text-neutral-800 p-2" - placeholder="z.B. 1,50" - /> - -
-
+ +
+

{$_("amount-per-kilometer")}

+
+ 0} + class:focus:border-red-500={!amount > 0} + class:focus:ring-red-500={!amount > 0} + bind:value={amount} + on:keydown={(e) => { + if (e.key === "Enter") { + e.preventDefault(); + document.querySelector("#button_existing_donor").focus(); + } + }} + type="number" + step="0.01" + id="donation_amount_eur" + name="donation_amount_eur" + class="focus:ring-indigo-500 focus:border-indigo-500 flex-1 block w-full rounded-none rounded-l-md sm:text-sm border-neutral-300 border bg-neutral-50 text-neutral-800 p-2" + placeholder="z.B. 1,50" + /> + +
+
- -
-

{$_("donor")}

+ +
+

{$_("donor")}

- -
-
- - -
-
+ +
+
+ + +
+
- {#if !donor_create_new} - -
+ {#if !donor_create_new} + { + console.log("Cleared selection"); + }} + options={donors} + filterFn={(item, searchTerm) => { + return item.label + .toLowerCase() + .includes(searchTerm.toLowerCase()); + }} + bind:selected={donorinfo} + inputAriaLabel={$_("search-for-donor")} + inputPlaceholder={$_("search-for-donor")} + noOptionsText={$_("no-donors-found")} + on:onSelected={(data) => { + console.log(data.detail); + if (data.detail !== null) { + document.querySelector("#submit_button").focus(); + setTimeout(() => { + document.querySelector("#submit_button").focus(); + }, 100); + } + }} + /> + {:else} +
+ +
+ + { + if (e.key === "Enter") { + document.querySelector("#lastname").focus(); + } + }} + bind:value={donorinfo.firstname} + class="focus:ring-indigo-500 focus:border-indigo-500 flex-1 block w-full rounded-none rounded-l-md sm:text-sm border-neutral-300 border bg-neutral-50 text-neutral-800 p-2" + placeholder={$_("first-name")} + /> +
- -
- - -
+ +
+ + +
- -
-
- -
-
- -
-
+ +
+
+ +
+
+ +
+
- {#if address_checked} - -
-
- - -
+ {#if address_checked} + +
+
+ + +
-
- - -
+
+ + +
-
-
- - -
+
+
+ + +
-
- - -
-
-
- {/if} -
- {/if} -
- -
-
+
+ {/if} +
+ {/if} +
+ +
+ -
-
-
+ DonationService.donationControllerPostDistance({ + donor: donorinfo.id, + runner: runnerinfo.id, + amountPerDistance: amount * 100, + }) + .then((data) => { + last_created = data; + toast.success($_("donation-created-successfully")); + resetAll(); + loadDonors(); + }) + .catch((err) => { + console.error("Error creating donation:", err); + toast.error($_("error-creating-donation")); + }); + }} + > + {$_("create")} + +
+ + diff --git a/src/components/tools/VirtualSelect.svelte b/src/components/tools/VirtualSelect.svelte new file mode 100644 index 00000000..bf20fe1c --- /dev/null +++ b/src/components/tools/VirtualSelect.svelte @@ -0,0 +1,357 @@ + + + + +
+ +
+ { + if (e.key === "Enter" && !isOpen) { + toggleDropdown(); + } else { + handleKeydown(e, focusedIndex); + } + }} + aria-label={inputAriaLabel} + /> + {#if selected} + + {/if} + { + if (e.key === "Enter") toggleDropdown(); + else if (e.key === "Escape") { + e.preventDefault(); + isOpen = false; + focusedIndex = -1; + } + }} + aria-label={toggleAriaLabel} + > + + +
+ + + {#if isOpen} +
+ {#if filteredOptions.length > 0} + +
+
+ {#each visibleItems as item, i (item.label + "-" + (startIndex + i))} +
selectOption(item)} + on:keydown={(e) => handleKeydown(e, startIndex + i)} + role="option" + tabindex="0" + aria-selected={selected === item.value} + > + {item.label} +
+ {/each} +
+
+ {:else} +
{noOptionsText}
+ {/if} +
+ {/if} +
+ + diff --git a/src/locales/de.json b/src/locales/de.json index 319475bd..6348f466 100644 --- a/src/locales/de.json +++ b/src/locales/de.json @@ -227,7 +227,7 @@ "enabled_large": "Aktiviert", "english": "Englisch", "enter-payment": "Zahlung eingeben", - "error-creating-donation": "Fehler bei der Anlage", + "error-creating-donation": "Fehler beim Erstellen des Sponsorings", "error-during-import": "Fehler beim Importieren", "error-whyile-copying-to-clipboard": "Fehler beim Kopieren in die Zwischenablage", "error_on_login": "😢Fehler beim Login", diff --git a/src/locales/en.json b/src/locales/en.json index c3472a81..0f73a4e3 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -227,6 +227,7 @@ "enabled_large": "Enabled", "english": "English", "enter-payment": "Enter payment", + "error-creating-donation": "error creating the sponsoring", "error-during-import": "Error during import", "error-whyile-copying-to-clipboard": "Error while copying to clipboard", "error_on_login": "Error on login",