Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"type": "none",
"comment": "chore(fast-html): use @microsoft/fast-build to build repeat-event fixture",
"packageName": "@microsoft/fast-html",
"email": "7559015+janechu@users.noreply.github.com",
"dependentChangeType": "none"
}
2 changes: 1 addition & 1 deletion packages/fast-html/scripts/build-fixtures.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { fileURLToPath } from "node:url";

// Builds test fixtures using @microsoft/fast-build. Add fixture names here
// incrementally as each one is verified to work with the fast-build CLI.
const fixtures = ["attribute", "binding", "event", "ref", "slotted", "when", "repeat"];
const fixtures = ["attribute", "binding", "event", "ref", "slotted", "when", "repeat", "repeat-event"];

const __dirname = dirname(fileURLToPath(import.meta.url));
const require = createRequire(import.meta.url);
Expand Down
12 changes: 12 additions & 0 deletions packages/fast-html/test/fixtures/repeat-event/entry.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<test-element-repeat-event></test-element-repeat-event>
<test-when-in-repeat></test-when-in-repeat>
<script type="module" src="./main.ts"></script>
</body>
</html>
100 changes: 44 additions & 56 deletions packages/fast-html/test/fixtures/repeat-event/index.html
Original file line number Diff line number Diff line change
@@ -1,65 +1,53 @@
<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="utf-8" />
<meta charset="utf-8">
<title></title>
<script type="module" src="./main.ts"></script>
</head>
<body>
<f-template name="test-element-repeat-event">
<template>
<ul>
<f-repeat value="{{item in items}}">
<li>
<button @click="{$c.parent.handleItemClick($e)}">{{item.name}}</button>
</li>
</f-repeat>
</ul>
</template>
</f-template>
<test-element-repeat-event>
<template shadowrootmode="open">
<ul>
<!--fe-b$$start$$0$$item-in-items$$fe-b--><!--fe-b$$end$$0$$item-in-items$$fe-b-->
</ul>
</template>
</test-element-repeat-event>
<test-element-repeat-event><template shadowrootmode="open" shadowroot="open"><ul>
<!--fe-b$$start$$0$$repeat-0$$fe-b--><!--fe-b$$end$$0$$repeat-0$$fe-b-->
</ul></template></test-element-repeat-event>
<test-when-in-repeat><template shadowrootmode="open" shadowroot="open"><ul>
<!--fe-b$$start$$0$$repeat-0$$fe-b--><!--fe-repeat$$start$$0$$fe-repeat-->
<li>
<!--fe-b$$start$$0$$when-0$$fe-b-->
<button class="name" data-fe-c-0-1><!--fe-b$$start$$1$$0-item.name-1$$fe-b-->Alpha<!--fe-b$$end$$1$$0-item.name-1$$fe-b--></button>
<!--fe-b$$end$$0$$when-0$$fe-b-->
</li>
<!--fe-repeat$$end$$0$$fe-repeat--><!--fe-repeat$$start$$1$$fe-repeat-->
<li>
<!--fe-b$$start$$0$$when-0$$fe-b-->
<button class="name" data-fe-c-0-1><!--fe-b$$start$$1$$0-item.name-1$$fe-b-->Beta<!--fe-b$$end$$1$$0-item.name-1$$fe-b--></button>
<!--fe-b$$end$$0$$when-0$$fe-b-->
</li>
<!--fe-repeat$$end$$1$$fe-repeat--><!--fe-b$$end$$0$$repeat-0$$fe-b-->
</ul></template></test-when-in-repeat>
<f-template name="test-element-repeat-event">
<template>
<ul>
<f-repeat value="{{item in repeatEventItems}}">
<li>
<button @click="{$c.parent.handleItemClick($e)}">{{item.name}}</button>
</li>
</f-repeat>
</ul>
</template>
</f-template>
<f-template name="test-when-in-repeat">
<template>
<ul>
<f-repeat value="{{item in whenRepeatItems}}">
<li>
<f-when value="{{showNames}}">
<button class="name" @click="{$c.parent.handleItemClick(e)}">{{item.name}}</button>
</f-when>
</li>
</f-repeat>
</ul>
</template>
</f-template>

<!-- f-when with c.parent inside f-repeat -->
<f-template name="test-when-in-repeat">
<template>
<ul>
<f-repeat value="{{item in items}}">
<li>
<f-when value="{{$c.parent.showNames}}">
<button class="name" @click="{$c.parent.handleItemClick(e)}">{{item.name}}</button>
</f-when>
</li>
</f-repeat>
</ul>
</template>
</f-template>
<test-when-in-repeat>
<template shadowrootmode="open">
<ul>
<!--fe-b$$start$$0$$WhenRepOuter$$fe-b-->
<!--fe-repeat$$start$$0$$fe-repeat-->
<li>
<!--fe-b$$start$$0$$WhenRepWhen$$fe-b-->
<button class="name" data-fe-b-0><!--fe-b$$start$$1$$WhenRepName$$fe-b-->Alpha<!--fe-b$$end$$1$$WhenRepName$$fe-b--></button>
<!--fe-b$$end$$0$$WhenRepWhen$$fe-b-->
</li>
<!--fe-repeat$$end$$0$$fe-repeat-->
<!--fe-repeat$$start$$1$$fe-repeat-->
<li>
<!--fe-b$$start$$0$$WhenRepWhen$$fe-b-->
<button class="name" data-fe-b-0><!--fe-b$$start$$1$$WhenRepName$$fe-b-->Beta<!--fe-b$$end$$1$$WhenRepName$$fe-b--></button>
<!--fe-b$$end$$0$$WhenRepWhen$$fe-b-->
</li>
<!--fe-repeat$$end$$1$$fe-repeat-->
<!--fe-b$$end$$0$$WhenRepOuter$$fe-b-->
</ul>
</template>
</test-when-in-repeat>
<script type="module" src="./main.ts"></script>
</body>
</html>
8 changes: 4 additions & 4 deletions packages/fast-html/test/fixtures/repeat-event/main.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import { RenderableFASTElement, TemplateElement } from "@microsoft/fast-html";
import { FASTElement, observable } from "@microsoft/fast-element";
import { RenderableFASTElement, TemplateElement } from "@microsoft/fast-html";

export interface ItemType {
name: string;
}

export class TestElementRepeatEvent extends FASTElement {
@observable
items: Array<ItemType> = [];
repeatEventItems: Array<ItemType> = [];

@observable
clickedItemName: string = "";
Expand All @@ -23,9 +23,9 @@ RenderableFASTElement(TestElementRepeatEvent).defineAsync({
templateOptions: "defer-and-hydrate",
});

// Scenario: f-when using $c.parent inside f-repeat
// Scenario: f-when using showNames inside f-repeat
export class TestWhenInRepeat extends FASTElement {
@observable items: Array<ItemType> = [{ name: "Alpha" }, { name: "Beta" }];
@observable whenRepeatItems: Array<ItemType> = [{ name: "Alpha" }, { name: "Beta" }];
@observable showNames: boolean = true;
@observable clickedItemName: string = "";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ test.describe("f-repeat event binding", async () => {

// Dynamically populate items so the repeat renders buttons
await customElement.evaluate((node: TestElementRepeatEvent) => {
node.items = [{ name: "Alpha" }, { name: "Beta" }];
node.repeatEventItems = [{ name: "Alpha" }, { name: "Beta" }];
});

await expect(buttons).toHaveCount(2);
Expand All @@ -26,10 +26,7 @@ test.describe("f-repeat event binding", async () => {
// set on the host element.
await buttons.nth(0).click();

await expect(customElement).toHaveJSProperty(
"clickedItemName",
"Alpha"
);
await expect(customElement).toHaveJSProperty("clickedItemName", "Alpha");
});

test("f-when with c.parent condition inside f-repeat", async ({ page }) => {
Expand Down
5 changes: 5 additions & 0 deletions packages/fast-html/test/fixtures/repeat-event/state.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"repeatEventItems": [],
"whenRepeatItems": [{ "name": "Alpha" }, { "name": "Beta" }],
"showNames": true
}
24 changes: 24 additions & 0 deletions packages/fast-html/test/fixtures/repeat-event/templates.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<f-template name="test-element-repeat-event">
<template>
<ul>
<f-repeat value="{{item in repeatEventItems}}">
<li>
<button @click="{$c.parent.handleItemClick($e)}">{{item.name}}</button>
</li>
</f-repeat>
</ul>
</template>
</f-template>
<f-template name="test-when-in-repeat">
<template>
<ul>
<f-repeat value="{{item in whenRepeatItems}}">
<li>
<f-when value="{{showNames}}">
<button class="name" @click="{$c.parent.handleItemClick(e)}">{{item.name}}</button>
</f-when>
</li>
</f-repeat>
</ul>
</template>
</f-template>
Loading