Skip to content
Snippets Groups Projects
PartThree.js 17.3 KiB
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, useEffect, useContext} from 'react'
import {Store} from '../../Store.js'
import Grid from '@material-ui/core/Grid';
import styled from 'styled-components'
import {apiDomain} from '../../env';
import Stepper from './Stepper.js'
import Rating from '@material-ui/lab/Rating';
import StarBorderIcon from '@material-ui/icons/StarBorder';
import LoadingSpinner from '../LoadingSpinner.js'
import MoreIcon from '@material-ui/icons/More';
import SdCardIcon from '@material-ui/icons/SdCard';
import DateRangeIcon from '@material-ui/icons/DateRange';
import UpdateIcon from '@material-ui/icons/Update';
import TranslateIcon from '@material-ui/icons/Translate';
import AssignmentIcon from '@material-ui/icons/Assignment';
import { GrayButton, OrangeButton} from './StyledComponents';
import ModalCancelar from './ModalCancelar.js'
import {getDefaultThumbnail} from '../HelperFunctions/getDefaultThumbnail'
import {getRequest} from '../HelperFunctions/getAxiosConfig.js'

export default function PartThree (props) {
    var moment = require('moment')
    const {state} = useContext(Store)
    const [loading, setLoading] = useState(true)

    const [draft, setDraft] = useState({})
    const [subjects, setSubjects] = useState('')
    const [tags, setTags] = useState([])
    const [description, setDescription] = useState('')
    const [author, setAuthor] = useState('')

    function handleSuccess (data) {
        setDraft(data)
        /*extract subjects*/
        setSubjects(data.subjects.map((subject)=>(subject.name)).join(', '))
        setTags(data.tags.map(tag => tag.name))
        setDescription(data.description)
        setAuthor(data.author)
        setLoading(false)
    }

    useEffect(() => {
        if (state.currentUser.id !== "") {
            const url = `/learning_objects/${props.draftID}`

            getRequest(url, handleSuccess, (error) => {console.log(error)})

        }
    }, [state.currentUser.id])

    let windowWidth = window.innerWidth
    const [modalCancelar, toggleModalCancelar] = useState(false)

    const checkAccessLevel = (levelToCheck) => {
        if (state.currentUser.id !== '') {
            return(checkUserRole(levelToCheck))
        }
    }

    const checkUserRole = (userRole) => {
        return(state.currentUser.roles.filter((role) => role.name === userRole).length > 0)
    }
        <React.Fragment>
        {
            !loading ?
            (
                <React.Fragment>
                <ModalCancelar
                     open={modalCancelar}
                     handleClose={() => {toggleModalCancelar(false)}}
                     draftID={draft.id}
                     />
                <Grid container style={{backgroundColor : "#f4f4f4"}}>
                    <Grid item xs={12}>
                        <StyledSessao1 className="page-content-preview">
                            <div className="cabecalho">
                                <div className="feedback-upload">
                                    <Stepper activeStep={props.activeStep}/>
                                    <h2>Quase , agora  falta publicar!</h2>
                                    <span className="subtitle">Veja abaixo como o seu Recurso vai aparecer na Plataforma:</span>
                                </div>
                            </div>
                        </StyledSessao1>

                        <CaixaContainer>
                            <div>
                                <div className="cabecalho-objeto">
                                    <img alt="" className="img-objeto"
                                        src={draft.thumbnail === null ? getDefaultThumbnail(draft.object_type) : apiDomain + draft.thumbnail}/>
                                    <div className="texto-objeto">
                                        <h3>{draft.name}</h3>
                                        <div className="rating-objeto">
                                            <Rating
                                              name="customized-empty"
                                              value={draft.score}
                                              precision={0.5}
                                              style={{color:"#666"}}
                                              emptyIcon={<StarBorderIcon fontSize="inherit" />}
                                            />
                                        </div>

                                        <div className="relacionado">
                                            Relacionado com: {subjects}
                                        </div>

                                        <div className="tags-objeto">
                                            {tags.map((tag) => <div className="tag" key={tag}>{tag}</div>)}
                                        </div>
                                    </div>
                                </div>

                                <div className="sobre-objeto">
                                    <Grid container>
                                        <Grid item xs={windowWidth > 990 ? 7 : 12} className="left">
                                            <div className="titulo">
                                                Sobre o Recurso
                                            </div>
                                            <div className="sobre-conteudo">
                                                <p className="descricao">{description}</p>
                                                {
                                                    author !== '' &&
                                                    <p className="autor">
                                                        <b>Autoria:</b>
                                                        <br/>
                                                        {author}
                                                    </p>
                                                }
                                            </div>
                                        </Grid>

                                        <Grid item xs={windowWidth > 990 ? 4 : 12} className="right">
                                            <span className="meta-objeto">
                                                <MoreIcon/> <b>Tipo de mídia: </b>{draft.object_type}
                                            </span>

                                            <span className="meta-objeto">
                                                <SdCardIcon/> <b>Tamanho: </b>
                                            </span>

                                            <span className="meta-objeto">
                                                <DateRangeIcon/> <b>Enviado: </b>
                                                {moment(draft.created_at).format("DD/MM/YYYY")}
                                            </span>

                                            <span className="meta-objeto">
                                                <UpdateIcon/><b>Atualização: </b>
                                                {moment(draft.updated_at).format("DD/MM/YYYY")}
                                            </span>

                                            {
                                                draft.language.map( (language =>
                                                    <span className="meta-objeto" key={language.id}>
                                                        <TranslateIcon/><b>Idioma: </b>{language.name}
                                                    </span>
                                                ))
                                            }

                                            <span className="meta-objeto">
                                                <AssignmentIcon/><b>Licença: </b>{draft.license.name}
                                            </span>
                                        </Grid>
                                    </Grid>
                                </div>
                            </div>
                        </CaixaContainer>
                        <Sessao3>
                            <form>
                            <Grid container>
                                <Grid item xs={windowWidth > 990 ? 6 : 12} style={{paddingRight : "15px", paddingLeft : "15px", textAlign: windowWidth > 990 ? 'right' : 'center'}}>
                                    <span style={{fontSize : "14px"}}>
                                        Para segurança da plataforma <br/> marque que você não é um robô
                                    </span>
                                </Grid>

                                <Grid item xs={windowWidth > 990 ? 6 : 12} style={{paddingRight : "15px", paddingLeft : "15px",  textAlign: windowWidth > 990 ? 'left' : 'center'}}>
                                    <span>Recaptcha</span>
                                </Grid>
                                <Grid item xs={12} style={{paddingRight : "15px", paddingLeft : "15px", marginTop : "30px", textAlign : 'center'}}>
                                    <GrayButton onClick={() => {props.stepperControl(-1)}}>VOLTAR</GrayButton>
                                    <GrayButton onClick={() => {toggleModalCancelar(true)}}>CANCELAR</GrayButton>
                                    {
                                        checkAccessLevel("partner") ?
                                        (
                                            <OrangeButton onClick={props.handlePost}>PUBLICAR RECURSO</OrangeButton>
                                        )
                                        :
                                        (
                                            <OrangeButton onClick={props.handleSubmit}>SUBMETER RECURSO</OrangeButton>
                                        )

                                    }
                                </Grid>
                            </Grid>
                            </form>
                        </Sessao3>
                    </Grid>
                </Grid>
                </React.Fragment>
            )
            :
            (
                <LoadingSpinner text="CARREGANDO"/>
            )
        }
    </React.Fragment>
const Sessao3 = styled.div`
    position : relative;
    top : -120px;
    padding-right :15px;
    padding-left :15px;
    margin-right : auto;
    margin-left : auto;
    @media screen and (min-width: 768px) {
        width : 750px;
    }
    @media screen and (min-width: 992px) {
        width : 970px;
    }
    @media screen and (min-width: 1200px) {
        width : 970px;
    color : #666;
    background-color : #f4f4f4;

`

const CaixaContainer = styled.div`
    background-color : rgba(238,238,238,.5);
    border-radius : 5px;
    position : relative;
    top : -145px;
    padding : 10px;

    margin-right : auto;
    margin-left : auto;
    @media screen and (min-width: 768px) {
        width : 750px;
    }
    @media screen and (min-width: 992px) {
        width : 970px;
    }
    @media screen and (min-width: 1200px) {
        width : 970px;
    }


    .cabecalho-objeto {
        background-color:#fff;
        box-shadow: 0 1px 3px rgba(0,0,0,.12),0 1px 2px rgba(0,0,0,.24);
        padding: 0;
        margin-top: 30px;
        margin-bottom: 30px;
        position: relative;
        min-height: 100px;
        margin-top: 0;
        margin-bottom: 10px;
        color : #666;

        .img-objeto {
            background-color:#e5e5e5;
            height: 270px;
            width: 400px;
            float: left;
            padding: 0;
        }

        .texto-objeto {
            padding: 20px 20px 0 20px;
            height: content;
            display: -webkit-box;
            display: -ms-flexbox;
            display: flex;
            -webkit-box-orient: vertical;
            -webkit-box-direction: normal;
            -ms-flex-direction: column;
            flex-direction: column;
            -ms-flex-wrap: nowrap;
            flex-wrap: nowrap;
            -webkit-box-pack: start;
            -ms-flex-pack: start;
            justify-content: flex-start;
            -ms-flex-line-pack: center;
            align-content: center;
            -webkit-box-align: start;
            -ms-flex-align: start;
            align-items: flex-start;

            h3 {
                font-size: 26px;
                font-weight: 400;
                margin: 0;
                padding-bottom: 15px;
            }

            .rating-objeto {
                margin : 0;
                display : inline-flex;
                padding-bottom : 10px;
            }

            .relacionado {
                font-weight : 500;
                font-size : 13px;
            }

            .tags-objeto {
                max-height: 54px;
                font-size: .8em;
                overflow: hidden;
                clear: both;
                display: -webkit-inline-box;
                display: -ms-inline-flexbox;
                display: inline-flex;
                -ms-flex-wrap: wrap;
                flex-wrap: wrap;

                .tag {
                    display: -webkit-inline-box;
                    display: -ms-inline-flexbox;
                    display: inline-flex;
                    margin-right: 3px;
                    background-color: #e5e5e5;
                    padding: 3px 7px;
                    border-radius: 15px;
                    line-height: 18px;
                    color: #666;
                    margin-bottom: 3px;
                }
            }
        }
    }

    .sobre-objeto {
        margin-top : 0;
        margin-bottom : 0;
        min-height : 275px;
        display : flex;
        background-color: #fff;
        box-shadow: 0 1px 3px rgba(0,0,0,.12),0 1px 2px rgba(0,0,0,.24);
        padding: 0;
        position: relative;
        min-height: 500px;

        .left {
            @media screen and (min-width : 990px) {
                margin-left : 4% !important;
                margin-top : 4% !important;
            }

            @media screen and (max-width : 989px) {
                margin : 0;
                padding : 20px;
                padding-bottom : 0;
            }

            .titulo {
                margin-top: 2% !important;
                margin-bottom: 10px;
                font-family: 'Roboto Light','Roboto Regular',Roboto;
                font-weight: 300;
                font-style: normal;
                color:#666;
                font-size: 1.857em;
            }

            .sobre-conteudo {
                flex : 1;
                color : #666;
                font-size : 14px !important;

                .descricao {
                    text-align: justify;
                    margin-bottom: 20px;
                    margin-top: 20px;
                }

                .autor {
                    margin : 0 0 10px !important;
                }
            }
        }

        .right {
            margin-top : 4% !important;
            border-left: 1px solid #e5e5e5;
            -webkit-box-orient: vertical;
            -webkit-box-direction: normal;
            -ms-flex-direction: column;
            flex-direction: column;
            -webkit-box-pack: start;
            -ms-flex-pack: start;
            justify-content: flex-start;
            padding: 20px;
            position : relative;
            margin-bottom : 20px;

            .meta-objeto {
                position: relative;
                width: 100%;
                font-size: 14px;
                color: #666;
                margin-bottom: 20px;
                display : inline-block;
            }

            .MuiSvgIcon-root {
                vertical-align : middle !important;
                margin-right : 15px !important;
            }
        }
    }
}
`

const StyledSessao1 = styled.div`
    color : #fff;
    background-color : #00bcd4;
    float : none;
    height : 300px;
    text-align : center;
    padding-top : 48px;
    padding-bottom : 48px;
    margin-bottom : 30px;

    .cabecalho {
        display : flex;
        flex-direction : column;
        align-items : center;
        margin-bottom : 30px;

        .feedback-upload {
            display : flex;
            flex-direction : column;
            justify-content : center;
            text-align : center
            margin-top : 20px;
            width : 55%;
        }

        h2 {
            margint-top : 0;
            font-size : 26px;
            font-weight : lighter;
            margin-bottom : 10px;
        }

        .subtitle {
            font-size : 16px;