From 61c463863eb8325a61b1e028b721ec9aee193912 Mon Sep 17 00:00:00 2001
From: Lucas Schoenfelder <les17@inf.ufpr.br>
Date: Tue, 26 May 2020 12:04:29 -0300
Subject: [PATCH] done

---
 src/Components/CriarColecaoForm.js  | 216 ++++++++++++++++++++++++++++
 src/Components/CriarColecaoModal.js | 133 +++++++++++++++++
 2 files changed, 349 insertions(+)
 create mode 100644 src/Components/CriarColecaoForm.js
 create mode 100644 src/Components/CriarColecaoModal.js

diff --git a/src/Components/CriarColecaoForm.js b/src/Components/CriarColecaoForm.js
new file mode 100644
index 00000000..83560d91
--- /dev/null
+++ b/src/Components/CriarColecaoForm.js
@@ -0,0 +1,216 @@
+/*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} 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 TextField from '@material-ui/core/TextField';
+import axios from 'axios'
+import {apiUrl} from '../env';
+
+export default function CriarColecaoForm (props) {
+    const {state} = useContext(Store)
+
+    const [value, setValue] = React.useState(-1);
+
+    /*values are set according to backend complaint id*/
+    const [options] = React.useState([
+        {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] = React.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
+        })
+    }
+
+    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
+
+        console.log(finalRadioValue, finalColName.value)
+        if(!(finalColName.key)) {
+            let payload = {
+                "collection" : {
+                    "name" : finalColName.value,
+                    "owner_id" : state.currentUser.id,
+                    "owner_type" : "User",
+                    "privacy" : finalRadioValue
+                }
+            }
+            let config = {
+                headers : {
+                    'Accept': 'application/json',
+                    'Content-Type': 'application/json',
+                    'Access-Token': sessionStorage.getItem('@portalmec/accessToken'),
+                    'Client': sessionStorage.getItem('@portalmec/clientToken'),
+                    'Uid': sessionStorage.getItem('@portalmec/uid')
+                }
+            }
+
+            axios.post( (`${apiUrl}/collections/`), payload, config
+            ).then(
+                (response) => {
+                    console.log(response)
+                    if ( response.headers['access-token'] ) {
+                        sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token'])
+                    }
+                    props.finalize(response.data.id)
+                }, (error) =>{console.log(error)})
+        }
+    }
+
+    return (
+        <form onSubmit={(e) => {formSubmit(e)}} style={{textAlign : "left"}}>
+
+            <StyledTextField
+                id = {"col-name"}
+                label={"Nome da coleção"}
+                type = {"text"}
+                value = {colName.value}
+                onChange = {e => handleColName(e)}
+                error = {colName.key}
+
+                helperText = {colName.key ? <span>O nome é importante para identificar a sua coleção na plataforma.<br/>Ex: Matemática Ensino Médio </span> : ""}
+                required = {true}
+                style={{width:"100%"}}
+            />
+
+            <span style={{fontSize : "12px", color : "#b3b3b3"}}>Esta coleção é:</span>
+
+            <StyledFormControl component="fieldset">
+                <RadioGroup value={value} onChange={handleChange}>
+                    {
+                        options.map(option =>
+                            <FormControlLabel key={option.value} value={option.value} control={<Radio color="#673ab7"/>} label={option.text} />
+                        )
+                    }
+                </RadioGroup>
+            </StyledFormControl>
+
+            <ButtonsDiv>
+                <ButtonCancelar onClick={props.handleClose}>CANCELAR</ButtonCancelar>
+                <ButtonEnviar type="submit">CRIAR COLEÇÃO</ButtonEnviar>
+            </ButtonsDiv>
+        </form>
+    );
+}
+
+export const ButtonsDiv = styled.div`
+    display : flex;
+    flex-direction : row;
+    justify-content : center;
+    align-items : center;
+`
+
+export const ButtonCancelar = styled(Button)`
+    &:hover {
+        background-color : rgba(158,158,158,0.2) !important;
+    }
+    height : 36px !important;
+    padding-left : 16px !important;
+    padding-right : 16px !important;
+    font-weight : 500 !important;
+    border-radius : 3px !important;
+    color :#666 !important;
+    background-color: transparent;
+    min-width : 88px !important;
+    height : 36px !important;
+`
+
+export const ButtonEnviar = styled(Button)`
+    background-color : #673ab7 !important;
+    color : #fff !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;
+    text-decoration : none !important;
+
+    .MuiButton-label {
+        padding-right : 16px;
+        padding-left : 16px;
+    }
+`
+export const StyledTextField = styled(TextField)`
+    margin : 18px 0 !important;
+
+    .MuiFormHelperText-root {
+        text-align : right;
+    }
+
+    label.Mui-focused {
+        color : #673ab7;
+    }
+
+    label.Mui-focused.Mui-error {
+        color : red;
+    }
+
+    .MuiInput-underline::after {
+        border-bottom: 2px solid #673ab7;
+    }
+`
+
+export const StyledFormControl = styled(FormControl)`
+    display : block !important;
+
+    .MuiFormControlLabel-root {
+        color : #666;
+    }
+    .MuiIconButton-label {
+        color : #666;
+    }
+    .PrivateRadioButtonIcon-checked {
+        color : orange;
+    }
+
+    .MuiTypography-body1 {
+        font-size : 14px;
+    }
+`
diff --git a/src/Components/CriarColecaoModal.js b/src/Components/CriarColecaoModal.js
new file mode 100644
index 00000000..70b724c0
--- /dev/null
+++ b/src/Components/CriarColecaoModal.js
@@ -0,0 +1,133 @@
+/*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} from 'react'
+import { Button } from '@material-ui/core';
+import Modal from '@material-ui/core/Modal';
+import Backdrop from '@material-ui/core/Backdrop';
+import Fade from '@material-ui/core/Fade';
+import styled from 'styled-components'
+import CriarColecaoForm from './CriarColecaoForm.js'
+import CloseIcon from '@material-ui/icons/Close';
+
+function CloseModalButton (props) {
+    return (
+        <StyledCloseModalButton onClick={props.handleClose}>
+            <CloseIcon/>
+        </StyledCloseModalButton>
+    )
+}
+
+export default function CriarColecaoModal (props) {
+
+    return (
+        <StyledModal
+            aria-labelledby="transition-modal-title"
+            aria-describedby="transition-modal-description"
+            open={props.open}
+            animation={true}
+            centered={true}
+            onClose={props.handleClose}
+            closeAfterTransition
+            BackdropComponent={Backdrop}
+            BackdropProps={{
+                timeout: 500,
+            }}
+        >
+            <Fade in={props.open}>
+                <Container>
+                    <Header>
+                        <span style={{width:"32px"}}/>
+                        <h2>Criar Coleção</h2>
+                        <CloseModalButton handleClose={props.handleClose}/>
+                    </Header>
+                    <Content style={{paddingTop : "0"}}>
+                        <CriarColecaoForm handleClose={props.handleClose} finalize={props.handleClose}/>
+                    </Content>
+                </Container>
+            </Fade>
+        </StyledModal>
+    )
+}
+
+const Content = styled.div`
+    padding : 20px 30px;
+    overflow-y: visible;
+
+`
+
+const Header = styled.div`
+    display : flex;
+    flex-direction : row;
+    padding : 10px 26px 0 26px;
+    align-items : center;
+    justify-content : space-between;
+    height : 64px;
+
+    h2 {
+        font-size : 26px;
+        font-weight : lighter;
+        color : #666
+    }
+`
+
+const StyledCloseModalButton = styled(Button)`
+    display : inline-block;
+    position : relative;
+    float : right !important;
+    margin-right : -8px !important;
+    background : transparent !important;
+    min-width: 0 !important;
+    width : 40px;
+`
+
+const StyledModal = styled(Modal)`
+    .djXaxP{
+        margin : 0 !important;
+    }
+    display : flex;
+    align-items: center;
+    justify-content : center;
+    text-align : center;
+    padding : 10px !important;
+    max-width : none;
+    max-height : none;
+`
+
+const Container = styled.div`
+    box-sizing : border-box;
+    box-shadow : 0 7px 8px -4px rgba(0,0,0,.2),0 13px 19px 2px rgba(0,0,0,.14),0 5px 24px 4px rgba(0,0,0,.12);
+    background-color : white;
+    align : center;
+    display : flex;
+    flex-direction : column;
+    min-width : 240px;
+    max-height : none;
+    position : relative;
+    padding : 10px;
+    border-radius : 4px;
+
+    @media screen and (min-width : 96px) {
+        width : 500px;
+    }
+
+    @media screen and (max-width : 699px) {
+        width : 100%;
+        height : 100%;
+    }
+`
-- 
GitLab