Skip to content

Commit fc82a66

Browse files
committed
Proper prioritization of children over spread
1 parent 49389ba commit fc82a66

File tree

6 files changed

+41
-13
lines changed

6 files changed

+41
-13
lines changed

package-lock.json

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "dom-expressions",
33
"description": "A Fine-Grained Runtime for Performant DOM Rendering",
4-
"version": "0.14.11",
4+
"version": "0.14.12",
55
"author": "Ryan Carniato",
66
"license": "MIT",
77
"repository": {
@@ -24,7 +24,7 @@
2424
"devDependencies": {
2525
"@babel/core": "^7.7.7",
2626
"@babel/preset-env": "^7.7.7",
27-
"babel-plugin-jsx-dom-expressions": "0.14.12",
27+
"babel-plugin-jsx-dom-expressions": "0.14.15",
2828
"coveralls": "3.0.9",
2929
"jest": "24.9.0",
3030
"s-js": "~0.4.9"

runtime.d.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,12 @@ declare module "dom-expressions-runtime" {
1515
): any;
1616
export function delegateEvents(eventNames: string[]): void;
1717
export function clearDelegatedEvents(): void;
18-
export function spread(node: Element, accessor: any, isSVG: Boolean): void;
18+
export function spread(
19+
node: Element,
20+
accessor: any,
21+
isSVG?: Boolean,
22+
skipChildren?: Boolean
23+
): void;
1924
export function classList(
2025
node: Element,
2126
value: { [k: string]: boolean },

template/runtime.d.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,12 @@ export function createComponent(
1414
): any;
1515
export function delegateEvents(eventNames: string[]): void;
1616
export function clearDelegatedEvents(): void;
17-
export function spread(node: Element, accessor: any, isSVG: Boolean): void;
17+
export function spread(
18+
node: Element,
19+
accessor: any,
20+
isSVG?: Boolean,
21+
skipChildren?: Boolean
22+
): void;
1823
export function classList(
1924
node: Element,
2025
value: { [k: string]: boolean },

template/runtime.ejs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,10 @@ export function classList(node, value, prev) {
6565
}
6666
}
6767

68-
export function spread(node, accessor, isSVG) {
68+
export function spread(node, accessor, isSVG, skipChildren) {
6969
if (typeof accessor === 'function') {
70-
wrap(current => spreadExpression(node, accessor(), current, isSVG));
71-
} else spreadExpression(node, accessor, undefined, isSVG);
70+
wrap(current => spreadExpression(node, accessor(), current, isSVG, skipChildren));
71+
} else spreadExpression(node, accessor, undefined, isSVG, skipChildren);
7272
}
7373

7474
export function insert(parent, accessor, marker, initial) {
@@ -180,9 +180,9 @@ function eventHandler(e) {
180180
}
181181
}
182182

183-
function spreadExpression(node, props, prevProps = {}, isSVG) {
183+
function spreadExpression(node, props, prevProps = {}, isSVG, skipChildren) {
184184
let info;
185-
if ("children" in props) {
185+
if (!skipChildren && "children" in props) {
186186
wrap(() =>
187187
(prevProps.children = insertExpression(
188188
node,

test/spread.spec.jsx

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,22 @@ describe("create element with various spreads", () => {
1818
expect(span.__click).toBeDefined();
1919
disposer();
2020
});
21+
22+
it("should properly prioritize children over spread", () => {
23+
let span, disposer;
24+
25+
const Component = props => <span {...props}>Holla</span>;
26+
27+
S.root(dispose => {
28+
disposer = dispose;
29+
<Component ref={span} onClick={() => console.log("click")}>
30+
Hi
31+
</Component>;
32+
});
33+
34+
expect(span).toBeDefined();
35+
expect(span.textContent).toBe("Holla");
36+
expect(span.__click).toBeDefined();
37+
disposer();
38+
});
2139
});

0 commit comments

Comments
 (0)