From e27f25650c3ee6daa49a02909fa93f64b8a008de Mon Sep 17 00:00:00 2001
From: Rafael S Castliho <rsc15@inf.ufpr.br>
Date: Mon, 7 Jan 2019 11:32:30 -0200
Subject: [PATCH 01/23] comecando ind 2

---
 src/MainPage.js                      |  18 +-
 src/Quilombola.js                    |   6 +-
 src/SubPages/QuilombolaIndicator1.js |  20 +-
 src/SubPages/QuilombolaIndicator2.js | 312 +++++++++++++++++++++++++++
 src/enviroment.js                    |   2 +
 5 files changed, 344 insertions(+), 14 deletions(-)
 create mode 100644 src/SubPages/QuilombolaIndicator2.js

diff --git a/src/MainPage.js b/src/MainPage.js
index 89bdaeb9..14403dab 100644
--- a/src/MainPage.js
+++ b/src/MainPage.js
@@ -75,13 +75,13 @@ const text2 = <div>
                 <li>Transformação de Territórios</li>
                 <li>Aperfeiçoamento Institucional</li>
               </div>
-const text3 = <div>
-                <p>
-                  Os mapas a seguir contém dados referentes a:
-                </p>
-                <li>Comunidades Quilombolas</li>
-                <li>Juventude Viva</li>
-              </div>
+// const text3 = <div>
+//                 <p>
+//                   Os mapas a seguir contém dados referentes a:
+//                 </p>
+//                 <li>Comunidades Quilombolas</li>
+//                 <li>Juventude Viva</li>
+//               </div>
 const text4 = <div>
                 Este módulo contém informações do CadÚnico sobre comunidades de Matriz Africana. 
               </div>
@@ -102,9 +102,9 @@ const text6 = <div>
 // Subpages is an Array of arrays that in the first position expects the title and in the second position the route
 const subpages1 = {'route': '/quilombolas', 'links':['EIXO 1', 'EIXO 2', 'EIXO 3', 'EIXO 4', 'SOBRE']}
 const subpages2 = {'route': '/juventude', 'links':['VULNERABILIDADES', 'EDUCAÇÃO', 'TRABALHO']}
-const subpages3 = {'route': '/mapas', 'links':['COMUNIDADES', 'JUVENTUDE VIVA']}
+// const subpages3 = {'route': '/mapas', 'links':['COMUNIDADES', 'JUVENTUDE VIVA']}
 const subpages4 = {'route': '/matrizAfricana', 'links':["DIREITOS", "CULTURA", "SUSTENTABILIDADE"]}
 const subpages5 = {'route': '/cotas', 'links':['EVASÃO', 'CONCLUINTES', 'ESCOLARIDADE', 'FIES', 'PROUNI', 'FINANCIAMENTO', 'ATIVIDADE EXTRACURRICULAR', 'INGRESSO', 'APOIO SOCIAL', 'VAGAS OFERTADAS']}
-const subpages6 = {'route': '/quilombola', 'links':['EIXO 2']}
+const subpages6 = {'route': '/quilombola', 'links':['EIXO 2','EIXO 3']}
 
 export default MainPage;
diff --git a/src/Quilombola.js b/src/Quilombola.js
index 4e96830f..65e7631a 100644
--- a/src/Quilombola.js
+++ b/src/Quilombola.js
@@ -8,6 +8,7 @@ import Cookies from 'universal-cookie';
 import {sleep, homeURL} from './enviroment'
 import ContrastBar from './Components/ContrastBar'
 import QuilombolaIndicator1 from './SubPages/QuilombolaIndicator1'
+import QuilombolaIndicator2 from './SubPages/QuilombolaIndicator2'
 
 var ck = new Cookies();
 var contrastCK = new Cookies();
@@ -31,10 +32,10 @@ class Quilombola extends Component {
     }
     const cookie = new Cookies();
     var clicked = cookie.get('mainPageClicked')
-    var states = {"EIXO 2": true}
+    var states = {"EIXO 2": true,"EIXO 3": false}
     if (clicked !== undefined){
       if (clicked in states){
-        states["EIXO 1"] = false;
+        states["EIXO 2"] = false;
         states[clicked] = true;
       }
       else{
@@ -53,6 +54,7 @@ class Quilombola extends Component {
         <div id='contentTabsDiv'>
           <Tabs className={`tab-demo z-depth-1 ${contrastString}mainPageRedTab`} onChange={this.whereIAm}>
             <Tab title="EIXO 2" active={states["EIXO 2"]}> <QuilombolaIndicator1/> </Tab>
+            <Tab title="EIXO 3" active={states["EIXO 3"]}> <QuilombolaIndicator2/> </Tab>
           </Tabs>
         </div>
         <AppFooter/>
diff --git a/src/SubPages/QuilombolaIndicator1.js b/src/SubPages/QuilombolaIndicator1.js
index b0277da6..6f46624c 100644
--- a/src/SubPages/QuilombolaIndicator1.js
+++ b/src/SubPages/QuilombolaIndicator1.js
@@ -7,11 +7,8 @@ import './Styles/QuilombolaIndicator1.css';
 import axios from 'axios';
 import { getServerURL, organizeJson, getRegionState, deactivateLoadingAnimation, getStateName, searchHash } from '../enviroment'
 import BuildStackedBar from '../Charts/BuildStackedBar';
-//import BuildBiaxialBars from '../Charts/BuildBiaxialBars';
-//import AutocompleteApp from '../Components/AutocompleteApp';
 import Loading from '../Components/Loading';
 import Cookies from 'universal-cookie';
-// import DropdownCampi from '../Components/DropdownCampi';
 
 
 var ck = new Cookies();
@@ -63,6 +60,10 @@ const sanitaryDump = {
                     'null': 'Indefinido',
                     'NA': 'Não informado',
 }
+const AnoLabel ={
+  'undefined': 'Número de famílias'
+}
+
 class QuilombolaIndicator1 extends Component {
   constructor(props) {
     super(props);
@@ -111,6 +112,16 @@ class QuilombolaIndicator1 extends Component {
           
           <Col s={12} m={10} l={10} offset={'m1 l1'}>
             <Collapsible onClick={this.getHeader}>
+              <CollapsibleContainer id={`${contrastString}redCollapsible`} header='Número de famílias'>
+              <div id={'Numero_de_familias'+type}>
+                  <BuildStackedBar
+                     dataKey='Ano'
+                     data={organizeJson(this.state.charts['Número de famílias'], "year_none", "ano_pesquisa")}
+                     customKeys={AnoLabel}
+                  />
+                </div> 
+                <Loading/>
+              </CollapsibleContainer>
               <CollapsibleContainer id={`${contrastString}redCollapsible`} header='Tipo de domicílio'>
                 <div id={'Tipo_de_domicilio'+type}>
                   <BuildStackedBar
@@ -278,6 +289,9 @@ class QuilombolaIndicator1 extends Component {
       case 'Tipos de escoamento sanitário':
         route = type+"_count?dims=cod_sanitary_dump,year&filter=quilombola_family:\"1\""
         break;
+      case 'Número de famílias':
+        route = type+"_count?dims=year&filter=quilombola_family:\"1\""
+        break;
       default:
         console.log("404");
     }
diff --git a/src/SubPages/QuilombolaIndicator2.js b/src/SubPages/QuilombolaIndicator2.js
new file mode 100644
index 00000000..eb23f187
--- /dev/null
+++ b/src/SubPages/QuilombolaIndicator2.js
@@ -0,0 +1,312 @@
+import React, { Component } from 'react';
+import {Col, Row } from 'react-materialize';
+import MapPanel from '../Components/MapPanel';
+import { Collapsible, Collection, CollectionItem } from 'react-materialize'
+import CollapsibleContainer from '../Components/CollapsibleContainer';
+import './Styles/QuilombolaIndicator1.css';
+import axios from 'axios';
+import { getServerURL, organizeJson, getRegionState, deactivateLoadingAnimation, getStateName, searchHash } from '../enviroment'
+import BuildStackedBar from '../Charts/BuildStackedBar';
+import Loading from '../Components/Loading';
+import Cookies from 'universal-cookie';
+
+
+var ck = new Cookies();
+var contrastCK = new Cookies();
+var cookieStatus = contrastCK.get('contrast');
+const serverURL = getServerURL();
+const type = "cad_unico";
+
+
+class QuilombolaIndicator2 extends Component {
+  constructor(props) {
+    super(props);
+    this.state = {
+      charts:{'Tipo de domicílio': null, "Forma de iluminação - Pessoas": null, "Forma de iluminação - Famílias": null,"Destino do lixo": null
+      ,"Forma de abastecimento de água": null, "Tipos de escoamento sanitário": null},
+      ddValues:{'regiao': null, 'estado': null},
+      graduates:{},
+      campiNames:[],
+      tagID: '', 
+      tagName:''
+    };
+    this.getDataFromAutocomplete = this.getDataFromAutocomplete.bind(this);
+    this.getDataFromServer = this.getDataFromServer.bind(this);
+    this.createRoute = this.createRoute.bind(this);
+    this.getHeader = this.getHeader.bind(this);
+    this.getDDValues = this.getDDValues.bind(this);
+    this.updateCharts = this.updateCharts.bind(this);
+    this.getData = this.getData.bind(this);
+    this.getCampiFromServer = this.getCampiFromServer.bind(this);
+    this.saveAutocompleteContent = this.saveAutocompleteContent.bind(this);
+    this.campiFilter = this.campiFilter.bind(this);
+
+  }
+
+  render() {
+    var contrastString = '';
+    if(cookieStatus === 'true'){
+      contrastString = 'Contrast'
+    }
+    if (ck.get('mainPageClicked') === "EIXO 3")
+    return (
+      <div id={type}>
+        <Row>
+          <Col s={12} m={10} l={10} offset={'m1 l1'}>
+            <div className={`${contrastString}subpage-margin`}>
+              <h5 className={`${contrastString}quilombola-title`}>Eixo 3</h5>
+              <MapPanel 
+                onChange={this.updateCharts} 
+                getDDValues={this.getDDValues}
+                getData={this.getData} 
+                location={type}
+              />
+            </div>
+          </Col>
+          
+          <Col s={12} m={10} l={10} offset={'m1 l1'}>
+            <Collapsible onClick={this.getHeader}>
+              <CollapsibleContainer id={`${contrastString}redCollapsible`} header='Extrativismo'>
+                <div id={'Extrativismo'+type}>
+                  <BuildStackedBar
+                     dataKey='Ano'
+                     data={organizeJson(this.state.charts['Extrativismo'], "cod_agricultura_trab_memb", "ano_pesquisa")}
+                  />
+                </div>
+                <Loading/>
+              </CollapsibleContainer>
+            </Collapsible>
+          </Col>
+        </Row>
+      </div>
+    );
+    else return <div></div>
+  }
+
+  getDataFromAutocomplete(data) {
+    var typeAux = type+'s';
+    for(let i = 0, j = 0; i < data['data'].length; i++, j++){
+      for(;j < this.state[typeAux].length;){
+        if (data['data'][i].no_ano_pesquisa === this.state[typeAux][j].no_ano_pesquisa){
+          data['data'][i]['total'+typeAux] = this.state[typeAux][j].total
+          data['data'][i]['percentage'] = data['data'][i]['total']*100/this.state[typeAux][j].total          
+          break;
+        }
+        else{
+          j++
+        }
+      }          
+    }
+    
+    var currentState = this.state.charts
+    switch(data['option']){
+      case 'institution':
+        currentState['Instituição de Ensino'] = data['data']
+        this.setState({IESTotal: data['data']})        
+        this.setState({campiList: this.getCampi(this.state.campi)})
+        this.setState(currentState)       
+        break;
+      case 'course':
+        currentState['Curso'] = data['data']
+        this.setState(currentState)             
+        break;
+      default:
+        break;
+    }
+  }
+
+  getDataFromServer(defaultData, chart) {
+    if(chart !== 'Curso' && chart !== 'Instituição de Ensino'){
+      var msg = document.getElementById('no_info'+chart+type);
+      if (msg){
+        document.getElementById(chart+type).style.display = 'block';
+        msg.remove()
+      }
+      axios.get(`${serverURL}${defaultData}`)
+        .then(res => {
+          const data = res.data.result
+          var temp = this.state.charts 
+          temp[chart.trim()] = data
+          if (!(Object.values(temp).indexOf(true) > -1)){
+            this.setState({ defaultData : temp });
+            deactivateLoadingAnimation(chart, type);
+          }
+        })
+        .catch(error => {
+          console.log(error)
+          var node = document.createElement("P");
+          var textnode = document.createTextNode(`Sem informação para ${chart} na unidade federativa: ${getStateName(this.state.ddValues.estado)}`);
+          node.appendChild(textnode);
+          node.id = 'no_info'+chart+type
+          deactivateLoadingAnimation(chart, type);
+          document.getElementById(chart+type).style.display = 'none';
+          document.getElementById(chart+type).parentNode.appendChild(node)
+        });
+    }
+  }
+
+  createRoute(header) {
+    var route;
+    let head = header.trim()
+    switch (head) {
+       //count pega informações da familia, sem count são pegas as informações por pessoa
+      case 'Extrativismo':
+        route = type+"?dims=year,cod_agricultura_trab_memb&filter=quilombola_family:\"1\""
+        break;
+      default:
+        console.log("404");
+    }
+    if (this.state.ddValues.estado !== null) {
+      route = route + "&filter=uf:" + this.state.ddValues.estado;
+    } else
+    if (this.state.ddValues.regiao !== null) {
+      route = route + "&filter=region:" + this.state.ddValues.regiao;
+    }
+    this.getDataFromServer(route, head);
+  }
+
+  getHeader(e) {
+    var target = e.target;
+    var current_icon = ''
+    var current_collapsible = ''
+    
+    if (target.childNodes[2] === undefined) {
+      target = e.target.parentNode
+    }    
+    if(target.childNodes[0].innerText){
+      if(target.childNodes[0].innerText[11] === 'd'){
+        current_icon = target.childNodes[0].innerText.slice(0,15)
+        current_collapsible = target.childNodes[0].innerText.slice(15, target.childNodes[0].innerText.length)
+        if(current_collapsible === ''){
+          current_collapsible = target.childNodes[0].parentNode.innerText
+           .replace('\n','').slice(15, target.childNodes[0].parentNode.innerText.replace('\n','').length)
+        }
+      }
+      else{
+        current_icon = target.childNodes[0].innerText.slice(0,13)
+        current_collapsible = target.childNodes[0].innerText.slice(13, target.childNodes[0].innerText.length)
+        if(current_collapsible === ''){
+          current_collapsible = target.childNodes[0].parentNode.innerText
+           .replace('\n','').slice(15, target.childNodes[0].parentNode.innerText.replace('\n','').length)
+        }
+      }
+  
+      if (current_icon === 'arrow_drop_down') {
+        if ((current_collapsible !== "Instituição de Ensino" && current_collapsible !== "Curso")) {
+          this.createRoute(current_collapsible, type)
+        }
+      }
+    }    
+  }
+
+  updateCharts() {
+    var content = document.getElementById(type);
+    var openCharts = content.querySelectorAll('li.active');
+    openCharts = [].map.call(openCharts, function(obj) {
+      var text = obj.childNodes[0].innerText.replace("arrow_drop_up", "");
+      if(text === 'Curso' && document.getElementById("no_curso") !== null)
+        document.getElementById("no_curso").style.display = "none";
+      else if ( text === 'Instituição de Ensino' && document.getElementById("no_ies") !== null)
+        document.getElementById("no_ies").style.display = "none";
+      else
+        return text;
+    });
+    for(let i = 0; i < openCharts.length; i++) {
+      if(openCharts[i] !== null && openCharts[i] !== undefined){
+        this.createRoute(openCharts[i].replace('\n',''))
+      }
+    }
+  }
+
+
+  getDDValues(newValue) {
+    var aux = this.state
+    if(newValue.id === 'regiao'+type || newValue.id === 'estado'+type)
+      newValue.id = newValue.id.replace(type, '');
+
+    if (newValue.value === 'Todas as regiões') {
+      aux.ddValues['regiao'] = null;
+      aux.ddValues['estado'] = null;
+    } else if (newValue.value === 'TD') {
+      aux.ddValues['estado'] = null;
+    } else {  
+      if(newValue.id === 'estado') {
+        aux.ddValues['estado'] = newValue.value
+        aux.ddValues['regiao'] = getRegionState(newValue.value);
+      } else if(newValue.id === 'regiao') {
+          aux.ddValues['estado'] = null;
+          aux.ddValues['regiao'] = newValue.value
+      }
+    }
+    this.setState({
+      aux
+    });
+ }
+
+ getData(e) {
+  this.updateCharts()
+}
+
+getCampi(data) {
+  var unique = ([ ...new Set(data.map(item => item.co_local_oferta))]);
+  var campi = []
+  var campiNames = []
+  for(let i = 0; i < unique.length; i++){
+    let aux = searchHash(unique[i], data, 'co_local_oferta',"Number")
+    aux = aux.sort(function(a, b){
+      return a.no_ano_pesquisa > b.no_ano_pesquisa;
+    });
+    for(let i = 0, j = 0; i < aux.length; i++, j++){
+      for(;j < this.state.IESTotal.length;){
+        if (aux[i].no_ano_pesquisa === this.state.IESTotal[j].no_ano_pesquisa){
+          aux[i]['total_IES'] = this.state.IESTotal[j].total
+          aux[i]['percentage'] = aux[i]['total']*100/this.state.IESTotal[j].total         
+          break;
+        }
+        else{
+          j++
+        }
+      }          
+    }
+    campi.push(aux);
+  }
+  for(let i = 0; i < campi.length; i++){
+    let maxValue = Math.max(...campi[i].map(o => o.no_ano_pesquisa));
+    campiNames.push(searchHash(maxValue, campi[i], 'no_ano_pesquisa',"Number")[0]);   
+  }
+  this.setState({campiNames: [{no_local_oferta:'Todos os campi', co_local_oferta:0}].concat(campiNames)})
+  
+  return unique
+}
+saveAutocompleteContent(tagID, tagName){
+  this.setState({ tagID: tagID, tagName: tagName })
+  this.getCampiFromServer(tagID)
+}
+campiFilter(filter) {
+  let currentState = this.state.charts    
+  if ( filter.value === '0' ){
+    currentState['Instituição de Ensino'] = this.state.IESTotal;    
+  }
+  else {
+    let aux = searchHash(filter.value,this.state.campi,'co_local_oferta',"Number")
+    aux = aux.sort(function(a, b){
+      return a.no_ano_pesquisa > b.no_ano_pesquisa;
+    });
+    currentState['Instituição de Ensino'] = aux;
+  }
+    this.setState({charts:currentState})
+}
+getCampiFromServer(id){
+  var route = `${type}?dims=cod_offer_location,name_offer_location&filter=institution_cod:${id}`
+  axios.get(`${serverURL}${route}`)
+  .then(res => {
+    const data = res.data.result
+    this.setState({ campi : data });
+  }).catch(error => {
+    console.log(error)
+  });
+}
+
+}
+
+export default QuilombolaIndicator2;
\ No newline at end of file
diff --git a/src/enviroment.js b/src/enviroment.js
index 15c5b6eb..ccb8143d 100644
--- a/src/enviroment.js
+++ b/src/enviroment.js
@@ -16,6 +16,8 @@ const patterns = {
   "cod_abaste_agua_domic_fam" : ["1","2","3","4","null","NA"],
   "cod_escoa_sanitario_domic_fam" : ["1","2","3","4","5","6","null","NA"],
   "cod_local_domic_fam" : ["1","2","null","NA"],
+  "year_none" :[],
+  "cod_agricultura_trab_memb": ["1","2"],
   "nu_percent_solicitado_financ": range(10, 100)
 }
 export function sleep (time) {
-- 
GitLab


From 00a8c211a606a99f120c130dd1fe3fd3b2c52349 Mon Sep 17 00:00:00 2001
From: Rafael S Castliho <rsc15@inf.ufpr.br>
Date: Mon, 14 Jan 2019 09:44:50 -0200
Subject: [PATCH 02/23] update enviroments

---
 src/enviroment.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/enviroment.js b/src/enviroment.js
index 675755dd..43043b9c 100644
--- a/src/enviroment.js
+++ b/src/enviroment.js
@@ -26,7 +26,7 @@ export function range(start, end) {
 }
 
 export function getServerURL() {
-  //return "http://smppirhomologa.c3sl.ufpr.br:4545/api/v1/"
+  //return "http://localhost:4000/api/v1/"
   //caso for fazer build para homologa, utilizar o return de baixo ao invés do de cima
   return "http://seppirhomologa.c3sl.ufpr.br/data/api/v1/"
 }
-- 
GitLab


From 0a3fbd59c80651f09a5590e8c3c9cf41c6549256 Mon Sep 17 00:00:00 2001
From: Rafael S Castliho <rsc15@inf.ufpr.br>
Date: Fri, 18 Jan 2019 11:42:14 -0200
Subject: [PATCH 03/23] created cards for EIXO2

---
 src/SubPages/QuilombolaIndicator2.js | 106 +++++++++++++++++++++++++--
 src/SubPages/QuotasFies.js           |  13 ++--
 src/enviroment.js                    |   7 +-
 3 files changed, 112 insertions(+), 14 deletions(-)

diff --git a/src/SubPages/QuilombolaIndicator2.js b/src/SubPages/QuilombolaIndicator2.js
index eb23f187..adb6e482 100644
--- a/src/SubPages/QuilombolaIndicator2.js
+++ b/src/SubPages/QuilombolaIndicator2.js
@@ -5,8 +5,9 @@ import { Collapsible, Collection, CollectionItem } from 'react-materialize'
 import CollapsibleContainer from '../Components/CollapsibleContainer';
 import './Styles/QuilombolaIndicator1.css';
 import axios from 'axios';
-import { getServerURL, organizeJson, getRegionState, deactivateLoadingAnimation, getStateName, searchHash } from '../enviroment'
+import { getServerURL, organizeJson, getRegionState, deactivateLoadingAnimation, getStateName, searchHash, createIntervals } from '../enviroment'
 import BuildStackedBar from '../Charts/BuildStackedBar';
+//import BuildBar from '../Charts/BuildBar';
 import Loading from '../Components/Loading';
 import Cookies from 'universal-cookie';
 
@@ -16,8 +17,20 @@ var contrastCK = new Cookies();
 var cookieStatus = contrastCK.get('contrast');
 const serverURL = getServerURL();
 const type = "cad_unico";
-
-
+const extrativismo = {
+                    '1' : 'sim',
+                    '2' : 'não',
+                    'null' : 'indefinido',
+                    'NA' : 'Não informado',
+}
+const pbf = {
+                    '0' : 'não',
+                    '1' : 'sim',
+                    'null' : 'indefinido',
+}
+const totalrenda = {
+  'total': 'Total',
+}
 class QuilombolaIndicator2 extends Component {
   constructor(props) {
     super(props);
@@ -68,13 +81,84 @@ class QuilombolaIndicator2 extends Component {
             <Collapsible onClick={this.getHeader}>
               <CollapsibleContainer id={`${contrastString}redCollapsible`} header='Extrativismo'>
                 <div id={'Extrativismo'+type}>
+                  <div id={'extrativism-info'}>
+                    <Collection>
+                      <CollectionItem>
+                        O extrativismo é a principal atividade de subsistência das famílias quilombolas.
+                      </CollectionItem>
+                    </Collection>
+                  </div>
                   <BuildStackedBar
                      dataKey='Ano'
                      data={organizeJson(this.state.charts['Extrativismo'], "cod_agricultura_trab_memb", "ano_pesquisa")}
+                     customKeys={extrativismo}
                   />
                 </div>
                 <Loading/>
               </CollapsibleContainer>
+              <CollapsibleContainer id={`${contrastString}redCollapsible`} header='Bolsa Família'>
+                <div id={'Bolsa_Familia'+type}>
+                  <div id={'bolsafamilia-info'}>
+                    <Collection>
+                      <CollectionItem>
+                        A transferência de renda por meio da Bolsa Família tem ampla cobertura sobre as famílias quilombolas.
+                      </CollectionItem>
+                    </Collection>
+                  </div>
+                  <BuildStackedBar
+                     dataKey='Ano'
+                     data={organizeJson(this.state.charts['Bolsa Família'], "marc_pbf", "ano_pesquisa")}
+                     customKeys={pbf}
+                  />
+                </div>
+                <Loading/>
+              </CollapsibleContainer>
+              <CollapsibleContainer header='Renda média per capita' id={`${contrastString}redCollapsible`} >
+                  <div id={'Familia'}>
+                    <div id={'collection-info'}>
+                      <Collection>
+                        <CollectionItem>
+                          O gráfico abaixo exibe as rendas média per capita das famílias quilombolas em faixas de valores. 
+                          As faixas de valores estão em Reais (R$).
+                          Desta forma, uma faixa 0 - 400 indica que a família recebia entre R$0,00 e R$400,00 
+                        </CollectionItem>
+                      </Collection>
+                    </div>
+                    <BuildStackedBar
+                      dataKey={'ano_pesquisa'}
+                      data={this.state.charts['Renda média per capita']}
+                      customKeys={totalrenda}
+                    />
+                  </div>
+                  <Loading/>
+              </CollapsibleContainer>
+              <CollapsibleContainer id={`${contrastString}brownCollapsible`} header='Porcentagem de renda'>
+                <div>
+                  <p className="center-align" style={{fontSize:16}}>
+                    <b>Mova o seletor abaixo para escolher a porcentagem de financiamento a ser exibida</b>
+                  </p>
+                  <p className="range-field">
+                    <input 
+                      id={"percent"+type} 
+                      defaultValue={10} 
+                      type="range" 
+                      name="percent" 
+                      min="10" 
+                      max="100" 
+                      onChange={this.updatePercent}
+                      /> 
+                  </p>
+                  <h6>Exibindo a quantidade de quilombolas com <b>{this.state.percent}%</b> de financiamento do FIES.</h6>
+                  
+                  <BuildStackedBar 
+                    dataKey={'ano_pesquisa'}
+                    data={organizeJson(this.state.charts['Porcentagem de renda'])} 
+                    // visited={this.props.visited} 
+                    // percent={this.state.percent}
+                  />
+                  </div>
+                  <Loading />
+              </CollapsibleContainer>
             </Collapsible>
           </Col>
         </Row>
@@ -126,7 +210,10 @@ class QuilombolaIndicator2 extends Component {
         .then(res => {
           const data = res.data.result
           var temp = this.state.charts 
-          temp[chart.trim()] = data
+          if(chart === 'Renda média per capita')
+            temp[chart] = createIntervals(data, 'vlr_renda_media_fam', 400, 'ano_pesquisa')
+          else 
+            temp[chart.trim()] = data
           if (!(Object.values(temp).indexOf(true) > -1)){
             this.setState({ defaultData : temp });
             deactivateLoadingAnimation(chart, type);
@@ -151,7 +238,16 @@ class QuilombolaIndicator2 extends Component {
     switch (head) {
        //count pega informações da familia, sem count são pegas as informações por pessoa
       case 'Extrativismo':
-        route = type+"?dims=year,cod_agricultura_trab_memb&filter=quilombola_family:\"1\""
+        route = type+"?dims=year,cod_agriculture_job&filter=quilombola_family:\"1\""
+        break;
+      case 'Bolsa Família':
+        route = type+"_count?dims=year,cod_home_bolsa_familia&filter=quilombola_family:\"1\""
+        break;
+      case 'Renda média per capita':
+        route = type+"_count?dims=year,per_capita_income&quilombola_family:\"1\"";   //Colocar filtro aqui
+        break;
+      case 'Porcentagem de renda':
+        route = type+"_count?dims=year,per_capita_income&quilombola_family:\"1\"";   //Colocar filtro aqui
         break;
       default:
         console.log("404");
diff --git a/src/SubPages/QuotasFies.js b/src/SubPages/QuotasFies.js
index 5fcb3471..7cc78330 100644
--- a/src/SubPages/QuotasFies.js
+++ b/src/SubPages/QuotasFies.js
@@ -209,12 +209,13 @@ class QuotasFies extends Component {
     if(chart !== 'Curso' && chart !== 'Instituição de Ensino')
     axios.get(`${serverURL}${defaultData}`)
       .then(res => {
-        const data = res.data.result
-        var temp = this.state.charts 
-        temp[chart] = data
-        if (!(Object.values(temp).indexOf(true) > -1))
-          this.setState({ defaultData : temp });
-          deactivateLoadingAnimation(chart, type)
+        console.log(res)
+         const data = res.data.result
+         var temp = this.state.charts 
+         temp[chart.trim()] = data
+         if (!(Object.values(temp).indexOf(true) > -1))
+            this.setState({ defaultData : temp });
+           deactivateLoadingAnimation(chart, type)
       });
   }
 
diff --git a/src/enviroment.js b/src/enviroment.js
index ccb8143d..4dd6e7b3 100644
--- a/src/enviroment.js
+++ b/src/enviroment.js
@@ -17,7 +17,8 @@ const patterns = {
   "cod_escoa_sanitario_domic_fam" : ["1","2","3","4","5","6","null","NA"],
   "cod_local_domic_fam" : ["1","2","null","NA"],
   "year_none" :[],
-  "cod_agricultura_trab_memb": ["1","2"],
+  "cod_agricultura_trab_memb": ["1","2","null","NA"],
+  "marc_pbf" : ["0","1","null"],
   "nu_percent_solicitado_financ": range(10, 100)
 }
 export function sleep (time) {
@@ -207,7 +208,6 @@ export function organizeJson(data, uniqueParameter, yearParameter='no_ano_pesqui
           groups[item[yearParameter]] = [item];
       }
     });
-
     if(uniqueParameter === 'tipo_cota'){
       for(let key in groups) {
         aux = {};
@@ -224,7 +224,8 @@ export function organizeJson(data, uniqueParameter, yearParameter='no_ano_pesqui
       for(let key in groups) {
         aux = {};
         for(let i = 0; i < groups[key].length; i++){
-          groups[key][i].ds_raca_cor = "Sem informação"
+          if (groups[key][i].ds_raca_cor === null)
+            groups[key][i].ds_raca_cor = "Sem informação"
           aux[groups[key][i][uniqueParameter]] = groups[key][i].total
         }
         aux['Ano'] = parseInt(key,10);
-- 
GitLab


From 0450c3e2b44e3a1c9d5d437d1e20f9ca9b34b145 Mon Sep 17 00:00:00 2001
From: Rafael S Castilho <rsc15@inf.ufpr.br>
Date: Mon, 11 Feb 2019 10:43:48 -0200
Subject: [PATCH 04/23] Quilombolas indicator

---
 LICENSE.md                                    | 674 ++++++++++++++++++
 src/About.js                                  |  22 +
 src/AfricanOrigin.js                          |  22 +
 src/App.css                                   |  22 +
 src/App.js                                    |  22 +
 src/Charts/BuildArea.js                       |  22 +
 src/Charts/BuildBar.js                        |  22 +
 src/Charts/BuildBarPNAD.js                    |  22 +
 src/Charts/BuildBiaxialBars.js                |  22 +
 src/Charts/BuildLine.js                       |  22 +
 src/Charts/BuildLineNotFixed.js               |  22 +
 src/Charts/BuildPie.js                        |  22 +
 src/Charts/BuildStackedBar.js                 |  22 +
 src/Charts/Styles/BuildStackedBar.css         |  22 +
 src/Components/AppFooter.js                   |  22 +
 src/Components/AppModal.js                    |  22 +
 src/Components/Autocomplete.js                |  22 +
 src/Components/AutocompleteApp.js             |  22 +
 src/Components/BarraBrasil.js                 |  22 +
 src/Components/CardFooter.js                  |  22 +
 src/Components/CollapsibleContainer.js        |  22 +
 src/Components/ColorfulBar.js                 |  22 +
 src/Components/ContactForm.js                 |  22 +
 src/Components/ContrastBar.js                 |  22 +
 src/Components/DropdownCampi.js               |  22 +
 src/Components/DropdownControl.js             |  22 +
 src/Components/Fraction.js                    |  22 +
 src/Components/GrayBar.js                     |  22 +
 src/Components/HeatMap.js                     |  22 +
 src/Components/Loading.js                     |  22 +
 src/Components/MainBanner.js                  |  22 +
 src/Components/MainCard.js                    |  22 +
 src/Components/Map.js                         |  22 +
 src/Components/MapPanel.js                    |  22 +
 src/Components/MultiSelector.js               |  22 +
 src/Components/NavigationBar.js               |  22 +
 src/Components/Partner.js                     |  22 +
 src/Components/Table.js                       |  22 +
 src/Components/UfBar.js                       |  22 +
 src/Components/ValueBar.js                    |  22 +
 src/MainPage.js                               |  22 +
 src/Maps.js                                   |  22 +
 src/Quilombola.js                             |  22 +
 src/Quilombolas.js                            |  22 +
 src/RacialQuotas.js                           |  22 +
 src/Styles/About.css                          |  22 +
 src/Styles/AfricanOrigin.css                  |  22 +
 src/Styles/AppFooter.css                      |  22 +
 src/Styles/AppModal.css                       |  22 +
 src/Styles/Autocomplete.css                   |  22 +
 src/Styles/AutocompleteApp.css                |  22 +
 src/Styles/BarraBrasil.css                    |  22 +
 src/Styles/CardFooter.css                     |  22 +
 src/Styles/CollapsibleContainer.css           |  22 +
 src/Styles/ColorfulBar.css                    |  22 +
 src/Styles/ContactForm.css                    |  22 +
 src/Styles/ContrastBar.css                    |  22 +
 src/Styles/DropdownControl.css                |  22 +
 src/Styles/Fraction.css                       |  22 +
 src/Styles/GrayBar.css                        |  22 +
 src/Styles/Loading.css                        |  22 +
 src/Styles/MainBanner.css                     |  22 +
 src/Styles/MainCard.css                       |  22 +
 src/Styles/MainPage.css                       |  22 +
 src/Styles/MapPanel.css                       |  22 +
 src/Styles/Maps.css                           |  22 +
 src/Styles/MultiSelector.css                  |  22 +
 src/Styles/NavigationBar.css                  |  22 +
 src/Styles/Quilombolas.css                    |  22 +
 src/Styles/RacialQuotas.css                   |  22 +
 src/Styles/Table.css                          |  22 +
 src/Styles/UfBar.css                          |  22 +
 src/Styles/ValueBar.css                       |  22 +
 src/Styles/Youth.css                          |  22 +
 src/SubPages/AfricanCulture.js                |  22 +
 src/SubPages/AfricanRights.js                 |  22 +
 src/SubPages/AfricanSustainability.js         |  22 +
 src/SubPages/Eixo1.js                         |  22 +
 src/SubPages/Eixo2.js                         |  22 +
 src/SubPages/Eixo3.js                         |  22 +
 src/SubPages/Eixo4.js                         |  22 +
 src/SubPages/MapsCommunities.js               |  22 +
 src/SubPages/MapsYouth.js                     |  22 +
 src/SubPages/QuilombolaAbout.js               |  22 +
 src/SubPages/QuilombolaIndicator1.js          |  22 +
 src/SubPages/QuilombolaIndicator2.js          |  34 +-
 src/SubPages/QuilombolaPresentation.js        |  22 +
 src/SubPages/QuotasAdmission.js               |  32 +-
 src/SubPages/QuotasEducation.js               |  22 +
 src/SubPages/QuotasEvader.js                  |  33 +-
 src/SubPages/QuotasExtracurricularAct.js      |  32 +-
 src/SubPages/QuotasFies.js                    |  23 +-
 src/SubPages/QuotasGraduate.js                |  32 +-
 src/SubPages/QuotasLoan.js                    |  32 +-
 src/SubPages/QuotasOfferVacancies.js          |  22 +
 src/SubPages/QuotasPROUNI.js                  |  22 +
 src/SubPages/QuotasSocialSupport.js           |  32 +-
 src/SubPages/Styles/AfricanRights.css         |  22 +
 src/SubPages/Styles/Eixo1.css                 |  22 +
 src/SubPages/Styles/Eixo2.css                 |  22 +
 src/SubPages/Styles/Eixo3.css                 |  22 +
 src/SubPages/Styles/Eixo4.css                 |  22 +
 src/SubPages/Styles/MapsCommunities.css       |  22 +
 src/SubPages/Styles/MapsYouth.css             |  22 +
 src/SubPages/Styles/QuilombolaAbout.css       |  22 +
 src/SubPages/Styles/QuilombolaIndicator1.css  |  22 +
 .../Styles/QuilombolaPresentation.css         |  22 +
 src/SubPages/Styles/QuotasAdmission.css       |  22 +
 src/SubPages/Styles/QuotasEducation.css       |  22 +
 src/SubPages/Styles/QuotasEvader.css          |  22 +
 .../Styles/QuotasExtracurricularAct.css       |  22 +
 src/SubPages/Styles/QuotasFies.css            |  22 +
 src/SubPages/Styles/QuotasGraduate.css        |  22 +
 src/SubPages/Styles/QuotasLoan.css            |  22 +
 src/SubPages/Styles/QuotasOfferVacancies.css  |  22 +
 src/SubPages/Styles/QuotasPROUNI.css          |  22 +
 src/SubPages/Styles/QuotasSocialSupport.css   |  22 +
 src/SubPages/Styles/YouthEducation.css        |  22 +
 src/SubPages/Styles/YouthJob.css              |  22 +
 src/SubPages/Styles/YouthPresentation.css     |  22 +
 src/SubPages/Styles/YouthVulnerabilities.css  |  22 +
 src/SubPages/YouthAbout.js                    |  22 +
 src/SubPages/YouthEducation.js                |  22 +
 src/SubPages/YouthJob.js                      |  22 +
 src/SubPages/YouthPresentation.js             |  22 +
 src/SubPages/YouthVulnerabilities.js          |  22 +
 src/Youth.js                                  |  22 +
 src/enviroment.js                             |  27 +-
 src/index.css                                 |  22 +
 src/index.js                                  |  22 +
 src/maps/br.js                                |  22 +
 src/maps/colors.css                           |  22 +
 src/maps/heatbr.js                            |  22 +
 src/maps/heatcolors.css                       |  22 +
 src/registerServiceWorker.js                  |  22 +
 135 files changed, 3686 insertions(+), 15 deletions(-)
 create mode 100644 LICENSE.md

diff --git a/LICENSE.md b/LICENSE.md
new file mode 100644
index 00000000..9e419e04
--- /dev/null
+++ b/LICENSE.md
@@ -0,0 +1,674 @@
+GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    <program>  Copyright (C) <year>  <name of author>
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
\ No newline at end of file
diff --git a/src/About.js b/src/About.js
index da70e574..28ed5eeb 100644
--- a/src/About.js
+++ b/src/About.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import NavigationBar from './Components/NavigationBar'
 import AppFooter from './Components/AppFooter'
diff --git a/src/AfricanOrigin.js b/src/AfricanOrigin.js
index 1d1e1bcb..1e8da6ce 100644
--- a/src/AfricanOrigin.js
+++ b/src/AfricanOrigin.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import NavigationBar from './Components/NavigationBar';
 import AfricanCulture from './SubPages/AfricanCulture';
diff --git a/src/App.css b/src/App.css
index 30afdc00..2b02c665 100644
--- a/src/App.css
+++ b/src/App.css
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 /*.App {
   text-align: center;
 }
diff --git a/src/App.js b/src/App.js
index 1fe8290d..c95cace2 100644
--- a/src/App.js
+++ b/src/App.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import { BrowserRouter as Router, Route } from 'react-router-dom'
 import './App.css';
diff --git a/src/Charts/BuildArea.js b/src/Charts/BuildArea.js
index e71fb5b6..1473684b 100644
--- a/src/Charts/BuildArea.js
+++ b/src/Charts/BuildArea.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import { AreaChart, Area, XAxis, YAxis, CartesianGrid, Tooltip, Legend, ResponsiveContainer } from 'recharts';
 
diff --git a/src/Charts/BuildBar.js b/src/Charts/BuildBar.js
index e1b8a977..3a3775c9 100644
--- a/src/Charts/BuildBar.js
+++ b/src/Charts/BuildBar.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import { ResponsiveContainer, Bar, BarChart,
   XAxis, YAxis, CartesianGrid, Tooltip, Legend } from 'recharts';
diff --git a/src/Charts/BuildBarPNAD.js b/src/Charts/BuildBarPNAD.js
index 5c88bf4e..31942f9b 100644
--- a/src/Charts/BuildBarPNAD.js
+++ b/src/Charts/BuildBarPNAD.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import { ResponsiveContainer, Bar, BarChart, 
   XAxis, YAxis, CartesianGrid, Tooltip, Legend } from 'recharts';
diff --git a/src/Charts/BuildBiaxialBars.js b/src/Charts/BuildBiaxialBars.js
index fcde4728..81707ea7 100644
--- a/src/Charts/BuildBiaxialBars.js
+++ b/src/Charts/BuildBiaxialBars.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import { Bar, BarChart, Tooltip, Legend, ResponsiveContainer, XAxis, YAxis, CartesianGrid } from 'recharts';
 
diff --git a/src/Charts/BuildLine.js b/src/Charts/BuildLine.js
index 41511dda..2d5129f6 100644
--- a/src/Charts/BuildLine.js
+++ b/src/Charts/BuildLine.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import { ResponsiveContainer, Line, LineChart, 
   XAxis, YAxis, CartesianGrid, Tooltip, Legend } from 'recharts';
diff --git a/src/Charts/BuildLineNotFixed.js b/src/Charts/BuildLineNotFixed.js
index c081a067..62a6d828 100644
--- a/src/Charts/BuildLineNotFixed.js
+++ b/src/Charts/BuildLineNotFixed.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import { ResponsiveContainer, Line, LineChart,
   XAxis, YAxis, CartesianGrid, Tooltip, Legend } from 'recharts';
diff --git a/src/Charts/BuildPie.js b/src/Charts/BuildPie.js
index 33e01e0b..d0944b16 100644
--- a/src/Charts/BuildPie.js
+++ b/src/Charts/BuildPie.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import { Pie, Cell, PieChart, Tooltip, Legend, ResponsiveContainer } from 'recharts';
 
diff --git a/src/Charts/BuildStackedBar.js b/src/Charts/BuildStackedBar.js
index 515d5835..c0b26647 100644
--- a/src/Charts/BuildStackedBar.js
+++ b/src/Charts/BuildStackedBar.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import {BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, Legend, ResponsiveContainer} from "recharts";
 import './Styles/BuildStackedBar.css';
diff --git a/src/Charts/Styles/BuildStackedBar.css b/src/Charts/Styles/BuildStackedBar.css
index ba2b6971..abbf86be 100644
--- a/src/Charts/Styles/BuildStackedBar.css
+++ b/src/Charts/Styles/BuildStackedBar.css
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 .tooltipCenter {
     width:135px;
     text-align:center;
diff --git a/src/Components/AppFooter.js b/src/Components/AppFooter.js
index dc3e1b7b..8dcb4b58 100644
--- a/src/Components/AppFooter.js
+++ b/src/Components/AppFooter.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import { Footer } from 'react-materialize'
 import ColorfulBar from './ColorfulBar'
diff --git a/src/Components/AppModal.js b/src/Components/AppModal.js
index d6a7fcbb..d04f1d9c 100644
--- a/src/Components/AppModal.js
+++ b/src/Components/AppModal.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import { Modal, Button } from 'react-materialize'
 
diff --git a/src/Components/Autocomplete.js b/src/Components/Autocomplete.js
index 72541246..1002485d 100644
--- a/src/Components/Autocomplete.js
+++ b/src/Components/Autocomplete.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import ReactTags from 'react-tag-autocomplete'
 
diff --git a/src/Components/AutocompleteApp.js b/src/Components/AutocompleteApp.js
index 1164a6eb..57d3b4a8 100644
--- a/src/Components/AutocompleteApp.js
+++ b/src/Components/AutocompleteApp.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import { Row, Col, Icon, Preloader, Button  } from 'react-materialize'
 import axios from 'axios';
diff --git a/src/Components/BarraBrasil.js b/src/Components/BarraBrasil.js
index 0acc9a79..8cbaafe4 100644
--- a/src/Components/BarraBrasil.js
+++ b/src/Components/BarraBrasil.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import  '../Styles/BarraBrasil.css'
 import Cookies from 'universal-cookie';
diff --git a/src/Components/CardFooter.js b/src/Components/CardFooter.js
index b1c18895..fe6a8ee8 100644
--- a/src/Components/CardFooter.js
+++ b/src/Components/CardFooter.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import { Icon, Row, Col } from 'react-materialize'
 
diff --git a/src/Components/CollapsibleContainer.js b/src/Components/CollapsibleContainer.js
index ee0cef16..a9ea3946 100644
--- a/src/Components/CollapsibleContainer.js
+++ b/src/Components/CollapsibleContainer.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React from 'react';
 import { CollapsibleItem } from 'react-materialize';
 import '../Styles/CollapsibleContainer.css';
diff --git a/src/Components/ColorfulBar.js b/src/Components/ColorfulBar.js
index f52f5972..39d77abb 100644
--- a/src/Components/ColorfulBar.js
+++ b/src/Components/ColorfulBar.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import { Row, Col } from 'react-materialize'
 
diff --git a/src/Components/ContactForm.js b/src/Components/ContactForm.js
index f2cb5383..0cbb5cfb 100644
--- a/src/Components/ContactForm.js
+++ b/src/Components/ContactForm.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import { Row, Input, Icon, Button } from 'react-materialize'
 import  '../Styles/ContactForm.css'
diff --git a/src/Components/ContrastBar.js b/src/Components/ContrastBar.js
index f1ec444d..790deecd 100644
--- a/src/Components/ContrastBar.js
+++ b/src/Components/ContrastBar.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import  '../Styles/ContrastBar.css'
 import Cookies from 'universal-cookie';
diff --git a/src/Components/DropdownCampi.js b/src/Components/DropdownCampi.js
index 8e68b552..36035be5 100644
--- a/src/Components/DropdownCampi.js
+++ b/src/Components/DropdownCampi.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import { Row, Col, Input } from 'react-materialize';
 import { getDDValue } from '../enviroment';
diff --git a/src/Components/DropdownControl.js b/src/Components/DropdownControl.js
index 0fe791e9..12440474 100644
--- a/src/Components/DropdownControl.js
+++ b/src/Components/DropdownControl.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import { Row, Input, Button, Icon } from 'react-materialize';
 import axios from 'axios';
diff --git a/src/Components/Fraction.js b/src/Components/Fraction.js
index ffc6506f..d80ce364 100644
--- a/src/Components/Fraction.js
+++ b/src/Components/Fraction.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import '../Styles/Fraction.css'
 
diff --git a/src/Components/GrayBar.js b/src/Components/GrayBar.js
index c3151c4f..d50d6c1d 100644
--- a/src/Components/GrayBar.js
+++ b/src/Components/GrayBar.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 
 import '../Styles/GrayBar.css'
diff --git a/src/Components/HeatMap.js b/src/Components/HeatMap.js
index 0e7c5d9a..d11a1ec6 100644
--- a/src/Components/HeatMap.js
+++ b/src/Components/HeatMap.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import HeatMapBr from '../maps/heatbr';
 import { getStateId } from '../enviroment';
diff --git a/src/Components/Loading.js b/src/Components/Loading.js
index e607fa11..848d6602 100644
--- a/src/Components/Loading.js
+++ b/src/Components/Loading.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import { Col, Row, Preloader } from 'react-materialize'
 
diff --git a/src/Components/MainBanner.js b/src/Components/MainBanner.js
index 2e6d0fe1..045a3131 100644
--- a/src/Components/MainBanner.js
+++ b/src/Components/MainBanner.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import logo from '../Images/SMPPIRBanner.png';
 import contrastLogo from '../Images/SMPPIRBannerContrast.png'
diff --git a/src/Components/MainCard.js b/src/Components/MainCard.js
index b52c1097..feea7f9a 100644
--- a/src/Components/MainCard.js
+++ b/src/Components/MainCard.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import { Card, CardTitle } from 'react-materialize'
 import Cookies from 'universal-cookie';
diff --git a/src/Components/Map.js b/src/Components/Map.js
index 13ae6842..8813a866 100644
--- a/src/Components/Map.js
+++ b/src/Components/Map.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import MapBr from '../maps/br';
 import { getStateId } from '../enviroment';
diff --git a/src/Components/MapPanel.js b/src/Components/MapPanel.js
index 16f0f9e9..11d9989c 100644
--- a/src/Components/MapPanel.js
+++ b/src/Components/MapPanel.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import { Row, Col, Card, Button, Icon } from 'react-materialize'
 import DropdownControl from './DropdownControl'
diff --git a/src/Components/MultiSelector.js b/src/Components/MultiSelector.js
index 890d1998..b4201779 100644
--- a/src/Components/MultiSelector.js
+++ b/src/Components/MultiSelector.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import { Row, Input, Button, Icon } from 'react-materialize'
 import { searchHash } from '../enviroment'
diff --git a/src/Components/NavigationBar.js b/src/Components/NavigationBar.js
index 05c70371..0217ef2f 100644
--- a/src/Components/NavigationBar.js
+++ b/src/Components/NavigationBar.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import logo from '../Images/PortalLogo.png';
 import logoContrast from '../Images/PortalLogoContrast.png'
diff --git a/src/Components/Partner.js b/src/Components/Partner.js
index 8d58112b..3837141a 100644
--- a/src/Components/Partner.js
+++ b/src/Components/Partner.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import {  Row, Col } from 'react-materialize'
 
diff --git a/src/Components/Table.js b/src/Components/Table.js
index 3e9752dc..1612bbfd 100644
--- a/src/Components/Table.js
+++ b/src/Components/Table.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import { Icon } from 'react-materialize';
 
diff --git a/src/Components/UfBar.js b/src/Components/UfBar.js
index 9ba67c36..027ef1b7 100644
--- a/src/Components/UfBar.js
+++ b/src/Components/UfBar.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import { Row, Col } from 'react-materialize'
 
diff --git a/src/Components/ValueBar.js b/src/Components/ValueBar.js
index 801af5b3..baa70443 100644
--- a/src/Components/ValueBar.js
+++ b/src/Components/ValueBar.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 
 import '../Styles/ValueBar.css'
diff --git a/src/MainPage.js b/src/MainPage.js
index 14403dab..9139330a 100644
--- a/src/MainPage.js
+++ b/src/MainPage.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import MainBanner from './Components/MainBanner'
 import AppFooter from './Components/AppFooter'
diff --git a/src/Maps.js b/src/Maps.js
index 49422750..c4138861 100644
--- a/src/Maps.js
+++ b/src/Maps.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import NavigationBar from './Components/NavigationBar';
 import MapsCommunities from './SubPages/MapsCommunities';
diff --git a/src/Quilombola.js b/src/Quilombola.js
index 65e7631a..4602740a 100644
--- a/src/Quilombola.js
+++ b/src/Quilombola.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 /* Esse arquivo contém dados historicos sobre quilombolas, como se fosse um "quilombolas 2.0" */
 import React, { Component } from 'react';
 import NavigationBar from './Components/NavigationBar'
diff --git a/src/Quilombolas.js b/src/Quilombolas.js
index e45e8362..eb26bc6c 100644
--- a/src/Quilombolas.js
+++ b/src/Quilombolas.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import NavigationBar from './Components/NavigationBar'
 import Eixo1 from './SubPages/Eixo1'
diff --git a/src/RacialQuotas.js b/src/RacialQuotas.js
index f9df0dd4..9768de70 100644
--- a/src/RacialQuotas.js
+++ b/src/RacialQuotas.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import NavigationBar from './Components/NavigationBar';
 import AppFooter from './Components/AppFooter';
diff --git a/src/Styles/About.css b/src/Styles/About.css
index 4f0b803d..ce1a1f5d 100644
--- a/src/Styles/About.css
+++ b/src/Styles/About.css
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 .mainPageTealBlue{
     background-color: #0e3958;
 }
diff --git a/src/Styles/AfricanOrigin.css b/src/Styles/AfricanOrigin.css
index 7270aaf3..1d46c625 100644
--- a/src/Styles/AfricanOrigin.css
+++ b/src/Styles/AfricanOrigin.css
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 .mainPageDarkBlueTab{
     background-color: #0e3958;
 }
diff --git a/src/Styles/AppFooter.css b/src/Styles/AppFooter.css
index 2cec67e4..5abc37a1 100644
--- a/src/Styles/AppFooter.css
+++ b/src/Styles/AppFooter.css
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 img.hoverColor {
     filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#grayscale");
     /* Firefox 3.5+ */
diff --git a/src/Styles/AppModal.css b/src/Styles/AppModal.css
index 5f5da89f..882fd32e 100644
--- a/src/Styles/AppModal.css
+++ b/src/Styles/AppModal.css
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 .quotasGreenBg{
     background-color: #78752e;
 }
diff --git a/src/Styles/Autocomplete.css b/src/Styles/Autocomplete.css
index 58f854df..e69cf391 100644
--- a/src/Styles/Autocomplete.css
+++ b/src/Styles/Autocomplete.css
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 .react-tags {
   position: relative;
   padding: 6px 0 0 6px;
diff --git a/src/Styles/AutocompleteApp.css b/src/Styles/AutocompleteApp.css
index 7a4411ef..cf13bd5c 100644
--- a/src/Styles/AutocompleteApp.css
+++ b/src/Styles/AutocompleteApp.css
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 .AutocompleteApp{
     margin:10px;
 }
diff --git a/src/Styles/BarraBrasil.css b/src/Styles/BarraBrasil.css
index 44e6df58..223d0cc5 100644
--- a/src/Styles/BarraBrasil.css
+++ b/src/Styles/BarraBrasil.css
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 #barra-brasil{
     background: #7F7F7F;
      height: 20px; 
diff --git a/src/Styles/CardFooter.css b/src/Styles/CardFooter.css
index cf296419..091939d0 100644
--- a/src/Styles/CardFooter.css
+++ b/src/Styles/CardFooter.css
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 a {
   color: #000;
 }
diff --git a/src/Styles/CollapsibleContainer.css b/src/Styles/CollapsibleContainer.css
index 01a6ed3e..824c8d43 100644
--- a/src/Styles/CollapsibleContainer.css
+++ b/src/Styles/CollapsibleContainer.css
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 /* Collapsible CSS */
 .collapsible-header {
   background-color: #78752e;
diff --git a/src/Styles/ColorfulBar.css b/src/Styles/ColorfulBar.css
index 03b6077b..9076d64c 100644
--- a/src/Styles/ColorfulBar.css
+++ b/src/Styles/ColorfulBar.css
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 #color1{
     background-color: #363b1b; 
 }
diff --git a/src/Styles/ContactForm.css b/src/Styles/ContactForm.css
index 7891ea60..688070b8 100644
--- a/src/Styles/ContactForm.css
+++ b/src/Styles/ContactForm.css
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 .emailForm{
     vertical-align: middle;
 }
diff --git a/src/Styles/ContrastBar.css b/src/Styles/ContrastBar.css
index 6c4070cf..440f849e 100644
--- a/src/Styles/ContrastBar.css
+++ b/src/Styles/ContrastBar.css
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 .contrastButton{
   border: none;
   padding: 0;
diff --git a/src/Styles/DropdownControl.css b/src/Styles/DropdownControl.css
index 17f02cf1..db9ac35c 100644
--- a/src/Styles/DropdownControl.css
+++ b/src/Styles/DropdownControl.css
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 
 /*Switch CSS*/
 .switch label input[type=checkbox]:checked+.lever {
diff --git a/src/Styles/Fraction.css b/src/Styles/Fraction.css
index 349c75c8..b642a773 100644
--- a/src/Styles/Fraction.css
+++ b/src/Styles/Fraction.css
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 .frac { display: inline-block;
     position: relative;
     vertical-align: middle;
diff --git a/src/Styles/GrayBar.css b/src/Styles/GrayBar.css
index aa90708a..fdef5b82 100644
--- a/src/Styles/GrayBar.css
+++ b/src/Styles/GrayBar.css
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 .grayBar{
   background-color: #BBB;
 }
diff --git a/src/Styles/Loading.css b/src/Styles/Loading.css
index 58fdaa9f..09655ec6 100644
--- a/src/Styles/Loading.css
+++ b/src/Styles/Loading.css
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 .outerSearchNotice{
     width:100%;
 
diff --git a/src/Styles/MainBanner.css b/src/Styles/MainBanner.css
index fd31836f..583665fb 100644
--- a/src/Styles/MainBanner.css
+++ b/src/Styles/MainBanner.css
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 #mainBannerCard{
     margin-top: 0px; 
 }
diff --git a/src/Styles/MainCard.css b/src/Styles/MainCard.css
index 505c68aa..3793cdcf 100644
--- a/src/Styles/MainCard.css
+++ b/src/Styles/MainCard.css
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 .mainPageRed{
     color: #ca3829;
 }
diff --git a/src/Styles/MainPage.css b/src/Styles/MainPage.css
index dbe9750f..15e1c1f2 100644
--- a/src/Styles/MainPage.css
+++ b/src/Styles/MainPage.css
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 /* #mainPage{
     background-color: #ede9e3;
 } */
diff --git a/src/Styles/MapPanel.css b/src/Styles/MapPanel.css
index f6da5813..ce801277 100644
--- a/src/Styles/MapPanel.css
+++ b/src/Styles/MapPanel.css
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 .mappanel-margin {
     margin-left: -10px;
     margin-right: -10px;
diff --git a/src/Styles/Maps.css b/src/Styles/Maps.css
index 698f1559..92bd8210 100644
--- a/src/Styles/Maps.css
+++ b/src/Styles/Maps.css
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 .mainPageOrangeTab{
     background-color: #ea7c27;
 }
diff --git a/src/Styles/MultiSelector.css b/src/Styles/MultiSelector.css
index acfc0368..f9015caf 100644
--- a/src/Styles/MultiSelector.css
+++ b/src/Styles/MultiSelector.css
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 #searchButtonSelector{
     background-color: rgba(0,0,0,0.6);
     color: white;
diff --git a/src/Styles/NavigationBar.css b/src/Styles/NavigationBar.css
index 2ee6faf8..098c8729 100644
--- a/src/Styles/NavigationBar.css
+++ b/src/Styles/NavigationBar.css
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 ul.z-depth-2{
     box-shadow: none;
 }
diff --git a/src/Styles/Quilombolas.css b/src/Styles/Quilombolas.css
index d066522c..930fc334 100644
--- a/src/Styles/Quilombolas.css
+++ b/src/Styles/Quilombolas.css
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 .mainPageRedTab{
     background-color: #ca3829;
 }
diff --git a/src/Styles/RacialQuotas.css b/src/Styles/RacialQuotas.css
index be67c16a..f2392993 100644
--- a/src/Styles/RacialQuotas.css
+++ b/src/Styles/RacialQuotas.css
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 #mainPage{
     background-color: #ede9e3;
 }
diff --git a/src/Styles/Table.css b/src/Styles/Table.css
index 9e17d38c..0486135b 100644
--- a/src/Styles/Table.css
+++ b/src/Styles/Table.css
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 .scrolltable{
   display: block;
   overflow: auto;
diff --git a/src/Styles/UfBar.css b/src/Styles/UfBar.css
index 957052f7..b6ad89c9 100644
--- a/src/Styles/UfBar.css
+++ b/src/Styles/UfBar.css
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 #uf-bar{
   background-color: #EEE;
 }
diff --git a/src/Styles/ValueBar.css b/src/Styles/ValueBar.css
index e84ce72b..92263032 100644
--- a/src/Styles/ValueBar.css
+++ b/src/Styles/ValueBar.css
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 #val-bar{
   background-color: #EEE;
   padding: 5px 5px;
diff --git a/src/Styles/Youth.css b/src/Styles/Youth.css
index bba9eeec..053a8e87 100644
--- a/src/Styles/Youth.css
+++ b/src/Styles/Youth.css
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 .mainPageTealTab{
     background-color: #0c6559;
 }
diff --git a/src/SubPages/AfricanCulture.js b/src/SubPages/AfricanCulture.js
index 0d0f09a1..e050aea5 100644
--- a/src/SubPages/AfricanCulture.js
+++ b/src/SubPages/AfricanCulture.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import Cookies from 'universal-cookie';
 import {Collapsible, Row, Col} from 'react-materialize';
diff --git a/src/SubPages/AfricanRights.js b/src/SubPages/AfricanRights.js
index fb1c2b6a..1bdc171e 100644
--- a/src/SubPages/AfricanRights.js
+++ b/src/SubPages/AfricanRights.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import Cookies from 'universal-cookie';
 import {Collapsible, Row, Col} from 'react-materialize';
diff --git a/src/SubPages/AfricanSustainability.js b/src/SubPages/AfricanSustainability.js
index 0cf53a51..3d153ee1 100644
--- a/src/SubPages/AfricanSustainability.js
+++ b/src/SubPages/AfricanSustainability.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import Cookies from 'universal-cookie';
 import {Collapsible, Row, Col, Collection, CollectionItem} from 'react-materialize';
diff --git a/src/SubPages/Eixo1.js b/src/SubPages/Eixo1.js
index bf049890..24302706 100644
--- a/src/SubPages/Eixo1.js
+++ b/src/SubPages/Eixo1.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import {Card,Row,Col, Button} from 'react-materialize';
 import CardFooter from '../Components/CardFooter';
diff --git a/src/SubPages/Eixo2.js b/src/SubPages/Eixo2.js
index dc35efe7..20e2f66e 100644
--- a/src/SubPages/Eixo2.js
+++ b/src/SubPages/Eixo2.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import {Card,Row,Col,Button} from 'react-materialize';
 import family from './icons/family.png';
diff --git a/src/SubPages/Eixo3.js b/src/SubPages/Eixo3.js
index ea1158cc..41d8c18a 100644
--- a/src/SubPages/Eixo3.js
+++ b/src/SubPages/Eixo3.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import {Card,Row,Col,Button} from 'react-materialize';
 import coins from './icons/coins.png';
diff --git a/src/SubPages/Eixo4.js b/src/SubPages/Eixo4.js
index 0f28f4a0..26efa6d8 100644
--- a/src/SubPages/Eixo4.js
+++ b/src/SubPages/Eixo4.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import {Card,Row,Col,Button} from 'react-materialize';
 import home from './icons/home.png';
diff --git a/src/SubPages/MapsCommunities.js b/src/SubPages/MapsCommunities.js
index 67134732..6ace66a2 100644
--- a/src/SubPages/MapsCommunities.js
+++ b/src/SubPages/MapsCommunities.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import Cookies from 'universal-cookie';
 
diff --git a/src/SubPages/MapsYouth.js b/src/SubPages/MapsYouth.js
index 603bb4ee..2fb778a7 100644
--- a/src/SubPages/MapsYouth.js
+++ b/src/SubPages/MapsYouth.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import Cookies from 'universal-cookie';
 
diff --git a/src/SubPages/QuilombolaAbout.js b/src/SubPages/QuilombolaAbout.js
index d2212b5c..0d093e2c 100644
--- a/src/SubPages/QuilombolaAbout.js
+++ b/src/SubPages/QuilombolaAbout.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import Cookies from 'universal-cookie';
 import {Card} from 'react-materialize';
diff --git a/src/SubPages/QuilombolaIndicator1.js b/src/SubPages/QuilombolaIndicator1.js
index 6f46624c..f9d62fa0 100644
--- a/src/SubPages/QuilombolaIndicator1.js
+++ b/src/SubPages/QuilombolaIndicator1.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import {Col, Row } from 'react-materialize';
 import MapPanel from '../Components/MapPanel';
diff --git a/src/SubPages/QuilombolaIndicator2.js b/src/SubPages/QuilombolaIndicator2.js
index adb6e482..873b1f7d 100644
--- a/src/SubPages/QuilombolaIndicator2.js
+++ b/src/SubPages/QuilombolaIndicator2.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import {Col, Row } from 'react-materialize';
 import MapPanel from '../Components/MapPanel';
@@ -132,7 +154,7 @@ class QuilombolaIndicator2 extends Component {
                   </div>
                   <Loading/>
               </CollapsibleContainer>
-              <CollapsibleContainer id={`${contrastString}brownCollapsible`} header='Porcentagem de renda'>
+              {/* <CollapsibleContainer id={`${contrastString}brownCollapsible`} header='Porcentagem de renda'>
                 <div>
                   <p className="center-align" style={{fontSize:16}}>
                     <b>Mova o seletor abaixo para escolher a porcentagem de financiamento a ser exibida</b>
@@ -158,7 +180,7 @@ class QuilombolaIndicator2 extends Component {
                   />
                   </div>
                   <Loading />
-              </CollapsibleContainer>
+              </CollapsibleContainer> */}
             </Collapsible>
           </Col>
         </Row>
@@ -244,19 +266,19 @@ class QuilombolaIndicator2 extends Component {
         route = type+"_count?dims=year,cod_home_bolsa_familia&filter=quilombola_family:\"1\""
         break;
       case 'Renda média per capita':
-        route = type+"_count?dims=year,per_capita_income&quilombola_family:\"1\"";   //Colocar filtro aqui
+        route = type+"_count?dims=year,per_capita_income&filter=quilombola_family:\"1\"";   //Colocar filtro aqui
         break;
       case 'Porcentagem de renda':
-        route = type+"_count?dims=year,per_capita_income&quilombola_family:\"1\"";   //Colocar filtro aqui
+        route = type+"_count?dims=year,per_capita_income&filter=quilombola_family:\"1\"";   //Colocar filtro aqui
         break;
       default:
         console.log("404");
     }
     if (this.state.ddValues.estado !== null) {
-      route = route + "&filter=uf:" + this.state.ddValues.estado;
+      route = route + "uf:" + this.state.ddValues.estado;
     } else
     if (this.state.ddValues.regiao !== null) {
-      route = route + "&filter=region:" + this.state.ddValues.regiao;
+      route = route + "region:" + this.state.ddValues.regiao;
     }
     this.getDataFromServer(route, head);
   }
diff --git a/src/SubPages/QuilombolaPresentation.js b/src/SubPages/QuilombolaPresentation.js
index fc484b86..096efa96 100644
--- a/src/SubPages/QuilombolaPresentation.js
+++ b/src/SubPages/QuilombolaPresentation.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import Cookies from 'universal-cookie';
 
diff --git a/src/SubPages/QuotasAdmission.js b/src/SubPages/QuotasAdmission.js
index 148652f9..623cfc36 100644
--- a/src/SubPages/QuotasAdmission.js
+++ b/src/SubPages/QuotasAdmission.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import {Col, Row } from 'react-materialize';
 import { Collapsible } from 'react-materialize'
@@ -18,6 +40,10 @@ var cookieStatus = contrastCK.get('contrast');
 const serverURL = getServerURL();
 const type = "admission";
 
+const turnoK = {
+  'null' : 'indefinido',
+}
+
 class QuotasAdmission extends Component {
   constructor(props) {
     super(props);
@@ -73,7 +99,11 @@ class QuotasAdmission extends Component {
             <Collapsible onClick={this.getHeader}>
               <CollapsibleContainer id={`${contrastString}brownCollapsible`} header='Turno'>
                 <div id={'Turno'+type}>
-                  <BuildStackedBar dataKey='Ano' data={organizeJson(this.state.charts['Turno'], "ds_turno_aluno")}/>
+                  <BuildStackedBar 
+                    dataKey='Ano' 
+                    data={organizeJson(this.state.charts['Turno'], "ds_turno_aluno")}
+                    customKeys={turnoK}  
+                  />
                 </div>
                 <Loading/>
               </CollapsibleContainer>
diff --git a/src/SubPages/QuotasEducation.js b/src/SubPages/QuotasEducation.js
index ca1f4501..76b3fc16 100644
--- a/src/SubPages/QuotasEducation.js
+++ b/src/SubPages/QuotasEducation.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import {Col, Row, Card, Icon } from 'react-materialize';
 import MapPanel from '../Components/MapPanel';
diff --git a/src/SubPages/QuotasEvader.js b/src/SubPages/QuotasEvader.js
index b7034bdc..22b41c82 100644
--- a/src/SubPages/QuotasEvader.js
+++ b/src/SubPages/QuotasEvader.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import {Col, Row } from 'react-materialize';
 import MapPanel from '../Components/MapPanel';
@@ -20,6 +42,11 @@ var cookieStatus = contrastCK.get('contrast');
 const serverURL = getServerURL();
 const type = "evader";
 
+const turnoK = {
+  'null' : 'indefinido',
+}
+
+
 class QuotasEvader extends Component {
   constructor(props) {
     super(props);
@@ -82,7 +109,11 @@ class QuotasEvader extends Component {
               <Collapsible onClick={this.getHeader}>
                 <CollapsibleContainer id={`${contrastString}brownCollapsible`} header='Turno'>
                   <div id={'Turno'+type}>
-                    <BuildStackedBar dataKey='Ano' data={organizeJson(this.state.charts['Turno'], "ds_turno_aluno")} />
+                    <BuildStackedBar 
+                      dataKey='Ano' 
+                      data={organizeJson(this.state.charts['Turno'], "ds_turno_aluno")}
+                      customKeys={turnoK}
+                    />
                   </div>
                   <Loading/>
                 </CollapsibleContainer>
diff --git a/src/SubPages/QuotasExtracurricularAct.js b/src/SubPages/QuotasExtracurricularAct.js
index 33b26d3c..b3821883 100644
--- a/src/SubPages/QuotasExtracurricularAct.js
+++ b/src/SubPages/QuotasExtracurricularAct.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import {Col, Row } from 'react-materialize';
 import { Collapsible } from 'react-materialize'
@@ -18,6 +40,10 @@ var cookieStatus = contrastCK.get('contrast');
 const serverURL = getServerURL();
 const type = "extracurricular_activities";
 
+const turnoK = {
+  'null' : 'indefinido',
+}
+
 class QuotasExtracurricularAct extends Component {
   constructor(props) {
     super(props);
@@ -75,7 +101,11 @@ class QuotasExtracurricularAct extends Component {
             <Collapsible onClick={this.getHeader}>
               <CollapsibleContainer id={`${contrastString}brownCollapsible`} header='Turno'>
                 <div id={'Turno'+type}>
-                  <BuildStackedBar dataKey='Ano' data={organizeJson(this.state.charts['Turno'], "ds_turno_aluno")}/>
+                  <BuildStackedBar 
+                    dataKey='Ano' 
+                    data={organizeJson(this.state.charts['Turno'], "ds_turno_aluno")}
+                    customKeys={turnoK}  
+                  />
                 </div>
                 <Loading/>
               </CollapsibleContainer>
diff --git a/src/SubPages/QuotasFies.js b/src/SubPages/QuotasFies.js
index 7cc78330..d67bc878 100644
--- a/src/SubPages/QuotasFies.js
+++ b/src/SubPages/QuotasFies.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import {Col, Row } from 'react-materialize';
 import MapPanel from '../Components/MapPanel';
@@ -209,7 +231,6 @@ class QuotasFies extends Component {
     if(chart !== 'Curso' && chart !== 'Instituição de Ensino')
     axios.get(`${serverURL}${defaultData}`)
       .then(res => {
-        console.log(res)
          const data = res.data.result
          var temp = this.state.charts 
          temp[chart.trim()] = data
diff --git a/src/SubPages/QuotasGraduate.js b/src/SubPages/QuotasGraduate.js
index ce8e945d..9c074efe 100644
--- a/src/SubPages/QuotasGraduate.js
+++ b/src/SubPages/QuotasGraduate.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import {Col, Row } from 'react-materialize';
 import MapPanel from '../Components/MapPanel';
@@ -20,6 +42,10 @@ var cookieStatus = contrastCK.get('contrast');
 const serverURL = getServerURL();
 const type = "graduate";
 
+const turnoK = {
+  'null' : 'indefinido',
+}
+
 class QuotasGraduate extends Component {
   constructor(props) {
     super(props);
@@ -82,7 +108,11 @@ class QuotasGraduate extends Component {
             <Collapsible onClick={this.getHeader}>
               <CollapsibleContainer id={`${contrastString}brownCollapsible`} header='Turno'>
                 <div id={'Turno'+type}>
-                  <BuildStackedBar dataKey='Ano' data={organizeJson(this.state.charts['Turno'], "ds_turno_aluno")}/>
+                  <BuildStackedBar
+                     dataKey='Ano' 
+                     data={organizeJson(this.state.charts['Turno'], "ds_turno_aluno")}
+                     customKeys={turnoK}
+                     />
                 </div>
                 <Loading/>
               </CollapsibleContainer>
diff --git a/src/SubPages/QuotasLoan.js b/src/SubPages/QuotasLoan.js
index f0e9f73b..b6c96745 100644
--- a/src/SubPages/QuotasLoan.js
+++ b/src/SubPages/QuotasLoan.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import {Col, Row } from 'react-materialize';
 import { Collapsible, Icon, Card } from 'react-materialize'
@@ -24,6 +46,10 @@ const serverURL = getServerURL();
 const type = "student_loans";
 const tableClasses = "bordered striped highlight centered";
 
+const turnoK = {
+  'null' : 'indefinido',
+}
+
 class QuotasLoan extends Component {
   constructor(props) {
     super(props);
@@ -80,7 +106,11 @@ class QuotasLoan extends Component {
             <Collapsible onClick={this.getHeader}>
              <CollapsibleContainer id={`${contrastString}brownCollapsible`} header='Turno'>
                 <div>
-                  <BuildStackedBar dataKey='Ano' data={organizeJson(this.state.charts['Turno'], "ds_turno_aluno", "no_ano_pesquisa")} />
+                  <BuildStackedBar 
+                    dataKey='Ano' 
+                    data={organizeJson(this.state.charts['Turno'], "ds_turno_aluno", "no_ano_pesquisa")} 
+                    customKeys={turnoK}  
+                  />
                 </div>
                 <Loading/>
               </CollapsibleContainer>
diff --git a/src/SubPages/QuotasOfferVacancies.js b/src/SubPages/QuotasOfferVacancies.js
index b449ec46..ff03bb34 100644
--- a/src/SubPages/QuotasOfferVacancies.js
+++ b/src/SubPages/QuotasOfferVacancies.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import Cookies from 'universal-cookie';
 import {Collapsible, Row, Col} from 'react-materialize';
diff --git a/src/SubPages/QuotasPROUNI.js b/src/SubPages/QuotasPROUNI.js
index 3d327073..82dcfdf5 100644
--- a/src/SubPages/QuotasPROUNI.js
+++ b/src/SubPages/QuotasPROUNI.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import {Col, Row } from 'react-materialize';
 import MapPanel from '../Components/MapPanel';
diff --git a/src/SubPages/QuotasSocialSupport.js b/src/SubPages/QuotasSocialSupport.js
index a308ab4c..09bf7aa7 100644
--- a/src/SubPages/QuotasSocialSupport.js
+++ b/src/SubPages/QuotasSocialSupport.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import {Col, Row } from 'react-materialize';
 import { Collapsible } from 'react-materialize'
@@ -19,6 +41,10 @@ var cookieStatus = contrastCK.get('contrast');
 const serverURL = getServerURL();
 const type = "social_support";
 
+const turnoK = {
+  'null' : 'indefinido',
+}
+
 class QuotasSocialSupport extends Component {
   constructor(props) {
     super(props);
@@ -74,7 +100,11 @@ class QuotasSocialSupport extends Component {
             <Collapsible onClick={this.getHeader}>
               <CollapsibleContainer id={`${contrastString}brownCollapsible`} header='Turno'>
                 <div id={'Turno'+type}>
-                  <BuildStackedBar dataKey='Ano' data={organizeJson(this.state.charts['Turno'], "ds_turno_aluno")}/>
+                  <BuildStackedBar 
+                    dataKey='Ano' 
+                    data={organizeJson(this.state.charts['Turno'], "ds_turno_aluno")}
+                    customKeys={turnoK}  
+                  />
                 </div>
                 <Loading/>
               </CollapsibleContainer>
diff --git a/src/SubPages/Styles/AfricanRights.css b/src/SubPages/Styles/AfricanRights.css
index 33fc8ced..eb03c164 100644
--- a/src/SubPages/Styles/AfricanRights.css
+++ b/src/SubPages/Styles/AfricanRights.css
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 .quota-title-african-origin{
     color: #0e3958;
 }
diff --git a/src/SubPages/Styles/Eixo1.css b/src/SubPages/Styles/Eixo1.css
index 4bc59f88..c0fc8b84 100644
--- a/src/SubPages/Styles/Eixo1.css
+++ b/src/SubPages/Styles/Eixo1.css
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 /*###################*/
 /*ELEMENTOS DA PAGINA*/
 .eixoHeaderQ{
diff --git a/src/SubPages/Styles/Eixo2.css b/src/SubPages/Styles/Eixo2.css
index 0611c3b5..f1a56678 100644
--- a/src/SubPages/Styles/Eixo2.css
+++ b/src/SubPages/Styles/Eixo2.css
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 /*###################*/
 /*ELEMENTOS DA PAGINA*/
 .eixoHeaderQ{
diff --git a/src/SubPages/Styles/Eixo3.css b/src/SubPages/Styles/Eixo3.css
index b74487fa..2433c17a 100644
--- a/src/SubPages/Styles/Eixo3.css
+++ b/src/SubPages/Styles/Eixo3.css
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 /*###################*/
 /*ELEMENTOS DA PAGINA*/
 .eixoHeader{
diff --git a/src/SubPages/Styles/Eixo4.css b/src/SubPages/Styles/Eixo4.css
index afab1b56..a6fc98e0 100644
--- a/src/SubPages/Styles/Eixo4.css
+++ b/src/SubPages/Styles/Eixo4.css
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 /*###################*/
 /*ELEMENTOS DA PAGINA*/
 .eixoHeaderQ{
diff --git a/src/SubPages/Styles/MapsCommunities.css b/src/SubPages/Styles/MapsCommunities.css
index e69de29b..4e46199e 100644
--- a/src/SubPages/Styles/MapsCommunities.css
+++ b/src/SubPages/Styles/MapsCommunities.css
@@ -0,0 +1,22 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
diff --git a/src/SubPages/Styles/MapsYouth.css b/src/SubPages/Styles/MapsYouth.css
index e69de29b..4e46199e 100644
--- a/src/SubPages/Styles/MapsYouth.css
+++ b/src/SubPages/Styles/MapsYouth.css
@@ -0,0 +1,22 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
diff --git a/src/SubPages/Styles/QuilombolaAbout.css b/src/SubPages/Styles/QuilombolaAbout.css
index 01687830..eebf3c2a 100644
--- a/src/SubPages/Styles/QuilombolaAbout.css
+++ b/src/SubPages/Styles/QuilombolaAbout.css
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 .gridTemplate{
   display:grid;
   grid-template-columns: 1fr;
diff --git a/src/SubPages/Styles/QuilombolaIndicator1.css b/src/SubPages/Styles/QuilombolaIndicator1.css
index debecb5d..a3ff6c9e 100644
--- a/src/SubPages/Styles/QuilombolaIndicator1.css
+++ b/src/SubPages/Styles/QuilombolaIndicator1.css
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 .quilombola-title{
     color: #ca3829;
 }
diff --git a/src/SubPages/Styles/QuilombolaPresentation.css b/src/SubPages/Styles/QuilombolaPresentation.css
index 8fc1fa42..1c52e6bf 100644
--- a/src/SubPages/Styles/QuilombolaPresentation.css
+++ b/src/SubPages/Styles/QuilombolaPresentation.css
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 .apresentacao{
   margin-top: 1cm;
 }
diff --git a/src/SubPages/Styles/QuotasAdmission.css b/src/SubPages/Styles/QuotasAdmission.css
index f5c9fbed..56b42259 100644
--- a/src/SubPages/Styles/QuotasAdmission.css
+++ b/src/SubPages/Styles/QuotasAdmission.css
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 /* Contrast Colors */
 
 #ContrastbrownCollapsible > .collapsible-header{
diff --git a/src/SubPages/Styles/QuotasEducation.css b/src/SubPages/Styles/QuotasEducation.css
index 8e943854..7e61e741 100644
--- a/src/SubPages/Styles/QuotasEducation.css
+++ b/src/SubPages/Styles/QuotasEducation.css
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 .frac { display: inline-block;
   position: relative;
   vertical-align: middle;
diff --git a/src/SubPages/Styles/QuotasEvader.css b/src/SubPages/Styles/QuotasEvader.css
index ba86767f..e0dc36d2 100644
--- a/src/SubPages/Styles/QuotasEvader.css
+++ b/src/SubPages/Styles/QuotasEvader.css
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 .frac { display: inline-block;
     position: relative;
     vertical-align: middle;
diff --git a/src/SubPages/Styles/QuotasExtracurricularAct.css b/src/SubPages/Styles/QuotasExtracurricularAct.css
index f5c9fbed..56b42259 100644
--- a/src/SubPages/Styles/QuotasExtracurricularAct.css
+++ b/src/SubPages/Styles/QuotasExtracurricularAct.css
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 /* Contrast Colors */
 
 #ContrastbrownCollapsible > .collapsible-header{
diff --git a/src/SubPages/Styles/QuotasFies.css b/src/SubPages/Styles/QuotasFies.css
index 1a7ec135..c47e678d 100644
--- a/src/SubPages/Styles/QuotasFies.css
+++ b/src/SubPages/Styles/QuotasFies.css
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 #percentfies::-webkit-slider-thumb {
     background-color: #78752e;
 }
diff --git a/src/SubPages/Styles/QuotasGraduate.css b/src/SubPages/Styles/QuotasGraduate.css
index 1b2434f4..fe3ba7c3 100644
--- a/src/SubPages/Styles/QuotasGraduate.css
+++ b/src/SubPages/Styles/QuotasGraduate.css
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 .quota-title {
     color: #78752e;
 }
diff --git a/src/SubPages/Styles/QuotasLoan.css b/src/SubPages/Styles/QuotasLoan.css
index f1c77e2c..9a60d971 100644
--- a/src/SubPages/Styles/QuotasLoan.css
+++ b/src/SubPages/Styles/QuotasLoan.css
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 #tableData {
     display: block;
     height: 100%;
diff --git a/src/SubPages/Styles/QuotasOfferVacancies.css b/src/SubPages/Styles/QuotasOfferVacancies.css
index 27e31bc3..ee08578d 100644
--- a/src/SubPages/Styles/QuotasOfferVacancies.css
+++ b/src/SubPages/Styles/QuotasOfferVacancies.css
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 #brownShiftCollapsible > .collapsible-body {
   height: 475px;
   overflow-y: auto;
diff --git a/src/SubPages/Styles/QuotasPROUNI.css b/src/SubPages/Styles/QuotasPROUNI.css
index 2ead20a6..b8828974 100644
--- a/src/SubPages/Styles/QuotasPROUNI.css
+++ b/src/SubPages/Styles/QuotasPROUNI.css
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 .quota-title {
   color: #78752e;
 }
diff --git a/src/SubPages/Styles/QuotasSocialSupport.css b/src/SubPages/Styles/QuotasSocialSupport.css
index f5c9fbed..56b42259 100644
--- a/src/SubPages/Styles/QuotasSocialSupport.css
+++ b/src/SubPages/Styles/QuotasSocialSupport.css
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 /* Contrast Colors */
 
 #ContrastbrownCollapsible > .collapsible-header{
diff --git a/src/SubPages/Styles/YouthEducation.css b/src/SubPages/Styles/YouthEducation.css
index 821ae126..e18c8fc0 100644
--- a/src/SubPages/Styles/YouthEducation.css
+++ b/src/SubPages/Styles/YouthEducation.css
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 .eixoHeader{
     color: #0c6559;
 }
diff --git a/src/SubPages/Styles/YouthJob.css b/src/SubPages/Styles/YouthJob.css
index d09bc584..ebff5b3f 100644
--- a/src/SubPages/Styles/YouthJob.css
+++ b/src/SubPages/Styles/YouthJob.css
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 .eixoHeader{
     color: #0c6559;
 }
diff --git a/src/SubPages/Styles/YouthPresentation.css b/src/SubPages/Styles/YouthPresentation.css
index 990f19c8..55d38d03 100644
--- a/src/SubPages/Styles/YouthPresentation.css
+++ b/src/SubPages/Styles/YouthPresentation.css
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 .apresentacao{
   margin-top: 1cm;
 }
diff --git a/src/SubPages/Styles/YouthVulnerabilities.css b/src/SubPages/Styles/YouthVulnerabilities.css
index 9a9af8ee..753cc014 100644
--- a/src/SubPages/Styles/YouthVulnerabilities.css
+++ b/src/SubPages/Styles/YouthVulnerabilities.css
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 .eixoHeader{
     color: #0c6559;
 }
diff --git a/src/SubPages/YouthAbout.js b/src/SubPages/YouthAbout.js
index 106919e4..0429ab84 100644
--- a/src/SubPages/YouthAbout.js
+++ b/src/SubPages/YouthAbout.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import Cookies from 'universal-cookie';
 import './Styles/YouthPresentation.css'
diff --git a/src/SubPages/YouthEducation.js b/src/SubPages/YouthEducation.js
index 9f1e2632..6a7894e6 100644
--- a/src/SubPages/YouthEducation.js
+++ b/src/SubPages/YouthEducation.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import {Card, Col, Row,Button} from 'react-materialize';
 import CardFooter from '../Components/CardFooter';
diff --git a/src/SubPages/YouthJob.js b/src/SubPages/YouthJob.js
index 38b08b2d..4382dd14 100644
--- a/src/SubPages/YouthJob.js
+++ b/src/SubPages/YouthJob.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import {Card, Col, Row,Button} from 'react-materialize';
 import coins from './icons/coins.png';
diff --git a/src/SubPages/YouthPresentation.js b/src/SubPages/YouthPresentation.js
index 3c05f50f..cd5d591b 100644
--- a/src/SubPages/YouthPresentation.js
+++ b/src/SubPages/YouthPresentation.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import Cookies from 'universal-cookie';
 import './Styles/YouthPresentation.css'
diff --git a/src/SubPages/YouthVulnerabilities.js b/src/SubPages/YouthVulnerabilities.js
index 4cde9988..19cb3ae3 100644
--- a/src/SubPages/YouthVulnerabilities.js
+++ b/src/SubPages/YouthVulnerabilities.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import {Card,Row,Col, Button} from 'react-materialize';
 import CardFooter from '../Components/CardFooter';
diff --git a/src/Youth.js b/src/Youth.js
index ce3ce3d3..413e3fe5 100644
--- a/src/Youth.js
+++ b/src/Youth.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React, { Component } from 'react';
 import NavigationBar from './Components/NavigationBar'
 import AppFooter from './Components/AppFooter'
diff --git a/src/enviroment.js b/src/enviroment.js
index 8843a6b7..ac271099 100644
--- a/src/enviroment.js
+++ b/src/enviroment.js
@@ -1,5 +1,27 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 const patterns = {
-  "ds_turno_aluno": ['Matutino', 'Vespertino', 'Noturno', 'Integral', 'Não aplicável'],
+  "ds_turno_aluno": ['Matutino', 'Vespertino', 'Noturno', 'Integral', 'Não aplicável','null'],
   "tipo_cota": ['Ampla Concorrência PcD','Ampla Concorrência não PcD','Renda inferior a 1,5 salário mínimo, PPI e PcD', 'Renda inferior a 1,5 salário mínimo, PPI e não PcD','Renda inferior a 1,5 salário mínimo PcD','Renda inferior a 1,5 salário mínimo não PcD', 'Renda superior a 1,5 salário mínimo, PPI e PcD', 'Renda superior a 1,5 salário mínimo, PPI e não PcD', 'Renda superior a 1,5 salário mínimo e PcD', 'Renda superior a 1,5 salário mínimo e não PcD'],  
   "ds_sexo_aluno": ['Feminino', 'Masculino'],
   "ds_cor_raca_aluno": ['Aluno não quis declarar cor/raça', 'Amarela', 'Branca', 'Indígena', 'Não dispõe da informação', 'Parda', 'Preta'],
@@ -29,7 +51,8 @@ export function range(start, end) {
 }
 
 export function getServerURL() {
-  //return "http://localhost:4000/api/v1/"
+  // return "http://smppirhomologa.c3sl.ufpr.br:4545/api/v1/"
+  //return 'http://localhost:4000/api/v1/'
   //caso for fazer build para homologa, utilizar o return de baixo ao invés do de cima
   return "http://seppirhomologa.c3sl.ufpr.br/data/api/v1/"
 }
diff --git a/src/index.css b/src/index.css
index b4cc7250..e09097c9 100644
--- a/src/index.css
+++ b/src/index.css
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 body {
   margin: 0;
   padding: 0;
diff --git a/src/index.js b/src/index.js
index fae3e350..b9f19c7a 100644
--- a/src/index.js
+++ b/src/index.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React from 'react';
 import ReactDOM from 'react-dom';
 import './index.css';
diff --git a/src/maps/br.js b/src/maps/br.js
index 3714f8ad..b87deff3 100644
--- a/src/maps/br.js
+++ b/src/maps/br.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React from 'react'
 import styled from 'styled-components'
 import './colors.css';
diff --git a/src/maps/colors.css b/src/maps/colors.css
index 9bd208db..6976621b 100644
--- a/src/maps/colors.css
+++ b/src/maps/colors.css
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 /*Fixed Colors*/
 path#acre { fill: #78752E }
 path#alagoas { fill: #C0572B }
diff --git a/src/maps/heatbr.js b/src/maps/heatbr.js
index ec07880a..1e161f7d 100644
--- a/src/maps/heatbr.js
+++ b/src/maps/heatbr.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 import React from 'react'
 import styled from 'styled-components'
 import './heatcolors.css';
diff --git a/src/maps/heatcolors.css b/src/maps/heatcolors.css
index 5ef499bf..a37a8c89 100644
--- a/src/maps/heatcolors.css
+++ b/src/maps/heatcolors.css
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 
 /*Selected Color*/
 
diff --git a/src/registerServiceWorker.js b/src/registerServiceWorker.js
index 4a3ccf02..96f722ea 100644
--- a/src/registerServiceWorker.js
+++ b/src/registerServiceWorker.js
@@ -1,3 +1,25 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+
 // In production, we register a service worker to serve assets from local cache.
 
 // This lets the app load faster on subsequent visits in production, and gives
-- 
GitLab


From fae621e72ac5b5ae36c24e55937f11f3b67e5e26 Mon Sep 17 00:00:00 2001
From: eht17 <eht17@inf.ufpr.br>
Date: Mon, 11 Feb 2019 11:31:57 -0200
Subject: [PATCH 05/23] Quilombolas indicator eixo4

---
 src/Charts/BuildMixedBar.js           | 186 ++++++++++
 src/Charts/BuildStackedBar.js         |  50 ++-
 src/MainPage.js                       |   2 +-
 src/Quilombola.js                     |   4 +-
 src/SubPages/AfricanSustainability.js |   6 +-
 src/SubPages/QuilombolaIndicator2.js  |   4 +-
 src/SubPages/QuilombolaIndicator3.js  | 494 ++++++++++++++++++++++++++
 src/enviroment.js                     | 202 ++++++-----
 8 files changed, 841 insertions(+), 107 deletions(-)
 create mode 100644 src/Charts/BuildMixedBar.js
 create mode 100644 src/SubPages/QuilombolaIndicator3.js

diff --git a/src/Charts/BuildMixedBar.js b/src/Charts/BuildMixedBar.js
new file mode 100644
index 00000000..da0d57e8
--- /dev/null
+++ b/src/Charts/BuildMixedBar.js
@@ -0,0 +1,186 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+import React, { Component } from 'react';
+import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, Legend, ResponsiveContainer, LabelList } from "recharts";
+import './Styles/BuildStackedBar.css';
+
+const getPercent = (value, total) => {
+  const ratio = total > 0 ? value / total : 0;
+  return toPercent(ratio, 2);
+};
+
+const toPercent = (decimal, fixed = 0) => {
+  return `${(decimal * 100).toFixed(fixed)}%`;
+};
+
+const COLORS = ["#0E3959", "#0B7B6B", "#EA7C27", "#B66526", "#CA3828", "#363B1B0", "#78752E",
+  "#081A24", "#211517", "#763618", "#722417", "#C93829", "#363B1BU", "#003300"];
+
+const renderTooltipContent = (o) => {
+  const { payload, label } = o;
+  const total = payload.reduce((result, entry) => (result + entry.value), 0);
+  return (
+    <div className={"z-depth-3"} style={{ backgroundColor: "white" }}>
+      <div className="customized-tooltip-content" style={{ margin: 25 }}>
+        <div className="total">
+          <div className={"tooltipCenter"}><b>{`${label}`}</b></div>
+        </div>
+        <ul className="list">
+          {
+            payload.reverse().map((entry, index) => (
+              <li key={`item-${index}`} style={{ color: entry.color }}>
+                {`${entry.name}: ${entry.value} (${getPercent(entry.value, total)})`}
+              </li>
+            ))
+          }
+          <li id={"totalText"}><b>Total: </b>{total}</li>
+        </ul>
+      </div>
+    </div>
+  );
+};
+
+const renderCustomizedLabel = (props) => {
+  const { x, y, width, height, value } = props;
+  const radius = 10;
+
+  return (
+    <g>
+      <circle cx={x + width / 2} cy={y - radius} r={radius} fill="#000" />
+      <text x={x + width / 2} y={y - radius} fill="#fff" textAnchor="middle" dominantBaseline="middle">
+        {value}
+      </text>
+    </g>
+  );
+};
+
+function verifyKeyBar(bar, keysBars) {
+  let verifiedKey = 'a'
+  if (keysBars != undefined) {
+    for (let key in keysBars) {
+      if (bar == key) verifiedKey = keysBars[key]
+    }
+  }
+  return verifiedKey
+};
+
+class BuildStackedBar extends Component {
+  constructor(props) {
+    super(props);
+    this.state = {
+      data: null,
+    };
+    this.filterArrayByPercent = this.filterArrayByPercent.bind(this);
+  }
+  componentWillReceiveProps(nextProps) {
+    var data = nextProps.data;
+    if (nextProps.percent !== undefined)
+      data = this.filterArrayByPercent(data, nextProps.percent);
+    this.setState({ data: data })
+  }
+
+  render() {
+    var newData = this.state.data;
+    
+    // Change chart height and interval if it was specified
+    var cardHeight = 300;
+    var interval = 0;
+    if (this.props.height !== undefined) cardHeight = this.props.height;
+    if (this.props.interval !== undefined) interval = this.props.interval;
+    
+    if (this.state.data && this.state.data.length > 0 && this.props.customKeys !== undefined) {
+      newData = newData.map(function (element) {
+        return this.renameKeys(element, this.props.customKeys);
+      }, this);
+    }
+    var dataKey = this.props.dataKey
+    var label = this.props.label
+    var bKeys = this.props.bKeys
+    var keysBars = this.props.keysBars
+
+    if (this.state.data !== null && this.state.data !== undefined && this.state.data.length > 0)
+      return (
+        <ResponsiveContainer minHeight={cardHeight}>
+          <BarChart width={600} height={cardHeight} data={newData}
+            margin={{ top: 20, right: 0, left: 0, bottom: 5 }}>
+            <XAxis dataKey={this.props.dataKey} interval={interval} />
+            <YAxis />
+            <CartesianGrid strokeDasharray="3 3" />
+            <Tooltip content={renderTooltipContent} />
+            <Legend />
+            {Object.keys(newData[0]).map(function (bar, index) {
+              if (bar !== dataKey) {
+                if (bar !== label) {
+                  if (label == undefined)
+                    return (
+                      <Bar 
+                        isAnimationActive = {false} 
+                        key = {Math.random()} 
+                        dataKey = {bar} 
+                        stackId = {verifyKeyBar(bar,keysBars)} 
+                        fill = {COLORS[index]} 
+                      />
+                    )
+                  else
+                    return (
+                      <Bar 
+                        isAnimationActive = {false} 
+                        key = {Math.random()} 
+                        dataKey = {bar} 
+                        stackId = {verifyKeyBar(bar, keysBars)} 
+                        fill = {COLORS[index]}
+                      >
+                        {index === Object.keys(newData[0]).length - 1 ?
+                          // <LabelList dataKey={label} content={renderCustomizedLabel} /> : null}
+                          <LabelList dataKey={label} position="top" /> : null}
+                      </Bar>
+                    )
+                }
+              }
+              return null;
+            })
+            }
+          </BarChart>
+        </ResponsiveContainer>
+      );
+    else
+      return (<div> </div>);
+  }
+
+  filterArrayByPercent(data, percent) {
+    var arrayFiltered = [];
+    data.forEach((y) => {
+      arrayFiltered.push({ "Quantidade de pessoas": y[percent], "Ano": y.Ano });
+    });
+    return arrayFiltered;
+  }
+
+  renameKeys(obj, newKeys) {
+    const keyValues = Object.keys(obj).map(key => {
+      const newKey = newKeys[key] || key;
+      return { [newKey]: obj[key] };
+    });
+    return Object.assign({}, ...keyValues);
+  }
+
+}
+
+export default BuildStackedBar;
diff --git a/src/Charts/BuildStackedBar.js b/src/Charts/BuildStackedBar.js
index c0b26647..1e3c6563 100644
--- a/src/Charts/BuildStackedBar.js
+++ b/src/Charts/BuildStackedBar.js
@@ -21,7 +21,7 @@ along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
 
 
 import React, { Component } from 'react';
-import {BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, Legend, ResponsiveContainer} from "recharts";
+import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, Legend, ResponsiveContainer, LabelList} from "recharts";
 import './Styles/BuildStackedBar.css';
 
 const getPercent = (value, total) => {
@@ -33,7 +33,8 @@ const toPercent = (decimal, fixed = 0) => {
 	return `${(decimal * 100).toFixed(fixed)}%`;
 };
 
-const COLORS = ["#0E3959", "#0B7B6B", "#EA7C27", "#B66526", "#CA3828", "#363B1B", "#78752E", "#081A24", "#211517","#763618", "#722417", "#C93829", "#363B1BU"];
+const COLORS = ["#0E3959", "#0B7B6B", "#EA7C27", "#B66526", "#CA3828", "#363B1B0", "#78752E", 
+                "#081A24", "#211517", "#763618", "#722417", "#C93829", "#363B1BU", "#003300"];
 
 const renderTooltipContent = (o) => {
   const { payload, label } = o;
@@ -59,11 +60,25 @@ const renderTooltipContent = (o) => {
   );
 };
 
+const renderCustomizedLabel = (props) => {
+    const { x, y, width, height, value } = props;
+    const radius = 10;
+
+    return (
+        <g>
+            <circle cx={x + width / 2} cy={y - radius} r={radius} fill="#000" />
+            <text x={x + width / 2} y={y - radius} fill="#fff" textAnchor="middle" dominantBaseline="middle">
+                {value}
+            </text>
+        </g>
+    );
+};
+
 class BuildStackedBar extends Component {
     constructor(props) {
         super(props);
         this.state = {
-            data: null
+            data: null,
         };
         this.filterArrayByPercent = this.filterArrayByPercent.bind(this);
     }
@@ -76,25 +91,46 @@ class BuildStackedBar extends Component {
 
 	render () {
         var newData = this.state.data;
+
+        // Change chart height if it was specified
+        var cardHeight = 300;
+        var interval = 0;
+        if (this.props.height !== undefined) cardHeight = this.props.height;
+        if (this.props.interval !== undefined) interval = this.props.interval;
+
         if(this.state.data && this.state.data.length > 0 && this.props.customKeys !== undefined) {
             newData = newData.map(function(element) {
                 return this.renameKeys(element, this.props.customKeys);
             }, this);
         }
         var dataKey = this.props.dataKey
+        var label = this.props.label
+
         if(this.state.data !== null && this.state.data !== undefined && this.state.data.length > 0)
             return (
-            <ResponsiveContainer minHeight={300}>  
-                <BarChart width={600} height={300} data={newData}
+            <ResponsiveContainer minHeight={cardHeight}>  
+                    <BarChart width={600} height={cardHeight} data={newData}
                         margin={{top: 20, right: 0, left: 0, bottom: 5}}>
-                    <XAxis dataKey={this.props.dataKey}/>
+                    <XAxis dataKey={this.props.dataKey} interval={interval}/>
                     <YAxis/>
                     <CartesianGrid strokeDasharray="3 3"/>
                     <Tooltip content={renderTooltipContent}/>
                     <Legend />
                     { Object.keys(newData[0]).map(function(bar, index) {
                         if(bar !== dataKey) {
-                            return <Bar isAnimationActive={false} key={Math.random()} dataKey={bar} stackId="a" fill={COLORS[index]} />}
+                            if(label == undefined) {
+                                return <Bar isAnimationActive={false} key={Math.random()} dataKey={bar} stackId="a" fill={COLORS[index]} />
+                            }
+                            else if(bar !== label) {
+                                return (
+                                    <Bar isAnimationActive={false} key={Math.random()} dataKey={bar} stackId="a" fill={COLORS[index]}>
+                                        {index === Object.keys(newData[0]).length - 1?
+                                            // <LabelList dataKey={label} content={renderCustomizedLabel} /> : null}
+                                            <LabelList dataKey={label} position="top" /> : null}
+                                    </Bar>
+                                )
+                            }
+                        }
                         return null;
                     })
                     }
diff --git a/src/MainPage.js b/src/MainPage.js
index 9139330a..331d6af4 100644
--- a/src/MainPage.js
+++ b/src/MainPage.js
@@ -127,6 +127,6 @@ const subpages2 = {'route': '/juventude', 'links':['VULNERABILIDADES', 'EDUCAÇ
 // const subpages3 = {'route': '/mapas', 'links':['COMUNIDADES', 'JUVENTUDE VIVA']}
 const subpages4 = {'route': '/matrizAfricana', 'links':["DIREITOS", "CULTURA", "SUSTENTABILIDADE"]}
 const subpages5 = {'route': '/cotas', 'links':['EVASÃO', 'CONCLUINTES', 'ESCOLARIDADE', 'FIES', 'PROUNI', 'FINANCIAMENTO', 'ATIVIDADE EXTRACURRICULAR', 'INGRESSO', 'APOIO SOCIAL', 'VAGAS OFERTADAS']}
-const subpages6 = {'route': '/quilombola', 'links':['EIXO 2','EIXO 3']}
+const subpages6 = {'route': '/quilombola', 'links':['EIXO 2','EIXO 3','EIXO 4']}
 
 export default MainPage;
diff --git a/src/Quilombola.js b/src/Quilombola.js
index 4602740a..fa6574aa 100644
--- a/src/Quilombola.js
+++ b/src/Quilombola.js
@@ -31,6 +31,7 @@ import {sleep, homeURL} from './enviroment'
 import ContrastBar from './Components/ContrastBar'
 import QuilombolaIndicator1 from './SubPages/QuilombolaIndicator1'
 import QuilombolaIndicator2 from './SubPages/QuilombolaIndicator2'
+import QuilombolaIndicator3 from './SubPages/QuilombolaIndicator3'
 
 var ck = new Cookies();
 var contrastCK = new Cookies();
@@ -54,7 +55,7 @@ class Quilombola extends Component {
     }
     const cookie = new Cookies();
     var clicked = cookie.get('mainPageClicked')
-    var states = {"EIXO 2": true,"EIXO 3": false}
+    var states = {"EIXO 2": true,"EIXO 3": false,"EIXO 4": false}
     if (clicked !== undefined){
       if (clicked in states){
         states["EIXO 2"] = false;
@@ -77,6 +78,7 @@ class Quilombola extends Component {
           <Tabs className={`tab-demo z-depth-1 ${contrastString}mainPageRedTab`} onChange={this.whereIAm}>
             <Tab title="EIXO 2" active={states["EIXO 2"]}> <QuilombolaIndicator1/> </Tab>
             <Tab title="EIXO 3" active={states["EIXO 3"]}> <QuilombolaIndicator2/> </Tab>
+            <Tab title="EIXO 4" active={states["EIXO 4"]}> <QuilombolaIndicator3/> </Tab>
           </Tabs>
         </div>
         <AppFooter/>
diff --git a/src/SubPages/AfricanSustainability.js b/src/SubPages/AfricanSustainability.js
index 3d153ee1..4e5b6583 100644
--- a/src/SubPages/AfricanSustainability.js
+++ b/src/SubPages/AfricanSustainability.js
@@ -27,7 +27,7 @@ import CollapsibleContainer from '../Components/CollapsibleContainer'
 import Loading from '../Components/Loading'
 import BuildStackedBar from '../Charts/BuildStackedBar'
 import axios from 'axios';
-import { getServerURL, deactivateLoadingAnimation, createIntervals} from '../enviroment'
+import { getServerURL, deactivateLoadingAnimation, createIntervals, organizeJson} from '../enviroment'
 
 import './Styles/AfricanRights.css'
 
@@ -88,8 +88,8 @@ class AfricanSustainability extends Component {
                       </Collection>
                     </div>
                     <BuildStackedBar
-                      dataKey={'ano_pesquisa'}
-                      data={this.state.charts['Renda média per capita']}
+                      dataKey={'Ano'}
+                      data={organizeJson(this.state.charts['Renda média per capita'], 'vlr_renda_media_fam', 'ano_pesquisa')}
                       customKeys={customKey}
                     />
                   </div>
diff --git a/src/SubPages/QuilombolaIndicator2.js b/src/SubPages/QuilombolaIndicator2.js
index 873b1f7d..1b885eae 100644
--- a/src/SubPages/QuilombolaIndicator2.js
+++ b/src/SubPages/QuilombolaIndicator2.js
@@ -147,8 +147,8 @@ class QuilombolaIndicator2 extends Component {
                       </Collection>
                     </div>
                     <BuildStackedBar
-                      dataKey={'ano_pesquisa'}
-                      data={this.state.charts['Renda média per capita']}
+                      dataKey='Ano'
+                      data={organizeJson(this.state.charts['Renda média per capita'], "vlr_renda_media_fam", "ano_pesquisa")}
                       customKeys={totalrenda}
                     />
                   </div>
diff --git a/src/SubPages/QuilombolaIndicator3.js b/src/SubPages/QuilombolaIndicator3.js
new file mode 100644
index 00000000..5df14164
--- /dev/null
+++ b/src/SubPages/QuilombolaIndicator3.js
@@ -0,0 +1,494 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+
+import React, { Component } from 'react';
+import {Col, Row } from 'react-materialize';
+import MapPanel from '../Components/MapPanel';
+import { Collapsible, Collection, CollectionItem } from 'react-materialize'
+import CollapsibleContainer from '../Components/CollapsibleContainer';
+import './Styles/QuilombolaIndicator1.css';
+import axios from 'axios';
+import { getServerURL, organizeJson, getRegionState, deactivateLoadingAnimation, getStateName, searchHash,
+         createIntervals, filterJson } from '../enviroment'
+import BuildStackedBar from '../Charts/BuildStackedBar';
+import BuildMixedBar from '../Charts/BuildMixedBar';
+import BuildBar from '../Charts/BuildBar';
+import Loading from '../Components/Loading';
+import Cookies from 'universal-cookie';
+
+
+var ck = new Cookies();
+var contrastCK = new Cookies();
+var cookieStatus = contrastCK.get('contrast');
+const serverURL = getServerURL();
+const type = "cad_unico";
+const AnoLabel = {
+  '0': 'Não',
+  '1': 'Sim',
+  'null': 'Indefinido',
+}
+const Education = {
+  'null': 'Sem informações',
+  '1': 'Creche',
+  '2': 'Pré-escola (exceto CA)',
+  '3': 'Classe de Alfabetização - CA',
+  '4': 'Ensino Fundamental 1ª a 4ª séries',
+  '5': 'Ensino Fundamental 5ª a 8ª séries',
+  '6': 'Ensino fundamental (duração 9 anos)',
+  '7': 'Ensino Fundamental Especial',
+  '8': 'Ensino Médio',
+  '9': 'Ensino Médio Especial',
+  '10': 'Ensino Fundamental EJA - séries iniciais',
+  '11': 'Ensino Fundamental EJA - séries finais',
+  '12': 'Ensino Médio EJA',
+  '13': 'Superior, Aperfeiçoamento, Especialização, Mestrado, Doutorado',
+  '14': 'Alfabeticação para Adultos',
+  '15': 'Nenhum',
+}
+const Gender = {
+  '1': 'Masculino',
+  '2': 'Feminino'
+}
+
+
+class QuilombolaIndicator3 extends Component {
+  constructor(props) {
+    super(props);
+    this.state = {
+      charts:{'Tipo de domicílio': null, "Forma de iluminação - Pessoas": null, "Forma de iluminação - Famílias": null,
+              "Destino do lixo": null,"Forma de abastecimento de água": null, "Tipos de escoamento sanitário": null},
+      ddValues:{'regiao': null, 'estado': null},
+      graduates:{},
+      campiNames:[],
+      tagID: '', 
+      tagName:''
+    };
+    this.getDataFromAutocomplete = this.getDataFromAutocomplete.bind(this);
+    this.getDataFromServer = this.getDataFromServer.bind(this);
+    this.createRoute = this.createRoute.bind(this);
+    this.getHeader = this.getHeader.bind(this);
+    this.getDDValues = this.getDDValues.bind(this);
+    this.updateCharts = this.updateCharts.bind(this);
+    this.getData = this.getData.bind(this);
+    this.getCampiFromServer = this.getCampiFromServer.bind(this);
+    this.saveAutocompleteContent = this.saveAutocompleteContent.bind(this);
+    this.campiFilter = this.campiFilter.bind(this);
+
+  }
+
+  render() {
+    var contrastString = '';
+    if(cookieStatus === 'true'){
+      contrastString = 'Contrast'
+    }
+    if (ck.get('mainPageClicked') === "EIXO 4")
+    return (
+      <div id={type}>
+        <Row>
+          <Col s={12} m={10} l={10} offset={'m1 l1'}>
+            <div className={`${contrastString}subpage-margin`}>
+              <h5 className={`${contrastString}quilombola-title`}>Eixo 4</h5>
+              <MapPanel 
+                onChange={this.updateCharts} 
+                getDDValues={this.getDDValues}
+                getData={this.getData} 
+                location={type}
+              />
+            </div>
+          </Col>
+          
+          <Col s={12} m={10} l={10} offset={'m1 l1'}>
+            <Collapsible onClick={this.getHeader}>
+              <CollapsibleContainer id={`${contrastString}redCollapsible`} header='Número de famílias'>
+                <div id={'Numero_de_familias' + type}>
+                  <div id={'collection-info'}>
+                    <Collection>
+                      <CollectionItem>
+                        Número de famílias quilombolas que recebem Bolsa Família.
+                      </CollectionItem>
+                    </Collection>
+                  </div>
+                  <BuildMixedBar
+                    dataKey='Ano'
+                    data={organizeJson(this.state.charts['Número de famílias'], "marc_pbf", "ano_pesquisa")}
+                    customKeys={AnoLabel}
+                    keysBars={{ 'Não': 'b', 'Sim': 'c', 'Indefinido': 'b' }}
+                  />
+                </div>
+                <Loading />
+              </CollapsibleContainer>
+              <CollapsibleContainer id={`${contrastString}redCollapsible`} header='Escolaridade Segundo CadÚnico'>
+                <div id={'Escolaridade_Segundo_Cadunico' + type}>
+                  <BuildMixedBar
+                    dataKey='Ano'
+                    data={
+                      organizeJson(this.state.charts['Escolaridade Segundo CadÚnico'], "cod_curso_frequentou_pessoa_memb",
+                        "ano_pesquisa")
+                    }
+                    customKeys={Education}
+                    height={600}
+                    keysBars={{ 'NA': 'b', 'Sem informações': 'b' }}
+                  />
+                </div>
+                <Loading />
+              </CollapsibleContainer>
+              <CollapsibleContainer id={`${contrastString}redCollapsible`} header='População no CadÚnico por Faixa Etária'>
+                <div id={'Populacao_Faixa_Etaria' + type}>
+                  <BuildStackedBar
+                    dataKey='Ano'
+                    data={organizeJson(this.state.charts['População no CadÚnico por Faixa Etária'], "idade", "ano_pesquisa")}
+                    // height={600}
+                  />
+                </div>
+                <Loading />
+              </CollapsibleContainer>
+              <CollapsibleContainer id={`${contrastString}redCollapsible`} header='População no CadÚnico por Gênero'>
+                <div id={'Populacao_Genero' + type}>
+                  <BuildBar
+                    dataKey='Ano'
+                    data={organizeJson(this.state.charts['População no CadÚnico por Gênero'], "genero", "ano_pesquisa")}
+                    customKeys={Gender}
+                  />
+                </div>
+                <Loading />
+              </CollapsibleContainer>
+              <CollapsibleContainer id={`${contrastString}redCollapsible`} 
+                header='População no CadÚnico por Faixa Etária e Gênero'>
+                <div id={'Populacao_Faixa_Etaria_Genero' + type}>
+                  <div id={'collection-info'}>
+                    <Collection>
+                      <CollectionItem>
+                        'F' identifica pessoas do sexo feminino e 'M' do masculino.
+                      </CollectionItem>
+                    </Collection>
+                  </div>
+                  <BuildStackedBar
+                    dataKey = 'ano_pesquisa'
+                    data  = {this.state.charts['População no CadÚnico por Faixa Etária e Gênero']}
+                    label = 'genero'
+                    interval = {1}
+                  />
+                </div>
+                <Loading />
+              </CollapsibleContainer>
+            </Collapsible>
+          </Col>
+        </Row>
+      </div>
+    );
+    else return <div></div>
+  }
+
+  getDataFromAutocomplete(data) {
+    var typeAux = type+'s';
+    for(let i = 0, j = 0; i < data['data'].length; i++, j++){
+      for(;j < this.state[typeAux].length;){
+        if (data['data'][i].no_ano_pesquisa === this.state[typeAux][j].no_ano_pesquisa){
+          data['data'][i]['total'+typeAux] = this.state[typeAux][j].total
+          data['data'][i]['percentage'] = data['data'][i]['total']*100/this.state[typeAux][j].total          
+          break;
+        }
+        else{
+          j++
+        }
+      }          
+    }
+    
+    var currentState = this.state.charts
+    switch(data['option']){
+      case 'institution':
+        currentState['Instituição de Ensino'] = data['data']
+        this.setState({IESTotal: data['data']})        
+        this.setState({campiList: this.getCampi(this.state.campi)})
+        this.setState(currentState)       
+        break;
+      case 'course':
+        currentState['Curso'] = data['data']
+        this.setState(currentState)             
+        break;
+      default:
+        break;
+    }
+  }
+
+  getDataFromServer(defaultData, chart) {
+    if(chart !== 'Curso' && chart !== 'Instituição de Ensino'){
+      var msg = document.getElementById('no_info'+chart+type);
+      if (msg){
+        document.getElementById(chart+type).style.display = 'block';
+        msg.remove()
+      }
+      axios.get(`${serverURL}${defaultData}`)
+        .then(res => {
+          const data = res.data.result
+          var temp = this.state.charts 
+          let filter = [
+            {
+              'filter': 'ind_familia_quilombola_fam',
+              'value': '1',
+            }
+          ]
+          if (chart === 'População no CadÚnico por Faixa Etária') {
+            temp[chart.trim()] = createIntervals(filterJson(data, filter), 'idade', 10, 'ano_pesquisa', 100);
+            // temp[chart.trim()] = createIntervals(data, 'idade', 10, 'ano_pesquisa');
+          }
+          else if (chart === 'População no CadÚnico por Faixa Etária e Gênero') {
+            let chartData = []
+            let workData = []
+
+            // Masculino
+            filter.push({'filter':'genero','value':'1'})
+            chartData.push(createIntervals(filterJson(data, filter), 'idade', 10, 'ano_pesquisa',100));
+
+            // Feminino
+            filter[1]['value'] = '2'
+            chartData.push(createIntervals(filterJson(data, filter), 'idade', 10, 'ano_pesquisa',100));
+
+            // Join results
+            chartData[2] = chartData[0]
+            for(let i=0; i < chartData[1].length; i++) {
+              for(let j=0; j < chartData[2].length; j++) {
+                if (chartData[1][i]['ano_pesquisa'] === chartData[2][j]['ano_pesquisa'] 
+                  && chartData[1][i]['idade'] === chartData[2][j]['idade']) {
+                  chartData[2][j]['total2'] = chartData[1][i]['total']
+                }
+              }
+            }
+            let lowerBound = chartData[2][0]['ano_pesquisa']
+            let upperBound = lowerBound
+            for (let i = 0; i < chartData[2].length; i++) {
+              upperBound = (chartData[2][i]['ano_pesquisa'] > upperBound ? chartData[2][i]['ano_pesquisa'] : upperBound)
+              lowerBound = (chartData[2][i]['ano_pesquisa'] < lowerBound ? chartData[2][i]['ano_pesquisa'] : lowerBound)
+            }
+            for (let i = 0; i <= upperBound - lowerBound; i++) {
+              workData[2*i] = { 'ano_pesquisa': lowerBound + i, 'genero':'M' }
+              workData[2*i+1] = { 'ano_pesquisa': lowerBound + i, 'genero': 'F' }
+              for (let j = 0; j < chartData[2].length; j++) {
+                if (chartData[2][j]['ano_pesquisa'] == lowerBound+i) {
+                  workData[2*i][chartData[2][j]['idade']] = chartData[2][j]['total']
+                  workData[2*i+1][chartData[2][j]['idade']] = chartData[2][j]['total2']
+                }
+              }
+            }
+            temp[chart.trim()] = workData
+          }
+          else {
+            temp[chart.trim()] = filterJson(data, filter);
+          }
+
+          if (!(Object.values(temp).indexOf(true) > -1)){
+            this.setState({ defaultData : temp });
+            deactivateLoadingAnimation(chart, type);
+          }
+        })
+        .catch(error => {
+          console.log(error)
+          var node = document.createElement("P");
+          var textnode = document.createTextNode(
+            `Sem informação para ${chart} na unidade federativa: ${getStateName(this.state.ddValues.estado)}`);
+          node.appendChild(textnode);
+          node.id = 'no_info'+chart+type
+          deactivateLoadingAnimation(chart, type);
+          document.getElementById(chart+type).style.display = 'none';
+          document.getElementById(chart+type).parentNode.appendChild(node)
+        });
+    }
+  }
+
+  createRoute(header) {
+    var route;
+    let head = header.trim()
+    switch (head) {
+      //count pega informações da familia, sem count são pegas as informações por pessoa
+      case 'Número de famílias':
+        // route = type + "_count?dims=year,cod_home_bolsa_familia&filter=quilombola_family:\"1\""
+        route = type + "_count?dims=year,cod_home_bolsa_familia,quilombola_family"
+        break;
+      case 'Escolaridade Segundo CadÚnico':
+        // route = type + "?dims=education_families,year&filter=quilombola_family:\"1\""
+        route = type + "?dims=education_families,year,quilombola_family"
+        break;
+      case 'População no CadÚnico por Faixa Etária':
+        // route = type + "?dims=age,year&filter=quilombola_family:\"1\""
+        route = type + "?dims=age,year,quilombola_family"
+        break;
+      case 'População no CadÚnico por Gênero':
+        route = type + "?dims=gender,year,quilombola_family"
+        break;
+      case 'População no CadÚnico por Faixa Etária e Gênero':
+        route = type + "?dims=gender,age,year,quilombola_family"
+        break;
+      default:
+        console.log("404");
+    }
+    if (this.state.ddValues.estado !== null) {
+      route = route + "&filter=uf:" + this.state.ddValues.estado;
+    } else
+    if (this.state.ddValues.regiao !== null) {
+      route = route + "&filter=region:" + this.state.ddValues.regiao;
+    }
+    this.getDataFromServer(route, head);
+  }
+
+  getHeader(e) {
+    var target = e.target;
+    var current_icon = ''
+    var current_collapsible = ''
+    
+    if (target.childNodes[2] === undefined) {
+      target = e.target.parentNode
+    }    
+    if(target.childNodes[0].innerText){
+      if(target.childNodes[0].innerText[11] === 'd'){
+        current_icon = target.childNodes[0].innerText.slice(0,15)
+        current_collapsible = target.childNodes[0].innerText.slice(15, target.childNodes[0].innerText.length)
+        if(current_collapsible === ''){
+          current_collapsible = target.childNodes[0].parentNode.innerText
+           .replace('\n','').slice(15, target.childNodes[0].parentNode.innerText.replace('\n','').length)
+        }
+      }
+      else{
+        current_icon = target.childNodes[0].innerText.slice(0,13)
+        current_collapsible = target.childNodes[0].innerText.slice(13, target.childNodes[0].innerText.length)
+        if(current_collapsible === ''){
+          current_collapsible = target.childNodes[0].parentNode.innerText
+           .replace('\n','').slice(15, target.childNodes[0].parentNode.innerText.replace('\n','').length)
+        }
+      }
+  
+      if (current_icon === 'arrow_drop_down') {
+        if ((current_collapsible !== "Instituição de Ensino" && current_collapsible !== "Curso")) {
+          this.createRoute(current_collapsible, type)
+        }
+      }
+    }    
+  }
+
+  updateCharts() {
+    var content = document.getElementById(type);
+    var openCharts = content.querySelectorAll('li.active');
+    openCharts = [].map.call(openCharts, function(obj) {
+      var text = obj.childNodes[0].innerText.replace("arrow_drop_up", "");
+      if(text === 'Curso' && document.getElementById("no_curso") !== null)
+        document.getElementById("no_curso").style.display = "none";
+      else if ( text === 'Instituição de Ensino' && document.getElementById("no_ies") !== null)
+        document.getElementById("no_ies").style.display = "none";
+      else
+        return text;
+    });
+    for(let i = 0; i < openCharts.length; i++) {
+      if(openCharts[i] !== null && openCharts[i] !== undefined){
+        this.createRoute(openCharts[i].replace('\n',''))
+      }
+    }
+  }
+
+
+  getDDValues(newValue) {
+    var aux = this.state
+    if(newValue.id === 'regiao'+type || newValue.id === 'estado'+type)
+      newValue.id = newValue.id.replace(type, '');
+
+    if (newValue.value === 'Todas as regiões') {
+      aux.ddValues['regiao'] = null;
+      aux.ddValues['estado'] = null;
+    } else if (newValue.value === 'TD') {
+       aux.ddValues['estado'] = null;
+     } else {  
+       if(newValue.id === 'estado') {
+         aux.ddValues['estado'] = newValue.value
+         aux.ddValues['regiao'] = getRegionState(newValue.value);
+       } else if(newValue.id === 'regiao') {
+           aux.ddValues['estado'] = null;
+           aux.ddValues['regiao'] = newValue.value
+       }
+     }
+     this.setState({
+       aux
+     });
+  }
+  getData(e) {
+   this.updateCharts()
+  }
+
+  getCampi(data) {
+    var unique = ([ ...new Set(data.map(item => item.co_local_oferta))]);
+    var campi = []
+    var campiNames = []
+    for(let i = 0; i < unique.length; i++){
+      let aux = searchHash(unique[i], data, 'co_local_oferta',"Number")
+      aux = aux.sort(function(a, b){
+        return a.no_ano_pesquisa > b.no_ano_pesquisa;
+      });
+      for(let i = 0, j = 0; i < aux.length; i++, j++){
+        for(;j < this.state.IESTotal.length;){
+          if (aux[i].no_ano_pesquisa === this.state.IESTotal[j].no_ano_pesquisa){
+            aux[i]['total_IES'] = this.state.IESTotal[j].total
+            aux[i]['percentage'] = aux[i]['total']*100/this.state.IESTotal[j].total         
+            break;
+          }
+          else{
+            j++
+          }
+        }          
+      }
+      campi.push(aux);
+    }
+    for(let i = 0; i < campi.length; i++){
+      let maxValue = Math.max(...campi[i].map(o => o.no_ano_pesquisa));
+      campiNames.push(searchHash(maxValue, campi[i], 'no_ano_pesquisa',"Number")[0]);   
+    }
+    this.setState({campiNames: [{no_local_oferta:'Todos os campi', co_local_oferta:0}].concat(campiNames)})
+
+    return unique
+  }
+  saveAutocompleteContent(tagID, tagName){
+    this.setState({ tagID: tagID, tagName: tagName })
+    this.getCampiFromServer(tagID)
+  }
+  campiFilter(filter) {
+    let currentState = this.state.charts    
+    if ( filter.value === '0' ){
+      currentState['Instituição de Ensino'] = this.state.IESTotal;    
+    }
+    else {
+      let aux = searchHash(filter.value,this.state.campi,'co_local_oferta',"Number")
+      aux = aux.sort(function(a, b){
+        return a.no_ano_pesquisa > b.no_ano_pesquisa;
+      });
+      currentState['Instituição de Ensino'] = aux;
+    }
+      this.setState({charts:currentState})
+  }
+  getCampiFromServer(id){
+    var route = `${type}?dims=cod_offer_location,name_offer_location&filter=institution_cod:${id}`
+    axios.get(`${serverURL}${route}`)
+    .then(res => {
+      const data = res.data.result
+      this.setState({ campi : data });
+    }).catch(error => {
+      console.log(error)
+    });
+  }
+
+}
+
+export default QuilombolaIndicator3;
\ No newline at end of file
diff --git a/src/enviroment.js b/src/enviroment.js
index ac271099..8b26eb51 100644
--- a/src/enviroment.js
+++ b/src/enviroment.js
@@ -39,8 +39,12 @@ const patterns = {
   "cod_escoa_sanitario_domic_fam" : ["1","2","3","4","5","6","null","NA"],
   "cod_local_domic_fam" : ["1","2","null","NA"],
   "year_none" :[],
-  "cod_agricultura_trab_memb": ["1","2","null","NA"],
-  "marc_pbf" : ["0","1","null"],
+  "cod_agricultura_trab_memb": ["1", "2", "null", "NA"],
+  "marc_pbf": ["0","1","null"],
+  "cod_curso_frequentou_pessoa_memb": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15","NA","null"],
+  "idade": [],
+  "genero": [],
+  "vlr_renda_media_fam": [],
   "nu_percent_solicitado_financ": range(10, 100)
 }
 export function sleep (time) {
@@ -54,7 +58,8 @@ export function getServerURL() {
   // return "http://smppirhomologa.c3sl.ufpr.br:4545/api/v1/"
   //return 'http://localhost:4000/api/v1/'
   //caso for fazer build para homologa, utilizar o return de baixo ao invés do de cima
-  return "http://seppirhomologa.c3sl.ufpr.br/data/api/v1/"
+  return "http://seppirdev.c3sl.ufpr.br/data/api/v1/"
+  // return "http://seppirhomologa.c3sl.ufpr.br/data/api/v1/"
 }
 export function homeURL() {
   // Get the current URL
@@ -87,11 +92,41 @@ export function uniqueItemsArray(array){
     return arr.indexOf(elem) === pos;
   });
 }
-export function createIntervals(data, intervalKey, intervalRange, yearKey=undefined){
+
+/*
+ *  Apply filter to query
+ */
+export function filterJson(data, filters) {
+  var filter, value
+  let workData = data
+  let filteredData = []
+  
+  for(let i = 0; i < filters.length; i++) {
+    filter = filters[i]["filter"]
+    value = filters[i]["value"]
+
+    for (let j = 0; j < workData.length; j++) {
+      if (workData[j][filter] === value)
+        filteredData.push(workData[j])
+    }
+
+    workData = filteredData
+    filteredData = []
+  }
+  return workData
+}
+
+/*
+ *  Divide json in subgroups of regular intervals
+ *  (Interval Key must be integers)
+ *  TODO: Add undefined data support Ex:(NA, Undefined..)
+ */
+export function createIntervals(data, intervalKey, intervalRange, yearKey=undefined, limit=undefined){
   var dataLen = data.length;
   var years = [];
   var workData;
 
+  // Create an array organized by year
   if(yearKey){
     for(let i = 0; i < dataLen; i++){
       years.push(data[i][yearKey])
@@ -113,104 +148,85 @@ export function createIntervals(data, intervalKey, intervalRange, yearKey=undefi
     workData =[data];
   }
 
-  var dataPerYear = [];
-  for(let i = 0; i < workData.length; i++){
-    let lowerBound = workData[i][0][intervalKey]
-    let upperBound = intervalRange
-    let aux = []
-    for(let j = 0; j < workData[i].length; j++){
-      if(aux[aux.length-1]){
-        if(workData[i][j][intervalKey] >= lowerBound && workData[i][j][intervalKey] < upperBound){
-          let interval_string = lowerBound.toString()+' - '+upperBound.toString()
-          if(aux[aux.length-1][intervalKey] === interval_string){   
-            aux[aux.length-1]['total'] = aux[aux.length-1]['total'] + workData[i][j]['total']
-          }
-          else{         
-            if(yearKey){
-              let temp = {}
-              temp[yearKey] = workData[i][j][yearKey];
-              temp[intervalKey] = interval_string;
-              temp['total'] = workData[i][j]['total'];
-              aux.push(temp);
-            }
-            else{
-              let interval_string = lowerBound.toString()+' - '+upperBound.toString()
-              let temp = {}
-              temp[intervalKey] = interval_string;
-              temp['total'] = workData[i][j]['total'];
-              aux.push(temp);
-            }
-          }          
-        }
-        else{
-          lowerBound = lowerBound + intervalRange;
-          upperBound = upperBound + intervalRange;
-          let interval_string = lowerBound.toString()+' - '+upperBound.toString()        
-          let temp = {}
-          temp[yearKey] = workData[i][j][yearKey];
-          temp[intervalKey] = interval_string;
-          temp['total'] = workData[i][j]['total'];
-          aux.push(temp);
-        }
-      }
-      else{
-        if(yearKey){
-          let interval_string = lowerBound.toString()+' - '+upperBound.toString()                  
-          let temp = {}
-          temp[yearKey] = workData[i][j][yearKey];
-          temp[intervalKey] = interval_string;
-          temp['total'] = workData[i][j]['total'];
-          aux.push(temp);
-        }
-        else{
-          let interval_string = lowerBound.toString()+' - '+upperBound.toString()
-          let temp = {}
-          temp[intervalKey] = interval_string;
-          temp['total'] = workData[i][j]['total'];
-          aux.push(temp);
-        }
+  // Find lowerBound and upperBound
+  let tmp = parseInt(workData[0][0][intervalKey]);
+  for (let i = 0; i < workData.length && !tmp && tmp !== 0; i++) {
+    tmp = parseInt(workData[0][i][intervalKey]);
+  }
+  let LowerBound = tmp;
+  let UpperBound = tmp;
+  for(let i = 0; i < workData.length; i++) {
+    for (let j = 0; j < workData[i].length; j++) {
+      let tmp = parseInt(workData[i][j][intervalKey]);
+      if(tmp || tmp === 0) {
+        LowerBound = (tmp < LowerBound ? tmp : LowerBound);
+        UpperBound = (tmp > UpperBound ? tmp : UpperBound);
       }
     }
-    dataPerYear = dataPerYear.concat(aux);
   }
-  if (yearKey){
-    // Conteúdo deste IF foi criado para Matriz Africana - Sustentabilidade - Renda média per capita
-    // Generalizar depois!!
-    let returnArray = []
-    let currentYear = dataPerYear[0]['ano_pesquisa']
-    let aux = {}
-    let numEntries = []
-    for(let i = 0; i < dataPerYear.length; i++ ){
-      if (currentYear === dataPerYear[i]['ano_pesquisa']){
-        aux["ano_pesquisa"] = dataPerYear[i]['ano_pesquisa']
-        aux[dataPerYear[i]['vlr_renda_media_fam']] = dataPerYear[i]['total'] 
+  UpperBound = UpperBound + intervalRange - (UpperBound % intervalRange);
+
+  // Define limit if it exists
+  limit = (limit ? limit : UpperBound)
+  
+  var dataPerYear = [];
+
+  // Iterate through the years
+  for(let i = 0; i < workData.length; i++) {
+    let aux = [] // Array of groups
+
+    // Create all groups for one year
+    for (let j = LowerBound; j < limit; j+=intervalRange) {
+      if (yearKey) {
+        let interval_string = j.toString() + ' - ' + (j + intervalRange - 1).toString()
+        let temp = {}
+        temp[yearKey] = workData[i][0][yearKey];
+        temp[intervalKey] = interval_string;
+        temp['total'] = 0;
+        aux.push(temp);
       }
-      else{
-        numEntries.push(numEntries.length > 0 ? i - numEntries.reduce((a,b)=>a+b, 0) : i)
-        returnArray.push(aux)
-        aux = {}
-        currentYear = dataPerYear[i]['ano_pesquisa']
-        aux["ano_pesquisa"] = dataPerYear[i]['ano_pesquisa']
-        aux[dataPerYear[i]['vlr_renda_media_fam']] = dataPerYear[i]['total']
+      else {
+        let interval_string = j.toString() + ' - ' + (j + intervalRange - 1).toString()
+        let temp = {}
+        temp[intervalKey] = interval_string;
+        temp['total'] = 0;
+        aux.push(temp);
       }
     }
-    returnArray.push(aux)
-    var max_of_array = Math.max(...numEntries);
-    for(let i = 0; i < returnArray.length; i++){
-      if(numEntries[i] <= max_of_array){
-        let beginOfInterval = (numEntries[i]) * intervalRange;
-        for(let j = 0; j < (max_of_array-numEntries[i])+1; j++){
-          returnArray[i][beginOfInterval.toString() + ` - ${beginOfInterval+intervalRange}`] = 0;
-          beginOfInterval = beginOfInterval + intervalRange;
-        }
+    if (limit < UpperBound) {
+      let interval_string = '≥' + limit.toString()
+      if (yearKey) {
+        let temp = {}
+        temp[yearKey] = workData[i][0][yearKey];
+        temp[intervalKey] = interval_string;
+        temp['total'] = 0;
+        aux.push(temp);
+      }
+      else {
+        let temp = {}
+        temp[intervalKey] = interval_string;
+        temp['total'] = 0;
+        aux.push(temp);
       }
     }
-    return returnArray;
-  }
-  else{
-    return dataPerYear;
-  }
 
+    // Iterate through the elements to be grouped
+    for(let j = 0; j < workData[i].length; j++) {
+
+      // Find index on aux for current data
+      let value = parseInt(workData[i][j][intervalKey])
+      value = (value > limit ? limit+1 : value)
+      let index = value - LowerBound
+      index = (index - (index % intervalRange)) / intervalRange
+      
+      // Update group total (Undefined data is discarted)
+      if (aux[index])
+      aux[index]['total'] += parseInt(workData[i][j]['total'])
+      
+    }
+    dataPerYear = dataPerYear.concat(aux);
+  }
+  return dataPerYear;
 }
 
 export function getDDValue(e) {
-- 
GitLab


From 4d0e463b4b66cf443e01a689fd5656fef4f04c18 Mon Sep 17 00:00:00 2001
From: eht17 <eht17@inf.ufpr.br>
Date: Wed, 20 Feb 2019 10:46:40 -0300
Subject: [PATCH 06/23] Add hooks and context to store environment settings

---
 src/App.js                           |  44 +++++++++--
 src/Components/MainCard.js           | 113 ++++++++++++++++++---------
 src/MainPage.js                      |   1 +
 src/Store.js                         |  29 +++++++
 src/SubPages/QuilombolaIndicator3.js |   4 +-
 src/index.js                         |  10 ++-
 6 files changed, 154 insertions(+), 47 deletions(-)
 create mode 100644 src/Store.js

diff --git a/src/App.js b/src/App.js
index c95cace2..1c0e5911 100644
--- a/src/App.js
+++ b/src/App.js
@@ -31,14 +31,46 @@ import Youth from './Youth'
 import Maps from './Maps'
 import AfricanOrigin from './AfricanOrigin'
 import Quilombola from './Quilombola'
+import { Store } from './Store';
 
 
-class App extends Component {
-  render() {
-    return (  
+// class App extends Component {
+  //   render() {
+    //     return (  
+      //       <Router>
+      //         <div>
+      //           <Route exact={true} path="/" render={(props) => <MainPage {...props} teste="teste"/>}/>
+      //           <Route exact={true} path="/cotas" component={RacialQuotas} />
+      //           <Route exact={true} path="/quilombola" component={Quilombola} />
+      //           <Route exact={true} path="/sobre" component={About} />
+      //           <Route exact={true} path="/quilombolas" component={Quilombolas} />
+      //           <Route exact={true} path="/juventude" component={Youth} />
+      //           <Route exact={true} path="/mapas" component={Maps} />
+      //           <Route exact={true} path="/matrizAfricana" component={AfricanOrigin} />
+      //         </div>
+      //       </Router>    
+      //     );
+      //   }
+      // }
+
+      
+function App() {
+  const { state, dispatch } = React.useContext(Store);
+  const setPageAction = (newPage) => {
+    return dispatch({
+      type: 'SET_PAGE',
+      payload: newPage
+    })
+  }
+
+  React.useEffect(() => {});
+
+  return (
+    <React.Fragment>
+      {console.log(state)}
       <Router>
         <div>
-          <Route exact={true} path="/" component={MainPage} />
+          <Route exact={true} path="/" render={(props) => <MainPage {...props} teste="teste"/>}/>
           <Route exact={true} path="/cotas" component={RacialQuotas} />
           <Route exact={true} path="/quilombola" component={Quilombola} />
           <Route exact={true} path="/sobre" component={About} />
@@ -48,8 +80,8 @@ class App extends Component {
           <Route exact={true} path="/matrizAfricana" component={AfricanOrigin} />
         </div>
       </Router>    
-    );
-  }
+    </React.Fragment>
+  );
 }
 
 export default App;
\ No newline at end of file
diff --git a/src/Components/MainCard.js b/src/Components/MainCard.js
index feea7f9a..e45b4cf6 100644
--- a/src/Components/MainCard.js
+++ b/src/Components/MainCard.js
@@ -25,49 +25,88 @@ import { Card, CardTitle } from 'react-materialize'
 import Cookies from 'universal-cookie';
 import '../Styles/MainCard.css'
 
+import { Store } from '../Store';
+
 var ck = new Cookies();
 var contrastCK = new Cookies();
 var cookieStatus = contrastCK.get('contrast');
 
-class MainCard extends Component { 
-  
-  constructor(props) {
-    super(props);
-    this.setCookie = this.setCookie.bind(this);
-  }
+function createRoutes(subpages, color) {
 
-  setCookie(e) {      
-      ck.set('mainPageClicked',e.target.text);
-  }
-  render() {  
-
-    var { color, title, subpages, text, image } = this.props;
-    var contrastString = '';
-     if(cookieStatus === 'true'){
-      contrastString = 'Contrast'; 
-      color = 'mainPageContrast'
-    }
-    return (
-      <div>
-        <Card className={`${contrastString}card-MainPage`} header={<CardTitle reveal image={require('../Images/'+image)} waves='light'/>}
-            title={title}
-            reveal={<div>{text}</div>}>
-            {this.createRoutes(subpages, color)}
-        </Card>       
-      </div>
-    );
-  }
-// 
-  createRoutes(subpages, color) {
-    const listItems = subpages['links'].map((subp, i) =>
-      <a onClick={this.setCookie} key={subp} className={color+' waves-effect waves spacingInCard'} href={subpages['route']} >
-        {subp}         
-      </a>
-    );
-    return (
-      <div className={'listMainPage'}>{listItems}</div>
-    );
+  // Hook to set page context
+  const { state, dispatch } = React.useContext(Store);
+  const setPageAction = (newPage) => {
+    return dispatch({
+      type: 'SET_PAGE',
+      payload: newPage
+    })
   }
+  React.useEffect(()=>{});
+
+  const listItems = subpages['links'].map((subp, i) =>
+    <a onClick={() => {setPageAction(subp) && console.log(subp)}} key={subp} className={color+' waves-effect waves spacingInCard'} href="#" >
+      {subp}
+    </a>
+  );
+  return (
+    <div className={'listMainPage'}>{listItems}</div>
+  );
 }
 
+function MainCard(props){ 
+  
+  var { color, title, subpages, text, image } = props;
+  var contrastString = '';
+
+  return (
+    <div>
+      <Card className={`${contrastString}card-MainPage`} header={<CardTitle reveal image={require('../Images/'+image)} waves='light'/>}
+          title={title}
+          reveal={<div>{text}</div>}>
+          {createRoutes(subpages, color)}
+      </Card>       
+    </div>
+  );
+}
+// class MainCard extends Component { 
+  
+//   constructor(props) {
+//     super(props);
+//     this.setCookie = this.setCookie.bind(this);
+//   }
+
+//   setCookie(e) {      
+//       ck.set('mainPageClicked',e.target.text);
+//   }
+//   render() {  
+
+//     var { color, title, subpages, text, image } = this.props;
+//     var contrastString = '';
+//      if(cookieStatus === 'true'){
+//       contrastString = 'Contrast'; 
+//       color = 'mainPageContrast'
+//     }
+//     return (
+//       <div>
+//         <Card className={`${contrastString}card-MainPage`} header={<CardTitle reveal image={require('../Images/'+image)} waves='light'/>}
+//             title={title}
+//             reveal={<div>{text}</div>}>
+//             {this.createRoutes(subpages, color)}
+//         </Card>       
+//       </div>
+//     );
+//   }
+// // 
+//   createRoutes(subpages, color) {
+//     const listItems = subpages['links'].map((subp, i) =>
+//       <a onClick={this.setCookie} key={subp} className={color+' waves-effect waves spacingInCard'} href={subpages['route']} >
+//         {subp}
+//       </a>
+//     );
+//     return (
+//       <div className={'listMainPage'}>{listItems}</div>
+//     );
+//   }
+// }
+
 export default MainCard;
\ No newline at end of file
diff --git a/src/MainPage.js b/src/MainPage.js
index 331d6af4..a855ea85 100644
--- a/src/MainPage.js
+++ b/src/MainPage.js
@@ -35,6 +35,7 @@ var cookieStatus = contrastCK.get('contrast');
 class MainPage extends Component {
 
   render() {
+
     var contrastString = '';
     if(cookieStatus === 'true'){
       contrastString = 'Contrast'
diff --git a/src/Store.js b/src/Store.js
new file mode 100644
index 00000000..ea2a616c
--- /dev/null
+++ b/src/Store.js
@@ -0,0 +1,29 @@
+import React from 'react'
+
+export const Store = React.createContext();
+
+const initialStore = {
+  page: '',
+  contrast: false
+}
+
+function reducer(state, action) {
+  switch (action.type) {
+    case 'SET_PAGE':
+      return { ...state, page: action.payload };
+    default:
+      return state;
+  }
+}
+
+export function StoreProvider(props) {
+
+  const [state, dispatch] = React.useReducer(reducer, initialStore);
+  const value = { state, dispatch };
+
+  return (
+    <Store.Provider value={value}>
+      {props.children}
+    </Store.Provider>
+  )
+}
\ No newline at end of file
diff --git a/src/SubPages/QuilombolaIndicator3.js b/src/SubPages/QuilombolaIndicator3.js
index 5df14164..822cbd9f 100644
--- a/src/SubPages/QuilombolaIndicator3.js
+++ b/src/SubPages/QuilombolaIndicator3.js
@@ -279,8 +279,8 @@ class QuilombolaIndicator3 extends Component {
               lowerBound = (chartData[2][i]['ano_pesquisa'] < lowerBound ? chartData[2][i]['ano_pesquisa'] : lowerBound)
             }
             for (let i = 0; i <= upperBound - lowerBound; i++) {
-              workData[2*i] = { 'ano_pesquisa': lowerBound + i, 'genero':'M' }
-              workData[2*i+1] = { 'ano_pesquisa': lowerBound + i, 'genero': 'F' }
+              workData[2*i] = { 'ano_pesquisa': lowerBound + i, 'genero':`M - ${lowerBound + i}` }
+              workData[2 * i + 1] = { 'ano_pesquisa': lowerBound + i, 'genero': `F - ${lowerBound + i}` }
               for (let j = 0; j < chartData[2].length; j++) {
                 if (chartData[2][j]['ano_pesquisa'] == lowerBound+i) {
                   workData[2*i][chartData[2][j]['idade']] = chartData[2][j]['total']
diff --git a/src/index.js b/src/index.js
index b9f19c7a..f9fdda0d 100644
--- a/src/index.js
+++ b/src/index.js
@@ -25,6 +25,12 @@ import ReactDOM from 'react-dom';
 import './index.css';
 import App from './App';
 import registerServiceWorker from './registerServiceWorker';
-
-ReactDOM.render(<App />, document.getElementById('root'));
+import { StoreProvider } from './Store';
+
+ReactDOM.render(
+  <StoreProvider>
+    <App />
+  </StoreProvider>,
+  document.getElementById('root')
+);
 registerServiceWorker();
-- 
GitLab


From 6640d7b2d36c67cdc9ce35447e8cd3c1a8fa9f6f Mon Sep 17 00:00:00 2001
From: eht17 <eht17@inf.ufpr.br>
Date: Wed, 20 Feb 2019 12:00:27 -0300
Subject: [PATCH 07/23] Fix link to subpages and change navigation bar location

---
 src/App.js                      | 33 +++++++++++++--------------------
 src/Components/MainBanner.js    |  2 +-
 src/Components/MainCard.js      |  5 +++--
 src/Components/NavigationBar.js |  4 ++--
 src/MainPage.js                 |  2 --
 src/Quilombolas.js              |  9 +++++----
 6 files changed, 24 insertions(+), 31 deletions(-)

diff --git a/src/App.js b/src/App.js
index 1c0e5911..53218653 100644
--- a/src/App.js
+++ b/src/App.js
@@ -32,26 +32,14 @@ import Maps from './Maps'
 import AfricanOrigin from './AfricanOrigin'
 import Quilombola from './Quilombola'
 import { Store } from './Store';
+import NavigationBar from './Components/NavigationBar'
+import AppFooter from './Components/AppFooter'
+import ContrastBar from './Components/ContrastBar'
+import MainBanner from './Components/MainBanner'
+import BarraBrasil from './Components/BarraBrasil'
+
 
 
-// class App extends Component {
-  //   render() {
-    //     return (  
-      //       <Router>
-      //         <div>
-      //           <Route exact={true} path="/" render={(props) => <MainPage {...props} teste="teste"/>}/>
-      //           <Route exact={true} path="/cotas" component={RacialQuotas} />
-      //           <Route exact={true} path="/quilombola" component={Quilombola} />
-      //           <Route exact={true} path="/sobre" component={About} />
-      //           <Route exact={true} path="/quilombolas" component={Quilombolas} />
-      //           <Route exact={true} path="/juventude" component={Youth} />
-      //           <Route exact={true} path="/mapas" component={Maps} />
-      //           <Route exact={true} path="/matrizAfricana" component={AfricanOrigin} />
-      //         </div>
-      //       </Router>    
-      //     );
-      //   }
-      // }
 
       
 function App() {
@@ -63,11 +51,14 @@ function App() {
     })
   }
 
-  React.useEffect(() => {});
+  //React.useEffect(() => {});
 
   return (
     <React.Fragment>
       {console.log(state)}
+      <div id={`mainPage`}>
+      <ContrastBar />
+      <BarraBrasil />
       <Router>
         <div>
           <Route exact={true} path="/" render={(props) => <MainPage {...props} teste="teste"/>}/>
@@ -79,7 +70,9 @@ function App() {
           <Route exact={true} path="/mapas" component={Maps} />
           <Route exact={true} path="/matrizAfricana" component={AfricanOrigin} />
         </div>
-      </Router>    
+      </Router>  
+      <AppFooter />
+      </div>
     </React.Fragment>
   );
 }
diff --git a/src/Components/MainBanner.js b/src/Components/MainBanner.js
index 045a3131..a49738df 100644
--- a/src/Components/MainBanner.js
+++ b/src/Components/MainBanner.js
@@ -44,7 +44,7 @@ class MainBanner extends Component {
     }
     return (
       <div>
-        <BarraBrasil />
+        {/* <BarraBrasil /> */}
         <Card id={`${contrastString}mainBannerCard`}>
           <Row>
             <Col s={12} m={6}>
diff --git a/src/Components/MainCard.js b/src/Components/MainCard.js
index e45b4cf6..d497c9cb 100644
--- a/src/Components/MainCard.js
+++ b/src/Components/MainCard.js
@@ -21,6 +21,7 @@ along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
 
 
 import React, { Component } from 'react';
+import { Link } from 'react-router-dom'
 import { Card, CardTitle } from 'react-materialize'
 import Cookies from 'universal-cookie';
 import '../Styles/MainCard.css'
@@ -44,9 +45,9 @@ function createRoutes(subpages, color) {
   React.useEffect(()=>{});
 
   const listItems = subpages['links'].map((subp, i) =>
-    <a onClick={() => {setPageAction(subp) && console.log(subp)}} key={subp} className={color+' waves-effect waves spacingInCard'} href="#" >
+    <Link onClick={() => { setPageAction(subp) && console.log(subp) }} key={subp} className={color + ' waves-effect waves spacingInCard'} to={subpages['route']} >
       {subp}
-    </a>
+    </Link>
   );
   return (
     <div className={'listMainPage'}>{listItems}</div>
diff --git a/src/Components/NavigationBar.js b/src/Components/NavigationBar.js
index 0217ef2f..9b843a12 100644
--- a/src/Components/NavigationBar.js
+++ b/src/Components/NavigationBar.js
@@ -46,8 +46,8 @@ class NavigationBar extends Component {
     }
     return (
       <div>
-        <BarraBrasil />
-          <Navbar className={`${contrastString}navBackground z-depth-2`} brand={<img alt='Logo do SMPPIR' id={'portal-logo'} src={logoSMPPIR} style={{width: 200, marginLeft: 20, marginTop: 15}}/>} right>
+        {/* <BarraBrasil /> */}
+        <Navbar className={`${contrastString}navBackground z-depth-2`} brand={<img alt='Logo do SMPPIR' id={'portal-logo'} src={logoSMPPIR} style={{width: 200, marginLeft: 20, marginTop: 15}}/>} right>
           <NavItem onClick={this.removeCSS} id={`${contrastString}navBarInicio`} className={'z-depth-0 '+actualPath} href='/'>Início</NavItem>
           <NavItem onClick={this.removeCSS} id={`${contrastString}navBarBrasilQ`} className={'z-depth-0 '+actualPath} href='/quilombolas'>Brasil Quilombola</NavItem>
           <NavItem onClick={this.removeCSS} id={`${contrastString}navBarJuventudeV`} className={'z-depth-0 '+actualPath} href='/juventude'>Juventude Viva</NavItem>
diff --git a/src/MainPage.js b/src/MainPage.js
index a855ea85..a609a7be 100644
--- a/src/MainPage.js
+++ b/src/MainPage.js
@@ -42,7 +42,6 @@ class MainPage extends Component {
     }
     return (
       <div id={`${contrastString}mainPage`}>
-        <ContrastBar/>
         <MainBanner />
         <Row/>
         <Row style={undefined}>
@@ -69,7 +68,6 @@ class MainPage extends Component {
             <MainCard color='mainPageRed' title='Quilombola' subpages={subpages6} text={text6} image={'brasil_quilombola.png'}/>
           </Col>
         </Row>
-        <AppFooter />
       </div>
     );
   }
diff --git a/src/Quilombolas.js b/src/Quilombolas.js
index eb26bc6c..520adb3a 100644
--- a/src/Quilombolas.js
+++ b/src/Quilombolas.js
@@ -35,6 +35,8 @@ import Cookies from 'universal-cookie';
 import {sleep, homeURL} from './enviroment'
 import ContrastBar from './Components/ContrastBar'
 
+import { Store } from './Store'
+
 
 var ck = new Cookies();
 var contrastCK = new Cookies();
@@ -71,12 +73,12 @@ class Quilombolas extends Component {
     }
     else{
       // Redirect user to the main page if he/she do not have a cookie
-      window.location.href = homeURL()
+      //window.location.href = homeURL()
+      console.log("teste")
     }
     return (
       <div id={`${contrastString}mainPage`}>
-        <ContrastBar/>
-        <NavigationBar/>
+        <NavigationBar />
         <div id='contentTabsDiv'>
           <Tabs className={`tab-demo z-depth-1 ${contrastString}mainPageRedTab`} onChange={this.whereIAm}>
             <Tab title="Apresentação" active={states["APRESENTAÇÃO"]}> <QuilombolaPresentation/> </Tab>
@@ -87,7 +89,6 @@ class Quilombolas extends Component {
             <Tab title="Sobre" active={states["SOBRE"]}> <QuilombolaAbout/></Tab>
           </Tabs>
         </div>
-        <AppFooter/>
       </div>
     );
   }
-- 
GitLab


From 91252644fafff0f52fc6beecf941e7b6e32ed4b6 Mon Sep 17 00:00:00 2001
From: eht17 <eht17@inf.ufpr.br>
Date: Thu, 21 Feb 2019 10:59:47 -0300
Subject: [PATCH 08/23] Implement tabs without cookies

---
 src/App.js                 | 30 +++++++-------
 src/Components/MainCard.js |  1 +
 src/MainPage.js            |  2 +-
 src/Quilombolas.js         | 84 ++++++++++++--------------------------
 4 files changed, 44 insertions(+), 73 deletions(-)

diff --git a/src/App.js b/src/App.js
index 53218653..b8c64e0a 100644
--- a/src/App.js
+++ b/src/App.js
@@ -57,21 +57,21 @@ function App() {
     <React.Fragment>
       {console.log(state)}
       <div id={`mainPage`}>
-      <ContrastBar />
-      <BarraBrasil />
-      <Router>
-        <div>
-          <Route exact={true} path="/" render={(props) => <MainPage {...props} teste="teste"/>}/>
-          <Route exact={true} path="/cotas" component={RacialQuotas} />
-          <Route exact={true} path="/quilombola" component={Quilombola} />
-          <Route exact={true} path="/sobre" component={About} />
-          <Route exact={true} path="/quilombolas" component={Quilombolas} />
-          <Route exact={true} path="/juventude" component={Youth} />
-          <Route exact={true} path="/mapas" component={Maps} />
-          <Route exact={true} path="/matrizAfricana" component={AfricanOrigin} />
-        </div>
-      </Router>  
-      <AppFooter />
+        <ContrastBar />
+        <BarraBrasil />
+        <Router>
+          <div>
+            <Route exact={true} path="/" render={(props) => <MainPage {...props} teste="teste"/>}/>
+            <Route exact={true} path="/cotas" component={RacialQuotas} />
+            <Route exact={true} path="/quilombola" component={Quilombola} />
+            <Route exact={true} path="/sobre" component={About} />
+            <Route exact={true} path="/quilombolas" component={Quilombolas} />
+            <Route exact={true} path="/juventude" component={Youth} />
+            <Route exact={true} path="/mapas" component={Maps} />
+            <Route exact={true} path="/matrizAfricana" component={AfricanOrigin} />
+          </div>
+        </Router>  
+        <AppFooter />
       </div>
     </React.Fragment>
   );
diff --git a/src/Components/MainCard.js b/src/Components/MainCard.js
index d497c9cb..f4103f24 100644
--- a/src/Components/MainCard.js
+++ b/src/Components/MainCard.js
@@ -37,6 +37,7 @@ function createRoutes(subpages, color) {
   // Hook to set page context
   const { state, dispatch } = React.useContext(Store);
   const setPageAction = (newPage) => {
+    window.scrollTo(0, 0)
     return dispatch({
       type: 'SET_PAGE',
       payload: newPage
diff --git a/src/MainPage.js b/src/MainPage.js
index a609a7be..c9e26e3e 100644
--- a/src/MainPage.js
+++ b/src/MainPage.js
@@ -67,7 +67,7 @@ class MainPage extends Component {
           <Col m={12} l={5}  className={'mainPageMargin'} id='soloCard'>
             <MainCard color='mainPageRed' title='Quilombola' subpages={subpages6} text={text6} image={'brasil_quilombola.png'}/>
           </Col>
-        </Row>
+        </Row> 
       </div>
     );
   }
diff --git a/src/Quilombolas.js b/src/Quilombolas.js
index 520adb3a..91002fa0 100644
--- a/src/Quilombolas.js
+++ b/src/Quilombolas.js
@@ -37,71 +37,41 @@ import ContrastBar from './Components/ContrastBar'
 
 import { Store } from './Store'
 
-
-var ck = new Cookies();
 var contrastCK = new Cookies();
 var cookieStatus = contrastCK.get('contrast');
 
+function Quilombolas() {
 
-class Quilombolas extends Component {
-  constructor(props) {
-    super(props);
-    this.whereIAm = this.whereIAm.bind(this);
+  var contrastString = '';
+  if(cookieStatus === 'true'){
+    contrastString = 'Contrast'
   }
 
-  componentDidMount() {
-    this.whereIAm()
+  //
+  const { state, dispatch } = React.useContext(Store);
+  let states = { "APRESENTAÇÃO": false, "EIXO 1": false, "EIXO 2": false, "EIXO 3": false, "EIXO 4": false, "SOBRE": false }
+  if (state.page in states) {
+    states[state.page] = true
+  } 
+  else {
+    states[0] = true
   }
 
-  render() {
-    var contrastString = '';
-    if(cookieStatus === 'true'){
-      contrastString = 'Contrast'
-    }
-    const cookie = new Cookies();
-    var clicked = cookie.get('mainPageClicked')
-    var states = {"APRESENTAÇÃO": false, "EIXO 1": true, "EIXO 2": false, "EIXO 3": false, "EIXO 4": false,"SOBRE": false}
-    if (clicked !== undefined){
-      if (clicked in states){
-        states["EIXO 1"] = false;
-        states[clicked] = true;
-      }
-      else{
-        states = {"APRESENTAÇÃO": true, "EIXO 1": false, "EIXO 2": false, "EIXO 3": false, "EIXO 4": false,"SOBRE": false}
-        ck.set('mainPageClicked', 'APRESENTAÇÃO');
-      }
-    }
-    else{
-      // Redirect user to the main page if he/she do not have a cookie
-      //window.location.href = homeURL()
-      console.log("teste")
-    }
-    return (
-      <div id={`${contrastString}mainPage`}>
-        <NavigationBar />
-        <div id='contentTabsDiv'>
-          <Tabs className={`tab-demo z-depth-1 ${contrastString}mainPageRedTab`} onChange={this.whereIAm}>
-            <Tab title="Apresentação" active={states["APRESENTAÇÃO"]}> <QuilombolaPresentation/> </Tab>
-            <Tab title="Eixo 1" active={states["EIXO 1"]}> <Eixo1/> </Tab>
-            <Tab title="Eixo 2" active={states["EIXO 2"]}> <Eixo2/> </Tab>
-            <Tab title="Eixo 3" active={states["EIXO 3"]}> <Eixo3/> </Tab>
-            <Tab title="Eixo 4" active={states["EIXO 4"]}> <Eixo4/> </Tab>
-            <Tab title="Sobre" active={states["SOBRE"]}> <QuilombolaAbout/></Tab>
-          </Tabs>
-        </div>
+  return (
+    <div id={`${contrastString}mainPage`}>
+      <NavigationBar />
+      <div id='contentTabsDiv'>
+        {/* <Tabs className={`tab-demo z-depth-1 ${contrastString}mainPageRedTab`} onChange={this.whereIAm}> */}
+        <Tabs className={`tab-demo z-depth-1 ${contrastString}mainPageRedTab`}>
+          <Tab title="Apresentação" active={states["APRESENTAÇÃO"]}> <QuilombolaPresentation/> </Tab>
+          <Tab title="Eixo 1" active={states["EIXO 1"]}> <Eixo1/> </Tab>
+          <Tab title="Eixo 2" active={states["EIXO 2"]}> <Eixo2/> </Tab>
+          <Tab title="Eixo 3" active={states["EIXO 3"]}> <Eixo3/> </Tab>
+          <Tab title="Eixo 4" active={states["EIXO 4"]}> <Eixo4/> </Tab>
+          <Tab title="Sobre" active={states["SOBRE"]}> <QuilombolaAbout/></Tab>
+        </Tabs>
       </div>
-    );
-  }
-
-  whereIAm(e, ev){
-    if(ev){
-      ck.set('mainPageClicked', ev.target.innerText);
-      this.setState({visited:ev.target.innerText});
-    }
-    sleep(1).then(() => {
-      if(document.getElementsByClassName('clearmapbtn')[0])
-        document.getElementsByClassName('clearmapbtn')[0].click()
-    });
-  }
+    </div>
+  );
 }
 export default Quilombolas;
-- 
GitLab


From 18c72084a4667824b6baec442d807de9e69d073d Mon Sep 17 00:00:00 2001
From: eht17 <eht17@inf.ufpr.br>
Date: Thu, 21 Feb 2019 12:00:28 -0300
Subject: [PATCH 09/23] Add tab support to page context

---
 src/Components/MainBanner.js    |   4 -
 src/Components/MainCard.js      |  42 +------
 src/Components/NavigationBar.js |   2 -
 src/MainPage.js                 |   4 -
 src/Quilombolas.js              |   9 +-
 src/Store.js                    |  20 +++
 src/SubPages/Eixo1.js           | 215 +++++++++++++++-----------------
 src/SubPages/Eixo2.js           |  22 ++--
 src/SubPages/Eixo3.js           | 162 ++++++++++++------------
 src/SubPages/Eixo4.js           |  11 +-
 src/SubPages/QuilombolaAbout.js | 177 +++++++++++++-------------
 11 files changed, 304 insertions(+), 364 deletions(-)

diff --git a/src/Components/MainBanner.js b/src/Components/MainBanner.js
index a49738df..25a2011a 100644
--- a/src/Components/MainBanner.js
+++ b/src/Components/MainBanner.js
@@ -23,16 +23,13 @@ along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
 import React, { Component } from 'react';
 import logo from '../Images/SMPPIRBanner.png';
 import contrastLogo from '../Images/SMPPIRBannerContrast.png'
-import BarraBrasil from './BarraBrasil'
 import { Card, Row, Col } from 'react-materialize'
 import Cookies from 'universal-cookie';
-
 import '../Styles/MainBanner.css'
 
 var contrastCK = new Cookies();
 var cookieStatus = contrastCK.get('contrast');
 var img = logo;
-//{`${contrastString}mainPage`}
 
 
 class MainBanner extends Component { 
@@ -44,7 +41,6 @@ class MainBanner extends Component {
     }
     return (
       <div>
-        {/* <BarraBrasil /> */}
         <Card id={`${contrastString}mainBannerCard`}>
           <Row>
             <Col s={12} m={6}>
diff --git a/src/Components/MainCard.js b/src/Components/MainCard.js
index f4103f24..3759e4f0 100644
--- a/src/Components/MainCard.js
+++ b/src/Components/MainCard.js
@@ -46,7 +46,7 @@ function createRoutes(subpages, color) {
   React.useEffect(()=>{});
 
   const listItems = subpages['links'].map((subp, i) =>
-    <Link onClick={() => { setPageAction(subp) && console.log(subp) }} key={subp} className={color + ' waves-effect waves spacingInCard'} to={subpages['route']} >
+    <Link onClick={() => { setPageAction(subp) }} key={subp} className={color + ' waves-effect waves spacingInCard'} to={subpages['route']} >
       {subp}
     </Link>
   );
@@ -70,45 +70,5 @@ function MainCard(props){
     </div>
   );
 }
-// class MainCard extends Component { 
-  
-//   constructor(props) {
-//     super(props);
-//     this.setCookie = this.setCookie.bind(this);
-//   }
-
-//   setCookie(e) {      
-//       ck.set('mainPageClicked',e.target.text);
-//   }
-//   render() {  
-
-//     var { color, title, subpages, text, image } = this.props;
-//     var contrastString = '';
-//      if(cookieStatus === 'true'){
-//       contrastString = 'Contrast'; 
-//       color = 'mainPageContrast'
-//     }
-//     return (
-//       <div>
-//         <Card className={`${contrastString}card-MainPage`} header={<CardTitle reveal image={require('../Images/'+image)} waves='light'/>}
-//             title={title}
-//             reveal={<div>{text}</div>}>
-//             {this.createRoutes(subpages, color)}
-//         </Card>       
-//       </div>
-//     );
-//   }
-// // 
-//   createRoutes(subpages, color) {
-//     const listItems = subpages['links'].map((subp, i) =>
-//       <a onClick={this.setCookie} key={subp} className={color+' waves-effect waves spacingInCard'} href={subpages['route']} >
-//         {subp}
-//       </a>
-//     );
-//     return (
-//       <div className={'listMainPage'}>{listItems}</div>
-//     );
-//   }
-// }
 
 export default MainCard;
\ No newline at end of file
diff --git a/src/Components/NavigationBar.js b/src/Components/NavigationBar.js
index 9b843a12..0ed047a7 100644
--- a/src/Components/NavigationBar.js
+++ b/src/Components/NavigationBar.js
@@ -23,7 +23,6 @@ along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
 import React, { Component } from 'react';
 import logo from '../Images/PortalLogo.png';
 import logoContrast from '../Images/PortalLogoContrast.png'
-import BarraBrasil from './BarraBrasil'
 import { Navbar, NavItem } from 'react-materialize'
 import Cookies from 'universal-cookie';
 
@@ -46,7 +45,6 @@ class NavigationBar extends Component {
     }
     return (
       <div>
-        {/* <BarraBrasil /> */}
         <Navbar className={`${contrastString}navBackground z-depth-2`} brand={<img alt='Logo do SMPPIR' id={'portal-logo'} src={logoSMPPIR} style={{width: 200, marginLeft: 20, marginTop: 15}}/>} right>
           <NavItem onClick={this.removeCSS} id={`${contrastString}navBarInicio`} className={'z-depth-0 '+actualPath} href='/'>Início</NavItem>
           <NavItem onClick={this.removeCSS} id={`${contrastString}navBarBrasilQ`} className={'z-depth-0 '+actualPath} href='/quilombolas'>Brasil Quilombola</NavItem>
diff --git a/src/MainPage.js b/src/MainPage.js
index c9e26e3e..b49902d7 100644
--- a/src/MainPage.js
+++ b/src/MainPage.js
@@ -18,15 +18,11 @@ You should have received a copy of the GNU General Public License
 along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
 */
 
-
-
 import React, { Component } from 'react';
 import MainBanner from './Components/MainBanner'
-import AppFooter from './Components/AppFooter'
 import MainCard from './Components/MainCard'
 import { Col, Row } from 'react-materialize'
 import Cookies from 'universal-cookie';
-import ContrastBar from './Components/ContrastBar'
 import './Styles/MainPage.css'
 
 var contrastCK = new Cookies();
diff --git a/src/Quilombolas.js b/src/Quilombolas.js
index 91002fa0..d5e0c8c5 100644
--- a/src/Quilombolas.js
+++ b/src/Quilombolas.js
@@ -28,13 +28,9 @@ import Eixo3 from './SubPages/Eixo3'
 import Eixo4 from './SubPages/Eixo4'
 import QuilombolaPresentation from './SubPages/QuilombolaPresentation'
 import QuilombolaAbout from './SubPages/QuilombolaAbout'
-import AppFooter from './Components/AppFooter'
 import { Tab, Tabs } from 'react-materialize';
 import './Styles/Quilombolas.css';
 import Cookies from 'universal-cookie';
-import {sleep, homeURL} from './enviroment'
-import ContrastBar from './Components/ContrastBar'
-
 import { Store } from './Store'
 
 var contrastCK = new Cookies();
@@ -47,21 +43,20 @@ function Quilombolas() {
     contrastString = 'Contrast'
   }
 
-  //
+  // Get imformation about which page was accessed
   const { state, dispatch } = React.useContext(Store);
   let states = { "APRESENTAÇÃO": false, "EIXO 1": false, "EIXO 2": false, "EIXO 3": false, "EIXO 4": false, "SOBRE": false }
   if (state.page in states) {
     states[state.page] = true
   } 
   else {
-    states[0] = true
+    states["APRESENTAÇÃO"] = true
   }
 
   return (
     <div id={`${contrastString}mainPage`}>
       <NavigationBar />
       <div id='contentTabsDiv'>
-        {/* <Tabs className={`tab-demo z-depth-1 ${contrastString}mainPageRedTab`} onChange={this.whereIAm}> */}
         <Tabs className={`tab-demo z-depth-1 ${contrastString}mainPageRedTab`}>
           <Tab title="Apresentação" active={states["APRESENTAÇÃO"]}> <QuilombolaPresentation/> </Tab>
           <Tab title="Eixo 1" active={states["EIXO 1"]}> <Eixo1/> </Tab>
diff --git a/src/Store.js b/src/Store.js
index ea2a616c..8016bc84 100644
--- a/src/Store.js
+++ b/src/Store.js
@@ -1,3 +1,23 @@
+/*
+Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of Portal-SMPPIR-React.
+
+Portal-SMPPIR-React is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Portal-SMPPIR-React is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
 import React from 'react'
 
 export const Store = React.createContext();
diff --git a/src/SubPages/Eixo1.js b/src/SubPages/Eixo1.js
index 24302706..24e4fda2 100644
--- a/src/SubPages/Eixo1.js
+++ b/src/SubPages/Eixo1.js
@@ -36,14 +36,13 @@ import Cookies from 'universal-cookie';
 import Map from '../Components/Map';
 
 
-import csv1 from './CSVoriginais/pbq/comunidades_certificadas_por_uf.csv'
-import csv2 from './CSVoriginais/pbq/comunidades_tituladas_por_uf_ano.csv'
-import csv4 from './CSVoriginais/pbq/COMUNIDADES.csv'
-import csv5 from './CSVoriginais/pbq/comunidades_por_status_por_uf.csv'
+// import csv1 from './CSVoriginais/pbq/comunidades_certificadas_por_uf.csv'
+// import csv2 from './CSVoriginais/pbq/comunidades_tituladas_por_uf_ano.csv'
+// import csv4 from './CSVoriginais/pbq/COMUNIDADES.csv'
+// import csv5 from './CSVoriginais/pbq/comunidades_por_status_por_uf.csv'
 
 import './Styles/Eixo1.css'
 
-var ck = new Cookies();
 var contrastCK = new Cookies();
 var cookieStatus = contrastCK.get('contrast');
 
@@ -62,116 +61,112 @@ const customNames = {"Ano":"Ano",
   "Comunidades Certificadas":"Comunidades Certificadas"}
 
 
-  class Eixo1 extends Component {
-    constructor(props) {
-      super(props);
-      this.state = {
-        clickedInMap: null
-      };
-      this.getMapClick = this.getMapClick.bind(this);
-      this.clearMap = this.clearMap.bind(this);
-    }
+class Eixo1 extends Component {
+  constructor(props) {
+    super(props);
+    this.state = {
+      clickedInMap: null
+    };
+    this.getMapClick = this.getMapClick.bind(this);
+    this.clearMap = this.clearMap.bind(this);
+  }
 
   componentDidMount(){
-    if (ck.get('mainPageClicked') === "EIXO 1")
-      this.clearMap()
+    this.clearMap()
   }
 
   render() {
-      var contrastString = '';
-      if(cookieStatus === 'true'){
-        contrastString = 'Contrast'
-      }
-      if (ck.get('mainPageClicked') === "EIXO 1")
-      return (
-        <div>
-          <Row>
-            <Col l={3} m={5} s={8}>
-              <h4 className="eixoHeaderQ">Eixo 1</h4>
-            </Col>
-            <Col l={5} m={8} s={8}>
-              <p className="eixoSubHeader"> Clique sobre qualquer estado em um mapa ou
-                tabela para apresentar os dados somente daquele estado. Clique
-                novamente para voltar aos dados do Brasil. </p>
-            </Col>
-          </Row>
-
-          <div className="e1pannels">
-            <Card id="e1pannel-1" title="Certificações Emitidas">
-              <GrayBar text ="por UF"/>
-              <Map getMapClick={this.getMapClick} />
-            
-              <Button className="clearmapbtn" onClick={this.clearMap}> Limpar Mapa </Button>
-
-              <p>As comunidades certificadas estão distribuídas por todo o Brasil, com
-                maior concentração nos estados do Maranhão e da Bahia.</p>
-
-              {data.gete1p1()[getStateExtendedName(this.state.clickedInMap).currentState] ? (
-                <UfBar img={MapMarker} ufname={getStateExtendedName(this.state.clickedInMap).currentState} val={data.gete1p1()[getStateExtendedName(this.state.clickedInMap).currentState].Certificadas + " comunidades"}/>
-              ):(
-                <UfBar img={MapMarker} ufname={getStateExtendedName(this.state.clickedInMap).currentState} val="Sem informação"/>
-              )}
-              <CardFooter fonte="Fundação Cultural Palmares / MinC (Jan, 2016)"/>
-            </Card>
-
-            <Card id="e1pannel-2" title="Evoluções de Certificações e Regularizações">
-              <GrayBar text="Certificações Emitidas e Tituladas por Ano"/>
-
-
-              {data.gete1p2()[getStateExtendedName(this.state.clickedInMap).currentState] ? (
-                <BuildLineNotFixed data={data.gete1p2()[getStateExtendedName(this.state.clickedInMap).currentState]} customKeys={customNames} dataKey="Ano"/>
-              ):(
-                <BuildLineNotFixed data={nullInfo} customKeys={nullKeys} dataKey="Ano"/>
-              )}
-
-              <CardFooter fonte="Comitê Gestor do Programa Brasil Quilombola, Fundação Cultural Palmares e INCRA (Jan, 2016)"/>
-            </Card>
-
-            <Card id="e1pannel-3" title="Titulações">
-              <Table header={["Unidade Federal","Comunidades Tituladas"]} body ={data.gete1p31()} classes="striped smallCells"/>
-
-              {data.gete1p32()[getStateExtendedName(this.state.clickedInMap).currentState] ? (
-                <UfBar ufname={getStateExtendedName(this.state.clickedInMap).currentState} val={data.gete1p32()[getStateExtendedName(this.state.clickedInMap).currentState] + " comunidades tituladas"}/>
-              ):(
-                <UfBar ufname={getStateExtendedName(this.state.clickedInMap).currentState} val="Sem informação"/>
-              )}
-
-              <CardFooter fonte="INCRA (Jan, 2016)"/>
-            </Card>
-
-            <Card id="e1pannel-4" title="Lista de Comunidades Reconhecidas Oficialmente pelo estado">
-              <p>Clique na comunidade para ter acesso ao mapa com informações detalhadas sobre ela</p>
-
-              <Table header={["ID","Comunidade","Território","Certificação","Titulação"]} body={this.jsonToArray(data.gete1p4()[getStateExtendedName(this.state.clickedInMap).currentState])} classes="striped smallCells" divClasses="scrolltable"/>
-
-              <CardFooter fonte="Comitê Gestor do Programa Brasil Quilombola, Fundação Cultural Palmares / MinC e INCRA (Jan, 2016)"/>
-            </Card>
-
-            <Card id="e1pannel-5" title="Estágio dos processos">
-              <GrayBar text="por Estágio"/>
-              {data.gete1p5()[getStateExtendedName(this.state.clickedInMap).currentState] ? (
-                <BuildPie data={data.gete1p5()[getStateExtendedName(this.state.clickedInMap).currentState]} dataKey="total" nameKey="estagio" />
-              ):(
-                <BuildPie data={nullInfo} dataKey="valor" nameKey="tipo" />
-              )}
-
-              <CardFooter fonte="INCRA (Jan, 2016)"/>
-            </Card>
-          </div>
-        </div>
-      );
-      else return <div></div>
-
+    var contrastString = '';
+    if(cookieStatus === 'true'){
+      contrastString = 'Contrast'
     }
+    return (
+      <div>
+        <Row>
+          <Col l={3} m={5} s={8}>
+            <h4 className="eixoHeaderQ">Eixo 1</h4>
+          </Col>
+          <Col l={5} m={8} s={8}>
+            <p className="eixoSubHeader"> Clique sobre qualquer estado em um mapa ou
+              tabela para apresentar os dados somente daquele estado. Clique
+              novamente para voltar aos dados do Brasil. </p>
+          </Col>
+        </Row>
+
+        <div className="e1pannels">
+          <Card id="e1pannel-1" title="Certificações Emitidas">
+            <GrayBar text ="por UF"/>
+            <Map getMapClick={this.getMapClick} />
+          
+            <Button className="clearmapbtn" onClick={this.clearMap}> Limpar Mapa </Button>
+
+            <p>As comunidades certificadas estão distribuídas por todo o Brasil, com
+              maior concentração nos estados do Maranhão e da Bahia.</p>
+
+            {data.gete1p1()[getStateExtendedName(this.state.clickedInMap).currentState] ? (
+              <UfBar img={MapMarker} ufname={getStateExtendedName(this.state.clickedInMap).currentState} val={data.gete1p1()[getStateExtendedName(this.state.clickedInMap).currentState].Certificadas + " comunidades"}/>
+            ):(
+              <UfBar img={MapMarker} ufname={getStateExtendedName(this.state.clickedInMap).currentState} val="Sem informação"/>
+            )}
+            <CardFooter fonte="Fundação Cultural Palmares / MinC (Jan, 2016)"/>
+          </Card>
+
+          <Card id="e1pannel-2" title="Evoluções de Certificações e Regularizações">
+            <GrayBar text="Certificações Emitidas e Tituladas por Ano"/>
+
+
+            {data.gete1p2()[getStateExtendedName(this.state.clickedInMap).currentState] ? (
+              <BuildLineNotFixed data={data.gete1p2()[getStateExtendedName(this.state.clickedInMap).currentState]} customKeys={customNames} dataKey="Ano"/>
+            ):(
+              <BuildLineNotFixed data={nullInfo} customKeys={nullKeys} dataKey="Ano"/>
+            )}
+
+            <CardFooter fonte="Comitê Gestor do Programa Brasil Quilombola, Fundação Cultural Palmares e INCRA (Jan, 2016)"/>
+          </Card>
+
+          <Card id="e1pannel-3" title="Titulações">
+            <Table header={["Unidade Federal","Comunidades Tituladas"]} body ={data.gete1p31()} classes="striped smallCells"/>
+
+            {data.gete1p32()[getStateExtendedName(this.state.clickedInMap).currentState] ? (
+              <UfBar ufname={getStateExtendedName(this.state.clickedInMap).currentState} val={data.gete1p32()[getStateExtendedName(this.state.clickedInMap).currentState] + " comunidades tituladas"}/>
+            ):(
+              <UfBar ufname={getStateExtendedName(this.state.clickedInMap).currentState} val="Sem informação"/>
+            )}
+
+            <CardFooter fonte="INCRA (Jan, 2016)"/>
+          </Card>
+
+          <Card id="e1pannel-4" title="Lista de Comunidades Reconhecidas Oficialmente pelo estado">
+            <p>Clique na comunidade para ter acesso ao mapa com informações detalhadas sobre ela</p>
+
+            <Table header={["ID","Comunidade","Território","Certificação","Titulação"]} body={this.jsonToArray(data.gete1p4()[getStateExtendedName(this.state.clickedInMap).currentState])} classes="striped smallCells" divClasses="scrolltable"/>
+
+            <CardFooter fonte="Comitê Gestor do Programa Brasil Quilombola, Fundação Cultural Palmares / MinC e INCRA (Jan, 2016)"/>
+          </Card>
+
+          <Card id="e1pannel-5" title="Estágio dos processos">
+            <GrayBar text="por Estágio"/>
+            {data.gete1p5()[getStateExtendedName(this.state.clickedInMap).currentState] ? (
+              <BuildPie data={data.gete1p5()[getStateExtendedName(this.state.clickedInMap).currentState]} dataKey="total" nameKey="estagio" />
+            ):(
+              <BuildPie data={nullInfo} dataKey="valor" nameKey="tipo" />
+            )}
+
+            <CardFooter fonte="INCRA (Jan, 2016)"/>
+          </Card>
+        </div>
+      </div>
+    );
+  }
 
-    getMapClick(clicked) {
-      this.setState({clickedInMap: clicked});
-      // console.log(JSON.stringify(data.gete1p32()))
-    }
+  getMapClick(clicked) {
+    this.setState({clickedInMap: clicked});
+    // console.log(JSON.stringify(data.gete1p32()))
+  }
 
-    clearMap(){
-      this.setState({clickedInMap: null});
-    }
+  clearMap(){
+    this.setState({clickedInMap: null});
+  }
 
   jsonToArray(jsonData){
     var returnArray = []
@@ -188,8 +183,6 @@ const customNames = {"Ano":"Ano",
       return(returnArray)
       }
     }
+}
 
-
-  }
-
-  export default Eixo1;
+export default Eixo1;
diff --git a/src/SubPages/Eixo2.js b/src/SubPages/Eixo2.js
index 20e2f66e..993bae6d 100644
--- a/src/SubPages/Eixo2.js
+++ b/src/SubPages/Eixo2.js
@@ -44,7 +44,6 @@ import csv5 from './CSVoriginais/pbq/pbq_luz_para_todos_por_regiao.csv'
 import csv6 from './CSVoriginais/pbq/pbq_mcasamvida_unidades_por_uf_ano.csv'
 import csv7 from './CSVoriginais/pbq/pbq_obras_saneamento_por_uf_ano.csv'
 
-var ck = new Cookies();
 var contrastCK = new Cookies();
 var cookieStatus = contrastCK.get('contrast');
 
@@ -54,26 +53,24 @@ const customNames = {"Ano":"Ano",
   const customNames2 = {"Ano":"Ano",
     "Valor Contratado em Milhões":"Valor Contratado em Milhões"}
 
-    class Eixo2 extends Component {
-      constructor(props) {
-        super(props);
-        this.state = {
-          clickedInMap: null
-        };
-      this.getMapClick = this.getMapClick.bind(this);
-      this.clearMap = this.clearMap.bind(this);
+class Eixo2 extends Component {
+  constructor(props) {
+    super(props);
+    this.state = {
+      clickedInMap: null
+    };
+  this.getMapClick = this.getMapClick.bind(this);
+  this.clearMap = this.clearMap.bind(this);
   }
 
   componentDidMount(){
-    if (ck.get('mainPageClicked') === "EIXO 2")
-      this.clearMap()
+    this.clearMap()
   }
   render() {
     var contrastString = '';
     if(cookieStatus === 'true'){
       contrastString = 'Contrast'
     }
-    if (ck.get('mainPageClicked') === "EIXO 2")
     return (
       <div>
       <Row>
@@ -167,7 +164,6 @@ const customNames = {"Ano":"Ano",
       </div>
       </div>
     );
-    else return <div></div>
   }
   getMapClick(clicked) {
     this.setState({clickedInMap: clicked});
diff --git a/src/SubPages/Eixo3.js b/src/SubPages/Eixo3.js
index 41d8c18a..431f9294 100644
--- a/src/SubPages/Eixo3.js
+++ b/src/SubPages/Eixo3.js
@@ -44,8 +44,6 @@ import csv5 from './CSVoriginais/pbq/daps_emitidas_por_ano_por_uf.csv'
 import csv6 from './CSVoriginais/pbq/paa_quilombolas_por_ano_por_uf.csv'
 
 
-
-var ck = new Cookies();
 var contrastCK = new Cookies();
 var cookieStatus = contrastCK.get('contrast');
 
@@ -65,103 +63,102 @@ class Eixo3 extends Component {
     this.clearMap = this.clearMap.bind(this);
   }
 
+  componentDidMount() {
+    this.clearMap()
+  }
+
   render() {
     var contrastString = '';
     if(cookieStatus === 'true'){
       contrastString = 'Contrast'
     }
-    if (ck.get('mainPageClicked') === "EIXO 3"){
-      return (
-        <div>
-        <Row>
-        <Col l={3} m={5} s={8}>
-        <h4 className={`${contrastString}eixoHeaderQ`}>Eixo 3</h4>
-        </Col>
-        <Col l={5} m={8} s={8}>
-        <p className={`${contrastString}eixoSubHeader`}> Clique sobre qualquer estado em um mapa ou tabela para apresentar os
-        dados somente daquele estado. Clique novamente para voltar aos dados do Brasil. </p>
-        </Col>
-        </Row>
-
-        <div className="e3pannels">
-          <Card id="e3pannel-1" title="Renda Média por Pessoa das Famílias Quilombolas, Segundo CadÚnico (R$)">
-            <p className="center">Por UF</p>
-            <HeatMap getMapClick={this.getMapClick} datafield="Renda" data={data.gete3p1()} levels={[{"min":0,"max":170,"color":"#c0d1db"},{"min":170,"max":272,"color":"#849eb5"},{"min":272,"max":374,"color":"#476d90"},{"min":377,"max":200000,"color":"#0a3a6a"}]} />
-            <Button className="clearmapbtn" onClick={this.clearMap}> Limpar Mapa </Button>
-
-            <p>A maior concentração de renda entre as famílias quilombolas cadastradas se localiza nas regiões Centro-Oeste, Sudeste e Sul.</p>
-            {data.gete3p1()[getStateExtendedName(this.state.clickedInMap).currentState] ? (
-              <UfBar img={coins} ufname={getStateExtendedName(this.state.clickedInMap).currentState} val={"R$"+ data.gete3p1()[getStateExtendedName(this.state.clickedInMap).currentState].Renda +" em média"}/>
-                  ):(
-              <UfBar img={coins} ufname={getStateExtendedName(this.state.clickedInMap).currentState} val="Sem informação"/>
+    return (
+      <div>
+      <Row>
+      <Col l={3} m={5} s={8}>
+      <h4 className={`${contrastString}eixoHeaderQ`}>Eixo 3</h4>
+      </Col>
+      <Col l={5} m={8} s={8}>
+      <p className={`${contrastString}eixoSubHeader`}> Clique sobre qualquer estado em um mapa ou tabela para apresentar os
+      dados somente daquele estado. Clique novamente para voltar aos dados do Brasil. </p>
+      </Col>
+      </Row>
+
+      <div className="e3pannels">
+        <Card id="e3pannel-1" title="Renda Média por Pessoa das Famílias Quilombolas, Segundo CadÚnico (R$)">
+          <p className="center">Por UF</p>
+          <HeatMap getMapClick={this.getMapClick} datafield="Renda" data={data.gete3p1()} levels={[{"min":0,"max":170,"color":"#c0d1db"},{"min":170,"max":272,"color":"#849eb5"},{"min":272,"max":374,"color":"#476d90"},{"min":377,"max":200000,"color":"#0a3a6a"}]} />
+          <Button className="clearmapbtn" onClick={this.clearMap}> Limpar Mapa </Button>
+
+          <p>A maior concentração de renda entre as famílias quilombolas cadastradas se localiza nas regiões Centro-Oeste, Sudeste e Sul.</p>
+          {data.gete3p1()[getStateExtendedName(this.state.clickedInMap).currentState] ? (
+            <UfBar img={coins} ufname={getStateExtendedName(this.state.clickedInMap).currentState} val={"R$"+ data.gete3p1()[getStateExtendedName(this.state.clickedInMap).currentState].Renda +" em média"}/>
+                ):(
+            <UfBar img={coins} ufname={getStateExtendedName(this.state.clickedInMap).currentState} val="Sem informação"/>
+          )}
+          <CardFooter data={csv1} source="Cadastro Único para Programas Sociais (CadÚnico) Min. do Desenvolvimento Social e Combate à Fome (MDS) (Jan, 2016)"/>
+          </Card>
+
+          <Card id="e3pannel-2" title="Famílias Quilombolas Segundo Renda">
+          <GrayBar text="Percentual de Famílias por Faixa de Renda"/>
+          <BuildPie data={this.fixdatap2(data.gete3p2()[getStateExtendedName(this.state.clickedInMap).currentState])} dataKey="Famílias" nameKey="Faixa de Renda" minHeight={300}/>
+          <GrayBar text="Número de Famílias por Faixa de Renda"/>
+          <BuildBar data={data.gete3p2()[getStateExtendedName(this.state.clickedInMap).currentState]} dataKey="Faixa de Renda" customKeys={{"Faixa de Renda":"Faixa de Renda","Famílias":"Famílias"}}/>
+
+          <CardFooter data={csv2} source="CadÚnico / MDS (Jan, 2016)"/>
+          </Card>
+
+          <Card id="e3pannel-3" title="Extrativismo">
+          <GrayBar text="Percentual"/>
+
+          {data.gete3p3()[getStateExtendedName(this.state.clickedInMap).currentState] ? (<div>
+            <BuildPie data={this.fixDataP3(data.gete3p3()[getStateExtendedName(this.state.clickedInMap).currentState])} dataKey="valor" nameKey="tipo" minHeight={250}/>
+            <ValueBar val={this.calculaPropP3(data.gete3p3()[getStateExtendedName(this.state.clickedInMap).currentState],0)+ "% são extrativistas"}/>
+            </div>
+            ):(<div>
+            <BuildPie data={nullInfo} dataKey="valor" nameKey="tipo" minHeight={250}/>
+            <ValueBar val={"Sem informação"}/>
+            </div>
             )}
-            <CardFooter data={csv1} source="Cadastro Único para Programas Sociais (CadÚnico) Min. do Desenvolvimento Social e Combate à Fome (MDS) (Jan, 2016)"/>
-            </Card>
-
-            <Card id="e3pannel-2" title="Famílias Quilombolas Segundo Renda">
-            <GrayBar text="Percentual de Famílias por Faixa de Renda"/>
-            <BuildPie data={this.fixdatap2(data.gete3p2()[getStateExtendedName(this.state.clickedInMap).currentState])} dataKey="Famílias" nameKey="Faixa de Renda" minHeight={300}/>
-            <GrayBar text="Número de Famílias por Faixa de Renda"/>
-            <BuildBar data={data.gete3p2()[getStateExtendedName(this.state.clickedInMap).currentState]} dataKey="Faixa de Renda" customKeys={{"Faixa de Renda":"Faixa de Renda","Famílias":"Famílias"}}/>
-
-            <CardFooter data={csv2} source="CadÚnico / MDS (Jan, 2016)"/>
-            </Card>
-
-            <Card id="e3pannel-3" title="Extrativismo">
-            <GrayBar text="Percentual"/>
-
-            {data.gete3p3()[getStateExtendedName(this.state.clickedInMap).currentState] ? (<div>
-              <BuildPie data={this.fixDataP3(data.gete3p3()[getStateExtendedName(this.state.clickedInMap).currentState])} dataKey="valor" nameKey="tipo" minHeight={250}/>
-              <ValueBar val={this.calculaPropP3(data.gete3p3()[getStateExtendedName(this.state.clickedInMap).currentState],0)+ "% são extrativistas"}/>
-              </div>
-              ):(<div>
-              <BuildPie data={nullInfo} dataKey="valor" nameKey="tipo" minHeight={250}/>
-              <ValueBar val={"Sem informação"}/>
-              </div>
-              )}
 
-            <p>O extrativismo é a principal atividade de subsistência das famílias quilombolas.</p>
+          <p>O extrativismo é a principal atividade de subsistência das famílias quilombolas.</p>
 
-            <CardFooter data={csv3} source="CadÚnico / MDS"/>
-            </Card>
+          <CardFooter data={csv3} source="CadÚnico / MDS"/>
+          </Card>
 
-            <Card id="e3pannel-4" title="Bolsa Família">
-            <GrayBar text="Percentual de Famílias Quilombolas Beneficiárias"/>
+          <Card id="e3pannel-4" title="Bolsa Família">
+          <GrayBar text="Percentual de Famílias Quilombolas Beneficiárias"/>
 
-            <BuildPie data={this.fixDataP4(data.gete3p4()[getStateExtendedName(this.state.clickedInMap).currentState])} dataKey="valor" nameKey="tipo" minHeight={250}/>
-            <ValueBar val={this.calculaPropP4(data.gete3p4()[getStateExtendedName(this.state.clickedInMap).currentState],0)+ "% recebem Bolsa Família"}/>
+          <BuildPie data={this.fixDataP4(data.gete3p4()[getStateExtendedName(this.state.clickedInMap).currentState])} dataKey="valor" nameKey="tipo" minHeight={250}/>
+          <ValueBar val={this.calculaPropP4(data.gete3p4()[getStateExtendedName(this.state.clickedInMap).currentState],0)+ "% recebem Bolsa Família"}/>
 
-            <p>A transferência de renda por meio da Bolsa Família tem ampla cobertura sobre as famílias quilombolas.</p>
+          <p>A transferência de renda por meio da Bolsa Família tem ampla cobertura sobre as famílias quilombolas.</p>
 
-            <CardFooter data={csv4} source="CadÚnico / MDS"/>
+          <CardFooter data={csv4} source="CadÚnico / MDS"/>
 
-            </Card>
+          </Card>
 
-            <Card id="e3pannel-5" title="Declaração de Aptidão ao Pronaf">
-            <GrayBar text="DAPs Emitidas por Ano"/>
-            <BuildBar data={data.gete3p51()[getStateExtendedName(this.state.clickedInMap).currentState]} dataKey="Ano" customKeys={{"Ano":"Ano","DAPs Emitidas":"DAPs Emitidas"}}/>
-            <p>A DAP (Declaração de Aptidão ao Pronaf) é o documento necessário para obtenção de financiamento do Pronaf (Programa Nacional de Fortalecimento da Agricultura Familiar).</p>
-            <ValueBar val={data.gete3p52()[getStateExtendedName(this.state.clickedInMap).currentState] + " DAPs emitidas"}/>
-            <CardFooter data={csv5} source="Ministério do Desenvolvimento Agrário"/>
-            </Card>
+          <Card id="e3pannel-5" title="Declaração de Aptidão ao Pronaf">
+          <GrayBar text="DAPs Emitidas por Ano"/>
+          <BuildBar data={data.gete3p51()[getStateExtendedName(this.state.clickedInMap).currentState]} dataKey="Ano" customKeys={{"Ano":"Ano","DAPs Emitidas":"DAPs Emitidas"}}/>
+          <p>A DAP (Declaração de Aptidão ao Pronaf) é o documento necessário para obtenção de financiamento do Pronaf (Programa Nacional de Fortalecimento da Agricultura Familiar).</p>
+          <ValueBar val={data.gete3p52()[getStateExtendedName(this.state.clickedInMap).currentState] + " DAPs emitidas"}/>
+          <CardFooter data={csv5} source="Ministério do Desenvolvimento Agrário"/>
+          </Card>
 
-            <Card id="e3pannel-6" title="Programa de Aquisição de Alimentos">
-            <GrayBar text="Famílias Participando por Ano"/>
-            <p>O PAA fomenta a produção agrícula familiar ao mesmo tempo em que tenta reduzir a insegurança alimentar.</p>
-            <BuildBar data={data.gete3p6()[getStateExtendedName(this.state.clickedInMap).currentState]} dataKey="Ano" customKeys={{"Ano":"Ano","Famílias que Vendem para o PAA":"Famílias que Vendem para o PAA"}}/>
-            <ValueBar val={data.gete3p6()[getStateExtendedName(this.state.clickedInMap).currentState][1]['Famílias que Vendem para o PAA'] + " Famílias (2013)"}/>
-            <CardFooter data={csv6} source="Ministério do Desenvolvimento Agrário"/>
+          <Card id="e3pannel-6" title="Programa de Aquisição de Alimentos">
+          <GrayBar text="Famílias Participando por Ano"/>
+          <p>O PAA fomenta a produção agrícula familiar ao mesmo tempo em que tenta reduzir a insegurança alimentar.</p>
+          <BuildBar data={data.gete3p6()[getStateExtendedName(this.state.clickedInMap).currentState]} dataKey="Ano" customKeys={{"Ano":"Ano","Famílias que Vendem para o PAA":"Famílias que Vendem para o PAA"}}/>
+          <ValueBar val={data.gete3p6()[getStateExtendedName(this.state.clickedInMap).currentState][1]['Famílias que Vendem para o PAA'] + " Famílias (2013)"}/>
+          <CardFooter data={csv6} source="Ministério do Desenvolvimento Agrário"/>
 
-            </Card>
-
-          </div>
+          </Card>
 
         </div>
-      );
-    }
-    else {
-      return <div></div>
-    }
+
+      </div>
+    );
   }
   getMapClick(clicked) {
     this.setState({clickedInMap: clicked});
@@ -210,7 +207,4 @@ class Eixo3 extends Component {
   }
 }
 
-
-
-
 export default Eixo3;
diff --git a/src/SubPages/Eixo4.js b/src/SubPages/Eixo4.js
index 26efa6d8..ba208d8f 100644
--- a/src/SubPages/Eixo4.js
+++ b/src/SubPages/Eixo4.js
@@ -47,9 +47,6 @@ import csv7 from './CSVoriginais/pbq/equipes_saude_por_ano_por_uf.csv'
 import csv8 from './CSVoriginais/pbq/mais_medicos_por_ano_por_uf.csv'
 
 
-
-
-var ck = new Cookies();
 var contrastCK = new Cookies();
 var cookieStatus = contrastCK.get('contrast');
 
@@ -82,12 +79,16 @@ class Eixo4 extends Component {
     this.getMapClick = this.getMapClick.bind(this);
     this.clearMap = this.clearMap.bind(this);
   }
+
+  componentDidMount() {
+    this.clearMap()
+  }
+
   render() {
     var contrastString = '';
     if(cookieStatus === 'true'){
       contrastString = 'Contrast'
     }
-    if (ck.get('mainPageClicked') === "EIXO 4")
     return (
       <div>
         <Row>
@@ -201,8 +202,6 @@ class Eixo4 extends Component {
       </div>
     </div>
   );
-  else return <div></div>
-
 }
 getMapClick(clicked) {
   this.setState({clickedInMap: clicked});
diff --git a/src/SubPages/QuilombolaAbout.js b/src/SubPages/QuilombolaAbout.js
index 0d093e2c..9e6d979f 100644
--- a/src/SubPages/QuilombolaAbout.js
+++ b/src/SubPages/QuilombolaAbout.js
@@ -18,8 +18,6 @@ You should have received a copy of the GNU General Public License
 along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
 */
 
-
-
 import React, { Component } from 'react';
 import Cookies from 'universal-cookie';
 import {Card} from 'react-materialize';
@@ -33,7 +31,6 @@ import csv7 from './CSVoriginais/pbq/cadunico_domicilios_rurais_por_uf.csv'
 import csv8 from './CSVoriginais/pbq/cadunico_domicilios_servicos_presentes_por_uf.csv'
 
 
-var ck = new Cookies();
 var contrastCK = new Cookies();
 var cookieStatus = contrastCK.get('contrast');
 
@@ -41,103 +38,99 @@ var cookieStatus = contrastCK.get('contrast');
 class QuilombolaAbout extends Component {
   render() {
     var contrastString = '';
-    if(cookieStatus === 'true'){
+    if (cookieStatus === 'true') {
       contrastString = 'Contrast'
     }
-    if (ck.get('mainPageClicked') === "SOBRE")
     return (
       <div>
         <h4>Catálogo de indicadores disponíveis no sistema</h4>
         <div className="gridTemplate">
-          <Card  id={`${contrastString}c1`} title="Certificações Emitidas" >
+          <Card id={`${contrastString}c1`} title="Certificações Emitidas" >
+            <p>
+              Total de certificações emitidas em todos os anos pela Fundação Cultural Palmares, por Estado em que a comunidade se localiza.<br />
+              <b>Fonte:</b> Fundação Cultural Palmares, Ministério da Cultura<br />
+              <b>Data de Referência:</b> 2015<br />
+              <b>Fórmula de Cálculo:</b> Número total de certificações em cada Estado<br />
+              <b><a href={csv1} >Clique aqui para baixar os dados em CSV</a></b>
+            </p>
+          </Card>
+
+          <Card id={`${contrastString}c2`} title="Evolução de Certificações e Regularizações" >
+            <p>
+              Total de certificações emitidas (pela Fundação Cultural Palmares) e de territórios titulados (pelo INCRA ou Institutos de Terra) em todo o Brasil e nos Estados, a cada ano. Cada certificação se refere a uma comunidade, enquanto a titulação de um território pode englobar diversas comunidades que compartilham o mesmo território.<br />
+              <b>Fonte:</b> Comitê Gestor do Programa Brasil Quilombola, INCRA e Fundação Cultural Palmares, Ministério da Cultura<br />
+              <b>Data de Referência:</b> 2015<br />
+              <b>Fórmula de Cálculo:</b> Número total de certificações em cada ano e número de titulações conferidas em cada ano<br />
+              <b><a href={csv2}>Clique aqui para baixar os dados em CSV</a></b>
+            </p>
+          </Card>
+          <Card id={`${contrastString}c3`} title="Comunidades Tituladas" >
+            <p>
+              Total de titulações já emitidas em qualquer ano (pelo INCRA ou Institutos de Terra) em todo o Brasil e nos Estados.<br />
+              <b>Fonte:</b> INCRA<br />
+              <b>Data de Referência:</b> 2015<br />
+              <b>Fórmula de Cálculo:</b> Número de titulações conferidas em cada Estado<br />
+              <b><a href={csv2}>Clique aqui para baixar os dados em CSV</a></b>
+
+            </p>
+          </Card>
+          <Card id={`${contrastString}c4`} title="Lista de Comunidades Reconhecidas Oficialmente pelo Estado" >
+            <p>
+              Comunidades que já foram certificadas ou que estão em processo de titulação são oficialmente reconhecidas pelo Estado. Cada comunidade possui um identificador numérico e um nome pelo qual costuma ser chamada.<br />
+
+              <b>Fonte:</b> Comitê Gestor do Programa Brasil Quilombola, INCRA e Fundação Cultural Palmares, Ministério da Cultura<br />
+              <b>Data de Referência:</b> 2015<br />
+              <b><a href={csv4}>Clique aqui para baixar os dados em CSV</a></b>
+
+            </p>
+          </Card>
+          <Card id={`${contrastString}c5`} title="Estágio dos Processos" >
             <p>
-              Total de certificações emitidas em todos os anos pela Fundação Cultural Palmares, por Estado em que a comunidade se localiza.<br/>
-            <b>Fonte:</b> Fundação Cultural Palmares, Ministério da Cultura<br/>
-            <b>Data de Referência:</b> 2015<br/>
-            <b>Fórmula de Cálculo:</b> Número total de certificações em cada Estado<br/>
-            <b><a href={csv1} >Clique aqui para baixar os dados em CSV</a></b>
-          </p>
-        </Card>
-
-        <Card id={`${contrastString}c2`} title="Evolução de Certificações e Regularizações" >
-          <p>
-            Total de certificações emitidas (pela Fundação Cultural Palmares) e de territórios titulados (pelo INCRA ou Institutos de Terra) em todo o Brasil e nos Estados, a cada ano. Cada certificação se refere a uma comunidade, enquanto a titulação de um território pode englobar diversas comunidades que compartilham o mesmo território.<br/>
-          <b>Fonte:</b> Comitê Gestor do Programa Brasil Quilombola, INCRA e Fundação Cultural Palmares, Ministério da Cultura<br/>
-          <b>Data de Referência:</b> 2015<br/>
-          <b>Fórmula de Cálculo:</b> Número total de certificações em cada ano e número de titulações conferidas em cada ano<br/>
-          <b><a href={csv2}>Clique aqui para baixar os dados em CSV</a></b>
-        </p>
-      </Card>
-      <Card id={`${contrastString}c3`} title="Comunidades Tituladas" >
-        <p>
-          Total de titulações já emitidas em qualquer ano (pelo INCRA ou Institutos de Terra) em todo o Brasil e nos Estados.<br/>
-        <b>Fonte:</b> INCRA<br/>
-        <b>Data de Referência:</b> 2015<br/>
-        <b>Fórmula de Cálculo:</b> Número de titulações conferidas em cada Estado<br/>
-        <b><a href={csv2}>Clique aqui para baixar os dados em CSV</a></b>
-
-      </p>
-    </Card>
-    <Card id={`${contrastString}c4`} title="Lista de Comunidades Reconhecidas Oficialmente pelo Estado" >
-      <p>
-        Comunidades que já foram certificadas ou que estão em processo de titulação são oficialmente reconhecidas pelo Estado. Cada comunidade possui um identificador numérico e um nome pelo qual costuma ser chamada.<br/>
-
-      <b>Fonte:</b> Comitê Gestor do Programa Brasil Quilombola, INCRA e Fundação Cultural Palmares, Ministério da Cultura<br/>
-      <b>Data de Referência:</b> 2015<br/>
-      <b><a href={csv4}>Clique aqui para baixar os dados em CSV</a></b>
-
-    </p>
-  </Card>
-  <Card id={`${contrastString}c5`} title="Estágio dos Processos" >
-    <p>
-
-      O processo de titulação dos territórios quilombolas onde há comunidades certificadas passa pelas etapas de (1) RTID, (2) Publicação da Portaria, (3) Publicação do Decreto e (4) Titulação.<br/>
-    id
-    <b>Fonte:</b> INCRA<br/>
-    <b>Data de Referência:</b> 2015<br/>
-    <b>Fórmula de Cálculo:</b> Percentual de processos em cada estágio com relação ao total de processos em andamento ou concluídos<br/>
-    <b><a href={csv5}>Clique aqui para baixar os dados em CSV</a></b>
-
-  </p>
-</Card >
-<Card id={`${contrastString}c6`} title="Famílias no CadÚnico" >
-  <p>
-    Famílias quilombolas cadastradas no CadÚnico podem receber benefícios sociais de programas do Governo.<br/>
-
-  <b>Fonte:</b> Cadastro Único para Programas Sociais (CadÚnico), Ministério do Desenvolvimento Social e Combate à Fome (MDS)<br/>
-  <b>Data de Referência:</b> 2015<br/>
-  <b>Fórmula de Cálculo:</b> SOMA do número de famílias nos domicílios quilombolas cadastradas no CadÚnico em cada Estado<br/>
-  <b><a href={csv6}>Clique aqui para baixar os dados em CSV</a></b>
-
-</p>
-</Card>
-<Card id={`${contrastString}c7`} title="Área Rural">
-  <p>
-    Concentração dos domicílios quilombolas em áreas rurais.<br/>
-
-  <b>Fonte:</b> Cadastro Único para Programas Sociais (CadÚnico), Ministério do Desenvolvimento Social e Combate à Fome (MDS)<br/>
-  <b>Data de Referência:</b> 2015<br/>
-  <b>Fórmula de Cálculo:</b> Percentual de famílias quilombolas vivendo em áreas rurais<br/>
-  <b><a href={csv7}>Clique aqui para baixar os dados em CSV</a></b>
-
-
-</p>
-</Card>
-<Card  id={`${contrastString}c8`} title="Serviços Presentes nos Domicílios Cadastrados">
-  <p>
-    <b>Fonte:</b> Cadastro Único para Programas Sociais (CadÚnico), Ministério do Desenvolvimento Social e Combate à Fome (MDS)<br/>
-    <b>Data de Referência: 2015</b><br/>
-    <b><a href={csv8}>Clique aqui para baixar os dados em CSV</a></b>
-
-  </p>
-</Card>
-</div>
-</div>
-);
-else return <div></div>
-}
-}
 
+              O processo de titulação dos territórios quilombolas onde há comunidades certificadas passa pelas etapas de (1) RTID, (2) Publicação da Portaria, (3) Publicação do Decreto e (4) Titulação.<br />
+              id
+              <b>Fonte:</b> INCRA<br />
+              <b>Data de Referência:</b> 2015<br />
+              <b>Fórmula de Cálculo:</b> Percentual de processos em cada estágio com relação ao total de processos em andamento ou concluídos<br />
+              <b><a href={csv5}>Clique aqui para baixar os dados em CSV</a></b>
 
+            </p>
+          </Card >
+          <Card id={`${contrastString}c6`} title="Famílias no CadÚnico" >
+            <p>
+              Famílias quilombolas cadastradas no CadÚnico podem receber benefícios sociais de programas do Governo.<br />
+
+              <b>Fonte:</b> Cadastro Único para Programas Sociais (CadÚnico), Ministério do Desenvolvimento Social e Combate à Fome (MDS)<br />
+              <b>Data de Referência:</b> 2015<br />
+              <b>Fórmula de Cálculo:</b> SOMA do número de famílias nos domicílios quilombolas cadastradas no CadÚnico em cada Estado<br />
+              <b><a href={csv6}>Clique aqui para baixar os dados em CSV</a></b>
+
+            </p>
+          </Card>
+          <Card id={`${contrastString}c7`} title="Área Rural">
+            <p>
+              Concentração dos domicílios quilombolas em áreas rurais.<br />
+
+              <b>Fonte:</b> Cadastro Único para Programas Sociais (CadÚnico), Ministério do Desenvolvimento Social e Combate à Fome (MDS)<br />
+              <b>Data de Referência:</b> 2015<br />
+              <b>Fórmula de Cálculo:</b> Percentual de famílias quilombolas vivendo em áreas rurais<br />
+              <b><a href={csv7}>Clique aqui para baixar os dados em CSV</a></b>
+
+
+            </p>
+          </Card>
+          <Card id={`${contrastString}c8`} title="Serviços Presentes nos Domicílios Cadastrados">
+            <p>
+              <b>Fonte:</b> Cadastro Único para Programas Sociais (CadÚnico), Ministério do Desenvolvimento Social e Combate à Fome (MDS)<br />
+              <b>Data de Referência: 2015</b><br />
+              <b><a href={csv8}>Clique aqui para baixar os dados em CSV</a></b>
+
+            </p>
+          </Card>
+        </div>
+      </div>
+    );
+  }
+}
 
 export default QuilombolaAbout;
-- 
GitLab


From 977ed64e144c05179437f603c5f898cf06d237ec Mon Sep 17 00:00:00 2001
From: eht17 <eht17@inf.ufpr.br>
Date: Fri, 22 Feb 2019 10:55:23 -0300
Subject: [PATCH 10/23] Add contrast on store context

---
 src/App.js                    | 20 ++-------
 src/Components/AppFooter.js   | 58 ++++++++++++--------------
 src/Components/BarraBrasil.js | 62 ++++++++++++++--------------
 src/Components/ContrastBar.js | 69 ++++++++++++-------------------
 src/Components/MainBanner.js  | 60 +++++++++++++--------------
 src/MainPage.js               | 77 ++++++++++++++++-------------------
 src/Quilombolas.js            | 16 +++-----
 src/Store.js                  |  4 +-
 8 files changed, 159 insertions(+), 207 deletions(-)

diff --git a/src/App.js b/src/App.js
index b8c64e0a..4d29190f 100644
--- a/src/App.js
+++ b/src/App.js
@@ -20,7 +20,7 @@ along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
 
 
 
-import React, { Component } from 'react';
+import React from 'react';
 import { BrowserRouter as Router, Route } from 'react-router-dom'
 import './App.css';
 import MainPage from './MainPage.js'
@@ -32,31 +32,19 @@ import Maps from './Maps'
 import AfricanOrigin from './AfricanOrigin'
 import Quilombola from './Quilombola'
 import { Store } from './Store';
-import NavigationBar from './Components/NavigationBar'
 import AppFooter from './Components/AppFooter'
 import ContrastBar from './Components/ContrastBar'
-import MainBanner from './Components/MainBanner'
 import BarraBrasil from './Components/BarraBrasil'
 
-
-
-
       
 function App() {
-  const { state, dispatch } = React.useContext(Store);
-  const setPageAction = (newPage) => {
-    return dispatch({
-      type: 'SET_PAGE',
-      payload: newPage
-    })
-  }
-
-  //React.useEffect(() => {});
+  const { state } = React.useContext(Store);
+  var contrastString = state.contrast
 
   return (
     <React.Fragment>
       {console.log(state)}
-      <div id={`mainPage`}>
+      <div id={`${contrastString}mainPage`}>
         <ContrastBar />
         <BarraBrasil />
         <Router>
diff --git a/src/Components/AppFooter.js b/src/Components/AppFooter.js
index 8dcb4b58..6cee263e 100644
--- a/src/Components/AppFooter.js
+++ b/src/Components/AppFooter.js
@@ -19,47 +19,41 @@ along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
 */
 
 
-
-import React, { Component } from 'react';
+import React from 'react';
 import { Footer } from 'react-materialize'
 import ColorfulBar from './ColorfulBar'
 import ContactForm from './ContactForm'
 import Partner from './Partner'
-import Cookies from 'universal-cookie';
-
 import '../Styles/AppFooter.css'
+import { Store } from '../Store'
 
-var contrastCK = new Cookies();
-var cookieStatus = contrastCK.get('contrast');
 
+function AppFooter() {
+  
+  const { state } = React.useContext(Store);
 
-class AppFooter extends Component {
-  render() {
-    // var contrastString = '';
-    var dynamicClassName = 'smppir-blue';
-    var dynamicBackgroundColor = 'white';
-    if(cookieStatus === 'true'){
-      // contrastString = 'Contrast'
-      dynamicClassName = 'smppir-white';
-      dynamicBackgroundColor = 'black'
-    }
-    return (
-      <div>
-        <ColorfulBar/>
-        <Footer  className={dynamicBackgroundColor}
-          links={
-            <div> 
-              <ContactForm /> 
-            </div>
-          }
-        >
-          <h4 className={dynamicClassName}>PARCEIROS</h4>
-          <Partner />
-          
-        </Footer>
-      </div>
-    );
+  var dynamicClassName = 'smppir-blue';
+  var dynamicBackgroundColor = 'white';
+  if (state.contrast === 'Contrast'){
+    dynamicClassName = 'smppir-white';
+    dynamicBackgroundColor = 'black'
   }
+  return (
+    <div>
+      <ColorfulBar/>
+      <Footer  className={dynamicBackgroundColor}
+        links={
+          <div> 
+            <ContactForm /> 
+          </div>
+        }
+      >
+        <h4 className={dynamicClassName}>PARCEIROS</h4>
+        <Partner />
+        
+      </Footer>
+    </div>
+  );
 }
 
 export default AppFooter;
\ No newline at end of file
diff --git a/src/Components/BarraBrasil.js b/src/Components/BarraBrasil.js
index 8cbaafe4..210cb5f0 100644
--- a/src/Components/BarraBrasil.js
+++ b/src/Components/BarraBrasil.js
@@ -19,40 +19,38 @@ along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
 */
 
 
-
-import React, { Component } from 'react';
+import React from 'react';
 import  '../Styles/BarraBrasil.css'
-import Cookies from 'universal-cookie';
-
-var contrastCK = new Cookies();
-var cookieStatus = contrastCK.get('contrast');
-
-
-class NavigationBar extends Component {
-  render() {
-    var body = document.getElementsByTagName("body")[0];
-    if(cookieStatus === 'true'){
-      body.classList.add("contraste");
-    }
-    return (
-      <div id={"nav-brasil"}>
-        <div id={"barra-brasil"}> 
-            <ul id={"menu-barra-temp"}>
-                <li id={"barra-brasil-li"}>
-                    <a href={"http://brasil.gov.br"} id={"barra-brasil-link1"}>
-                    Portal do Governo Brasileiro
-                    </a>
-                </li> 
-                <li>
-                    <a id={"barra-brasil-link1"} href={"http://epwg.governoeletronico.gov.br/barra/atualize.html"}>
-                    Atualize sua Barra de Governo
-                    </a>
-                </li>
-            </ul>
-        </div>
-      </div>
-    );
+import { Store } from '../Store'
+
+
+function NavigationBar() {
+  var body = document.getElementsByTagName("body")[0];
+  const { state } = React.useContext(Store);
+
+  if(state.contrast === 'Contrast'){
+    body.classList.add("contraste");
+  } else {
+    body.classList.remove("contraste");
   }
+  return (
+    <div id={"nav-brasil"}>
+      <div id={"barra-brasil"}> 
+          <ul id={"menu-barra-temp"}>
+              <li id={"barra-brasil-li"}>
+                  <a href={"http://brasil.gov.br"} id={"barra-brasil-link1"}>
+                  Portal do Governo Brasileiro
+                  </a>
+              </li> 
+              <li>
+                  <a id={"barra-brasil-link1"} href={"http://epwg.governoeletronico.gov.br/barra/atualize.html"}>
+                  Atualize sua Barra de Governo
+                  </a>
+              </li>
+          </ul>
+      </div>
+    </div>
+  );
 }
 
 export default NavigationBar;
\ No newline at end of file
diff --git a/src/Components/ContrastBar.js b/src/Components/ContrastBar.js
index 790deecd..5d21e678 100644
--- a/src/Components/ContrastBar.js
+++ b/src/Components/ContrastBar.js
@@ -20,57 +20,42 @@ along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
 
 
 
-import React, { Component } from 'react';
+import React from 'react';
 import  '../Styles/ContrastBar.css'
-import Cookies from 'universal-cookie';
 import ContrastImageOn from '../Images/OnContrastIcon.png'
 import ContrastImageOff from'../Images/OffContrastIcon.png'
+import { Store } from '../Store'
 
-var contrastCK = new Cookies();
-var cookieStatus = contrastCK.get('contrast');
-
-class ContrastBar extends Component {
-
-  constructor(props){
-    super(props);
-    this.toggleContrast = this.toggleContrast.bind(this);
+function ContrastBar() {
+  
+  // Hook to set contrast context
+  const { state, dispatch } = React.useContext(Store);
+  const setContrastAction = (newPage) => {
+    return dispatch({
+      type: 'SET_CONTRAST',
+      payload: newPage
+    })
   }
+  React.useEffect(() => { });
 
-  componentWillMount(){
-    let ck = contrastCK.get('contrast');
-    if(!ck){
-      contrastCK.set('contrast', 'false');
-    }
+  const toggleContrast = () => {
+    var status = (state.contrast === '' ? 'Contrast' : '')
+    setContrastAction(status)
+    //window.location.reload();
   }
 
-  render() {
-    var contrastString = '';
-    var contrastIcon = ContrastImageOff;
-    if(cookieStatus === 'true'){
-      contrastString = 'Contrast';
-      contrastIcon = ContrastImageOn
-    }
-    return (
-      <div className={`${contrastString}bar`}>
-         <div className={`${contrastString}text`} onClick={this.toggleContrast}>
-         <img src={contrastIcon} style={{marginRight: 5}} alt="ContrastIcon" width="11" height="11"/>
-         Alto Contraste
-         </div>
-      </div>
-    );
-  }
+  var contrastString = state.contrast;
+  var contrastIcon = (contrastString === '' ? ContrastImageOff : ContrastImageOn)
+
+  return (
+    <div className={`${contrastString}bar`}>
+        <div className={`${contrastString}text`} onClick={toggleContrast}>
+        <img src={contrastIcon} style={{marginRight: 5}} alt="ContrastIcon" width="11" height="11"/>
+        Alto Contraste
+        </div>
+    </div>
+  );
   
-  toggleContrast(){
-    var status = contrastCK.get('contrast');
-    if(status === 'false'){
-      status = true;
-    }
-    else{
-      status = false;
-    }
-    contrastCK.set('contrast', status);
-    window.location.reload();
-  }
 }
 
 export default ContrastBar;
\ No newline at end of file
diff --git a/src/Components/MainBanner.js b/src/Components/MainBanner.js
index 25a2011a..025392c4 100644
--- a/src/Components/MainBanner.js
+++ b/src/Components/MainBanner.js
@@ -20,44 +20,42 @@ along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
 
 
 
-import React, { Component } from 'react';
+import React from 'react';
 import logo from '../Images/SMPPIRBanner.png';
 import contrastLogo from '../Images/SMPPIRBannerContrast.png'
 import { Card, Row, Col } from 'react-materialize'
-import Cookies from 'universal-cookie';
 import '../Styles/MainBanner.css'
+import { Store } from '../Store'
 
-var contrastCK = new Cookies();
-var cookieStatus = contrastCK.get('contrast');
 var img = logo;
 
-
-class MainBanner extends Component { 
-  render() {
-    var contrastString = '';
-    if(cookieStatus === 'true'){
-      contrastString = 'Contrast'
-      img = contrastLogo;
-    }
-    return (
-      <div>
-        <Card id={`${contrastString}mainBannerCard`}>
-          <Row>
-            <Col s={12} m={6}>
-              <img alt='Logo do SMPPIR com descrição' id={'bannerLogo'} src={img} style={{width: 250}}/>
-            </Col>
-            <Col s={12} m={4} offset={'m1'}>
-              <h5 id={`${contrastString}bannerTitle`}>Monitorar é preciso</h5>
-              <p id={`${contrastString}bannerText`}>
-                O objetivo do sistema de monitoramento é dar visibilidade às demandas sociais e à atuação do Estado, de maneira a promover um melhor diálogo social e aprimorar a eficiência e eficácia das políticas públicas.
-              </p>
-              <a id={`${contrastString}mainBannerLink`} href='/'>SAIBA MAIS</a>
-            </Col>
-          </Row>
-		    </Card>
-      </div>
-    );
-  }
+function MainBanner() { 
+
+  const { state } = React.useContext(Store);
+  var contrastString = state.contrast;
+  if(contrastString === '')
+    img = logo;
+  else
+    img = contrastLogo;
+
+  return (
+    <div>
+      <Card id={`${contrastString}mainBannerCard`}>
+        <Row>
+          <Col s={12} m={6}>
+            <img alt='Logo do SMPPIR com descrição' id={'bannerLogo'} src={img} style={{width: 250}}/>
+          </Col>
+          <Col s={12} m={4} offset={'m1'}>
+            <h5 id={`${contrastString}bannerTitle`}>Monitorar é preciso</h5>
+            <p id={`${contrastString}bannerText`}>
+              O objetivo do sistema de monitoramento é dar visibilidade às demandas sociais e à atuação do Estado, de maneira a promover um melhor diálogo social e aprimorar a eficiência e eficácia das políticas públicas.
+            </p>
+            <a id={`${contrastString}mainBannerLink`} href='/'>SAIBA MAIS</a>
+          </Col>
+        </Row>
+      </Card>
+    </div>
+  );
 }
 
 export default MainBanner;
\ No newline at end of file
diff --git a/src/MainPage.js b/src/MainPage.js
index b49902d7..1ddc27a7 100644
--- a/src/MainPage.js
+++ b/src/MainPage.js
@@ -18,55 +18,48 @@ You should have received a copy of the GNU General Public License
 along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
 */
 
-import React, { Component } from 'react';
+import React from 'react';
 import MainBanner from './Components/MainBanner'
 import MainCard from './Components/MainCard'
 import { Col, Row } from 'react-materialize'
-import Cookies from 'universal-cookie';
 import './Styles/MainPage.css'
+import { Store } from './Store'
 
-var contrastCK = new Cookies();
-var cookieStatus = contrastCK.get('contrast');
+function MainPage() {
 
-class MainPage extends Component {
+  const { state } = React.useContext(Store);
+  var contrastString = state.contrast;
 
-  render() {
-
-    var contrastString = '';
-    if(cookieStatus === 'true'){
-      contrastString = 'Contrast'
-    }
-    return (
-      <div id={`${contrastString}mainPage`}>
-        <MainBanner />
-        <Row/>
-        <Row style={undefined}>
-          <Col m={12} l={5} offset={'l1'}>
-            <MainCard color='mainPageRed' title='Brasil Quilombola' subpages={subpages1} text={text1} image={'brasil_quilombola.png'}/>
-          </Col>
-          <Col m={12} l={5} className={'mainPageMargin'}>
-            <MainCard color='mainPageTeal' title='Juventude Viva' subpages={subpages2} text={text2} image={'juventude_viva.png'}/>
-          </Col>
-        </Row>
-        <Row>
-          {/* <Col m={12} l={5} offset={'l1'}>
-            <MainCard color='mainPageOrange' title='Mapas' subpages={subpages3} text={text3} image={'mapas.png'}/>
-          </Col> */}
-          <Col m={12} l={10}  offset={'l1'} className={'mainPageMargin'}>
-            <MainCard color='mainPageDarkBlue' title='Matriz Africana' subpages={subpages4} text={text4} image={'matriz_africana4.png'}/>
-          </Col>
-        </Row>
-        <Row>
-          <Col m={12} l={5} offset={'l1'} className={'mainPageMargin'} id='soloCard'>
-            <MainCard color='mainPageGreen' title='Cotas Raciais' subpages={subpages5} text={text5} image={'cotas_raciais.png'}/>
-          </Col>
-          <Col m={12} l={5}  className={'mainPageMargin'} id='soloCard'>
-            <MainCard color='mainPageRed' title='Quilombola' subpages={subpages6} text={text6} image={'brasil_quilombola.png'}/>
-          </Col>
-        </Row> 
-      </div>
-    );
-  }
+  return (
+    <div id={`${contrastString}mainPage`}>
+      <MainBanner />
+      <Row/>
+      <Row style={undefined}>
+        <Col m={12} l={5} offset={'l1'}>
+          <MainCard color='mainPageRed' title='Brasil Quilombola' subpages={subpages1} text={text1} image={'brasil_quilombola.png'}/>
+        </Col>
+        <Col m={12} l={5} className={'mainPageMargin'}>
+          <MainCard color='mainPageTeal' title='Juventude Viva' subpages={subpages2} text={text2} image={'juventude_viva.png'}/>
+        </Col>
+      </Row>
+      <Row>
+        {/* <Col m={12} l={5} offset={'l1'}>
+          <MainCard color='mainPageOrange' title='Mapas' subpages={subpages3} text={text3} image={'mapas.png'}/>
+        </Col> */}
+        <Col m={12} l={10}  offset={'l1'} className={'mainPageMargin'}>
+          <MainCard color='mainPageDarkBlue' title='Matriz Africana' subpages={subpages4} text={text4} image={'matriz_africana4.png'}/>
+        </Col>
+      </Row>
+      <Row>
+        <Col m={12} l={5} offset={'l1'} className={'mainPageMargin'} id='soloCard'>
+          <MainCard color='mainPageGreen' title='Cotas Raciais' subpages={subpages5} text={text5} image={'cotas_raciais.png'}/>
+        </Col>
+        <Col m={12} l={5}  className={'mainPageMargin'} id='soloCard'>
+          <MainCard color='mainPageRed' title='Quilombola' subpages={subpages6} text={text6} image={'brasil_quilombola.png'}/>
+        </Col>
+      </Row> 
+    </div>
+  );
 }
 const text1 = <div>
                 <p>Programa Brasil Quilombola (PBQ) reúne ações do Governo Federal para as comunidades quilombolas nas seguintes áreas:</p>
diff --git a/src/Quilombolas.js b/src/Quilombolas.js
index d5e0c8c5..5b1bbdf0 100644
--- a/src/Quilombolas.js
+++ b/src/Quilombolas.js
@@ -20,7 +20,7 @@ along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
 
 
 
-import React, { Component } from 'react';
+import React from 'react';
 import NavigationBar from './Components/NavigationBar'
 import Eixo1 from './SubPages/Eixo1'
 import Eixo2 from './SubPages/Eixo2'
@@ -30,21 +30,13 @@ import QuilombolaPresentation from './SubPages/QuilombolaPresentation'
 import QuilombolaAbout from './SubPages/QuilombolaAbout'
 import { Tab, Tabs } from 'react-materialize';
 import './Styles/Quilombolas.css';
-import Cookies from 'universal-cookie';
 import { Store } from './Store'
 
-var contrastCK = new Cookies();
-var cookieStatus = contrastCK.get('contrast');
 
 function Quilombolas() {
 
-  var contrastString = '';
-  if(cookieStatus === 'true'){
-    contrastString = 'Contrast'
-  }
-
-  // Get imformation about which page was accessed
-  const { state, dispatch } = React.useContext(Store);
+  // Get information about which page was accessed
+  const { state } = React.useContext(Store);
   let states = { "APRESENTAÇÃO": false, "EIXO 1": false, "EIXO 2": false, "EIXO 3": false, "EIXO 4": false, "SOBRE": false }
   if (state.page in states) {
     states[state.page] = true
@@ -53,6 +45,8 @@ function Quilombolas() {
     states["APRESENTAÇÃO"] = true
   }
 
+  var contrastString = state.contrast
+
   return (
     <div id={`${contrastString}mainPage`}>
       <NavigationBar />
diff --git a/src/Store.js b/src/Store.js
index 8016bc84..5fccd4a5 100644
--- a/src/Store.js
+++ b/src/Store.js
@@ -24,13 +24,15 @@ export const Store = React.createContext();
 
 const initialStore = {
   page: '',
-  contrast: false
+  contrast: ''
 }
 
 function reducer(state, action) {
   switch (action.type) {
     case 'SET_PAGE':
       return { ...state, page: action.payload };
+    case 'SET_CONTRAST':
+      return { ...state, contrast: action.payload };
     default:
       return state;
   }
-- 
GitLab


From 0be665ad283946d3a201e4db74030450f1c23d67 Mon Sep 17 00:00:00 2001
From: eht17 <eht17@inf.ufpr.br>
Date: Mon, 25 Feb 2019 09:45:24 -0300
Subject: [PATCH 11/23] Contrast on context

---
 src/App.js                        |  6 ++--
 src/Components/ContactForm.js     | 15 +++------
 src/Components/ContrastBar.js     |  2 --
 src/Components/DropdownControl.js | 16 ++++-----
 src/Components/MainCard.js        | 16 ++++-----
 src/Components/NavigationBar.js   | 56 ++++++++++++++-----------------
 6 files changed, 47 insertions(+), 64 deletions(-)

diff --git a/src/App.js b/src/App.js
index 4d29190f..0def06e5 100644
--- a/src/App.js
+++ b/src/App.js
@@ -19,7 +19,6 @@ along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
 */
 
 
-
 import React from 'react';
 import { BrowserRouter as Router, Route } from 'react-router-dom'
 import './App.css';
@@ -43,13 +42,14 @@ function App() {
 
   return (
     <React.Fragment>
-      {console.log(state)}
+      {/* {console.log(state)} */}
       <div id={`${contrastString}mainPage`}>
         <ContrastBar />
         <BarraBrasil />
         <Router>
           <div>
-            <Route exact={true} path="/" render={(props) => <MainPage {...props} teste="teste"/>}/>
+            {/* <Route exact={true} path="/" render={(props) => <MainPage {...props} teste="teste"/>}/> */}
+            <Route exact={true} path="/" component={MainPage} />
             <Route exact={true} path="/cotas" component={RacialQuotas} />
             <Route exact={true} path="/quilombola" component={Quilombola} />
             <Route exact={true} path="/sobre" component={About} />
diff --git a/src/Components/ContactForm.js b/src/Components/ContactForm.js
index 0cbb5cfb..388755d3 100644
--- a/src/Components/ContactForm.js
+++ b/src/Components/ContactForm.js
@@ -19,31 +19,25 @@ along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
 */
 
 
-
 import React, { Component } from 'react';
 import { Row, Input, Icon, Button } from 'react-materialize'
 import  '../Styles/ContactForm.css'
-import Cookies from 'universal-cookie';
-
-var contrastCK = new Cookies();
-var cookieStatus = contrastCK.get('contrast');
+import { Store } from '../Store'
 
-// /{`${contrastString}mainPage`}
 
 function validEmailSyntax(email) {
     let regex = /^(([^<>()[].,;:s@"]+(.[^<>()[].,;:s@"]+)*)|(".+"))@(([^<>()[].,;:s@"]+.)+[^<>()[].,;:s@"]{2,})$/i;
     return regex.test(email);
 }
 
-
 class ContactForm extends Component {
   render() {
-    var contrastString = '';
+
+    var contrastString = this.context.state.contrast;
     var dynamicClassName = 'smppir-blue';
     var dynamicEmailClassName = 'smppir-blue emailForm';
     var dynamicTextClassname = 'smppir-blue-text';
-    if(cookieStatus === 'true'){
-      contrastString = 'Contrast';
+    if (contrastString === 'Contrast'){
       dynamicClassName = 'smppir-white';
       dynamicEmailClassName = 'smppir-white emailForm';
       dynamicTextClassname = 'smppir-white-text';
@@ -113,5 +107,6 @@ class ContactForm extends Component {
    }
 
 }
+ContactForm.contextType = Store;
 
 export default ContactForm;
diff --git a/src/Components/ContrastBar.js b/src/Components/ContrastBar.js
index 5d21e678..39437575 100644
--- a/src/Components/ContrastBar.js
+++ b/src/Components/ContrastBar.js
@@ -19,7 +19,6 @@ along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
 */
 
 
-
 import React from 'react';
 import  '../Styles/ContrastBar.css'
 import ContrastImageOn from '../Images/OnContrastIcon.png'
@@ -41,7 +40,6 @@ function ContrastBar() {
   const toggleContrast = () => {
     var status = (state.contrast === '' ? 'Contrast' : '')
     setContrastAction(status)
-    //window.location.reload();
   }
 
   var contrastString = state.contrast;
diff --git a/src/Components/DropdownControl.js b/src/Components/DropdownControl.js
index 12440474..c067197c 100644
--- a/src/Components/DropdownControl.js
+++ b/src/Components/DropdownControl.js
@@ -25,6 +25,7 @@ import { Row, Input, Button, Icon } from 'react-materialize';
 import axios from 'axios';
 import { getDDValue, getServerURL, getStateRegion } from '../enviroment';
 import Cookies from 'universal-cookie';
+import { Store } from '../Store'
 
 
 import '../Styles/DropdownControl.css';
@@ -60,11 +61,10 @@ export default class DropdownControl extends Component {
     }
   }
   render() {  
-    var contrastString = '';
-    if(cookieStatus === 'true'){
-      contrastString = 'Contrast'
-    }
-      return (
+
+    var contrastString = this.context.state.contrast;
+    console.log(this.context.state.contrast)
+    return (
       <Row>     
         <Row>    
           <Row>
@@ -105,10 +105,7 @@ export default class DropdownControl extends Component {
     const listItems = regions.map((region) =>
       <option key={Math.random()} value={region}  > { region }  </option>
     );
-    var contrastString = '';
-    if(cookieStatus === 'true'){
-      contrastString = 'Contrast'
-    }
+    var contrastString = this.context.state.contrast;
     return (      
       <Input s={12} className={`${contrastString}inputRegiao`} id={"regiao" + this.props.location} type='select' label="Região" value={this.state.region} onChange={(event)=>{ this.changeRegion(event); this.handleSelect(event) }}  >
           { listItems }
@@ -170,6 +167,7 @@ export default class DropdownControl extends Component {
   }
 
 }
+DropdownControl.contextType = Store;
 
 function search(nameKey, myArray) {
     var returnItems = [];
diff --git a/src/Components/MainCard.js b/src/Components/MainCard.js
index 3759e4f0..665e8145 100644
--- a/src/Components/MainCard.js
+++ b/src/Components/MainCard.js
@@ -19,23 +19,17 @@ along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
 */
 
 
-
-import React, { Component } from 'react';
+import React from 'react';
 import { Link } from 'react-router-dom'
 import { Card, CardTitle } from 'react-materialize'
-import Cookies from 'universal-cookie';
 import '../Styles/MainCard.css'
-
 import { Store } from '../Store';
 
-var ck = new Cookies();
-var contrastCK = new Cookies();
-var cookieStatus = contrastCK.get('contrast');
 
 function createRoutes(subpages, color) {
 
   // Hook to set page context
-  const { state, dispatch } = React.useContext(Store);
+  const { dispatch } = React.useContext(Store);
   const setPageAction = (newPage) => {
     window.scrollTo(0, 0)
     return dispatch({
@@ -57,8 +51,12 @@ function createRoutes(subpages, color) {
 
 function MainCard(props){ 
   
+  const { state } = React.useContext(Store);
   var { color, title, subpages, text, image } = props;
-  var contrastString = '';
+  var contrastString = state.contrast;
+
+  if (contrastString === "Contrast")
+    color = 'mainPageContrast'
 
   return (
     <div>
diff --git a/src/Components/NavigationBar.js b/src/Components/NavigationBar.js
index 0ed047a7..6415d2c5 100644
--- a/src/Components/NavigationBar.js
+++ b/src/Components/NavigationBar.js
@@ -19,45 +19,39 @@ along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
 */
 
 
-
-import React, { Component } from 'react';
+import React from 'react';
 import logo from '../Images/PortalLogo.png';
 import logoContrast from '../Images/PortalLogoContrast.png'
 import { Navbar, NavItem } from 'react-materialize'
-import Cookies from 'universal-cookie';
-
-
 import '../Styles/NavigationBar.css'
+import { Store } from '../Store'
 
-var contrastCK = new Cookies();
-var cookieStatus = contrastCK.get('contrast');
 
-class NavigationBar extends Component { 
+function NavigationBar() { 
   
-  render() {
-    var actualPath = window.location.href.split("/")
-    actualPath = actualPath[actualPath.length-1]
-    var logoSMPPIR = logo;
-    var contrastString = '';
-    if(cookieStatus === 'true'){
-      logoSMPPIR = logoContrast;
-      contrastString = 'Contrast'
-    }
-    return (
-      <div>
-        <Navbar className={`${contrastString}navBackground z-depth-2`} brand={<img alt='Logo do SMPPIR' id={'portal-logo'} src={logoSMPPIR} style={{width: 200, marginLeft: 20, marginTop: 15}}/>} right>
-          <NavItem onClick={this.removeCSS} id={`${contrastString}navBarInicio`} className={'z-depth-0 '+actualPath} href='/'>Início</NavItem>
-          <NavItem onClick={this.removeCSS} id={`${contrastString}navBarBrasilQ`} className={'z-depth-0 '+actualPath} href='/quilombolas'>Brasil Quilombola</NavItem>
-          <NavItem onClick={this.removeCSS} id={`${contrastString}navBarJuventudeV`} className={'z-depth-0 '+actualPath} href='/juventude'>Juventude Viva</NavItem>
-          {/* <NavItem onClick={this.removeCSS} id={`${contrastString}navBarMapas`} className={'z-depth-0 '+actualPath} href='/mapas'>Mapas</NavItem> */}
-          <NavItem onClick={this.removeCSS} id={`${contrastString}navBarMatrizAficana`} className={'z-depth-0 '+actualPath} href='/matrizAfricana'>Matriz Africana</NavItem>
-          <NavItem onClick={this.removeCSS} id={`${contrastString}navBarBrasilQU`} className={'z-depth-0 '+actualPath} href='/quilombola'>Quilombolas</NavItem>
-          <NavItem onClick={this.removeCSS} id={`${contrastString}navBarCotasRacias`} className={'z-depth-0 '+actualPath} href='/cotas'>Cotas Raciais</NavItem>
-          <NavItem onClick={this.removeCSS} id={`${contrastString}navBarSobre`} className={'z-depth-0 '+actualPath} href='/sobre'>Sobre</NavItem>
-        </Navbar>       
-      </div>
-    );
+  var actualPath = window.location.href.split("/")
+  actualPath = actualPath[actualPath.length-1]
+  var logoSMPPIR = logo;
+
+  const { state } = React.useContext(Store);
+  var contrastString = state.contrast;
+  if (contrastString === 'Contrast'){
+    logoSMPPIR = logoContrast;
   }
+  return (
+    <div>
+      <Navbar className={`${contrastString}navBackground z-depth-2`} brand={<img alt='Logo do SMPPIR' id={'portal-logo'} src={logoSMPPIR} style={{width: 200, marginLeft: 20, marginTop: 15}}/>} right>
+        <NavItem id={`${contrastString}navBarInicio`} className={'z-depth-0 '+actualPath} href='/'>Início</NavItem>
+        <NavItem id={`${contrastString}navBarBrasilQ`} className={'z-depth-0 '+actualPath} href='/quilombolas'>Brasil Quilombola</NavItem>
+        <NavItem id={`${contrastString}navBarJuventudeV`} className={'z-depth-0 '+actualPath} href='/juventude'>Juventude Viva</NavItem>
+        {/* <NavItem id={`${contrastString}navBarMapas`} className={'z-depth-0 '+actualPath} href='/mapas'>Mapas</NavItem> */}
+        <NavItem id={`${contrastString}navBarMatrizAficana`} className={'z-depth-0 '+actualPath} href='/matrizAfricana'>Matriz Africana</NavItem>
+        <NavItem id={`${contrastString}navBarBrasilQU`} className={'z-depth-0 '+actualPath} href='/quilombola'>Quilombolas</NavItem>
+        <NavItem id={`${contrastString}navBarCotasRacias`} className={'z-depth-0 '+actualPath} href='/cotas'>Cotas Raciais</NavItem>
+        <NavItem id={`${contrastString}navBarSobre`} className={'z-depth-0 '+actualPath} href='/sobre'>Sobre</NavItem>
+      </Navbar>       
+    </div>
+  );
 }
 
 export default NavigationBar;
\ No newline at end of file
-- 
GitLab


From cc295f3ef88334b616d41f8e12044381ca030e19 Mon Sep 17 00:00:00 2001
From: eht17 <eht17@inf.ufpr.br>
Date: Mon, 25 Feb 2019 11:37:46 -0300
Subject: [PATCH 12/23] Conditional rendering

---
 src/Quilombolas.js                     | 30 +++++++++++++++++++-------
 src/SubPages/Eixo1.js                  | 15 +++++--------
 src/SubPages/Eixo2.js                  | 12 +++--------
 src/SubPages/Eixo3.js                  | 11 +++-------
 src/SubPages/Eixo4.js                  | 17 +++++----------
 src/SubPages/QuilombolaAbout.js        | 12 +++--------
 src/SubPages/QuilombolaPresentation.js | 12 +++--------
 7 files changed, 44 insertions(+), 65 deletions(-)

diff --git a/src/Quilombolas.js b/src/Quilombolas.js
index 5b1bbdf0..ec609858 100644
--- a/src/Quilombolas.js
+++ b/src/Quilombolas.js
@@ -36,7 +36,7 @@ import { Store } from './Store'
 function Quilombolas() {
 
   // Get information about which page was accessed
-  const { state } = React.useContext(Store);
+  const { state, dispatch } = React.useContext(Store);
   let states = { "APRESENTAÇÃO": false, "EIXO 1": false, "EIXO 2": false, "EIXO 3": false, "EIXO 4": false, "SOBRE": false }
   if (state.page in states) {
     states[state.page] = true
@@ -45,19 +45,33 @@ function Quilombolas() {
     states["APRESENTAÇÃO"] = true
   }
 
+  // Hook to set page context
+  const setPageAction = (newPage) => {
+    return dispatch({
+      type: 'SET_PAGE',
+      payload: newPage
+    })
+  }
+  React.useEffect(() => { });
+
+  const whereIAm = (e, ev) => {
+    if (ev)
+      setPageAction(ev.target.innerText)
+  }
+
   var contrastString = state.contrast
 
   return (
     <div id={`${contrastString}mainPage`}>
       <NavigationBar />
       <div id='contentTabsDiv'>
-        <Tabs className={`tab-demo z-depth-1 ${contrastString}mainPageRedTab`}>
-          <Tab title="Apresentação" active={states["APRESENTAÇÃO"]}> <QuilombolaPresentation/> </Tab>
-          <Tab title="Eixo 1" active={states["EIXO 1"]}> <Eixo1/> </Tab>
-          <Tab title="Eixo 2" active={states["EIXO 2"]}> <Eixo2/> </Tab>
-          <Tab title="Eixo 3" active={states["EIXO 3"]}> <Eixo3/> </Tab>
-          <Tab title="Eixo 4" active={states["EIXO 4"]}> <Eixo4/> </Tab>
-          <Tab title="Sobre" active={states["SOBRE"]}> <QuilombolaAbout/></Tab>
+        <Tabs className={`tab-demo z-depth-1 ${contrastString}mainPageRedTab`} onChange={whereIAm} >
+          <Tab title="Apresentação" active={states["APRESENTAÇÃO"]}> {states["APRESENTAÇÃO"] ? <QuilombolaPresentation /> :<div/>} </Tab>
+          <Tab title="Eixo 1" active={states["EIXO 1"]}> {states["EIXO 1"] ? <Eixo1 /> :<div/>} </Tab>
+          <Tab title="Eixo 2" active={states["EIXO 2"]}> {states["EIXO 2"] ? <Eixo2 /> :<div/>} </Tab>
+          <Tab title="Eixo 3" active={states["EIXO 3"]}> {states["EIXO 3"] ? <Eixo3 /> :<div/>} </Tab>
+          <Tab title="Eixo 4" active={states["EIXO 4"]}> {states["EIXO 4"] ? <Eixo4 /> :<div/>} </Tab>
+          <Tab title="Sobre" active={states["SOBRE"]}> {states["SOBRE"] ? <QuilombolaAbout /> :<div/>} </Tab>
         </Tabs>
       </div>
     </div>
diff --git a/src/SubPages/Eixo1.js b/src/SubPages/Eixo1.js
index 24e4fda2..4dc66f79 100644
--- a/src/SubPages/Eixo1.js
+++ b/src/SubPages/Eixo1.js
@@ -32,7 +32,6 @@ import * as data from '../JsonsAntigos/brasil-quilombola/bqe1'
 import BuildLineNotFixed from '../Charts/BuildLineNotFixed'
 import BuildPie from '../Charts/BuildPie'
 import Table from '../Components/Table'
-import Cookies from 'universal-cookie';
 import Map from '../Components/Map';
 
 
@@ -42,9 +41,7 @@ import Map from '../Components/Map';
 // import csv5 from './CSVoriginais/pbq/comunidades_por_status_por_uf.csv'
 
 import './Styles/Eixo1.css'
-
-var contrastCK = new Cookies();
-var cookieStatus = contrastCK.get('contrast');
+import { Store } from '../Store';
 
 
 const nullInfo = [{
@@ -76,18 +73,15 @@ class Eixo1 extends Component {
   }
 
   render() {
-    var contrastString = '';
-    if(cookieStatus === 'true'){
-      contrastString = 'Contrast'
-    }
+    var contrastString = this.context.state.contrast;
     return (
       <div>
         <Row>
           <Col l={3} m={5} s={8}>
-            <h4 className="eixoHeaderQ">Eixo 1</h4>
+            <h4 className={`${contrastString}eixoHeaderQ`}>Eixo 1</h4>
           </Col>
           <Col l={5} m={8} s={8}>
-            <p className="eixoSubHeader"> Clique sobre qualquer estado em um mapa ou
+            <p className={`${contrastString}eixoSubHeader`}> Clique sobre qualquer estado em um mapa ou
               tabela para apresentar os dados somente daquele estado. Clique
               novamente para voltar aos dados do Brasil. </p>
           </Col>
@@ -184,5 +178,6 @@ class Eixo1 extends Component {
       }
     }
 }
+Eixo1.contextType = Store;
 
 export default Eixo1;
diff --git a/src/SubPages/Eixo2.js b/src/SubPages/Eixo2.js
index 993bae6d..f6375df7 100644
--- a/src/SubPages/Eixo2.js
+++ b/src/SubPages/Eixo2.js
@@ -32,7 +32,7 @@ import * as data from '../JsonsAntigos/brasil-quilombola/bqe2';
 import BuildPie from '../Charts/BuildPie';
 import BuildBar from '../Charts/BuildBar';
 import HeatMap from '../Components/HeatMap';
-import Cookies from 'universal-cookie';
+import { Store } from '../Store';
 
 import './Styles/Eixo2.css'
 
@@ -44,9 +44,6 @@ import csv5 from './CSVoriginais/pbq/pbq_luz_para_todos_por_regiao.csv'
 import csv6 from './CSVoriginais/pbq/pbq_mcasamvida_unidades_por_uf_ano.csv'
 import csv7 from './CSVoriginais/pbq/pbq_obras_saneamento_por_uf_ano.csv'
 
-var contrastCK = new Cookies();
-var cookieStatus = contrastCK.get('contrast');
-
 
 const customNames = {"Ano":"Ano",
   "Unidades Contratadas":"Unidades Contratadas"}
@@ -67,10 +64,7 @@ class Eixo2 extends Component {
     this.clearMap()
   }
   render() {
-    var contrastString = '';
-    if(cookieStatus === 'true'){
-      contrastString = 'Contrast'
-    }
+    var contrastString = this.context.state.contrast;
     return (
       <div>
       <Row>
@@ -206,7 +200,7 @@ class Eixo2 extends Component {
     }
   }
 }
-
+Eixo2.contextType = Store;
 
 
 export default Eixo2;
diff --git a/src/SubPages/Eixo3.js b/src/SubPages/Eixo3.js
index 431f9294..ca0ab821 100644
--- a/src/SubPages/Eixo3.js
+++ b/src/SubPages/Eixo3.js
@@ -32,7 +32,7 @@ import * as data from '../JsonsAntigos/brasil-quilombola/bqe3';
 import BuildPie from '../Charts/BuildPie';
 import BuildBar from '../Charts/BuildBar';
 import HeatMap from '../Components/HeatMap';
-import Cookies from 'universal-cookie';
+import { Store } from '../Store';
 
 import './Styles/Eixo3.css'
 
@@ -44,9 +44,6 @@ import csv5 from './CSVoriginais/pbq/daps_emitidas_por_ano_por_uf.csv'
 import csv6 from './CSVoriginais/pbq/paa_quilombolas_por_ano_por_uf.csv'
 
 
-var contrastCK = new Cookies();
-var cookieStatus = contrastCK.get('contrast');
-
 const nullInfo = [{
   "tipo":"Sem informação",
   "valor":null
@@ -68,10 +65,7 @@ class Eixo3 extends Component {
   }
 
   render() {
-    var contrastString = '';
-    if(cookieStatus === 'true'){
-      contrastString = 'Contrast'
-    }
+    var contrastString = this.context.state.contrast;
     return (
       <div>
       <Row>
@@ -206,5 +200,6 @@ class Eixo3 extends Component {
     return(val.toFixed(2))
   }
 }
+Eixo3.contextType = Store;
 
 export default Eixo3;
diff --git a/src/SubPages/Eixo4.js b/src/SubPages/Eixo4.js
index ba208d8f..ba1472dc 100644
--- a/src/SubPages/Eixo4.js
+++ b/src/SubPages/Eixo4.js
@@ -32,7 +32,7 @@ import * as data from '../JsonsAntigos/brasil-quilombola/bqe4';
 import BuildPie from '../Charts/BuildPie';
 import BuildBar from '../Charts/BuildBar';
 import HeatMap from '../Components/HeatMap';
-import Cookies from 'universal-cookie';
+import { Store } from '../Store';
 
 import './Styles/Eixo4.css'
 
@@ -47,10 +47,6 @@ import csv7 from './CSVoriginais/pbq/equipes_saude_por_ano_por_uf.csv'
 import csv8 from './CSVoriginais/pbq/mais_medicos_por_ano_por_uf.csv'
 
 
-var contrastCK = new Cookies();
-var cookieStatus = contrastCK.get('contrast');
-
-
   const customKeysP5 = {
     "Ano": "Ano",
     "Ensino Infantil":"Ensino Infantil",
@@ -85,18 +81,15 @@ class Eixo4 extends Component {
   }
 
   render() {
-    var contrastString = '';
-    if(cookieStatus === 'true'){
-      contrastString = 'Contrast'
-    }
+    var contrastString = this.context.state.contrast;
     return (
       <div>
         <Row>
           <Col l={3} m={5} s={8}>
-            <h4 className="eixoHeaderQ">Eixo 4</h4>
+            <h4 className={`${contrastString}eixoHeaderQ`}>Eixo 4</h4>
           </Col>
           <Col l={5} m={8} s={8}>
-            <p className="eixoSubHeader"> Clique sobre qualquer estado em um mapa ou tabela para apresentar os
+            <p className={`${contrastString}eixoSubHeader`}> Clique sobre qualquer estado em um mapa ou tabela para apresentar os
               dados somente daquele estado. Clique novamente para voltar aos dados do Brasil. </p>
           </Col>
         </Row>
@@ -260,7 +253,7 @@ fixDataP5(data){
 }
 
 }
-
+Eixo4.contextType = Store;
 
 
 export default Eixo4;
diff --git a/src/SubPages/QuilombolaAbout.js b/src/SubPages/QuilombolaAbout.js
index 9e6d979f..45d6db30 100644
--- a/src/SubPages/QuilombolaAbout.js
+++ b/src/SubPages/QuilombolaAbout.js
@@ -19,7 +19,6 @@ along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
 */
 
 import React, { Component } from 'react';
-import Cookies from 'universal-cookie';
 import {Card} from 'react-materialize';
 import './Styles/QuilombolaAbout.css'
 import csv1 from './CSVoriginais/pbq/comunidades_certificadas_por_uf.csv'
@@ -29,18 +28,12 @@ import csv5 from './CSVoriginais/pbq/comunidades_por_status_por_uf.csv'
 import csv6 from './CSVoriginais/pbq/cadunico_familias_por_uf.csv'
 import csv7 from './CSVoriginais/pbq/cadunico_domicilios_rurais_por_uf.csv'
 import csv8 from './CSVoriginais/pbq/cadunico_domicilios_servicos_presentes_por_uf.csv'
-
-
-var contrastCK = new Cookies();
-var cookieStatus = contrastCK.get('contrast');
+import { Store } from '../Store'
 
 
 class QuilombolaAbout extends Component {
   render() {
-    var contrastString = '';
-    if (cookieStatus === 'true') {
-      contrastString = 'Contrast'
-    }
+    var contrastString = this.context.state.contrast;
     return (
       <div>
         <h4>Catálogo de indicadores disponíveis no sistema</h4>
@@ -132,5 +125,6 @@ class QuilombolaAbout extends Component {
     );
   }
 }
+QuilombolaAbout.contextType = Store;
 
 export default QuilombolaAbout;
diff --git a/src/SubPages/QuilombolaPresentation.js b/src/SubPages/QuilombolaPresentation.js
index 096efa96..75607ea8 100644
--- a/src/SubPages/QuilombolaPresentation.js
+++ b/src/SubPages/QuilombolaPresentation.js
@@ -21,19 +21,13 @@ along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
 
 
 import React, { Component } from 'react';
-import Cookies from 'universal-cookie';
-
+import { Store } from '../Store'
 import './Styles/QuilombolaPresentation.css'
 
-var contrastCK = new Cookies();
-var cookieStatus = contrastCK.get('contrast');
 
 class QuilombolaPresentation extends Component {
   render() {
-    var contrastString = '';
-    if(cookieStatus === 'true'){
-      contrastString = 'Contrast'
-    }
+    var contrastString = this.context.state.contrast;
     return (
       <div className="container">
       <div className={`${contrastString}apresentacao`}>
@@ -59,7 +53,7 @@ class QuilombolaPresentation extends Component {
     );
   }
 }
-
+QuilombolaPresentation.contextType = Store;
 
 
 export default QuilombolaPresentation;
-- 
GitLab


From f9aad5a28b700bc0bfe756d05a814d870cc6786b Mon Sep 17 00:00:00 2001
From: eht17 <eht17@inf.ufpr.br>
Date: Wed, 27 Feb 2019 09:34:13 -0300
Subject: [PATCH 13/23] Navbar with links that don't reload

---
 src/Components/NavigationBar.js | 27 +++++++++++++++++----------
 src/Styles/NavigationBar.css    |  4 ++++
 2 files changed, 21 insertions(+), 10 deletions(-)

diff --git a/src/Components/NavigationBar.js b/src/Components/NavigationBar.js
index 6415d2c5..d9b7877e 100644
--- a/src/Components/NavigationBar.js
+++ b/src/Components/NavigationBar.js
@@ -25,6 +25,8 @@ import logoContrast from '../Images/PortalLogoContrast.png'
 import { Navbar, NavItem } from 'react-materialize'
 import '../Styles/NavigationBar.css'
 import { Store } from '../Store'
+import { Link } from 'react-router-dom'
+
 
 
 function NavigationBar() { 
@@ -38,18 +40,23 @@ function NavigationBar() {
   if (contrastString === 'Contrast'){
     logoSMPPIR = logoContrast;
   }
+
   return (
     <div>
-      <Navbar className={`${contrastString}navBackground z-depth-2`} brand={<img alt='Logo do SMPPIR' id={'portal-logo'} src={logoSMPPIR} style={{width: 200, marginLeft: 20, marginTop: 15}}/>} right>
-        <NavItem id={`${contrastString}navBarInicio`} className={'z-depth-0 '+actualPath} href='/'>Início</NavItem>
-        <NavItem id={`${contrastString}navBarBrasilQ`} className={'z-depth-0 '+actualPath} href='/quilombolas'>Brasil Quilombola</NavItem>
-        <NavItem id={`${contrastString}navBarJuventudeV`} className={'z-depth-0 '+actualPath} href='/juventude'>Juventude Viva</NavItem>
-        {/* <NavItem id={`${contrastString}navBarMapas`} className={'z-depth-0 '+actualPath} href='/mapas'>Mapas</NavItem> */}
-        <NavItem id={`${contrastString}navBarMatrizAficana`} className={'z-depth-0 '+actualPath} href='/matrizAfricana'>Matriz Africana</NavItem>
-        <NavItem id={`${contrastString}navBarBrasilQU`} className={'z-depth-0 '+actualPath} href='/quilombola'>Quilombolas</NavItem>
-        <NavItem id={`${contrastString}navBarCotasRacias`} className={'z-depth-0 '+actualPath} href='/cotas'>Cotas Raciais</NavItem>
-        <NavItem id={`${contrastString}navBarSobre`} className={'z-depth-0 '+actualPath} href='/sobre'>Sobre</NavItem>
-      </Navbar>       
+      {/* <Navbar className={`${contrastString}navBackground z-depth-2`} brand={<Link to='/'><img alt='Logo do SMPPIR' id={'portal-logo'} src={logoSMPPIR} style={{ width: 200, marginLeft: 20, marginTop: 15 }} /></Link>}> */}
+      <Navbar className={`${contrastString}navBackground z-depth-2`} brand={<img alt='Logo do SMPPIR' id={'portal-logo'} src={logoSMPPIR} style={{ width: 200, marginLeft: 20, marginTop: 15 }} />}>
+          <ul className="right ">
+            {/* <NavItem id={`${contrastString}navBarInicio`} className={'z-depth-0 '+actualPath} href='/'>Início</NavItem> */}
+            <li id={`${contrastString}navBarInicio`} className={'z-depth-0 ' + actualPath}><Link to='/'>Início</Link></li>
+            <li id={`${contrastString}navBarBrasilQ`} className={'z-depth-0 ' + actualPath}><Link to='/quilombolas'>Brasil Quilombola</Link></li>
+            <li id={`${contrastString}navBarJuventudeV`} className={'z-depth-0 '+actualPath}><Link to='/juventude'>Juventude Viva</Link></li>
+            {/* <li id={`${contrastString}navBarMapas`} className={'z-depth-0 '+actualPath}><Link to='/mapas'>Mapas</Link></li> */}
+            <li id={`${contrastString}navBarMatrizAficana`} className={'z-depth-0 '+actualPath}><Link to='/matrizAfricana'>Matriz Africana</Link></li>
+            <li id={`${contrastString}navBarBrasilQU`} className={'z-depth-0 '+actualPath}><Link to='/quilombola'>Quilombolas</Link></li>
+            <li id={`${contrastString}navBarCotasRacias`} className={'z-depth-0 '+actualPath}><Link to='/cotas'>Cotas Raciais</Link></li>
+            <li id={`${contrastString}navBarSobre`} className={'z-depth-0 '+actualPath}><Link to='/sobre'>Sobre</Link></li>
+          </ul>
+      </Navbar>   
     </div>
   );
 }
diff --git a/src/Styles/NavigationBar.css b/src/Styles/NavigationBar.css
index 098c8729..ddb0e78c 100644
--- a/src/Styles/NavigationBar.css
+++ b/src/Styles/NavigationBar.css
@@ -35,6 +35,10 @@ nav a{
     background-color: white;
 }
 
+.navLogo:hover{
+    background-color: white;
+}
+
 
 #navBarInicio > a,
 #navBarBrasilQ > a,
-- 
GitLab


From 779c547854b4e5f25d12fa4b20a967b05d8ecfcd Mon Sep 17 00:00:00 2001
From: eht17 <eht17@inf.ufpr.br>
Date: Wed, 27 Feb 2019 14:35:39 -0300
Subject: [PATCH 14/23] Fix sidebar toggle

---
 src/Components/NavigationBar.js | 74 ++++++++++++++++++++++++---------
 src/SubPages/QuilombolaAbout.js |  2 +-
 2 files changed, 56 insertions(+), 20 deletions(-)

diff --git a/src/Components/NavigationBar.js b/src/Components/NavigationBar.js
index d9b7877e..caa099b5 100644
--- a/src/Components/NavigationBar.js
+++ b/src/Components/NavigationBar.js
@@ -22,7 +22,7 @@ along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
 import React from 'react';
 import logo from '../Images/PortalLogo.png';
 import logoContrast from '../Images/PortalLogoContrast.png'
-import { Navbar, NavItem } from 'react-materialize'
+import { Navbar, NavItem, SideNav } from 'react-materialize'
 import '../Styles/NavigationBar.css'
 import { Store } from '../Store'
 import { Link } from 'react-router-dom'
@@ -41,24 +41,60 @@ function NavigationBar() {
     logoSMPPIR = logoContrast;
   }
 
-  return (
-    <div>
-      {/* <Navbar className={`${contrastString}navBackground z-depth-2`} brand={<Link to='/'><img alt='Logo do SMPPIR' id={'portal-logo'} src={logoSMPPIR} style={{ width: 200, marginLeft: 20, marginTop: 15 }} /></Link>}> */}
-      <Navbar className={`${contrastString}navBackground z-depth-2`} brand={<img alt='Logo do SMPPIR' id={'portal-logo'} src={logoSMPPIR} style={{ width: 200, marginLeft: 20, marginTop: 15 }} />}>
-          <ul className="right ">
-            {/* <NavItem id={`${contrastString}navBarInicio`} className={'z-depth-0 '+actualPath} href='/'>Início</NavItem> */}
-            <li id={`${contrastString}navBarInicio`} className={'z-depth-0 ' + actualPath}><Link to='/'>Início</Link></li>
-            <li id={`${contrastString}navBarBrasilQ`} className={'z-depth-0 ' + actualPath}><Link to='/quilombolas'>Brasil Quilombola</Link></li>
-            <li id={`${contrastString}navBarJuventudeV`} className={'z-depth-0 '+actualPath}><Link to='/juventude'>Juventude Viva</Link></li>
-            {/* <li id={`${contrastString}navBarMapas`} className={'z-depth-0 '+actualPath}><Link to='/mapas'>Mapas</Link></li> */}
-            <li id={`${contrastString}navBarMatrizAficana`} className={'z-depth-0 '+actualPath}><Link to='/matrizAfricana'>Matriz Africana</Link></li>
-            <li id={`${contrastString}navBarBrasilQU`} className={'z-depth-0 '+actualPath}><Link to='/quilombola'>Quilombolas</Link></li>
-            <li id={`${contrastString}navBarCotasRacias`} className={'z-depth-0 '+actualPath}><Link to='/cotas'>Cotas Raciais</Link></li>
-            <li id={`${contrastString}navBarSobre`} className={'z-depth-0 '+actualPath}><Link to='/sobre'>Sobre</Link></li>
-          </ul>
-      </Navbar>   
-    </div>
-  );
+  let links = (
+    <React.Fragment>
+      {/* <li id={`${contrastString}navBarInicio`} className={'z-depth-0 ' + actualPath}><Link to='/'>Início</Link></li> */}
+      <li id={`${contrastString}navBarBrasilQ`} className={'z-depth-0 ' + actualPath}><Link to='/quilombolas'>Brasil Quilombola</Link></li>
+      <li id={`${contrastString}navBarJuventudeV`} className={'z-depth-0 '+actualPath}><Link to='/juventude'>Juventude Viva</Link></li>
+      <li id={`${contrastString}navBarMatrizAficana`} className={'z-depth-0 '+actualPath}><Link to='/matrizAfricana'>Matriz Africana</Link></li>
+      <li id={`${contrastString}navBarBrasilQU`} className={'z-depth-0 '+actualPath}><Link to='/quilombola'>Quilombolas</Link></li>
+      <li id={`${contrastString}navBarCotasRacias`} className={'z-depth-0 '+actualPath}><Link to='/cotas'>Cotas Raciais</Link></li>
+      <li id={`${contrastString}navBarSobre`} className={'z-depth-0 '+actualPath}><Link to='/sobre'>Sobre</Link></li>
+    </React.Fragment>
+  )
+
+  let content = (
+    <nav className={`${contrastString}navBackground z-depth-2`} style={{ height: 65 }}>
+      <div className="nav-wrapper">
+
+        <Link className="brand-logo hide-on-med-and-down" to='/'>
+          <img alt='Logo do SMPPIR' id={'portal-logo'} src={logoSMPPIR} style={{ width: 200, marginLeft: 20, marginTop: 15 }} />
+        </Link>
+        <Link className="brand-logo center hide-on-large-only" to='/'>
+          <img alt='Logo do SMPPIR' id={'portal-logo'} src={logoSMPPIR} style={{ width: 200, marginLeft: 20, marginTop: 15 }} />
+        </Link>
+
+        <ul className="right hide-on-med-and-down">{links}</ul>
+
+        <div className="left hide-on-large-only">
+          <SideNav trigger={<a href="#"><i className="material-icons" style={{ marginLeft: 20 }}>menu</i></a>} options={{closeOnClick:true}}>
+            {links}
+          </SideNav>
+        </div>
+
+      </div>
+    </nav>
+  )
+  return content;
+
+  // return (
+  //   <div>
+  //     {/* <Navbar className={`${contrastString}navBackground z-depth-2`} brand={<Link to='/'><img alt='Logo do SMPPIR' id={'portal-logo'} src={logoSMPPIR} style={{ width: 200, marginLeft: 20, marginTop: 15 }} /></Link>}> */}
+  //     <Navbar className={`${contrastString}navBackground z-depth-2`} brand={<img alt='Logo do SMPPIR' id={'portal-logo'} src={logoSMPPIR} style={{ width: 200, marginLeft: 20, marginTop: 15 }} />}>
+  //         <ul className="right ">
+  //           {/* <NavItem id={`${contrastString}navBarInicio`} className={'z-depth-0 '+actualPath} href='/'>Início</NavItem> */}
+  //           <li id={`${contrastString}navBarInicio`} className={'z-depth-0 ' + actualPath}><Link to='/'>Início</Link></li>
+  //           <li id={`${contrastString}navBarBrasilQ`} className={'z-depth-0 ' + actualPath}><Link to='/quilombolas'>Brasil Quilombola</Link></li>
+  //           <li id={`${contrastString}navBarJuventudeV`} className={'z-depth-0 '+actualPath}><Link to='/juventude'>Juventude Viva</Link></li>
+  //           {/* <li id={`${contrastString}navBarMapas`} className={'z-depth-0 '+actualPath}><Link to='/mapas'>Mapas</Link></li> */}
+  //           <li id={`${contrastString}navBarMatrizAficana`} className={'z-depth-0 '+actualPath}><Link to='/matrizAfricana'>Matriz Africana</Link></li>
+  //           <li id={`${contrastString}navBarBrasilQU`} className={'z-depth-0 '+actualPath}><Link to='/quilombola'>Quilombolas</Link></li>
+  //           <li id={`${contrastString}navBarCotasRacias`} className={'z-depth-0 '+actualPath}><Link to='/cotas'>Cotas Raciais</Link></li>
+  //           <li id={`${contrastString}navBarSobre`} className={'z-depth-0 '+actualPath}><Link to='/sobre'>Sobre</Link></li>
+  //         </ul>
+  //     </Navbar>   
+  //   </div>
+  // );
 }
 
 export default NavigationBar;
\ No newline at end of file
diff --git a/src/SubPages/QuilombolaAbout.js b/src/SubPages/QuilombolaAbout.js
index 45d6db30..bc5db817 100644
--- a/src/SubPages/QuilombolaAbout.js
+++ b/src/SubPages/QuilombolaAbout.js
@@ -36,7 +36,7 @@ class QuilombolaAbout extends Component {
     var contrastString = this.context.state.contrast;
     return (
       <div>
-        <h4>Catálogo de indicadores disponíveis no sistema</h4>
+        <h4 className={`${contrastString}eixoHeaderQ`}>Catálogo de indicadores disponíveis no sistema</h4>
         <div className="gridTemplate">
           <Card id={`${contrastString}c1`} title="Certificações Emitidas" >
             <p>
-- 
GitLab


From 73d00cdaf563aad268edfefd781bbdc1cb51c359 Mon Sep 17 00:00:00 2001
From: eht17 <eht17@inf.ufpr.br>
Date: Wed, 27 Feb 2019 14:52:18 -0300
Subject: [PATCH 15/23] Sidebar contrast

---
 src/Components/NavigationBar.js | 23 ++---------------------
 1 file changed, 2 insertions(+), 21 deletions(-)

diff --git a/src/Components/NavigationBar.js b/src/Components/NavigationBar.js
index caa099b5..2f6aa3fa 100644
--- a/src/Components/NavigationBar.js
+++ b/src/Components/NavigationBar.js
@@ -22,7 +22,7 @@ along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
 import React from 'react';
 import logo from '../Images/PortalLogo.png';
 import logoContrast from '../Images/PortalLogoContrast.png'
-import { Navbar, NavItem, SideNav } from 'react-materialize'
+import { SideNav } from 'react-materialize'
 import '../Styles/NavigationBar.css'
 import { Store } from '../Store'
 import { Link } from 'react-router-dom'
@@ -67,7 +67,7 @@ function NavigationBar() {
         <ul className="right hide-on-med-and-down">{links}</ul>
 
         <div className="left hide-on-large-only">
-          <SideNav trigger={<a href="#"><i className="material-icons" style={{ marginLeft: 20 }}>menu</i></a>} options={{closeOnClick:true}}>
+          <SideNav className={`${contrastString}navBackground`} trigger={<a href="#"><i className="material-icons" style={{ marginLeft: 20 }}>menu</i></a>} options={{closeOnClick:true}}>
             {links}
           </SideNav>
         </div>
@@ -76,25 +76,6 @@ function NavigationBar() {
     </nav>
   )
   return content;
-
-  // return (
-  //   <div>
-  //     {/* <Navbar className={`${contrastString}navBackground z-depth-2`} brand={<Link to='/'><img alt='Logo do SMPPIR' id={'portal-logo'} src={logoSMPPIR} style={{ width: 200, marginLeft: 20, marginTop: 15 }} /></Link>}> */}
-  //     <Navbar className={`${contrastString}navBackground z-depth-2`} brand={<img alt='Logo do SMPPIR' id={'portal-logo'} src={logoSMPPIR} style={{ width: 200, marginLeft: 20, marginTop: 15 }} />}>
-  //         <ul className="right ">
-  //           {/* <NavItem id={`${contrastString}navBarInicio`} className={'z-depth-0 '+actualPath} href='/'>Início</NavItem> */}
-  //           <li id={`${contrastString}navBarInicio`} className={'z-depth-0 ' + actualPath}><Link to='/'>Início</Link></li>
-  //           <li id={`${contrastString}navBarBrasilQ`} className={'z-depth-0 ' + actualPath}><Link to='/quilombolas'>Brasil Quilombola</Link></li>
-  //           <li id={`${contrastString}navBarJuventudeV`} className={'z-depth-0 '+actualPath}><Link to='/juventude'>Juventude Viva</Link></li>
-  //           {/* <li id={`${contrastString}navBarMapas`} className={'z-depth-0 '+actualPath}><Link to='/mapas'>Mapas</Link></li> */}
-  //           <li id={`${contrastString}navBarMatrizAficana`} className={'z-depth-0 '+actualPath}><Link to='/matrizAfricana'>Matriz Africana</Link></li>
-  //           <li id={`${contrastString}navBarBrasilQU`} className={'z-depth-0 '+actualPath}><Link to='/quilombola'>Quilombolas</Link></li>
-  //           <li id={`${contrastString}navBarCotasRacias`} className={'z-depth-0 '+actualPath}><Link to='/cotas'>Cotas Raciais</Link></li>
-  //           <li id={`${contrastString}navBarSobre`} className={'z-depth-0 '+actualPath}><Link to='/sobre'>Sobre</Link></li>
-  //         </ul>
-  //     </Navbar>   
-  //   </div>
-  // );
 }
 
 export default NavigationBar;
\ No newline at end of file
-- 
GitLab


From 8f5eef116c764b4af156db14a47d082b8464cd06 Mon Sep 17 00:00:00 2001
From: eht17 <eht17@inf.ufpr.br>
Date: Thu, 7 Mar 2019 10:16:17 -0300
Subject: [PATCH 16/23] Remove cookies from Youth

---
 src/SubPages/YouthEducation.js       | 16 +----
 src/SubPages/YouthJob.js             | 15 +----
 src/SubPages/YouthPresentation.js    | 14 +---
 src/SubPages/YouthVulnerabilities.js | 22 ++-----
 src/Youth.js                         | 96 +++++++++++-----------------
 5 files changed, 52 insertions(+), 111 deletions(-)

diff --git a/src/SubPages/YouthEducation.js b/src/SubPages/YouthEducation.js
index 6a7894e6..0a9e7069 100644
--- a/src/SubPages/YouthEducation.js
+++ b/src/SubPages/YouthEducation.js
@@ -28,10 +28,10 @@ import UfBar from '../Components/UfBar';
 import GrayBar from '../Components/GrayBar';
 import { getStateExtendedName } from '../enviroment';
 import * as data from '../JsonsAntigos/juventude-viva/jved'
-import Cookies from 'universal-cookie';
 import HeatMap from '../Components/HeatMap';
 import BuildBar from '../Charts/BuildBar'
 import BuildPie from '../Charts/BuildPie'
+import { Store } from '../Store'
 
 import './Styles/YouthEducation.css'
 
@@ -42,11 +42,6 @@ import csv4 from './CSVoriginais/pjv/pnad_frequenta_escola_por_uf.csv'
 import csv5 from './CSVoriginais/pjv/pnad_distorcao_por_uf.csv'
 
 
-
-var ck = new Cookies();
-var contrastCK = new Cookies();
-var cookieStatus = contrastCK.get('contrast');
-
 class YouthEducation extends Component {
   constructor(props) {
     super(props);
@@ -57,11 +52,7 @@ class YouthEducation extends Component {
     this.clearMap = this.clearMap.bind(this);
   }
   render() {
-    var contrastString = '';
-    if(cookieStatus === 'true'){
-      contrastString = 'Contrast'
-    }
-    if (ck.get('mainPageClicked') === "EDUCAÇÃO")
+    var contrastString = this.context.state.contrast;
     return (
 
       <div>
@@ -142,7 +133,6 @@ class YouthEducation extends Component {
         </div>
       </div>
     );
-    else return <div></div>
   }
 
   getMapClick(clicked) {
@@ -154,7 +144,7 @@ class YouthEducation extends Component {
     this.setState({clickedInMap: null});
   }
 }
-
+YouthEducation.contextType = Store;
 
 
 export default YouthEducation;
diff --git a/src/SubPages/YouthJob.js b/src/SubPages/YouthJob.js
index 4382dd14..6427c3f5 100644
--- a/src/SubPages/YouthJob.js
+++ b/src/SubPages/YouthJob.js
@@ -28,10 +28,10 @@ import UfBar from '../Components/UfBar';
 import GrayBar from '../Components/GrayBar';
 import { getStateExtendedName } from '../enviroment';
 import * as data from '../JsonsAntigos/juventude-viva/jvtr'
-import Cookies from 'universal-cookie';
 import HeatMap from '../Components/HeatMap';
 import BuildPie from '../Charts/BuildPie'
 import BuildStackedBar from '../Charts/BuildStackedBar'
+import { Store } from '../Store'
 
 import './Styles/YouthJob.css'
 
@@ -41,10 +41,6 @@ import csv3 from './CSVoriginais/pjv/pnad_carteira_assinada_por_uf.csv'
 import csv4 from './CSVoriginais/pjv/pnad_percentis_salario_por_uf.csv'
 
 
-var ck = new Cookies();
-var contrastCK = new Cookies();
-var cookieStatus = contrastCK.get('contrast');
-
 class YouthJob extends Component {
   constructor(props) {
     super(props);
@@ -55,11 +51,7 @@ class YouthJob extends Component {
     this.clearMap = this.clearMap.bind(this);
   }
   render() {
-    var contrastString = '';
-    if(cookieStatus === 'true'){
-      contrastString = 'Contrast'
-    }
-    if (ck.get('mainPageClicked') === "TRABALHO")
+    var contrastString = this.context.state.contrast;
     return (
       <div>
         <Row>
@@ -120,7 +112,6 @@ class YouthJob extends Component {
         </div>
       </div>
     );
-    else return <div></div>
   }
 
   getMapClick(clicked) {
@@ -132,7 +123,7 @@ class YouthJob extends Component {
     this.setState({clickedInMap: null});
   }
 }
-
+YouthJob.contextType = Store;
 
 
 
diff --git a/src/SubPages/YouthPresentation.js b/src/SubPages/YouthPresentation.js
index cd5d591b..b02b156c 100644
--- a/src/SubPages/YouthPresentation.js
+++ b/src/SubPages/YouthPresentation.js
@@ -21,20 +21,13 @@ along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
 
 
 import React, { Component } from 'react';
-import Cookies from 'universal-cookie';
 import './Styles/YouthPresentation.css'
+import { Store } from '../Store'
 
-var ck = new Cookies();
-var contrastCK = new Cookies();
-var cookieStatus = contrastCK.get('contrast');
 
 class YouthPresentation extends Component {
   render() {
-    var contrastString = '';
-    if(cookieStatus === 'true'){
-      contrastString = 'Contrast'
-    }
-    if (ck.get('mainPageClicked') === "APRESENTAÇÃO")
+    var contrastString = this.context.state.contrast;
     return (
       <div>
       <div className="container">
@@ -61,10 +54,9 @@ class YouthPresentation extends Component {
         </div>
       </div>      </div>
     );
-    else return <div></div>
   }
 }
-
+YouthPresentation.contextType = Store;
 
 
 export default YouthPresentation;
diff --git a/src/SubPages/YouthVulnerabilities.js b/src/SubPages/YouthVulnerabilities.js
index 19cb3ae3..dafddc75 100644
--- a/src/SubPages/YouthVulnerabilities.js
+++ b/src/SubPages/YouthVulnerabilities.js
@@ -34,9 +34,8 @@ import BuildPie from '../Charts/BuildPie'
 import Table from '../Components/Table'
 
 import * as data from '../JsonsAntigos/juventude-viva/jvvu'
-import Cookies from 'universal-cookie';
-
 import './Styles/YouthVulnerabilities.css'
+import { Store } from '../Store'
 
 
 import csv1 from './CSVoriginais/pjv/sim_pnad_taxa_homicidios_por_uf.csv'
@@ -49,11 +48,6 @@ import csv7 from './CSVoriginais/pjv/pjv_lista_adesao.csv'
 import csv8 from './CSVoriginais/pjv/taxa_homicidios_por_municipio.csv'
 
 
-
-var ck = new Cookies();
-var contrastCK = new Cookies();
-var cookieStatus = contrastCK.get('contrast');
-
 class YouthVulnerabilities extends Component {
   constructor(props) {
     super(props);
@@ -65,11 +59,7 @@ class YouthVulnerabilities extends Component {
   }
 
   render() {
-    var contrastString = '';
-    if(cookieStatus === 'true'){
-      contrastString = 'Contrast'
-    }
-    if (ck.get('mainPageClicked') === "VULNERABILIDADES")
+    var contrastString = this.context.state.contrast;
     return (
       <div>
         <Row>
@@ -148,7 +138,6 @@ class YouthVulnerabilities extends Component {
         </div>
       </div>
     );
-    else return <div></div>
   }
 
   getMapClick(clicked) {
@@ -166,9 +155,8 @@ class YouthVulnerabilities extends Component {
       "Brancos, 15 a 29 anos":data['Taxa de Homicídios (Brancos, 15 a 29 anos)'],
       "Negros, 15 a 29 anos": data['Taxa de Homicídios (Negros, 15 a 29 anos)'],
       "Total, 15 a 29 anos": data['Taxa de Homicídios (Total, 15 a 29 anos)']
-    }
-  ])
-}
+    }])
+  }
 
 
 fixDataP7(jsonData){
@@ -234,6 +222,8 @@ fixDataP7(jsonData){
 
 
 }
+YouthVulnerabilities.contextType = Store;
+
 
 
 
diff --git a/src/Youth.js b/src/Youth.js
index 413e3fe5..862d5a64 100644
--- a/src/Youth.js
+++ b/src/Youth.js
@@ -28,77 +28,55 @@ import YouthVulnerabilities from './SubPages/YouthVulnerabilities'
 import YouthEducation from './SubPages/YouthEducation'
 import YouthJob from './SubPages/YouthJob'
 import { Tab, Tabs } from 'react-materialize'
-import Cookies from 'universal-cookie';
+import { Store } from './Store'
 import { sleep, homeURL } from './enviroment'
-import ContrastBar from './Components/ContrastBar'
 
 
 import './Styles/Youth.css'
 
-var ck = new Cookies();
-var contrastCK = new Cookies();
-var cookieStatus = contrastCK.get('contrast');
 
+function Youth() {
 
-class Youth extends Component {
-  constructor(props) {
-    super(props);
-    this.whereIAm = this.whereIAm.bind(this);
+  // Get information about which page was accessed
+  const { state, dispatch } = React.useContext(Store);
+  var states = { "APRESENTAÇÃO": false, "VULNERABILIDADES": false, "EDUCAÇÃO": false, "TRABALHO": false}
+  if (state.page in states) {
+    states[state.page] = true
   }
-  componentDidMount() {
-    this.whereIAm()
+  else {
+    states["APRESENTAÇÃO"] = true
   }
-  render() {
-    const cookie = new Cookies();
-
-    var clicked = cookie.get('mainPageClicked')
-    var states = {"APRESENTAÇÃO": false, "VULNERABILIDADES": true, "EDUCAÇÃO": false, "TRABALHO": false}
-    if (clicked !== undefined){
-      if (clicked in states){
-        states["VULNERABILIDADES"] = false;
-        states[clicked] = true;
-      }
-      else{
-        states = {"APRESENTAÇÃO": true, "VULNERABILIDADES": false, "EDUCAÇÃO": false, "TRABALHO": false}
-        ck.set('mainPageClicked', 'APRESENTAÇÃO');
-      }
-    }
-    else{
-      // Redirect user to the main page if he/she do not have a cookie
-      window.location.href = homeURL()
-    }
-    var contrastString = '';
-    if(cookieStatus === 'true'){
-      contrastString = 'Contrast'
-    }
-    return (
-      <div id={`${contrastString}mainPage`}>
-        <ContrastBar/>
-        <NavigationBar/>
-
-        <div id='contentTabsDiv'>
-          <Tabs className={`tab-demo z-depth-1 ${contrastString}mainPageTealTab`} onChange={this.whereIAm}>
-            <Tab title="Apresentação" active={states["APRESENTAÇÃO"]}> <YouthPresentation/> </Tab>
-            <Tab title="Vulnerabilidades" active={states["VULNERABILIDADES"]}> <YouthVulnerabilities/> </Tab>
-            <Tab title="Educação" active={states["EDUCAÇÃO"]}> <YouthEducation/> </Tab>
-            <Tab title="Trabalho" active={states["TRABALHO"]}> <YouthJob/> </Tab>
-          </Tabs>
-        </div>
-        <AppFooter/>
-      </div>
-    );
+
+  // Hook to set page context
+  const setPageAction = (newPage) => {
+    return dispatch({
+      type: 'SET_PAGE',
+      payload: newPage
+    })
   }
+  React.useEffect(() => { });
 
-  whereIAm(e, ev){
-    if(ev){
-      ck.set('mainPageClicked', ev.target.innerText);
-      this.setState({visited:ev.target.innerText});
-    }
-    sleep(1).then(() => {
-      if(document.getElementsByClassName('clearmapbtn')[0])
-        document.getElementsByClassName('clearmapbtn')[0].click()
-    });
+  const whereIAm = (e, ev) => {
+    if (ev)
+      setPageAction(ev.target.innerText)
   }
+
+  var contrastString = state.contrast
+
+  return (
+    <div id={`${contrastString}mainPage`}>
+      <NavigationBar/>
+
+      <div id='contentTabsDiv'>
+        <Tabs className={`tab-demo z-depth-1 ${contrastString}mainPageTealTab`} onChange={whereIAm}>
+          <Tab title="Apresentação" active={states["APRESENTAÇÃO"]}> {states["APRESENTAÇÃO"] ? <YouthPresentation /> : <div/>} </Tab>
+          <Tab title="Vulnerabilidades" active={states["VULNERABILIDADES"]}> {states["VULNERABILIDADES"] ? <YouthVulnerabilities /> : <div/>} </Tab>
+          <Tab title="Educação" active={states["EDUCAÇÃO"]}> {states["EDUCAÇÃO"] ? <YouthEducation /> : <div/>} </Tab>
+          <Tab title="Trabalho" active={states["TRABALHO"]}> {states["TRABALHO"] ? <YouthJob /> : <div />} </Tab>
+        </Tabs>
+      </div>
+    </div>
+  );
 }
 
 
-- 
GitLab


From f2b26e2677c9b153bffe639f94a68a953eb3a747 Mon Sep 17 00:00:00 2001
From: eht17 <eht17@inf.ufpr.br>
Date: Thu, 7 Mar 2019 11:03:22 -0300
Subject: [PATCH 17/23] Remove cookies from AfricanOrigin

---
 src/AfricanOrigin.js                  | 94 ++++++++++-----------------
 src/SubPages/AfricanCulture.js        | 21 ++----
 src/SubPages/AfricanRights.js         | 19 ++----
 src/SubPages/AfricanSustainability.js | 19 +-----
 src/SubPages/YouthAbout.js            |  8 +--
 src/Youth.js                          |  3 -
 6 files changed, 48 insertions(+), 116 deletions(-)

diff --git a/src/AfricanOrigin.js b/src/AfricanOrigin.js
index 1e8da6ce..2b3dcb2f 100644
--- a/src/AfricanOrigin.js
+++ b/src/AfricanOrigin.js
@@ -25,78 +25,52 @@ import NavigationBar from './Components/NavigationBar';
 import AfricanCulture from './SubPages/AfricanCulture';
 import AfricanSustainability from './SubPages/AfricanSustainability';
 import AfricanRights from './SubPages/AfricanRights';
-import AppFooter from './Components/AppFooter';
-import Cookies from 'universal-cookie';
 import { Tab, Tabs } from 'react-materialize';
-import { sleep, homeURL } from './enviroment';
-import ContrastBar from './Components/ContrastBar'
+import { Store } from './Store'
 
 
 import './Styles/AfricanOrigin.css'
 
-var ck = new Cookies();
-var contrastCK = new Cookies();
-var cookieStatus = contrastCK.get('contrast');
+function AfricanOrigin() {
 
-class AfricanOrigin extends Component {
-  constructor(props) {
-    super(props);
-    this.whereIAm = this.whereIAm.bind(this);
+  // Get information about which page was accessed
+  const { state, dispatch } = React.useContext(Store);
+  var states = {"DIREITOS": false, "CULTURA": false, "SUSTENTABILIDADE":false}
+  if (state.page in states) {
+    states[state.page] = true
   }
-  componentDidMount() {
-    this.whereIAm()
+  else {
+    states["DIREITOS"] = true
   }
 
-  render() {
-    var contrastString = '';
-    if(cookieStatus === 'true'){
-      contrastString = 'Contrast'
-    }
-    const cookie = new Cookies();
-   
-    var clicked = cookie.get('mainPageClicked')
-    var states = {"DIREITOS": true, "CULTURA": false, "SUSTENTABILIDADE":false}
-    if (clicked !== undefined){
-      if (clicked in states){
-        states["DIREITOS"] = false;
-        states[clicked] = true;
-      }
-      else{
-        states = {"DIREITOS": true, "CULTURA": false, "SUSTENTABILIDADE":false}
-        ck.set('mainPageClicked', 'DIREITOS');
-      }
-    }
-    else{
-      // Redirect user to the main page if he/she do not have a cookie
-      window.location.href = homeURL()
-    }
-    return (
-      <div id={`${contrastString}mainPage`}>
-        <ContrastBar/>
-        <NavigationBar/>
-
-        <div id='contentTabsDiv'>
-          <Tabs className={`tab-demo z-depth-1 ${contrastString}mainPageDarkBlueTab`} onChange={this.whereIAm}>
-            <Tab title="Direitos" active={states["DIREITOS"]}> <AfricanRights key={clicked} /> </Tab>
-            <Tab title="Cultura" active={states["CULTURA"]}> <AfricanCulture key={clicked}  /> </Tab>
-            <Tab title="Sustentabilidade" active={states["SUSTENTABILIDADE"]}> <AfricanSustainability key={clicked} /> </Tab>
-          </Tabs>
-        </div>
-        <AppFooter/>
-      </div>
-    );
+  // Hook to set page context
+  const setPageAction = (newPage) => {
+    return dispatch({
+      type: 'SET_PAGE',
+      payload: newPage
+    })
   }
+  React.useEffect(() => { });
 
-  whereIAm(e, ev){
-    if(ev){
-      ck.set('mainPageClicked', ev.target.innerText);
-      this.setState({visited:ev.target.innerText});
-    }
-    sleep(1).then(() => {
-      if(document.getElementsByClassName('clearmapbtn')[0])      
-        document.getElementsByClassName('clearmapbtn')[0].click()
-    }); 
+  const whereIAm = (e, ev) => {
+    if (ev)
+      setPageAction(ev.target.innerText)
   }
+
+  var contrastString = state.contrast
+
+  return (
+    <div id={`${contrastString}mainPage`}>
+      <NavigationBar/>
+      <div id='contentTabsDiv'>
+        <Tabs className={`tab-demo z-depth-1 ${contrastString}mainPageDarkBlueTab`} onChange={whereIAm}>
+          <Tab title="Direitos" active={states["DIREITOS"]}> {states["DIREITOS"] ? <AfricanRights /> : <div />} </Tab>
+          <Tab title="Cultura" active={states["CULTURA"]}> {states["CULTURA"] ? <AfricanCulture /> : <div />} </Tab>
+          <Tab title="Sustentabilidade" active={states["SUSTENTABILIDADE"]}> {states["SUSTENTABILIDADE"] ? <AfricanSustainability /> : <div />} </Tab>
+        </Tabs>
+      </div>
+    </div>
+  );
 }
 
 export default AfricanOrigin;
\ No newline at end of file
diff --git a/src/SubPages/AfricanCulture.js b/src/SubPages/AfricanCulture.js
index e050aea5..cb4a0325 100644
--- a/src/SubPages/AfricanCulture.js
+++ b/src/SubPages/AfricanCulture.js
@@ -21,7 +21,6 @@ along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
 
 
 import React, { Component } from 'react';
-import Cookies from 'universal-cookie';
 import {Collapsible, Row, Col} from 'react-materialize';
 import { getServerURL, organizeJson, deactivateLoadingAnimation } from '../enviroment'
 import CollapsibleContainer from '../Components/CollapsibleContainer'
@@ -30,13 +29,10 @@ import BuildStackedBar from '../Charts/BuildStackedBar';
 import BuildBar from '../Charts/BuildBar';
 import AutocompleteApp from '../Components/AutocompleteApp';
 import axios from 'axios';
+import { Store } from '../Store'
 
 import './Styles/AfricanRights.css'
 
-var ck = new Cookies();
-var contrastCK = new Cookies();
-var cookieStatus = contrastCK.get('contrast');
-
 const type = "culture";			//Ver se é culture mesmo
 const cad_unico = "cad_unico"
 // const ibge = "ibge_census"
@@ -65,16 +61,9 @@ class AfricanCulture extends Component {
     this.getHeader = this.getHeader.bind(this);
     this.getDataFromAutocomplete = this.getDataFromAutocomplete.bind(this)
   }
-  componentDidMount(){
-    this.setState({cookie:ck.get('mainPageClicked')})
-  }
-
+  
   render() {
-    var contrastString = '';
-    if(cookieStatus === 'true'){
-      contrastString = 'Contrast'
-    }
-    if (ck.get('mainPageClicked') === "CULTURA" || this.state.cookie === 'CULTURA')
+    var contrastString = this.context.state.contrast;
 		return (
       <div id={type}>
           <Row>
@@ -115,8 +104,6 @@ class AfricanCulture extends Component {
 
         </div>
     );
-
-    else return <div></div>
   }
 	getDataFromServer(defaultData, chart) {
     if(chart !== 'Curso' && chart !== 'Instituição de Ensino'){
@@ -205,7 +192,7 @@ class AfricanCulture extends Component {
 
 
 }
-
+AfricanCulture.contextType = Store;
 
 
 export default AfricanCulture;
\ No newline at end of file
diff --git a/src/SubPages/AfricanRights.js b/src/SubPages/AfricanRights.js
index 1bdc171e..8a7c90d9 100644
--- a/src/SubPages/AfricanRights.js
+++ b/src/SubPages/AfricanRights.js
@@ -21,7 +21,6 @@ along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
 
 
 import React, { Component } from 'react';
-import Cookies from 'universal-cookie';
 import {Collapsible, Row, Col} from 'react-materialize';
 import CollapsibleContainer from '../Components/CollapsibleContainer'
 import Loading from '../Components/Loading'
@@ -29,14 +28,11 @@ import BuildBar from '../Charts/BuildBar'
 import axios from 'axios';
 import { getServerURL, deactivateLoadingAnimation, searchHash, getEducationLevel} from '../enviroment'
 import Table from '../Components/Table';
+import { Store } from '../Store'
 
 
 import './Styles/AfricanRights.css'
 
-var ck = new Cookies();
-var contrastCK = new Cookies();
-var cookieStatus = contrastCK.get('contrast');
-
 const type = "rights";
 const cad_unico = "cad_unico"
 const serverURL = getServerURL();
@@ -63,16 +59,8 @@ class AfricanRights extends Component {
     this.filterJSON = this.filterJSON.bind(this);
   }
 
-  componentDidMount(){
-    this.setState({cookie:ck.get('mainPageClicked')})
-  }
-
   render() {
-    var contrastString = '';
-    if(cookieStatus === 'true'){
-      contrastString = 'Contrast'
-    }
-    if (ck.get('mainPageClicked') === "DIREITOS" || this.state.cookie === 'DIREITOS')
+    var contrastString = this.context.state.contrast;
     return (
       <div id={type}>
           <Row>
@@ -116,7 +104,6 @@ class AfricanRights extends Component {
           </Row>
         </div>
     );
-    else return <div></div>
   }
 
   filterJSON(data) {
@@ -307,4 +294,6 @@ class AfricanRights extends Component {
 
 
 }
+AfricanRights.contextType = Store;
+
 export default AfricanRights;
diff --git a/src/SubPages/AfricanSustainability.js b/src/SubPages/AfricanSustainability.js
index 4e5b6583..4d1f2df0 100644
--- a/src/SubPages/AfricanSustainability.js
+++ b/src/SubPages/AfricanSustainability.js
@@ -21,20 +21,16 @@ along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
 
 
 import React, { Component } from 'react';
-import Cookies from 'universal-cookie';
 import {Collapsible, Row, Col, Collection, CollectionItem} from 'react-materialize';
 import CollapsibleContainer from '../Components/CollapsibleContainer'
 import Loading from '../Components/Loading'
 import BuildStackedBar from '../Charts/BuildStackedBar'
 import axios from 'axios';
 import { getServerURL, deactivateLoadingAnimation, createIntervals, organizeJson} from '../enviroment'
+import { Store } from '../Store'
 
 import './Styles/AfricanRights.css'
 
-var ck = new Cookies();
-var contrastCK = new Cookies();
-var cookieStatus = contrastCK.get('contrast');
-
 const type = "rights";
 const cad_unico = "cad_unico"
 // const ibge = "ibge_census"
@@ -55,16 +51,8 @@ class AfricanSustainability extends Component {
     this.getHeader = this.getHeader.bind(this);
   }
 
-  componentDidMount(){
-    this.setState({cookie:ck.get('mainPageClicked')})
-  }
-
   render() {
-    var contrastString = '';
-    if(cookieStatus === 'true'){
-      contrastString = 'Contrast'
-    }
-    if (ck.get('mainPageClicked') === "SUSTENTABILIDADE" || this.state.cookie === 'SUSTENTABILIDADE')
+    var contrastString = this.context.state.contrast;
     return (
       <div id={type}>
           <Row>
@@ -101,7 +89,6 @@ class AfricanSustainability extends Component {
 
         </div>
     );
-    else return <div></div>
   }
 
   getDataFromServer(defaultData, chart) {
@@ -181,7 +168,7 @@ class AfricanSustainability extends Component {
 
 
 }
-
+AfricanSustainability.contextType = Store;
 
 
 export default AfricanSustainability;
\ No newline at end of file
diff --git a/src/SubPages/YouthAbout.js b/src/SubPages/YouthAbout.js
index 0429ab84..77b82f26 100644
--- a/src/SubPages/YouthAbout.js
+++ b/src/SubPages/YouthAbout.js
@@ -21,23 +21,21 @@ along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
 
 
 import React, { Component } from 'react';
-import Cookies from 'universal-cookie';
 import './Styles/YouthPresentation.css'
+import { Store } from '../Store'
 
-var ck = new Cookies();
 
 class YouthPresentation extends Component {
   render() {
-    if (ck.get('mainPageClicked') === "SOBRE")
+    var contrastString = this.context.state.contrast;
     return (
       <div>
           <h1>SOBRE JUVENTUDE</h1>
       </div>
     );
-    else return <div></div>
   }
 }
-
+YouthPresentation.contextType = Store;
 
 
 export default YouthPresentation;
diff --git a/src/Youth.js b/src/Youth.js
index 862d5a64..72dec5f1 100644
--- a/src/Youth.js
+++ b/src/Youth.js
@@ -22,7 +22,6 @@ along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
 
 import React, { Component } from 'react';
 import NavigationBar from './Components/NavigationBar'
-import AppFooter from './Components/AppFooter'
 import YouthPresentation from './SubPages/YouthPresentation'
 import YouthVulnerabilities from './SubPages/YouthVulnerabilities'
 import YouthEducation from './SubPages/YouthEducation'
@@ -79,6 +78,4 @@ function Youth() {
   );
 }
 
-
-
 export default Youth;
-- 
GitLab


From 9420358e19767bcabc95cf6e3f96f2affcd0d656 Mon Sep 17 00:00:00 2001
From: eht17 <eht17@inf.ufpr.br>
Date: Fri, 8 Mar 2019 10:13:56 -0300
Subject: [PATCH 18/23] Remove cookies from QuilombolaIndicator

---
 src/About.js                         | 15 +----
 src/AfricanOrigin.js                 |  4 +-
 src/Quilombola.js                    | 96 +++++++++++-----------------
 src/SubPages/QuilombolaIndicator1.js | 13 +---
 src/SubPages/QuilombolaIndicator2.js | 15 ++---
 src/SubPages/QuilombolaIndicator3.js | 14 +---
 6 files changed, 52 insertions(+), 105 deletions(-)

diff --git a/src/About.js b/src/About.js
index 28ed5eeb..41057faf 100644
--- a/src/About.js
+++ b/src/About.js
@@ -24,26 +24,17 @@ import React, { Component } from 'react';
 import NavigationBar from './Components/NavigationBar'
 import AppFooter from './Components/AppFooter'
 import { Tabs, Card, Row, Col} from 'react-materialize'
-import Cookies from 'universal-cookie';
 import ContrastBar from './Components/ContrastBar'
-
+import { Store } from './Store'
 
 import './Styles/About.css'
 
-var contrastCK = new Cookies();
-var cookieStatus = contrastCK.get('contrast');
-
 class About extends Component {
   render() {
-    var contrastString = '';
-    if(cookieStatus === 'true'){
-      contrastString = 'Contrast'
-    }
+    var contrastString = this.context.state.contrast;
     return (
       <div id={`${contrastString}mainPage`}>
-        <ContrastBar/>
         <NavigationBar/>
-
         <div id='contentTabsDiv'>
           <Tabs className={`tab-demo z-depth-1 ${contrastString}mainPageTealBlue`}></Tabs>
           <Row>
@@ -56,10 +47,10 @@ class About extends Component {
           </Col>
           </Row>
         </div>
-        <AppFooter/>
       </div>
     );
   }
 }
+About.contextType = Store;
 
 export default About;
diff --git a/src/AfricanOrigin.js b/src/AfricanOrigin.js
index 2b3dcb2f..81686001 100644
--- a/src/AfricanOrigin.js
+++ b/src/AfricanOrigin.js
@@ -20,13 +20,13 @@ along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
 
 
 
-import React, { Component } from 'react';
+import React from 'react';
 import NavigationBar from './Components/NavigationBar';
 import AfricanCulture from './SubPages/AfricanCulture';
 import AfricanSustainability from './SubPages/AfricanSustainability';
 import AfricanRights from './SubPages/AfricanRights';
 import { Tab, Tabs } from 'react-materialize';
-import { Store } from './Store'
+import { Store } from './Store';
 
 
 import './Styles/AfricanOrigin.css'
diff --git a/src/Quilombola.js b/src/Quilombola.js
index fa6574aa..908dcbda 100644
--- a/src/Quilombola.js
+++ b/src/Quilombola.js
@@ -21,80 +21,56 @@ along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
 
 
 /* Esse arquivo contém dados historicos sobre quilombolas, como se fosse um "quilombolas 2.0" */
-import React, { Component } from 'react';
+import React from 'react';
 import NavigationBar from './Components/NavigationBar'
-import AppFooter from './Components/AppFooter'
 import { Tab, Tabs } from 'react-materialize';
 import './Styles/Quilombolas.css';
-import Cookies from 'universal-cookie';
-import {sleep, homeURL} from './enviroment'
-import ContrastBar from './Components/ContrastBar'
 import QuilombolaIndicator1 from './SubPages/QuilombolaIndicator1'
 import QuilombolaIndicator2 from './SubPages/QuilombolaIndicator2'
 import QuilombolaIndicator3 from './SubPages/QuilombolaIndicator3'
+import { Store } from './Store';
 
-var ck = new Cookies();
-var contrastCK = new Cookies();
-var cookieStatus = contrastCK.get('contrast');
 
 
-class Quilombola extends Component {
-  constructor(props) {
-    super(props);
-    this.whereIAm = this.whereIAm.bind(this);
-  }
+function Quilombola() {
 
-  componentDidMount() {
-    this.whereIAm()
+  // Get information about which page was accessed
+  const { state, dispatch } = React.useContext(Store);
+  var states = {"EIXO 2": false,"EIXO 3": false,"EIXO 4": false}
+  if (state.page in states) {
+    states[state.page] = true
+  }
+  else {
+    states["EIXO 2"] = true
   }
 
-  render() {
-    var contrastString = '';
-    if(cookieStatus === 'true'){
-      contrastString = 'Contrast'
-    }
-    const cookie = new Cookies();
-    var clicked = cookie.get('mainPageClicked')
-    var states = {"EIXO 2": true,"EIXO 3": false,"EIXO 4": false}
-    if (clicked !== undefined){
-      if (clicked in states){
-        states["EIXO 2"] = false;
-        states[clicked] = true;
-      }
-      else{
-        states = {"EIXO 2": true}
-        ck.set('mainPageClicked', 'EIXO 2');
-      }
-    }
-    else{
-      // Redirect user to the main page if he/she do not have a cookie
-      window.location.href = homeURL()
-    }
-    return (
-      <div id={`${contrastString}mainPage`}>
-        <ContrastBar/>
-        <NavigationBar/>
-        <div id='contentTabsDiv'>
-          <Tabs className={`tab-demo z-depth-1 ${contrastString}mainPageRedTab`} onChange={this.whereIAm}>
-            <Tab title="EIXO 2" active={states["EIXO 2"]}> <QuilombolaIndicator1/> </Tab>
-            <Tab title="EIXO 3" active={states["EIXO 3"]}> <QuilombolaIndicator2/> </Tab>
-            <Tab title="EIXO 4" active={states["EIXO 4"]}> <QuilombolaIndicator3/> </Tab>
-          </Tabs>
-        </div>
-        <AppFooter/>
-      </div>
-    );
+  // Hook to set page context
+  const setPageAction = (newPage) => {
+    return dispatch({
+      type: 'SET_PAGE',
+      payload: newPage
+    })
   }
+  React.useEffect(() => { });
 
-  whereIAm(e, ev){
-    if(ev){
-      ck.set('mainPageClicked', ev.target.innerText);
-      this.setState({visited:ev.target.innerText});
-    }
-    sleep(1).then(() => {
-      if(document.getElementsByClassName('clearmapbtn')[0])
-        document.getElementsByClassName('clearmapbtn')[0].click()
-    });
+  const whereIAm = (e, ev) => {
+    if (ev)
+      setPageAction(ev.target.innerText)
   }
+
+  var contrastString = state.contrast
+
+  return (
+    <div id={`${contrastString}mainPage`}>
+      <NavigationBar/>
+      <div id='contentTabsDiv'>
+        <Tabs className={`tab-demo z-depth-1 ${contrastString}mainPageRedTab`} onChange={whereIAm}>
+          <Tab title="EIXO 2" active={states["EIXO 2"]}> {states["EIXO 2"] ? <QuilombolaIndicator1 /> : <div/>} </Tab>
+          <Tab title="EIXO 3" active={states["EIXO 3"]}> {states["EIXO 3"] ? <QuilombolaIndicator2 /> : <div/>} </Tab>
+          <Tab title="EIXO 4" active={states["EIXO 4"]}> {states["EIXO 4"] ? <QuilombolaIndicator3 /> : <div/>} </Tab>
+        </Tabs>
+      </div>
+    </div>
+  );
 }
 export default Quilombola;
diff --git a/src/SubPages/QuilombolaIndicator1.js b/src/SubPages/QuilombolaIndicator1.js
index f9d62fa0..0fefeb05 100644
--- a/src/SubPages/QuilombolaIndicator1.js
+++ b/src/SubPages/QuilombolaIndicator1.js
@@ -30,12 +30,9 @@ import axios from 'axios';
 import { getServerURL, organizeJson, getRegionState, deactivateLoadingAnimation, getStateName, searchHash } from '../enviroment'
 import BuildStackedBar from '../Charts/BuildStackedBar';
 import Loading from '../Components/Loading';
-import Cookies from 'universal-cookie';
+import { Store } from '../Store'
 
 
-var ck = new Cookies();
-var contrastCK = new Cookies();
-var cookieStatus = contrastCK.get('contrast');
 const serverURL = getServerURL();
 const type = "cad_unico";
 const homeTypelocation = {
@@ -112,11 +109,7 @@ class QuilombolaIndicator1 extends Component {
   }
 
   render() {
-    var contrastString = '';
-    if(cookieStatus === 'true'){
-      contrastString = 'Contrast'
-    }
-    if (ck.get('mainPageClicked') === "EIXO 2")
+    var contrastString = this.context.state.contrast;
     return (
       <div id={type}>
         <Row>
@@ -223,7 +216,6 @@ class QuilombolaIndicator1 extends Component {
         </Row>
       </div>
     );
-    else return <div></div>
   }
 
   getDataFromAutocomplete(data) {
@@ -469,5 +461,6 @@ getCampiFromServer(id){
 }
 
 }
+QuilombolaIndicator1.contextType = Store;
 
 export default QuilombolaIndicator1;
\ No newline at end of file
diff --git a/src/SubPages/QuilombolaIndicator2.js b/src/SubPages/QuilombolaIndicator2.js
index 1b885eae..6edb2ab4 100644
--- a/src/SubPages/QuilombolaIndicator2.js
+++ b/src/SubPages/QuilombolaIndicator2.js
@@ -31,12 +31,9 @@ import { getServerURL, organizeJson, getRegionState, deactivateLoadingAnimation,
 import BuildStackedBar from '../Charts/BuildStackedBar';
 //import BuildBar from '../Charts/BuildBar';
 import Loading from '../Components/Loading';
-import Cookies from 'universal-cookie';
+import { Store } from '../Store'
 
 
-var ck = new Cookies();
-var contrastCK = new Cookies();
-var cookieStatus = contrastCK.get('contrast');
 const serverURL = getServerURL();
 const type = "cad_unico";
 const extrativismo = {
@@ -79,11 +76,9 @@ class QuilombolaIndicator2 extends Component {
   }
 
   render() {
-    var contrastString = '';
-    if(cookieStatus === 'true'){
-      contrastString = 'Contrast'
-    }
-    if (ck.get('mainPageClicked') === "EIXO 3")
+
+    var contrastString = this.context.state.contrast;
+
     return (
       <div id={type}>
         <Row>
@@ -186,7 +181,6 @@ class QuilombolaIndicator2 extends Component {
         </Row>
       </div>
     );
-    else return <div></div>
   }
 
   getDataFromAutocomplete(data) {
@@ -426,5 +420,6 @@ getCampiFromServer(id){
 }
 
 }
+QuilombolaIndicator2.contextType = Store;
 
 export default QuilombolaIndicator2;
\ No newline at end of file
diff --git a/src/SubPages/QuilombolaIndicator3.js b/src/SubPages/QuilombolaIndicator3.js
index 822cbd9f..cbd3eb8a 100644
--- a/src/SubPages/QuilombolaIndicator3.js
+++ b/src/SubPages/QuilombolaIndicator3.js
@@ -32,12 +32,8 @@ import BuildStackedBar from '../Charts/BuildStackedBar';
 import BuildMixedBar from '../Charts/BuildMixedBar';
 import BuildBar from '../Charts/BuildBar';
 import Loading from '../Components/Loading';
-import Cookies from 'universal-cookie';
+import { Store } from '../Store'
 
-
-var ck = new Cookies();
-var contrastCK = new Cookies();
-var cookieStatus = contrastCK.get('contrast');
 const serverURL = getServerURL();
 const type = "cad_unico";
 const AnoLabel = {
@@ -95,11 +91,7 @@ class QuilombolaIndicator3 extends Component {
   }
 
   render() {
-    var contrastString = '';
-    if(cookieStatus === 'true'){
-      contrastString = 'Contrast'
-    }
-    if (ck.get('mainPageClicked') === "EIXO 4")
+    var contrastString = this.context.state.contrast;
     return (
       <div id={type}>
         <Row>
@@ -194,7 +186,6 @@ class QuilombolaIndicator3 extends Component {
         </Row>
       </div>
     );
-    else return <div></div>
   }
 
   getDataFromAutocomplete(data) {
@@ -490,5 +481,6 @@ class QuilombolaIndicator3 extends Component {
   }
 
 }
+QuilombolaIndicator3.contextType = Store;
 
 export default QuilombolaIndicator3;
\ No newline at end of file
-- 
GitLab


From f62156a9ac84a8230fb5d64b2545b435aeebcc2d Mon Sep 17 00:00:00 2001
From: eht17 <eht17@inf.ufpr.br>
Date: Fri, 8 Mar 2019 15:55:34 -0300
Subject: [PATCH 19/23] Remove cookies from RacialQuotas

---
 src/RacialQuotas.js                      | 132 ++++++++-----------
 src/SubPages/QuotasAdmission.js          |  15 +--
 src/SubPages/QuotasEducation.js          |  15 +--
 src/SubPages/QuotasEvader.js             | 154 +++++++++++------------
 src/SubPages/QuotasExtracurricularAct.js |  15 +--
 src/SubPages/QuotasFies.js               |  14 +--
 src/SubPages/QuotasGraduate.js           |  14 +--
 src/SubPages/QuotasLoan.js               |  15 +--
 src/SubPages/QuotasOfferVacancies.js     |  18 +--
 src/SubPages/QuotasPROUNI.js             |  14 +--
 src/SubPages/QuotasSocialSupport.js      |  15 +--
 11 files changed, 160 insertions(+), 261 deletions(-)

diff --git a/src/RacialQuotas.js b/src/RacialQuotas.js
index 9768de70..6a4fad44 100644
--- a/src/RacialQuotas.js
+++ b/src/RacialQuotas.js
@@ -20,9 +20,8 @@ along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
 
 
 
-import React, { Component } from 'react';
+import React from 'react';
 import NavigationBar from './Components/NavigationBar';
-import AppFooter from './Components/AppFooter';
 import QuotasEvader from './SubPages/QuotasEvader';
 import QuotasGraduate from './SubPages/QuotasGraduate';
 import QuotasEducation from './SubPages/QuotasEducation';
@@ -34,101 +33,70 @@ import QuotasExtracurricularAct from './SubPages/QuotasExtracurricularAct';
 import QuotasSocialSupport from './SubPages/QuotasSocialSupport';
 import QuotasOfferVacancies from './SubPages/QuotasOfferVacancies';
 import { Tab, Tabs } from 'react-materialize';
-import Cookies from 'universal-cookie';
-import ContrastBar from './Components/ContrastBar'
-import {homeURL} from './enviroment'
+import { Store } from './Store';
 
 
 import './Styles/RacialQuotas.css'
 
-var ck = new Cookies();
-var contrastCK = new Cookies();
-var cookieStatus = contrastCK.get('contrast');
-
-class RacialQuotas extends Component {
-  constructor(props) {
-    super(props);
-    this.whereIAm = this.whereIAm.bind(this);
-     this.state = {
-       visited:'EVASORES'
-     }
+function RacialQuotas() {
+
+  // Get information about which page was accessed
+  const { state, dispatch } = React.useContext(Store);
+  var states = {
+    "EVASÃO": false,
+    "CONCLUINTES": false,
+    "ESCOLARIDADE": false,
+    "FIES": false,
+    "PROUNI": false,
+    "FINANCIAMENTO": false,
+    'ATIVIDADE EXTRACURRICULAR': false,
+    'INGRESSO': false,
+    'APOIO SOCIAL': false,
+    'VAGAS OFERTADAS': false
   }
-  componentDidMount() {
-    this.whereIAm()
+  if (state.page in states) {
+    states[state.page] = true
   }
-  render() {
-    var contrastString = '';
-    if(cookieStatus === 'true'){
-      contrastString = 'Contrast'
-    }
-    const cookie = new Cookies();    
-    var clicked = cookie.get('mainPageClicked')
-    var states = {"EVASÃO": true, 
-                  "CONCLUINTES": false,
-                  "ESCOLARIDADE": false, 
-                  "FIES": false, 
-                  "PROUNI": false, 
-                  "FINANCIAMENTO": false,
-                  'ATIVIDADE EXTRACURRICULAR':false,
-                  'INGRESSO':false,
-                  'APOIO SOCIAL': false,
-                  'VAGAS OFERTADAS': false
-                }
-
-    if (clicked !== undefined){
-      if (clicked in states){
-        states["EVASÃO"] = false;
-        states[clicked] = true;
-      }
-      else{
-        states = {"EVASÃO": true, 
-                  "CONCLUINTES": false,
-                  "ESCOLARIDADE": false, 
-                  "FIES": false, 
-                  "PROUNI": false, 
-                  "FINANCIAMENTO": false,
-                  'ATIVIDADE EXTRACURRICULAR':false,
-                  'INGRESSO':false,
-                  'APOIO SOCIAL': false,
-                  'VAGAS OFERTADAS': false
-                }
-        ck.set('mainPageClicked', 'EVASÃO');
-      }
-    }
-    else{
-      // Redirect user to the main page if he/she do not have a cookie
-      window.location.href = homeURL()
-    }
+  else {
+    states["EVASÃO"] = true
+  }
+
+  // Hook to set page context
+  const setPageAction = (newPage) => {
+    return dispatch({
+      type: 'SET_PAGE',
+      payload: newPage
+    })
+  }
+  React.useEffect(() => { });
+
+  const whereIAm = (e, ev) => {
+    if (ev)
+      setPageAction(ev.target.innerText)
+  }
+
+  var contrastString = state.contrast
+
     return (
       <div id={`${contrastString}mainPage`}>
-        <ContrastBar/>
         <NavigationBar />
 
         <div id='contentTabsDiv'>
-          <Tabs className={`tab-demo z-depth-1 ${contrastString}mainPageGreenTab`}  onChange={this.whereIAm} >
-            <Tab title="Evasores" active={states["EVASÃO"]}> <QuotasEvader visited={this.state.visited}/> </Tab>
-            <Tab title="Concluintes" active={states["CONCLUINTES"]}> <QuotasGraduate visited={this.state.visited}/> </Tab>
-            <Tab title="Escolaridade" active={states["ESCOLARIDADE"]}> <QuotasEducation visited={this.state.visited}/> </Tab>
-            <Tab title="FIES" active={states["FIES"]}> <QuotasFies visited={this.state.visited}/> </Tab>
-            <Tab title="PROUNI" active={states["PROUNI"]}> <QuotasPROUNI visited={this.state.visited}/> </Tab>
-            <Tab title="Financiamento" active={states["FINANCIAMENTO"]}> <QuotasLoan visited={this.state.visited}/> </Tab>
-            <Tab title="Atividade Extracurricular" active={states['ATIVIDADE EXTRACURRICULAR']}> <QuotasExtracurricularAct visited={this.state.visited}/> </Tab>
-            <Tab title="Ingresso" active={states["INGRESSO"]}> <QuotasAdmission visited={this.state.visited}/> </Tab>
-            <Tab title="Apoio Social" active={states["APOIO SOCIAL"]}> <QuotasSocialSupport visited={this.state.visited}/> </Tab>
-            <Tab title="Vagas Ofertadas" active={states["VAGAS OFERTADAS"]}> <QuotasOfferVacancies visited={this.state.visited}/> </Tab>
+          <Tabs className={`tab-demo z-depth-1 ${contrastString}mainPageGreenTab`}  onChange={whereIAm} >
+            <Tab title="Evasores" active={states["EVASÃO"]}> {states["EVASÃO"] ? <QuotasEvader /> : <div />} </Tab>
+            <Tab title="Concluintes" active={states["CONCLUINTES"]}> {states["CONCLUINTES"] ? <QuotasGraduate /> : <div />} </Tab>
+            <Tab title="Escolaridade" active={states["ESCOLARIDADE"]}> {states["ESCOLARIDADE"] ? <QuotasEducation /> : <div />} </Tab>
+            <Tab title="FIES" active={states["FIES"]}> {states["FIES"] ? <QuotasFies /> : <div />} </Tab>
+            <Tab title="PROUNI" active={states["PROUNI"]}> {states["PROUNI"] ? <QuotasPROUNI /> : <div />} </Tab>
+            <Tab title="Financiamento" active={states["FINANCIAMENTO"]}> {states["FINANCIAMENTO"] ? <QuotasLoan /> : <div />} </Tab>
+            <Tab title="Atividade Extracurricular" active={states['ATIVIDADE EXTRACURRICULAR']}> {states["ATIVIDADE EXTRACURRICULAR"] ? <QuotasExtracurricularAct /> : <div />} </Tab>
+            <Tab title="Ingresso" active={states["INGRESSO"]}> {states["INGRESSO"] ? <QuotasAdmission /> : <div />} </Tab>
+            <Tab title="Apoio Social" active={states["APOIO SOCIAL"]}> {states["APOIO SOCIAL"] ? <QuotasSocialSupport /> : <div />} </Tab>
+            <Tab title="Vagas Ofertadas" active={states["VAGAS OFERTADAS"]}> {states["VAGAS OFERTADAS"] ? <QuotasOfferVacancies /> : <div />} </Tab>
           </Tabs>
         </div>
-        <AppFooter/>
       </div>
     );
-  }
-
-  whereIAm(e, ev) {
-    if(ev){
-      ck.set('mainPageClicked', ev.target.innerText);
-      this.setState({visited:ev.target.innerText});
-    }
-  }
 }
 
 
diff --git a/src/SubPages/QuotasAdmission.js b/src/SubPages/QuotasAdmission.js
index 623cfc36..af4dcad7 100644
--- a/src/SubPages/QuotasAdmission.js
+++ b/src/SubPages/QuotasAdmission.js
@@ -31,12 +31,9 @@ import BuildStackedBar from '../Charts/BuildStackedBar';
 import BuildBiaxialBars from '../Charts/BuildBiaxialBars';
 import AutocompleteApp from '../Components/AutocompleteApp';
 import Loading from '../Components/Loading';
-import Cookies from 'universal-cookie';
+import { Store } from '../Store';
 // import DropdownCampi from '../Components/DropdownCampi';
 
-var ck = new Cookies();
-var contrastCK = new Cookies();
-var cookieStatus = contrastCK.get('contrast');
 const serverURL = getServerURL();
 const type = "admission";
 
@@ -78,11 +75,8 @@ class QuotasAdmission extends Component {
   }
 
   render() {
-    var contrastString = '';
-    if(cookieStatus === 'true'){
-      contrastString = 'Contrast'
-    }
-    if (ck.get('mainPageClicked') === "INGRESSO")
+
+    var contrastString = this.context.state.contrast;
     return (
       <div id={type}>
         <Row>
@@ -147,7 +141,6 @@ class QuotasAdmission extends Component {
         </Row>
       </div>
     );
-    else return <div></div>
   }
 
   getDataFromAutocomplete(data) {
@@ -387,5 +380,5 @@ class QuotasAdmission extends Component {
   
 
 }
-
+QuotasAdmission.contextType = Store;
 export default QuotasAdmission;
\ No newline at end of file
diff --git a/src/SubPages/QuotasEducation.js b/src/SubPages/QuotasEducation.js
index 76b3fc16..da939931 100644
--- a/src/SubPages/QuotasEducation.js
+++ b/src/SubPages/QuotasEducation.js
@@ -29,12 +29,9 @@ import axios from 'axios';
 import Fraction from '../Components/Fraction';
 import BuildBarPNAD from '../Charts/BuildBarPNAD';
 import { getServerURL, getRegionState, sleep } from '../enviroment';
-import Cookies from 'universal-cookie';
 import './Styles/QuotasEducation.css'
+import { Store } from '../Store'; 
 
-var ck = new Cookies();
-var contrastCK = new Cookies();
-var cookieStatus = contrastCK.get('contrast');
 const basicFilter = 'type_of_school:"2",type_of_public_school:"6",level_of_education:"5"';
 const serverURL = getServerURL();
 const type = "education";
@@ -91,11 +88,7 @@ class QuotasEducation extends Component {
   }
   
   render() {
-    var contrastString = '';
-    if(cookieStatus === 'true'){
-      contrastString = 'Contrast'
-    }
-    if (ck.get('mainPageClicked') === "ESCOLARIDADE" && this.state.isDone)
+    var contrastString = this.context.state.contrast;
     return (
       <Row>
         <Col s={12} m={10} l={10} offset={'m1 l1'}>
@@ -138,7 +131,7 @@ class QuotasEducation extends Component {
               <div id={'educationChart'}>
                 <BuildBarPNAD 
                   data={this.state.totalRate} 
-                  visited={ck.get('mainPageClicked')} 
+                  // visited={ck.get('mainPageClicked')} 
                   customKeys={educationKeys} 
                   dataKey={'nu_ano_referencia'}
                 />
@@ -147,7 +140,6 @@ class QuotasEducation extends Component {
         </Col>
       </Row>
     );
-    else return <div> </div>
   }
 
   calculateRate(ethnic) {
@@ -364,6 +356,7 @@ class QuotasEducation extends Component {
   }
 
 }
+QuotasEducation.contextType = Store;
 
 const taxaLiquidaBrancosEq = <Fraction 
                                 id={'taxaLiquidaBrancosEq'}
diff --git a/src/SubPages/QuotasEvader.js b/src/SubPages/QuotasEvader.js
index 22b41c82..2e366316 100644
--- a/src/SubPages/QuotasEvader.js
+++ b/src/SubPages/QuotasEvader.js
@@ -32,12 +32,9 @@ import BuildStackedBar from '../Charts/BuildStackedBar';
 import BuildBiaxialBars from '../Charts/BuildBiaxialBars';
 import Loading from '../Components/Loading';
 import AutocompleteApp from '../Components/AutocompleteApp';
+import { Store } from '../Store';
 // import DropdownCampi from '../Components/DropdownCampi';
-import Cookies from 'universal-cookie';
 
-var ck = new Cookies();
-var contrastCK = new Cookies();
-var cookieStatus = contrastCK.get('contrast');
 
 const serverURL = getServerURL();
 const type = "evader";
@@ -82,83 +79,79 @@ class QuotasEvader extends Component {
   }
 
   render() {
-    var contrastString = '';
-    if(cookieStatus === 'true'){
-      contrastString = 'Contrast'
-    }
-    if (ck.get('mainPageClicked') === "EVASÃO" || ck.get('mainPageClicked') === "EVASORES")
-      return (   
-        <div id={type}>
-          <Row>
-            <Col s={12} m={10} l={10} offset={'m1 l1'}>
-              <div className="subpage-margin">
-                <h5 className={`${contrastString}quota-title`}>Evasores</h5>
-                <p className={`${contrastString}quota-subTitle`}>Abaixo encontram-se, separados por categoria, os dados relacionados aos estudantes
-                evasores,que ingressaram na universidade através da Lei 12.711/2012(Lei de cotas). </p>
-                <p> Para visualizar os dados você precisará clicar na seção que deseja visualizar.</p>
-                <MapPanel 
-                  onChange={this.updateCharts} 
-                  getDDValues={this.getDDValues}
-                  getData={this.getData} 
-                  location={type}
-                />
-              </div>
-            </Col>
-            
-            <Col s={12} m={10} l={10} offset={'m1 l1'}>
-              <Collapsible onClick={this.getHeader}>
-                <CollapsibleContainer id={`${contrastString}brownCollapsible`} header='Turno'>
-                  <div id={'Turno'+type}>
-                    <BuildStackedBar 
-                      dataKey='Ano' 
-                      data={organizeJson(this.state.charts['Turno'], "ds_turno_aluno")}
-                      customKeys={turnoK}
-                    />
-                  </div>
-                  <Loading/>
-                </CollapsibleContainer>
-                <CollapsibleContainer id={`${contrastString}brownCollapsible`} header='Gênero'>
-                  <div id={'Gênero'+type}>
-                    <BuildStackedBar dataKey='Ano' data={organizeJson(this.state.charts['Gênero'], "ds_sexo_aluno")}/>
-                  </div>
-                  <Loading/>
-                </CollapsibleContainer>
-                <CollapsibleContainer id={`${contrastString}brownCollapsible`} header='Curso'  > 
-                  <AutocompleteApp 
-                    whichAutocomplete={'course'} 
-                    mainPage={'evader'} 
-                    chartDiv={'no_curso'}  
-                    saveData={this.getDataFromAutocomplete} 
-                    getTags={this.saveAutocompleteContent}
+
+    var contrastString = this.context.state.contrast;
+    return (   
+      <div id={type}>
+        <Row>
+          <Col s={12} m={10} l={10} offset={'m1 l1'}>
+            <div className="subpage-margin">
+              <h5 className={`${contrastString}quota-title`}>Evasores</h5>
+              <p className={`${contrastString}quota-subTitle`}>Abaixo encontram-se, separados por categoria, os dados relacionados aos estudantes
+              evasores,que ingressaram na universidade através da Lei 12.711/2012(Lei de cotas). </p>
+              <p> Para visualizar os dados você precisará clicar na seção que deseja visualizar.</p>
+              <MapPanel 
+                onChange={this.updateCharts} 
+                getDDValues={this.getDDValues}
+                getData={this.getData} 
+                location={type}
+              />
+            </div>
+          </Col>
+          
+          <Col s={12} m={10} l={10} offset={'m1 l1'}>
+            <Collapsible onClick={this.getHeader}>
+              <CollapsibleContainer id={`${contrastString}brownCollapsible`} header='Turno'>
+                <div id={'Turno'+type}>
+                  <BuildStackedBar 
+                    dataKey='Ano' 
+                    data={organizeJson(this.state.charts['Turno'], "ds_turno_aluno")}
+                    customKeys={turnoK}
                   />
-                  <BuildBiaxialBars data={this.state.charts['Curso']} nameKey={'no_curso'} dataKey={'total'} dataKey2={'percentage'} year={'no_ano_pesquisa'}/>
-                </CollapsibleContainer>
-                <CollapsibleContainer id={`${contrastString}brownCollapsible`} header='Instituição de Ensino'> 
-                  <AutocompleteApp 
-                    whichAutocomplete={'institution'} 
-                    mainPage={'evader'} 
-                    chartDiv={'no_ies'} 
-                    saveData={this.getDataFromAutocomplete} 
-                    getTags={this.saveAutocompleteContent}
-                    // dropdown={'ddCampiEvader'}
-                  />    
-                  {/* <div id={"ddCampiEvader"} style={{display:'none'}}>
-                    <DropdownCampi campi={this.state.campiList} getDDValues={this.campiFilter} location={type} campiNames={this.state.campiNames}/>
-                  </div> */}
-                  <BuildBiaxialBars data={this.state.charts['Instituição de Ensino']} nameKey={'no_ies'} dataKey={'total'} dataKey2={'percentage'} year={'no_ano_pesquisa'}/>
-                </CollapsibleContainer>
-                <CollapsibleContainer id={`${contrastString}brownCollapsible`} header='Raça/Cor'> 
-                  <div id={'Raça/Cor'+type}>
-                    <BuildStackedBar dataKey='Ano' data={organizeJson(this.state.charts['Raça/Cor'], "ds_cor_raca_aluno")}/>
-                  </div>
-                  <Loading/>
-                </CollapsibleContainer>
-              </Collapsible>
-            </Col>
-          </Row>
-        </div>
-      );
-    else return <div></div>;
+                </div>
+                <Loading/>
+              </CollapsibleContainer>
+              <CollapsibleContainer id={`${contrastString}brownCollapsible`} header='Gênero'>
+                <div id={'Gênero'+type}>
+                  <BuildStackedBar dataKey='Ano' data={organizeJson(this.state.charts['Gênero'], "ds_sexo_aluno")}/>
+                </div>
+                <Loading/>
+              </CollapsibleContainer>
+              <CollapsibleContainer id={`${contrastString}brownCollapsible`} header='Curso'  > 
+                <AutocompleteApp 
+                  whichAutocomplete={'course'} 
+                  mainPage={'evader'} 
+                  chartDiv={'no_curso'}  
+                  saveData={this.getDataFromAutocomplete} 
+                  getTags={this.saveAutocompleteContent}
+                />
+                <BuildBiaxialBars data={this.state.charts['Curso']} nameKey={'no_curso'} dataKey={'total'} dataKey2={'percentage'} year={'no_ano_pesquisa'}/>
+              </CollapsibleContainer>
+              <CollapsibleContainer id={`${contrastString}brownCollapsible`} header='Instituição de Ensino'> 
+                <AutocompleteApp 
+                  whichAutocomplete={'institution'} 
+                  mainPage={'evader'} 
+                  chartDiv={'no_ies'} 
+                  saveData={this.getDataFromAutocomplete} 
+                  getTags={this.saveAutocompleteContent}
+                  // dropdown={'ddCampiEvader'}
+                />    
+                {/* <div id={"ddCampiEvader"} style={{display:'none'}}>
+                  <DropdownCampi campi={this.state.campiList} getDDValues={this.campiFilter} location={type} campiNames={this.state.campiNames}/>
+                </div> */}
+                <BuildBiaxialBars data={this.state.charts['Instituição de Ensino']} nameKey={'no_ies'} dataKey={'total'} dataKey2={'percentage'} year={'no_ano_pesquisa'}/>
+              </CollapsibleContainer>
+              <CollapsibleContainer id={`${contrastString}brownCollapsible`} header='Raça/Cor'> 
+                <div id={'Raça/Cor'+type}>
+                  <BuildStackedBar dataKey='Ano' data={organizeJson(this.state.charts['Raça/Cor'], "ds_cor_raca_aluno")}/>
+                </div>
+                <Loading/>
+              </CollapsibleContainer>
+            </Collapsible>
+          </Col>
+        </Row>
+      </div>
+    );
   }
 
   getDataFromAutocomplete(data) {
@@ -393,5 +386,6 @@ class QuotasEvader extends Component {
   //     this.setState({charts:currentState})
   // }
 }
+QuotasEvader.contextType = Store;
 
 export default QuotasEvader;
\ No newline at end of file
diff --git a/src/SubPages/QuotasExtracurricularAct.js b/src/SubPages/QuotasExtracurricularAct.js
index b3821883..44c8fc77 100644
--- a/src/SubPages/QuotasExtracurricularAct.js
+++ b/src/SubPages/QuotasExtracurricularAct.js
@@ -31,12 +31,9 @@ import BuildStackedBar from '../Charts/BuildStackedBar';
 import BuildBiaxialBars from '../Charts/BuildBiaxialBars';
 import AutocompleteApp from '../Components/AutocompleteApp';
 import Loading from '../Components/Loading';
-import Cookies from 'universal-cookie';
+import { Store } from '../Store';
 // import DropdownCampi from '../Components/DropdownCampi';
 
-var ck = new Cookies();
-var contrastCK = new Cookies();
-var cookieStatus = contrastCK.get('contrast');
 const serverURL = getServerURL();
 const type = "extracurricular_activities";
 
@@ -80,11 +77,8 @@ class QuotasExtracurricularAct extends Component {
   }
 
   render() {
-    var contrastString = '';
-    if(cookieStatus === 'true'){
-      contrastString = 'Contrast'
-    }
-    if (ck.get('mainPageClicked') === "ATIVIDADE EXTRACURRICULAR")
+
+    var contrastString = this.context.state.contrast;
     return (
       <div id={type}>
         <Row>
@@ -149,7 +143,6 @@ class QuotasExtracurricularAct extends Component {
         </Row>
       </div>
     );
-    else return <div></div>
   }
 
   getDataFromAutocomplete(data) {
@@ -388,5 +381,5 @@ class QuotasExtracurricularAct extends Component {
   
 
 }
-
+QuotasExtracurricularAct.contextType = Store;
 export default QuotasExtracurricularAct;
\ No newline at end of file
diff --git a/src/SubPages/QuotasFies.js b/src/SubPages/QuotasFies.js
index d67bc878..9e6aba05 100644
--- a/src/SubPages/QuotasFies.js
+++ b/src/SubPages/QuotasFies.js
@@ -34,11 +34,8 @@ import BuildBiaxialBars from '../Charts/BuildBiaxialBars';
 import AutocompleteApp from '../Components/AutocompleteApp';
 import DropdownCampi from '../Components/DropdownCampi';
 import Loading from '../Components/Loading';
-import Cookies from 'universal-cookie';
+import { Store } from '../Store'
 
-var ck = new Cookies();
-var contrastCK = new Cookies();
-var cookieStatus = contrastCK.get('contrast');
 const serverURL = getServerURL();
 const type = "fies";
 
@@ -82,11 +79,8 @@ class QuotasFies extends Component {
   }
 
   render() {
-    var contrastString = '';
-    if(cookieStatus === 'true'){
-      contrastString = 'Contrast'
-    }
-    if (ck.get('mainPageClicked') === "FIES")
+
+    var contrastString = this.context.state.contrast;
     return (
       <div id={type}>   
         <Row>
@@ -175,7 +169,6 @@ class QuotasFies extends Component {
         </Row>
       </div>
     );
-    else return <div></div>
   }
 
   updatePercent(e) {
@@ -375,5 +368,6 @@ class QuotasFies extends Component {
  }
   
 }
+QuotasFies.contextType = Store;
 
 export default QuotasFies;
\ No newline at end of file
diff --git a/src/SubPages/QuotasGraduate.js b/src/SubPages/QuotasGraduate.js
index 9c074efe..31cbc0d7 100644
--- a/src/SubPages/QuotasGraduate.js
+++ b/src/SubPages/QuotasGraduate.js
@@ -32,13 +32,10 @@ import BuildStackedBar from '../Charts/BuildStackedBar';
 import BuildBiaxialBars from '../Charts/BuildBiaxialBars';
 import AutocompleteApp from '../Components/AutocompleteApp';
 import Loading from '../Components/Loading';
-import Cookies from 'universal-cookie';
+import { Store } from '../Store';
 // import DropdownCampi from '../Components/DropdownCampi';
 
 
-var ck = new Cookies();
-var contrastCK = new Cookies();
-var cookieStatus = contrastCK.get('contrast');
 const serverURL = getServerURL();
 const type = "graduate";
 
@@ -81,11 +78,8 @@ class QuotasGraduate extends Component {
   }
 
   render() {
-    var contrastString = '';
-    if(cookieStatus === 'true'){
-      contrastString = 'Contrast'
-    }
-    if (ck.get('mainPageClicked') === "CONCLUINTES")
+
+    var contrastString = this.context.state.contrast;
     return (
       <div id={type}>
         <Row>
@@ -151,7 +145,6 @@ class QuotasGraduate extends Component {
         </Row>
       </div>
     );
-    else return <div></div>
   }
 
   getDataFromAutocomplete(data) {
@@ -390,5 +383,6 @@ getCampiFromServer(id){
 }
 
 }
+QuotasGraduate.contextType = Store;
 
 export default QuotasGraduate;
\ No newline at end of file
diff --git a/src/SubPages/QuotasLoan.js b/src/SubPages/QuotasLoan.js
index b6c96745..5f54c623 100644
--- a/src/SubPages/QuotasLoan.js
+++ b/src/SubPages/QuotasLoan.js
@@ -33,15 +33,11 @@ import BuildBiaxialBars from '../Charts/BuildBiaxialBars';
 import AutocompleteApp from '../Components/AutocompleteApp';
 // import DropdownCampi from '../Components/DropdownCampi';
 import Loading from '../Components/Loading';
-import Cookies from 'universal-cookie';
-
+import { Store } from '../Store'
 
 /// TODO: Arrumar URL da consulta
 /// http://seppirdev.c3sl.ufpr.br:4000/api/v1/student_loans?dims=institution_cod,institution,cod_offer_location,name_offer_location&filter=institution_cod:%22undefined%22,ethnic:[%22Preta%22,%22Parda%22,%22Ind%C3%ADgena%22]
 
-var ck = new Cookies();
-var contrastCK = new Cookies();
-var cookieStatus = contrastCK.get('contrast');
 const serverURL = getServerURL();
 const type = "student_loans";
 const tableClasses = "bordered striped highlight centered";
@@ -85,11 +81,7 @@ class QuotasLoan extends Component {
   }
 
   render() {
-    var contrastString = '';
-    if(cookieStatus === 'true'){
-      contrastString = 'Contrast'
-    }
-    if (ck.get('mainPageClicked') === "FINANCIAMENTO")
+    var contrastString = this.context.state.contrast;
     return (
       <div id={type}>   
         <Row>
@@ -208,7 +200,6 @@ class QuotasLoan extends Component {
         </Row>
       </div>
     );
-    else return <div></div>
   }
 
   getDataFromAutocomplete(data) {
@@ -485,5 +476,5 @@ bodyStyles[3][6] = '';
 bodyStyles[4][6] = '';
 bodyStyles[5][6] = ''; 
 
-
+QuotasLoan.contextType = Store;
 export default QuotasLoan;
\ No newline at end of file
diff --git a/src/SubPages/QuotasOfferVacancies.js b/src/SubPages/QuotasOfferVacancies.js
index ff03bb34..7dd1edcf 100644
--- a/src/SubPages/QuotasOfferVacancies.js
+++ b/src/SubPages/QuotasOfferVacancies.js
@@ -21,7 +21,6 @@ along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
 
 
 import React, { Component } from 'react';
-import Cookies from 'universal-cookie';
 import {Collapsible, Row, Col} from 'react-materialize';
 import MapPanel from '../Components/MapPanel';
 import CollapsibleContainer from '../Components/CollapsibleContainer'
@@ -32,13 +31,11 @@ import Table from '../Components/Table';
 import AutocompleteApp from '../Components/AutocompleteApp';
 import BuildStackedBar from '../Charts/BuildStackedBar';
 import DropdownCampi from '../Components/DropdownCampi';
+import { Store } from '../Store';
 
 
 import './Styles/QuotasOfferVacancies.css'
 
-var ck = new Cookies();
-var contrastCK = new Cookies();
-var cookieStatus = contrastCK.get('contrast');
 
 const type = "vacancy";
 const vacancy = "vacancy"
@@ -69,16 +66,10 @@ class QuotasOfferVacancies extends Component {
     this.campiFilter = this.campiFilter.bind(this);
   }
 
-  componentDidMount(){
-    this.setState({cookie:ck.get('mainPageClicked')})
-  }
 
   render() {
-    var contrastString = '';
-    if(cookieStatus === 'true'){
-      contrastString = 'Contrast'
-    }
-    if (ck.get('mainPageClicked') === "VAGAS OFERTADAS" || this.state.cookie === 'VAGAS OFERTADAS')
+
+    var contrastString = this.context.state.contrast;
     return (
       <div id={type}>
           <Row>
@@ -138,7 +129,6 @@ class QuotasOfferVacancies extends Component {
           </Row>
         </div>
     );
-    else return <div></div>
   }
 
   organizeDataTable(data){
@@ -373,4 +363,6 @@ const tableHeader = ['Ano', 'Turno', 'PcD', 'Não PcD', 'Étnica PcD', 'Étnica
 // headerStyles[3] = 'borderRight';
 // headerStyles[4] = 'borderRight';
 // headerStyles[5] = 'borderRight';
+
+QuotasOfferVacancies.contextType = Store;
 export default QuotasOfferVacancies;
diff --git a/src/SubPages/QuotasPROUNI.js b/src/SubPages/QuotasPROUNI.js
index 82dcfdf5..a714c278 100644
--- a/src/SubPages/QuotasPROUNI.js
+++ b/src/SubPages/QuotasPROUNI.js
@@ -32,11 +32,8 @@ import BuildStackedBar from '../Charts/BuildStackedBar';
 import BuildBiaxialBars from '../Charts/BuildBiaxialBars';
 import AutocompleteApp from '../Components/AutocompleteApp';
 import Loading from '../Components/Loading';
-import Cookies from 'universal-cookie';
+import { Store } from '../Store';
 
-var ck = new Cookies();
-var contrastCK = new Cookies();
-var cookieStatus = contrastCK.get('contrast');
 const serverURL = getServerURL();
 const type = "prouni";
 
@@ -66,11 +63,8 @@ class QuotasPROUNI extends Component {
   }
 
   render() {
-    var contrastString = '';
-    if(cookieStatus === 'true'){
-      contrastString = 'Contrast'
-    }
-    if (ck.get('mainPageClicked') === "PROUNI")
+
+    var contrastString = this.context.state.contrast;
     return (
       <div id={type}>
         <Row>
@@ -127,7 +121,6 @@ class QuotasPROUNI extends Component {
         </Row>
       </div>
     );
-    else return <div></div>
   }
 
   getDataFromAutocomplete(data) {
@@ -300,5 +293,6 @@ createRoute(header) {
   }
 
 }
+QuotasPROUNI.contextType = Store;
 
 export default QuotasPROUNI;
\ No newline at end of file
diff --git a/src/SubPages/QuotasSocialSupport.js b/src/SubPages/QuotasSocialSupport.js
index 09bf7aa7..07ea6f85 100644
--- a/src/SubPages/QuotasSocialSupport.js
+++ b/src/SubPages/QuotasSocialSupport.js
@@ -32,12 +32,9 @@ import BuildBiaxialBars from '../Charts/BuildBiaxialBars';
 import AutocompleteApp from '../Components/AutocompleteApp';
 import Loading from '../Components/Loading';
 import MultiSelector from '../Components/MultiSelector';
-import Cookies from 'universal-cookie';
+import { Store } from '../Store'
 // import DropdownCampi from '../Components/DropdownCampi';
 
-var ck = new Cookies();
-var contrastCK = new Cookies();
-var cookieStatus = contrastCK.get('contrast');
 const serverURL = getServerURL();
 const type = "social_support";
 
@@ -79,11 +76,8 @@ class QuotasSocialSupport extends Component {
   }
 
   render() {
-    var contrastString = '';
-    if(cookieStatus === 'true'){
-      contrastString = 'Contrast'
-    }
-    if (ck.get('mainPageClicked') === "APOIO SOCIAL")
+
+    var contrastString = this.context.state.contrast;
     return (
       <div id={type}>
         <Row>
@@ -160,7 +154,6 @@ class QuotasSocialSupport extends Component {
         </Row>
       </div>
     );
-    else return <div></div>
   }
 
   getDataFromAutocomplete(data) {
@@ -410,5 +403,5 @@ const multiSelector = {
 'Apoio Transporte': 'in_apoio_transporte',
 } 
 
-
+QuotasSocialSupport.contextType = Store;
 export default QuotasSocialSupport;
\ No newline at end of file
-- 
GitLab


From a1c6104cac37bf5292b27bc40fde1f301a68baa3 Mon Sep 17 00:00:00 2001
From: eht17 <eht17@inf.ufpr.br>
Date: Tue, 12 Mar 2019 11:24:57 -0300
Subject: [PATCH 20/23] Fix warnings and contrast in some pages

---
 src/About.js                         |  2 --
 src/Charts/BuildMixedBar.js          | 33 ++++++++++++++--------------
 src/Charts/BuildStackedBar.js        | 28 +++++++++++------------
 src/Components/DropdownControl.js    |  7 ++----
 src/Components/MapPanel.js           | 10 +++------
 src/Components/NavigationBar.js      |  2 +-
 src/Styles/NavigationBar.css         |  4 ++++
 src/SubPages/Eixo1.js                |  2 +-
 src/SubPages/Eixo3.js                |  9 --------
 src/SubPages/QuilombolaIndicator3.js |  2 +-
 src/Youth.js                         |  3 +--
 src/enviroment.js                    | 10 ++++-----
 12 files changed, 48 insertions(+), 64 deletions(-)

diff --git a/src/About.js b/src/About.js
index 41057faf..f00b3827 100644
--- a/src/About.js
+++ b/src/About.js
@@ -22,9 +22,7 @@ along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
 
 import React, { Component } from 'react';
 import NavigationBar from './Components/NavigationBar'
-import AppFooter from './Components/AppFooter'
 import { Tabs, Card, Row, Col} from 'react-materialize'
-import ContrastBar from './Components/ContrastBar'
 import { Store } from './Store'
 
 import './Styles/About.css'
diff --git a/src/Charts/BuildMixedBar.js b/src/Charts/BuildMixedBar.js
index da0d57e8..8a23c7f3 100644
--- a/src/Charts/BuildMixedBar.js
+++ b/src/Charts/BuildMixedBar.js
@@ -58,25 +58,25 @@ const renderTooltipContent = (o) => {
   );
 };
 
-const renderCustomizedLabel = (props) => {
-  const { x, y, width, height, value } = props;
-  const radius = 10;
-
-  return (
-    <g>
-      <circle cx={x + width / 2} cy={y - radius} r={radius} fill="#000" />
-      <text x={x + width / 2} y={y - radius} fill="#fff" textAnchor="middle" dominantBaseline="middle">
-        {value}
-      </text>
-    </g>
-  );
-};
+// const renderCustomizedLabel = (props) => {
+//   const { x, y, width, height, value } = props;
+//   const radius = 10;
+
+//   return (
+//     <g>
+//       <circle cx={x + width / 2} cy={y - radius} r={radius} fill="#000" />
+//       <text x={x + width / 2} y={y - radius} fill="#fff" textAnchor="middle" dominantBaseline="middle">
+//         {value}
+//       </text>
+//     </g>
+//   );
+// };
 
 function verifyKeyBar(bar, keysBars) {
   let verifiedKey = 'a'
-  if (keysBars != undefined) {
+  if (keysBars !== undefined) {
     for (let key in keysBars) {
-      if (bar == key) verifiedKey = keysBars[key]
+      if (bar === key) verifiedKey = keysBars[key]
     }
   }
   return verifiedKey
@@ -113,7 +113,6 @@ class BuildStackedBar extends Component {
     }
     var dataKey = this.props.dataKey
     var label = this.props.label
-    var bKeys = this.props.bKeys
     var keysBars = this.props.keysBars
 
     if (this.state.data !== null && this.state.data !== undefined && this.state.data.length > 0)
@@ -129,7 +128,7 @@ class BuildStackedBar extends Component {
             {Object.keys(newData[0]).map(function (bar, index) {
               if (bar !== dataKey) {
                 if (bar !== label) {
-                  if (label == undefined)
+                  if (label === undefined)
                     return (
                       <Bar 
                         isAnimationActive = {false} 
diff --git a/src/Charts/BuildStackedBar.js b/src/Charts/BuildStackedBar.js
index 1e3c6563..a32e7bfe 100644
--- a/src/Charts/BuildStackedBar.js
+++ b/src/Charts/BuildStackedBar.js
@@ -60,19 +60,19 @@ const renderTooltipContent = (o) => {
   );
 };
 
-const renderCustomizedLabel = (props) => {
-    const { x, y, width, height, value } = props;
-    const radius = 10;
-
-    return (
-        <g>
-            <circle cx={x + width / 2} cy={y - radius} r={radius} fill="#000" />
-            <text x={x + width / 2} y={y - radius} fill="#fff" textAnchor="middle" dominantBaseline="middle">
-                {value}
-            </text>
-        </g>
-    );
-};
+// const renderCustomizedLabel = (props) => {
+//     const { x, y, width, height, value } = props;
+//     const radius = 10;
+
+//     return (
+//         <g>
+//             <circle cx={x + width / 2} cy={y - radius} r={radius} fill="#000" />
+//             <text x={x + width / 2} y={y - radius} fill="#fff" textAnchor="middle" dominantBaseline="middle">
+//                 {value}
+//             </text>
+//         </g>
+//     );
+// };
 
 class BuildStackedBar extends Component {
     constructor(props) {
@@ -118,7 +118,7 @@ class BuildStackedBar extends Component {
                     <Legend />
                     { Object.keys(newData[0]).map(function(bar, index) {
                         if(bar !== dataKey) {
-                            if(label == undefined) {
+                            if(label === undefined) {
                                 return <Bar isAnimationActive={false} key={Math.random()} dataKey={bar} stackId="a" fill={COLORS[index]} />
                             }
                             else if(bar !== label) {
diff --git a/src/Components/DropdownControl.js b/src/Components/DropdownControl.js
index c067197c..26a0c232 100644
--- a/src/Components/DropdownControl.js
+++ b/src/Components/DropdownControl.js
@@ -24,15 +24,12 @@ import React, { Component } from 'react';
 import { Row, Input, Button, Icon } from 'react-materialize';
 import axios from 'axios';
 import { getDDValue, getServerURL, getStateRegion } from '../enviroment';
-import Cookies from 'universal-cookie';
 import { Store } from '../Store'
 
 
 import '../Styles/DropdownControl.css';
 
 const serverURL = getServerURL();
-var contrastCK = new Cookies();
-var cookieStatus = contrastCK.get('contrast');
 
 export default class DropdownControl extends Component { 
   constructor(props) {
@@ -63,7 +60,6 @@ export default class DropdownControl extends Component {
   render() {  
 
     var contrastString = this.context.state.contrast;
-    console.log(this.context.state.contrast)
     return (
       <Row>     
         <Row>    
@@ -120,8 +116,9 @@ export default class DropdownControl extends Component {
                 { state.state }  
             </option>
     );
+    var contrastString = this.context.state.contrast;
     return (      
-      <Input s={12} id={"estado" + this.props.location} type='select' label="Estado" value={this.state.clickedState}  onChange={(event)=>{ this.changeState(event); this.handleSelect(event) }}>
+      <Input s={12} className={`${contrastString}inputRegiao`} id={"estado" + this.props.location} type='select' label="Estado" value={this.state.clickedState}  onChange={(event)=>{ this.changeState(event); this.handleSelect(event) }}>
           { listItems }
       </Input>
     );
diff --git a/src/Components/MapPanel.js b/src/Components/MapPanel.js
index 11d9989c..ad457159 100644
--- a/src/Components/MapPanel.js
+++ b/src/Components/MapPanel.js
@@ -26,10 +26,8 @@ import DropdownControl from './DropdownControl'
 import Map from './Map';
 import '../Styles/MapPanel.css';
 import { getStateRegion, activateLoadingAnimation } from '../enviroment';
-import Cookies from 'universal-cookie';
+import { Store } from '../Store'
 
-var contrastCK = new Cookies();
-var cookieStatus = contrastCK.get('contrast');
 const title = "Selecione um estado ou região para filtrar os dados";
 
 export default class MapPanel extends Component {
@@ -44,10 +42,7 @@ export default class MapPanel extends Component {
         this.getData = this.getData.bind(this);
     } 
     render() {
-        var contrastString = '';
-        if(cookieStatus === 'true'){
-          contrastString = 'Contrast'
-        }
+        var contrastString = this.context.state.contrast;
         return (
             <div className='MapPanel'>
                 <Row className="mappanel-margin">
@@ -93,3 +88,4 @@ export default class MapPanel extends Component {
             activateLoadingAnimation(this.props.location)
     }
 }
+MapPanel.contextType = Store;
\ No newline at end of file
diff --git a/src/Components/NavigationBar.js b/src/Components/NavigationBar.js
index 2f6aa3fa..4358cde2 100644
--- a/src/Components/NavigationBar.js
+++ b/src/Components/NavigationBar.js
@@ -67,7 +67,7 @@ function NavigationBar() {
         <ul className="right hide-on-med-and-down">{links}</ul>
 
         <div className="left hide-on-large-only">
-          <SideNav className={`${contrastString}navBackground`} trigger={<a href="#"><i className="material-icons" style={{ marginLeft: 20 }}>menu</i></a>} options={{closeOnClick:true}}>
+          <SideNav className={`${contrastString}navBackground`} trigger={<a href=""><i className={`material-icons ${contrastString}navIcon`} style={{ marginLeft: 20 }}>menu</i></a>} options={{closeOnClick:true}}>
             {links}
           </SideNav>
         </div>
diff --git a/src/Styles/NavigationBar.css b/src/Styles/NavigationBar.css
index ddb0e78c..ad2dccfd 100644
--- a/src/Styles/NavigationBar.css
+++ b/src/Styles/NavigationBar.css
@@ -101,4 +101,8 @@ nav a{
 
 .ContrastnavBackground ~ #nav-mobile{
     background-color: black;
+}
+
+i.ContrastnavIcon {
+    color:white;
 }
\ No newline at end of file
diff --git a/src/SubPages/Eixo1.js b/src/SubPages/Eixo1.js
index 4dc66f79..f2ecbbaf 100644
--- a/src/SubPages/Eixo1.js
+++ b/src/SubPages/Eixo1.js
@@ -26,7 +26,7 @@ import CardFooter from '../Components/CardFooter';
 import UfBar from '../Components/UfBar';
 import GrayBar from '../Components/GrayBar';
 import MapMarker from './icons/map-marker.png';
-import HeatMap from '../Components/HeatMap';
+// import HeatMap from '../Components/HeatMap';
 import { getStateExtendedName } from '../enviroment';
 import * as data from '../JsonsAntigos/brasil-quilombola/bqe1'
 import BuildLineNotFixed from '../Charts/BuildLineNotFixed'
diff --git a/src/SubPages/Eixo3.js b/src/SubPages/Eixo3.js
index ca0ab821..e3cf39b3 100644
--- a/src/SubPages/Eixo3.js
+++ b/src/SubPages/Eixo3.js
@@ -171,15 +171,6 @@ class Eixo3 extends Component {
     return(returnJson)
   }
 
-  fixdatap2(data){
-    var returnJson = []
-    var i
-    for(i = 0; i < data.length -1; ++i){
-      returnJson.push({"Faixa de Renda":data[i]['Faixa de Renda'],"Famílias":data[i]['Famílias']})
-    }
-    return(returnJson)
-  }
-
   fixDataP3(data){
     return([{"tipo":"Extrativistas","valor":data.Extrativistas},{"tipo":"Não Extrativistas","valor":data.declararam - data.Extrativistas}])
 
diff --git a/src/SubPages/QuilombolaIndicator3.js b/src/SubPages/QuilombolaIndicator3.js
index cbd3eb8a..02f88554 100644
--- a/src/SubPages/QuilombolaIndicator3.js
+++ b/src/SubPages/QuilombolaIndicator3.js
@@ -273,7 +273,7 @@ class QuilombolaIndicator3 extends Component {
               workData[2*i] = { 'ano_pesquisa': lowerBound + i, 'genero':`M - ${lowerBound + i}` }
               workData[2 * i + 1] = { 'ano_pesquisa': lowerBound + i, 'genero': `F - ${lowerBound + i}` }
               for (let j = 0; j < chartData[2].length; j++) {
-                if (chartData[2][j]['ano_pesquisa'] == lowerBound+i) {
+                if (chartData[2][j]['ano_pesquisa'] === lowerBound+i) {
                   workData[2*i][chartData[2][j]['idade']] = chartData[2][j]['total']
                   workData[2*i+1][chartData[2][j]['idade']] = chartData[2][j]['total2']
                 }
diff --git a/src/Youth.js b/src/Youth.js
index 72dec5f1..b75bfe3f 100644
--- a/src/Youth.js
+++ b/src/Youth.js
@@ -20,7 +20,7 @@ along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
 
 
 
-import React, { Component } from 'react';
+import React from 'react';
 import NavigationBar from './Components/NavigationBar'
 import YouthPresentation from './SubPages/YouthPresentation'
 import YouthVulnerabilities from './SubPages/YouthVulnerabilities'
@@ -28,7 +28,6 @@ import YouthEducation from './SubPages/YouthEducation'
 import YouthJob from './SubPages/YouthJob'
 import { Tab, Tabs } from 'react-materialize'
 import { Store } from './Store'
-import { sleep, homeURL } from './enviroment'
 
 
 import './Styles/Youth.css'
diff --git a/src/enviroment.js b/src/enviroment.js
index 8b26eb51..c125f365 100644
--- a/src/enviroment.js
+++ b/src/enviroment.js
@@ -149,15 +149,15 @@ export function createIntervals(data, intervalKey, intervalRange, yearKey=undefi
   }
 
   // Find lowerBound and upperBound
-  let tmp = parseInt(workData[0][0][intervalKey]);
+  let tmp = parseInt(workData[0][0][intervalKey], 10);
   for (let i = 0; i < workData.length && !tmp && tmp !== 0; i++) {
-    tmp = parseInt(workData[0][i][intervalKey]);
+    tmp = parseInt(workData[0][i][intervalKey], 10);
   }
   let LowerBound = tmp;
   let UpperBound = tmp;
   for(let i = 0; i < workData.length; i++) {
     for (let j = 0; j < workData[i].length; j++) {
-      let tmp = parseInt(workData[i][j][intervalKey]);
+      let tmp = parseInt(workData[i][j][intervalKey], 10);
       if(tmp || tmp === 0) {
         LowerBound = (tmp < LowerBound ? tmp : LowerBound);
         UpperBound = (tmp > UpperBound ? tmp : UpperBound);
@@ -214,14 +214,14 @@ export function createIntervals(data, intervalKey, intervalRange, yearKey=undefi
     for(let j = 0; j < workData[i].length; j++) {
 
       // Find index on aux for current data
-      let value = parseInt(workData[i][j][intervalKey])
+      let value = parseInt(workData[i][j][intervalKey], 10)
       value = (value > limit ? limit+1 : value)
       let index = value - LowerBound
       index = (index - (index % intervalRange)) / intervalRange
       
       // Update group total (Undefined data is discarted)
       if (aux[index])
-      aux[index]['total'] += parseInt(workData[i][j]['total'])
+      aux[index]['total'] += parseInt(workData[i][j]['total'], 10)
       
     }
     dataPerYear = dataPerYear.concat(aux);
-- 
GitLab


From debfe6929613eb83dcf9222e0dec8b1edc7fa39e Mon Sep 17 00:00:00 2001
From: eht17 <eht17@inf.ufpr.br>
Date: Tue, 12 Mar 2019 11:44:34 -0300
Subject: [PATCH 21/23] Fix contrast on Quilombola tabs

---
 src/SubPages/Styles/QuilombolaIndicator1.css | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/SubPages/Styles/QuilombolaIndicator1.css b/src/SubPages/Styles/QuilombolaIndicator1.css
index a3ff6c9e..8ce67513 100644
--- a/src/SubPages/Styles/QuilombolaIndicator1.css
+++ b/src/SubPages/Styles/QuilombolaIndicator1.css
@@ -42,7 +42,7 @@ along with Portal-SMPPIR-React.  If not, see <https://www.gnu.org/licenses/>.
     color: white;
 }
 
-#ContrastblueCollapsible > .collapsible-header{
+#ContrastredCollapsible > .collapsible-header{
     color: yellow;
     background-color: black;
 }
\ No newline at end of file
-- 
GitLab


From f147130c20cb62535210c617e89bba646378cf7d Mon Sep 17 00:00:00 2001
From: eht17 <eht17@inf.ufpr.br>
Date: Wed, 13 Mar 2019 10:11:45 -0300
Subject: [PATCH 22/23] Add session storage to mantain informations after a
 page reload.

---
 src/App.js   | 26 ++++++++++++++++++++++++--
 src/Store.js |  2 ++
 2 files changed, 26 insertions(+), 2 deletions(-)

diff --git a/src/App.js b/src/App.js
index 0def06e5..6d138ba0 100644
--- a/src/App.js
+++ b/src/App.js
@@ -37,12 +37,34 @@ import BarraBrasil from './Components/BarraBrasil'
 
       
 function App() {
-  const { state } = React.useContext(Store);
+
+  // Hook to set contrast and page context
+  const { state, dispatch } = React.useContext(Store);
+  const setContrastAction = (newContrast) => {
+    return dispatch({
+      type: 'SET_CONTRAST',
+      payload: newContrast
+    })
+  }
+  const setPageAction = (newPage) => {
+    return dispatch({
+      type: 'SET_PAGE',
+      payload: newPage
+    })
+  }
+  
+  // Get session information when the component did mount
+  React.useEffect(() => {
+    const contrast = sessionStorage.getItem('contrast');
+    if (contrast) setContrastAction(contrast);
+    const page = sessionStorage.getItem('page');
+    if (page) setPageAction(page);
+  }, []);
+
   var contrastString = state.contrast
 
   return (
     <React.Fragment>
-      {/* {console.log(state)} */}
       <div id={`${contrastString}mainPage`}>
         <ContrastBar />
         <BarraBrasil />
diff --git a/src/Store.js b/src/Store.js
index 5fccd4a5..864b9659 100644
--- a/src/Store.js
+++ b/src/Store.js
@@ -30,8 +30,10 @@ const initialStore = {
 function reducer(state, action) {
   switch (action.type) {
     case 'SET_PAGE':
+      sessionStorage.setItem('page', action.payload);
       return { ...state, page: action.payload };
     case 'SET_CONTRAST':
+      sessionStorage.setItem('contrast', action.payload);
       return { ...state, contrast: action.payload };
     default:
       return state;
-- 
GitLab


From bc28eeb4070be6d0c96c7f68b502b2431d266f64 Mon Sep 17 00:00:00 2001
From: eht17 <eht17@inf.ufpr.br>
Date: Wed, 13 Mar 2019 11:40:52 -0300
Subject: [PATCH 23/23] Remove comments

---
 src/App.js                    | 1 -
 src/Components/ContrastBar.js | 4 ++--
 2 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/src/App.js b/src/App.js
index 6d138ba0..b55ddc1a 100644
--- a/src/App.js
+++ b/src/App.js
@@ -70,7 +70,6 @@ function App() {
         <BarraBrasil />
         <Router>
           <div>
-            {/* <Route exact={true} path="/" render={(props) => <MainPage {...props} teste="teste"/>}/> */}
             <Route exact={true} path="/" component={MainPage} />
             <Route exact={true} path="/cotas" component={RacialQuotas} />
             <Route exact={true} path="/quilombola" component={Quilombola} />
diff --git a/src/Components/ContrastBar.js b/src/Components/ContrastBar.js
index 39437575..2d879bca 100644
--- a/src/Components/ContrastBar.js
+++ b/src/Components/ContrastBar.js
@@ -29,10 +29,10 @@ function ContrastBar() {
   
   // Hook to set contrast context
   const { state, dispatch } = React.useContext(Store);
-  const setContrastAction = (newPage) => {
+  const setContrastAction = (newContrast) => {
     return dispatch({
       type: 'SET_CONTRAST',
-      payload: newPage
+      payload: newContrast
     })
   }
   React.useEffect(() => { });
-- 
GitLab