Skip to content

Commit

Permalink
fix: improve each block with animate (#9839)
Browse files Browse the repository at this point in the history
  • Loading branch information
trueadm authored Dec 7, 2023
1 parent 388e3e6 commit 08d93a2
Show file tree
Hide file tree
Showing 4 changed files with 96 additions and 0 deletions.
5 changes: 5 additions & 0 deletions .changeset/twelve-dragons-join.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'svelte': patch
---

fix: improve each block with animate
1 change: 1 addition & 0 deletions packages/svelte/src/internal/client/each.js
Original file line number Diff line number Diff line change
Expand Up @@ -514,6 +514,7 @@ function reconcile_tracked_array(
a = sources[i];
if (pos === MOVED_BLOCK && a !== LIS_BLOCK) {
block = b_blocks[b_end];
item = array[b_end];
update_each_item_block(block, item, b_end, flags);
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
import { flushSync } from 'svelte';
import { ok, test } from '../../test';

export default test({
async test({ assert, target, window }) {
const button = target.querySelector('button');
ok(button);

assert.htmlEqual(
target.innerHTML,
`
<button>Shuffle</button><div class="list"><label><input type="checkbox">
write
some
docs</label><label><input type="checkbox">
start
writing
JSConf
talk</label><label><input type="checkbox">
buy
some
milk</label><label><input type="checkbox">
mow
the
lawn</label><label><input type="checkbox">
feed
the
turtle</label><label><input type="checkbox">
fix
some
bugs</label></div>`
);

flushSync(() => {
button.click();
});

assert.htmlEqual(
target.innerHTML,
`
<button>Shuffle</button><div class="list"><label><input type="checkbox">
fix
some
bugs</label><label><input type="checkbox">
feed
the
turtle</label><label><input type="checkbox">
mow
the
lawn</label><label><input type="checkbox">
buy
some
milk</label><label><input type="checkbox">
start
writing
JSConf
talk</label><label><input type="checkbox">
write
some
docs</label></div>`
);
}
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<script>
import { flip } from 'svelte/animate';
let todos = [
{ id: 1, done: false, description: 'write some docs' },
{ id: 2, done: false, description: 'start writing JSConf talk' },
{ id: 3, done: true, description: 'buy some milk' },
{ id: 4, done: false, description: 'mow the lawn' },
{ id: 5, done: false, description: 'feed the turtle' },
{ id: 6, done: false, description: 'fix some bugs' }
];
function update() {
todos = Array.from(todos).reverse();
}
</script>

<button on:click={update}>Shuffle</button>

<div class="list">
{#each todos as todo (todo.id)}
<label animate:flip>
<input type="checkbox" bind:checked={todo.done} />
{todo.description}
</label>
{/each}
</div>

1 comment on commit 08d93a2

@vercel
Copy link

@vercel vercel bot commented on 08d93a2 Dec 7, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Successfully deployed to the following URLs:

svelte-5-preview – ./sites/svelte-5-preview

svelte-5-preview-svelte.vercel.app
svelte-octane.vercel.app
svelte-5-preview-git-main-svelte.vercel.app
svelte-5-preview.vercel.app

Please sign in to comment.