module Gargantext.Components.Corpus.Layout where import Gargantext.Prelude import Data.Maybe (Maybe(..)) import Effect (Effect) import Gargantext.Components.App.Store as AppStore import Gargantext.Components.Bootstrap as B import Gargantext.Components.Bootstrap.Types (ButtonVariant(..), ComponentStatus(..), Sizing(..), Variant(..)) import Gargantext.Components.Corpus.EditionBlock (editionBlock) import Gargantext.Components.FolderView as FV import Gargantext.Components.GraphQL.Node (Node) import Gargantext.Components.TileMenu (tileMenu) import Gargantext.Hooks.FirstEffect (useFirstEffect') import Gargantext.Hooks.Session (useSession) import Gargantext.Routes as GR import Gargantext.Sessions (sessionId) import Gargantext.Types (ID, defaultCacheParams) import Gargantext.Utils (setter, (?)) import Gargantext.Utils.Reactix as R2 import Reactix as R import Reactix.DOM.HTML as H import Toestand as T type Props = ( nodeId :: ID , nodeData :: Node ) here :: R2.Here here = R2.here "Gargantext.Components.Corpus.Layout" layout :: R2.Leaf Props layout = R2.leaf layoutCpt layoutCpt :: R.Component Props layoutCpt = here.component "layout" cpt where cpt { nodeId, nodeData: { name } } _ = do -- | Hooks -- | boxes@{ expandTableEdition } <- AppStore.use expandTableEdition' <- R2.useLive' expandTableEdition session <- useSession -- | Computed -- | let corpusCodeRoute = const do pure $ GR.CorpusCode (sessionId session) nodeId -- | Effect -- | -- transfer local Component change to Local Storage cache useFirstEffect' $ flip T.listen expandTableEdition onExpandTableEditionChange -- | Behaviors -- | let onExpandClick _ = T.modify_ (not) expandTableEdition -- | Render -- | pure $ H.div { className: "corpus-layout" } [ -- FV.backButtonSmart { nodeId, session } [] H.div { className: "corpus-layout__title" } [ B.div' { className: "corpus-layout__title__text" } name , H.hr { className: "corpus-layout__title__line"} , B.iconButton { name: expandTableEdition' ? "caret-up" $ "caret-down" , className: "corpos-layout__title__expand" , callback: onExpandClick } ] , R2.when expandTableEdition' $ H.div { className: "corpus-layout__edition-block" } [ editionBlock { nodeId } ] , H.div { className: "corpus-layout__code-section" } [ tileMenu { boxes , currentTile: Just corpusCodeRoute , xTile: Just corpusCodeRoute , yTile: Just corpusCodeRoute } [ B.button { callback: const $ pure unit , status: Muted , size: SmallSize , variant: ButtonVariant Secondary } [ B.icon { name: "code" } , B.wad_ [ "d-inline-block", "virtual-space", "w-1" ] , H.text "Code section" ] ] ] , H.div { className: "corpus-layout__folders" } [ FV.folderView { nodeId , session } ] ] onExpandTableEditionChange :: T.Change Boolean -> Effect Unit onExpandTableEditionChange { new } = do cache <- R2.loadLocalStorageState' R2.appParamsKey defaultCacheParams let update = setter (_ { expandTableEdition = new }) cache R2.setLocalStorageState R2.appParamsKey update