From 84b73356bb6c89c07b188cdc02dbf7b709c73b44 Mon Sep 17 00:00:00 2001 From: Matei Adriel Date: Tue, 21 Apr 2020 16:37:12 +0300 Subject: [PATCH] fix: fixed partial initial loading of native functions --- src/Component/Editor.purs | 8 ++++++-- src/Data/Dataflow/Native/NativeConfig.purs | 21 ++++++++++++++------- src/Data/Dataflow/Native/Prelude.purs | 4 ++-- src/Data/Editor/State.purs | 8 ++++++++ 4 files changed, 30 insertions(+), 11 deletions(-) diff --git a/src/Component/Editor.purs b/src/Component/Editor.purs index 023f9a5..6094034 100644 --- a/src/Component/Editor.purs +++ b/src/Component/Editor.purs @@ -59,6 +59,7 @@ data Action | SceneMouseDown (Vec2 Number) | SceneMouseMove (Vec2 Number) | SelectNode NodeId + | LoadNodes data Query a = Void @@ -88,19 +89,22 @@ component = , currentFunction: Nothing , lastMousePosition: Nothing , expression: nullExpr Nowhere - , project: loadPrelude $ emptyProject $ NodeId "firstOutput" + , project: emptyProject $ NodeId "firstOutput" } , render , eval: mkEval $ defaultEval { handleAction = handleAction - , initialize = Just Compile + , initialize = Just LoadNodes } } where handleAction :: Action -> HalogenM State Action ChildSlots Void m Unit handleAction = case _ of + LoadNodes -> do + modify_ loadPrelude + handleAction Compile Compile -> do { project, expression } <- get let diff --git a/src/Data/Dataflow/Native/NativeConfig.purs b/src/Data/Dataflow/Native/NativeConfig.purs index e630cfa..c680a3c 100644 --- a/src/Data/Dataflow/Native/NativeConfig.purs +++ b/src/Data/Dataflow/Native/NativeConfig.purs @@ -8,7 +8,7 @@ import Lunarbox.Data.Dataflow.Expression (NativeExpression) import Lunarbox.Data.Editor.DataflowFunction (DataflowFunction(..)) import Lunarbox.Data.Editor.FunctionData (FunctionData) import Lunarbox.Data.Editor.FunctionName (FunctionName) -import Lunarbox.Data.Editor.Project (Project, _atProjectFunction) +import Lunarbox.Data.Editor.State (State, _atFunctionData, _function) newtype NativeConfig = NativeConfig @@ -17,12 +17,19 @@ newtype NativeConfig , name :: FunctionName } -loadNativeConfig :: NativeConfig -> Project -> Project -loadNativeConfig (NativeConfig { functionData, expression, name }) = - set (_atProjectFunction name) - $ Just - $ (NativeFunction expression) +loadNativeConfig :: NativeConfig -> State -> State +loadNativeConfig (NativeConfig { functionData, expression, name }) = loadFunction <<< loadFunctionData + where + loadFunction = + set (_function name) + $ Just + $ (NativeFunction expression) + + loadFunctionData = + set (_atFunctionData name) + $ Just + $ functionData -- I'm pretty proud of this one lol -loadNativeConfigs :: forall f. Foldable f => f (NativeConfig) -> Project -> Project +loadNativeConfigs :: forall f. Foldable f => f (NativeConfig) -> State -> State loadNativeConfigs = flip $ foldr loadNativeConfig diff --git a/src/Data/Dataflow/Native/Prelude.purs b/src/Data/Dataflow/Native/Prelude.purs index 5a3ce88..7513f83 100644 --- a/src/Data/Dataflow/Native/Prelude.purs +++ b/src/Data/Dataflow/Native/Prelude.purs @@ -6,10 +6,10 @@ module Lunarbox.Data.Dataflow.Native.Prelude import Lunarbox.Data.Dataflow.Native.ControlFlow (if') import Lunarbox.Data.Dataflow.Native.Math (add) import Lunarbox.Data.Dataflow.Native.NativeConfig (NativeConfig, loadNativeConfigs) -import Lunarbox.Data.Editor.Project (Project) +import Lunarbox.Data.Editor.State (State) configs :: Array NativeConfig configs = [ add, if' ] -loadPrelude :: Project -> Project +loadPrelude :: State -> State loadPrelude = loadNativeConfigs configs diff --git a/src/Data/Editor/State.purs b/src/Data/Editor/State.purs index 2fc4f87..99f12fa 100644 --- a/src/Data/Editor/State.purs +++ b/src/Data/Editor/State.purs @@ -19,6 +19,8 @@ module Lunarbox.Data.Editor.State , _panelIsOpen , _currentFunction , _currentTab + , _functionData + , _atFunctionData ) where import Prelude @@ -83,6 +85,12 @@ _nodeData = prop (SProxy :: _ "nodeData") _atNodeData :: FunctionName -> NodeId -> Lens' State (Maybe NodeData) _atNodeData name id = _nodeData <<< at (Tuple name id) +_functionData :: Lens' State (Map FunctionName FunctionData) +_functionData = prop (SProxy :: _ "functionData") + +_atFunctionData :: FunctionName -> Lens' State (Maybe FunctionData) +_atFunctionData name = _functionData <<< at name + _project :: Lens' State Project _project = prop (SProxy :: _ "project")