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
143
Issues
143
List
Board
Labels
Milestones
Merge Requests
8
Merge Requests
8
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
gargantext
purescript-gargantext
Commits
5fe07605
Commit
5fe07605
authored
Mar 10, 2021
by
James Laver
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
new toestand, kill warnings
parent
b87af132
Changes
78
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
78 changed files
with
638 additions
and
958 deletions
+638
-958
packages.json
.psc-package/local/.set/packages.json
+2
-2
packages.dhall
packages.dhall
+1
-1
AsyncTasks.purs
src/Gargantext/AsyncTasks.purs
+7
-7
AnnotatedField.purs
src/Gargantext/Components/Annotation/AnnotatedField.purs
+8
-8
App.purs
src/Gargantext/Components/App.purs
+5
-8
Data.purs
src/Gargantext/Components/App/Data.purs
+11
-11
Category.purs
src/Gargantext/Components/Category.purs
+24
-63
DocsTable.purs
src/Gargantext/Components/DocsTable.purs
+8
-9
FacetsTable.purs
src/Gargantext/Components/FacetsTable.purs
+10
-9
Footer.purs
src/Gargantext/Components/Footer.purs
+2
-5
Forest.purs
src/Gargantext/Components/Forest.purs
+14
-14
Tree.purs
src/Gargantext/Components/Forest/Tree.purs
+14
-15
Node.purs
src/Gargantext/Components/Forest/Tree/Node.purs
+15
-23
Add.purs
src/Gargantext/Components/Forest/Tree/Node/Action/Add.purs
+2
-3
Contact.purs
...argantext/Components/Forest/Tree/Node/Action/Contact.purs
+7
-11
Types.purs
...ext/Components/Forest/Tree/Node/Action/Contact/Types.purs
+6
-30
Link.purs
src/Gargantext/Components/Forest/Tree/Node/Action/Link.purs
+3
-12
Merge.purs
src/Gargantext/Components/Forest/Tree/Node/Action/Merge.purs
+1
-0
Search.purs
...Gargantext/Components/Forest/Tree/Node/Action/Search.purs
+0
-1
Frame.purs
...text/Components/Forest/Tree/Node/Action/Search/Frame.purs
+4
-3
SearchField.purs
...omponents/Forest/Tree/Node/Action/Search/SearchField.purs
+5
-6
Upload.purs
...Gargantext/Components/Forest/Tree/Node/Action/Upload.purs
+2
-2
Box.purs
src/Gargantext/Components/Forest/Tree/Node/Box.purs
+9
-10
Tools.purs
src/Gargantext/Components/Forest/Tree/Node/Tools.purs
+6
-7
SubTree.purs
...Gargantext/Components/Forest/Tree/Node/Tools/SubTree.purs
+28
-63
Sync.purs
src/Gargantext/Components/Forest/Tree/Node/Tools/Sync.purs
+3
-2
Graph.purs
src/Gargantext/Components/Graph.purs
+11
-22
GraphExplorer.purs
src/Gargantext/Components/GraphExplorer.purs
+37
-45
API.purs
src/Gargantext/Components/GraphExplorer/API.purs
+1
-1
Button.purs
src/Gargantext/Components/GraphExplorer/Button.purs
+6
-15
Controls.purs
src/Gargantext/Components/GraphExplorer/Controls.purs
+36
-46
RangeControl.purs
src/Gargantext/Components/GraphExplorer/RangeControl.purs
+6
-8
Search.purs
src/Gargantext/Components/GraphExplorer/Search.purs
+5
-8
Sidebar.purs
src/Gargantext/Components/GraphExplorer/Sidebar.purs
+13
-19
SlideButton.purs
src/Gargantext/Components/GraphExplorer/SlideButton.purs
+18
-24
ToggleButton.purs
src/Gargantext/Components/GraphExplorer/ToggleButton.purs
+15
-18
Login.purs
src/Gargantext/Components/Login.purs
+5
-6
Form.purs
src/Gargantext/Components/Login/Form.purs
+12
-11
Modal.purs
src/Gargantext/Components/Login/Modal.purs
+1
-1
NgramsTable.purs
src/Gargantext/Components/NgramsTable.purs
+4
-5
Components.purs
src/Gargantext/Components/NgramsTable/Components.purs
+7
-0
Core.purs
src/Gargantext/Components/NgramsTable/Core.purs
+4
-5
Loader.purs
src/Gargantext/Components/NgramsTable/Loader.purs
+3
-4
Annuaire.purs
src/Gargantext/Components/Nodes/Annuaire.purs
+1
-1
Tabs.purs
src/Gargantext/Components/Nodes/Annuaire/Tabs.purs
+6
-6
User.purs
src/Gargantext/Components/Nodes/Annuaire/User.purs
+7
-11
Contact.purs
src/Gargantext/Components/Nodes/Annuaire/User/Contact.purs
+13
-8
Tabs.purs
...gantext/Components/Nodes/Annuaire/User/Contacts/Tabs.purs
+6
-6
Corpus.purs
src/Gargantext/Components/Nodes/Corpus.purs
+7
-5
Chart.purs
src/Gargantext/Components/Nodes/Corpus/Chart.purs
+1
-1
API.purs
src/Gargantext/Components/Nodes/Corpus/Chart/API.purs
+0
-1
Common.purs
src/Gargantext/Components/Nodes/Corpus/Chart/Common.purs
+3
-3
Metrics.purs
src/Gargantext/Components/Nodes/Corpus/Chart/Metrics.purs
+9
-8
Pie.purs
src/Gargantext/Components/Nodes/Corpus/Chart/Pie.purs
+4
-4
Tree.purs
src/Gargantext/Components/Nodes/Corpus/Chart/Tree.purs
+7
-9
Types.purs
src/Gargantext/Components/Nodes/Corpus/Chart/Types.purs
+0
-1
Utils.purs
src/Gargantext/Components/Nodes/Corpus/Chart/Utils.purs
+21
-32
Tabs.purs
src/Gargantext/Components/Nodes/Corpus/Graph/Tabs.purs
+1
-0
Types.purs
src/Gargantext/Components/Nodes/Dashboard/Types.purs
+1
-1
File.purs
src/Gargantext/Components/Nodes/File.purs
+1
-2
Frame.purs
src/Gargantext/Components/Nodes/Frame.purs
+1
-5
Public.purs
src/Gargantext/Components/Nodes/Home/Public.purs
+1
-3
Lists.purs
src/Gargantext/Components/Nodes/Lists.purs
+68
-110
Tabs.purs
src/Gargantext/Components/Nodes/Lists/Tabs.purs
+7
-7
Texts.purs
src/Gargantext/Components/Nodes/Texts.purs
+10
-7
RangeSlider.purs
src/Gargantext/Components/RangeSlider.purs
+0
-2
Router.purs
src/Gargantext/Components/Router.purs
+36
-47
Search.purs
src/Gargantext/Components/Search.purs
+3
-11
SessionLoader.purs
src/Gargantext/Components/SessionLoader.purs
+1
-1
SimpleLayout.purs
src/Gargantext/Components/SimpleLayout.purs
+1
-1
Types.purs
src/Gargantext/Components/Table/Types.purs
+3
-19
TopBar.purs
src/Gargantext/Components/TopBar.purs
+3
-8
Hooks.purs
src/Gargantext/Hooks.purs
+2
-4
Sigmax.purs
src/Gargantext/Hooks/Sigmax.purs
+7
-7
Sessions.purs
src/Gargantext/Sessions.purs
+1
-2
CacheAPI.purs
src/Gargantext/Utils/CacheAPI.purs
+2
-6
Reload.purs
src/Gargantext/Utils/Reload.purs
+2
-8
Toestand.purs
src/Gargantext/Utils/Toestand.purs
+21
-48
No files found.
.psc-package/local/.set/packages.json
View file @
5fe07605
...
...
@@ -4478,7 +4478,7 @@
"typelevel-prelude"
],
"repo"
:
"https://github.com/poorscript/purescript-toestand"
,
"version"
:
"v0.
5
.1"
"version"
:
"v0.
6
.1"
},
"tolerant-argonaut"
:
{
"dependencies"
:
[
...
...
@@ -5027,4 +5027,4 @@
"repo"
:
"https://github.com/athanclark/purescript-zeta-extra.git"
,
"version"
:
"v0.0.1"
}
}
}
\ No newline at end of file
packages.dhall
View file @
5fe07605
...
...
@@ -126,7 +126,7 @@ let additions =
[ "prelude", "effect", "foldable-traversable", "reactix"
, "record", "tuples", "typelevel-prelude" ]
, repo = "https://github.com/poorscript/purescript-toestand"
, version = "v0.
5
.1"
, version = "v0.
6
.1"
}
, typisch =
{ dependencies = [ "prelude" ]
...
...
src/Gargantext/AsyncTasks.purs
View file @
5fe07605
...
...
@@ -9,7 +9,7 @@ import Data.Array as A
import Data.Either (Either(..))
import Data.Map as Map
import Data.Maybe (Maybe(..), maybe, fromMaybe)
import Data.Tuple (fst
, snd
)
import Data.Tuple (fst)
import Effect (Effect)
import Gargantext.Types as GT
import Gargantext.Utils as GU
...
...
@@ -55,15 +55,15 @@ removeTaskFromList ts (GT.AsyncTaskWithType { task: GT.AsyncTask { id: id' } })
A.filter (\(GT.AsyncTaskWithType { task: GT.AsyncTask { id: id'' } }) -> id' /= id'') ts
type ReductorProps = (
reloadForest :: T.
Cursor
T2.Reload
, reloadRoot :: T.
Cursor
T2.Reload
reloadForest :: T.
Box
T2.Reload
, reloadRoot :: T.
Box
T2.Reload
, storage :: Storage
)
type Reductor = R2.Reductor (Record ReductorProps) Action
type ReductorAction = Action -> Effect Unit
useTasks :: T.
Cursor T2.Reload -> T.Cursor
T2.Reload -> R.Hooks Reductor
useTasks :: T.
Box T2.Reload -> T.Box
T2.Reload -> R.Hooks Reductor
useTasks reloadRoot reloadForest = R2.useReductor act initializer unit
where
act :: R2.Actor (Record ReductorProps) Action
...
...
@@ -79,18 +79,18 @@ data Action =
action :: Record ReductorProps -> Action -> Effect (Record ReductorProps)
action p@{ reloadForest, storage } (Insert nodeId t) = do
_ <- GUR.bump
Cursor
reloadForest
_ <- GUR.bump
Box
reloadForest
let newStorage = Map.alter (maybe (Just [t]) (\ts -> Just $ A.cons t ts)) nodeId storage
pure $ p { storage = newStorage }
action p (Finish nodeId t) = do
action p (Remove nodeId t)
action p@{ reloadRoot, reloadForest, storage } (Remove nodeId t@(GT.AsyncTaskWithType { typ })) = do
_ <- if GT.asyncTaskTriggersAppReload typ then
GUR.bump
Cursor
reloadRoot
GUR.bump
Box
reloadRoot
else
pure unit
_ <- if GT.asyncTaskTriggersTreeReload typ then
GUR.bump
Cursor
reloadForest
GUR.bump
Box
reloadForest
else
pure unit
let newStorage = Map.alter (maybe Nothing $ (\ts -> Just $ removeTaskFromList ts t)) nodeId storage
...
...
src/Gargantext/Components/Annotation/AnnotatedField.purs
View file @
5fe07605
...
...
@@ -11,22 +11,22 @@
-- | 2. We will need a more ambitious search algorithm for skipgrams.
module Gargantext.Components.Annotation.AnnotatedField where
import Data.Maybe ( Maybe(..), maybe )
import Data.Tuple ( Tuple )
import Data.Tuple.Nested ( (/\) )
import Gargantext.Prelude (Unit, bind, const, discard, not, pure, ($), (<$>), (<>))
import Data.Maybe (Maybe(..), maybe)
import Data.Tuple (Tuple)
import Data.Tuple.Nested ((/\))
--import DOM.Simple.Console (log2)
import DOM.Simple.Event as DE
import Effect (
Effect
)
import Effect (
Effect
)
import Reactix as R
import Reactix.DOM.HTML as HTML
import Reactix.SyntheticEvent as E
import Gargantext.Prelude
import Gargantext.Types (CTabNgramType(..), TermList)
import Gargantext.Components.Annotation.Utils (
termBootstrapClass, termClass
)
import Gargantext.Components.Annotation.Utils (
termClass
)
import Gargantext.Components.NgramsTable.Core
import Gargantext.Components.Annotation.Menu ( annotationMenu, MenuType(..) )
( NgramsTable, NgramsTerm, findNgramTermList, highlightNgrams, normNgram )
import Gargantext.Components.Annotation.Menu (annotationMenu, MenuType(..))
import Gargantext.Utils.Selection as Sel
import Gargantext.Utils.Reactix as R2
...
...
src/Gargantext/Components/App.purs
View file @
5fe07605
...
...
@@ -9,9 +9,7 @@ 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
import Gargantext.Utils.Toestand as T2
here :: R2.Here
here = R2.here "Gargantext.Components.App"
...
...
@@ -22,9 +20,8 @@ app = R.createElement appCpt
appCpt :: R.Component ()
appCpt = here.component "app" cpt where
cpt _ _ = do
cell <- T.useCell emptyApp -- global data
cursors <- T.useFieldCursors cell {} -- read-write access for children
-- tasks <- R.useRef Nothing -- storage for asynchronous tasks
tasks <- T2.useCursed Nothing -- storage for asynchronous tasks
useHashRouter Router.router cursors.route -- Install router to window
pure $ router { cursors, tasks } -- Render router component
box <- T.useBox emptyApp -- global data
boxes <- T.useFocusedFields box {} -- read-write access for children
tasks <- T.useBox Nothing -- storage for asynchronous tasks
useHashRouter Router.router boxes.route -- Install router to window
pure $ router { boxes, tasks } -- Render router component
src/Gargantext/Components/App/Data.purs
View file @
5fe07605
module Gargantext.Components.App.Data (App,
Cursor
s, emptyApp) where
module Gargantext.Components.App.Data (App,
Boxe
s, emptyApp) where
import Data.Set as Set
import Data.Maybe (Maybe(..))
...
...
@@ -36,15 +36,15 @@ emptyApp =
, showLogin: false
}
type
Cursor
s =
{ backend :: T.
Cursor
(Maybe Backend)
, handed :: T.
Cursor
Handed
, forestOpen :: T.
Cursor
OpenNodes
, reloadRoot :: T.
Cursor
T2.Reload
, reloadForest :: T.
Cursor
T2.Reload
, route :: T.
Cursor
AppRoute
, sessions :: T.
Cursor
Sessions
, showCorpus :: T.
Cursor
Boolean
, showLogin :: T.
Cursor
Boolean
type
Boxe
s =
{ backend :: T.
Box
(Maybe Backend)
, handed :: T.
Box
Handed
, forestOpen :: T.
Box
OpenNodes
, reloadRoot :: T.
Box
T2.Reload
, reloadForest :: T.
Box
T2.Reload
, route :: T.
Box
AppRoute
, sessions :: T.
Box
Sessions
, showCorpus :: T.
Box
Boolean
, showLogin :: T.
Box
Boolean
}
src/Gargantext/Components/Category.purs
View file @
5fe07605
-- TODO: this module should be replaced by FacetsTable
module Gargantext.Components.Category where
import Data.Argonaut (class DecodeJson, class EncodeJson, decodeJson, jsonEmptyObject, (.:), (:=), (~>), encodeJson)
import Gargantext.Prelude (discard, map, pure, void, ($), (-), (<), (<>), (==))
import Data.Argonaut (class EncodeJson, encodeJson, jsonEmptyObject, (:=), (~>))
import Data.Array as A
import Data.Generic.Rep (class Generic)
import Data.Generic.Rep.Eq (genericEq)
import Data.Generic.Rep.Show (genericShow)
import Data.Lens ((^.))
import Data.Lens.At (at)
import Data.Lens.Record (prop)
import Data.Map (Map)
import Data.Map as Map
import Data.Maybe (Maybe(..), fromMaybe, isJust)
import Data.Ord.Down (Down(..))
import Data.Set (Set)
import Data.Set as Set
import Data.String as Str
import Data.Symbol (SProxy(..))
import Data.Tuple (Tuple(..), fst)
import Data.Tuple.Nested ((/\))
import DOM.Simple.Event as DE
import Effect (Effect)
import Data.Maybe (Maybe(..))
import Effect.Aff (Aff, launchAff)
import Effect.Class (liftEffect)
import Reactix as R
import Reactix.DOM.HTML as H
import Gargantext.Prelude
import Gargantext.Components.Category.Types
import Gargantext.Components.DocsTable.Types (DocumentsView(..), LocalCategories, LocalUserScore
)
import Gargantext.
Ends (Frontends, url)
import Gargantext.Hooks.Loader (useLoaderWithCacheAPI, HashedResponse(..)
)
( Category(..), Star(..), cat2score, categories, star2score, stars
)
import Gargantext.
Components.DocsTable.Types
( DocumentsView(..), LocalCategories, LocalUserScore
)
import Gargantext.Utils.Reactix as R2
import Gargantext.Routes as Routes
import Gargantext.Routes (SessionRoute(NodeAPI))
import Gargantext.Sessions (Session, sessionId, get, delete, put)
import Gargantext.Types (NodeID, NodeType(..), OrderBy(..), TableResult, TabType, showTabType')
import Gargantext.Utils.CacheAPI as GUC
import Gargantext.Sessions (Session, put)
import Gargantext.Types (NodeID, NodeType(..))
here :: R2.Here
here = R2.here "Gargantext.Components.Category"
------------------------------------------------------------------------
type RatingProps =
( score :: Star
, nodeId :: NodeID
...
...
@@ -55,31 +33,20 @@ rating :: R2.Component RatingProps
rating = R.createElement ratingCpt
ratingCpt :: R.Component RatingProps
ratingCpt = here.component "rating" cpt
where
cpt { score, nodeId, row: DocumentsView r, session, setLocalCategories } _ = do
pure $ H.div {className:"flex"} divs
where
divs = map (\s -> H.div { className : icon score s
, on: {click: onClick score s}
} []) stars
icon Star_0 Star_0 = "fa fa-times-circle"
icon _ Star_0 = "fa fa-times"
icon c s = if star2score c < star2score s
then "fa fa-star-o"
else "fa fa-star"
onClick score c = \_-> do
setLocalCategories $ Map.insert r._id c
void $ launchAff
$ putRating session nodeId
$ RatingQuery {nodeIds: [r._id], rating: c}
newtype RatingQuery =
RatingQuery { nodeIds :: Array Int
, rating :: Star
}
ratingCpt = here.component "rating" cpt where
cpt { score, nodeId, row: DocumentsView r, session, setLocalCategories } _ =
pure $ H.div {className:"flex"} divs where
divs = map (\s -> H.div { className : icon' score s, on: { click: onClick s } } []) stars
icon' Star_0 Star_0 = "fa fa-times-circle"
icon' _ Star_0 = "fa fa-times"
icon' c s = if star2score c < star2score s then "fa fa-star-o" else "fa fa-star"
onClick c = \_-> do
setLocalCategories $ Map.insert r._id c
void $ launchAff
$ putRating session nodeId
$ RatingQuery {nodeIds: [r._id], rating: c}
newtype RatingQuery = RatingQuery { nodeIds :: Array Int, rating :: Star }
instance encodeJsonRatingQuery :: EncodeJson RatingQuery where
encodeJson (RatingQuery post) =
...
...
@@ -88,14 +55,9 @@ instance encodeJsonRatingQuery :: EncodeJson RatingQuery where
~> jsonEmptyObject
putRating :: Session -> Int -> RatingQuery -> Aff (Array Int)
putRating session nodeId = put session $ ratingRoute nodeId
where
ratingRoute :: Int -> SessionRoute
ratingRoute nodeId = NodeAPI Node (Just nodeId) "category"
putRating session nodeId = put session $ ratingRoute where
ratingRoute = NodeAPI Node (Just nodeId) "category"
------------------------------------------------------------------------
type CarousselProps =
( category :: Category
, nodeId :: NodeID
...
...
@@ -104,7 +66,6 @@ type CarousselProps =
, setLocalCategories :: R.Setter LocalCategories
)
caroussel :: R2.Component CarousselProps
caroussel = R.createElement carousselCpt
...
...
src/Gargantext/Components/DocsTable.purs
View file @
5fe07605
-- TODO: this module should be replaced by FacetsTable
module Gargantext.Components.DocsTable where
import Data.Argonaut (class DecodeJson, class EncodeJson, decodeJson, jsonEmptyObject, (.:), (:=), (~>))
import Gargantext.Prelude
( class Ord, Unit, bind, const, discard, identity, mempty
, otherwise, pure, show, unit, ($), (/=), (<$>), (<<<), (<>), (==) )
import Data.Argonaut (class EncodeJson, jsonEmptyObject, (:=), (~>))
import Data.Array as A
import Data.Lens ((^.))
import Data.Lens.At (at)
import Data.Lens.Record (prop)
import Data.Map (Map)
import Data.Maybe (Maybe(..), fromMaybe, isJust, maybe)
import Data.Ord.Down (Down(..))
import Data.Set (Set)
...
...
@@ -15,19 +17,18 @@ import Data.String as Str
import Data.Symbol (SProxy(..))
import Data.Tuple (Tuple(..), fst)
import Data.Tuple.Nested ((/\))
import DOM.Simple.Console (log
, log
2)
import DOM.Simple.Console (log2)
import DOM.Simple.Event as DE
import Effect (Effect)
import Effect.Aff (Aff)
import Effect.Class (liftEffect)
import Reactix as R
import Reactix.DOM.HTML as H
import Toestand as T
import Gargantext.Prelude
import Gargantext.Components.Category (caroussel, rating)
import Gargantext.Components.Category.Types (Category(..), decodeCategory, Star(..), decodeStar)
import Gargantext.Components.Category (rating)
import Gargantext.Components.Category.Types (Star(..))
import Gargantext.Components.DocsTable.Types
( DocumentsView(..), Hyperdata(..), LocalUserScore, Query, Response(..), sampleData )
import Gargantext.Components.Table.Types as T
import Gargantext.Components.Nodes.Lists.Types as NT
import Gargantext.Components.Nodes.Texts.Types (SidePanelTriggers)
...
...
@@ -43,11 +44,9 @@ import Gargantext.Utils.CacheAPI as GUC
import Gargantext.Utils.QueryString (joinQueryStrings, mQueryParamS, queryParam, queryParamS)
import Gargantext.Utils.Reactix as R2
import Gargantext.Utils.Reload as GUR
import Gargantext.Utils.Toestand as T2
here :: R2.Here
here = R2.here "Gargantext.Components.DocsTable"
------------------------------------------------------------------------
type TotalRecords = Int
...
...
src/Gargantext/Components/FacetsTable.purs
View file @
5fe07605
...
...
@@ -3,9 +3,10 @@
-- has not been ported to this module yet.
module Gargantext.Components.FacetsTable where
------------------------------------------------------------------------
import Data.Argonaut (class DecodeJson, class EncodeJson, decodeJson, jsonEmptyObject, (.:), (:=), (~>))
import Data.Array (concat, filter)
import Prelude
( class Show, Unit, bind, const, discard, identity, mempty, not
, otherwise, pure, unit, void, ($), (*>), (<$>), (<<<), (<>), (==), (>) )
import Data.Argonaut (class EncodeJson, jsonEmptyObject, (:=), (~>))
import Data.Generic.Rep (class Generic)
import Data.Generic.Rep.Show (genericShow)
import Data.Maybe (Maybe(..), fromMaybe)
...
...
@@ -13,19 +14,20 @@ import Data.Sequence (Seq)
import Data.Sequence as Seq
import Data.Set (Set)
import Data.Set as Set
import Data.String (Pattern(..), split)
import Data.String as String
import Data.Tuple (fst, snd)
import Data.Tuple.Nested ((/\))
import Effect (Effect)
import Effect.Aff (Aff, launchAff_)
import Prelude
import Reactix as R
import Reactix.DOM.HTML as H
import Gargantext.Components.Category (CategoryQuery(..), putCategories)
import Gargantext.Components.Category.Types (Category(..), decodeCategory, favCategory)
import Gargantext.Components.Search
( Contact(..), Document(..), HyperdataRowContact(..), HyperdataRowDocument(..)
, SearchQuery, SearchResult(..), SearchResultTypes(..) )
import Gargantext.Components.Table as T
import Gargantext.Components.Table.Types as T
import Gargantext.Ends (url, Frontends)
...
...
@@ -35,11 +37,10 @@ import Gargantext.Routes as Routes
import Gargantext.Sessions (Session, sessionId, post, deleteWithBody)
import Gargantext.Types (NodeType(..), OrderBy(..), NodePath(..), NodeID)
import Gargantext.Utils (toggleSet, zeroPad)
import Gargantext.Utils.DecodeMaybe ((.|))
import Gargantext.Utils.Reactix as R2
here :: R2.Here
here = R2.here "Gargantext.Components.FacetsTable"
------------------------------------------------------------------------
type Props =
( chart :: R.Element
...
...
@@ -360,7 +361,7 @@ pageCpt = here.component "page" cpt
}
where
markClick _ = markCategory session nodeId Favorite [id]
contactUrl aId id
= url frontends $ Routes.ContactPage (sessionId session) annuaireId id
contactUrl aId id
' = url frontends $ Routes.ContactPage (sessionId session) annuaireId id'
docRow dv@(DocumentsView {id, score, title, source, authors, pairs, delete, category}) =
{ row:
...
...
src/Gargantext/Components/Footer.purs
View file @
5fe07605
module Gargantext.Components.Footer where
import Gargantext.Prelude
import Gargantext.Utils.Reactix as R2
import Reactix as R
import Reactix.DOM.HTML as H
import Toestand as T
import Gargantext.Prelude
import Gargantext.Sessions as Sessions
import Gargantext.Utils.Reactix as R2
here :: R2.Here
here = R2.here "Gargantext.Components.Footer"
...
...
src/Gargantext/Components/Forest.purs
View file @
5fe07605
...
...
@@ -35,26 +35,26 @@ here = R2.here "Gargantext.Components.Forest"
-- Shared by components here with Tree
type Common =
( frontends :: Frontends
, handed :: T.
Cursor
Handed
, reloadRoot :: T.
Cursor
T2.Reload
, route :: T.
Cursor
AppRoute
, tasks :: T.
Cursor
(Maybe GAT.Reductor)
, handed :: T.
Box
Handed
, reloadRoot :: T.
Box
T2.Reload
, route :: T.
Box
AppRoute
, tasks :: T.
Box
(Maybe GAT.Reductor)
)
type LayoutProps =
( backend :: T.
Cursor
(Maybe Backend)
, reloadForest :: T.
Cursor
T2.Reload
, sessions :: T.
Cursor
Sessions
, showLogin :: T.
Cursor
Boolean
( backend :: T.
Box
(Maybe Backend)
, reloadForest :: T.
Box
T2.Reload
, sessions :: T.
Box
Sessions
, showLogin :: T.
Box
Boolean
| Common
)
type Props = (
forestOpen :: T.
Cursor
OpenNodes
forestOpen :: T.
Box
OpenNodes
| LayoutProps )
type TreeExtra = (
forestOpen :: T.
Cursor
OpenNodes
forestOpen :: T.
Box
OpenNodes
, session :: Session
)
...
...
@@ -74,7 +74,7 @@ forestCpt = here.component "forest" cpt where
, showLogin
, tasks } _ = do
tasks' <- GAT.useTasks reloadRoot reloadForest
R.useEffect' $ T
2
.write_ (Just tasks') tasks
R.useEffect' $ T.write_ (Just tasks') tasks
handed' <- T.useLive T.unequal handed
reloadForest' <- T.useLive T.unequal reloadForest
reloadRoot' <- T.useLive T.unequal reloadRoot
...
...
@@ -107,7 +107,7 @@ forestCpt = here.component "forest" cpt where
, session: s
, tasks } []
plus :: Handed -> T.
Cursor Boolean -> T.Cursor
(Maybe Backend) -> R.Element
plus :: Handed -> T.
Box Boolean -> T.Box
(Maybe Backend) -> R.Element
plus handed showLogin backend = H.div { className: "row" }
[ H.button { className: buttonClass
, on: { click }
...
...
@@ -122,7 +122,7 @@ plus handed showLogin backend = H.div { className: "row" }
where
click _ = do
-- _ <- T.write Nothing backend
T
2
.write_ true showLogin
T.write_ true showLogin
title = "Add or remove connections to the server(s)."
divClass = "fa fa-universal-access"
buttonClass =
...
...
@@ -174,7 +174,7 @@ forestLayoutRawCpt = here.component "forestLayoutRaw" cpt where
, showLogin
, tasks } children = do
handed' <- T.useLive T.unequal p.handed
forestOpen <- T
2.useCursed
$ Set.empty
forestOpen <- T
.useBox
$ Set.empty
pure $ R2.row $ reverseHanded
[ H.div { className: "col-md-2"
...
...
src/Gargantext/Components/Forest/Tree.purs
View file @
5fe07605
...
...
@@ -16,7 +16,6 @@ import Reactix.DOM.HTML as H
import Record as Record
import Record.Extra as RecordE
import Toestand as T
import Web.HTML.Event.EventTypes (offline)
import Gargantext.AsyncTasks as GAT
import Gargantext.Components.Forest.Tree.Node (nodeSpan)
...
...
@@ -48,20 +47,20 @@ here = R2.here "Gargantext.Components.Forest.Tree"
-- Shared by every component here + performAction + nodeSpan
type Universal =
( reloadRoot :: T.
Cursor
T2.Reload
, tasks :: T.
Cursor
(Maybe GAT.Reductor) )
( reloadRoot :: T.
Box
T2.Reload
, tasks :: T.
Box
(Maybe GAT.Reductor) )
-- Shared by every component here + nodeSpan
type Global =
( frontends :: Frontends
, handed :: Handed
, route :: T.
Cursor
AppRoute
, route :: T.
Box
AppRoute
| Universal )
-- Shared by every component here
type Common = (
forestOpen :: T.
Cursor
OpenNodes
, reload :: T.
Cursor
T2.Reload
forestOpen :: T.
Box
OpenNodes
, reload :: T.
Box
T2.Reload
| Global
)
...
...
@@ -89,7 +88,7 @@ getNodeTree session nodeId = get session $ GR.NodeAPI GT.Tree (Just nodeId) ""
getNodeTreeFirstLevel :: Session -> ID -> Aff FTree
getNodeTreeFirstLevel session nodeId = get session $ GR.TreeFirstLevel (Just nodeId) ""
type NodeProps = ( reloadTree :: T.
Cursor
T2.Reload, session :: Session | Common )
type NodeProps = ( reloadTree :: T.
Box
T2.Reload, session :: Session | Common )
type TreeProps = ( tree :: FTree | NodeProps )
...
...
@@ -100,7 +99,7 @@ treeCpt :: R.Component TreeProps
treeCpt = here.component "tree" cpt where
cpt p@{ session, tree: NTree (LNode { id, name, nodeType }) children } _ = do
setPopoverRef <- R.useRef Nothing
folderOpen <- T2.useMember
Cursor
nodeId p.forestOpen
folderOpen <- T2.useMember
Box
nodeId p.forestOpen
open <- T.useLive T.unequal folderOpen
pure $ H.ul { className: ulClass }
[ H.div { className: divClass } -- TODO: naughty div should not be in a ul
...
...
@@ -131,8 +130,8 @@ treeCpt = here.component "tree" cpt where
--- The properties tree shares in common with performAction
type PACommon =
( forestOpen :: T.
Cursor
OpenNodes
, reloadTree :: T.
Cursor
T2.Reload
( forestOpen :: T.
Box
OpenNodes
, reloadTree :: T.
Box
T2.Reload
, session :: Session
, tree :: FTree
| Universal )
...
...
@@ -151,7 +150,7 @@ childLoader = R.createElement childLoaderCpt
childLoaderCpt :: R.Component ChildLoaderProps
childLoaderCpt = here.component "childLoader" cpt where
cpt p@{ render } _ = do
reload <- T
2.useCursed
T2.newReload
reload <- T
.useBox
T2.newReload
let reloads = [ reload, p.reloadTree, p.reloadRoot ]
cache <- (A.cons p.id) <$> traverse (T.useLive T.unequal) reloads
useLoader cache fetch (paint reload)
...
...
@@ -175,7 +174,7 @@ performAction (DeleteNode nt) p@{ forestOpen
GT.NodePublic GT.FolderPublic -> void $ deleteNode session nt id
GT.NodePublic _ -> void $ unpublishNode session parent_id id
_ -> void $ deleteNode session nt id
liftEffect $ T
2
.modify_ (Set.delete (mkNodeId session id)) forestOpen
liftEffect $ T.modify_ (Set.delete (mkNodeId session id)) forestOpen
performAction RefreshTree p
performAction (DoSearch task) p@{ tasks
, tree: (NTree (LNode {id}) _) } = liftEffect $ do
...
...
@@ -201,14 +200,14 @@ performAction (ShareTeam username) p@{ tree: (NTree (LNode {id}) _)} =
performAction (SharePublic { params }) p@{ forestOpen } = traverse_ f params where
f (SubTreeOut { in: inId, out }) = do
void $ Share.shareReq p.session inId $ Share.SharePublicParams { node_id: out }
liftEffect $ T
2
.modify_ (Set.insert (mkNodeId p.session out)) forestOpen
liftEffect $ T.modify_ (Set.insert (mkNodeId p.session out)) forestOpen
performAction RefreshTree p
performAction (AddContact params) p@{ tree: (NTree (LNode {id}) _) } =
void $ Contact.contactReq p.session id params
performAction (AddNode name nodeType) p@{ forestOpen
, tree: (NTree (LNode { id }) _) } = do
task <- addNode p.session id $ AddNodeValue {name, nodeType}
liftEffect $ T
2
.modify_ (Set.insert (mkNodeId p.session id)) forestOpen
liftEffect $ T.modify_ (Set.insert (mkNodeId p.session id)) forestOpen
performAction RefreshTree p
performAction (UploadFile nodeType fileType mName blob) p@{ tasks
, tree: (NTree (LNode { id }) _) } = do
...
...
@@ -233,7 +232,7 @@ performAction (MoveNode {params}) p@{ forestOpen
, session } = traverse_ f params where
f (SubTreeOut { in: in', out }) = do
void $ moveNodeReq p.session in' out
liftEffect $ T
2
.modify_ (Set.insert (mkNodeId session out)) forestOpen
liftEffect $ T.modify_ (Set.insert (mkNodeId session out)) forestOpen
performAction RefreshTree p
performAction (MergeNode { params }) p = traverse_ f params where
f (SubTreeOut { in: in', out }) = do
...
...
src/Gargantext/Components/Forest/Tree/Node.purs
View file @
5fe07605
...
...
@@ -2,7 +2,6 @@ module Gargantext.Components.Forest.Tree.Node where
import Gargantext.Prelude
import Data.Array (reverse)
import Data.Maybe (Maybe(..))
import Data.Nullable (null)
import Data.Symbol (SProxy(..))
...
...
@@ -16,7 +15,6 @@ import Reactix as R
import Reactix.DOM.HTML as H
import Record as Record
import Toestand as T
import Web.HTML.Event.EventTypes (offline)
import Gargantext.AsyncTasks as GAT
import Gargantext.Components.Forest.Tree.Node.Action (Action(..))
...
...
@@ -47,16 +45,16 @@ here = R2.here "Gargantext.Components.Forest.Tree.Node"
-- Main Node
type NodeMainSpanProps =
( folderOpen :: T.
Cursor
Boolean
( folderOpen :: T.
Box
Boolean
, frontends :: Frontends
, id :: ID
, isLeaf :: IsLeaf
, name :: Name
, nodeType :: GT.NodeType
, reloadRoot :: T.
Cursor
T2.Reload
, route :: T.
Cursor
Routes.AppRoute
, reloadRoot :: T.
Box
T2.Reload
, route :: T.
Box
Routes.AppRoute
, setPopoverRef :: R.Ref (Maybe (Boolean -> Effect Unit))
, tasks :: T.
Cursor
(Maybe GAT.Reductor)
, tasks :: T.
Box
(Maybe GAT.Reductor)
| CommonProps
)
...
...
@@ -103,7 +101,7 @@ nodeMainSpanCpt = here.component "nodeMainSpan" cpt
tasks' <- T.read tasks
pure $ H.span (dropProps droppedFile isDragOver)
$
GT.
reverseHanded
$ reverseHanded
[ folderIcon { folderOpen, nodeType } []
, chevronIcon { folderOpen, handed, isLeaf, nodeType } []
, nodeLink { frontends, handed, folderOpen, id, isSelected
...
...
@@ -140,27 +138,21 @@ nodeMainSpanCpt = here.component "nodeMainSpan" cpt
} []
] handed
where
onTaskFinish id t _ = do
onTaskFinish id
'
t _ = do
mT <- T.read tasks
case mT of
Just t' -> snd t' $ GAT.Finish id t
Just t' -> snd t' $ GAT.Finish id
'
t
Nothing -> pure unit
T2.reload reloadRoot
SettingsBox {show: showBox} = settingsBox nodeType
onPopoverClose popoverRef _ = Popover.setOpen popoverRef false
name' {name
, nodeType} = if nodeType == GT.NodeUser then show session else name
name' {name
: n, nodeType: nt} = if nt == GT.NodeUser then show session else n
mNodePopupView props@{id, nodeType} onPopoverClose =
nodePopupView { dispatch
, handed : props.handed
, id
, name: name' props
, nodeType
, onPopoverClose
, session
}
mNodePopupView props'@{ id: i, nodeType: nt, handed: h } opc =
nodePopupView { dispatch, handed: h, id: i, name: name' props'
, nodeType: nt, onPopoverClose: opc, session }
popOverIcon =
H.a { className: "settings fa fa-cog"
...
...
@@ -199,7 +191,7 @@ nodeMainSpanCpt = here.component "nodeMainSpan" cpt
onDragLeave (_ /\ setIsDragOver) _ = setIsDragOver $ const false
type FolderIconProps = (
folderOpen :: T.
Cursor
Boolean
folderOpen :: T.
Box
Boolean
, nodeType :: GT.NodeType
)
...
...
@@ -211,11 +203,11 @@ folderIconCpt = here.component "folderIcon" cpt
where
cpt { folderOpen, nodeType } _ = do
open <- T.read folderOpen
pure $ H.a { className: "folder-icon", on: { click: \_ -> T
2
.modify_ not folderOpen } }
pure $ H.a { className: "folder-icon", on: { click: \_ -> T.modify_ not folderOpen } }
[ H.i { className: GT.fldr nodeType open } [] ]
type ChevronIconProps = (
folderOpen :: T.
Cursor
Boolean
folderOpen :: T.
Box
Boolean
, handed :: GT.Handed
, isLeaf :: Boolean
, nodeType :: GT.NodeType
...
...
@@ -232,7 +224,7 @@ chevronIconCpt = here.component "chevronIcon" cpt
cpt { folderOpen, handed, isLeaf: false, nodeType } _ = do
open <- T.read folderOpen
pure $ H.a { className: "chevron-icon"
, on: { click: \_ -> T
2
.modify_ not folderOpen }
, on: { click: \_ -> T.modify_ not folderOpen }
}
[ H.i { className: if open
then "fa fa-chevron-down"
...
...
src/Gargantext/Components/Forest/Tree/Node/Action/Add.purs
View file @
5fe07605
...
...
@@ -20,9 +20,9 @@ import Gargantext.Types as GT
import Gargantext.Types (NodeType(..))
import Gargantext.Utils.Reactix as R2
here :: R2.Here
here = R2.here "Gargantext.Components.Forest.Tree.Node.Action.Add"
----------------------------------------------------------------------
addNode :: Session -> GT.ID -> AddNodeValue -> Aff (Array GT.ID)
addNode session parentId = post session $ GR.NodeAPI GT.Node (Just parentId) ""
...
...
@@ -33,8 +33,7 @@ addNodeAsync :: Session
addNodeAsync session parentId q = do
task <- post session p q
pure $ GT.AsyncTaskWithType {task, typ: GT.AddNode}
where
p = GR.NodeAPI GT.Node (Just parentId) (GT.asyncTaskTypePath GT.AddNode)
where p = GR.NodeAPI GT.Node (Just parentId) (GT.asyncTaskTypePath GT.AddNode)
----------------------------------------------------------------------
-- TODO AddNodeParams
...
...
src/Gargantext/Components/Forest/Tree/Node/Action/Contact.purs
View file @
5fe07605
...
...
@@ -2,9 +2,7 @@ module Gargantext.Components.Forest.Tree.Node.Action.Contact where
import Prelude
import Data.Maybe (Maybe(..))
import Data.Tuple.Nested ((/\))
import Effect.Aff (Aff, launchAff)
import Effect.Uncurried (mkEffectFn1)
import Formula as F
import Reactix as R
import Reactix.DOM.HTML as H
...
...
@@ -13,13 +11,11 @@ import Toestand as T
import Gargantext.Components.Forest.Tree.Node.Action (Action)
import Gargantext.Components.Forest.Tree.Node.Action.Contact.Types (AddContactParams(..))
-- import Gargantext.Components.Forest.Tree.Node.Tools.SubTree (subTreeView, SubTreeParamsIn)