Compare commits

...

12 Commits

Author SHA1 Message Date
8fb1e0ca0f svelte-french-toast + translations
Some checks failed
continuous-integration/drone/push Build is failing
2023-04-22 11:22:38 +02:00
763a01af09 cleanup MainDashContent 2023-04-22 11:16:57 +02:00
663cb29ccd translation cleanups 2023-04-22 11:16:50 +02:00
56c3365656 add svelte-french-toast
Some checks failed
continuous-integration/drone/push Build is failing
2023-04-22 11:11:50 +02:00
e7b2c64798 🚀RELEASE v1.3.4
Some checks failed
continuous-integration/drone/push Build is failing
2023-04-19 18:23:17 +02:00
7cb6b63eb9 Smaller sponsoring page size 2023-04-19 18:23:07 +02:00
d6d88f5f60 🚀RELEASE v1.3.3
Some checks failed
continuous-integration/drone/push Build is failing
2023-04-19 18:18:44 +02:00
2c208c4381 bumped lfk-client-js 2023-04-19 18:18:26 +02:00
39bc6c4945 🚀RELEASE v1.3.2
Some checks failed
continuous-integration/drone/push Build is failing
2023-04-19 18:17:18 +02:00
b94e3b745f fix(donors): Shortened texts 2023-04-19 18:16:50 +02:00
6f337aeee1 feat(donations): Resolve donations via donor 2023-04-19 18:15:15 +02:00
5d48060834 fix(donors): Removed debug infos 2023-04-19 18:12:24 +02:00
13 changed files with 112 additions and 85 deletions

View File

@@ -2,10 +2,33 @@
All notable changes to this project will be documented in this file. Dates are displayed in UTC.
#### [1.3.4](https://git.odit.services/lfk/frontend/compare/1.3.3...1.3.4)
- Smaller sponsoring page size [`7cb6b63`](https://git.odit.services/lfk/frontend/commit/7cb6b63eb9596da4ee84369b220c3e680c607032)
#### [1.3.3](https://git.odit.services/lfk/frontend/compare/1.3.2...1.3.3)
> 19 April 2023
- 🚀RELEASE v1.3.3 [`d6d88f5`](https://git.odit.services/lfk/frontend/commit/d6d88f5f60716ca496a17f09b835b23223ec495d)
- bumped lfk-client-js [`2c208c4`](https://git.odit.services/lfk/frontend/commit/2c208c438185892270a0ebd37deb6a7c9ac08fc0)
#### [1.3.2](https://git.odit.services/lfk/frontend/compare/1.3.1...1.3.2)
> 19 April 2023
- 🚀RELEASE v1.3.2 [`39bc6c4`](https://git.odit.services/lfk/frontend/commit/39bc6c49450964510f996369d014f92c569188ae)
- fix(donors): Shortened texts [`b94e3b7`](https://git.odit.services/lfk/frontend/commit/b94e3b745f2febbe91e16a7a26f96b47d347ab92)
- feat(donations): Resolve donations via donor [`6f337ae`](https://git.odit.services/lfk/frontend/commit/6f337aeee16267d1e67e3d3855b63b6f2e57979f)
- fix(donors): Removed debug infos [`5d48060`](https://git.odit.services/lfk/frontend/commit/5d48060834717b2244172a0914e2690f8fe634d9)
#### [1.3.1](https://git.odit.services/lfk/frontend/compare/1.3.0...1.3.1)
> 19 April 2023
- feat(donations): Donation table filtering [`91ab199`](https://git.odit.services/lfk/frontend/commit/91ab199769c9f4f8051c74ad43a701db321f3995)
- feat(donors): Added name and address filtering [`27b4dde`](https://git.odit.services/lfk/frontend/commit/27b4dde7551995c9d7e8ca33a9bd97d429a35801)
- 🚀RELEASE v1.3.1 [`c842c20`](https://git.odit.services/lfk/frontend/commit/c842c203e2fbf0a201297d475db9047c0691bd52)
- More filtering [`5bcfc8d`](https://git.odit.services/lfk/frontend/commit/5bcfc8db752fce96e9f523d14cefff1a4f675661)
#### [1.3.0](https://git.odit.services/lfk/frontend/compare/1.2.0...1.3.0)

View File

@@ -13,7 +13,7 @@
</head>
<body>
<span style="display: none;visibility: hidden;" id="buildinfo">RELEASE_INFO-1.3.1-RELEASE_INFO</span>
<span style="display: none;visibility: hidden;" id="buildinfo">RELEASE_INFO-1.3.4-RELEASE_INFO</span>
<noscript>You need to enable JavaScript to run this app.</noscript>
<script src="/env.js"></script>
<script type="module" src="/src/main.js"></script>

View File

@@ -1,6 +1,6 @@
{
"name": "@odit/lfk-frontend",
"version": "1.3.1",
"version": "1.3.4",
"type": "module",
"scripts": {
"i18n-order": "node order.js",
@@ -39,7 +39,7 @@
}
},
"dependencies": {
"@odit/lfk-client-js": "1.1.0",
"@odit/lfk-client-js": "1.1.1",
"@paralleldrive/cuid2": "^2.2.0",
"@tanstack/svelte-table": "^8.8.5",
"bwip-js": "^3.4.0",
@@ -49,6 +49,7 @@
"localforage": "1.10.0",
"marked": "2.0.3",
"svelte": "3.58.0",
"svelte-french-toast": "1.0.4-beta.0",
"svelte-i18n": "3.6.0",
"tinro": "0.6.12",
"toastify-js": "1.12.0",

28
pnpm-lock.yaml generated
View File

@@ -2,8 +2,8 @@ lockfileVersion: '6.0'
dependencies:
'@odit/lfk-client-js':
specifier: 1.1.0
version: 1.1.0
specifier: 1.1.1
version: 1.1.1
'@paralleldrive/cuid2':
specifier: ^2.2.0
version: 2.2.0
@@ -31,6 +31,9 @@ dependencies:
svelte:
specifier: 3.58.0
version: 3.58.0
svelte-french-toast:
specifier: 1.0.4-beta.0
version: 1.0.4-beta.0(svelte@3.58.0)
svelte-i18n:
specifier: 3.6.0
version: 3.6.0(svelte@3.58.0)
@@ -510,8 +513,8 @@ packages:
'@octokit/openapi-types': 16.0.0
dev: true
/@odit/lfk-client-js@1.1.0:
resolution: {integrity: sha512-yhjsi7YMzL9/fJ7o06yszzw15iZhao3VmX0G9oqZWFwYJd1M2td3Lvm76mXNzTVlbdG6W0W3+eEjcalBdo51Pg==}
/@odit/lfk-client-js@1.1.1:
resolution: {integrity: sha512-EVwK/kT8VBs0vLk64KgCsHCl2heWHJMWAmZAghEDZWPCPQWX9xL6UzRuKewLXl36/T9YKqZLfDyM5e3WfgLyOg==}
dev: false
/@odit/license-exporter@0.0.12:
@@ -3443,6 +3446,15 @@ packages:
engines: {node: '>= 0.4'}
dev: true
/svelte-french-toast@1.0.4-beta.0(svelte@3.58.0):
resolution: {integrity: sha512-PkYNukEQAPZyV5ei+JzeYEsbaXFSbJS8/SDTdC8giYa5Atxp2SRepFnPDWx6mu7rV53g886FNLktPMLwRljkpw==}
peerDependencies:
svelte: ^3.57.0
dependencies:
svelte: 3.58.0
svelte-writable-derived: 3.0.1(svelte@3.58.0)
dev: false
/svelte-hmr@0.15.1(svelte@3.58.0):
resolution: {integrity: sha512-BiKB4RZ8YSwRKCNVdNxK/GfY+r4Kjgp9jCLEy0DuqAKfmQtpL38cQK3afdpjw4sqSs4PLi3jIPJIFp259NkZtA==}
engines: {node: ^12.20 || ^14.13.1 || >= 16}
@@ -3472,6 +3484,14 @@ packages:
resolution: {integrity: sha512-ITmX/XUiSdkaILmsTviKRkZPaXckM5/FA7Y8BhiUPoamaZG/ZDyOo6ydjFu9fDVFTbwoAUGUi6HBjs+ZdK2AwA==}
dev: true
/svelte-writable-derived@3.0.1(svelte@3.58.0):
resolution: {integrity: sha512-zBWCS5c3MA9o4NT/UJHP3KoPOhtmH2ZQ/QRK31w9LzLdPP7MNncUcBGIu4iH2RVt17iRfR6agm7nEqwNvsYuMw==}
peerDependencies:
svelte: ^3.2.1
dependencies:
svelte: 3.58.0
dev: false
/svelte@3.58.0:
resolution: {integrity: sha512-brIBNNB76mXFmU/Kerm4wFnkskBbluBDCjx/8TcpYRb298Yh2dztS2kQ6bhtjMcvUhd5ynClfwpz5h2gnzdQ1A==}
engines: {node: '>= 8'}

View File

@@ -6,7 +6,7 @@
import { OpenAPI, AuthService } from "@odit/lfk-client-js";
import Footer from "../general/Footer.svelte";
import isEmail from "validator/es/lib/isEmail";
import Toastify from "toastify-js";
import toast from "svelte-french-toast";
// ------
let username = config.default_username || "";
let password = config.default_password || "";
@@ -20,11 +20,7 @@
OpenAPI.TOKEN = value.access_token;
const jwtinfo = JSON.parse(atob(OpenAPI.TOKEN.split(".")[1]));
store.login(value, jwtinfo);
Toastify({
text: $_("welcome_wavinghand"),
duration: 500,
backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)",
}).showToast();
toast($_("welcome_wavinghand"));
}
}
});
@@ -33,10 +29,7 @@
// prevent login button spamming
if (last_loginclick_processed && is_blocked_by_autologin === false) {
last_loginclick_processed = false;
Toastify({
text: $_("login_is_checked"),
duration: 500,
}).showToast();
toast.loading($_("login_is_checked"));
let postdata = {};
if (isEmail(username)) {
postdata = {
@@ -56,31 +49,19 @@
const jwtinfo = JSON.parse(atob(OpenAPI.TOKEN.split(".")[1]));
store.login(result.access_token, jwtinfo);
location.replace("/");
Toastify({
text: $_("welcome_wavinghand"),
duration: 500,
backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)",
}).showToast();
toast.dismiss();
toast($_("welcome_wavinghand"));
})
.catch((err) => {
Toastify({
text: $_("error_on_login"),
duration: 500,
backgroundColor:
"linear-gradient(90deg, hsla(281, 37%, 45%, 1) 0%, hsla(1, 62%, 48%, 1) 100%)",
}).showToast();
toast.dismiss();
toast.error($_("error_on_login"));
})
.finally(() => {
last_loginclick_processed = true;
});
// last login was not processed yet
} else {
Toastify({
text: $_('please-wait-a-moment-your-login-is-still-being-processed'),
duration: 1500,
backgroundColor:
"linear-gradient(90deg, hsla(281, 37%, 45%, 1) 0%, hsla(1, 62%, 48%, 1) 100%)",
}).showToast();
toast($_("please-wait-a-moment-your-login-is-still-being-processed"));
}
};
function handleKeydown(e) {
@@ -91,34 +72,37 @@
</script>
<div
class="min-h-screen flex items-center justify-center bg-gray-100 text-gray-900">
class="min-h-screen flex items-center justify-center bg-gray-100 text-gray-900"
>
<div class="max-w-md w-full py-12 px-6" role="main">
<img style="height:10rem;" class="mx-auto" src="/lfk-logo.png" alt="" />
<p class="mt-6 text-lg text-center font-bold">{$_('application_name')}</p>
<p class="mt-6 text-sm text-center">{$_('log_in_to_your_account')}</p>
<p class="mt-6 text-lg text-center font-bold">{$_("application_name")}</p>
<p class="mt-6 text-sm text-center">{$_("log_in_to_your_account")}</p>
<div>
<div class="rounded-md shadow-sm">
<div>
<!-- svelte-ignore a11y-autofocus -->
<input
autofocus
aria-label={$_('email_address_or_username')}
aria-label={$_("email_address_or_username")}
type="text"
required=""
class="border-gray-300 placeholder-gray-500 appearance-none rounded-none relative block w-full px-3 py-2 border rounded-t-md focus:outline-none focus:shadow-outline-blue focus:border-blue-300 focus:z-10 sm:text-sm"
on:keydown={handleKeydown}
placeholder={$_('email_address_or_username')}
bind:value={username} />
placeholder={$_("email_address_or_username")}
bind:value={username}
/>
</div>
<div class="-mt-px relative">
<input
aria-label={$_('password')}
aria-label={$_("password")}
type="password"
required=""
bind:value={password}
class="border-gray-300 placeholder-gray-500 appearance-none rounded-none relative block w-full px-3 py-2 border rounded-b-md focus:outline-none focus:shadow-outline-blue focus:border-blue-300 focus:z-10 sm:text-sm"
on:keydown={handleKeydown}
placeholder={$_('password')} />
placeholder={$_("password")}
/>
</div>
</div>
@@ -126,27 +110,31 @@
<button
on:click={login}
type="submit"
class="relative block w-full py-2 px-3 border border-transparent rounded-md text-white font-semibold bg-gray-800 hover:bg-gray-700 focus:bg-gray-900 focus:outline-none focus:shadow-outline sm:text-sm">
class="relative block w-full py-2 px-3 border border-transparent rounded-md text-white font-semibold bg-gray-800 hover:bg-gray-700 focus:bg-gray-900 focus:outline-none focus:shadow-outline sm:text-sm"
>
<span class="absolute left-0 inset-y pl-3">
<svg
class="h-5 w-5 text-gray-500"
fill="currentColor"
viewBox="0 0 20 20">
viewBox="0 0 20 20"
>
<path
fill-rule="evenodd"
d="M5 9V7a5 5 0 0110 0v2a2 2 0 012 2v5a2 2 0 01-2 2H5a2 2 0 01-2-2v-5a2 2 0 012-2zm8-2v2H7V7a3 3 0 016 0z"
clip-rule="evenodd" />
clip-rule="evenodd"
/>
</svg>
</span>
{$_('log_in')}
{$_("log_in")}
</button>
</div>
</div>
<div class="mt-2">
<a
href="/forgot_password"
class="block w-full text-center py-2 px-3 border border-gray-300 rounded-md font-medium hover:border-gray-400 focus:outline-none focus:border-gray-400 sm:text-sm">
{$_('forgot_password')}
class="block w-full text-center py-2 px-3 border border-gray-300 rounded-md font-medium hover:border-gray-400 focus:outline-none focus:border-gray-400 sm:text-sm"
>
{$_("forgot_password")}
</a>
</div>
</div>

View File

@@ -2,7 +2,7 @@
import { _ } from "svelte-i18n";
import { RunnerCardService } from "@odit/lfk-client-js";
import store from "../../store";
import Toastify from "toastify-js";
import toast from "svelte-french-toast";
import CardsEmptyState from "./CardsEmptyState.svelte";
import CardDetailModal from "./CardDetailModal.svelte";
import GenerateRunnerCards from "../pdf_generation/GenerateRunnerCards.svelte";
@@ -148,14 +148,11 @@
...options,
data: current_cards,
}));
Toastify({
text: $_("card-deleted"),
duration: 3500,
backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)",
}).showToast();
toast.success($_("card-deleted"));
}
onMount(async () => {
toast.loading($_("loading-cards"));
let page = 0;
while (page >= 0) {
const cards = await RunnerCardService.runnerCardControllerGetAll(
@@ -175,7 +172,8 @@
dataLoaded = true;
page++;
}
console.log("All cards loaded");
toast.dismiss();
toast.success($_('all-cards-loaded'));
});
</script>

View File

@@ -5,6 +5,7 @@
import { router } from "tinro";
import NoComponentLoaded from "../base/NoComponentLoaded.svelte";
import { AuthService } from "@odit/lfk-client-js";
import { Toaster } from 'svelte-french-toast';
$: navOpen = false;
function logout() {
localForage.clear();
@@ -345,6 +346,7 @@
d="M3 5a1 1 0 011-1h12a1 1 0 110 2H4A1 1 0 013 5zm0 5a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zm0 5a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1z"
clip-rule="evenodd" /></svg></button>
</header>
<Toaster position="top-right" />
<slot>
<NoComponentLoaded />
</slot>

View File

@@ -143,7 +143,7 @@
<StatCard
title={$_("total-distance")}
value={`${stats.total_distance / 1000} km`}
href="#"
href="/scans/"
>
<svg
fill="currentColor"
@@ -159,7 +159,7 @@
<StatCard
title={$_("average-distance")}
value={`${(stats.average_distance / 1000).toFixed(2)} km`}
href="#"
href="/scans/"
>
<svg
fill="currentColor"

View File

@@ -23,7 +23,10 @@
import DonationStatus from "./DonationStatus.svelte";
import DonationTableAction from "./DonationTableAction.svelte";
import DeleteDonationModal from "./DeleteDonationModal.svelte";
import { donationDonorFilter, donationRunnerFilter } from "../shared/tablefilters";
import {
donationDonorFilter,
donationRunnerFilter,
} from "../shared/tablefilters";
$: searchvalue = "";
$: active_deletes = [];
$: active_edits = [];
@@ -173,7 +176,7 @@
while (page >= 0) {
const donations = await DonationService.donationControllerGetAll(
page,
500
100
);
if (donations.length == 0) {
page = -2;

View File

@@ -17,10 +17,10 @@
>
{:else}
<a
href="../donations/{d.id}"
href="../donations/{donation.id}"
class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-green-700 text-white mr-1"
>{$_("fixed-donation")}:
{(d.amount / 100)
{(donation.amount / 100)
.toFixed(2)
.toLocaleString("de-DE", { valute: "EUR" })}</a
>

View File

@@ -25,7 +25,6 @@
import { filterAddress, filterName } from "../shared/tablefilters";
$: searchvalue = "";
$: active_deletes = [];
$: current_donations = [];
$: selectedDonors =
$table?.getSelectedRowModel().rows.map((row) => row.original) || [];
$: selected =
@@ -71,13 +70,10 @@
filterFn: `address`,
},
{
accessorKey: "sponsorings",
accessorKey: "donations",
header: () => $_("sponsorings"),
cell: (info) => {
const donations = current_donations.filter(
(d) => d?.donor?.id == info.row.original.id
);
return renderComponent(DonorDonations, { donations });
return renderComponent(DonorDonations, { donations: info.getValue() });
},
enableColumnFilter: false,
},
@@ -153,16 +149,11 @@
let page = 0;
while (page >= 0) {
const donors = await DonorService.donorControllerGetAll(page, 500);
const donations = await DonationService.donationControllerGetAll(
page,
500
);
if (donors.length == 0 && donations.length == 0) {
if (donors.length == 0) {
page = -2;
}
current_donors = current_donors.concat(...donors);
current_donations = current_donations.concat(...donors);
options.update((options) => ({
...options,
data: current_donors,
@@ -197,7 +188,6 @@
modal_open={active_deletes.length > 0}
delete_donor={active_deletes[0]}
/>
{active_deletes.length}
{#if store.state.jwtinfo.userdetails.permissions.includes("DONOR:GET")}
{#if !dataLoaded}
<div

View File

@@ -35,6 +35,7 @@
"all-associated-runners-will-be-deleted-too": "Alle zugehörigen Läufer:innen werden auch gelöscht!",
"all-associated-scans-will-get-deleted-as-well": "Alle Scans dieser Station werden ebenfalls gelöscht",
"all-associated-teams-and-runners-will-be-deleted-too": "Alle assoziierten Teams und Läufer:innen werden auch gelöscht!",
"all-cards-loaded": "Alle Karten geladen",
"already-paid": "Bereits bezahlt",
"amount": "Anzahl",
"amount-per-kilometer": "Betrag pro Kilometer",
@@ -94,8 +95,8 @@
"contacts-are-being-loaded": "Kontakte werden geladen ...",
"copied-link-to-clipboard": "Link wurde in die Zwischenablage kopiert",
"copied-token-to-clipboard": "Token wurde in die Zwischenablage kopiert",
"count_organizations": "Organisationen (Anzahl)",
"count_teams": "Teams (Anzahl)",
"count_organizations": "Organisationen",
"count_teams": "Teams",
"create": "Erstellen",
"create-a-new": "Erstelle eine neue",
"create-a-new-card": "Neue Läuferkarte erstellen",
@@ -187,7 +188,7 @@
"donor": "Sponsor:in",
"donor-added": "Sponsor:in hinzugefügt",
"donor-deleted": "Sponsor:in gelöscht",
"donor-has-no-associated-donations": "Zur Sponsor:in gibt es noch keine Sponsorings",
"donor-has-no-associated-donations": "Keine Sponsorings",
"donor-is-being-added": "Sponsor:in wird hinzugefügt...",
"donor-is-being-updated": "Sponsor:in wird aktualisiert",
"donors": "Sponsor:innen",
@@ -439,11 +440,11 @@
"token": "Token",
"total-distance": "gelaufene Strecke",
"total-donation-amount": "Gesamtbetrag",
"total-donation-count": "Gesamte Sponsorings",
"total-donation-count": "Sponsorings",
"total-donations": "Spendensumme",
"total-donors": "gesamte Sponsor:innen",
"total-paid-amount": "Gezahlter Gesamtbetrag",
"total-scans": "gesamte Scans",
"total-donors": "Sponsor:innen",
"total-paid-amount": "Gezahlt",
"total-scans": "Scans",
"total_donation_amount_in_eur": "Gesamtbetrag in €",
"track": "Track",
"track-added": "Track hinzugefügt",
@@ -495,6 +496,6 @@
"you-dont-have-any-scanstations-yet": "Es gibt noch keine Scannerstationen",
"you-have-to-provide-an-organization": "Du musst eine Organisation angeben",
"you-have-to-save-your-changes-to-generate-a-link": "Du musst deine Änderungen speichern, um einen Link zu generieren.",
"you-must-create-at-least-one-card-or-cancel": "Du musst mindestens eine Blankokarte erstellen (oder abbrechen).",
"you-must-create-at-least-one-card-or-cancel": "Du musst mindestens eine Blankokarte erstellen.",
"zip-postal-code": "Postleitzahl"
}

View File

@@ -35,6 +35,7 @@
"all-associated-runners-will-be-deleted-too": "All associated runners will be deleted too!",
"all-associated-scans-will-get-deleted-as-well": "All associated scans will get deleted as well",
"all-associated-teams-and-runners-will-be-deleted-too": "All associated teams and runners will be deleted too!",
"all-cards-loaded": "All cards loaded",
"already-paid": "Already paid",
"amount": "Amount",
"amount-per-kilometer": "Amount per kilometer",
@@ -187,7 +188,7 @@
"donor": "Donor",
"donor-added": "Donor added",
"donor-deleted": "donor deleted",
"donor-has-no-associated-donations": "Donor has no associated donations.",
"donor-has-no-associated-donations": "No donations",
"donor-is-being-added": "Donor is being added...",
"donor-is-being-updated": "Donor is being updated",
"donors": "Donors",
@@ -442,7 +443,7 @@
"total-donation-count": "total donations (count)",
"total-donations": "total donations",
"total-donors": "total donors",
"total-paid-amount": "Total paid amount",
"total-paid-amount": "Paid",
"total-scans": "total scans",
"total_donation_amount_in_eur": "Total donation amount in €",
"track": "Track",
@@ -495,6 +496,6 @@
"you-dont-have-any-scanstations-yet": "You don't have any scanstations yet",
"you-have-to-provide-an-organization": "You have to provide an organization",
"you-have-to-save-your-changes-to-generate-a-link": "You have to save your changes to generate a link.",
"you-must-create-at-least-one-card-or-cancel": "You must create at least one card (or cancel).",
"you-must-create-at-least-one-card-or-cancel": "You must create at least one card.",
"zip-postal-code": "ZIP/ postal code"
}