0.1.4 (#5)
Co-authored-by: Julien Valverdé <julien.valverde@mailo.com> Reviewed-on: https://git.jvalver.de/Thilawyn/thilalib/pulls/5
This commit was merged in pull request #5.
This commit is contained in:
@@ -3,18 +3,16 @@ import { makeObservable, observable, type CreateObservableOptions } from "mobx"
|
||||
import { mapValues } from "remeda"
|
||||
|
||||
|
||||
interface MobXObservableInput {
|
||||
interface MobXObservableA {
|
||||
new(...args: any[]): S.Struct.Type<S.Struct.Fields>
|
||||
readonly fields: { readonly [K in keyof S.Struct.Fields]: S.Struct.Fields[K] }
|
||||
}
|
||||
|
||||
export function MobXObservable<
|
||||
This extends MobXObservableInput
|
||||
>(
|
||||
class_: This,
|
||||
export function MobXObservable<A extends MobXObservableA>(
|
||||
self: A,
|
||||
options?: Omit<CreateObservableOptions, "proxy">,
|
||||
) {
|
||||
return class MobXObservable extends class_ {
|
||||
return class MobXObservable extends self {
|
||||
declare ["constructor"]: typeof MobXObservable
|
||||
|
||||
constructor(...args: any[]) {
|
||||
@@ -25,5 +23,5 @@ export function MobXObservable<
|
||||
options,
|
||||
)
|
||||
}
|
||||
} as This
|
||||
} as A
|
||||
}
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
import { Schema as S } from "@effect/schema"
|
||||
import { reaction, runInAction } from "mobx"
|
||||
import { pipe } from "remeda"
|
||||
import { MobXObservable } from "./MobXObservable"
|
||||
import { MutableTaggedClass } from "./MutableTaggedClass"
|
||||
|
||||
|
||||
class User extends pipe(
|
||||
MutableTaggedClass<User>()("User", {
|
||||
id: S.BigIntFromSelf,
|
||||
role: S.Union(S.Literal("BasicUser"), S.Literal("Admin")),
|
||||
}),
|
||||
MobXObservable,
|
||||
) {}
|
||||
|
||||
const user1 = new User({ id: -1n, role: "BasicUser" })
|
||||
reaction(() => user1.id, id => console.log(`user1 id changed: ${ id }`))
|
||||
|
||||
|
||||
class Admin extends User.extend<Admin>("Admin")({
|
||||
// role: S.Literal("Admin")
|
||||
}) {}
|
||||
|
||||
const user2 = new Admin({ id: -1n, role: "Admin" })
|
||||
reaction(() => user2.id, id => console.log(`user2 id changed: ${ id }`))
|
||||
|
||||
|
||||
runInAction(() => { user1.id = 1n })
|
||||
runInAction(() => { user2.id = 2n })
|
||||
Reference in New Issue
Block a user