Commit 9d0741ad authored by Przemyslaw Kaminski's avatar Przemyslaw Kaminski

TEMP: Search drag drop file -- some scratches

parent 8ea81135
......@@ -18,5 +18,14 @@ search :: forall a. DecodeJson a => SearchQuery -> Aff a
search q = do
let url = searchUrl q
liftEffect $ log2 "url:" url
post (searchUrl q) q
post url q
uploadUrl :: String
uploadUrl = urlPlease Back $ "upload"
upload :: forall a. DecodeJson a => SearchQuery -> Aff a
upload q = do
let url = uploadUrl
liftEffect $ log2 "upload url: " url
post url q
module Gargantext.Components.Search.SearchField
( Search, Props, searchField, searchFieldComponent )where
( File, Query(..), Search, Props, searchField, searchFieldComponent )where
import Prelude hiding (div)
import Data.Map as Map
......@@ -13,20 +13,26 @@ import DOM.Simple.Console
import DOM.Simple.Element as Element
import DOM.Simple.Event as DE
import Effect ( Effect )
import Effect.Class (liftEffect)
import Effect.Uncurried (mkEffectFn1)
import FFI.Simple ((..), (.=))
import Reactix as R
import Reactix.DOM.HTML as HTML
import Reactix.DOM.HTML (text, button, div, input, option, form, span, ul, li, a)
import Reactix.DOM.HTML (text, button, div, input, option, form, span, ul, li, a, i)
import Reactix.SyntheticEvent as E
import Gargantext.Components.Search.Types
type File = { name :: String, contents :: String }
data Query = Term String
| QueryFile File
derive instance eqQuery :: Eq Query
select = R.createElement "select"
type Search = { database :: Maybe Database, term :: String }
type Search = { database :: Maybe Database, query :: Query }
defaultSearch :: Search
defaultSearch = { database: Nothing, term: "" }
defaultSearch = { database: Nothing, query: Term "" }
type Props =
-- list of databases to search, or parsers to use on uploads
......@@ -46,14 +52,14 @@ searchFieldComponent = R.memo (R.hooksComponent "SearchField" cpt) hasChanged
where
cpt props _ = do
let search = maybe defaultSearch identity (fst props.search)
term <- R.useState $ \_ -> pure search.term
query <- R.useState $ \_ -> pure search.query
db <- R.useState $ \_ -> pure Nothing
pure $
div { className: "search-field input-group" }
[ databaseInput db props.databases
, searchInput term
, searchDrop query
, span { className: "input-group-btn" }
[ submitButton db term props.search ]
[ submitButton db query props.search ]
]
hasChanged p p' = (fst p.search /= fst p'.search) || (p.databases /= p'.databases)
......@@ -75,22 +81,50 @@ databaseInput (db /\ setDB) dbs =
dropdownBtn (Just db) = button dropdownBtnProps [ span {} [ text (show db) ] ]
dropdownBtn (Nothing) = button dropdownBtnProps [ span {} [ text "-" ] ]
searchInput :: R.State String -> R.Element
searchInput (term /\ setTerm) =
searchDrop :: R.State Query -> R.Element
searchDrop ((Term term) /\ setQuery) =
input { defaultValue: term
, className: "form-control"
, type: "text"
, onChange
, onDrop
, placeholder }
where onChange = mkEffectFn1 $ \e -> setTerm $ e .. "target" .. "value"
where
onChange = mkEffectFn1 $ \e -> setQuery $ Term $ e .. "target" .. "value"
onDrop = mkEffectFn1 $ \(e :: E.SyntheticEvent DE.MouseEvent) -> do
liftEffect $ log2 "drop:" (f e)
E.preventDefault e
E.stopPropagation e -- to keep Firefox happy, otherwise it redirects
setQuery $ QueryFile $ file e
where
f e = (e .. "dataTransfer" .. "files" .. "0")
file e = {name: (f e) .. "name", contents: ""}
searchDrop ((QueryFile file) /\ setQuery) =
span { className: "input-group" } [
span {className: "label label-default"} [
text $ file.name
, i { className: "remove glyphicon glyphicon-remove-sign glyphicon-white"} []
]
]
submitButton :: R.State (Maybe Database) -> R.State String -> R.State (Maybe Search) -> R.Element
submitButton (database /\ _) (term /\ _) (_ /\ setSearch) =
button { className: "btn btn-default", type: "button", onClick: click } [ text "Search" ]
submitButton :: R.State (Maybe Database) -> R.State Query -> R.State (Maybe Search) -> R.Element
submitButton (database /\ _) ((Term query) /\ _) (_ /\ setSearch) =
button { className: "btn btn-default"
, type: "button"
, onClick: click } [ text "Search" ]
where
click = mkEffectFn1 $ \_ -> do
setSearch $ case query of
"" -> Nothing
_ -> Just { database, Term query }
submitButton (database /\ _) ((QueryFile file) /\ _) (_ /\ setSearch) =
button { className: "btn btn-default"
, type: "button"
, onClick: click } [ text "Upload" ]
where
click = mkEffectFn1 $ \_ -> do
case term of
"" -> setSearch Nothing
_ -> setSearch $ Just { database, term }
setSearch $ case query of
"" -> Nothing
_ -> Just { database, Term query }
......@@ -61,7 +61,8 @@ newtype SearchQuery = SearchQuery
, corpus_id :: Maybe Int
, offset :: Maybe Int
, limit :: Maybe Int
, order :: Maybe SearchOrder }
, order :: Maybe SearchOrder
, files_id :: Array String }
derive instance newtypeSearchQuery :: Newtype SearchQuery _
......@@ -72,7 +73,8 @@ defaultSearchQuery = SearchQuery
, corpus_id: Nothing
, offset: Nothing
, limit: Nothing
, order: Nothing }
, order: Nothing
, files_id: [] }
instance searchQueryToQuery :: ToQuery SearchQuery where
toQuery (SearchQuery {offset, limit, order}) =
......
......@@ -31,7 +31,8 @@ endConfig = endConfig' V10
endConfig' :: ApiVersion -> EndConfig
endConfig' v = { front : frontRelative
, back : backLocal v }
, back : backDev v}
-- , back : backLocal v }
-- , back : backDemo v }
------------------------------------------------------------------------
......
......@@ -14,19 +14,19 @@ import Effect.Uncurried (EffectFn1, mkEffectFn1)
import Thermite (Spec, defaultPerformAction, simpleSpec)
import Reactix as R
import DOM.Simple.Console
import FFI.Simple ((..), (.=))
import Effect.Aff (launchAff)
import Gargantext.Utils.Reactix as R'
import Reactix.DOM.HTML as H
import Gargantext.Components.Search.Types
import Gargantext.Components.Search.Ajax as Ajax
import Gargantext.Components.Modals.Modal (modalShow)
import Gargantext.Components.Search.SearchField (Search, searchField)
import Gargantext.Utils (id)
import Gargantext.Components.Search.SearchField (Query(..), Search, searchField)
type Props = ( open :: Boolean, databases :: Array Database )
type Props = ( open :: Boolean, databases :: Array Database, query :: Maybe Query )
defaultProps :: Record Props
defaultProps = { open: false, databases: allDatabases }
defaultProps = { open: false, databases: allDatabases, query: Nothing }
searchBar :: Record Props -> R.Element
searchBar p = R.createElement searchBarComponent p []
......@@ -44,7 +44,7 @@ searchBarComponent = R.hooksComponent "SearchBar" cpt
searchFieldContainer :: R.State Boolean -> Array Database -> R.State (Maybe Search) -> R.Element
searchFieldContainer (open /\ _) databases search =
H.div { className: "search-bar " <> openClass } [ searchField { databases, search } ]
H.div {className: "search-bar " <> openClass} [ searchField { databases, search } ]
where
openClass = if open then "open" else "closed"
......@@ -54,11 +54,13 @@ onSearchChange (search /\ setSearch) =
where
triggerSearch q = do
launchAff $ do
liftEffect $ log2 "Searching term: " q.term
liftEffect $ log2 "Searching query: " q.query
(r :: Unit) <- Ajax.search (searchQuery q)
liftEffect $ log2 "Return:" r
liftEffect $ modalShow "addCorpus"
searchQuery {term} = over SearchQuery (_ {query=term}) defaultSearchQuery
searchQuery {query} = case query of
(Term term) -> over SearchQuery (_ {query=term}) defaultSearchQuery
(QueryFile file) -> over SearchQuery (_ {query=file.contents}) defaultSearchQuery
toggleButton :: R.State Boolean -> R.Element
toggleButton open =
......
......@@ -721,6 +721,32 @@
"@types/istanbul-lib-coverage" "^2.0.0"
"@types/yargs" "^12.0.9"
"@purescript/console@^3.0.0":
version "3.0.0"
resolved "https://registry.yarnpkg.com/@purescript/console/-/console-3.0.0.tgz#ef8a728d9fb44d47dae1567bb852ac43c56c26bc"
integrity sha1-74pyjZ+0TUfa4VZ7uFKsQ8VsJrw=
dependencies:
"@purescript/eff" "^3.0.0"
"@purescript/eff@^3.0.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@purescript/eff/-/eff-3.1.0.tgz#c1cffcead819d2be44aba6833402164f4bbef214"
integrity sha1-wc/86tgZ0r5Eq6aDNAIWT0u+8hQ=
dependencies:
"@purescript/prelude" "^3.0.0"
"@purescript/prelude@^3.0.0":
version "3.0.0"
resolved "https://registry.yarnpkg.com/@purescript/prelude/-/prelude-3.0.0.tgz#f64a632b6b3afc704d0223210d4613b5a9a3d6d7"
integrity sha1-9kpjK2s6/HBNAiMhDUYTtamj1tc=
"@purescript/psci-support@^3.0.0":
version "3.0.0"
resolved "https://registry.yarnpkg.com/@purescript/psci-support/-/psci-support-3.0.0.tgz#ab706bbbb86ee25769557022687f655c569e4762"
integrity sha1-q3Bru7hu4ldpVXAiaH9lXFaeR2I=
dependencies:
"@purescript/console" "^3.0.0"
"@sheerun/mutationobserver-shim@^0.3.2":
version "0.3.2"
resolved "https://registry.yarnpkg.com/@sheerun/mutationobserver-shim/-/mutationobserver-shim-0.3.2.tgz#8013f2af54a2b7d735f71560ff360d3a8176a87b"
......@@ -1999,6 +2025,13 @@ gauge@~2.7.3:
strip-ansi "^3.0.1"
wide-align "^1.1.0"
gaze@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz#c441733e13b927ac8c0ff0b4c3b033f28812924a"
integrity sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==
dependencies:
globule "^1.0.0"
get-assigned-identifiers@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz#6dbf411de648cbaf8d9169ebb0d2d576191e2ff1"
......@@ -2036,11 +2069,32 @@ glob@^7.0.0, glob@^7.1.0, glob@^7.1.3:
once "^1.3.0"
path-is-absolute "^1.0.0"
glob@~7.1.1:
version "7.1.4"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255"
integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==
dependencies:
fs.realpath "^1.0.0"
inflight "^1.0.4"
inherits "2"
minimatch "^3.0.4"
once "^1.3.0"
path-is-absolute "^1.0.0"
globals@^11.1.0:
version "11.11.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-11.11.0.tgz#dcf93757fa2de5486fbeed7118538adf789e9c2e"
integrity sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==
globule@^1.0.0:
version "1.2.1"
resolved "https://registry.yarnpkg.com/globule/-/globule-1.2.1.tgz#5dffb1b191f22d20797a9369b49eab4e9839696d"
integrity sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==
dependencies:
glob "~7.1.1"
lodash "~4.17.10"
minimatch "~3.0.2"
graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.3:
version "4.1.15"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00"
......@@ -2515,6 +2569,11 @@ jsonparse@^1.2.0:
resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280"
integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=
keypress@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/keypress/-/keypress-0.2.1.tgz#1e80454250018dbad4c3fe94497d6e67b6269c77"
integrity sha1-HoBFQlABjbrUw/6USX1uZ7YmnHc=
kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
version "3.2.2"
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
......@@ -2579,7 +2638,7 @@ lodash.memoize@~3.0.3:
resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-3.0.4.tgz#2dcbd2c287cbc0a55cc42328bd0c736150d53e3f"
integrity sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=
lodash@^4.17.11:
lodash@^4.17.11, lodash@~4.17.10:
version "4.17.11"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d"
integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==
......@@ -2675,7 +2734,7 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1:
resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=
minimatch@^3.0.4:
minimatch@^3.0.4, minimatch@~3.0.2:
version "3.0.4"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
......@@ -3230,6 +3289,16 @@ psc-package@^3.0.1:
shelljs "^0.8.2"
tar "^4.4.8"
pscid@^2.7.0:
version "2.7.0"
resolved "https://registry.yarnpkg.com/pscid/-/pscid-2.7.0.tgz#0cb11a4f68bda436203e14ada55b87640d7e55a6"
integrity sha512-1bq5xGTGLvHAJlgElRtic6wqKDWsMYjLeTtaimrKIOFGWdTWxdNcfU+dOLs0nr04Zstx9GelXZUYyxUIKtnZ1A==
dependencies:
gaze "^1.1.3"
glob "^7.1.3"
keypress "^0.2.1"
which "^1.3.1"
public-encrypt@^4.0.0:
version "4.0.3"
resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment