From 0deca6f1566e3571cf993e554fd684ac1faf33ba Mon Sep 17 00:00:00 2001 From: Jordan Eldredge Date: Mon, 19 Aug 2019 06:26:26 -0700 Subject: [PATCH] Add unique ID to each node in the state tree --- modern/src/Actions.ts | 10 ++++++++-- modern/src/initializeStateTree.ts | 15 +++++++++++++++ modern/src/utils.js | 5 +++++ 3 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 modern/src/initializeStateTree.ts diff --git a/modern/src/Actions.ts b/modern/src/Actions.ts index 6503851e..7e13ab4d 100644 --- a/modern/src/Actions.ts +++ b/modern/src/Actions.ts @@ -2,6 +2,7 @@ import { MakiTree, ModernAction, ModernStore, XmlTree } from "./types"; import JSZip from "jszip"; import * as Utils from "./utils"; import initialize from "./initialize"; +import initializeStateTree from "./initializeStateTree"; import { run } from "./maki-interpreter/virtualMachine"; import System from "./runtime/System"; import runtime from "./runtime"; @@ -10,8 +11,13 @@ export function setMakiTree(makiTree: MakiTree): ModernAction { return { type: "SET_MAKI_TREE", makiTree }; } -export function setXmlTree(xmlTree: XmlTree): ModernAction { - return { type: "SET_XML_TREE", xmlTree }; +export function setXmlTree(xmlTree: XmlTree) { + return async dispatch => { + dispatch({ + type: "SET_XML_TREE", + xmlTree: await initializeStateTree(xmlTree), + }); + }; } export function gotSkinUrl(skinUrl: string, store: ModernStore) { diff --git a/modern/src/initializeStateTree.ts b/modern/src/initializeStateTree.ts new file mode 100644 index 00000000..e127f717 --- /dev/null +++ b/modern/src/initializeStateTree.ts @@ -0,0 +1,15 @@ +import { XmlTree } from "./types"; +import * as Utils from "./utils"; + +function mapTree(node, cb) { + const children = node.children || []; + return cb({ ...node, children: children.map(child => mapTree(child, cb)) }); +} + +export default async function initializeStateTree( + xmlTree: XmlTree +): Promise { + return mapTree(xmlTree, node => { + return { ...node, uid: Utils.getId() }; + }); +} diff --git a/modern/src/utils.js b/modern/src/utils.js index 29d6e6c0..684c707e 100644 --- a/modern/src/utils.js +++ b/modern/src/utils.js @@ -1,5 +1,10 @@ import { xml2js } from "xml-js"; +let i = 0; +export function getId() { + return i++; +} + export function isPromise(obj) { return obj && typeof obj.then === "function"; }