diff --git a/src/Gargantext/Components/Forest/Tree/Node/Action/Search/SearchField.purs b/src/Gargantext/Components/Forest/Tree/Node/Action/Search/SearchField.purs index 3def52e2ed6831a20f66e7f2bc4038abaa1281b0..04af9dada1224beb68256ec2d07eef5af77a3ccb 100644 --- a/src/Gargantext/Components/Forest/Tree/Node/Action/Search/SearchField.purs +++ b/src/Gargantext/Components/Forest/Tree/Node/Action/Search/SearchField.purs @@ -40,6 +40,7 @@ defaultSearch = { databases: Empty , lang : Nothing , term : "" , url : "" + , year : "" } type Props = @@ -77,6 +78,18 @@ searchFieldCpt = here.component "searchField" cpt type ComponentProps = ( search :: T.Box Search ) +componentYear :: R2.Component ComponentProps +componentYear = R.createElement componentYearCpt +componentYearCpt :: R.Component ComponentProps +componentYearCpt = here.component "componentYear" cpt where + cpt { search } _ = do + pure $ H.div {} + [ H.input { on: { blur: modify + , change: modify + , input: modify } } ] + where + modify e = T.modify_ (_ { year = R.unsafeEventValue e }) search + type ComponentIMTProps = ( session :: Session | ComponentProps ) @@ -404,6 +417,10 @@ datafieldInputCpt = here.component "datafieldInput" cpt where , if isIMT search'.datafield then componentIMT { search, session } [] else H.div {} [] + + , if isHAL search'.datafield + then componentYear { search } [] + else H.div {} [] , if isCNRS search'.datafield then componentCNRS { search } [] @@ -510,17 +527,18 @@ triggerSearch { onSearch, errors, session, selection, search } = launchAff_ $ do liftEffect $ do let here' = "[triggerSearch] Searching " - log2 (here' <> "databases: ") (show search.databases) - log2 (here' <> "datafield: ") (show search.datafield) - log2 (here' <> "term: ") search.term - log2 (here' <> "lang: ") (show search.lang) + here.log2 (here' <> "databases: ") (show search.databases) + here.log2 (here' <> "datafield: ") (show search.datafield) + here.log2 (here' <> "term: ") search.term + here.log2 (here' <> "lang: ") (show search.lang) case search.node_id of - Nothing -> liftEffect $ log "[triggerSearch] node_id is Nothing, don't know what to do" + Nothing -> liftEffect $ here.log "[triggerSearch] node_id is Nothing, don't know what to do" Just id -> do + liftEffect $ here.log2 "[triggerSearch] search" search eTask <- performSearch session id $ searchQuery selection search handleRESTError errors eTask $ \task -> liftEffect $ do - log2 "[triggerSearch] task" task + here.log2 "[triggerSearch] task" task onSearch task --liftEffect $ do @@ -531,22 +549,53 @@ searchQuery :: ListSelection.Selection -> Search -> SearchQuery searchQuery selection { datafield: Nothing, term } = over SearchQuery (_ { query = term , selection = selection }) defaultSearchQuery -searchQuery selection { databases, datafield: datafield@(Just (External (Just (HAL (Just (IMT imtOrgs)))))), lang, term, node_id } = +-- TODO Simplify both HAL Nothing and HAL (Just IMT) cases +searchQuery selection { databases + , datafield: datafield@(Just (External (Just (HAL Nothing)))) + , lang + , term + , node_id + , year } = + over SearchQuery (_ { databases = databases + , datafield = datafield + , lang = lang + , node_id = node_id + , query = query + , selection = selection + }) defaultSearchQuery + where + query = "(en_title_t:\"" <> termEscaped <> "\" OR en_abstract_t:\"" <> termEscaped <> "\")" <> yearQuery + -- TODO: Escape double quotes + termEscaped = term + yearQuery = if year == "" then + "" + else + " AND producedDateY_i:" <> year +searchQuery selection { databases + , datafield: datafield@(Just (External (Just (HAL (Just (IMT imtOrgs)))))) + , lang + , term + , node_id + , year } = over SearchQuery (_ { databases = databases , datafield = datafield , lang = lang , node_id = node_id - , query = term' + , query = query , selection = selection }) defaultSearchQuery where - term' = "(en_title_t:\"" <> termEscaped <> "\" OR en_abstract_t:\"" <> termEscaped <> "\")" <> structQuery + query = "(en_title_t:\"" <> termEscaped <> "\" OR en_abstract_t:\"" <> termEscaped <> "\")" <> structQuery <> yearQuery -- TODO: Escape double quotes termEscaped = term structQuery = if Set.isEmpty imtOrgs then "" else " AND (" <> structIds <> ")" + yearQuery = if year == "" then + "" + else + " AND producedDateY_i:" <> year joinFunc :: IMT_org -> String joinFunc All_IMT = "" joinFunc (IMT_org { school_id }) = "structId_i:" <> school_id diff --git a/src/Gargantext/Components/Forest/Tree/Node/Action/Search/Types.purs b/src/Gargantext/Components/Forest/Tree/Node/Action/Search/Types.purs index 0364e1690c31d8b1b869b5e35e8d9161a3b1a53b..d5fa446f3b0ec8409bafead68a86dcd45a1eb40d 100644 --- a/src/Gargantext/Components/Forest/Tree/Node/Action/Search/Types.purs +++ b/src/Gargantext/Components/Forest/Tree/Node/Action/Search/Types.purs @@ -29,6 +29,7 @@ type Search = { databases :: Database , lang :: Maybe Lang , node_id :: Maybe Int , term :: String + , year :: String -- TODO Array Int } isIsTex_Advanced :: Maybe DataField -> Boolean