Sfoglia il codice sorgente

mol-state: transform index, behavior event helper

David Sehnal 6 anni fa
parent
commit
fb7cc16c33
2 ha cambiato i file con 17 aggiunte e 0 eliminazioni
  1. 16 0
      src/mol-state/transformer.ts
  2. 1 0
      src/mol-util/rx-event-helper.ts

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

@@ -81,6 +81,17 @@ export namespace Transformer {
     }
 
     const registry = new Map<Id, Transformer<any, any>>();
+    const fromTypeIndex: Map<StateObject.Type, Transformer[]> = new Map();
+
+    function _index(tr: Transformer) {
+        for (const t of tr.definition.from) {
+            if (fromTypeIndex.has(t.type)) {
+                fromTypeIndex.get(t.type)!.push(tr);
+            } else {
+                fromTypeIndex.set(t.type, [tr]);
+            }
+        }
+    }
 
     export function get(id: string): Transformer {
         const t = registry.get(id as Id);
@@ -90,6 +101,10 @@ export namespace Transformer {
         return t;
     }
 
+    export function fromType(type: StateObject.Type): ReadonlyArray<Transformer> {
+        return fromTypeIndex.get(type) || [];
+    }
+
     export function create<A extends StateObject, B extends StateObject, P>(namespace: string, definition: Definition<A, B, P>) {
         const { name } = definition;
         const id = `${namespace}.${name}` as Id;
@@ -105,6 +120,7 @@ export namespace Transformer {
             definition
         };
         registry.set(id, t);
+        _index(t);
 
         return t;
     }

+ 1 - 0
src/mol-util/rx-event-helper.ts

@@ -19,6 +19,7 @@ namespace RxEventHelper {
         const helper = new _RxEventHelper();
         const ret: RxEventHelper = (<T>() => helper.create<T>()) as RxEventHelper;
         ret.dispose = () => helper.dispose();
+        ret.behavior = (v) => helper.behavior(v);
         return ret;
     }
 }