Skip to content
Snippets Groups Projects
EditarColecaoForm.js 7.4 KiB
Newer Older
Lucas Eduardo Schoenfelder's avatar
Lucas Eduardo Schoenfelder committed
/*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';
vgm18's avatar
vgm18 committed
import {StyledTextField, useStyles} from './ReportUserForm.js'
import {getRequest, putRequest} from './HelperFunctions/getAxiosConfig'
Lucas Eduardo Schoenfelder's avatar
Lucas Eduardo Schoenfelder committed

export default function EditarColecaoForm (props) {
    const {state} = useContext(Store)

vgm18's avatar
vgm18 committed
    const classes = useStyles();

    function handleSuccessfulGet (data) {
        setColName({key : false, value : data.name})
        setValue( data.privacy === 'public' ? 'pública' : 'privada')
        handleColDescription(data.description)
    }

Lucas Eduardo Schoenfelder's avatar
Lucas Eduardo Schoenfelder committed
    useEffect(() => {
        getRequest(`/collections/${props.id}`, handleSuccessfulGet, (error) => {console.log(error)})
Lucas Eduardo Schoenfelder's avatar
Lucas Eduardo Schoenfelder committed
    }, [])

    const [value, setValue] = useState(-1);
Lucas Eduardo Schoenfelder's avatar
Lucas Eduardo Schoenfelder committed

    /*values are set according to backend complaint id*/
Lucas Eduardo Schoenfelder's avatar
Lucas Eduardo Schoenfelder committed
        {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)'}
Lucas Eduardo Schoenfelder's avatar
Lucas Eduardo Schoenfelder committed

    const handleChange = (event) => {
        setValue(event.target.value);
    };

    const [colName, setColName] = useState({
Lucas Eduardo Schoenfelder's avatar
Lucas Eduardo Schoenfelder committed
        key : false,
        value : "",
    })

    const handleColName = (e) => {
        const userInput = e.target.value

        const flag = userInput.length === 0 ? true : false
Lucas Eduardo Schoenfelder's avatar
Lucas Eduardo Schoenfelder committed

        setColName({...colName,
            key : flag,
            value : userInput
        })
    }

    function handleSuccessfulSubmit (data) {
Lucas Eduardo Schoenfelder's avatar
Lucas Eduardo Schoenfelder committed
    const formSubmit = (e) => {
        e.preventDefault()

        // {/*if user didn't select either one, default to privada*/}
Lucas Eduardo Schoenfelder's avatar
Lucas Eduardo Schoenfelder committed
        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
                }
            }
            putRequest(`/collections/${props.id}/`, payload, handleSuccessfulSubmit, (error) =>{console.log(error)})
    const [colDescription, handleColDescription] = useState("")
Lucas Eduardo Schoenfelder's avatar
Lucas Eduardo Schoenfelder committed
    const setColDescription = (e) => {handleColDescription(e.target.value)}

    return (
        <form onSubmit={(e) => {formSubmit(e)}} style={{textAlign : "left"}}>

            <StyledTextField
vgm18's avatar
vgm18 committed
                contrast={props.contrast}
Lucas Eduardo Schoenfelder's avatar
Lucas Eduardo Schoenfelder committed
                id = {"col-name"}
                label={"Nome"}
                type = {"text"}
                value = {colName.value}
                onChange = {e => handleColName(e)}
                error = {colName.key}
vgm18's avatar
vgm18 committed
                InputProps={props.contrast === "" ? { className: classes.lightTextField } : { className: classes.darkTextField }}
Lucas Eduardo Schoenfelder's avatar
Lucas Eduardo Schoenfelder committed
                required = {true}
                style={{width:"100%"}}
            />

            <StyledTextField
vgm18's avatar
vgm18 committed
                contrast={props.contrast}
Lucas Eduardo Schoenfelder's avatar
Lucas Eduardo Schoenfelder committed
                id = {"col-description"}
                label={"Descrição"}
                type = {"text"}
                value = {colDescription}
                multiline
vgm18's avatar
vgm18 committed
                InputProps={props.contrast === "" ? { className: classes.lightTextField } : { className: classes.darkTextField }}
Lucas Eduardo Schoenfelder's avatar
Lucas Eduardo Schoenfelder committed
                rows={5}
                onChange = {e => setColDescription(e)}
                style={{width:"100%"}}
            />

vgm18's avatar
vgm18 committed
            <span style={{fontSize : "12px"}}>Esta coleção é:</span>
            <StyledFormControl contrast={props.contrast} component="fieldset">
Lucas Eduardo Schoenfelder's avatar
Lucas Eduardo Schoenfelder committed
                <RadioGroup value={value} onChange={handleChange}>
                    {
                        options.map(option =>
vgm18's avatar
vgm18 committed
                            <FormControlLabel key={option.value} value={option.value} control={<Radio/>} label={option.text} />
Lucas Eduardo Schoenfelder's avatar
Lucas Eduardo Schoenfelder committed
                        )
                    }
                </RadioGroup>
            </StyledFormControl>


            <ButtonsDiv>
vgm18's avatar
vgm18 committed
                <ButtonCancelar contrast={props.contrast} onClick={props.handleClose}>CANCELAR</ButtonCancelar>
                <ButtonEnviar contrast={props.contrast} type="submit">SALVAR</ButtonEnviar>
Lucas Eduardo Schoenfelder's avatar
Lucas Eduardo Schoenfelder committed
            </ButtonsDiv>
        </form>
    );
}

export const ButtonsDiv = styled.div`
    display : flex;
    flex-direction : row;
    justify-content : center;
    align-items : center;
`

export const ButtonCancelar = styled(Button)`
vgm18's avatar
vgm18 committed
    color: ${props => props.contrast === "" ? "#666 !important" : "yellow !important"};
    text-decoration: ${props => props.contrast === "" ? "none !important" : "yellow underline !important"};
Lucas Eduardo Schoenfelder's avatar
Lucas Eduardo Schoenfelder committed
    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)`
vgm18's avatar
vgm18 committed
    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"};
Lucas Eduardo Schoenfelder's avatar
Lucas Eduardo Schoenfelder committed
    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 {
vgm18's avatar
vgm18 committed
        color: ${props => props.contrast === "" ? "#666" : "yellow"};
        text-decoration: ${props => props.contrast === "" ? "none" : "underline"};
Lucas Eduardo Schoenfelder's avatar
Lucas Eduardo Schoenfelder committed
    }
    .MuiIconButton-label {
vgm18's avatar
vgm18 committed
        color: ${props => props.contrast === "" ? "#666" : "white"};
Lucas Eduardo Schoenfelder's avatar
Lucas Eduardo Schoenfelder committed
    }
vgm18's avatar
vgm18 committed
    display : block !important;

Lucas Eduardo Schoenfelder's avatar
Lucas Eduardo Schoenfelder committed
    .PrivateRadioButtonIcon-checked {
        color : orange;
    }

    .MuiTypography-body1 {
        font-size : 14px;
    }
`