Skip to content

Commit

Permalink
chore: Remove duplication from computedInjectMany
Browse files Browse the repository at this point in the history
(cherry picked from commit 08d84db)
  • Loading branch information
Iku-turso committed Oct 26, 2023
1 parent f516342 commit 13f7005
Showing 1 changed file with 50 additions and 58 deletions.
108 changes: 50 additions & 58 deletions packages/injectable/extension-for-mobx/src/computedInjectMany.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,78 +56,70 @@ const invalidateReactiveInstancesOnDeregisterCallback = getInjectable({
decorable: false,
});

export const computedInjectManyInjectable = getInjectable({
id: 'computed-inject-many',

instantiate: di => (injectionToken, instantiationParameter) =>
di.inject(reactiveInstancesInjectable, {
injectionToken,
instantiationParameter,
const reactiveInstancesFor = ({ id, methodInDiToInjectMany }) =>
getInjectable({
id,

instantiate: (di, { injectionToken, instantiationParameter }) => {
const mobxAtomForToken = di.inject(
invalidabilityForReactiveInstances,
injectionToken,
);

return computed(() => {
mobxAtomForToken.reportObserved();

return di[methodInDiToInjectMany](
injectionToken,
instantiationParameter,
);
});
},

lifecycle: lifecycleEnum.keyedSingleton({
getInstanceKey: (di, { injectionToken, instantiationParameter }) =>
getKeyedSingletonCompositeKey(injectionToken, instantiationParameter),
}),

lifecycle: lifecycleEnum.transient,

cannotCauseCycles: true,
});

export const computedInjectManyWithMetaInjectable = getInjectable({
id: 'computed-inject-many-with-meta',

instantiate: di => injectionToken =>
di.inject(reactiveInstancesWithMetaInjectable, injectionToken),

lifecycle: lifecycleEnum.transient,

cannotCauseCycles: true,
});
cannotCauseCycles: true,
});

const reactiveInstancesInjectable = getInjectable({
const reactiveInstancesInjectable = reactiveInstancesFor({
id: 'reactive-instances',

instantiate: (di, { injectionToken, instantiationParameter }) => {
const mobxAtomForToken = di.inject(
invalidabilityForReactiveInstances,
injectionToken,
);

return computed(() => {
mobxAtomForToken.reportObserved();

return di.injectMany(injectionToken, instantiationParameter);
});
},

lifecycle: lifecycleEnum.keyedSingleton({
getInstanceKey: (di, { injectionToken, instantiationParameter }) =>
getKeyedSingletonCompositeKey(injectionToken, instantiationParameter),
}),

cannotCauseCycles: true,
methodInDiToInjectMany: 'injectMany',
});

const reactiveInstancesWithMetaInjectable = getInjectable({
const reactiveInstancesWithMetaInjectable = reactiveInstancesFor({
id: 'reactive-instances-with-meta',
methodInDiToInjectMany: 'injectManyWithMeta',
});

instantiate: (di, injectionToken) => {
const mobxAtomForToken = di.inject(
invalidabilityForReactiveInstances,
injectionToken,
);
const computedInjectManyInjectableFor = ({ id, reactiveInstances }) =>
getInjectable({
id,

return computed(() => {
mobxAtomForToken.reportObserved();
instantiate: di => (injectionToken, instantiationParameter) =>
di.inject(reactiveInstances, {
injectionToken,
instantiationParameter,
}),

return di.injectManyWithMeta(injectionToken);
});
},
lifecycle: lifecycleEnum.transient,

lifecycle: lifecycleEnum.keyedSingleton({
getInstanceKey: (di, injectionToken) => injectionToken,
}),
cannotCauseCycles: true,
});

cannotCauseCycles: true,
export const computedInjectManyInjectable = computedInjectManyInjectableFor({
id: 'computed-inject-many',
reactiveInstances: reactiveInstancesInjectable,
});

export const computedInjectManyWithMetaInjectable =
computedInjectManyInjectableFor({
id: 'computed-inject-many-with-meta',
reactiveInstances: reactiveInstancesWithMetaInjectable,
});

export const registerMobX = di => {
runInAction(() => {
di.register(
Expand Down

0 comments on commit 13f7005

Please sign in to comment.