[Tree] renaming no longer needs a reload, default value for the name, only one pop-over at a time

parent 44265a56
...@@ -39,6 +39,9 @@ type Props = { root :: ID } ...@@ -39,6 +39,9 @@ type Props = { root :: ID }
data NTree a = NTree a (Array (NTree a)) data NTree a = NTree a (Array (NTree a))
instance ntreeFunctor :: Functor NTree where
map f (NTree x ary) = NTree (f x) (map (map f) ary)
type FTree = NTree LNode type FTree = NTree LNode
data Action = ShowPopOver ID data Action = ShowPopOver ID
...@@ -61,20 +64,19 @@ initialState = { state: NTree (LNode {id : 3, name : "hello", nodeType : Node, o ...@@ -61,20 +64,19 @@ initialState = { state: NTree (LNode {id : 3, name : "hello", nodeType : Node, o
mapFTree :: (FTree -> FTree) -> State -> State mapFTree :: (FTree -> FTree) -> State -> State
mapFTree f {state} = {state: f state} mapFTree f {state} = {state: f state}
performAction :: forall props. PerformAction State props Action performAction :: forall props. PerformAction State props Action
performAction (ToggleFolder i) _ _ = performAction (ToggleFolder i) _ _ =
modifyState_ $ mapFTree $ toggleNode i modifyState_ $ mapFTree $ toggleNode i
performAction (ShowPopOver id) _ _ = performAction (ShowPopOver id) _ _ =
modifyState_ $ mapFTree $ popOverNode id modifyState_ $ mapFTree $ map $ popOverNode id
performAction (ShowRenameBox id) _ _ = performAction (ShowRenameBox id) _ _ =
modifyState_ $ mapFTree $ showPopOverNode id modifyState_ $ mapFTree $ map $ showPopOverNode id
performAction (CancelRename id) _ _ = performAction (CancelRename id) _ _ =
modifyState_ $ mapFTree $ showPopOverNode id modifyState_ $ mapFTree $ map $ showPopOverNode id
performAction (ToggleCreateNode id) _ _ = performAction (ToggleCreateNode id) _ _ =
modifyState_ $ mapFTree $ showCreateNode id modifyState_ $ mapFTree $ showCreateNode id
...@@ -84,11 +86,10 @@ performAction (DeleteNode nid) _ _ = do ...@@ -84,11 +86,10 @@ performAction (DeleteNode nid) _ _ = do
--- TODO : Need to update state once API is called --- TODO : Need to update state once API is called
pure unit pure unit
--- TODO : Need to update state once API is called performAction (Submit rid name) _ _ = do
performAction (Submit rid s'') _ _ = do void $ lift $ renameNode rid $ RenameValue {name}
d <- lift $ renameNode rid $ RenameValue { name : s''} modifyState_ $ mapFTree $ map $ popOverNode rid
-- modifyState_ $ mapFTree $ popOverNode rid <<< onNode rid (\(LNode node) -> LNode (node { name = name }))
modifyState_ $ mapFTree $ showPopOverNode rid -- add this function to toggle rename function
performAction (RenameNode r nid) _ _ = performAction (RenameNode r nid) _ _ =
modifyState_ $ mapFTree $ rename nid r modifyState_ $ mapFTree $ rename nid r
...@@ -99,20 +100,23 @@ performAction (Create nid) _ _ = ...@@ -99,20 +100,23 @@ performAction (Create nid) _ _ =
performAction (SetNodeValue v nid) _ _ = performAction (SetNodeValue v nid) _ _ =
modifyState_ $ mapFTree $ setNodeValue nid v modifyState_ $ mapFTree $ setNodeValue nid v
toggleIf :: Boolean -> Boolean -> Boolean
toggleIf true = not
toggleIf false = const false
popOverNode :: Int -> NTree LNode -> NTree LNode onNode :: Int -> (LNode -> LNode) -> LNode -> LNode
popOverNode sid (NTree (LNode {id, name, nodeType, open, popOver, renameNodeValue, createNode, nodeValue, showRenameBox}) ary) = onNode id f l@(LNode node)
NTree (LNode {id,name, nodeType, open , popOver : npopOver, renameNodeValue, createNode, nodeValue, showRenameBox}) $ map (popOverNode sid) ary | node.id == id = f l
where | otherwise = l
npopOver = if sid == id then not popOver else popOver
popOverNode :: Int -> LNode -> LNode
popOverNode sid (LNode node) =
LNode $ node { popOver = toggleIf (sid == node.id) node.popOver
, showRenameBox = false }
showPopOverNode :: Int -> NTree LNode -> NTree LNode showPopOverNode :: Int -> LNode -> LNode
showPopOverNode sid (NTree (LNode {id, name, nodeType, open, popOver, renameNodeValue, createNode, nodeValue, showRenameBox}) ary) = showPopOverNode sid (LNode node) =
NTree (LNode {id,name, nodeType, open , popOver , renameNodeValue, createNode, nodeValue, showRenameBox: nshowRenameBox}) $ map (showPopOverNode sid) ary LNode $ node {showRenameBox = toggleIf (sid == node.id) node.showRenameBox}
where
nshowRenameBox = if sid == id then not showRenameBox else showRenameBox
showCreateNode :: Int -> NTree LNode -> NTree LNode showCreateNode :: Int -> NTree LNode -> NTree LNode
showCreateNode sid (NTree (LNode {id, name, nodeType, open, popOver, renameNodeValue, createNode, nodeValue, showRenameBox}) ary) = showCreateNode sid (NTree (LNode {id, name, nodeType, open, popOver, renameNodeValue, createNode, nodeValue, showRenameBox}) ary) =
...@@ -252,7 +256,7 @@ renameTreeView d s@(NTree (LNode {id, name, nodeType, open, popOver, renameNodeV ...@@ -252,7 +256,7 @@ renameTreeView d s@(NTree (LNode {id, name, nodeType, open, popOver, renameNodeV
[ [
input [ _type "text" input [ _type "text"
, placeholder "Rename Node" , placeholder "Rename Node"
, defaultValue $ getRenameNodeValue s , defaultValue $ name
, style {float: "left"} , style {float: "left"}
, className "col-md-2 form-control" , className "col-md-2 form-control"
, onInput \e -> d (RenameNode (unsafeEventValue e) nid) , onInput \e -> d (RenameNode (unsafeEventValue e) nid)
...@@ -335,10 +339,6 @@ renameTreeViewDummy d s = div [] [] ...@@ -335,10 +339,6 @@ renameTreeViewDummy d s = div [] []
popOverValue :: FTree -> Boolean popOverValue :: FTree -> Boolean
popOverValue (NTree (LNode {id, name, nodeType, open, popOver, renameNodeValue, showRenameBox }) ary) = popOver popOverValue (NTree (LNode {id, name, nodeType, open, popOver, renameNodeValue, showRenameBox }) ary) = popOver
getRenameNodeValue :: FTree -> String
getRenameNodeValue (NTree (LNode {id, name, nodeType, open, popOver, renameNodeValue, showRenameBox }) ary) = renameNodeValue
getCreateNodeValue :: FTree -> String getCreateNodeValue :: FTree -> String
getCreateNodeValue (NTree (LNode {id, name, nodeType, open, popOver, renameNodeValue, nodeValue, showRenameBox}) ary) = nodeValue getCreateNodeValue (NTree (LNode {id, name, nodeType, open, popOver, renameNodeValue, nodeValue, showRenameBox}) ary) = nodeValue
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment