Skip to content

Commit 9601ff3

Browse files
committed
test morph stream action events
1 parent 276ee38 commit 9601ff3

File tree

4 files changed

+75
-11
lines changed

4 files changed

+75
-11
lines changed

src/core/streams/actions/morph.js

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,13 @@ export default function morph(streamElement) {
77
try {
88
Idiomorph.morph(element, streamElement.templateContent, {
99
morphStyle: morphStyle,
10-
ignoreActiveValue: true,
1110
callbacks: {
1211
beforeNodeAdded,
1312
beforeNodeMorphed,
1413
beforeAttributeUpdated,
1514
beforeNodeRemoved,
16-
afterNodeMorphed,
17-
},
15+
afterNodeMorphed
16+
}
1817
})
1918
} catch (e) {
2019
console.error(e)
@@ -34,10 +33,10 @@ function beforeNodeMorphed(target, newElement) {
3433
if (target instanceof HTMLElement && !target.hasAttribute("data-turbo-permanent")) {
3534
const event = dispatch("turbo:before-morph-element", {
3635
cancelable: true,
36+
target,
3737
detail: {
38-
target,
39-
newElement,
40-
},
38+
newElement
39+
}
4140
})
4241
return !event.defaultPrevented
4342
}
@@ -50,8 +49,8 @@ function beforeAttributeUpdated(attributeName, target, mutationType) {
5049
target,
5150
detail: {
5251
attributeName,
53-
mutationType,
54-
},
52+
mutationType
53+
}
5554
})
5655
return !event.defaultPrevented
5756
}
@@ -61,8 +60,8 @@ function afterNodeMorphed(target, newElement) {
6160
dispatch("turbo:morph-element", {
6261
target,
6362
detail: {
64-
newElement,
65-
},
63+
newElement
64+
}
6665
})
6766
}
6867
}

src/core/streams/stream_actions.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,5 +41,5 @@ export const StreamActions = {
4141

4242
morph() {
4343
morph(this)
44-
},
44+
}
4545
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<!DOCTYPE html>
2+
<html id="html">
3+
<head>
4+
<meta charset="utf-8">
5+
<title>Morph Stream Action</title>
6+
<script src="/dist/turbo.es2017-umd.js" data-turbo-track="reload"></script>
7+
<script src="/src/tests/fixtures/test.js"></script>
8+
<meta name="turbo-refresh-method" content="replace">
9+
</head>
10+
11+
<body>
12+
<div id="message_1">
13+
<div>Morph me</div>
14+
</div>
15+
</body>
16+
</html>
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import { test, expect } from "@playwright/test"
2+
import { nextEventOnTarget, noNextEventOnTarget } from "../helpers/page"
3+
4+
test("dispatches a turbo:before-morph-element & turbo:morph-element for each morph stream action", async ({ page }) => {
5+
await page.goto("/src/tests/fixtures/morph_stream_action.html")
6+
7+
await page.evaluate(() => {
8+
window.Turbo.renderStreamMessage(`
9+
<turbo-stream action="morph" target="message_1">
10+
<template>
11+
<div id="message_1">
12+
<h1>Morphed</h1>
13+
</div>
14+
</template>
15+
</turbo-stream>
16+
`)
17+
})
18+
19+
await nextEventOnTarget(page, "message_1", "turbo:before-morph-element")
20+
await nextEventOnTarget(page, "message_1", "turbo:morph-element")
21+
await expect(page.locator("#message_1")).toHaveText("Morphed")
22+
})
23+
24+
test("preventing a turbo:before-morph-element prevents the morph", async ({ page }) => {
25+
await page.goto("/src/tests/fixtures/morph_stream_action.html")
26+
27+
28+
await page.evaluate(() => {
29+
addEventListener("turbo:before-morph-element", (event) => {
30+
event.preventDefault()
31+
})
32+
})
33+
34+
await page.evaluate(() => {
35+
window.Turbo.renderStreamMessage(`
36+
<turbo-stream action="morph" target="message_1">
37+
<template>
38+
<div id="message_1">
39+
<h1>Morphed</h1>
40+
</div>
41+
</template>
42+
</turbo-stream>
43+
`)
44+
})
45+
46+
await nextEventOnTarget(page, "message_1", "turbo:before-morph-element")
47+
await noNextEventOnTarget(page, "message_1", "turbo:morph-element")
48+
await expect(page.locator("#message_1")).toHaveText("Morph me")
49+
})

0 commit comments

Comments
 (0)