Skip to content

Commit e8ca182

Browse files
authored
feat: improve sverdle reactivity (#10670)
1 parent 4edf839 commit e8ca182

File tree

2 files changed

+18
-8
lines changed

2 files changed

+18
-8
lines changed

.changeset/silver-crews-drop.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"create-svelte": patch
3+
---
4+
5+
feat: improve sverdle reactivity

packages/create-svelte/templates/default/src/routes/sverdle/+page.svelte

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,11 @@
1616
/** The index of the current guess */
1717
$: i = won ? -1 : data.answers.length;
1818
19+
/** The current guess */
20+
$: currentGuess = data.guesses[i] || '';
21+
1922
/** Whether the current guess can be submitted */
20-
$: submittable = data.guesses[i]?.length === 5;
23+
$: submittable = currentGuess.length === 5;
2124
2225
/**
2326
* A map of classnames for all letters that have been guessed,
@@ -60,16 +63,15 @@
6063
* @param {MouseEvent} event
6164
*/
6265
function update(event: MouseEvent) {
63-
const guess = data.guesses[i];
6466
const key = /** @type {HTMLButtonElement} */ (event.target as HTMLButtonElement).getAttribute(
6567
'data-key'
6668
);
6769
6870
if (key === 'backspace') {
69-
data.guesses[i] = guess.slice(0, -1);
71+
currentGuess = currentGuess.slice(0, -1);
7072
if (form?.badGuess) form.badGuess = false;
71-
} else if (guess.length < 5) {
72-
data.guesses[i] += key;
73+
} else if (currentGuess.length < 5) {
74+
currentGuess += key;
7375
}
7476
}
7577
@@ -81,6 +83,8 @@
8183
function keydown(event: KeyboardEvent) {
8284
if (event.metaKey) return;
8385
86+
if (event.key === 'Enter' && !submittable) return;
87+
8488
document
8589
.querySelector(`[data-key="${event.key}" i]`)
8690
?.dispatchEvent(new MouseEvent('click', { cancelable: true }));
@@ -114,9 +118,10 @@
114118
<h2 class="visually-hidden">Row {row + 1}</h2>
115119
<div class="row" class:current>
116120
{#each Array.from(Array(5).keys()) as column (column)}
121+
{@const guess = current ? currentGuess : data.guesses[row]}
117122
{@const answer = data.answers[row]?.[column]}
118-
{@const value = data.guesses[row]?.[column] ?? ''}
119-
{@const selected = current && column === data.guesses[row].length}
123+
{@const value = guess?.[column] ?? ''}
124+
{@const selected = current && column === guess.length}
120125
{@const exact = answer === 'x'}
121126
{@const close = answer === 'c'}
122127
{@const missing = answer === '_'}
@@ -169,7 +174,7 @@
169174
on:click|preventDefault={update}
170175
data-key={letter}
171176
class={classnames[letter]}
172-
disabled={data.guesses[i].length === 5}
177+
disabled={submittable}
173178
formaction="?/update"
174179
name="key"
175180
value={letter}

0 commit comments

Comments
 (0)