Skip to content

Commit 65106ec

Browse files
committed
Fixed reactive lists issues
1 parent 69d480b commit 65106ec

3 files changed

Lines changed: 35 additions & 7 deletions

File tree

packages/puls-dom-adapter/src/PulsDOMAdapter.ts

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -188,14 +188,12 @@ export class PulsDOMAdapter extends PulsAdapter<Node[]>{
188188
const promisePlaceholder = this.document.createComment('promise')
189189
let returns: ChildNode[] = [promisePlaceholder]
190190

191-
queueMicrotask(() => {
192-
value.then((v: any) => {
193-
const fromValue = this.createFromValue(v)
191+
value.then((v: any) => {
192+
const fromValue = this.createFromValue(v)
194193

195-
if (fromValue?.[0]) {
196-
this.replaceElements([promisePlaceholder], fromValue as ChildNode[])
197-
}
198-
})
194+
if (fromValue?.[0]) {
195+
this.replaceElements([promisePlaceholder], fromValue as ChildNode[])
196+
}
199197
})
200198

201199
return returns

packages/puls-dom-adapter/tests/__snapshots__/dom-adapter.test.ts.snap

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,22 @@ exports[`dom-adapter-promise 2`] = `
9696
</div>
9797
`;
9898

99+
exports[`dom-adapter-promise-instant 1`] = `
100+
<div>
101+
<p>
102+
<!--promise-->
103+
</p>
104+
</div>
105+
`;
106+
107+
exports[`dom-adapter-promise-instant 2`] = `
108+
<div>
109+
<p>
110+
Async Loaded!
111+
</p>
112+
</div>
113+
`;
114+
99115
exports[`dom-adapter-slots 1`] = `
100116
<div>
101117
<div>

packages/puls-dom-adapter/tests/dom-adapter.test.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,20 @@ test('dom-adapter-promise', async () => {
121121
await promiseValue
122122
expect(div).toMatchSnapshot()
123123
})
124+
test('dom-adapter-promise-instant', async () => {
125+
const promiseValue = new Promise(resolve => setTimeout(() => resolve('Async Loaded!')))
126+
const d = new PulsDOMAdapter(html`
127+
<div>
128+
<p>${promiseValue}</p>
129+
</div>
130+
`.parse())
131+
132+
const [div] = d.render()
133+
expect(div).toMatchSnapshot()
134+
135+
await promiseValue
136+
expect(div).toMatchSnapshot()
137+
})
124138

125139
test('dom-adapter-slots', () => {
126140
const TestComponent = (props: { $slot?: any }) => new PulsDOMAdapter(html`

0 commit comments

Comments
 (0)