added ui to update cards in flashcards tool!

This commit is contained in:
RezHackXYZ 2025-06-12 11:32:35 +05:30
parent 8824a81972
commit dc4674f031
No known key found for this signature in database
GPG key ID: C4C90E569C9669E2

View file

@ -1,27 +1,54 @@
<script> <script>
import { SetNewDeck, deck } from "./logic.svelte"; import { SetNewDeck, deck, stats } from "./logic.svelte";
import toast from "svelte-5-french-toast"; import toast from "svelte-5-french-toast";
let LocalDeck = $state.snapshot(deck); let LocalDeck = $state($state.snapshot(deck));
let deckText = JSON.stringify(LocalDeck, null, 2); // Pretty print for textarea
function saveDeck() { function saveDeck() {
try { localStorage.setItem("deck", JSON.stringify(LocalDeck));
const parsedDeck = JSON.parse(deckText); SetNewDeck(LocalDeck);
localStorage.setItem("deck", JSON.stringify(parsedDeck)); toast.success("Deck saved successfully! You can now close this window.");
SetNewDeck(parsedDeck);
toast.success("Deck saved successfully! You can now close this window.");
} catch (e) {
toast.error("Invalid JSON format!");
}
} }
</script> </script>
<div class="flex flex-col items-center gap-2 rounded border-2 bg-zinc-800 p-3"> <div class="flex flex-col items-center gap-7 rounded border-2 bg-zinc-800 p-3">
<textarea bind:value={deckText} class="input"></textarea> <div class="flex w-full flex-col gap-2">
<div class="flex w-full gap-2 text-3xl">
<button on:click={saveDeck} class="btn"> <span class="flex-1">Question</span>
<i class="nf nf-fa-save"></i> <span class="flex-1">Answer</span>
Save <button aria-label="delete" class="btn invisible"><i class="nf nf-md-delete"></i></button>
</button> </div>
{#each LocalDeck as card, i}
<div class="flex w-full gap-2">
<input type="text" class="input flex-1" bind:value={card.Q} />
<input type="text" class="input flex-1" bind:value={card.a} />
<button
aria-label="delete"
onclick={() => {
if (confirm("Are you sure you want to delete this card?")) {
LocalDeck.splice(i, 1);
toast.success("Card deleted successfully! To make it apply, please save the deck.");
}
}}
class="btn dull"><i class="nf nf-md-delete"></i></button
>
</div>
{/each}
</div>
<div class="flex gap-3">
<button
onclick={() => {
LocalDeck.push({ Q: "", a: "" });
toast.success("New card added! To make it apply, please save the deck.");
}}
class="btn"
>
<i class="nf nf-md-card_plus"></i>
Add New Card
</button>
<button onclick={saveDeck} class="btn">
<i class="nf nf-fa-save"></i>
Save
</button>
</div>
</div> </div>