Ver Fonte

mol-state: wip, tweak builder

David Sehnal há 6 anos atrás
pai
commit
c43d9768c9

+ 1 - 0
src/mol-state/transformer.ts

@@ -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> {

+ 4 - 1
src/mol-state/tree/builder.ts

@@ -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);
         }

+ 2 - 2
src/perf-tests/state.ts

@@ -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);