Newer
Older
/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre
Departamento de Informatica - Universidade Federal do Parana
This file is part of Plataforma Integrada MEC.
Plataforma Integrada MEC is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Plataforma Integrada MEC 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 Affero General Public License for more details.
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/>.*/
import React, {useState, useContext, useEffect} from 'react'
import {Store} from '../Store.js'
import { Button } from '@material-ui/core';
import styled from 'styled-components'
import Radio from '@material-ui/core/Radio';
import RadioGroup from '@material-ui/core/RadioGroup';
import FormControlLabel from '@material-ui/core/FormControlLabel';
import FormControl from '@material-ui/core/FormControl';
import {StyledTextField, useStyles} from './ReportUserForm.js'

Lucas Eduardo Schoenfelder
committed
import {getRequest, putRequest} from './HelperFunctions/getAxiosConfig'
export default function EditarColecaoForm (props) {
const {state} = useContext(Store)
function handleSuccessfulGet (data) {
setColName({key : false, value : data.name})
setValue( data.privacy === 'public' ? 'pública' : 'privada')
handleColDescription(data.description)
}

Lucas Eduardo Schoenfelder
committed
getRequest(`/collections/${props.id}`, handleSuccessfulGet, (error) => {console.log(error)})
const [value, setValue] = useState(-1);
/*values are set according to backend complaint id*/

Lucas Eduardo Schoenfelder
committed
const options = [
{value : "pública", text :'Pública (Sua coleção estará disponível para todos)'},
{value : "privada", text : 'Privada (Somente você poderá visualizar esta coleção)'}
const handleChange = (event) => {
setValue(event.target.value);
};
const [colName, setColName] = useState({
key : false,
value : "",
})
const handleColName = (e) => {
const userInput = e.target.value
const flag = userInput.length === 0 ? true : false
setColName({...colName,
key : flag,
value : userInput
})
}
function handleSuccessfulSubmit (data) {

Lucas Eduardo Schoenfelder
committed
props.finalize(data.name, data.privacy)
const formSubmit = (e) => {
e.preventDefault()
// {/*if user didn't select either one, default to privada*/}
const finalRadioValue = value === 'pública' ? 'public' : 'private'
const finalColName = colName
if(!(finalColName.key)) {
let payload = {
"collection" : {
"name" : finalColName.value,
"owner_id" : state.currentUser.id,
"owner_type" : "User",
"privacy" : finalRadioValue
}
}

Lucas Eduardo Schoenfelder
committed
putRequest(`/collections/${props.id}/`, payload, handleSuccessfulSubmit, (error) =>{console.log(error)})
const [colDescription, handleColDescription] = useState("")
const setColDescription = (e) => {handleColDescription(e.target.value)}
return (
<form onSubmit={(e) => {formSubmit(e)}} style={{textAlign : "left"}}>
<StyledTextField
id = {"col-name"}
label={"Nome"}
type = {"text"}
value = {colName.value}
onChange = {e => handleColName(e)}
error = {colName.key}
InputProps={props.contrast === "" ? { className: classes.lightTextField } : { className: classes.darkTextField }}
required = {true}
style={{width:"100%"}}
/>
<StyledTextField
id = {"col-description"}
label={"Descrição"}
type = {"text"}
value = {colDescription}
multiline
InputProps={props.contrast === "" ? { className: classes.lightTextField } : { className: classes.darkTextField }}
rows={5}
onChange = {e => setColDescription(e)}
style={{width:"100%"}}
/>
<span style={{fontSize : "12px"}}>Esta coleção é:</span>
<StyledFormControl contrast={props.contrast} component="fieldset">
<RadioGroup value={value} onChange={handleChange}>
{
options.map(option =>
<FormControlLabel key={option.value} value={option.value} control={<Radio/>} label={option.text} />
)
}
</RadioGroup>
</StyledFormControl>
<ButtonsDiv>
<ButtonCancelar contrast={props.contrast} onClick={props.handleClose}>CANCELAR</ButtonCancelar>
<ButtonEnviar contrast={props.contrast} type="submit">SALVAR</ButtonEnviar>
</ButtonsDiv>
</form>
);
}
export const ButtonsDiv = styled.div`
display : flex;
flex-direction : row;
justify-content : center;
align-items : center;
`
export const ButtonCancelar = styled(Button)`
color: ${props => props.contrast === "" ? "#666 !important" : "yellow !important"};
text-decoration: ${props => props.contrast === "" ? "none !important" : "yellow underline !important"};
height : 36px !important;
padding-left : 16px !important;
padding-right : 16px !important;
font-weight : 500 !important;
border-radius : 3px !important;
background-color: transparent;
min-width : 88px !important;
height : 36px !important;
`
export const ButtonEnviar = styled(Button)`
color: ${props => props.contrast === "" ? "white !important" : "yellow !important"};
background-color: ${props => props.contrast === "" ? "#673ab7 !important" : "black !important"};
text-decoration: ${props => props.contrast === "" ? "none !important" : "yellow underline !important"};
border: ${props => props.contrast === "" ? "none !important" : "1px solid white !important"};
font-size: 14px !important;
font-weight: 500 !important;
height: 36px !important;
border-radius: 3px !important;
padding-left: 16px !important;
padding-right: 16px !important;
box-shadow: 0 2px 5px 0 rgba(0,0,0,.26) !important;
outline : none !important;
min-width : 88px !important;
vertical-align : middle !important;
margin : 6px 8px !important;
.MuiButton-label {
padding-right : 16px;
padding-left : 16px;
}
`
export const StyledFormControl = styled(FormControl)`
.MuiFormControlLabel-root {
color: ${props => props.contrast === "" ? "#666" : "yellow"};
text-decoration: ${props => props.contrast === "" ? "none" : "underline"};
color: ${props => props.contrast === "" ? "#666" : "white"};