diff --git a/src/Gargantext/Components/App.purs b/src/Gargantext/Components/App.purs index a4eeceb916b96059ae2022206880322e95288477..bd8673bd7fe3870b30e545e6541be5f4f430f47c 100644 --- a/src/Gargantext/Components/App.purs +++ b/src/Gargantext/Components/App.purs @@ -1,14 +1,17 @@ module Gargantext.Components.App (app) where import Data.Maybe (Maybe(..)) -import Prelude import Reactix as R import Toestand as T +import Gargantext.Prelude + +import Gargantext.AsyncTasks as GAT import Gargantext.Components.App.Data (emptyApp) import Gargantext.Components.Router (router) import Gargantext.Hooks (useHashRouter) import Gargantext.Router as Router +import Gargantext.Sessions as Sessions import Gargantext.Utils.Reactix as R2 here :: R2.Here @@ -22,6 +25,11 @@ appCpt = here.component "app" cpt where cpt _ _ = do box <- T.useBox emptyApp -- global data boxes <- T.useFocusedFields box {} -- read-write access for children - tasks <- T.useBox Nothing -- storage for asynchronous tasks + tasks <- T.useBox Nothing -- storage for asynchronous tasks reductor + R.useEffect' $ do + void $ Sessions.load boxes.sessions + tasksReductor <- GAT.useTasks boxes.reloadRoot boxes.reloadForest + R.useEffect' $ do + T.write (Just tasksReductor) tasks useHashRouter Router.router boxes.route -- Install router to window pure $ router { boxes, tasks } -- Render router component diff --git a/src/Gargantext/Components/Router.purs b/src/Gargantext/Components/Router.purs index eed4d8c4ef7f4712155667545f73641c5770af7c..833ec7b639171e262b2c09b0a9225e58caf5771b 100644 --- a/src/Gargantext/Components/Router.purs +++ b/src/Gargantext/Components/Router.purs @@ -3,6 +3,7 @@ module Gargantext.Components.Router (router) where import Data.Array (fromFoldable) import Data.Maybe (Maybe(..)) import Reactix as R +import Reactix.DOM.HTML as H import Record as Record import Record.Extra as RE import Toestand as T @@ -43,7 +44,7 @@ here = R2.here "Gargantext.Components.Router" type Props = ( boxes :: Boxes, tasks :: T.Box (Maybe GAT.Reductor) ) -type SessionProps = ( session :: R.Context Session, sessionId :: SessionId | Props ) +type SessionProps = ( session :: R.Context Session, sessionId :: SessionId | Props ) type SessionNodeProps = ( nodeId :: NodeID | SessionProps ) type Props' = ( route' :: AppRoute, backend :: Backend | Props ) @@ -59,29 +60,31 @@ routerCpt = here.component "router" cpt where let sessionNodeProps sId nId = Record.merge { nodeId: nId } $ sessionProps sId showLogin <- T.useLive T.unequal boxes.showLogin route' <- T.useLive T.unequal boxes.route - pure $ if showLogin then login' boxes - else case route' of - GR.Annuaire s n -> annuaire (sessionNodeProps s n) [] - GR.ContactPage s a n -> contact (Record.merge { annuaireId: a } $ sessionNodeProps s n) [] - GR.Corpus s n -> corpus (sessionNodeProps s n) [] - GR.CorpusDocument s c l n -> corpusDocument (Record.merge { corpusId: c, listId: l } $ sessionNodeProps s n) [] - GR.Dashboard s n -> dashboard (sessionNodeProps s n) [] - GR.Document s l n -> document (Record.merge { listId: l } $ sessionNodeProps s n) [] - GR.Folder s n -> corpus (sessionNodeProps s n) [] - GR.FolderPrivate s n -> corpus (sessionNodeProps s n) [] - GR.FolderPublic s n -> corpus (sessionNodeProps s n) [] - GR.FolderShared s n -> corpus (sessionNodeProps s n) [] - GR.Home -> home props [] - GR.Lists s n -> lists (sessionNodeProps s n) [] - GR.Login -> login' boxes - GR.PGraphExplorer s g -> graphExplorer (sessionNodeProps s g) [] - GR.RouteFile s n -> routeFile (sessionNodeProps s n) [] - GR.RouteFrameCalc s n -> routeFrame (Record.merge { nodeType: NodeFrameCalc } $ sessionNodeProps s n) [] - GR.RouteFrameCode s n -> routeFrame (Record.merge { nodeType: NodeFrameNotebook } $ sessionNodeProps s n) [] - GR.RouteFrameWrite s n -> routeFrame (Record.merge { nodeType: NodeFrameWrite } $ sessionNodeProps s n) [] - GR.Team s n -> team (sessionNodeProps s n) [] - GR.Texts s n -> texts (sessionNodeProps s n) [] - GR.UserPage s n -> user (sessionNodeProps s n) [] + pure $ R.fragment + [ if showLogin then login' boxes else H.div {} [] + , case route' of + GR.Annuaire s n -> annuaire (sessionNodeProps s n) [] + GR.ContactPage s a n -> contact (Record.merge { annuaireId: a } $ sessionNodeProps s n) [] + GR.Corpus s n -> corpus (sessionNodeProps s n) [] + GR.CorpusDocument s c l n -> corpusDocument (Record.merge { corpusId: c, listId: l } $ sessionNodeProps s n) [] + GR.Dashboard s n -> dashboard (sessionNodeProps s n) [] + GR.Document s l n -> document (Record.merge { listId: l } $ sessionNodeProps s n) [] + GR.Folder s n -> corpus (sessionNodeProps s n) [] + GR.FolderPrivate s n -> corpus (sessionNodeProps s n) [] + GR.FolderPublic s n -> corpus (sessionNodeProps s n) [] + GR.FolderShared s n -> corpus (sessionNodeProps s n) [] + GR.Home -> home props [] + GR.Lists s n -> lists (sessionNodeProps s n) [] + GR.Login -> login' boxes + GR.PGraphExplorer s g -> graphExplorer (sessionNodeProps s g) [] + GR.RouteFile s n -> routeFile (sessionNodeProps s n) [] + GR.RouteFrameCalc s n -> routeFrame (Record.merge { nodeType: NodeFrameCalc } $ sessionNodeProps s n) [] + GR.RouteFrameCode s n -> routeFrame (Record.merge { nodeType: NodeFrameNotebook } $ sessionNodeProps s n) [] + GR.RouteFrameWrite s n -> routeFrame (Record.merge { nodeType: NodeFrameWrite } $ sessionNodeProps s n) [] + GR.Team s n -> team (sessionNodeProps s n) [] + GR.Texts s n -> texts (sessionNodeProps s n) [] + GR.UserPage s n -> user (sessionNodeProps s n) [] + ] forested :: R2.Component Props forested = R.createElement forestedCpt