From 56d0e15e60bed51a3d01c9ebeb96b9f07a9c9732 Mon Sep 17 00:00:00 2001
From: David Sehnal <david.sehnal@gmail.com>
Date: Fri, 19 Oct 2018 15:52:18 +0200
Subject: [PATCH] mol-state: wip

---
 .../{context/event.ts => event/dispatcher.ts} |  0
 src/mol-state/event/event.ts                  |  9 +++++++
 src/mol-state/state.ts                        | 25 +++++++++++++++----
 src/mol-state/transformer/controller.ts       |  7 ++++++
 src/mol-state/tree/context.ts                 |  2 +-
 src/mol-state/tree/transation.ts              |  4 ++-
 6 files changed, 40 insertions(+), 7 deletions(-)
 rename src/mol-state/{context/event.ts => event/dispatcher.ts} (100%)
 create mode 100644 src/mol-state/event/event.ts
 create mode 100644 src/mol-state/transformer/controller.ts

diff --git a/src/mol-state/context/event.ts b/src/mol-state/event/dispatcher.ts
similarity index 100%
rename from src/mol-state/context/event.ts
rename to src/mol-state/event/dispatcher.ts
diff --git a/src/mol-state/event/event.ts b/src/mol-state/event/event.ts
new file mode 100644
index 000000000..32dcb9a05
--- /dev/null
+++ b/src/mol-state/event/event.ts
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info.
+ *
+ * @author David Sehnal <david.sehnal@gmail.com>
+ */
+
+export interface EventDispatcher {
+    // TODO
+}
\ No newline at end of file
diff --git a/src/mol-state/state.ts b/src/mol-state/state.ts
index 0dc9aa8e4..fb65ca6dc 100644
--- a/src/mol-state/state.ts
+++ b/src/mol-state/state.ts
@@ -7,9 +7,24 @@
 import { StateObject } from './object';
 import { TransformTree } from './tree/tree';
 import { Transform } from './tree/transform';
+import { Map as ImmutableMap } from 'immutable';
+import { StateContext } from './context/context';
 
-export interface State {
-    tree: TransformTree,
-    objects: Map<Transform.InstanceId, StateObject>,
-    history: TransformTree[]
-}
\ No newline at end of file
+export interface State<ObjectProps = unknown> {
+    definition: State.Definition<ObjectProps>,
+    objects: Map<Transform.InstanceId, StateObject>
+}
+
+export namespace State {
+    export type ObjectProps<P> = ImmutableMap<Transform.InstanceId, P>
+
+    export interface Definition<P = unknown> {
+        tree: TransformTree,
+        // things like object visibility
+        props: ObjectProps<P>
+    }
+
+    export async function update<P>(context: StateContext, old: State<P>, tree: Definition<P>, props?: ObjectProps<P>): Promise<State<P>> {
+        throw 'nyi';
+    }
+}
diff --git a/src/mol-state/transformer/controller.ts b/src/mol-state/transformer/controller.ts
new file mode 100644
index 000000000..4d970bf1e
--- /dev/null
+++ b/src/mol-state/transformer/controller.ts
@@ -0,0 +1,7 @@
+/**
+ * Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info.
+ *
+ * @author David Sehnal <david.sehnal@gmail.com>
+ */
+
+// TODO: relactive transformer params controller
\ No newline at end of file
diff --git a/src/mol-state/tree/context.ts b/src/mol-state/tree/context.ts
index 8c4bb7c09..1c274d8cc 100644
--- a/src/mol-state/tree/context.ts
+++ b/src/mol-state/tree/context.ts
@@ -4,7 +4,7 @@
  * @author David Sehnal <david.sehnal@gmail.com>
  */
 
-import { EventDispatcher } from '../context/event';
+import { EventDispatcher } from '../event/event';
 
 export interface TransformContext {
     /** An event dispatcher for executing child tasks. */
diff --git a/src/mol-state/tree/transation.ts b/src/mol-state/tree/transation.ts
index 7c7fe8338..e05c32a20 100644
--- a/src/mol-state/tree/transation.ts
+++ b/src/mol-state/tree/transation.ts
@@ -4,4 +4,6 @@
  * @author David Sehnal <david.sehnal@gmail.com>
  */
 
-// TODO
\ No newline at end of file
+export interface TreeTransaction {
+    
+}
\ No newline at end of file
-- 
GitLab