Compare commits
	
		
			6 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						
						
							
						
						d9870e03bc
	
				 | 
					
					
						|||
| 
						
						
							
						
						785b9e0b60
	
				 | 
					
					
						|||
| 
						
						
							
						
						fce2bc645e
	
				 | 
					
					
						|||
| 
						
						
							
						
						991716a7f5
	
				 | 
					
					
						|||
| 
						
						
							
						
						aa720f2460
	
				 | 
					
					
						|||
| 
						
						
							
						
						ac4ef8fb6d
	
				 | 
					
					
						
							
								
								
									
										21
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								CHANGELOG.md
									
									
									
									
									
								
							@@ -2,9 +2,30 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
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.10.2](https://git.odit.services/lfk/frontend/compare/1.10.1...1.10.2)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- refactor(runners): filter table for created_via [`785b9e0`](https://git.odit.services/lfk/frontend/commit/785b9e0b60a9961f99d0c519d6bb12dc735ac605)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#### [1.10.1](https://git.odit.services/lfk/frontend/compare/1.10.0...1.10.1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					> 9 April 2025
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- feat: runner list filtered by created_via [`991716a`](https://git.odit.services/lfk/frontend/commit/991716a7f55d0414111ad264ad1e93de9e82971a)
 | 
				
			||||||
 | 
					- chore(release): 1.10.1 [`fce2bc6`](https://git.odit.services/lfk/frontend/commit/fce2bc645e040322f4d1b98a1ed1ab5df7227b6d)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#### [1.10.0](https://git.odit.services/lfk/frontend/compare/1.9.11...1.10.0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					> 9 April 2025
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- feat: working CardAssignment [`ac4ef8f`](https://git.odit.services/lfk/frontend/commit/ac4ef8fb6ded5c5d5678a651420e356b3ef45399)
 | 
				
			||||||
 | 
					- chore(release): 1.10.0 [`aa720f2`](https://git.odit.services/lfk/frontend/commit/aa720f2460079e35eed9d87a2ac580a3305efbd5)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#### [1.9.11](https://git.odit.services/lfk/frontend/compare/1.9.10...1.9.11)
 | 
					#### [1.9.11](https://git.odit.services/lfk/frontend/compare/1.9.10...1.9.11)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					> 8 April 2025
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- feat(dash): add runnersViaKiosk [`5291f8a`](https://git.odit.services/lfk/frontend/commit/5291f8a4d1721cd0c745191ebc85f221c34a23c8)
 | 
					- feat(dash): add runnersViaKiosk [`5291f8a`](https://git.odit.services/lfk/frontend/commit/5291f8a4d1721cd0c745191ebc85f221c34a23c8)
 | 
				
			||||||
 | 
					- chore(release): 1.9.11 [`eae0afd`](https://git.odit.services/lfk/frontend/commit/eae0afda23a54020e25821c0188d8cbec3139593)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#### [1.9.10](https://git.odit.services/lfk/frontend/compare/1.9.9...1.9.10)
 | 
					#### [1.9.10](https://git.odit.services/lfk/frontend/compare/1.9.9...1.9.10)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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.11-RELEASE_INFO</span
 | 
					      >RELEASE_INFO-1.10.2-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.11",
 | 
					  "version": "1.10.2",
 | 
				
			||||||
  "type": "module",
 | 
					  "type": "module",
 | 
				
			||||||
  "scripts": {
 | 
					  "scripts": {
 | 
				
			||||||
    "i18n-order": "node order.js",
 | 
					    "i18n-order": "node order.js",
 | 
				
			||||||
@@ -43,7 +43,7 @@
 | 
				
			|||||||
  },
 | 
					  },
 | 
				
			||||||
  "dependencies": {
 | 
					  "dependencies": {
 | 
				
			||||||
    "@fontsource/athiti": "^5.2.5",
 | 
					    "@fontsource/athiti": "^5.2.5",
 | 
				
			||||||
    "@odit/lfk-client-js": "1.2.2",
 | 
					    "@odit/lfk-client-js": "1.2.3",
 | 
				
			||||||
    "@paralleldrive/cuid2": "2.2.2",
 | 
					    "@paralleldrive/cuid2": "2.2.2",
 | 
				
			||||||
    "@tanstack/svelte-table": "8.9.1",
 | 
					    "@tanstack/svelte-table": "8.9.1",
 | 
				
			||||||
    "bwip-js": "3.4.0",
 | 
					    "bwip-js": "3.4.0",
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										10
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										10
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							@@ -12,8 +12,8 @@ importers:
 | 
				
			|||||||
        specifier: ^5.2.5
 | 
					        specifier: ^5.2.5
 | 
				
			||||||
        version: 5.2.5
 | 
					        version: 5.2.5
 | 
				
			||||||
      '@odit/lfk-client-js':
 | 
					      '@odit/lfk-client-js':
 | 
				
			||||||
        specifier: 1.2.2
 | 
					        specifier: 1.2.3
 | 
				
			||||||
        version: 1.2.2
 | 
					        version: 1.2.3
 | 
				
			||||||
      '@paralleldrive/cuid2':
 | 
					      '@paralleldrive/cuid2':
 | 
				
			||||||
        specifier: 2.2.2
 | 
					        specifier: 2.2.2
 | 
				
			||||||
        version: 2.2.2
 | 
					        version: 2.2.2
 | 
				
			||||||
@@ -355,8 +355,8 @@ packages:
 | 
				
			|||||||
  '@octokit/types@13.6.1':
 | 
					  '@octokit/types@13.6.1':
 | 
				
			||||||
    resolution: {integrity: sha512-PHZE9Z+kWXb23Ndik8MKPirBPziOc0D2/3KH1P+6jK5nGWe96kadZuE4jev2/Jq7FvIfTlT2Ltg8Fv2x1v0a5g==}
 | 
					    resolution: {integrity: sha512-PHZE9Z+kWXb23Ndik8MKPirBPziOc0D2/3KH1P+6jK5nGWe96kadZuE4jev2/Jq7FvIfTlT2Ltg8Fv2x1v0a5g==}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  '@odit/lfk-client-js@1.2.2':
 | 
					  '@odit/lfk-client-js@1.2.3':
 | 
				
			||||||
    resolution: {integrity: sha512-6UflZ8T8rV3yaBCMGC/fbBbsQkcld2RijcGrtv48bTqHGoUUG8aXuMXU7741I+eucxfxcal2/JfHih/I87IX7A==}
 | 
					    resolution: {integrity: sha512-QXJUVfH57iwykKNHQQC4z18/f7rnpCNCjvxijrOmuBMLsBNuYSzvrrqXyno4ce1rr5f0PD4IYtKmhcgJsk49wQ==}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  '@odit/license-exporter@0.2.0':
 | 
					  '@odit/license-exporter@0.2.0':
 | 
				
			||||||
    resolution: {integrity: sha512-RRyfQzDLoyLQlGSd8ThJQ3h0fiCe4tkmm935AUvSVQWP+p88FcnI4iaktKBJJVBnIpDhkv/7sDSA5dFc/QMM5w==}
 | 
					    resolution: {integrity: sha512-RRyfQzDLoyLQlGSd8ThJQ3h0fiCe4tkmm935AUvSVQWP+p88FcnI4iaktKBJJVBnIpDhkv/7sDSA5dFc/QMM5w==}
 | 
				
			||||||
@@ -2176,7 +2176,7 @@ snapshots:
 | 
				
			|||||||
    dependencies:
 | 
					    dependencies:
 | 
				
			||||||
      '@octokit/openapi-types': 22.2.0
 | 
					      '@octokit/openapi-types': 22.2.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  '@odit/lfk-client-js@1.2.2': {}
 | 
					  '@odit/lfk-client-js@1.2.3': {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  '@odit/license-exporter@0.2.0':
 | 
					  '@odit/license-exporter@0.2.0':
 | 
				
			||||||
    dependencies:
 | 
					    dependencies:
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										
											BIN
										
									
								
								public/beep.mp3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								public/beep.mp3
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							@@ -136,7 +136,7 @@
 | 
				
			|||||||
        </Route>
 | 
					        </Route>
 | 
				
			||||||
        <Route path="/runners/*">
 | 
					        <Route path="/runners/*">
 | 
				
			||||||
          <Route path="/">
 | 
					          <Route path="/">
 | 
				
			||||||
            <Runners />
 | 
					            <Runners created_via="all" />
 | 
				
			||||||
          </Route>
 | 
					          </Route>
 | 
				
			||||||
          <Route path="/:runnerid" let:params>
 | 
					          <Route path="/:runnerid" let:params>
 | 
				
			||||||
            <RunnerDetail {params} />
 | 
					            <RunnerDetail {params} />
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -41,7 +41,27 @@
 | 
				
			|||||||
				</svg>
 | 
									</svg>
 | 
				
			||||||
				<span>{$_("dashboard-title")}</span>
 | 
									<span>{$_("dashboard-title")}</span>
 | 
				
			||||||
			</a>
 | 
								</a>
 | 
				
			||||||
			{#if store.state.jwtinfo.userdetails.permissions.includes("RUNNER:GET")}
 | 
								{#if store.state.jwtinfo.userdetails.permissions.includes("RUNNER:GET") && store.state.jwtinfo.userdetails.permissions.includes("CARD:GET")}
 | 
				
			||||||
 | 
									<a
 | 
				
			||||||
 | 
										class:activenav={$router.path.includes("/cardassignment/")}
 | 
				
			||||||
 | 
										class="flex items-center px-4 py-3 transition cursor-pointer group hover:bg-gray-200 hover:text-gray-900 w-full font-semibold"
 | 
				
			||||||
 | 
										href="/cardassignment/"
 | 
				
			||||||
 | 
									>
 | 
				
			||||||
 | 
										<svg
 | 
				
			||||||
 | 
											xmlns="http://www.w3.org/2000/svg"
 | 
				
			||||||
 | 
											viewBox="0 0 24 24"
 | 
				
			||||||
 | 
											fill="currentColor"
 | 
				
			||||||
 | 
											class="flex-shrink-0 w-5 h-5 mr-2 transition group-hover:text-gray-600"
 | 
				
			||||||
 | 
										>
 | 
				
			||||||
 | 
											<path
 | 
				
			||||||
 | 
												fill-rule="evenodd"
 | 
				
			||||||
 | 
												d="M14.615 1.595a.75.75 0 0 1 .359.852L12.982 9.75h7.268a.75.75 0 0 1 .548 1.262l-10.5 11.25a.75.75 0 0 1-1.272-.71l1.992-7.302H3.75a.75.75 0 0 1-.548-1.262l10.5-11.25a.75.75 0 0 1 .913-.143Z"
 | 
				
			||||||
 | 
												clip-rule="evenodd"
 | 
				
			||||||
 | 
											/>
 | 
				
			||||||
 | 
										</svg>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
										<span>Card Assignment</span>
 | 
				
			||||||
 | 
									</a>
 | 
				
			||||||
				<a
 | 
									<a
 | 
				
			||||||
					class:activenav={$router.path.includes("/runners/")}
 | 
										class:activenav={$router.path.includes("/runners/")}
 | 
				
			||||||
					class="flex items-center px-4 py-3 transition cursor-pointer group hover:bg-gray-200 hover:text-gray-900 w-full font-semibold"
 | 
										class="flex items-center px-4 py-3 transition cursor-pointer group hover:bg-gray-200 hover:text-gray-900 w-full font-semibold"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,26 +1,30 @@
 | 
				
			|||||||
<script>
 | 
					<script>
 | 
				
			||||||
 | 
						import { RunnerCardService, RunnerService } from "@odit/lfk-client-js";
 | 
				
			||||||
	import QrCodeScanner from "./QrCodeScanner.svelte";
 | 
						import QrCodeScanner from "./QrCodeScanner.svelte";
 | 
				
			||||||
	let state = "scan_runner";
 | 
						let state = "scan_runner";
 | 
				
			||||||
	let runnerID = undefined;
 | 
						let runnerinfo = { id: 0, firstname: "", lastname: "" };
 | 
				
			||||||
	let cardInfo = "";
 | 
						let cardCode = "";
 | 
				
			||||||
 | 
						$: scannerActive = state.includes("scan");
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<div class="p-4">
 | 
					<div class="p-4">
 | 
				
			||||||
	<h3 class="text-3xl font-bold">Card Assignment for Mobile</h3>
 | 
						<h3 class="text-3xl font-bold">Card Assignment for Mobile</h3>
 | 
				
			||||||
	{#if state === "done"}
 | 
						<!-- <p>state</p>
 | 
				
			||||||
		<p>Assigned Card {cardInfo} ✅</p>
 | 
						<p>{state}</p>
 | 
				
			||||||
		<p>(not really, needs to be implemented)</p>
 | 
						<p>scannerActive</p>
 | 
				
			||||||
	{:else}
 | 
						<p>{scannerActive}</p> -->
 | 
				
			||||||
 | 
						{#if state.includes("scan_")}
 | 
				
			||||||
		<!--  -->
 | 
							<!--  -->
 | 
				
			||||||
		{#if state === "scan_runner"}
 | 
							{#if state === "scan_runner"}
 | 
				
			||||||
			<h3 class="text-xl font-bold">Scan Runner (Selfservice QR)</h3>
 | 
								<h3 class="text-xl font-bold">Scan Runner (Selfservice QR)</h3>
 | 
				
			||||||
		{/if}
 | 
							{/if}
 | 
				
			||||||
		{#if state === "scan_card"}
 | 
							{#if state === "scan_card"}
 | 
				
			||||||
			<h3 class="text-xl font-bold">Runner Scanned</h3>
 | 
								<h3 class="text-xl font-bold">Runner Scanned</h3>
 | 
				
			||||||
			<p>{runnerID}</p>
 | 
								<p>{runnerinfo.firstname} {runnerinfo.lastname} [#{runnerinfo.id}]</p>
 | 
				
			||||||
			<h3 class="text-xl font-bold">Scan Card (Code 128 Barcode)</h3>
 | 
								<h3 class="text-xl font-bold">Scan Card (Code 128 Barcode)</h3>
 | 
				
			||||||
		{/if}
 | 
							{/if}
 | 
				
			||||||
		<QrCodeScanner
 | 
							<QrCodeScanner
 | 
				
			||||||
 | 
								paused={!scannerActive}
 | 
				
			||||||
			on:detect={(e) => {
 | 
								on:detect={(e) => {
 | 
				
			||||||
				console.log({ type: "DETECT", code: e.detail.decodedText });
 | 
									console.log({ type: "DETECT", code: e.detail.decodedText });
 | 
				
			||||||
				if (state === "scan_runner") {
 | 
									if (state === "scan_runner") {
 | 
				
			||||||
@@ -29,13 +33,18 @@
 | 
				
			|||||||
							"https://portal.lauf-fuer-kaya.de/profile/"
 | 
												"https://portal.lauf-fuer-kaya.de/profile/"
 | 
				
			||||||
						)
 | 
											)
 | 
				
			||||||
					) {
 | 
										) {
 | 
				
			||||||
						runnerID = JSON.parse(
 | 
											const runnerID = JSON.parse(
 | 
				
			||||||
							atob(
 | 
												atob(
 | 
				
			||||||
								e.detail.decodedText
 | 
													e.detail.decodedText
 | 
				
			||||||
									.replace("https://portal.lauf-fuer-kaya.de/profile/", "")
 | 
														.replace("https://portal.lauf-fuer-kaya.de/profile/", "")
 | 
				
			||||||
									.split(".")[1]
 | 
														.split(".")[1]
 | 
				
			||||||
							)
 | 
												)
 | 
				
			||||||
						).id;
 | 
											).id;
 | 
				
			||||||
 | 
											new Audio("/beep.mp3").play();
 | 
				
			||||||
 | 
											RunnerService.runnerControllerGetOne(runnerID).then((runner) => {
 | 
				
			||||||
 | 
												console.log(runner);
 | 
				
			||||||
 | 
												runnerinfo = runner;
 | 
				
			||||||
 | 
											});
 | 
				
			||||||
						state = "scan_card";
 | 
											state = "scan_card";
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
@@ -45,8 +54,25 @@
 | 
				
			|||||||
							"https://portal.lauf-fuer-kaya.de/profile/"
 | 
												"https://portal.lauf-fuer-kaya.de/profile/"
 | 
				
			||||||
						)
 | 
											)
 | 
				
			||||||
					) {
 | 
										) {
 | 
				
			||||||
						cardInfo = e.detail.decodedText;
 | 
											cardCode = e.detail.decodedText;
 | 
				
			||||||
						state = "done";
 | 
											new Audio("/beep.mp3").play();
 | 
				
			||||||
 | 
											state = "assigning";
 | 
				
			||||||
 | 
											RunnerCardService.runnerCardControllerGetAll().then((cards) => {
 | 
				
			||||||
 | 
												console.log(cards);
 | 
				
			||||||
 | 
												const card = cards.find((c) => c.code === cardCode);
 | 
				
			||||||
 | 
												if (card) {
 | 
				
			||||||
 | 
													console.log("card found", card);
 | 
				
			||||||
 | 
													RunnerCardService.runnerCardControllerPut(card.id, {
 | 
				
			||||||
 | 
														enabled: true,
 | 
				
			||||||
 | 
														id: card.id,
 | 
				
			||||||
 | 
														runner: runnerinfo.id,
 | 
				
			||||||
 | 
													}).then(() => {
 | 
				
			||||||
 | 
														state = "done";
 | 
				
			||||||
 | 
													});
 | 
				
			||||||
 | 
												} else {
 | 
				
			||||||
 | 
													state = "error_card_404";
 | 
				
			||||||
 | 
												}
 | 
				
			||||||
 | 
											});
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}}
 | 
								}}
 | 
				
			||||||
@@ -58,8 +84,8 @@
 | 
				
			|||||||
			<button
 | 
								<button
 | 
				
			||||||
				on:click={() => {
 | 
									on:click={() => {
 | 
				
			||||||
					state = "scan_runner";
 | 
										state = "scan_runner";
 | 
				
			||||||
					runnerID = undefined;
 | 
										runnerinfo = { id: 0, firstname: "", lastname: "" };
 | 
				
			||||||
					cardInfo = "";
 | 
										cardCode = "";
 | 
				
			||||||
				}}
 | 
									}}
 | 
				
			||||||
				type="button"
 | 
									type="button"
 | 
				
			||||||
				class="py-3 px-4 inline-flex items-center gap-x-2 text-sm font-medium rounded-lg border border-transparent bg-red-100 text-red-800 hover:bg-red-200 focus:outline-hidden focus:bg-red-200 disabled:opacity-50 disabled:pointer-events-none dark:text-red-500 dark:bg-red-800/30 dark:hover:bg-red-800/20 dark:focus:bg-red-800/20 w-full mt-2"
 | 
									class="py-3 px-4 inline-flex items-center gap-x-2 text-sm font-medium rounded-lg border border-transparent bg-red-100 text-red-800 hover:bg-red-200 focus:outline-hidden focus:bg-red-200 disabled:opacity-50 disabled:pointer-events-none dark:text-red-500 dark:bg-red-800/30 dark:hover:bg-red-800/20 dark:focus:bg-red-800/20 w-full mt-2"
 | 
				
			||||||
@@ -68,5 +94,30 @@
 | 
				
			|||||||
			</button>
 | 
								</button>
 | 
				
			||||||
		{/if}
 | 
							{/if}
 | 
				
			||||||
		<!--  -->
 | 
							<!--  -->
 | 
				
			||||||
 | 
						{:else}
 | 
				
			||||||
 | 
							<!--  -->
 | 
				
			||||||
 | 
							{#if state === "assigning"}
 | 
				
			||||||
 | 
								<p>Assigning Card {cardCode} ⌛</p>
 | 
				
			||||||
 | 
								<p>Please wait a moment while we assign the card...</p>
 | 
				
			||||||
 | 
							{/if}
 | 
				
			||||||
 | 
							{#if state === "done"}
 | 
				
			||||||
 | 
								<p>
 | 
				
			||||||
 | 
									Assigned Card {cardCode} to {runnerinfo.firstname}
 | 
				
			||||||
 | 
									{runnerinfo.lastname} [#{runnerinfo.id}] ✅
 | 
				
			||||||
 | 
								</p>
 | 
				
			||||||
 | 
								<button
 | 
				
			||||||
 | 
									on:click={() => {
 | 
				
			||||||
 | 
										// state = "scan_runner";
 | 
				
			||||||
 | 
										// runnerinfo = { id: 0, firstname: "", lastname: "" };
 | 
				
			||||||
 | 
										// cardCode = "";
 | 
				
			||||||
 | 
										location.reload();
 | 
				
			||||||
 | 
									}}
 | 
				
			||||||
 | 
									type="button"
 | 
				
			||||||
 | 
									class="py-3 px-4 inline-flex items-center gap-x-2 text-sm font-medium rounded-lg border border-transparent bg-blue-100 text-blue-800 hover:bg-blue-200 focus:outline-hidden focus:bg-blue-200 disabled:opacity-50 disabled:pointer-events-none dark:text-blue-500 dark:bg-blue-800/30 dark:hover:bg-blue-800/20 dark:focus:bg-blue-800/20 w-full mt-2"
 | 
				
			||||||
 | 
								>
 | 
				
			||||||
 | 
									Done
 | 
				
			||||||
 | 
								</button>
 | 
				
			||||||
 | 
							{/if}
 | 
				
			||||||
 | 
							<!--  -->
 | 
				
			||||||
	{/if}
 | 
						{/if}
 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,12 +14,16 @@
 | 
				
			|||||||
	const dispatch = createEventDispatcher();
 | 
						const dispatch = createEventDispatcher();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	function onScanSuccess(decodedText, decodedResult) {
 | 
						function onScanSuccess(decodedText, decodedResult) {
 | 
				
			||||||
		dispatch("detect", { decodedText });
 | 
							if (!paused) {
 | 
				
			||||||
 | 
								dispatch("detect", { decodedText });
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// usually better to ignore and keep scanning
 | 
						// usually better to ignore and keep scanning
 | 
				
			||||||
	function onScanFailure(message) {
 | 
						function onScanFailure(message) {
 | 
				
			||||||
		dispatch("error", { message });
 | 
							if (!paused) {
 | 
				
			||||||
 | 
								dispatch("error", { message });
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	let scanner;
 | 
						let scanner;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -100,7 +100,7 @@
 | 
				
			|||||||
				<nav class="w-full flex">
 | 
									<nav class="w-full flex">
 | 
				
			||||||
					<ol class="list-none flex flex-row items-center justify-start">
 | 
										<ol class="list-none flex flex-row items-center justify-start">
 | 
				
			||||||
						<li class="flex items-center">
 | 
											<li class="flex items-center">
 | 
				
			||||||
							<a class="mr-2" href="./"
 | 
												<a class="mr-2" href="/runners/"
 | 
				
			||||||
								><svg
 | 
													><svg
 | 
				
			||||||
									xmlns="http://www.w3.org/2000/svg"
 | 
														xmlns="http://www.w3.org/2000/svg"
 | 
				
			||||||
									width="24"
 | 
														width="24"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,6 +32,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	$: active_delete = undefined;
 | 
						$: active_delete = undefined;
 | 
				
			||||||
	let dataLoaded = false;
 | 
						let dataLoaded = false;
 | 
				
			||||||
 | 
						export let created_via = "all";
 | 
				
			||||||
	export let current_runners = [];
 | 
						export let current_runners = [];
 | 
				
			||||||
	$: sponsoring_contracts_show = selected.length > 0;
 | 
						$: sponsoring_contracts_show = selected.length > 0;
 | 
				
			||||||
	$: cards_show = selected.length > 0;
 | 
						$: cards_show = selected.length > 0;
 | 
				
			||||||
@@ -75,6 +76,11 @@
 | 
				
			|||||||
			header: () => $_("last-name"),
 | 
								header: () => $_("last-name"),
 | 
				
			||||||
			filterFn: `includesString`,
 | 
								filterFn: `includesString`,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								accessorKey: "created_via",
 | 
				
			||||||
 | 
								header: () => "created_via",
 | 
				
			||||||
 | 
								filterFn: `includesString`,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			accessorKey: "group",
 | 
								accessorKey: "group",
 | 
				
			||||||
			header: () => $_("group"),
 | 
								header: () => $_("group"),
 | 
				
			||||||
@@ -103,7 +109,7 @@
 | 
				
			|||||||
			header: () => $_("action"),
 | 
								header: () => $_("action"),
 | 
				
			||||||
			cell: (info) => {
 | 
								cell: (info) => {
 | 
				
			||||||
				return renderComponent(TableActions, {
 | 
									return renderComponent(TableActions, {
 | 
				
			||||||
					detailsLink: `./${info.row.original.id}`,
 | 
										detailsLink: `/runners/${info.row.original.id}`,
 | 
				
			||||||
					deleteAction: () => {
 | 
										deleteAction: () => {
 | 
				
			||||||
						active_delete =
 | 
											active_delete =
 | 
				
			||||||
							current_runners[
 | 
												current_runners[
 | 
				
			||||||
@@ -161,7 +167,11 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		let page = 0;
 | 
							let page = 0;
 | 
				
			||||||
		while (page >= 0) {
 | 
							while (page >= 0) {
 | 
				
			||||||
			const runners = await RunnerService.runnerControllerGetAll(page, 500);
 | 
								const runners = await RunnerService.runnerControllerGetAll(
 | 
				
			||||||
 | 
									page,
 | 
				
			||||||
 | 
									500,
 | 
				
			||||||
 | 
									created_via
 | 
				
			||||||
 | 
								);
 | 
				
			||||||
			if (runners.length == 0) {
 | 
								if (runners.length == 0) {
 | 
				
			||||||
				page = -2;
 | 
									page = -2;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@@ -190,6 +200,9 @@
 | 
				
			|||||||
	<h4 class="mb-1 text-3xl font-extrabold leading-tight">
 | 
						<h4 class="mb-1 text-3xl font-extrabold leading-tight">
 | 
				
			||||||
		{$_("runners")}
 | 
							{$_("runners")}
 | 
				
			||||||
	</h4>
 | 
						</h4>
 | 
				
			||||||
 | 
						{#if created_via !== "all"}
 | 
				
			||||||
 | 
							<p>created_via={created_via}</p>
 | 
				
			||||||
 | 
						{/if}
 | 
				
			||||||
	{#if store.state.jwtinfo.userdetails.permissions.includes("RUNNER:CREATE")}
 | 
						{#if store.state.jwtinfo.userdetails.permissions.includes("RUNNER:CREATE")}
 | 
				
			||||||
		<button
 | 
							<button
 | 
				
			||||||
			on:click={() => {
 | 
								on:click={() => {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user