MobXObservable
This commit is contained in:
@@ -52,6 +52,7 @@
|
|||||||
},
|
},
|
||||||
"optionalDependencies": {
|
"optionalDependencies": {
|
||||||
"@effect/schema": "^0.67.22",
|
"@effect/schema": "^0.67.22",
|
||||||
"effect": "^3.3.1"
|
"effect": "^3.3.1",
|
||||||
|
"mobx": "^6.12.3"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
24
src/effect/schema/MobXObservable.ts
Normal file
24
src/effect/schema/MobXObservable.ts
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
import type { Class, Struct } from "@effect/schema/Schema"
|
||||||
|
import { makeObservable, observable, type CreateObservableOptions } from "mobx"
|
||||||
|
import { mapValues } from "remeda"
|
||||||
|
|
||||||
|
|
||||||
|
export function MobXObservable<
|
||||||
|
C extends Class<any, Struct.Fields, any, any, any, any, any>
|
||||||
|
>(
|
||||||
|
class_: C,
|
||||||
|
options?: Omit<CreateObservableOptions, "proxy">,
|
||||||
|
) {
|
||||||
|
return class MobXObservable extends (class_ as Class<any, Struct.Fields, any, any, any, any, any>) {
|
||||||
|
declare ["constructor"]: typeof MobXObservable
|
||||||
|
|
||||||
|
constructor(...args: any[]) {
|
||||||
|
super(...args)
|
||||||
|
|
||||||
|
makeObservable(this,
|
||||||
|
mapValues(this.constructor.fields, () => observable),
|
||||||
|
options,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
} as C
|
||||||
|
}
|
||||||
@@ -1,2 +1,3 @@
|
|||||||
|
export { MobXObservable } from "./MobXObservable"
|
||||||
export { MutableClass } from "./MutableClass"
|
export { MutableClass } from "./MutableClass"
|
||||||
export type { TMutableClass } from "./MutableClass"
|
export type { TMutableClass } from "./MutableClass"
|
||||||
|
|||||||
Reference in New Issue
Block a user