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

49 lines (39 loc) 1.35 kB
import { remove, set } from "mobx" import { assertIsObject } from "../utils" import { fnModel } from "./fnModel" const _objectActions = fnModel<any>("mobx-keystone/objectActions").actions({ set(key: PropertyKey, value: any): void { set(this, key, value) }, assign(partialObject: any): void { assertIsObject(partialObject, "partialObject") const keys = Object.keys(partialObject) for (const key of keys) { set(this, key, (partialObject as any)[key]) } }, delete(key: PropertyKey): boolean { return remove(this, key) }, call(methodName: PropertyKey, ...args: any[]): any { return this[methodName](...args) }, }) export const objectActions = { set: _objectActions.set as <T extends object, K extends keyof T>( target: T, key: K, value: T[K] ) => void, assign: _objectActions.assign as <T extends object>(target: T, partialObject: Partial<T>) => void, delete: _objectActions.delete as <T extends object, K extends keyof T>( target: T, key: K ) => boolean, call: _objectActions.call as <T extends object, K extends keyof T>( target: T, methodName: K, ...args: T[K] extends (...args: any[]) => any ? Parameters<T[K]> : never ) => T[K] extends (...args: any[]) => any ? ReturnType<T[K]> : never, create: _objectActions.create as <T>(data: T) => T, }