diff --git a/src/Gargantext/Components/NgramsTable.purs b/src/Gargantext/Components/NgramsTable.purs index 80aa8d35f95871eec9ae10c148c3c498baece244..91de9269d9952bbb1b3e9783fd5307da3086fc2f 100644 --- a/src/Gargantext/Components/NgramsTable.purs +++ b/src/Gargantext/Components/NgramsTable.purs @@ -49,6 +49,7 @@ import Data.Map (Map) import Data.Map as Map import Data.Maybe (Maybe(..), maybe) import Data.Monoid.Additive (Additive(..)) +import Data.Ord.Down (Down(..)) import Data.Traversable (class Traversable, traverse, traverse_, sequence) import Data.TraversableWithIndex (class TraversableWithIndex, traverseWithIndex) import Data.Set (Set) @@ -57,7 +58,7 @@ import Data.String as S import Data.String.Regex as R import Data.String.Regex.Flags as R import Data.Symbol (SProxy(..)) -import Data.Tuple (Tuple(..)) +import Data.Tuple (Tuple(..), snd) import Effect (Effect) import Effect.Aff (Aff) import Foreign.Object as FO @@ -716,7 +717,16 @@ ngramsTableSpec = simpleSpec performAction render setParams params = loaderDispatch $ Loader.SetPath $ pageParams {params = params} ngramsTable = applyNgramsTablePatch ngramsTablePatch initTable - rows = convertRow <$> Map.toUnfoldable (Map.filter displayRow (ngramsTable ^. _NgramsTable)) + orderWith = + case convOrderBy <$> pageParams.params.orderBy of + Just ScoreAsc -> A.sortWith \x -> (snd x) ^. _NgramsElement <<< _occurrences + Just ScoreDesc -> A.sortWith \x -> Down $ (snd x) ^. _NgramsElement <<< _occurrences + _ -> identity -- the server ordering is enough here + + rows = convertRow <$> orderWith (addOcc <$> Map.toUnfoldable (Map.filter displayRow (ngramsTable ^. _NgramsTable))) + addOcc (Tuple ne ngramsElement) = + let Additive occurrences = sumOccurrences ngramsTable ngramsElement in + Tuple ne (ngramsElement # _NgramsElement <<< _occurrences .~ occurrences) ngramsParentRoot :: Maybe String ngramsParentRoot = @@ -734,11 +744,15 @@ ngramsTableSpec = simpleSpec performAction render || -- Unless they are scheduled to be removed. ngramsChildren ^. at ngrams == Just false convertRow (Tuple ngrams ngramsElement) = - { row: - renderNgramsItem { ngramsTable, ngrams, ngramsParent, ngramsElement, dispatch } + { row: renderNgramsItem { ngramsTable, ngrams, ngramsParent, ngramsElement, dispatch} , delete: false } +convOrderBy (T.ASC (T.ColumnName "Score (Occurrences)")) = ScoreAsc +convOrderBy (T.DESC (T.ColumnName "Score (Occurrences)")) = ScoreDesc +convOrderBy (T.ASC _) = TermAsc +convOrderBy (T.DESC _) = TermDesc + loadNgramsTable :: PageParams -> Aff VersionedNgramsTable loadNgramsTable { nodeId, listIds, termListFilter, termSizeFilter , searchQuery, tabType, params: {offset, limit, orderBy}} = @@ -749,11 +763,6 @@ loadNgramsTable { nodeId, listIds, termListFilter, termSizeFilter , searchQuery }) (Just nodeId) - where - convOrderBy (T.ASC (T.ColumnName "Score (Occurrences)")) = ScoreAsc - convOrderBy (T.DESC (T.ColumnName "Score (Occurrences)")) = ScoreDesc - convOrderBy (T.ASC _) = TermAsc - convOrderBy (T.DESC _) = TermDesc ngramsLoaderClass :: Loader.LoaderClass PageParams VersionedNgramsTable ngramsLoaderClass = Loader.createLoaderClass "NgramsTableLoader" loadNgramsTable @@ -842,10 +851,9 @@ renderNgramsItem { ngramsTable, ngrams, ngramsElement, ngramsParent, dispatch } [ i [className "fas fa-plus"] [] , span ngramsStyle [text $ " " <> ngrams] ] - , text $ show occurrences + , text $ show (ngramsElement ^. _NgramsElement <<< _occurrences) ] where - Additive occurrences = sumOccurrences ngramsTable ngramsElement termList = ngramsElement ^. _NgramsElement <<< _list ngramsStyle = [termStyle termList] ngramsClick = Just <<< dispatch <<< SetParentResetChildren <<< Just <<< view _ngrams