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 } from 'react';
import { Grid } from '@material-ui/core';
import styled from 'styled-components';
import Button from '@material-ui/core/Button';
import CheckBoxOutlineBlankIcon from '@material-ui/icons/CheckBoxOutlineBlank';
import CheckBoxIcon from '@material-ui/icons/CheckBox';
import GetAppIcon from '@material-ui/icons/GetApp';
import ResourceCardFunction from './ResourceCardFunction.js';
import FloatingDownloadButton from './FloatingDownloadButton.js';
import Snackbar from '@material-ui/core/Snackbar';
import MuiAlert from '@material-ui/lab/Alert';
import { apiUrl } from '../env.js';
function Alert(props) {
return <MuiAlert elevation={6} variant="filled" {...props} />;
null, { length: props.resources.length }).map(i => false));
const [download_url, setDownloadUrl] = useState('');
const [snackInfo, setSnackInfo] = useState({
open: false,
text: "",
severity: "",
});
const updateSelected = (index) => {
let new_selected = selected.slice();
new_selected[index] = !new_selected[index];
setSelected(new_selected);
}
const handleSnackInfo = (info) => {
setSnackInfo({ ...info })
}
const checkBoxIcon = (s) => {
if (s)
return <CheckBoxIcon />;
else
return <CheckBoxOutlineBlankIcon />;
}
const handleDownloadSelection = (e) => {
e.preventDefault()
// const selected_resources = props.resources.filter(resource => selected[props.resources.indexOf(resource)]);
let snackInfo = {}
if (download_url) {
window.open(download_url, '_blank')
snackInfo = {
open: true,
text: "Os recursos estão sendo baixados...",
severity: "success",
}
handleSnackInfo(snackInfo)
}
else {
snackInfo = {
open: true,
text: "Selecione os recursos que deseja baixar",
severity: "warning",
}
handleSnackInfo(snackInfo)
}
}
const handleCloseSnack = () => {
const snackInfo = {
open: false,
text: "",
severity: "",
}
handleSnackInfo(snackInfo)
useEffect(() => {
if (selectable) {
var resources = []
let i = 0;
while (i < props.resources.length) {
if (selected[i])
resources.push({ "type": "LearningObject", "id": props.resources[i].id });
}
};
.post(apiUrl + '/package', body)
.catch(err => {
if (err.response && err.response.status === 302) {
setDownloadUrl(apiUrl.slice().replace('/v1', '') + '/' + err.response.data.url);
}
});
}
}, [selected, selectable]);
<Grid container direction="row" justify="space-around" alignItems="center">
{props.resources.length ?
props.resources.length + " recurso" + (props.resources.length === 1 ? "" : "s")
</Grid>
<Grid item>
<Button color="primary" onClick={() => setSelectable(!selectable)}>
<PanelButtonText>
</PanelButtonText>
</Button>
</Grid>
<Grid item>
<Button
color="primary"
variant="outlined"
startIcon={<GetAppIcon fontSize="large" />}
onClick={handleDownloadSelection}
>
<PanelButtonText>baixar seleção</PanelButtonText>
</Button>
<Grid container direction="row" justify="center" alignItems="center">
{props.resources.map((card) => {
<ResourceGrid item key={card.title}>
avatar={card.avatar}
id={card.id}
thumbnail={card.thumbnail}
type={card.type ? card.type : "Outros"}
title={card.title}
published={card.state === "published" ? true : false}
likeCount={card.likeCount}
liked={card.liked}
rating={card.rating}
author={card.publisher}
tags={card.tags}
href={"/recurso/" + card.id}
downloadableLink={card.downloadableLink}
{selectable ?
(<SelectButton
variant="outline"
color="primary"
startIcon={checkBoxIcon(selected[props.resources.indexOf(card)])}
onClick={() => updateSelected(props.resources.indexOf(card))}
>
Selecionar
</SelectButton>)
:
<span></span>}
anchorOrigin={{ vertical: 'top', horizontal: 'right' }}
<Alert onClose={handleCloseSnack} severity={snackInfo.severity}>
{snackInfo.text}
<FloatingDownloadButton
handleDownloadSelection={handleDownloadSelection}
/>
const ResourceListContainer = styled.div`
const Title = styled.p`
color: rgb(102, 102, 102);
font-size: 2em;
font-weigth: 300;
`
const SelectButton = styled(Button)`
const PanelButtonText = styled.span`
const ResourceGrid = styled(Grid)`