{
divInstances.push(instance);
}}
/>
);
let store = new Store({
data: {
data: [
{
value: "C",
},
{
value: "B",
},
],
},
});
const component = await createTestRenderer(store, widget);
let tree = component.toJSON();
assert.deepEqual(tree, {
type: "div",
props: {},
children: [
{
type: "div",
props: {},
children: ["B"],
},
{
type: "div",
props: {},
children: ["C"],
},
],
});
divInstances = [];
await act(async () => {
store.update("data", (data) => [{ value: "A" }, ...data]);
});
assert.deepEqual(component.toJSON(), {
type: "div",
props: {},
children: [
{
type: "div",
props: {},
children: ["A"],
},
{
type: "div",
props: {},
children: ["B"],
},
{
type: "div",
props: {},
children: ["C"],
},
],
});
assert.equal(divInstances.length, 3);
assert.equal(divInstances[0].store.get("$item.value"), "A");
assert.equal(divInstances[1].store.get("$item.value"), "B");
assert.equal(divInstances[2].store.get("$item.value"), "C");
});
it("infers T from AccessorChain for onCreateFilter callback", () => {
interface Item {
name: string;
active: boolean;
}
interface AppModel {
items: Item[];
$item: Item;
}
const m = createAccessorModelProxy();
// onCreateFilter should receive (record: Item) => boolean when T is inferred from AccessorChain-
const widget = (
(record) => {
// If T is correctly inferred as Item, record.name should be string
const name: string = record.name;
// @ts-expect-error - record.name should be string, not number
const wrong: number = record.name;
return record.active;
}}
>
);
assert.ok(widget);
});
});