Skip to content

Commit 44b6dd6

Browse files
Merge pull request #572 from NullVoxPopuli/resourceFactory-fixes
fix resourceFactory
2 parents af73c2b + 7c647ff commit 44b6dd6

File tree

3 files changed

+43
-19
lines changed

3 files changed

+43
-19
lines changed

ember-resources/src/core/function-based/immediate-invocation.ts

+40-12
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,13 @@ import type { Cache } from './types';
88

99
type ResourceFactory = (...args: any[]) => ReturnType<typeof resource>;
1010

11+
interface State {
12+
cache?: Cache;
13+
fn: any;
14+
args: any;
15+
_?: any;
16+
}
17+
1118
class ResourceInvokerManager {
1219
capabilities = helperCapabilities('3.23', {
1320
hasValue: true,
@@ -16,35 +23,56 @@ class ResourceInvokerManager {
1623

1724
constructor(protected owner: unknown) {}
1825

19-
createHelper(fn: ResourceFactory, args: any) {
20-
let helper: object;
21-
26+
createHelper(fn: ResourceFactory, args: any): State {
2227
/**
2328
* This cache is for args passed to the ResourceInvoker/Factory
2429
*
2530
* We want to cache the helper result, and only re-inoke when the args
2631
* change.
2732
*/
2833
let cache = createCache(() => {
29-
if (helper === undefined) {
30-
let resource = fn(...args.positional) as object;
34+
let resource = fn(...args.positional) as object;
3135

32-
helper = invokeHelper(cache, resource);
33-
}
34-
35-
return helper;
36+
return invokeHelper(cache, resource);
3637
});
3738

38-
return { fn, args, cache: getValue(cache) };
39+
return { fn, args, cache, _: getValue(cache) };
3940
}
4041

41-
getValue({ cache }: { cache: Cache }) {
42-
return getValue(cache);
42+
/**
43+
* getValue is re-called when args change
44+
*/
45+
getValue({ cache }: State) {
46+
let resource = getValue(cache);
47+
48+
return getValue(resource);
4349
}
4450

4551
getDestroyable({ fn }: { fn: ResourceFactory }) {
4652
return fn;
4753
}
54+
55+
// createHelper(fn: AnyFunction, args: Arguments): State {
56+
// return { fn, args };
57+
// }
58+
59+
// getValue({ fn, args }: State): unknown {
60+
// if (Object.keys(args.named).length > 0) {
61+
// let argsForFn: FnArgs<Arguments> = [...args.positional, args.named];
62+
63+
// return fn(...argsForFn);
64+
// }
65+
66+
// return fn(...args.positional);
67+
// }
68+
69+
// getDebugName(fn: AnyFunction): string {
70+
// if (fn.name) {
71+
// return `(helper function ${fn.name})`;
72+
// }
73+
74+
// return '(anonymous helper function)';
75+
// }
4876
}
4977

5078
/**

pnpm-lock.yaml

+1-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

testing/ember-app/tests/utils/function-resource/clock-test.ts

+2-5
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,6 @@ module('Examples | resource | Clock', function (hooks) {
1212
let wait = (ms = 1_100) => new Promise((resolve) => setTimeout(resolve, ms));
1313

1414
hooks.beforeEach(function (assert) {
15-
// timeout is too new for the types to know about
16-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
17-
// @ts-ignore
1815
assert.timeout(3000);
1916
});
2017

@@ -162,14 +159,14 @@ module('Examples | resource | Clock', function (hooks) {
162159

163160
let textD = find('time')?.innerText;
164161

165-
assert.strictEqual(textA, textD, 'Time is reset');
162+
assert.strictEqual(textD, textA, 'Time is reset');
166163

167164
this.setProperties({ date: new Date() });
168165
await settled();
169166

170167
let textE = find('time')?.innerText;
171168

172-
assert.notStrictEqual(textD, textE, 'Time has changed');
169+
assert.notStrictEqual(textE, textD, 'Time has changed');
173170
});
174171
});
175172
});

0 commit comments

Comments
 (0)