From 3d0e9da3dbf7ad4f7d95ff282cbd7d1004292214 Mon Sep 17 00:00:00 2001
From: Luis Felipe Risch <lfr20@inf.ufpr.br>
Date: Wed, 9 Dec 2020 12:03:14 -0300
Subject: [PATCH] Trying to fix filters from the search page

---
 .../SearchEPCompCurriculum.js                 |  11 +-
 .../SearchExpansionPanel/SearchEPIdiomas.js   |  11 +-
 .../SearchExpansionPanel/SearchEPTiposRec.js  |  11 +-
 .../SearchExpansionPanel.js                   |  15 ++-
 .../SearchExpansionPanel/SesrchEPEtapasEns.js |  11 +-
 src/Pages/Search.js                           | 106 ++++++++++--------
 6 files changed, 108 insertions(+), 57 deletions(-)

diff --git a/src/Components/SearchExpansionPanel/SearchEPCompCurriculum.js b/src/Components/SearchExpansionPanel/SearchEPCompCurriculum.js
index d55d6e63..fef89eec 100644
--- a/src/Components/SearchExpansionPanel/SearchEPCompCurriculum.js
+++ b/src/Components/SearchExpansionPanel/SearchEPCompCurriculum.js
@@ -17,7 +17,7 @@ const useStyles = makeStyles(theme => ({
   }
 }));
 
-export default function SearchEPCompCurriculum() {
+export default function SearchEPCompCurriculum(props) {
   const classes = useStyles();
   const [checked, setChecked] = React.useState([0]);
 
@@ -31,7 +31,16 @@ export default function SearchEPCompCurriculum() {
       newChecked.splice(currentIndex, 1);
     }
 
+    let filterString = ""; 
+
     setChecked(newChecked);
+    for(let i = 0; i < newChecked.length; i++){
+      if(newChecked[i] != 0){
+        filterString = filterString + `&subjects[]=${newChecked[i]}` 
+        console.log(filterString)
+      }
+    }
+    props.onChange("LearningObject", filterString)
   };
   const filtrosComponente = [
     { exemplo: "Arte", value: "3" },
diff --git a/src/Components/SearchExpansionPanel/SearchEPIdiomas.js b/src/Components/SearchExpansionPanel/SearchEPIdiomas.js
index a9426aec..73d04d57 100644
--- a/src/Components/SearchExpansionPanel/SearchEPIdiomas.js
+++ b/src/Components/SearchExpansionPanel/SearchEPIdiomas.js
@@ -17,7 +17,7 @@ const useStyles = makeStyles(theme => ({
   }
 }));
 
-export default function SearchEPIdiomas() {
+export default function SearchEPIdiomas(props) {
   const classes = useStyles();
   const [checked, setChecked] = React.useState([0]);
 
@@ -32,6 +32,15 @@ export default function SearchEPIdiomas() {
     }
 
     setChecked(newChecked);
+    let filterString = "";
+    
+    for(let i = 0; i < newChecked.length; i++){
+      if(newChecked[i] != 0){
+        filterString = filterString + `&languages[]=${newChecked[i]}` 
+        console.log(filterString)
+      }
+    }
+    props.onChange("LearningObject", filterString)
   };
   const filtrosIdiomas = [
     { value: "5", exemplo: "Alemão" },
diff --git a/src/Components/SearchExpansionPanel/SearchEPTiposRec.js b/src/Components/SearchExpansionPanel/SearchEPTiposRec.js
index 0d36afff..e1a3f999 100644
--- a/src/Components/SearchExpansionPanel/SearchEPTiposRec.js
+++ b/src/Components/SearchExpansionPanel/SearchEPTiposRec.js
@@ -17,7 +17,7 @@ const useStyles = makeStyles(theme => ({
   }
 }));
 
-export default function SearchEPTiposRec() {
+export default function SearchEPTiposRec(props) {
   const classes = useStyles();
   const [checked, setChecked] = React.useState([0]);
 
@@ -31,7 +31,16 @@ export default function SearchEPTiposRec() {
       newChecked.splice(currentIndex, 1);
     }
 
+    let filterString = ""; 
+
     setChecked(newChecked);
+    for(let i = 0; i < newChecked.length; i++){
+      if(newChecked[i] != 0){
+        filterString = filterString + `&object_types[]=${newChecked[i]}` 
+        console.log(filterString)
+      }
+    }
+    props.onChange("LearningObject", filterString)
   };
   const filtrosTipos = [
     { value: "5", exemplo: "Animação" },
diff --git a/src/Components/SearchExpansionPanel/SearchExpansionPanel.js b/src/Components/SearchExpansionPanel/SearchExpansionPanel.js
index 32c9b72e..88288505 100644
--- a/src/Components/SearchExpansionPanel/SearchExpansionPanel.js
+++ b/src/Components/SearchExpansionPanel/SearchExpansionPanel.js
@@ -62,7 +62,7 @@ const ExpansionPanelDetails = withStyles(theme => ({
   }
 }))(MuiExpansionPanelDetails);
 
-export default function SearchExpansionPanel() {
+export default function SearchExpansionPanel(props) {
   return (
     <div>
       <link
@@ -86,6 +86,7 @@ export default function SearchExpansionPanel() {
           </Typography>
         </ExpansionPanelSummary>
       </ExpansionPanel>
+
       <ExpansionPanel square>
         <ExpansionPanelSummary
           expandIcon ={<ExpandMoreIcon/>}
@@ -97,10 +98,11 @@ export default function SearchExpansionPanel() {
         </ExpansionPanelSummary>
         <ExpansionPanelDetails>
           <Typography>
-            <SearchEPCompCurriculum />
+            <SearchEPCompCurriculum onChange={props.onChange}/>
           </Typography>
         </ExpansionPanelDetails>
       </ExpansionPanel>
+
       <ExpansionPanel square>
         <ExpansionPanelSummary
           expandIcon={<ExpandMoreIcon />}
@@ -110,9 +112,10 @@ export default function SearchExpansionPanel() {
           <Typography>Tipos de Recurso</Typography>
         </ExpansionPanelSummary>
         <ExpansionPanelDetails>
-          <SearchEPTiposRec />
+          <SearchEPTiposRec onChange={props.onChange}/>
         </ExpansionPanelDetails>
       </ExpansionPanel>
+
       <ExpansionPanel square>
         <ExpansionPanelSummary
           aria-controls="panel4d-content"
@@ -122,9 +125,10 @@ export default function SearchExpansionPanel() {
           <Typography>Etapas de Ensino</Typography>
         </ExpansionPanelSummary>
         <ExpansionPanelDetails>
-          <SearchEPEtapasEns />
+          <SearchEPEtapasEns onChange={props.onChange}/>
         </ExpansionPanelDetails>
       </ExpansionPanel>
+
       <ExpansionPanel square>
         <ExpansionPanelSummary
           aria-controls="panel5d-content"
@@ -134,9 +138,10 @@ export default function SearchExpansionPanel() {
           <Typography>Idiomas</Typography>
         </ExpansionPanelSummary>
         <ExpansionPanelDetails>
-          <SearchEPIdiomas />
+          <SearchEPIdiomas onChange={props.onChange}/>
         </ExpansionPanelDetails>
       </ExpansionPanel>
+
       <ExpansionPanel square>
         <ExpansionPanelSummary
           aria-controls="panel6d-content"
diff --git a/src/Components/SearchExpansionPanel/SesrchEPEtapasEns.js b/src/Components/SearchExpansionPanel/SesrchEPEtapasEns.js
index b0241d32..022398b7 100644
--- a/src/Components/SearchExpansionPanel/SesrchEPEtapasEns.js
+++ b/src/Components/SearchExpansionPanel/SesrchEPEtapasEns.js
@@ -17,7 +17,7 @@ const useStyles = makeStyles(theme => ({
   }
 }));
 
-export default function SearchEPEtapasEns() {
+export default function SearchEPEtapasEns(props) {
   const classes = useStyles();
   const [checked, setChecked] = React.useState([0]);
 
@@ -32,6 +32,15 @@ export default function SearchEPEtapasEns() {
     }
 
     setChecked(newChecked);
+    let filterString = "";
+
+    for(let i = 0; i < newChecked.length; i++){
+      if(newChecked[i] != 0){
+        filterString = filterString + `&educational_stages[]=${newChecked[i]}` 
+        console.log(filterString)
+      }
+    }
+    props.onChange("LearningObject", filterString)
   };
   const filtrosEtapas = [
     { value: "1", exemplo: "Educação Infantil" },
diff --git a/src/Pages/Search.js b/src/Pages/Search.js
index bdf155c2..2902b2b5 100644
--- a/src/Pages/Search.js
+++ b/src/Pages/Search.js
@@ -18,11 +18,11 @@ along with Plataforma Integrada MEC.  If not, see <http://www.gnu.org/licenses/>
 
 import React, { useEffect, useState, useContext } from "react";
 import axios from "axios";
-import {apiDomain} from '../env';
+import { apiDomain } from '../env';
 import { Link } from "react-router-dom";
 import styled from "styled-components";
 import Paper from "@material-ui/core/Paper";
-
+import LoadingSpinner from '../Components/LoadingSpinner'; 
 // import ResourceCard from '../Components/ResourceCard'
 // import CollectionCard from '../Components/CollectionCard'
 // import UserCard from '../Components/UserCard'
@@ -39,26 +39,30 @@ import ResourceCardFunction from "../Components/ResourceCardFunction";
 import CollectionCardFunction from "../Components/CollectionCardFunction";
 import ContactCard from "../Components/ContactCard";
 
+let order = "review_average"; 
+let currFilter = "";
+
 export default function Search(props) {
   const { state, dispatch } = useContext(Store);
   const [resultsResource, setResultsResource] = useState([]);
   const [resultsCollection, setResultsCollection] = useState([]);
   const [resultsUser, setResultsUser] = useState([]);
   const [page] = useState(0);
+  const [isloading, setIsLoading] = useState(false); 
   const [resultsPerPage, setResultsPerPage] = useState(6);
-  const [order] = useState("score");
+  const [totalResults, setTotalResults] = useState(0);
   const [options] = React.useState([
     { label: "Recursos", value: "LearningObject" },
     { label: "Coleções", value: "Collection" },
     { label: "Usuários", value: "User" },
   ]);
   const [ordenar] = useState([
-    { label: "Mais Estrelas" },
-    { label: "Mais Relevante" },
-    { label: "Mais Baixados" },
-    { label: "Mais Favoritados" },
-    { label: "Mais Recentes" },
-    { label: "Ordem Alfabética" },
+    { label: "Mais Estrelas",     value: "review_average" },
+    { label: "Mais Relevante",    value: "score" },
+    { label: "Mais Baixados",     value: "downloads" },
+    { label: "Mais Favoritados",  value: "likes" },
+    { label: "Mais Recentes",     value: "publicationdesc"  },
+    { label: "Ordem Alfabética",  value: "title" },
   ]);
 
   const [option, setOption] = useState(
@@ -68,20 +72,21 @@ export default function Search(props) {
   console.log(option);
   console.log(state.search.class);
 
-  const collectStuff = (tipoBusca) => {
-    console.log(tipoBusca);
-
+  const collectStuff = (tipoBusca, filtro) => {
+    setIsLoading(true);
+    if(filtro || filtro == "") 
+      currFilter = filtro;
     axios
       .get(
-        `${apiUrl}/search?page=${page}&results_per_page=${resultsPerPage}&order=${order}&query=${state.search.query}&search_class=${tipoBusca}`
+        `${apiUrl}/search?page=${page}&results_per_page=${resultsPerPage}&order=${order}&query=${state.search.query}${currFilter ? currFilter : ""}&search_class=${tipoBusca}`
       )
       .then((res) => {
         if (tipoBusca === "LearningObject") setResultsResource(res.data);
         else if (tipoBusca === "Collection") setResultsCollection(res.data);
         else if (tipoBusca === "User") setResultsUser(res.data);
         setOptionResult(tipoBusca);
-        console.log(res.data);
-        console.log(tipoBusca);
+        setTotalResults(res.headers["x-total-count"]);
+        setIsLoading(false);
       });
   };
 
@@ -169,21 +174,14 @@ export default function Search(props) {
                 <span style={{ alignSelf: "center", marginRight: 10 }}>
                   MOSTRAR:
                 </span>
-                <Select
-                  style={{ backgroundColor: "transparent", border: "none" }}
-                  value={option}
+                <Dropdown
+                  options={options}
                   onChange={(e) => {
-                    console.log(e.currentTarget.value);
-                    setOption(e.currentTarget.value);
-                    collectStuff(e.currentTarget.value);
+                    setOption(e.value);
+                    collectStuff(e.value, "");
                   }}
-                >
-                  {options.map((item) => (
-                    <option key={item.value} value={item.value}>
-                      {item.label}
-                    </option>
-                  ))}
-                </Select>
+                  placeholder="Select an type"
+                />
               </div>
             </Grid>
             <Grid
@@ -195,7 +193,9 @@ export default function Search(props) {
                 justifyContent: "center",
               }}
             >
-              <div>Número</div>
+              <div>
+                Resultados encontrados: {totalResults}
+              </div>
             </Grid>
             <Grid
               item
@@ -225,8 +225,9 @@ export default function Search(props) {
                 </span>
                 <Dropdown
                   options={ordenar}
-                  onChange={() => {
-                    collectStuff(ordenar.label);
+                  onChange={(e) => {
+                    order = e.value;
+                    collectStuff(optionResult, currFilter);
                   }}
                   placeholder="Select an order "
                 />
@@ -244,6 +245,7 @@ export default function Search(props) {
                     <CollectionCardFunction
                       name={card.name}
                       rating={card.score}
+                      id={card.id}
                       author={card.owner.name}
                       description={card.description}
                       thumbnails={card.items_thumbnails}
@@ -278,11 +280,12 @@ export default function Search(props) {
             </Grid>
           </GridBuscaCollection>
         )}
+
         {optionResult === "LearningObject" && (
           <GridBuscaResource container spacing={2}>
             <Grid item md={3} xs={12}>
               <Paper elevation={4} square>
-                <SearchExpansionPanel />
+                <SearchExpansionPanel onChange={collectStuff}/>
               </Paper>
             </Grid>
             <Grid item md={9} xs={12}>
@@ -290,13 +293,19 @@ export default function Search(props) {
                 {resultsResource.map((card) => (
                   <Grid item md={4} xs={6} key={card.id}>
                     <ResourceCardFunction
-                      name={card.name}
-                      rating={card.score}
-                      type={card.object_type}
-                      description={card.description}
+                      avatar={card.publisher.avatar}
+                      id={card.id}
                       thumbnail={card.thumbnail}
+                      type={card.object_type ? card.object_type : "Outros"}
+                      title={card.name}
+                      published={card.state === "published" ? true : false}
+                      likeCount={card.likes_count}
+                      liked={card.liked}
+                      rating={card.review_average}
                       author={card.author}
-                      avatar={card.publisher.avatar}
+                      tags={card.educational_stages}
+                      href={"/recurso/" + card.id}
+                      downloadableLink={card.default_attachment_location}
                     />
                   </Grid>
                 ))}
@@ -327,6 +336,7 @@ export default function Search(props) {
             </Grid>
           </GridBuscaResource>
         )}
+
         {optionResult === "User" && (
           <GridBuscaUser container spacing={2}>
             <Grid item md={12} xs={12}>
@@ -334,16 +344,16 @@ export default function Search(props) {
                 {resultsUser.map((card) => (
                   <Grid item md={4} xs={6} key={card.id}>
                     <ContactCard
-                    name = {card.name}
-                    avatar = {card.avatar ? apiDomain + card.avatar : null}
-                    cover={card.cover ? apiDomain + card.cover : null}
-                    numCollections = {card.collections_count}
-                    numLearningObjects = {card.learning_objects_count}
-                    follow_count={card.follows_count}
-                    followed = {card.followed || null}
-                    followerID = {card.id}
-                    href={'/usuario-publico/' + card.id}
-                />
+                      name={card.name}
+                      avatar={card.avatar ? apiDomain + card.avatar : null}
+                      cover={card.cover ? apiDomain + card.cover : null}
+                      numCollections={card.collections_count}
+                      numLearningObjects={card.learning_objects_count}
+                      follow_count={card.follows_count}
+                      followed={card.followed || null}
+                      followerID={card.id}
+                      href={'/usuario-publico/' + card.id}
+                    />
                   </Grid>
                 ))}
               </Grid>
@@ -391,7 +401,7 @@ const GridBuscaCollection = styled(Grid)`
 `;
 const GridBuscaResource = styled(Grid)`
   color: #666;
-  background-color: red;
+  background-color: red; 
 
   h4 {
     padding: 0 15px;
-- 
GitLab