Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
purescript-gargantext
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Christian Merten
purescript-gargantext
Commits
ac6a093c
Commit
ac6a093c
authored
Apr 09, 2019
by
James Laver
Committed by
Alexandre Delanoë
Apr 28, 2019
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add Contextmenu (commented out, in progress)
parent
89c9f20a
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
216 additions
and
65 deletions
+216
-65
ContextMenu.purs
src/Gargantext/Components/ContextMenu/ContextMenu.purs
+102
-65
SimpleItem.purs
src/Gargantext/Components/ContextMenu/SimpleItem.purs
+114
-0
No files found.
src/Gargantext/Components/ContextMenu/ContextMenu.purs
View file @
ac6a093c
-- | The ContextMeny component renders a generic context menu
-- | The ContextMenu component renders a generic context menu
-- |
module Gargantext.Component.ContextMenu.ContextMenu where
module Gargantext.Component.ContextMenu.ContextMenu
-- (MenuProps, Action(..), separator) where
(MenuProps, Action(..), separator) where
import Prelude hiding (div)
import Prelude hiding (div)
import Effect (Effect)
import Effect (Effect)
import Data.String (joinWith)
import React
import React
( class ReactComponentSpec
( class ReactComponentSpec
, Context, ContextProvider, ContextConsumer
, ReactClass, ReactElement, ReactClassConstructor, Children
, ReactClass, ReactElement, ReactClassConstructor, Children
, component, createElement )
, component, createElement )
import React.DOM (a, div, li, ul')
import React.DOM (a, div, li, ul')
import React.DOM as DOM -- for Props
import React.DOM as DOM -- for Props
import React.DOM.Props (className, onContextMenu, onMouseOut, onBlur)
import React.DOM.Props (className, onContextMenu, onMouseOut, onBlur)
import Thermite (Render, PerformAction, simpleSpec, modifyState_,
import Thermite
createReactSpec, defaultRender)
( Render, PerformAction
import Gargantext.Utils.Reactil (wrap)
, simpleSpec, modifyState_
, createReactSpec, defaultRender
separator :: ReactElement
, _render )
separator = div [ className "context-menu-separator" ] []
import Gargantext.Utils.React (WithChildren, wrap)
newtype State = State { open :: Boolean }
-- type State' = { open :: Boolean }
-- newtype State = State State'
defaultState :: State
defaultState = State { open: false }
-- defaultState :: State
-- defaultState = State { open: false }
type MenuProps = { classes :: String }
-- type MenuProps = { classes :: String, items :: Array (Effect Unit -> ReactElement) }
data Action = Show | Hide
-- type ItemProps p = { hideMenu :: Context (Effect Unit) | p }
contextMenu :: MenuProps -> Array ReactElement -> ReactElement
-- data Action = Show | Hide
contextMenu = createElement contextMenuClass
-- TODO: register callbacks
-- contextMenu :: MenuProps -> ReactElement
componentDidMount :: Effect Unit
-- contextMenu props = createElement contextMenuClass props []
componentDidMount = pure unit
-- -- TODO: register callbacks
-- TODO: unregister callbacks
-- componentDidMount :: Effect Unit
componentWillUnmount :: Effect Unit
-- componentDidMount = pure unit
componentWillUnmount = pure unit
-- -- TODO: unregister callbacks
-- renderMenuItem :: Render State MenuItem Action MenuItem
-- componentWillUnmount :: Effect Unit
-- renderMenuItem _ Separator _ _ = li [ className "menu-item-separator" ]
-- componentWillUnmount = pure unit
-- renderMenuItem d (MenuItem i) _ _ = wrap outer inner
-- where outer = li [ className "context-menu-item" ]
-- --
-- inner = a [ onClick callback, style i.style ] [text i.label]
-- childRender :: forall s p a. Spec s p a -> Spec s p a
-- callback _ = d Hide *> i.callback
-- childRender = over _render (\c -> wrapItem <<< c)
-- TODO: Aria and accessibility
-- -- | Wraps an item in an li tag with the item classname
renderMenu :: Render State MenuProps Action
-- wrapItem :: ReactElement -> ReactElement
renderMenu d m s c = pure $ wrap outer $ ul' inner
-- wrapItem = wrap $ li [ className itemClass ]
where outer = div [className (classes s.open m.classes)]
inner = map (\i -> renderMenuItem d i ) c
-- -- TODO: Aria and accessibility
-- renderMenu :: Render State MenuProps Action
classes :: Boolean -> String -> String
-- renderMenu d m s c = pure $ wrap outer $ ul' inner
classes true user = "context-menu context-menu-shown " <> user
-- where outer = div [className (classes s.open m.classes)]
classes false user = "context-menu context-menu-hidden " <> user
-- inner = map (\i -> renderMenuItem d i ) c
-- Class
-- visibilityClass :: Boolean -> String
-- visibilityClass true = contextMenuShown
contextMenuClass :: ReactClass { children :: Children, open :: Boolean }
-- visibilityClass false = contextMenuHidden
contextMenuClass = component "ContextMenu" createContextMenuClass
-- classes :: Boolean -> String -> String
createContextMenuClass ::
-- classes visible user = joinWith " " [menuClass, visibilityClass visible, user]
forall given snapshot spec.
ReactComponentSpec MenuProps State snapshot given spec
-- -- Class
=> ReactClassConstructor MenuProps State given
-> ReactClass MenuProps
-- contextMenuClass :: ReactClass (WithChildren State')
createContextMenuClass this = pure
-- contextMenuClass = component "ContextMenu" createContextMenuClass
{ state: defaultState
, render: renderMenu
-- createContextMenuClass ::
, componentDidMount: componentDidMount
-- forall given snapshot spec.
, componentWillUnmount: componentWillUnmount
-- ReactComponentSpec MenuProps State snapshot given spec
}
-- => ReactClassConstructor MenuProps State given
-- -> ReactClass MenuProps
-- createContextMenuClass this = pure
-- { state: defaultState
-- , render: renderMenu
-- , componentDidMount: componentDidMount
-- , componentWillUnmount: componentWillUnmount
-- }
-- type Label = String
-- type ClassName = String
-- -- Items
-- simpleItem :: Label -> ClassName -> Effect Unit -> ContextConsumer (Effect Unit) -> ReactElement
-- simpleItem label cls cb hide = a [ onClick (hide *> cb), className cls ] [ text label ]
-- separator :: Effect Unit -> ReactElement
-- separator _ = li [ className "menu-item-separator" ] []
-- -- CSS Classes
-- menuClass :: String
-- menuClass = "context-menu"
-- menuShownClass :: String
-- menuShownClass = "context-menu-shown"
-- menuHiddenClass :: String
-- menuHiddenClass = "context-menu-hidden"
-- itemClass :: String
-- itemClass = "context-menu-item"
-- separatorClass :: String
-- separatorClass = "context-menu-item"
src/Gargantext/Components/ContextMenu/SimpleItem.purs
0 → 100644
View file @
ac6a093c
-- | The SimpleItem is a simple context menu item consisting of a link
-- | It handles automatically closing the context menu for you
module Gargantext.Component.ContextMenu.SimpleItem where
-- (MenuProps, Action(..), separator) where
import Prelude hiding (div)
import Effect (Effect)
import Data.String (joinWith)
import React
( class ReactComponentSpec
, ReactClass, ReactElement, ReactClassConstructor, Children
, component, createElement )
import React.DOM (a, div, li, ul')
import React.DOM as DOM -- for Props
import React.DOM.Props (className, onContextMenu, onMouseOut, onBlur)
import Thermite
( Render, PerformAction
, simpleSpec, modifyState_
, createReactSpec, defaultRender
, _render )
import Gargantext.Utils.React (WithChildren, wrap)
-- separator :: ReactElement
-- separator = div [ className "context-menu-separator" ] []
-- type State' = { open :: Boolean }
-- newtype State = State State'
-- defaultState :: State
-- defaultState = State { open: false }
-- type MenuProps = { classes :: String }
-- type ItemProps p = { hideMenu :: Effect () | p }
-- data Action = Show | Hide
-- menuClass :: String
-- menuClass = "context-menu"
-- menuShownClass :: String
-- menuShownClass = "context-menu-shown"
-- menuHiddenClass :: String
-- menuHiddenClass = "context-menu-hidden"
-- itemClass :: String
-- itemClass = "context-menu-item"
-- contextMenu :: MenuProps -> Array ReactElement -> ReactElement
-- contextMenu = createElement contextMenuClass
-- -- TODO: register callbacks
-- componentDidMount :: Effect Unit
-- componentDidMount = pure unit
-- -- TODO: unregister callbacks
-- componentWillUnmount :: Effect Unit
-- componentWillUnmount = pure unit
-- --
-- childRender :: forall s p a. Spec s p a -> Spec s p a
-- childRender = over _render (\c -> wrapItem <<< c)
-- -- | Wraps an item in an li tag with the item classname
-- wrapItem :: ReactElement -> ReactElement
-- wrapItem = wrap $ li [ className itemClass ]
-- renderMenuItem :: Render State MenuItem Action MenuItem
-- renderMenuItem _ Separator _ _ = li [ className "menu-item-separator" ]
-- renderMenuItem d (MenuItem i) _ _ = wrap outer inner
-- where outer = li [ className "context-menu-item" ]
-- inner = a [ onClick callback, style i.style ] [text i.label]
-- callback _ = d Hide *> i.callback
-- -- TODO: Aria and accessibility
-- renderMenu :: Render State MenuProps Action
-- renderMenu d m s c = pure $ wrap outer $ ul' inner
-- where outer = div [className (classes s.open m.classes)]
-- inner = map (\i -> renderMenuItem d i ) c
-- visibilityClass :: Boolean -> String
-- visibilityClass true = contextMenuShown
-- visibilityClass false = contextMenuHidden
-- classes :: Boolean -> String -> String
-- classes visible user = joinWith " " [menuClass, visibilityClass visible, user]
-- -- Class
-- contextMenuClass :: ReactClass (WithChildren State')
-- contextMenuClass = component "ContextMenu" createContextMenuClass
-- createContextMenuClass ::
-- forall given snapshot spec.
-- ReactComponentSpec MenuProps State snapshot given spec
-- => ReactClassConstructor MenuProps State given
-- -> ReactClass MenuProps
-- createContextMenuClass this = pure
-- { state: defaultState
-- , render: renderMenu
-- , componentDidMount: componentDidMount
-- , componentWillUnmount: componentWillUnmount
-- }
-- type Label = String
-- type ClassName = String
-- -- Items
-- simpleItem :: Label -> ClassName -> Effect Unit -> Effect Unit -> ReactElement
-- simpleItem label cls cb hide = a [ onClick (hide *> cb), className cls ] [ text label ]
-- separator :: ReactElement
-- separator = li [ className "menu-item-separator" ] []
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment