From 68b0efb6c99cb6f42c32d7af2243dfc227816d10 Mon Sep 17 00:00:00 2001 From: Scott Idem Date: Thu, 14 Mar 2024 20:31:37 -0400 Subject: [PATCH] Now with QR code scanner! --- package-lock.json | 8 +- package.json | 3 +- src/lib/element_qr_scanner.svelte | 395 ++++++++++++++++++ .../events_leads/exhibit/[slug]/+page.svelte | 19 +- 4 files changed, 419 insertions(+), 6 deletions(-) create mode 100644 src/lib/element_qr_scanner.svelte diff --git a/package-lock.json b/package-lock.json index 0916beae..d62aaed0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,8 @@ "axios": "^1.6.7", "dayjs": "^1.11.10", "dexie": "^4.0.1-beta.14", - "highlight.js": "11.9.0" + "highlight.js": "11.9.0", + "html5-qrcode": "^2.3.8" }, "devDependencies": { "@playwright/test": "^1.28.1", @@ -2928,6 +2929,11 @@ "node": ">=12.0.0" } }, + "node_modules/html5-qrcode": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/html5-qrcode/-/html5-qrcode-2.3.8.tgz", + "integrity": "sha512-jsr4vafJhwoLVEDW3n1KvPnCCXWaQfRng0/EEYk1vNcQGcG/htAdhJX0be8YyqMoSz7+hZvOZSTAepsabiuhiQ==" + }, "node_modules/human-signals": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", diff --git a/package.json b/package.json index bf328555..cb286454 100644 --- a/package.json +++ b/package.json @@ -53,6 +53,7 @@ "axios": "^1.6.7", "dayjs": "^1.11.10", "dexie": "^4.0.1-beta.14", - "highlight.js": "11.9.0" + "highlight.js": "11.9.0", + "html5-qrcode": "^2.3.8" } } diff --git a/src/lib/element_qr_scanner.svelte b/src/lib/element_qr_scanner.svelte new file mode 100644 index 00000000..d4e285e2 --- /dev/null +++ b/src/lib/element_qr_scanner.svelte @@ -0,0 +1,395 @@ + + + +
+ + + + + + +
+
+ {#if scanning_status == 'not_started' } + + {:else if scanning_status == 'paused' && show_pause_btn} + + Scanning paused + {:else if scanning_status == 'scanning'} + + {#if show_pause_btn} + + {/if} + Scanning for QR code... + {/if} +
+ +
+
+ + {#if show_qr_manual_text_entry_option} +
+ {#if show_qr_manual_entry} + + + + + +
+ +
+ + {:else} + + {/if} +
+ {/if} + + {#if show_qr_manual_badge_id_entry_option} +
+ {#if show_qr_manual_entry} +
handle_qr_manual_entry} class="form-floating"> + + + + + + + +
+ {:else} + + {/if} +
+ {/if} + + {#if show_qr_scan_result && qr_scan_result} +
+ Raw Result: + {qr_scan_result} +
+ {/if} + + +
+ + + diff --git a/src/routes/events_leads/exhibit/[slug]/+page.svelte b/src/routes/events_leads/exhibit/[slug]/+page.svelte index b4174d0c..55db101f 100644 --- a/src/routes/events_leads/exhibit/[slug]/+page.svelte +++ b/src/routes/events_leads/exhibit/[slug]/+page.svelte @@ -21,6 +21,7 @@ import { clipboard, FileDropzone, getModalStore, localStorageStore, ProgressRadi import type { Writable } from 'svelte/store'; import Element_data_store from '$lib/element_data_store.svelte'; +import Element_qr_scanner from '$lib/element_qr_scanner.svelte'; const store_current_tab: Writable = localStorageStore('ae_events_leads_current_tab', 'start'); console.log(`ae_events_leads exhibit +page.svelte [slug] store_current_tab:`, $store_current_tab); @@ -45,10 +46,14 @@ $events_slct.exhibit_id = param_slug_event_exhibit_id; console.log('Selected Event Exhibit ID:', $events_slct.exhibit_id); $events_trigger = 'load__event_exhibit_obj'; -$store_current_tab = 'start'; - let license_submit_results: Promise|key_val; +if ($events_loc.leads.auth_exhibit_li && $events_loc.leads.auth_exhibit_li[$events_slct.exhibit_id]) { + console.log('Already logged in.'); +} else { + console.log('Not logged in.'); + $store_current_tab = 'start'; +} onMount(() => { console.log('Events Leads Exhibit [slug]: +page.svelte'); @@ -838,6 +843,7 @@ function send_init_confirm_email({to_email}) { console.log('Show/Hide Details'); $events_loc.show_details = !$events_loc.show_details; }} + class="btn variant-soft-primary w-48" > Show/Hide Details @@ -851,7 +857,7 @@ function send_init_confirm_email({to_email}) { $events_loc.leads.auth_exhibit_li[$events_slct.exhibit_id] = null; }} title="Log out" - class="btn variant-soft-primary w-40" + class="btn variant-soft-primary w-48" > Log Out @@ -866,7 +872,12 @@ function send_init_confirm_email({to_email}) { {:else if $store_current_tab == 'add_scan'} {#if $events_loc?.leads.auth_exhibit_li && $events_loc.leads.auth_exhibit_li[$events_slct.exhibit_id]} -
Add/Scan: Logged in. Nothing here yet
+
Add/Scan: Logged in. Nothing here yet
+ + + + + {:else}
Add/Scan: Not logged in? Nothing here yet.
{/if}