Skip to content
Snippets Groups Projects
Commit c43d9768 authored by David Sehnal's avatar David Sehnal
Browse files

mol-state: wip, tweak builder

parent f6ef6427
Branches
Tags
No related merge requests found
......@@ -18,6 +18,7 @@ export interface Transformer<A extends StateObject = StateObject, B extends Stat
export namespace Transformer {
export type Id = string & { '@type': 'transformer-id' }
export type Params<T extends Transformer<any, any, any>> = T extends Transformer<any, any, infer P> ? P : unknown;
export type To<T extends Transformer<any, any, any>> = T extends Transformer<any, infer B, any> ? B : unknown;
export type ControlsFor<Props> = { [P in keyof Props]?: any }
export interface Definition<A extends StateObject = StateObject, B extends StateObject = StateObject, P = unknown> {
......
......@@ -8,6 +8,7 @@ import { ImmutableTree } from '../util/immutable-tree';
import { TransformTree } from './tree';
import { StateObject } from '../object';
import { Transform } from './transform';
import { Transformer } from '../transformer';
export interface StateTreeBuilder {
getTree(): TransformTree
......@@ -24,6 +25,7 @@ export namespace StateTreeBuilder {
export class Root implements StateTreeBuilder {
private state: State;
//to<A extends StateObject>(ref: Transform.Ref) { return new To<A>(this.state, ref); }
to<A extends StateObject>(ref: Transform.Ref) { return new To<A>(this.state, ref); }
toRoot<A extends StateObject>() { return new To<A>(this.state, this.state.tree.rootRef as any); }
getTree(): TransformTree { return this.state.tree.asImmutable(); }
......@@ -31,7 +33,8 @@ export namespace StateTreeBuilder {
}
export class To<A extends StateObject> implements StateTreeBuilder {
apply<B extends StateObject>(t: Transform<A, B, any>): To<B> {
apply<T extends Transformer<A, any, any>>(tr: T, params?: Transformer.Params<T>, props?: Partial<Transform.Props>): To<Transformer.To<T>> {
const t = tr.apply(params, props);
this.state.tree.add(this.ref, t);
return new To(this.state, t.ref);
}
......
......@@ -82,8 +82,8 @@ export async function testState() {
const tree = state.definition.tree;
const builder = StateTreeBuilder.create(tree)
builder.toRoot<Root>()
.apply(CreateSquare.apply({ a: 10 }, { ref: 'square' }))
.apply(CaclArea.apply());
.apply(CreateSquare, { a: 10 }, { ref: 'square' })
.apply(CaclArea);
const tree1 = builder.getTree();
printTTree(tree1);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment