diff --git a/frameworks/keyed/glimmer-2/src/MyTable.ts b/frameworks/keyed/glimmer-2/src/MyTable.ts
index e50c38ed5..9c4694d21 100644
--- a/frameworks/keyed/glimmer-2/src/MyTable.ts
+++ b/frameworks/keyed/glimmer-2/src/MyTable.ts
@@ -7,6 +7,11 @@ import { run, runLots, add, update, swapRows, deleteRow } from './utils/benchmar
import TableRow from './TableRow';
import BsButton from './BsButton';
+import { helper } from './utils/helper';
+
+const eq = helper(([a,b]) => {
+ return a === b;
+})
export default class MyTable extends Component {
@tracked id = 1;
@@ -47,27 +52,18 @@ export default class MyTable extends Component {
}
@action remove(id): void {
- const selected = this.data.find(({ selected }) => selected === true);
- if (selected) {
- selected.selected = false;
- }
this.data = deleteRow(this.data, id);
this.selected = undefined;
}
@action select(id): void {
this.selected = id;
- const selected = this.data.find(({ selected }) => selected === true);
- if (selected) {
- selected.selected = false;
- }
- this.data.find((item) => item.id === id).selected = true;
}
}
setComponentTemplate(
createTemplate(
- { on, fn, TableRow, BsButton },
+ { on, fn, eq, TableRow, BsButton },
`
@@ -112,7 +108,7 @@ setComponentTemplate(
- {{#each this.data key="id" as |item|}}{{/each}}
+ {{#each this.data key="id" as |item|}}{{/each}}
`), MyTable
diff --git a/frameworks/keyed/glimmer-2/src/TableRow.ts b/frameworks/keyed/glimmer-2/src/TableRow.ts
index c1fce531b..aacb26fc0 100644
--- a/frameworks/keyed/glimmer-2/src/TableRow.ts
+++ b/frameworks/keyed/glimmer-2/src/TableRow.ts
@@ -4,7 +4,7 @@ import { createTemplate, setComponentTemplate, templateOnlyComponent } from '@gl
export default setComponentTemplate(
createTemplate(
{ on },
- `
| {{@item.id}} | {{@item.label}} | | |
`
+ `
| {{@item.id}} | {{@item.label}} | | |
`
),
templateOnlyComponent()
);
diff --git a/frameworks/keyed/glimmer-2/src/utils/benchmark-helpers.ts b/frameworks/keyed/glimmer-2/src/utils/benchmark-helpers.ts
index 03b90aa03..cf766009f 100644
--- a/frameworks/keyed/glimmer-2/src/utils/benchmark-helpers.ts
+++ b/frameworks/keyed/glimmer-2/src/utils/benchmark-helpers.ts
@@ -2,11 +2,9 @@ import { tracked } from '@glimmer/tracking';
class TodoItem {
@tracked label;
- @tracked selected;
@tracked id;
- constructor({ label, selected, id }) {
+ constructor({ label, id }) {
this.label = label;
- this.selected = selected;
this.id = id;
}
}
@@ -92,7 +90,6 @@ export const buildData = (id, count = 1000): ItemsSnapshot => {
data.push(
new TodoItem({
id: id++,
- selected: false,
label:
adjectives[_random(adjectives.length)] +
' ' +
diff --git a/frameworks/keyed/glimmer-2/src/utils/helper.ts b/frameworks/keyed/glimmer-2/src/utils/helper.ts
new file mode 100644
index 000000000..a990c2804
--- /dev/null
+++ b/frameworks/keyed/glimmer-2/src/utils/helper.ts
@@ -0,0 +1,34 @@
+import { helperCapabilities, HelperManager, setHelperManager } from '@glimmer/core';
+
+type helperFunc<
+ Positional extends unknown[] = unknown[],
+ Result = unknown
+> = (positional: Positional) => Result;
+
+interface HelperBucket<
+ Positional extends unknown[] = unknown[],
+ Result = unknown
+> {
+ fn: helperFunc
;
+ args: any;
+}
+
+class HelperWithServicesManager implements HelperManager {
+ capabilities = helperCapabilities('glimmerjs-2.0.0');
+
+ createHelper(fn: helperFunc, args: any): HelperBucket {
+ return { fn, args };
+ }
+
+ getValue(instance: HelperBucket): unknown {
+ const { args } = instance;
+ return instance.fn(args.positional);
+ }
+}
+
+const HelperWithServicesManagerFactory = (): HelperWithServicesManager => new HelperWithServicesManager();
+
+export function helper(fn: T): T {
+ setHelperManager(HelperWithServicesManagerFactory, fn);
+ return fn;
+}