Skip to content

Commit eec9374

Browse files
author
Robert Jackson
committed
Refactor / cleanup owner usage in Modifier manager APIs.
1 parent 76b8e93 commit eec9374

File tree

4 files changed

+10
-30
lines changed

4 files changed

+10
-30
lines changed

addon/-private/class/modifier-manager.ts

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,18 @@ function destroyModifier(modifier: ClassBasedModifier): void {
1010
modifier.willDestroy();
1111
}
1212

13-
class ClassBasedModifierManager {
13+
export default class ClassBasedModifierManager {
1414
capabilities = capabilities('3.13');
1515

16+
constructor(private owner: unknown) {}
17+
1618
createModifier(
1719
factory: { owner: unknown; class: typeof ClassBasedModifier },
1820
args: ModifierArgs
1921
): ClassBasedModifier {
20-
// TODO: stop getting the owner off the factory like this; it is *not* per
21-
// the spec. See https://github.com/ember-modifier/ember-modifier/issues/25
22-
const { owner, class: Modifier } = factory;
22+
const Modifier = factory.class;
2323

24-
const modifier = new Modifier(owner, args);
24+
const modifier = new Modifier(this.owner, args);
2525

2626
registerDestructor(modifier, destroyModifier);
2727

@@ -45,5 +45,3 @@ class ClassBasedModifierManager {
4545
destroy(instance);
4646
}
4747
}
48-
49-
export default new ClassBasedModifierManager();

addon/-private/class/modifier.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,4 +97,4 @@ export default class ClassBasedModifier<
9797
}
9898
}
9999

100-
setModifierManager(() => Manager, ClassBasedModifier);
100+
setModifierManager((owner) => new Manager(owner), ClassBasedModifier);

addon/-private/functional/modifier-manager.ts

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,9 @@ function setup(
2828
MODIFIER_TEARDOWNS.set(modifier, teardown);
2929
}
3030

31-
export default class FunctionalModifierManager {
31+
class FunctionalModifierManager {
3232
capabilities = capabilities('3.13');
3333

34-
// TODO: remove this entirely as part of #25
35-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
36-
constructor(_owner: unknown) {
37-
/* no-op */
38-
}
39-
4034
createModifier(factory: Factory): FunctionalModifier {
4135
// This looks superfluous, but this is creating a new instance
4236
// of a function -- this is important so that each instance of the
@@ -65,3 +59,5 @@ export default class FunctionalModifierManager {
6559
teardown(modifier);
6660
}
6761
}
62+
63+
export default new FunctionalModifierManager();

addon/-private/functional/modifier.ts

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,6 @@ export type FunctionalModifier<
77
N extends ModifierArgs['named'] = ModifierArgs['named']
88
> = (element: Element, positional: P, named: N) => unknown;
99

10-
const MANAGERS: WeakMap<object, FunctionalModifierManager> = new WeakMap();
11-
12-
function managerFor(owner: object): FunctionalModifierManager {
13-
let manager = MANAGERS.get(owner);
14-
15-
if (manager === undefined) {
16-
manager = new FunctionalModifierManager(owner);
17-
}
18-
19-
return manager;
20-
}
21-
22-
// TODO: simplify this -- it doesn't (and shouldn't) use the owner at all.
23-
// See https://github.com/ember-modifier/ember-modifier/issues/26
2410
/**
2511
* An API for writing simple modifiers.
2612
*
@@ -37,5 +23,5 @@ function managerFor(owner: object): FunctionalModifierManager {
3723
* @param fn The function which defines the modifier.
3824
*/
3925
export default function modifier(fn: FunctionalModifier): unknown {
40-
return setModifierManager(managerFor, fn);
26+
return setModifierManager(() => FunctionalModifierManager, fn);
4127
}

0 commit comments

Comments
 (0)