Wonder-Technology/Wonder-Editor

View on GitHub
lib/es6_global/src/core/composable_component/mainEditor/composable_component/left_components/composable_component/sceneTree/ui/MainEditorSceneTree.js

Summary

Maintainability
A
35 mins
Test Coverage


import * as Curry from "../../../../../../../../../../../node_modules/bs-platform/lib/es6/curry.js";
import * as React from "react";
import * as Caml_option from "../../../../../../../../../../../node_modules/bs-platform/lib/es6/caml_option.js";
import * as ReasonReact from "../../../../../../../../../../../node_modules/reason-react/lib/es6_global/src/ReasonReact.js";
import * as AppStore$WonderEditor from "../../../../../../../ui/store/AppStore.js";
import * as StoreUtils$WonderEditor from "../../../../../../../utils/ui/StoreUtils.js";
import * as ArrayService$WonderEditor from "../../../../../../../../service/atom/ArrayService.js";
import * as SceneTreeNode$WonderEditor from "../../../../../../../atom_component/dragTree/component/treeNode/SceneTreeNode.js";
import * as StringService$WonderEditor from "../../../../../../../../service/atom/StringService.js";
import * as SceneGraphUtils$WonderEditor from "../utils/SceneGraphUtils.js";
import * as StateLogicService$WonderEditor from "../../../../../../../../service/stateTuple/logic/StateLogicService.js";
import * as SceneEngineService$WonderEditor from "../../../../../../../../service/state/engine/SceneEngineService.js";
import * as StateEditorService$WonderEditor from "../../../../../../../../service/state/editor/StateEditorService.js";
import * as StateEngineService$WonderEditor from "../../../../../../../../service/state/engine/state/StateEngineService.js";
import * as SceneTreeEditorService$WonderEditor from "../../../../../../../../service/state/editor/sceneTree/SceneTreeEditorService.js";
import * as SceneTreeWidgetService$WonderEditor from "../../../../../../../../service/record/editor/widget/SceneTreeWidgetService.js";
import * as GameObjectEngineService$WonderEditor from "../../../../../../../../service/state/engine/gameObject/GameObjectEngineService.js";
import * as WDBNodeAssetEditorService$WonderEditor from "../../../../../../../../service/state/editor/asset/WDBNodeAssetEditorService.js";
import * as CheckSceneTreeLogicService$WonderEditor from "../../../../../../../../service/stateTuple/logic/sceneTree/CheckSceneTreeLogicService.js";
import * as SceneTreeDragWDBEventHandler$WonderEditor from "../eventHandler/SceneTreeDragWDBEventHandler.js";
import * as SceneTreeDragGameObjectEventHandler$WonderEditor from "../eventHandler/SceneTreeDragGameObjectEventHandler.js";
import * as SceneTreeSelectCurrentNodeEventHandler$WonderEditor from "../eventHandler/SceneTreeSelectCurrentNodeEventHandler.js";

function onSelect(param, uid) {
  var dispatchFunc = param[1];
  var uiState = param[0];
  var editorState = StateEditorService$WonderEditor.getState(/* () */0);
  var match = SceneTreeEditorService$WonderEditor.getCurrentSceneTreeNode(editorState);
  if (match !== undefined) {
    var match$1 = match === uid;
    if (match$1) {
      return /* () */0;
    } else {
      return Curry._3(SceneTreeSelectCurrentNodeEventHandler$WonderEditor.MakeEventHandler[/* pushUndoStackWithNoCopyEngineState */0], /* tuple */[
                  uiState,
                  dispatchFunc
                ], /* () */0, uid);
    }
  } else {
    return Curry._3(SceneTreeSelectCurrentNodeEventHandler$WonderEditor.MakeEventHandler[/* pushUndoStackWithNoCopyEngineState */0], /* tuple */[
                uiState,
                dispatchFunc
              ], /* () */0, uid);
  }
}

function handleToggleShowTreeChildren(dispatchFunc, targetId, isShowChildren) {
  StateLogicService$WonderEditor.getAndSetEditorState((function (param) {
          return SceneTreeEditorService$WonderEditor.setIsShowChildren(targetId, isShowChildren, param);
        }));
  Curry._1(dispatchFunc, [
        AppStore$WonderEditor.UpdateAction,
        /* Update */[/* array */[/* SceneTree */6]]
      ]);
  return /* () */0;
}

var dragGameObjectToBeTargetSib = SceneTreeDragGameObjectEventHandler$WonderEditor.MakeEventHandler[/* pushUndoStackWithNoCopyEngineState */0];

var dragWDBToBeTargetSib = SceneTreeDragWDBEventHandler$WonderEditor.MakeEventHandler[/* pushUndoStackWithNoCopyEngineState */0];

function buildSceneNode(children, engineState) {
  var scene = SceneEngineService$WonderEditor.getSceneGameObject(engineState);
  return /* record */[
          /* name */GameObjectEngineService$WonderEditor.unsafeGetGameObjectName(scene, engineState),
          /* uid */scene,
          /* children */children
        ];
}

function _isSelected(uid, currentSceneTreeNode) {
  if (currentSceneTreeNode !== undefined) {
    return Caml_option.valFromOption(currentSceneTreeNode) === uid;
  } else {
    return false;
  }
}

function buildSceneTreeArray(param, currentSceneTreeNode, param$1, param$2, sceneGraphArr) {
  var editorState = param$2[1];
  var sceneGameObject = param$2[0];
  var dragWDBFunc = param$1[2];
  var dragGameObjectFunc = param$1[1];
  var onSelectFunc = param$1[0];
  var dragImg = param[2];
  var dispatchFunc = param[1];
  var uiState = param[0];
  return sceneGraphArr.map((function (param) {
                var children = param[/* children */2];
                var uid = param[/* uid */1];
                return ReasonReact.element(StringService$WonderEditor.intToString(uid), undefined, SceneTreeNode$WonderEditor.make(uid, param[/* name */0], _isSelected(uid, currentSceneTreeNode), true, dragImg, SceneTreeWidgetService$WonderEditor.getWidget(/* () */0), onSelectFunc, dragGameObjectFunc, dragWDBFunc, SceneTreeWidgetService$WonderEditor.isWidget, SceneTreeEditorService$WonderEditor.getIsShowChildern(uid, sceneGameObject, editorState), children.length >= 1, CheckSceneTreeLogicService$WonderEditor.checkGameObjectRelation, (function (param, param$1) {
                                  return handleToggleShowTreeChildren(dispatchFunc, param, param$1);
                                }), WDBNodeAssetEditorService$WonderEditor.isWDBAssetFile, buildSceneTreeArray(/* tuple */[
                                    uiState,
                                    dispatchFunc,
                                    dragImg
                                  ], currentSceneTreeNode, /* tuple */[
                                    onSelectFunc,
                                    dragGameObjectFunc,
                                    dragWDBFunc
                                  ], /* tuple */[
                                    sceneGameObject,
                                    editorState
                                  ], children), /* array */[]));
              }));
}

var Method = /* module */[
  /* onSelect */onSelect,
  /* handleToggleShowTreeChildren */handleToggleShowTreeChildren,
  /* dragGameObjectToBeTargetSib */dragGameObjectToBeTargetSib,
  /* dragWDBToBeTargetSib */dragWDBToBeTargetSib,
  /* buildSceneNode */buildSceneNode,
  /* _isSelected */_isSelected,
  /* buildSceneTreeArray */buildSceneTreeArray
];

var component = ReasonReact.statelessComponentWithRetainedProps("MainEditorSceneTree");

function render(uiState, dispatchFunc, _self) {
  var editorState = StateEditorService$WonderEditor.getState(/* () */0);
  var engineState = StateEngineService$WonderEditor.unsafeGetState(/* () */0);
  var sceneGraphArr = ArrayService$WonderEditor.unsafeGetFirst(SceneGraphUtils$WonderEditor.getSceneGraphDataFromEngine(/* tuple */[
              editorState,
              engineState
            ]))[/* children */2];
  var partial_arg = /* tuple */[
    uiState,
    dispatchFunc
  ];
  return React.createElement("article", {
              key: "sceneTree",
              className: "wonder-sceneTree-component",
              id: "wonder-sceneTree-component"
            }, React.createElement("article", {
                  className: "wonder-tree"
                }, buildSceneTreeArray(/* tuple */[
                      uiState,
                      dispatchFunc,
                      document.createElement("img")
                    ], SceneTreeEditorService$WonderEditor.getCurrentSceneTreeNode(editorState), /* tuple */[
                      (function (param) {
                          return onSelect(partial_arg, param);
                        }),
                      Curry._2(dragGameObjectToBeTargetSib, /* tuple */[
                            uiState,
                            dispatchFunc
                          ], /* () */0),
                      Curry._2(dragWDBToBeTargetSib, /* tuple */[
                            uiState,
                            dispatchFunc
                          ], /* () */0)
                    ], /* tuple */[
                      SceneEngineService$WonderEditor.getSceneGameObject(engineState),
                      editorState
                    ], /* array */[buildSceneNode(sceneGraphArr, StateEngineService$WonderEditor.unsafeGetState(/* () */0))])));
}

function shouldUpdate(param) {
  return StoreUtils$WonderEditor.shouldComponentUpdate(/* SceneTree */6, param[/* newSelf */1][/* retainedProps */2][/* updateTypeArr */0]);
}

function make(uiState, dispatchFunc, _children) {
  return /* record */[
          /* debugName */component[/* debugName */0],
          /* reactClassInternal */component[/* reactClassInternal */1],
          /* handedOffState */component[/* handedOffState */2],
          /* willReceiveProps */component[/* willReceiveProps */3],
          /* didMount */component[/* didMount */4],
          /* didUpdate */component[/* didUpdate */5],
          /* willUnmount */component[/* willUnmount */6],
          /* willUpdate */component[/* willUpdate */7],
          /* shouldUpdate */shouldUpdate,
          /* render */(function (self) {
              return render(uiState, dispatchFunc, self);
            }),
          /* initialState */component[/* initialState */10],
          /* retainedProps : record */[/* updateTypeArr */StoreUtils$WonderEditor.getUpdateComponentTypeArr(uiState)],
          /* reducer */component[/* reducer */12],
          /* jsElementWrapped */component[/* jsElementWrapped */13]
        ];
}

export {
  Method ,
  component ,
  render ,
  shouldUpdate ,
  make ,
  
}
/* component Not a pure module */