mirror of
https://github.com/Djeeberjr/fw-anwesenheit.git
synced 2026-04-30 18:49: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"] }
|
||||
|
||||
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"] }
|
||||
heapless = { version = "0.8.0", default-features = false }
|
||||
chrono = { version = "0.4.41", default-features = false }
|
||||
|
||||
@@ -5,7 +5,12 @@
|
||||
import AddIDModal from "./lib/AddIDModal.svelte";
|
||||
import ExportModal from "./lib/ExportModal.svelte";
|
||||
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";
|
||||
|
||||
let lastID: string = $state("");
|
||||
@@ -15,7 +20,11 @@
|
||||
let exportModal: ExportModal;
|
||||
|
||||
onMount(async () => {
|
||||
mapping = await fetchMapping();
|
||||
mapping = loadCachedMappingFromLocalstore();
|
||||
|
||||
let fetchedMapping = await fetchMapping();
|
||||
mapping = fetchedMapping;
|
||||
cacheMappingInLocalstore(fetchedMapping);
|
||||
|
||||
let sse = new EventSource("/api/idevent");
|
||||
sse.addEventListener("msg", function (e) {
|
||||
@@ -56,16 +65,23 @@
|
||||
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}
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<AddIDModal
|
||||
bind:this={addModal}
|
||||
onSubmitted={async () => {
|
||||
mapping = await fetchMapping();
|
||||
onSubmitted={async (id, firstName, lastname) => {
|
||||
if (mapping == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
mapping[id] = {
|
||||
first: firstName,
|
||||
last: lastname,
|
||||
};
|
||||
}}
|
||||
/>
|
||||
|
||||
|
||||
@@ -1,7 +1,11 @@
|
||||
<script lang="ts">
|
||||
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 firstName = $state("");
|
||||
@@ -9,7 +13,11 @@
|
||||
|
||||
let modal: Modal;
|
||||
|
||||
export function open(presetID: string, presetFirstName?: string, presetLastName?: string) {
|
||||
export function open(
|
||||
presetID: string,
|
||||
presetFirstName?: string,
|
||||
presetLastName?: string,
|
||||
) {
|
||||
displayID = presetID;
|
||||
|
||||
firstName = presetFirstName ?? "";
|
||||
@@ -33,13 +41,14 @@
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
body: JSON.stringify(data),
|
||||
}).then(() => {
|
||||
onSubmitted?.();
|
||||
}).then((res) => {
|
||||
if (res.status == 201) {
|
||||
onSubmitted?.(displayID, firstName, lastName);
|
||||
}
|
||||
firstName = "";
|
||||
lastName = "";
|
||||
displayID = "";
|
||||
});
|
||||
|
||||
firstName = "";
|
||||
lastName = "";
|
||||
displayID = "";
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
@@ -32,6 +32,32 @@ export async function fetchMapping(): Promise<IDMap> {
|
||||
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) {
|
||||
let req = await fetch("/api/mapping", {
|
||||
method: "POST",
|
||||
|
||||
Reference in New Issue
Block a user