Skip to content

Commit e27d318

Browse files
committed
bug #557 [LiveComponent] Fix svg re-render (norkunas)
This PR was merged into the 2.x branch. Discussion ---------- [LiveComponent] Fix svg re-render | Q | A | ------------- | --- | Bug fix? | no | New feature? | no | Tickets | #556 | License | MIT Commits ------- a2dfacd [LiveComponent] Fix svg re-render
2 parents 0e3e82f + a2dfacd commit e27d318

File tree

3 files changed

+28
-2
lines changed

3 files changed

+28
-2
lines changed

src/LiveComponent/assets/dist/live_controller.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1208,7 +1208,7 @@ function executeMorphdom(rootFromElement, rootToElement, modifiedFieldElements,
12081208
if (fromEl === rootFromElement) {
12091209
return true;
12101210
}
1211-
if (!(fromEl instanceof HTMLElement) || !(toEl instanceof HTMLElement)) {
1211+
if (!(fromEl instanceof HTMLElement || fromEl instanceof SVGElement) || !(toEl instanceof HTMLElement || toEl instanceof SVGElement)) {
12121212
return false;
12131213
}
12141214
const childComponent = childComponentMap.get(fromEl) || false;

src/LiveComponent/assets/src/morphdom.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,10 @@ export function executeMorphdom(
4040
return true;
4141
}
4242

43-
if (!(fromEl instanceof HTMLElement) || !(toEl instanceof HTMLElement)) {
43+
if (
44+
!(fromEl instanceof HTMLElement || fromEl instanceof SVGElement) ||
45+
!(toEl instanceof HTMLElement || toEl instanceof SVGElement)
46+
) {
4447
return false;
4548
}
4649

src/LiveComponent/assets/test/controller/render.test.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -342,4 +342,27 @@ describe('LiveController rendering Tests', () => {
342342

343343
await waitFor(() => expect(test.element).toHaveTextContent('Title: "greetings to you"'));
344344
});
345+
346+
it('can update svg', async () => {
347+
const test = await createTest({ text: 'SVG' }, (data: any) => `
348+
<div ${initComponent(data)}>
349+
<svg xmlns="http://www.w3.org/2000/svg" width="300" height="200">
350+
<text x="150" y="125" font-size="60" text-anchor="middle" fill="red">${data.text}</text>
351+
</svg>
352+
<button data-action="live#$render">Reload</button>
353+
</div>
354+
`);
355+
356+
test.expectsAjaxCall('get')
357+
.expectSentData(test.initialData)
358+
.serverWillChangeData((data: any) => {
359+
// change the data on the server so the template renders differently
360+
data.text = '123';
361+
})
362+
.init();
363+
364+
getByText(test.element, 'Reload').click();
365+
366+
await waitFor(() => expect(test.element).toHaveTextContent('123'));
367+
});
345368
});

0 commit comments

Comments
 (0)