mirror of
https://github.com/Djeeberjr/fw-anwesenheit.git
synced 2026-05-01 02:59:09 +00:00
Compare commits
4 Commits
02798d90c4
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 1731cff9c9 | |||
| 336249fd12 | |||
| 5ffeb969e2 | |||
| a4ab0bad48 |
1
.gitattributes
vendored
Normal file
1
.gitattributes
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
/pcb/bom/ibom.html linguist-vendored
|
||||||
@@ -19,7 +19,7 @@ esp-radio = { version = "0.16.0", features = ["esp32c6","esp-alloc", "wifi", "lo
|
|||||||
esp-rtos = { version = "0.1.1", features = ["esp32c6", "embassy", "esp-radio", "esp-alloc"] }
|
esp-rtos = { version = "0.1.1", features = ["esp32c6", "embassy", "esp-radio", "esp-alloc"] }
|
||||||
|
|
||||||
critical-section = "1.2.0"
|
critical-section = "1.2.0"
|
||||||
log = { version = "0.4" }
|
log = { version = "0.4", features = ["release_max_level_info"]}
|
||||||
static_cell = { version = "2.1.1", features = ["nightly"] }
|
static_cell = { version = "2.1.1", features = ["nightly"] }
|
||||||
heapless = { version = "0.8.0", default-features = false }
|
heapless = { version = "0.8.0", default-features = false }
|
||||||
chrono = { version = "0.4.41", default-features = false }
|
chrono = { version = "0.4.41", default-features = false }
|
||||||
|
|||||||
@@ -5,7 +5,12 @@
|
|||||||
import AddIDModal from "./lib/AddIDModal.svelte";
|
import AddIDModal from "./lib/AddIDModal.svelte";
|
||||||
import ExportModal from "./lib/ExportModal.svelte";
|
import ExportModal from "./lib/ExportModal.svelte";
|
||||||
import { generateCSVFile } from "./lib/exporting";
|
import { generateCSVFile } from "./lib/exporting";
|
||||||
import { fetchMapping, type IDMap } from "./lib/IDMapping";
|
import {
|
||||||
|
cacheMappingInLocalstore,
|
||||||
|
fetchMapping,
|
||||||
|
loadCachedMappingFromLocalstore,
|
||||||
|
type IDMap,
|
||||||
|
} from "./lib/IDMapping";
|
||||||
import { downloadBlob } from "./lib/downloadBlob";
|
import { downloadBlob } from "./lib/downloadBlob";
|
||||||
|
|
||||||
let lastID: string = $state("");
|
let lastID: string = $state("");
|
||||||
@@ -15,7 +20,11 @@
|
|||||||
let exportModal: ExportModal;
|
let exportModal: ExportModal;
|
||||||
|
|
||||||
onMount(async () => {
|
onMount(async () => {
|
||||||
mapping = await fetchMapping();
|
mapping = loadCachedMappingFromLocalstore();
|
||||||
|
|
||||||
|
let fetchedMapping = await fetchMapping();
|
||||||
|
mapping = fetchedMapping;
|
||||||
|
cacheMappingInLocalstore(fetchedMapping);
|
||||||
|
|
||||||
let sse = new EventSource("/api/idevent");
|
let sse = new EventSource("/api/idevent");
|
||||||
sse.addEventListener("msg", function (e) {
|
sse.addEventListener("msg", function (e) {
|
||||||
@@ -56,16 +65,23 @@
|
|||||||
addModal.open(id, firstName, lastName);
|
addModal.open(id, firstName, lastName);
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
<span>Gesammmte einträge: { Object.keys(mapping).length}</span>
|
<span>Gesammmte einträge: {Object.keys(mapping).length}</span>
|
||||||
|
{:else}
|
||||||
|
Lade ...
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<AddIDModal
|
<AddIDModal
|
||||||
bind:this={addModal}
|
bind:this={addModal}
|
||||||
onSubmitted={async () => {
|
onSubmitted={async (id, firstName, lastname) => {
|
||||||
mapping = await fetchMapping();
|
if (mapping == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
mapping[id] = {
|
||||||
|
first: firstName,
|
||||||
|
last: lastname,
|
||||||
|
};
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,11 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Modal from "./Modal.svelte";
|
import Modal from "./Modal.svelte";
|
||||||
|
|
||||||
let { onSubmitted }: { onSubmitted?: () => void } = $props();
|
let {
|
||||||
|
onSubmitted,
|
||||||
|
}: {
|
||||||
|
onSubmitted?: (id: string, firstName: string, lastName: string) => void;
|
||||||
|
} = $props();
|
||||||
|
|
||||||
let displayID = $state("");
|
let displayID = $state("");
|
||||||
let firstName = $state("");
|
let firstName = $state("");
|
||||||
@@ -9,7 +13,11 @@
|
|||||||
|
|
||||||
let modal: Modal;
|
let modal: Modal;
|
||||||
|
|
||||||
export function open(presetID: string, presetFirstName?: string, presetLastName?: string) {
|
export function open(
|
||||||
|
presetID: string,
|
||||||
|
presetFirstName?: string,
|
||||||
|
presetLastName?: string,
|
||||||
|
) {
|
||||||
displayID = presetID;
|
displayID = presetID;
|
||||||
|
|
||||||
firstName = presetFirstName ?? "";
|
firstName = presetFirstName ?? "";
|
||||||
@@ -33,13 +41,14 @@
|
|||||||
"Content-Type": "application/json",
|
"Content-Type": "application/json",
|
||||||
},
|
},
|
||||||
body: JSON.stringify(data),
|
body: JSON.stringify(data),
|
||||||
}).then(() => {
|
}).then((res) => {
|
||||||
onSubmitted?.();
|
if (res.status == 201) {
|
||||||
});
|
onSubmitted?.(displayID, firstName, lastName);
|
||||||
|
}
|
||||||
firstName = "";
|
firstName = "";
|
||||||
lastName = "";
|
lastName = "";
|
||||||
displayID = "";
|
displayID = "";
|
||||||
|
});
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@@ -32,6 +32,32 @@ export async function fetchMapping(): Promise<IDMap> {
|
|||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const CACHE_KEY = "idmap";
|
||||||
|
|
||||||
|
export function cacheMappingInLocalstore(mapping: IDMap) {
|
||||||
|
if (!localStorage) {
|
||||||
|
console.error("localStorage is not available");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
localStorage.setItem(CACHE_KEY, JSON.stringify(mapping));
|
||||||
|
}
|
||||||
|
|
||||||
|
export function loadCachedMappingFromLocalstore(): IDMap | null {
|
||||||
|
if (!localStorage) {
|
||||||
|
console.error("localStorage is not available");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = localStorage.getItem(CACHE_KEY);
|
||||||
|
if (!data) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
const mapping = JSON.parse(data);
|
||||||
|
return mapping;
|
||||||
|
}
|
||||||
|
|
||||||
export async function addMapping(id: string, firstName: string, lastName: string) {
|
export async function addMapping(id: string, firstName: string, lastName: string) {
|
||||||
let req = await fetch("/api/mapping", {
|
let req = await fetch("/api/mapping", {
|
||||||
method: "POST",
|
method: "POST",
|
||||||
|
|||||||
Reference in New Issue
Block a user