From 28ec63ad1ab472bf3acd70c7723216a495475bbe Mon Sep 17 00:00:00 2001 From: Lucas Schoenfelder <les17@inf.ufpr.br> Date: Thu, 13 Feb 2020 20:48:48 -0300 Subject: [PATCH] primeira parte de requisicao para ser professor pronta --- src/Components/FormInput.js | 2 +- src/Components/LoginModal.js | 4 +- .../PageProfessorComponents/PartOne.js | 163 +++++++++++++++--- .../PageProfessorComponents/PartTwo.js | 1 + .../TabPanels/TabPanelEditarPerfil.js | 44 +++-- src/Pages/PageProfessor.js | 41 ++++- src/Pages/UserPage.js | 4 +- src/env.js | 2 +- 8 files changed, 195 insertions(+), 66 deletions(-) diff --git a/src/Components/FormInput.js b/src/Components/FormInput.js index f9075068..47aeb1fa 100644 --- a/src/Components/FormInput.js +++ b/src/Components/FormInput.js @@ -66,7 +66,7 @@ export default function FormInput(props) { style={{width:"100%"}} mask={props.mask} multiline={props.multi} - rows={props.row} + rows={props.rows} rowsMax={props.rowMax} /> ); diff --git a/src/Components/LoginModal.js b/src/Components/LoginModal.js index 9c41e3e1..df1be6a4 100644 --- a/src/Components/LoginModal.js +++ b/src/Components/LoginModal.js @@ -80,8 +80,8 @@ export default function LoginModal (props){ ) props.handleClose(); props.openSnackbar(); - localStorage.setItem('@portalmec/accessToken', response.headers['access-token']) - localStorage.setItem('@portalmec/clientToken', response.headers.client,) + sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token']) + sessionStorage.setItem('@portalmec/clientToken', response.headers.client,) sessionStorage.setItem('@portalmec/id', response.data.data.id) sessionStorage.setItem('@portalmec/username', response.data.data.name) sessionStorage.setItem('@portalmec/uid', response.data.data.uid) diff --git a/src/Components/PageProfessorComponents/PartOne.js b/src/Components/PageProfessorComponents/PartOne.js index a82555a5..5c4b92f6 100644 --- a/src/Components/PageProfessorComponents/PartOne.js +++ b/src/Components/PageProfessorComponents/PartOne.js @@ -1,4 +1,4 @@ -import React, {useState} from 'react' +import React, {useState, useEffect} from 'react' import styled from 'styled-components' import Stepper from '../Stepper.js' import FormControl from '@material-ui/core/FormControl'; @@ -9,32 +9,128 @@ import {Button} from '@material-ui/core' import {RightSideStrikedH3, LeftSideStrikedH3} from '../LoginContainerFunction.js' import Divider from '@material-ui/core/Divider'; import {ButtonCancelar} from './PartTwo.js' +import axios from 'axios' +import FormInput from '../FormInput.js' + +function sortDict (dict) { + const newDict = dict.sort((a, b) => (a.name) > (b.name) ? 1 : -1) + return newDict + +} export default function PartOne (props) { - const [uf, setUF] = useState('') - const handleChangeUF = (event) => {setUF(event.target.value)} + //stores initial get response (list of states, sorted alphabetically) + const [ufList, setStates] = useState([]) + const handleSetStates = (states) => {setStates(states)} + + //stores list of cities sorted alphabetically + const [municipioList, setMunicipioList] = useState([]) + const handleSetMunicipioList = (municipios) => setMunicipioList(municipios) + + //stores a single user selected state + const [uf, setUF] = useState( + { + algumFoiEscolhido : false, + value : '' + } + ) - const [municipio, setMunicipio] = useState('') - const handleChangeMunicipio = (event) => {setMunicipio(event.target.value)} + //stores a single user selected city + const [municipio, setMunicipio] = useState( + { + algumFoiEscolhido : false, + value : '' + } + ) + + const [codigoINEP, setCodigoINEP] = useState( + { + codigoInvalido : false, + value : '' + } + ) + const handleCodigoINEP = (event) => { + const code = event.target.value + + setCodigoINEP({...codigoINEP, + codigoInvalido : false, + value : code + }) + } + + const validateINEP = () => { + const code = codigoINEP.value + + axios.get(('https://www.simcaq.c3sl.ufpr.br/api/v1/portal_mec_inep?filter=school_cod:' + code) + ).then( (response) => { + handleSubmit() + }, (error) => { + setCodigoINEP({...codigoINEP, + codigoInvalido : true, + value : '' + }) + } + ) + } + + const handleSubmit = () => { + props.handleBuscar(uf.value, municipio.value, codigoINEP.value) + } + + //on render component, call simcaq api and update ufList + useEffect ( () => { + axios.get(('https://simcaq.c3sl.ufpr.br/api/v1/state') + ).then( (response) => { + handleSetStates(sortDict(response.data.result)) + }, + (error) => console.log('erro acessando api do simcaq (estados)')) + }, []) + + const handleChooseUF = (event) => { + const ufID = event.target.value + setUF({...uf, + algumFoiEscolhido : true, + value : ufID + } + ) + + axios.get(('https://simcaq.c3sl.ufpr.br/api/v1/city?filter=state:' + ufID) + ).then( (response) => { + handleSetMunicipioList(sortDict(response.data.result)) + }, (error) => console.log('erro acessando api do simcaq (cidades)') + ) + } + + const handleChooseCity = (event) => { + const cityID = event.target.value + setMunicipio({...municipio, + algumFoiEscolhido : true, + value : cityID + } + ) + } return ( <> + {/*/////////////////////////////PRIMEIRA PARTE/////////////////////////////*/} <Content> <h4>Vamos localizar o seu cadastro:</h4> <Stepper items={props.stepper}/> <form style={{textAlign:"start"}}> - <p>Localize pelo menos uma escola que você tenha atuado até maio de 2017:</p> + <p>Localize pelo menos uma escola em que você tenha atuado até maio de 2017:</p> <FormControl required style={{width:"100%"}}> <InputLabel>Procure sua UF</InputLabel> <Select labelId="demo-simple-select-label" id="demo-simple-select" - value={uf} - onChange={handleChangeUF} + value={uf.value} + onChange={handleChooseUF} > - <MenuItem value={10}>Ten</MenuItem> - <MenuItem value={20}>Twenty</MenuItem> - <MenuItem value={30}>Thirty</MenuItem> + { + ufList.map( (ufs)=> + <MenuItem value={ufs.id}>{ufs.name}</MenuItem> + ) + } </Select> </FormControl> <FormControl required style={{width:"100%"}}> @@ -42,40 +138,51 @@ export default function PartOne (props) { <Select labelId="demo-simple-select-label" id="demo-simple-select" - value={municipio} - onChange={handleChangeMunicipio} + value={municipio.value} + onChange={handleChooseCity} > - <MenuItem value={10}>Ten</MenuItem> - <MenuItem value={20}>Twenty</MenuItem> - <MenuItem value={30}>Thirty</MenuItem> + { + municipioList.map( (cidades)=> + <MenuItem value={cidades.id}>{cidades.name}</MenuItem> + ) + } </Select> </FormControl> <div style={{display:"flex", justifyContent:"center",paddingTop:"10px", paddingBottom:"10px"}}> - <ButtonConfirmar onClick={props.handleBuscar}>BUSCAR</ButtonConfirmar> + <ButtonConfirmar + onClick={ ( (uf.algumFoiEscolhido && municipio.algumFoiEscolhido) ? handleSubmit : '')} + > + BUSCAR</ButtonConfirmar> </div> </form> </Content> + <div style={{display:"flex", justifyContent:"center", alignItems:"center"}}> <LeftSideStrikedH3/><StrikeSpan>ou</StrikeSpan><RightSideStrikedH3/> </div> + + {/*/////////////////////////////SEGUNDA PARTE/////////////////////////////*/} <Content> <form> <p>Localize pelo código INEP da escola:</p> <FormControl required style={{width:"100%"}}> - <InputLabel>Código INEP</InputLabel> - <Select - labelId="demo-simple-select-label" - id="demo-simple-select" - value={municipio} - onChange={handleChangeMunicipio} + <FormInput + inputType={'text'} + name={'Código INEP'} + value={codigoINEP.value} + handleChange = {handleCodigoINEP} + placeholder={'Código INEP'} + required={true} + error={codigoINEP.codigoInvalido} + help={codigoINEP.codigoInvalido ? <span style={{color:'red'}}>código INEP inválido</span> : ''} > - <MenuItem value={10}>Ten</MenuItem> - <MenuItem value={20}>Twenty</MenuItem> - <MenuItem value={30}>Thirty</MenuItem> - </Select> + </FormInput> </FormControl> <div style={{display:"flex", justifyContent:"center",paddingTop:"10px", paddingBottom:"10px"}}> - <ButtonConfirmar onClick={props.handleBuscar}>BUSCAR</ButtonConfirmar> + <ButtonConfirmar + onClick={validateINEP} + > + BUSCAR</ButtonConfirmar> </div> </form> </Content> diff --git a/src/Components/PageProfessorComponents/PartTwo.js b/src/Components/PageProfessorComponents/PartTwo.js index d4af14b2..e8bce948 100644 --- a/src/Components/PageProfessorComponents/PartTwo.js +++ b/src/Components/PageProfessorComponents/PartTwo.js @@ -9,6 +9,7 @@ import {Button} from '@material-ui/core' export default function PartTwo (props) { return ( <> + {console.log(props.info)} <Content> <h4>Vamos localizar o seu cadastro:</h4> <Stepper items={props.stepper}/> diff --git a/src/Components/TabPanels/TabPanelEditarPerfil.js b/src/Components/TabPanels/TabPanelEditarPerfil.js index 6274fcba..fc445817 100644 --- a/src/Components/TabPanels/TabPanelEditarPerfil.js +++ b/src/Components/TabPanels/TabPanelEditarPerfil.js @@ -16,17 +16,13 @@ export default function TabPanelEditarPerfil (props) { const [hoverAlterarFoto, handleAlterarFoto] = React.useState(false) const [formNome, setNome] = useState({ - dict : { - key : false, - value : "" - } + key : false, + value : "" }) const [formAboutMe, setAboutMe] = useState({ - dict : { - key : false, - value : "", - } + key : false, + value : "", }) const handleHoverAlterarFoto = () => { @@ -43,38 +39,38 @@ export default function TabPanelEditarPerfil (props) { const flag = ValidateUserInput(type, userInput) if(type === 'username') { - setNome({...formNome, dict : { + setNome({...formNome, key : flag, value : userInput - }}) + }) console.log(formNome) } else if (type === 'aboutMe') { - setAboutMe({...formAboutMe, dict : { + setAboutMe({...formAboutMe, key : flag, value : userInput, - }}) + }) console.log(formAboutMe) } } const limpaCamposForm = () => { - setNome({...formNome, dict: { + setNome({...formNome, key : false, value : '' - }}) + }) - setAboutMe({...formAboutMe, dict: { + setAboutMe({...formAboutMe, key : false, value : '' - }}) + }) } const handleSubmit = (e) => { e.preventDefault() - const info = {nome : formNome.dict.value, aboutMe : formAboutMe.dict.value} - const flagNome = formNome.dict.key - const flagAboutMe = formAboutMe.dict.key + const info = {nome : formNome.value, aboutMe : formAboutMe.value} + const flagNome = formNome.key + const flagAboutMe = formAboutMe.key if (!(flagNome || flagAboutMe)) { console.log(info) @@ -118,24 +114,24 @@ export default function TabPanelEditarPerfil (props) { <FormInput inputType={"text"} name={"Nome Completo"} - value={formNome.dict.value} + value={formNome.value} placeholder={"Nome Completo"} handleChange={e => handleChange(e, 'username')} required={true} - error={formNome.dict.key} + error={formNome.key} /> <FormInput inputType={"text"} name={"Sobre Mim"} - value={formAboutMe.dict.value} + value={formAboutMe.value} multi = {true} rows="3" rowsMax = "3" - error={formAboutMe.dict.key} + error={formAboutMe.key} placeholder={"Sobre Mim"} handleChange={e => handleChange(e, 'aboutMe')} required={false} - help = {formAboutMe.dict.value.length + '/160'} + help = {formAboutMe.value.length + '/160'} /> </form> </div> diff --git a/src/Pages/PageProfessor.js b/src/Pages/PageProfessor.js index 1f0eb796..b89eacc8 100644 --- a/src/Pages/PageProfessor.js +++ b/src/Pages/PageProfessor.js @@ -13,24 +13,45 @@ export default function PageProfessor (props) { props.history.push('/termos-publicar-recurso') } + const [registerInformation, setRegisterInformation] = useState( + { + teacher_cpf: '', + school_phone: '', + school_name: '', + school_City: '', // perguntar se aqui é o id ou o nome + school_uf : '', //perguntar se aqui é o id ou o nome + inep_code: '' + } + ) + const [stepper, handleStepper] = useState( [ {value : '1', selected : true}, {value : '2', selected : false}, {value : '3', selected : false} ] ) - - const handleBuscar = () => { + const toggleStepper = (selected1, selected2, selected3) => { handleStepper( - [ {value : '1', selected : false}, {value : '2', selected : true}, {value : '3', selected : false} ] + [ + {value : '1', selected : selected1}, + {value : '2', selected : selected2}, + {value : '3', selected : selected3} + ] ) } + const handleBuscar = (uf, municipio, inep) => { + setRegisterInformation({...registerInformation, + school_uf : uf, + school_City : municipio, + inep_code : inep + }) + toggleStepper(false, true, false) + } + const handleCancelar = () => { props.history.push('/perfil/atualizacoes') } const onClickTable = () => { - handleStepper( - [ {value : '1', selected : false}, {value : '2', selected : false}, {value : '3', selected : true} ] - ) + toggleStepper(false, false, true) } return ( @@ -43,8 +64,12 @@ export default function PageProfessor (props) { <div style={{display: "flex", justifyContent:"center", paddingTop:"5vh", paddingBottom:"5vh"}}> <Paper elevation={3} style= {{width:"max-content"}}> <div style={{paddingRight:"15px", paddingLeft:"15px"}}> - {stepper[0].selected && <PartOne stepper={stepper} handleBuscar={handleBuscar} handleCancelar={handleCancelar}/>} - {stepper[1].selected && <PartTwo stepper={stepper} onClickTable={onClickTable}/>} + {stepper[0].selected && + <PartOne stepper={stepper} handleBuscar={handleBuscar} + handleCancelar={handleCancelar} + /> + } + {stepper[1].selected && <PartTwo stepper={stepper} onClickTable={onClickTable} info={registerInformation}/>} {stepper[2].selected && <PartThree stepper={stepper}/>} </div> </Paper> diff --git a/src/Pages/UserPage.js b/src/Pages/UserPage.js index 76b15fe3..f6650c98 100644 --- a/src/Pages/UserPage.js +++ b/src/Pages/UserPage.js @@ -58,8 +58,8 @@ export default function UserPage (props){ headers : { 'Accept': 'application/json', 'Content-Type': 'application/json', - 'Access-Token': localStorage.getItem('@portalmec/accessToken'), - 'Client': localStorage.getItem('@portalmec/clientToken'), + 'Access-Token': sessionStorage.getItem('@portalmec/accessToken'), + 'Client': sessionStorage.getItem('@portalmec/clientToken'), 'Uid': sessionStorage.getItem('@portalmec/uid'), 'Host': 'api.portalmec.c3sl.ufpr.br', 'Cookie': '' diff --git a/src/env.js b/src/env.js index f3072030..3ba1693d 100644 --- a/src/env.js +++ b/src/env.js @@ -17,7 +17,7 @@ You should have received a copy of the GNU Affero General Public License along with Plataforma Integrada MEC. If not, see <http://www.gnu.org/licenses/>.*/ -var apiDomain = 'https://api.portalmec.c3sl.ufpr.br', +var apiDomain = 'https://api.portalmec.c3sl.ufpr.br/', apiVersion = 'v1', apiUrl = apiDomain + '/' + apiVersion; -- GitLab