Texts.purs 5.44 KB
Newer Older
1
module Gargantext.Components.Nodes.Texts where
2

3 4 5
import Prelude
import Data.Generic.Rep (class Generic)
import Data.Generic.Rep.Show (genericShow)
6
import Data.Maybe (Maybe(..))
7
import Data.Tuple.Nested ((/\))
8
import Reactix as R
9
import Reactix.DOM.HTML as H
10
--------------------------------------------------------
11
import Gargantext.Components.DocsTable as DT
12
import Gargantext.Components.Loader (loader)
13
import Gargantext.Components.Node (NodePoly(..))
14
import Gargantext.Components.Nodes.Corpus (loadCorpusWithChild)
15
import Gargantext.Components.Nodes.Corpus.Chart.Histo (histo)
16
import Gargantext.Components.Nodes.Corpus.Types (CorpusData, Hyperdata(..), getCorpusInfo, CorpusInfo(..))
17
import Gargantext.Components.Tab as Tab
18
import Gargantext.Components.Table as Table
James Laver's avatar
James Laver committed
19
import Gargantext.Ends (Frontends)
20
import Gargantext.Sessions (Session)
21
import Gargantext.Types (CTabNgramType(..), TabSubType(..), TabType(..))
22
--------------------------------------------------------
23

James Laver's avatar
James Laver committed
24
type Props = ( frontends :: Frontends, session :: Session, nodeId :: Int )
25 26 27 28

textsLayout :: Record Props -> R.Element
textsLayout props = R.createElement textsLayoutCpt props []

29
------------------------------------------------------------------------
30
textsLayoutCpt :: R.Component Props
31
textsLayoutCpt = R.hooksComponent "G.C.Nodes.Texts.textsLayout" cpt where
James Laver's avatar
James Laver committed
32
  cpt {session,nodeId,frontends} _ = do
33
    pure $ loader {session, nodeId} loadCorpusWithChild paint
34 35
    where
      paint corpusData@{corpusId, corpusNode, defaultListId} =
36
        R.fragment [ Table.tableHeaderLayout headerProps, tabs' ]
37
        where
38 39
          NodePoly { name, date, hyperdata: Hyperdata h } = corpusNode
          CorpusInfo {desc,query,authors} = getCorpusInfo h.fields
James Laver's avatar
James Laver committed
40
          tabs' = tabs {session, corpusId, corpusData, frontends}
41
          title = "Corpus " <> name
42
          headerProps = { title, desc, query, date, user:authors }
43 44 45 46 47 48 49 50 51 52 53 54 55 56

data Mode = MoreLikeFav | MoreLikeTrash

derive instance genericMode :: Generic Mode _

instance showMode :: Show Mode where
  show = genericShow

derive instance eqMode :: Eq Mode

modeTabType :: Mode -> CTabNgramType
modeTabType MoreLikeFav    = CTabAuthors  -- TODO
modeTabType MoreLikeTrash  = CTabSources  -- TODO

James Laver's avatar
James Laver committed
57
type TabsProps = ( frontends :: Frontends, session :: Session, corpusId :: Int, corpusData :: CorpusData )
58 59 60 61 62 63 64

tabs :: Record TabsProps -> R.Element
tabs props = R.createElement tabsCpt props []

tabsCpt :: R.Component TabsProps
tabsCpt = R.hooksComponent "G.C.Nodes.Texts.tabs" cpt
  where
James Laver's avatar
James Laver committed
65
    cpt {frontends, session, corpusId, corpusData} _ = do
66 67 68 69 70
      (selected /\ setSelected) <- R.useState' 0
      pure $ Tab.tabs { tabs: tabs', selected }
      where
        tabs' = [ "Documents"     /\ docs,        "Trash"           /\ trash
                , "More like fav" /\ moreLikeFav, "More like trash" /\ moreLikeTrash ]
James Laver's avatar
James Laver committed
71
        docView' tabType = docView { frontends, session, corpusId, corpusData, tabType }
72 73 74 75 76 77 78
        docs = R.fragment [ docsHisto, docView' TabDocs ]
        docsHisto = histo { path, session }
          where path = { corpusId, tabType: TabCorpus TabDocs }
        moreLikeFav = docView' TabMoreLikeFav
        moreLikeTrash = docView' TabMoreLikeTrash
        trash = docView' TabTrash

James Laver's avatar
James Laver committed
79 80 81 82 83 84
type DocViewProps a =
  ( frontends :: Frontends
  , session :: Session
  , corpusId :: Int
  , corpusData :: CorpusData
  , tabType :: TabSubType a )
85 86 87 88 89 90 91

docView :: forall a. Record (DocViewProps a) -> R.Element
docView props = R.createElement docViewCpt props []

docViewCpt :: forall a. R.Component (DocViewProps a)
docViewCpt = R.hooksComponent "G.C.Nodes.Texts.docView" cpt
  where
James Laver's avatar
James Laver committed
92
    cpt {frontends, session, corpusId, corpusData: {defaultListId}, tabType} _children = do
93 94 95 96 97 98 99 100 101 102 103 104
      pure $ DT.docViewLayout $ params tabType
      where
        params :: forall b. TabSubType b -> Record DT.LayoutProps
        params TabDocs =
          { nodeId: corpusId
            -- ^ TODO merge nodeId and corpusId in DT
          , chart  : H.div {} []
          , tabType: TabCorpus TabDocs
          , totalRecords: 4737
          , listId: defaultListId
          , corpusId: Just corpusId
          , showSearch: true
James Laver's avatar
James Laver committed
105
          , frontends, session }
106 107 108 109 110 111 112 113 114
        params TabMoreLikeFav =
          { nodeId: corpusId
            -- ^ TODO merge nodeId and corpusId in DT
          , chart  : H.div {} []
          , tabType: TabCorpus TabMoreLikeFav
          , totalRecords: 4737
          , listId: defaultListId
          , corpusId: Just corpusId
          , showSearch: false
James Laver's avatar
James Laver committed
115
          , frontends, session }
116 117 118 119 120 121 122 123 124
        params TabMoreLikeTrash =
          { nodeId: corpusId
            -- ^ TODO merge nodeId and corpusId in DT
          , chart  : H.div {} []
          , tabType: TabCorpus TabMoreLikeTrash
          , totalRecords: 4737
          , listId: defaultListId
          , corpusId: Just corpusId
          , showSearch: false
James Laver's avatar
James Laver committed
125
          , frontends, session }
126 127 128 129 130 131 132 133 134
        params TabTrash =
          { nodeId: corpusId
            -- ^ TODO merge nodeId and corpusId in DT
          , chart  : H.div {} []
          , tabType: TabCorpus TabTrash
          , totalRecords: 4737
          , listId: defaultListId
          , corpusId: Nothing
          , showSearch: true
James Laver's avatar
James Laver committed
135
          , frontends, session }
136 137 138 139 140 141 142 143 144 145
        -- DUMMY
        params _ =
          { nodeId: corpusId
            -- ^ TODO merge nodeId and corpusId in DT
          , chart  : H.div {} []
          , tabType: TabCorpus TabTrash
          , totalRecords: 4737
          , listId: defaultListId
          , corpusId: Nothing
          , showSearch: true
James Laver's avatar
James Laver committed
146
          , frontends, session }