Compare commits
	
		
			9 Commits
		
	
	
		
			1.9.5
			...
			feature/sp
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						
						
							
						
						c3226c37c9
	
				 | 
					
					
						|||
| 
						
						
							
						
						210140fd67
	
				 | 
					
					
						|||
| 
						
						
							
						
						35e58d233e
	
				 | 
					
					
						|||
| 
						
						
							
						
						a09bf31e22
	
				 | 
					
					
						|||
| 
						
						
							
						
						7c31fba83a
	
				 | 
					
					
						|||
| 
						
						
							
						
						c00497d776
	
				 | 
					
					
						|||
| 
						
						
							
						
						766eeab49f
	
				 | 
					
					
						|||
| 
						
						
							
						
						3c9b404234
	
				 | 
					
					
						|||
| 
						
						
							
						
						9c56b3883e
	
				 | 
					
					
						
							
								
								
									
										14
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								CHANGELOG.md
									
									
									
									
									
								
							@@ -2,9 +2,23 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
All notable changes to this project will be documented in this file. Dates are displayed in UTC.
 | 
					All notable changes to this project will be documented in this file. Dates are displayed in UTC.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#### [1.9.7](https://git.odit.services/lfk/frontend/compare/1.9.6...1.9.7)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- fix: ImportRunnerModal scrolling & team select [`766eeab`](https://git.odit.services/lfk/frontend/commit/766eeab49fb3ca5715c19dbf9bc53cb71124d3df)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#### [1.9.6](https://git.odit.services/lfk/frontend/compare/1.9.5...1.9.6)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					> 29 March 2025
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- chore(release): 1.9.6 [`3c9b404`](https://git.odit.services/lfk/frontend/commit/3c9b404234c7d7d2f0c48256be2130a0ed8ae047)
 | 
				
			||||||
 | 
					- pnpm allow builds [`9c56b38`](https://git.odit.services/lfk/frontend/commit/9c56b3883eeab9e1a5e1c4921bfb6528c230e0d4)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#### [1.9.5](https://git.odit.services/lfk/frontend/compare/1.9.4...1.9.5)
 | 
					#### [1.9.5](https://git.odit.services/lfk/frontend/compare/1.9.4...1.9.5)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					> 29 March 2025
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- feat: modal improvements [`d7e84a7`](https://git.odit.services/lfk/frontend/commit/d7e84a79a892294d532cc93aa3391c14a7a5ce99)
 | 
					- feat: modal improvements [`d7e84a7`](https://git.odit.services/lfk/frontend/commit/d7e84a79a892294d532cc93aa3391c14a7a5ce99)
 | 
				
			||||||
 | 
					- chore(release): 1.9.5 [`3d506db`](https://git.odit.services/lfk/frontend/commit/3d506db97502399e8b381b4cf38af2f07a584aec)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#### [1.9.4](https://git.odit.services/lfk/frontend/compare/1.9.3...1.9.4)
 | 
					#### [1.9.4](https://git.odit.services/lfk/frontend/compare/1.9.3...1.9.4)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,7 +13,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  <body>
 | 
					  <body>
 | 
				
			||||||
    <span style="display: none; visibility: hidden" id="buildinfo"
 | 
					    <span style="display: none; visibility: hidden" id="buildinfo"
 | 
				
			||||||
      >RELEASE_INFO-1.9.5-RELEASE_INFO</span
 | 
					      >RELEASE_INFO-1.9.7-RELEASE_INFO</span
 | 
				
			||||||
    >
 | 
					    >
 | 
				
			||||||
    <noscript>You need to enable JavaScript to run this app.</noscript>
 | 
					    <noscript>You need to enable JavaScript to run this app.</noscript>
 | 
				
			||||||
    <script src="/env.js"></script>
 | 
					    <script src="/env.js"></script>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  "name": "@odit/lfk-frontend",
 | 
					  "name": "@odit/lfk-frontend",
 | 
				
			||||||
  "version": "1.9.5",
 | 
					  "version": "1.9.7",
 | 
				
			||||||
  "type": "module",
 | 
					  "type": "module",
 | 
				
			||||||
  "scripts": {
 | 
					  "scripts": {
 | 
				
			||||||
    "i18n-order": "node order.js",
 | 
					    "i18n-order": "node order.js",
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										3
									
								
								pnpm-workspace.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								pnpm-workspace.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
				
			|||||||
 | 
					onlyBuiltDependencies:
 | 
				
			||||||
 | 
					  - es5-ext
 | 
				
			||||||
 | 
					  - esbuild
 | 
				
			||||||
							
								
								
									
										81
									
								
								src/components/pdf_generation/DownloadProgressModal.svelte
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								src/components/pdf_generation/DownloadProgressModal.svelte
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,81 @@
 | 
				
			|||||||
 | 
					<script>
 | 
				
			||||||
 | 
						import { _ } from "svelte-i18n";
 | 
				
			||||||
 | 
						import { clickOutside } from "../base/outsideclick";
 | 
				
			||||||
 | 
						import { onMount } from "svelte";
 | 
				
			||||||
 | 
						export let download_details = "";
 | 
				
			||||||
 | 
						export let modal_open;
 | 
				
			||||||
 | 
						onMount(() => {
 | 
				
			||||||
 | 
							document.onkeydown = (e) => {
 | 
				
			||||||
 | 
								e = e || window.event;
 | 
				
			||||||
 | 
								if (e.key === "Escape") {
 | 
				
			||||||
 | 
									modal_open = false;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								if (e.keyCode === 13) {
 | 
				
			||||||
 | 
									if (createbtnenabled === true) {
 | 
				
			||||||
 | 
										createbtnenabled = false;
 | 
				
			||||||
 | 
										submit();
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
						});
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{#if modal_open}
 | 
				
			||||||
 | 
						<div
 | 
				
			||||||
 | 
							class="fixed z-10 inset-0 overflow-y-hidden"
 | 
				
			||||||
 | 
							use:clickOutside
 | 
				
			||||||
 | 
							on:click_outside={() => {
 | 
				
			||||||
 | 
								modal_open = false;
 | 
				
			||||||
 | 
							}}
 | 
				
			||||||
 | 
						>
 | 
				
			||||||
 | 
							<div
 | 
				
			||||||
 | 
								class="flex items-end justify-center h-screen text-center sm:block p-0 lg:p-4"
 | 
				
			||||||
 | 
							>
 | 
				
			||||||
 | 
								<div class="fixed inset-0 transition-opacity" aria-hidden="true">
 | 
				
			||||||
 | 
									<div
 | 
				
			||||||
 | 
										class="absolute inset-0 bg-gray-500 opacity-75"
 | 
				
			||||||
 | 
										data-id="modal_backdrop"
 | 
				
			||||||
 | 
									/>
 | 
				
			||||||
 | 
								</div>
 | 
				
			||||||
 | 
								<span
 | 
				
			||||||
 | 
									class="hidden sm:inline-block sm:align-middle sm:h-screen"
 | 
				
			||||||
 | 
									aria-hidden="true">​</span
 | 
				
			||||||
 | 
								>
 | 
				
			||||||
 | 
								<div
 | 
				
			||||||
 | 
									class="inline-block align-bottom text-left shadow-xl transform transition-all sm:align-middle w-full lg:w-auto min-w-auto lg:min-w-[35vw]"
 | 
				
			||||||
 | 
									role="dialog"
 | 
				
			||||||
 | 
									aria-modal="true"
 | 
				
			||||||
 | 
									aria-labelledby="modal-headline"
 | 
				
			||||||
 | 
								>
 | 
				
			||||||
 | 
									<div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t-xl">
 | 
				
			||||||
 | 
										<div class="">
 | 
				
			||||||
 | 
											<div
 | 
				
			||||||
 | 
												class="flex-shrink-0 flex items-center justify-center size-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10"
 | 
				
			||||||
 | 
											>
 | 
				
			||||||
 | 
												<svg
 | 
				
			||||||
 | 
													xmlns="http://www.w3.org/2000/svg"
 | 
				
			||||||
 | 
													viewBox="0 0 24 24"
 | 
				
			||||||
 | 
													class="h-6 w-6 text-blue-600"
 | 
				
			||||||
 | 
													fill="currentColor"
 | 
				
			||||||
 | 
													width="24"
 | 
				
			||||||
 | 
													height="24"
 | 
				
			||||||
 | 
													><path fill="none" d="M0 0h24v24H0z" />
 | 
				
			||||||
 | 
													<path
 | 
				
			||||||
 | 
														d="M9.83 8.79L8 9.456V13H6V8.05h.015l5.268-1.918c.244-.093.51-.14.782-.131a2.616 2.616 0 0 1 2.427 1.82c.186.583.356.977.51 1.182A4.992 4.992 0 0 0 19 11v2a6.986 6.986 0 0 1-5.402-2.547l-.581 3.297L15 15.67V23h-2v-5.986l-2.05-1.987-.947 4.298-6.894-1.215.348-1.97 4.924.868L9.83 8.79zM13.5 5.5a2 2 0 1 1 0-4 2 2 0 0 1 0 4z"
 | 
				
			||||||
 | 
													/></svg
 | 
				
			||||||
 | 
												>
 | 
				
			||||||
 | 
											</div>
 | 
				
			||||||
 | 
											<div class="mt-3 sm:text-left text-base">
 | 
				
			||||||
 | 
												<h3 class="text-lg leading-6 font-medium text-gray-900">
 | 
				
			||||||
 | 
													{$_('download_laeuft')}
 | 
				
			||||||
 | 
												</h3>
 | 
				
			||||||
 | 
												<div class="w-full">
 | 
				
			||||||
 | 
													{download_details}
 | 
				
			||||||
 | 
												</div>
 | 
				
			||||||
 | 
											</div>
 | 
				
			||||||
 | 
										</div>
 | 
				
			||||||
 | 
									</div>
 | 
				
			||||||
 | 
								</div>
 | 
				
			||||||
 | 
							</div>
 | 
				
			||||||
 | 
						</div>
 | 
				
			||||||
 | 
					{/if}
 | 
				
			||||||
@@ -7,6 +7,7 @@
 | 
				
			|||||||
	import DocumentServer from "./DocumentServer";
 | 
						import DocumentServer from "./DocumentServer";
 | 
				
			||||||
	import { init } from "@paralleldrive/cuid2";
 | 
						import { init } from "@paralleldrive/cuid2";
 | 
				
			||||||
	import toast from "svelte-french-toast";
 | 
						import toast from "svelte-french-toast";
 | 
				
			||||||
 | 
						import DownloadProgressModal from "./DownloadProgressModal.svelte";
 | 
				
			||||||
	const createId = init({ length: 10, fingerprint: "lfk-frontend" });
 | 
						const createId = init({ length: 10, fingerprint: "lfk-frontend" });
 | 
				
			||||||
	const documentServer = new DocumentServer(
 | 
						const documentServer = new DocumentServer(
 | 
				
			||||||
		config.baseurl_documentserver,
 | 
							config.baseurl_documentserver,
 | 
				
			||||||
@@ -17,8 +18,12 @@
 | 
				
			|||||||
	export let generate_runners = [];
 | 
						export let generate_runners = [];
 | 
				
			||||||
	export let generate_orgs = [];
 | 
						export let generate_orgs = [];
 | 
				
			||||||
	export let generate_teams = [];
 | 
						export let generate_teams = [];
 | 
				
			||||||
 | 
						//
 | 
				
			||||||
 | 
						export let download_modal_open = false;
 | 
				
			||||||
 | 
						export let download_details = "";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	function generateSponsoringContract(locale) {
 | 
						function generateSponsoringContract(locale) {
 | 
				
			||||||
 | 
							download_modal_open = true;
 | 
				
			||||||
		if (generate_orgs.length > 0) {
 | 
							if (generate_orgs.length > 0) {
 | 
				
			||||||
			generateOrgContracts(locale);
 | 
								generateOrgContracts(locale);
 | 
				
			||||||
		} else if (generate_teams.length > 0) {
 | 
							} else if (generate_teams.length > 0) {
 | 
				
			||||||
@@ -41,19 +46,24 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	async function generateTeamContracts(locale) {
 | 
						async function generateTeamContracts(locale) {
 | 
				
			||||||
		toast.loading($_("generating-pdfs"));
 | 
							toast.loading($_("generating-pdfs"));
 | 
				
			||||||
 | 
							let totalCount = generate_teams.length;
 | 
				
			||||||
		let count = 0;
 | 
							let count = 0;
 | 
				
			||||||
		for (const t of generate_teams) {
 | 
							for (const t of generate_teams) {
 | 
				
			||||||
			count++;
 | 
								count++;
 | 
				
			||||||
 | 
								download_details = `${t.parentGroup.name} > ${t.name}`;
 | 
				
			||||||
			const runners = await RunnerTeamService.runnerTeamControllerGetRunners(
 | 
								const runners = await RunnerTeamService.runnerTeamControllerGetRunners(
 | 
				
			||||||
				t.id
 | 
									t.id
 | 
				
			||||||
			);
 | 
								);
 | 
				
			||||||
			documentServer
 | 
								await documentServer
 | 
				
			||||||
				.generateContracts(runners, locale)
 | 
									.generateContracts(runners, locale)
 | 
				
			||||||
				.then((blob) => {
 | 
									.then((blob) => {
 | 
				
			||||||
					download(
 | 
										download(
 | 
				
			||||||
						blob,
 | 
											blob,
 | 
				
			||||||
						`${$_("sponsorings")}_${t.name}-${locale}-${createId()}.pdf`
 | 
											`${$_("sponsorings")}_${t.name}-${locale}-${createId()}.pdf`
 | 
				
			||||||
					);
 | 
										);
 | 
				
			||||||
 | 
										if (count === totalCount) {
 | 
				
			||||||
 | 
											download_modal_open = false;
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
				})
 | 
									})
 | 
				
			||||||
				.catch((err) => {});
 | 
									.catch((err) => {});
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -61,15 +71,23 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	async function generateOrgContracts(locale) {
 | 
						async function generateOrgContracts(locale) {
 | 
				
			||||||
		toast.loading($_("generating-pdf"));
 | 
							toast.loading($_("generating-pdf"));
 | 
				
			||||||
		let count_orgs = 0;
 | 
							let totalCount = 0;
 | 
				
			||||||
		for (const o of generate_orgs) {
 | 
							for (const o of generate_orgs) {
 | 
				
			||||||
			count_orgs++;
 | 
								totalCount++;
 | 
				
			||||||
 | 
								for (const t of o.teams) {
 | 
				
			||||||
 | 
									totalCount++;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							console.log({ totalCount });
 | 
				
			||||||
		let count = 0;
 | 
							let count = 0;
 | 
				
			||||||
 | 
							for (const o of generate_orgs) {
 | 
				
			||||||
 | 
								count++;
 | 
				
			||||||
			let runners =
 | 
								let runners =
 | 
				
			||||||
				await RunnerOrganizationService.runnerOrganizationControllerGetRunners(
 | 
									await RunnerOrganizationService.runnerOrganizationControllerGetRunners(
 | 
				
			||||||
					o.id,
 | 
										o.id,
 | 
				
			||||||
					true
 | 
										true
 | 
				
			||||||
				);
 | 
									);
 | 
				
			||||||
 | 
								download_details = o.name;
 | 
				
			||||||
			await documentServer
 | 
								await documentServer
 | 
				
			||||||
				.generateContracts(runners, locale)
 | 
									.generateContracts(runners, locale)
 | 
				
			||||||
				.then((blob) => {
 | 
									.then((blob) => {
 | 
				
			||||||
@@ -84,6 +102,7 @@
 | 
				
			|||||||
				let runners = await RunnerTeamService.runnerTeamControllerGetRunners(
 | 
									let runners = await RunnerTeamService.runnerTeamControllerGetRunners(
 | 
				
			||||||
					t.id
 | 
										t.id
 | 
				
			||||||
				);
 | 
									);
 | 
				
			||||||
 | 
									download_details = `${o.name} > ${t.name}`;
 | 
				
			||||||
				await documentServer
 | 
									await documentServer
 | 
				
			||||||
					.generateContracts(runners, locale)
 | 
										.generateContracts(runners, locale)
 | 
				
			||||||
					.then((blob) => {
 | 
										.then((blob) => {
 | 
				
			||||||
@@ -93,15 +112,19 @@
 | 
				
			|||||||
								t.name
 | 
													t.name
 | 
				
			||||||
							}-${locale}-${createId()}.pdf`
 | 
												}-${locale}-${createId()}.pdf`
 | 
				
			||||||
						);
 | 
											);
 | 
				
			||||||
 | 
											console.log({ count });
 | 
				
			||||||
 | 
											if (count === totalCount) {
 | 
				
			||||||
 | 
												download_modal_open = false;
 | 
				
			||||||
 | 
											}
 | 
				
			||||||
					})
 | 
										})
 | 
				
			||||||
					.catch((err) => {});
 | 
										.catch((err) => {});
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	function generateRunnerContracts(locale) {
 | 
						async function generateRunnerContracts(locale) {
 | 
				
			||||||
		toast.loading($_("generating-pdf"));
 | 
							toast.loading($_("generating-pdf"));
 | 
				
			||||||
		documentServer
 | 
							await documentServer
 | 
				
			||||||
			.generateContracts(generate_runners, locale)
 | 
								.generateContracts(generate_runners, locale)
 | 
				
			||||||
			.then((blob) => {
 | 
								.then((blob) => {
 | 
				
			||||||
				let fileName = `${$_("sponsorings")}-${locale}-${createId()}.pdf`;
 | 
									let fileName = `${$_("sponsorings")}-${locale}-${createId()}.pdf`;
 | 
				
			||||||
@@ -111,6 +134,7 @@
 | 
				
			|||||||
					}-${locale}-${createId()}.pdf`;
 | 
										}-${locale}-${createId()}.pdf`;
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				download(blob, fileName);
 | 
									download(blob, fileName);
 | 
				
			||||||
 | 
									download_modal_open = false;
 | 
				
			||||||
			})
 | 
								})
 | 
				
			||||||
			.catch((err) => {
 | 
								.catch((err) => {
 | 
				
			||||||
				console.error(err);
 | 
									console.error(err);
 | 
				
			||||||
@@ -119,6 +143,7 @@
 | 
				
			|||||||
</script>
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
{#if sponsoring_contracts_show}
 | 
					{#if sponsoring_contracts_show}
 | 
				
			||||||
 | 
						<DownloadProgressModal {download_details} modal_open={download_modal_open} />
 | 
				
			||||||
	<button
 | 
						<button
 | 
				
			||||||
		on:click={() => {
 | 
							on:click={() => {
 | 
				
			||||||
			generateSponsoringContract("de");
 | 
								generateSponsoringContract("de");
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -74,7 +74,7 @@
 | 
				
			|||||||
                /></svg
 | 
					                /></svg
 | 
				
			||||||
              >
 | 
					              >
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
            <div class="mt-3 sm:text-left max-h-[75vh] overflow-y-auto">
 | 
					            <div class="mt-3 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">
 | 
				
			||||||
                {$_('delete_runner')}
 | 
					                {$_('delete_runner')}
 | 
				
			||||||
              </h3>
 | 
					              </h3>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -212,7 +212,9 @@
 | 
				
			|||||||
				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 rounded-t-xl lg:rounded-xl">
 | 
									<div
 | 
				
			||||||
 | 
										class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t-xl lg:rounded-xl"
 | 
				
			||||||
 | 
									>
 | 
				
			||||||
					<div class="">
 | 
										<div class="">
 | 
				
			||||||
						<div
 | 
											<div
 | 
				
			||||||
							class="flex-shrink-0 flex items-center justify-center size-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10"
 | 
												class="flex-shrink-0 flex items-center justify-center size-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10"
 | 
				
			||||||
@@ -278,24 +280,14 @@
 | 
				
			|||||||
							{/if}
 | 
												{/if}
 | 
				
			||||||
							{#if opened_from === "RunnerOverview"}
 | 
												{#if opened_from === "RunnerOverview"}
 | 
				
			||||||
								<p>{$_("group")}</p>
 | 
													<p>{$_("group")}</p>
 | 
				
			||||||
                <Select
 | 
													<select
 | 
				
			||||||
                  containerClasses="rounded-l-md mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm rounded-l-md sm:text-sm border-gray-300 border bg-gray-50 text-neutral-800 rounded-md p-2"
 | 
														bind:value={selected_org_or_team}
 | 
				
			||||||
                  itemFilter={(label, filterText, option) =>
 | 
														class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm rounded-l-md sm:text-sm border-gray-300 border bg-gray-50 text-neutral-800 rounded-md p-2"
 | 
				
			||||||
                    label.toLowerCase().includes(filterText.toLowerCase()) ||
 | 
													>
 | 
				
			||||||
                    option.id.value
 | 
														{#each groups as g}
 | 
				
			||||||
                      .toString()
 | 
															<option value={g.value}>{g.label}</option>
 | 
				
			||||||
                      .startsWith(filterText.toLowerCase())}
 | 
														{/each}
 | 
				
			||||||
                  items={groups}
 | 
													</select>
 | 
				
			||||||
                  showChevron={true}
 | 
					 | 
				
			||||||
                  placeholder={$_(
 | 
					 | 
				
			||||||
                    "search-for-an-organization-or-team-by-name-or-id"
 | 
					 | 
				
			||||||
                  )}
 | 
					 | 
				
			||||||
                  noOptionsMessage={$_("no-organization-or-team-found")}
 | 
					 | 
				
			||||||
                  on:select={(selectedValue) => {
 | 
					 | 
				
			||||||
                    selected_org_or_team = selectedValue.detail.value;
 | 
					 | 
				
			||||||
                  }}
 | 
					 | 
				
			||||||
                  on:clear={() => (selected_org_or_team = null)}
 | 
					 | 
				
			||||||
                />
 | 
					 | 
				
			||||||
							{/if}
 | 
												{/if}
 | 
				
			||||||
							{#if opened_from === "OrgDetail"}
 | 
												{#if opened_from === "OrgDetail"}
 | 
				
			||||||
								<p>
 | 
													<p>
 | 
				
			||||||
@@ -304,15 +296,8 @@
 | 
				
			|||||||
									})}
 | 
														})}
 | 
				
			||||||
								</p>
 | 
													</p>
 | 
				
			||||||
							{/if}
 | 
												{/if}
 | 
				
			||||||
              <input
 | 
					 | 
				
			||||||
                type="search"
 | 
					 | 
				
			||||||
                bind:value={searchvalue}
 | 
					 | 
				
			||||||
                placeholder={$_("datatable.search")}
 | 
					 | 
				
			||||||
                aria-label={$_("datatable.search")}
 | 
					 | 
				
			||||||
                class="p-2 w-full"
 | 
					 | 
				
			||||||
              />
 | 
					 | 
				
			||||||
							<div class="relative w-full mt-4 mb-4">
 | 
												<div class="relative w-full mt-4 mb-4">
 | 
				
			||||||
                <div class="w-full overflow-x-auto">
 | 
													<div class="w-full overflow-x-auto max-h-[50vh]">
 | 
				
			||||||
									<table class="divide-y divide-gray-200 w-full">
 | 
														<table class="divide-y divide-gray-200 w-full">
 | 
				
			||||||
										<thead class="bg-gray-50">
 | 
															<thead class="bg-gray-50">
 | 
				
			||||||
											<tr class="odd:bg-white even:bg-gray-100">
 | 
																<tr class="odd:bg-white even:bg-gray-100">
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -180,6 +180,7 @@
 | 
				
			|||||||
	import store from "../../store";
 | 
						import store from "../../store";
 | 
				
			||||||
	import AddRunnerModal from "./AddRunnerModal.svelte";
 | 
						import AddRunnerModal from "./AddRunnerModal.svelte";
 | 
				
			||||||
	import ImportRunnerModal from "./ImportRunnerModal.svelte";
 | 
						import ImportRunnerModal from "./ImportRunnerModal.svelte";
 | 
				
			||||||
 | 
						import toast from "svelte-french-toast";
 | 
				
			||||||
	$: current_runners = [];
 | 
						$: current_runners = [];
 | 
				
			||||||
	export let modal_open = false;
 | 
						export let modal_open = false;
 | 
				
			||||||
	export let import_modal_open = false;
 | 
						export let import_modal_open = false;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -204,6 +204,7 @@
 | 
				
			|||||||
    "donors-are-being-loaded": "Sponsoren werden geladen",
 | 
					    "donors-are-being-loaded": "Sponsoren werden geladen",
 | 
				
			||||||
    "dont-have-your-email-connected": "Deine E-Mail ist nicht verknüpft?",
 | 
					    "dont-have-your-email-connected": "Deine E-Mail ist nicht verknüpft?",
 | 
				
			||||||
    "dont-panic-were-resetting-it": "Keine Panik, wir setzen es zurück ✌",
 | 
					    "dont-panic-were-resetting-it": "Keine Panik, wir setzen es zurück ✌",
 | 
				
			||||||
 | 
					    "download_laeuft": "Download läuft...",
 | 
				
			||||||
    "e-mail-adress": "E-Mail-Adresse",
 | 
					    "e-mail-adress": "E-Mail-Adresse",
 | 
				
			||||||
    "edit": "Bearbeiten",
 | 
					    "edit": "Bearbeiten",
 | 
				
			||||||
    "edit-a-card": "Läuferkarte bearbeiten",
 | 
					    "edit-a-card": "Läuferkarte bearbeiten",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -204,6 +204,7 @@
 | 
				
			|||||||
    "donors-are-being-loaded": "donors are being loaded",
 | 
					    "donors-are-being-loaded": "donors are being loaded",
 | 
				
			||||||
    "dont-have-your-email-connected": "Don't have your email connected?",
 | 
					    "dont-have-your-email-connected": "Don't have your email connected?",
 | 
				
			||||||
    "dont-panic-were-resetting-it": "Don't panic, we're resetting it ✌",
 | 
					    "dont-panic-were-resetting-it": "Don't panic, we're resetting it ✌",
 | 
				
			||||||
 | 
					    "download_laeuft": "Download in progress...",
 | 
				
			||||||
    "e-mail-adress": "E-Mail Adress",
 | 
					    "e-mail-adress": "E-Mail Adress",
 | 
				
			||||||
    "edit": "Edit",
 | 
					    "edit": "Edit",
 | 
				
			||||||
    "edit-a-card": "Edit a card",
 | 
					    "edit-a-card": "Edit a card",
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user