frontend: Save submissions to display in interface later

This commit is contained in:
nemunaire 2025-03-29 14:34:58 +01:00
parent 404f29e6ea
commit 0f2dafa3b1
3 changed files with 58 additions and 0 deletions

View file

@ -17,6 +17,7 @@
import { my } from '$lib/stores/my.js';
import { settings } from '$lib/stores/settings.js';
import { submissions } from '$lib/stores/submissions.js';
import { timeouted, waitDiff, waitInProgress } from '$lib/wait.js';
import DateFormat from './DateFormat.svelte';
@ -36,6 +37,20 @@
message = "";
last_submission = JSON.parse(JSON.stringify(responses));
submissions.update((u) => {
for (const k in last_submission.flags) {
u.flags[k] = last_submission.flags[k];
}
for (const k in last_submission.mcqs) {
u.mcqs[k] = last_submission.mcqs[k];
}
for (const k in last_submission.justifications) {
u.justifications[k] = last_submission.justifications[k];
}
})
if ($my && $my.team_id === 0) {
let allGoodResponse = true;
for (const f in flags) {

View file

@ -9,6 +9,7 @@
import { my } from '$lib/stores/my.js';
import { settings } from '$lib/stores/settings.js';
import { submissions } from '$lib/stores/submissions.js';
export { className as class };
let className = '';
@ -247,6 +248,15 @@
title="Flag trouvé à {flag.found}"
value={value}
>
{:else if $submissions && $submissions.flags && $submissions.flags[flag.id]}
<input
class="form-control is-valid"
disabled
id="sol_{flag.type}{flag.id}_0"
type="text"
title="Flag trouvé à {flag.found}"
value={$submissions.flags[flag.id]}
>
{:else}
<Icon
name="check"

View file

@ -0,0 +1,33 @@
import { writable } from 'svelte/store';
function createSubmissionsStore() {
let init = {
flags: { },
mcqs: { },
justifications: { },
};
try {
if (window.localStorage && window.localStorage.getItem("submissionsStore")) {
init = JSON.parse(window.localStorage.getItem("submissionsStore"));
}
} catch {
init = {
flags: { },
mcqs: { },
justifications: { },
};
}
const { subscribe, set, update } = writable(init);
return {
subscribe,
update: (u) => {
update(u);
if (window.localStorage) localStorage.setItem("submissionsStore", JSON.stringify(init));
},
}
}
export const submissions = createSubmissionsStore();