aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoris2023-02-12 12:35:09 +0100
committerJoris2023-02-12 12:35:09 +0100
commit2dc698c09a32d291ea83296f2e81edf182bb6de0 (patch)
treebe990d78d2dc9ee2b00f3e751d51d88481313a28
parentd0431c7f81e20dfb77a6fe154292d6b06f433984 (diff)
downloadrx-2dc698c09a32d291ea83296f2e81edf182bb6de0.tar.gz
rx-2dc698c09a32d291ea83296f2e81edf182bb6de0.tar.bz2
rx-2dc698c09a32d291ea83296f2e81edf182bb6de0.zip
Fix double map child
The rx-base was not added at the right location, and not cleaned up.
-rw-r--r--src/example.ts37
-rw-r--r--src/rx.ts9
2 files changed, 42 insertions, 4 deletions
diff --git a/src/example.ts b/src/example.ts
index c23a4eb..360bf8b 100644
--- a/src/example.ts
+++ b/src/example.ts
@@ -126,9 +126,44 @@ const chrono =
}))
])
+const doubleMapChild =
+ withVar(true, (isEven, updateIsEven) =>
+ withVar('', (search, updateSearch) => {
+ const books = [...Array(50).keys()]
+
+ const filteredBooks = isEven.flatMap(f => search.map(s =>
+ books.filter(b =>
+ (f ? b % 2 === 0 : b % 2 === 1) &&
+ (s === '' || b.toString().includes(s)))))
+
+ return [
+ checkboxComponent({
+ label: 'Even?',
+ isChecked: isEven,
+ onCheck: checked => updateIsEven(_ => checked)
+ }),
+ h(
+ 'input',
+ { oninput: (event: Event) => updateSearch(_ => (event.target as HTMLInputElement).value)
+ , style: 'margin-left: 1rem'
+ }
+ ),
+ h('hr'),
+ isEven.map(b =>
+ b
+ ? filteredBooks.map(xs => `isEven (${xs.length})`)
+ : filteredBooks.map(xs => `isOdd (${xs.length})`)
+ ),
+ h('hr'),
+ filteredBooks.map(bs => bs.map(b => h('div', b))),
+ h('hr')
+ ]
+ })
+ )
+
const view = h('main',
h('h1', 'Rx'),
- chrono
+ doubleMapChild
)
mount(view)
diff --git a/src/rx.ts b/src/rx.ts
index dbdd3ad..1b41c27 100644
--- a/src/rx.ts
+++ b/src/rx.ts
@@ -328,8 +328,8 @@ function appendChild(state: State, element: Element, child: Child, lastAdded?: N
lastAdded: appendRes.lastAdded
}
} else if (isRx(child)) {
- const rxBase = document.createTextNode("")
- element.append(rxBase)
+ const rxBase = document.createTextNode('')
+ appendNode(element, rxBase, lastAdded)
let appendRes: AppendResult = {
cancel: voidCancel,
remove: voidRemove,
@@ -345,7 +345,10 @@ function appendChild(state: State, element: Element, child: Child, lastAdded?: N
appendRes.cancel()
cancelRx()
},
- remove: appendRes.remove,
+ remove: () => {
+ appendRes.remove()
+ element.removeChild(rxBase)
+ },
lastAdded: appendRes.lastAdded,
}
} else if (child === undefined || child === false) {