UNPKG

mobx-keystone-mindreframer

Version:

A MobX powered state management solution based on data trees with first class support for Typescript, snapshots, patches and much more

36 lines (30 loc) 1.32 kB
import { setDataModelAction } from "../dataModel/actions" import { isDataModel, isDataModelClass } from "../dataModel/utils" import { modelInfoByClass } from "../modelShared/modelInfo" import { runAfterModelDecoratorSymbol } from "../modelShared/modelSymbols" import { addLateInitializationFunction } from "../utils" import { WrapInActionOverrideContextFn } from "./wrapInAction" export function getActionNameAndContextOverride( target: any, propertyKey: string ): { actionName: string | (() => string) overrideContext: WrapInActionOverrideContextFn | undefined } { let actionName: string | (() => string) = propertyKey let overrideContext: WrapInActionOverrideContextFn | undefined if (isDataModelClass(target) || isDataModel(target)) { overrideContext = (ctx, self) => { ctx.target = self.$ } let fullActionName: string actionName = () => fullActionName const modelClass: any = isDataModelClass(target) ? target : target.constructor addLateInitializationFunction(modelClass, runAfterModelDecoratorSymbol, (finalClass) => { const modelInfo = modelInfoByClass.get(finalClass)! fullActionName = `fn::${modelInfo.name}::${propertyKey}` setDataModelAction(fullActionName, modelInfo.class, propertyKey) }) } return { actionName, overrideContext } }