Skip to content

Commit

Permalink
fix #322 state spreads
Browse files Browse the repository at this point in the history
  • Loading branch information
ryansolid committed Jan 31, 2021
1 parent a6c563c commit 81be9ac
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 2 deletions.
2 changes: 1 addition & 1 deletion packages/solid/src/reactive/state.ts
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ export function proxyDescriptor(target: StateNode, property: string | number | s
return desc;
delete desc.value;
delete desc.writable;
desc.get = () => target[property as string | number];
desc.get = () => target[$PROXY][property as string | number];
return desc;
}

Expand Down
46 changes: 45 additions & 1 deletion packages/solid/web/test/dynamic.spec.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/* @jsxImportSource solid-js */
import { createRoot, createSignal, Component, JSX } from "../../src";
import { createRoot, createSignal, createState, Component, JSX } from "../../src";
import { Dynamic } from "../src";

describe("Testing Dynamic control flow", () => {
Expand Down Expand Up @@ -49,3 +49,47 @@ describe("Testing Dynamic control flow", () => {
expect(div.querySelector('path')).toBeInstanceOf(SVGElement);
});
});


describe("Testing Dynamic with state spread", () => {
let div: HTMLDivElement, disposer: () => void;

interface DynamicProps {
title: string;
}
const [comp, setComp] = createSignal<Component<DynamicProps> | keyof JSX.IntrinsicElements>(),
[state, setState] = createState({
title: "Smith"
});
const Component = () => (
<div ref={div}>
<Dynamic component={comp()} {...state} />
</div>
),
CompA: Component<DynamicProps> = props => <div>Hi {props.title}</div>,
CompB: Component<DynamicProps> = props => <span>Yo {props.title}</span>;

beforeEach(() => {
createRoot(dispose => {
disposer = dispose;
<Component />;
});
})

afterEach(() => disposer());

test("Toggle Dynamic control flow", () => {
expect(div.innerHTML).toBe("");
setComp(CompA);
expect(div.innerHTML).toBe("<div>Hi Smith</div>");
setState("title", "Smithers");
expect(div.innerHTML).toBe("<div>Hi Smithers</div>");
setComp(CompB);
expect(div.innerHTML).toBe("<span>Yo Smithers</span>");
setComp("h1");
expect(div.innerHTML).toBe(`<h1 title="Smithers"></h1>`);
setState("title", "Sunny")
expect(div.innerHTML).toBe(`<h1 title="Sunny"></h1>`);
expect(div.querySelector('h1')).toBeInstanceOf(HTMLElement);
});
});

0 comments on commit 81be9ac

Please sign in to comment.