diff --git a/src/Components/TabPanels/PanelComponents/ButtonsArea.js b/src/Components/TabPanels/PanelComponents/ButtonsArea.js index 6492f0b45d7f707b699345a3eb28a465a33f3a0a..848001761ebc4f63beb1f5cc1c46a317dc8158ab 100644 --- a/src/Components/TabPanels/PanelComponents/ButtonsArea.js +++ b/src/Components/TabPanels/PanelComponents/ButtonsArea.js @@ -49,7 +49,7 @@ export function ButtonsAreaColecao(props) { return ( <Carregados> <p style={{ margin: "0 0 10px", fontSize: "14px" }}> - {props.sliceLength} coleções carregadas + {props.sliceLength} coleções carregadas de {props.total} </p> { props.end ? @@ -73,7 +73,7 @@ export function ButtonsAreaRede(props) { return ( <Carregados> <p style={{ margin: "0 0 10px", fontSize: "14px" }}> - {props.sliceLength} usuários carregados + {props.sliceLength} usuários carregados {props.total} </p> { diff --git a/src/Components/TabPanels/PanelComponents/TemplateColecao.js b/src/Components/TabPanels/PanelComponents/TemplateColecao.js index 48d287bf23d35c5eddf062c167c940cdbd97afcd..a8fba55079f606ae8df0e4f8ac986597564d3473 100644 --- a/src/Components/TabPanels/PanelComponents/TemplateColecao.js +++ b/src/Components/TabPanels/PanelComponents/TemplateColecao.js @@ -77,36 +77,43 @@ export default function PanelTemplateColecao(props) { /> { - props.length === 0 ? - ( - <NoContent text={props.noContentText} /> - ) + props.error ? + <p + style={{ fontSize: "15px", fontWeight: "lighter", margin: "0 0 10px", display: "flex", justifyContent: "center", textAlign: "center" }} + > + Erro ao tentar obter os dados + </p> : - ( - <React.Fragment> - <StyledGrid container spacing={1} style={{ paddingLeft: "30px", paddingRight: "15px" }}> + props.length === 0 ? + ( + <NoContent text={props.noContentText} /> + ) + : + ( + <React.Fragment> + <StyledGrid container spacing={1} style={{ paddingLeft: "30px", paddingRight: "15px" }}> + { + props.sliceArr.map((card) => + <Grid item xs={12} sm={6} md={'auto'} lg={3} key={card.id}> + {RenderFollowedColCard(card, props.followed)} + </Grid> + ) + } + </StyledGrid> { - props.sliceArr.map((card) => - <Grid item xs={12} sm={6} md={'auto'} lg={3} key={card.id}> - {RenderFollowedColCard(card, props.followed)} - </Grid> - ) + props.loadingMore ? + <LoadingSpinner text={'Carregando Recursos...'} /> + : + <ButtonsAreaColecao + sliceLength={props.sliceArr.length} + length={props.length} + showMore={props.showMore} + total={props.end} + end={String(props.sliceArr.length) === props.end} + /> } - </StyledGrid> - { - props.loadingMore ? - <LoadingSpinner text={'Carregando Recursos...'} /> - : - <ButtonsAreaColecao - sliceLength={props.sliceArr.length} - length={props.length} - showMore={props.showMore} - total={props.end} - end={String(props.sliceArr.length) === props.end} - /> - } - </React.Fragment> - ) + </React.Fragment> + ) } </WhiteContainer> diff --git a/src/Components/TabPanels/PanelComponents/TemplateCuradoria.js b/src/Components/TabPanels/PanelComponents/TemplateCuradoria.js index b91a0174edfc96fc1a52d2f1f3bbc4dc299c0363..2b8135fd06101019ddd93f424124923c4322bbe6 100644 --- a/src/Components/TabPanels/PanelComponents/TemplateCuradoria.js +++ b/src/Components/TabPanels/PanelComponents/TemplateCuradoria.js @@ -35,55 +35,62 @@ export default function Template(props) { /> { - props.length === 0 ? - ( - [ - <NoContent text={props.noContentText} /> - ] - ) + props.error ? + <p + style={{ fontSize: "15px", fontWeight: "lighter", margin: "0 0 10px", display: "flex", justifyContent: "center", textAlign: "center" }} + > + Erro ao tentar obter os dados + </p> : - ( - [ - <React.Fragment> - <StyledGrid container spacing={1} justify="center" alignItems="center" style={{ paddingLeft: "30px", paddingRight: "15px" }}> + props.length === 0 ? + ( + [ + <NoContent text={props.noContentText} /> + ] + ) + : + ( + [ + <React.Fragment> + <StyledGrid container spacing={1} justify="center" alignItems="center" style={{ paddingLeft: "30px", paddingRight: "15px" }}> + { + props.sliceArr.map((card) => + <Grid item xs={12} sm={6} md={'auto'} lg={3} key={card.id}> + <ResourceCardFunction + avatar={card.submitter.avatar} + id={card.learning_object.id} + thumbnail={card.learning_object.thumbnail} + type={card.learning_object.object_type ? card.learning_object.object_type : "Outros"} + title={card.learning_object.name} + published={false} + likeCount={card.learning_object.likes_count} + liked={card.learning_object.liked} + rating={card.learning_object.review_average} + author={card.submitter.name} + tags={card.learning_object.tags} + href={"/recurso/" + card.learning_object.id} + downloadableLink={card.default_attachment_location} + /> + </Grid> + ) + } + </StyledGrid> { - props.sliceArr.map((card) => - <Grid item xs={12} sm={6} md={'auto'} lg={3} key={card.id}> - <ResourceCardFunction - avatar={card.submitter.avatar} - id={card.learning_object.id} - thumbnail={card.learning_object.thumbnail} - type={card.learning_object.object_type ? card.learning_object.object_type : "Outros"} - title={card.learning_object.name} - published={false} - likeCount={card.learning_object.likes_count} - liked={card.learning_object.liked} - rating={card.learning_object.review_average} - author={card.submitter.name} - tags={card.learning_object.tags} - href={"/recurso/" + card.learning_object.id} - downloadableLink={card.default_attachment_location} - /> - </Grid> - ) + props.loadingMore ? + <LoadingSpinner text="Carregando recurso..." /> + : + <ButtonsAreaRecurso + sliceLength={props.sliceArr.length} + length={props.length} + showMore={props.showMore} + end={String(props.sliceArr.length) === props.end} + total={props.end} + /> } - </StyledGrid> - { - props.loadingMore ? - <LoadingSpinner text="Carregando recurso..." /> - : - <ButtonsAreaRecurso - sliceLength={props.sliceArr.length} - length={props.length} - showMore={props.showMore} - end={String(props.sliceArr.length) === props.end} - total={props.end} - /> - } - </React.Fragment> - ] - ) + </React.Fragment> + ] + ) } </WhiteContainer> diff --git a/src/Components/TabPanels/PanelComponents/TemplateRecurso.js b/src/Components/TabPanels/PanelComponents/TemplateRecurso.js index 78b712414ee802df5f450935d1e9658d8ba31d7b..379128c493e22c2eb04c34d3d6107e3f7ae257e2 100644 --- a/src/Components/TabPanels/PanelComponents/TemplateRecurso.js +++ b/src/Components/TabPanels/PanelComponents/TemplateRecurso.js @@ -35,12 +35,19 @@ export default function Template(props) { /> { - props.length === 0 ? - ( - <NoContent text={props.noContentText} /> - ) + props.error ? + <p + style={{ fontSize: "15px", fontWeight: "lighter", margin: "0 0 10px", display: "flex", justifyContent: "center", textAlign: "center" }} + > + Erro ao tentar obter os dados + </p> : - ( + props.length === 0 ? + ( + <NoContent text={props.noContentText} /> + ) + : + ( <React.Fragment> <StyledGrid container spacing={1} style={{ paddingLeft: "30px", paddingRight: "15px" }}> { @@ -80,7 +87,7 @@ export default function Template(props) { } </React.Fragment> - ) + ) } </WhiteContainer> diff --git a/src/Components/TabPanels/PanelComponents/TemplateRede.js b/src/Components/TabPanels/PanelComponents/TemplateRede.js index 0853c14eb8bc573b80906c038d228add9fa2075c..7bd506188b746200e4830bc5605e3bc4481f3257 100644 --- a/src/Components/TabPanels/PanelComponents/TemplateRede.js +++ b/src/Components/TabPanels/PanelComponents/TemplateRede.js @@ -54,44 +54,52 @@ export default function PanelTemplateRede(props) { {/*if length is 0, display "No Content" text */} {/*otherwise, display either ContactCard and Buttons */} { - props.length === 0 ? - ( - [ - <NoContent text={props.noContentText} /> - ] - ) + props.error ? + <p + style={{ fontSize: "15px", fontWeight: "lighter", margin: "0 0 10px", display: "flex", justifyContent: "center", textAlign: "center" }} + > + Erro ao tentar obter os dados + </p> : - ( - [ - <React.Fragment> - <StyledGrid container spacing={1} style={{ paddingLeft: "30px", paddingRight: "15px" }}> + props.length === 0 ? + ( + [ + <NoContent text={props.noContentText} /> + ] + ) + : + ( + [ + <React.Fragment> + <StyledGrid container spacing={1} style={{ paddingLeft: "30px", paddingRight: "15px" }}> + { + props.sliceArr.map((card) => + <> + { + card.follower && + <Grid item xs={12} sm={6} md={'auto'} lg={3} key={card.id}> + {RenderContactCard(card, props.follower)} + </Grid> + } + </> + ) + } + </StyledGrid> { - props.sliceArr.map((card) => - <> - { - card.follower && - <Grid item xs={12} sm={6} md={'auto'} lg={3} key={card.id}> - {RenderContactCard(card, props.follower)} - </Grid> - } - </> - ) + props.loadingMore ? + <LoadingSpinner text={'Carregando Recursos...'} /> + : + <ButtonsAreaRede + sliceLength={props.sliceArr.length} + length={props.length} + showMore={props.showMore} + end={props.end} + total={props.end} + /> } - </StyledGrid> - { - props.loadingMore ? - <LoadingSpinner text={'Carregando Recursos...'} /> - : - <ButtonsAreaRede - sliceLength={props.sliceArr.length} - length={props.length} - showMore={props.showMore} - end={props.end} - /> - } - </React.Fragment> - ] - ) + </React.Fragment> + ] + ) } </WhiteContainer> diff --git a/src/Components/TabPanels/UserPageTabs/PanelAtividades.js b/src/Components/TabPanels/UserPageTabs/PanelAtividades.js index 694fcfe3b81e0e0e024beb8b9117b3b6577d7123..5502843e9a2785185a4b7c6fa9a4a5ce9c7b8161 100644 --- a/src/Components/TabPanels/UserPageTabs/PanelAtividades.js +++ b/src/Components/TabPanels/UserPageTabs/PanelAtividades.js @@ -28,6 +28,7 @@ import List from '@material-ui/core/List'; import { getRequest } from '../../HelperFunctions/getAxiosConfig.js' import Grid from '@material-ui/core/Grid'; import DefaultProfile from '../../../img/default_profile.png'; +import SnackBar from '../../SnackbarComponent' export default function TabPanelAtividades(props) { @@ -37,36 +38,104 @@ export default function TabPanelAtividades(props) { const [notifications, setNotifications] = useState([]); const [notificatonsLength, setLength] = useState(0); const [totalResults, setTotalResults] = useState(0); - const [limit, setLimit] = useState(4); + const [limit, setLimit] = useState(30); + const [error, setError] = useState(false) + const [snackInfo, setSnackInfo] = useState({ + open: false, + text: '', + severity: '', + color: '', + }) + + function handleCloseSnackBar() { + const info = { + open: false, + text: '', + severity: '', + color: '', + } + handleSnackInfo(info) + } + + function handleSnackInfo(info) { + setSnackInfo({ + ...info + }) + } const showMore = (offset) => { handleLoadingMore(true); const url = `/feed?offset=${limit}&limit=${offset}` setLimit(limit + offset) - getRequest(url, handleSuccess, (error) => { console.log(error) }) + getRequest(url, handleSuccess, handleError) + } + + function handleError(error) { + const info = { + open: true, + text: 'Ocorreu um erro ao tentar carregar suas notificações!', + severity: 'error', + color: 'red', + } + handleSnackInfo(info) + handleLoadingMore(false) + handleLoading(false) + setError(true) } function handleSuccess(data, header) { if (header.has('X-Total-Count')) { setTotalResults(header.get('X-Total-Count')); } - handleLoadingMore(false); - let currData = [...notifications]; - currData = currData.concat(data); - setNotifications(currData) - setLength(currData.length) - - handleLoading(false) + if (data.errors) { + const info = { + open: true, + text: 'Ocorreu um erro ao tentar carregar suas notificações!', + severity: 'error', + color: 'red', + } + handleSnackInfo(info) + handleLoadingMore(false) + handleLoading(false) + setError(true) + } + else { + if (data.length >= 1) { + handleLoadingMore(false) + let currData = [...notifications] + currData = currData.concat(data) + setNotifications(currData) + setLength(currData.length) + handleLoading(false) + } + else { + const info = { + open: true, + text: 'Não há mais notificações para serem carregadas...', + severity: 'warning', + color: 'yellow' + } + handleSnackInfo(info) + handleLoadingMore(false) + handleLoading(false) + } + } } useEffect(() => { const url = `/feed?offset=0&limit=30` - getRequest(url, handleSuccess, (error) => { console.log(error) }) + getRequest(url, handleSuccess, handleError) }, []) return ( - <MainContainerDesktop> + <SnackBar + snackbarOpen={snackInfo.open} + handleClose={handleCloseSnackBar} + severity={snackInfo.severity} + color={snackInfo.color} + text={snackInfo.text} + /> <Paper elevation={3}> <div> <DivTitulo> @@ -86,67 +155,74 @@ export default function TabPanelAtividades(props) { [ <div> { - notificatonsLength === 0 ? - ( + error ? + <p + style={{ fontSize: "15px", fontWeight: "lighter", margin: "0 0 10px", display: "flex", justifyContent: "center", textAlign: "center" }} + > + Erro ao tentar obter as notificações + </p> + : + notificatonsLength === 0 ? + ( - <NoNotificationsDiv> - <div> + <NoNotificationsDiv> <div> - <H3Styled><img src={Bolo} alt='bolo' style={{ width: "23px" }} /> Você se cadastrou na Plataforma</H3Styled> + <div> + <H3Styled><img src={Bolo} alt='bolo' style={{ width: "23px" }} /> Você se cadastrou na Plataforma</H3Styled> + </div> + <p + style={{ fontSize: "15px", fontWeight: "lighter", margin: "0 0 10px", display: "flex", justifyContent: "center", textAlign: "center" }} + >Construa conosco a plataforma e amplie sua rede de conhecimento interagindo + <br /> + com pessoas envolvidas com experiências que ocorrem em todo o Brasil! + </p> </div> - <p - style={{ fontSize: "15px", fontWeight: "lighter", margin: "0 0 10px", display: "flex", justifyContent: "center", textAlign: "center" }} - >Construa conosco a plataforma e amplie sua rede de conhecimento interagindo - <br /> - com pessoas envolvidas com experiências que ocorrem em todo o Brasil! - </p> - </div> - </NoNotificationsDiv> + </NoNotificationsDiv> - ) - : - ( - <> - <List height={400} width={300}> + ) + : + ( + <> + <List height={400} width={300}> + { + notifications.map((notification, id) => + <ActivityListItem + key={id} + onMenuBar={false} + avatar={notification.owner.avatar ? apiDomain + notification.owner.avatar : DefaultProfile} + activity={notification.activity} + actionType={notification.trackable_type} + objectType={notification.recipient_type} + createdAt={notification.created_at} + ownerName={notification.owner.name} + ownerHref={'/usuario-publico/' + notification.owner.id} + recipientName={notification.recipient.name} + recipientHref={"/recurso/" + notification.recipient.id} + /> + ) + } + </List> { - notifications.map((notification, id) => - <ActivityListItem - key={id} - onMenuBar={false} - avatar={notification.owner.avatar ? apiDomain + notification.owner.avatar : DefaultProfile} - activity={notification.activity} - actionType={notification.trackable_type} - objectType={notification.recipient_type} - createdAt={notification.created_at} - ownerName={notification.owner.name} - ownerHref={'/usuario-publico/' + notification.owner.id} - recipientName={notification.recipient.name} - recipientHref={"/recurso/" + notification.recipient.id} - /> - ) - } - </List> - { - loadingMore ? - <LoadingSpinner text="Carregando mais atividades..." /> - : - <Grid container direction="row" alignItems="center" justify="flex-start"> - <Grid item xs={12} md={4}> - <LoadMoreButton onClick={() => { showMore(4) }}>CARREGAR MAIS 4</LoadMoreButton> - </Grid> - <Grid item xs={12} md={4}> - <LoadMoreButton onClick={() => { showMore(20) }}>CARREGAR MAIS 20</LoadMoreButton> - </Grid> - <Grid xs={12} md={4} item style={{ fontSize: "14px", color: "#666" }}> - <ShowData disabled={true}> - Mostrando {notificatonsLength} {notificatonsLength === 1 ? "Atividade " : "Atividades "} + loadingMore ? + <LoadingSpinner text="Carregando mais atividades..." /> + : + <Grid container direction="row" alignItems="center" justify="flex-start"> + <Grid item xs={12} md={4}> + <LoadMoreButton onClick={() => { showMore(4) }}>CARREGAR MAIS 4</LoadMoreButton> + </Grid> + <Grid item xs={12} md={4}> + <LoadMoreButton onClick={() => { showMore(20) }}>CARREGAR MAIS 20</LoadMoreButton> + </Grid> + <Grid xs={12} md={4} item style={{ fontSize: "14px", color: "#666" }}> + <ShowData disabled={true}> + Mostrando {notificatonsLength} {notificatonsLength === 1 ? "Atividade " : "Atividades "} de {totalResults} - </ShowData> + </ShowData> + </Grid> </Grid> - </Grid> - } - </> - ) + } + </> + ) } </div> diff --git a/src/Components/TabPanels/UserPageTabs/PanelColecoes.js b/src/Components/TabPanels/UserPageTabs/PanelColecoes.js index acdd2828493659933402c652e989a906de2c54d4..240cbcc6c5b237e65be9029aedd7c1f18aafc817 100644 --- a/src/Components/TabPanels/UserPageTabs/PanelColecoes.js +++ b/src/Components/TabPanels/UserPageTabs/PanelColecoes.js @@ -30,11 +30,14 @@ import Title from '../PanelComponents/PanelTitle.js' import CollectionCardFunction from '../../CollectionCardFunction.js' import { ButtonsAreaColecao } from '../PanelComponents/ButtonsArea' import CriarColecaoModal from '../../CriarColecaoModal.js' -import {fetchAllRequest, getRequest} from '../../HelperFunctions/getAxiosConfig' +import { fetchAllRequest, getRequest } from '../../HelperFunctions/getAxiosConfig' export default function TabPanelColecoes(props) { const [loading, handleLoading] = useState(true) + const [errorInUserColl, setErrorInUserColl] = useState(false) + const [errorInFollowedColl, setErrorInFollowedColl] = useState(false) + const [userCollections, setUserCollections] = useState([]) const [followedCollections, setFollowedCollections] = useState([]) @@ -47,19 +50,31 @@ export default function TabPanelColecoes(props) { const [endOfUserColl, setEndOfUserColl] = useState(false); const [endOfFollowedColl, setEndOfFollowedColl] = useState(false); - function handleSuccess (responseArr) { + function handleSuccess(responseArr, headersArr) { handleLoading(false) setUserCollections(responseArr[0]) - setFollowedCollections(responseArr[1]) + + if (headersArr[0].has('X-Total-Count')) { + setEndOfUserColl(headersArr[0].get('X-Total-Count')); + } + if (headersArr[1].has('X-Total-Count')) { + setEndOfFollowedColl(headersArr[1].get('X-Total-Count')); + } + } + + function handleError(error) { + handleLoading(false) + setErrorInFollowedColl(true) + setErrorInUserColl(true) } const getInfo = () => { const urls = [ - `/users/${props.id}/collections?offset=0&limit=4`, + `/users/${props.id}/collections?offset=0&limit=4`, `/users/${props.id}/following/Collection?offset=0&limit=4` ] - fetchAllRequest(urls, handleSuccess, (error) => {console.log(error)}) + fetchAllRequest(urls, handleSuccess, handleError) } useEffect(() => { @@ -74,7 +89,12 @@ export default function TabPanelColecoes(props) { const url = `/users/${props.id}/collections?offset=${currLimitUserColl}&limit=${limit}`; getRequest(url, (data) => { - if (data.length >= 1) { + if (data.errors) { + setLoadingMoreUserColl(false); + setEndOfUserColl(true) + setErrorInUserColl(true) + } + else if (data.length >= 1) { let currData = [...userCollections]; currData = [...currData.concat(data)]; setLoadingMoreUserColl(false); @@ -85,7 +105,11 @@ export default function TabPanelColecoes(props) { setEndOfUserColl(true) } }, - (error) => { console.log(error) } + (error) => { + setLoadingMoreUserColl(false); + setEndOfUserColl(true) + setErrorInUserColl(true) + } ) } @@ -96,7 +120,12 @@ export default function TabPanelColecoes(props) { const url = `/users/${props.id}/following/Collection?offset=${currLimitFollowedColl}&limit=${limit}`; getRequest(url, (data) => { - if (data.length >= 1) { + if (data.errors) { + setLoadingMoreFollowedColl(false); + setEndOfFollowedColl(true) + setErrorInFollowedColl(true) + } + else if (data.length >= 1) { let currData = [...followedCollections]; currData = [...currData.concat(data)]; setLoadingMoreFollowedColl(false); @@ -107,7 +136,11 @@ export default function TabPanelColecoes(props) { setEndOfFollowedColl(true) } }, - (error) => { console.log(error) } + (error) => { + setLoadingMoreFollowedColl(false); + setEndOfFollowedColl(true) + setErrorInFollowedColl(true) + } ) } @@ -144,6 +177,7 @@ export default function TabPanelColecoes(props) { loadingMore={loadingMoreUserColl} end={endOfUserColl} callback={getInfo} + error={errorInUserColl} /> <PanelTemplateColecao @@ -155,6 +189,7 @@ export default function TabPanelColecoes(props) { loadingMore={loadingMoreFollowedColl} end={endOfFollowedColl} followed={true} + error={errorInFollowedColl} /> </React.Fragment> ] @@ -168,79 +203,95 @@ function Tentativa(props) { const [modalOpen, toggleModal] = useState(false) const handleModal = () => { toggleModal(!modalOpen) }; - return ( - <WhiteContainer> - <CriarColecaoModal open={modalOpen} handleClose={() => { handleModal(); props.callback() }} /> - - <Title - title={props.title} - length={props.length} - /> - - <StyledGrid container spacing={1} style={{ paddingLeft: "30px", paddingRight: "15px" }}> - <Grid item xs={12} sm={6} md={'auto'} lg={3}> - <CardDiv onClick={() => { handleModal() }}> - <div style={{ backgroundColor: "#673ab7", display: "flex", height: "100%", width: "100%", justifyContent: "center", alignItems: "center", cursor : "pointer" }}> - <CreateNewFolderIcon style={{ color: "#fff", fontSize: "70px" }} /> - <p style={{ fontSize: "16px", margin: "0 0 10px", color: "#fff" }}> - CRIAR COLEÇÃO + if (props.error) + return ( + <WhiteContainer> + <Title + title={props.title} + length={props.length} + /> + <p + style={{ fontSize: "15px", fontWeight: "lighter", margin: "0 0 10px", display: "flex", justifyContent: "center", textAlign: "center" }} + > + Erro ao tentar obter os dados + </p> + </WhiteContainer> + ) + else + return ( + <WhiteContainer> + <CriarColecaoModal open={modalOpen} handleClose={() => { handleModal(); props.callback() }} /> + + <Title + title={props.title} + length={props.length} + /> + + <StyledGrid container spacing={1} style={{ paddingLeft: "30px", paddingRight: "15px" }}> + <Grid item xs={12} sm={6} md={'auto'} lg={3}> + <CardDiv onClick={() => { handleModal() }}> + <div style={{ backgroundColor: "#673ab7", display: "flex", height: "100%", width: "100%", justifyContent: "center", alignItems: "center", cursor: "pointer" }}> + <CreateNewFolderIcon style={{ color: "#fff", fontSize: "70px" }} /> + <p style={{ fontSize: "16px", margin: "0 0 10px", color: "#fff" }}> + CRIAR COLEÇÃO </p> - </div> - </CardDiv> - </Grid> + </div> + </CardDiv> + </Grid> + { + props.length === 0 ? + ( + [ + <Grid item lg={6} md={4} sm={6} xs={12}> + <NoContent text={props.noContentText} /> + </Grid> + ] + ) + : + ( + [ + <React.Fragment> + { + props.sliceArr.map((card) => + <Grid item xs={12} sm={6} md={'auto'} lg={3} key={card.id}> + <CollectionCardFunction + name={card.name} + tags={card.tags} + rating={card.review_average} + id={card.id} + author={card.owner.name} + description={card.description} + thumbnails={card.items_thumbnails} + avatar={card.owner.avatar} + likeCount={card.likes_count} + followed={card.followed} + liked={card.liked} + collections={card.collection_items} + authorID={card.owner.id} + /> + </Grid> + ) + } + </React.Fragment> + ] + ) + } + </StyledGrid> { - props.length === 0 ? - ( - [ - <Grid item lg={6} md={4} sm={6} xs={12}> - <NoContent text={props.noContentText} /> - </Grid> - ] - ) + props.loadingMore ? + <LoadingSpinner text={'Carregando Recursos...'} /> : - ( - [ - <React.Fragment> - { - props.sliceArr.map((card) => - <Grid item xs={12} sm={6} md={'auto'} lg={3} key={card.id}> - <CollectionCardFunction - name={card.name} - tags={card.tags} - rating={card.review_average} - id={card.id} - author={card.owner.name} - description={card.description} - thumbnails={card.items_thumbnails} - avatar={card.owner.avatar} - likeCount={card.likes_count} - followed={card.followed} - liked={card.liked} - collections={card.collection_items} - authorID={card.owner.id} - /> - </Grid> - ) - } - </React.Fragment> - ] - ) + <ButtonsAreaColecao + sliceLength={props.sliceArr.length} + length={props.length} + showMore={props.showMore} + total={props.end} + end={props.end} + /> } - </StyledGrid> - { - props.loadingMore ? - <LoadingSpinner text={'Carregando Recursos...'} /> - : - <ButtonsAreaColecao - sliceLength={props.sliceArr.length} - length={props.length} - showMore={props.showMore} - end={props.end} - /> - } - </WhiteContainer> - ) + </WhiteContainer> + ) } const CardDiv = styled(Card)` diff --git a/src/Components/TabPanels/UserPageTabs/PanelCuradoria.js b/src/Components/TabPanels/UserPageTabs/PanelCuradoria.js index 91039db942bd3c0c5d8da4d8488a8f55155e05ae..d9a3ac296fd3d2f0b6faa3c765bb701323c1f09c 100644 --- a/src/Components/TabPanels/UserPageTabs/PanelCuradoria.js +++ b/src/Components/TabPanels/UserPageTabs/PanelCuradoria.js @@ -24,11 +24,11 @@ import { getRequest } from '../../HelperFunctions/getAxiosConfig' export default function TabPanelCuradoria(props) { const [loading, handleLoading] = useState(true) + const [errorCurating, setErrorCurating] = useState(false) const [loadingMoreCurating, setLoadingMoreCurating] = useState(false) const [currLimitCurating, setcurrLimitCurating] = useState(4); - const [endOfCurating, setEndofCurating] = useState(false); + const [endOfCurating, setEndofCurating] = useState(); const [curating, setCurating] = useState([]); - const [totalResults, setTotalResults] = useState(0); const showMoreCurating = (limite) => { setLoadingMoreCurating(true); @@ -37,6 +37,10 @@ export default function TabPanelCuradoria(props) { const url = `/users/${props.id}/submissions?offset=${currLimitCurating}&limit=${limit}&status=submitted`; getRequest(url, (data) => { + if (data.errors) { + setLoadingMoreCurating(false); + setErrorCurating(true); + } if (data.length >= 1) { let currData = [...curating]; currData = [...currData.concat(data)]; @@ -45,25 +49,40 @@ export default function TabPanelCuradoria(props) { } else { setLoadingMoreCurating(false); - setEndofCurating(true); + setErrorCurating(true); } }, - (error) => { console.log(error) } + (error) => { + setLoadingMoreCurating(false); + setErrorCurating(true); + } ) } - + function handleSuccess(data, header) { if (header.has('X-Total-Count')) { - setTotalResults(header.get('X-Total-Count')); + setEndofCurating(header.get('X-Total-Count')); + } + + if (data.errors) { + setErrorCurating(true); } + else + setCurating(data) + handleLoading(false) - setCurating(data) } + + function handleError() { + setErrorCurating(true); + handleLoading(false) + } + useEffect(() => { const url = `/users/${props.id}/submissions?offset=0&limit=4&status=submitted` handleLoading(true) - getRequest(url, handleSuccess, (error) => { console.log(error) }) + getRequest(url, handleSuccess, handleError) }, []) return ( @@ -85,7 +104,7 @@ export default function TabPanelCuradoria(props) { showMore={showMoreCurating} loadingMore={loadingMoreCurating} end={endOfCurating} - total={totalResults} + error={errorCurating} /> </React.Fragment> ] diff --git a/src/Components/TabPanels/UserPageTabs/PanelFavoritos.js b/src/Components/TabPanels/UserPageTabs/PanelFavoritos.js index c92288463871a6a8cdf44944c3fd6a338fdc6266..d3ea7b8147f7786b8951c114ae35219bafd67298 100644 --- a/src/Components/TabPanels/UserPageTabs/PanelFavoritos.js +++ b/src/Components/TabPanels/UserPageTabs/PanelFavoritos.js @@ -25,12 +25,14 @@ import { fetchAllRequest, getRequest } from '../../HelperFunctions/getAxiosConfi export default function TabPanelFavoritos(props) { const [loading, handleLoading] = useState(true) + const [errorInLikedInLearnObj, setErrorInLikedInLearnObj] = useState(false) + const [errorInLikedInColl, setErrorInLikedInColl] = useState(false) + const [likedLearnObjs, setlikedLearnObjs] = useState([]) const [likedCollections, setlikedCollections] = useState([]) const [currLimitLearnObjLiked, setCurrLimitLearnObjLiked] = useState(4); const [currLimitCollLiked, setcurrLimitCollLiked] = useState(4); - const [loadingMoreLearnObj, setLoadingMoreLearnObj] = useState(false) const [loadingMoreColl, setLoadingMoreColl] = useState(false) @@ -51,6 +53,12 @@ export default function TabPanelFavoritos(props) { handleLoading(false) } + function handleError(error) { + handleLoading(false) + setErrorInLikedInLearnObj(true) + setErrorInLikedInColl(true) + } + useEffect(() => { handleLoading(true); const urls = [ @@ -58,7 +66,7 @@ export default function TabPanelFavoritos(props) { `/users/${props.id}/collections/liked?offset=0&limit=4` ] - fetchAllRequest(urls, handleSuccess, (error) => { console.log(error) }) + fetchAllRequest(urls, handleSuccess, handleError) }, []) @@ -69,7 +77,12 @@ export default function TabPanelFavoritos(props) { const url = `/users/${props.id}/learning_objects/liked?offset=${currLimitLearnObjLiked}&limit=${limit}`; getRequest(url, (data) => { - if (data.length >= 1) { + if (data.errors) { + setLoadingMoreLearnObj(false); + setEndofLearndObj(true); + setErrorInLikedInLearnObj(true); + } + else if (data.length >= 1) { let currData = [...likedLearnObjs]; currData = [...currData.concat(data)]; setLoadingMoreLearnObj(false); @@ -80,7 +93,11 @@ export default function TabPanelFavoritos(props) { setEndofLearndObj(true) } }, - (error) => { console.log(error) } + (error) => { + setLoadingMoreLearnObj(false); + setEndofLearndObj(true); + setErrorInLikedInLearnObj(true); + } ) } @@ -91,6 +108,11 @@ export default function TabPanelFavoritos(props) { const url = `/users/${props.id}/collections/liked?offset=${currLimitCollLiked}&limit=${limit}`; getRequest(url, (data) => { + if (data.errors) { + setLoadingMoreColl(false); + setEndoffColl(true) + setErrorInLikedInColl(true) + } if (data.length >= 1) { let currData = [...likedCollections]; currData = [...currData.concat(data)]; @@ -102,7 +124,11 @@ export default function TabPanelFavoritos(props) { setEndoffColl(true) } }, - (error) => { console.log(error) } + (error) => { + setLoadingMoreColl(false); + setEndoffColl(true) + setErrorInLikedInColl(true) + } ) } @@ -130,6 +156,7 @@ export default function TabPanelFavoritos(props) { showMore={showMoreLikedLearnObj} loadingMore={loadingMoreLearnObj} end={endOfLearnObj} + error={errorInLikedInLearnObj} /> <PanelTemplateColecao @@ -141,6 +168,7 @@ export default function TabPanelFavoritos(props) { loadingMore={loadingMoreColl} end={endOfColl} followed={false} + error={errorInLikedInColl} /> </React.Fragment> ] diff --git a/src/Components/TabPanels/UserPageTabs/PanelMeusRecursos.js b/src/Components/TabPanels/UserPageTabs/PanelMeusRecursos.js index 6a329d67f849851fe3fb24b7db913fc6edbed4ee..c015e5d3f9ddab18bdd35041e2fb12e46f35ad77 100644 --- a/src/Components/TabPanels/UserPageTabs/PanelMeusRecursos.js +++ b/src/Components/TabPanels/UserPageTabs/PanelMeusRecursos.js @@ -25,6 +25,10 @@ import { fetchAllRequest, getRequest } from '../../HelperFunctions/getAxiosConfi export default function TabPanelAtividades(props) { const [loading, handleLoading] = useState(true) + const [errorInLearnObj, setErrorInLearnObj] = useState(false) + const [errorInDrafts, setErrorInDrafts] = useState(false) + const [errorInCurating, setErrorInCurating] = useState(false) + const [loadingMoreLearnObj, setLoadingMoreLearnObj] = useState(false) const [loadingMoreDrafts, setLoadingMoreDrafts] = useState(false) const [loadingMoreCurating, setLoadingMoreCurating] = useState(false) @@ -61,6 +65,13 @@ export default function TabPanelAtividades(props) { } + function handleError(error) { + handleLoading(false) + setErrorInCurating(true) + setErrorInDrafts(true) + setErrorInLearnObj(true) + } + useEffect(() => { const urls = [ `/users/${props.id}/learning_objects?offset=0&limit=4`, @@ -68,7 +79,7 @@ export default function TabPanelAtividades(props) { `/users/${props.id}/submissions?offset=0&limit=4&status=submitted` ] handleLoading(true); - fetchAllRequest(urls, handleSuccess, (error) => { console.log(error) }) + fetchAllRequest(urls, handleSuccess, handleError) }, []) const showMoreLearnObj = (limite) => { @@ -78,7 +89,11 @@ export default function TabPanelAtividades(props) { const url = `/users/${props.id}/learning_objects?offset=${currLimitLearnObj}&limit=${limit}`; getRequest(url, (data) => { - if (data.length >= 1) { + if (data.errors) { + setLoadingMoreLearnObj(false); + setErrorInLearnObj(true) + } + else if (data.length >= 1) { let currData = [...learningObjects]; currData = [...currData.concat(data)]; setLoadingMoreLearnObj(false); @@ -89,7 +104,10 @@ export default function TabPanelAtividades(props) { setEndofLearndObj(true) } }, - (error) => { console.log(error) } + (error) => { + setLoadingMoreLearnObj(false); + setErrorInLearnObj(true) + } ) } @@ -101,7 +119,11 @@ export default function TabPanelAtividades(props) { const url = `/users/${props.id}/drafts?offset=${currLimitDrafts}&limit=${limit}`; getRequest(url, (data) => { - if (data.length >= 1) { + if (data.errors) { + setLoadingMoreDrafts(false); + setErrorInDrafts(true) + } + else if (data.length >= 1) { let currData = [...drafts]; currData = [...currData.concat(data)]; console.log('drafs: ', currData); @@ -113,7 +135,10 @@ export default function TabPanelAtividades(props) { setEndofDrafts(true); } }, - (error) => { console.log(error) } + (error) => { + setLoadingMoreDrafts(false); + setErrorInDrafts(true) + } ) } @@ -124,7 +149,11 @@ export default function TabPanelAtividades(props) { const url = `/users/${props.id}/submissions?offset=${currLimitCurating}&limit=${limit}&status=submitted`; getRequest(url, (data) => { - if (data.length >= 1) { + if (data.errors) { + setLoadingMoreCurating(false); + setErrorInCurating(true); + } + else if (data.length >= 1) { let currData = [...curating]; currData = [...currData.concat(data)]; setLoadingMoreCurating(false); @@ -136,7 +165,10 @@ export default function TabPanelAtividades(props) { } }, - (error) => { console.log(error) } + (error) => { + setLoadingMoreCurating(false); + setErrorInCurating(true); + } ) } @@ -159,6 +191,7 @@ export default function TabPanelAtividades(props) { showMore={showMoreLearnObj} loadingMore={loadingMoreLearnObj} end={endOfLearnObj} + error={errorInLearnObj} /> <Template @@ -169,6 +202,7 @@ export default function TabPanelAtividades(props) { showMore={showMoreDrafts} loadingMore={loadingMoreDrafts} end={endOfDrafts} + error={errorInDrafts} /> <TemplateCuradoria @@ -179,6 +213,7 @@ export default function TabPanelAtividades(props) { showMore={showMoreCurating} loadingMore={loadingMoreCurating} end={endOfCurating} + error={errorInCurating} /> </React.Fragment> ] diff --git a/src/Components/TabPanels/UserPageTabs/PanelRede.js b/src/Components/TabPanels/UserPageTabs/PanelRede.js index 9d3d577dae2be3a6dc811a26d9a0e13dd65f2e1e..41aee63af299bf06d95ae030f0e22bddcf06036a 100644 --- a/src/Components/TabPanels/UserPageTabs/PanelRede.js +++ b/src/Components/TabPanels/UserPageTabs/PanelRede.js @@ -20,11 +20,14 @@ import React, { useState, useEffect } from 'react' import LoadingSpinner from '../../LoadingSpinner.js' import ContainerRedeVazia from './ContainerRedeVazia.js' import PanelTemplateRede from '../PanelComponents/TemplateRede.js' -import { fetchAllRequest,getRequest } from '../../HelperFunctions/getAxiosConfig' +import { fetchAllRequest, getRequest } from '../../HelperFunctions/getAxiosConfig' export default function TabPanelRede(props) { const [loading, handleLoading] = useState(true) + const [errorInFollowing, setErrorInFollowing] = useState(false) + const [errorInFollowers, setErrorInFollowers] = useState(false) + const [followingList, setFollowing] = useState([]) const [currFollowingLimit, setCurrFollowingLimit] = useState(4) const [loadingMoreFollowing, setLoadingFollowing] = useState(false) @@ -42,7 +45,12 @@ export default function TabPanelRede(props) { const url = `/users/${props.id}/following/User?offset=${currFollowingLimit}&limit=${limit}`; getRequest(url, (data) => { - if (data.length >= 1) { + if (data.errors) { + setLoadingFollowing(false); + setEndOfFollowing(true); + setErrorInFollowing(true); + } + else if (data.length >= 1) { let currData = [...followingList]; currData = [...currData.concat(data)]; setLoadingFollowing(false); @@ -50,10 +58,14 @@ export default function TabPanelRede(props) { } else { setLoadingFollowing(false); - setEndOfFollowing(true) + setEndOfFollowing(true); } }, - (error) => { console.log(error) } + (error) => { + setLoadingFollowing(false); + setEndOfFollowing(true); + setErrorInFollowing(true); + } ) } @@ -64,6 +76,11 @@ export default function TabPanelRede(props) { const url = `/users/${props.id}/followers?offset=${currFollowerLimit}&limit=${limit}`; getRequest(url, (data) => { + if (data.errors) { + setLoadingMoreFollowers(false); + setEndOfFollowers(true); + setErrorInFollowers(true); + } if (data.length >= 1) { let currData = [...followersList]; currData = [...currData.concat(data)]; @@ -75,16 +92,32 @@ export default function TabPanelRede(props) { setEndOfFollowers(true) } }, - (error) => { console.log(error) } + (error) => { + setLoadingMoreFollowers(false); + setEndOfFollowers(true); + setErrorInFollowers(true); + } ) } - function handleSuccess(responseArr) { + function handleSuccess(responseArr, headersArr) { setFollowing(responseArr[0]) setFollowers(responseArr[1]) + if (headersArr[0].has('X-Total-Count')) { + setEndOfFollowing(headersArr[0].get('X-Total-Count')); + } + if (headersArr[1].has('X-Total-Count')) { + setEndOfFollowers(headersArr[1].get('X-Total-Count')); + } handleLoading(false) } + function handleErrors() { + setLoadingMoreFollowers(false); + setEndOfFollowers(true); + setErrorInFollowers(true); + } + useEffect(() => { handleLoading(true) const urls = [ @@ -92,7 +125,7 @@ export default function TabPanelRede(props) { `/users/${props.id}/followers` ] - fetchAllRequest(urls, handleSuccess, (error) => { console.log(error) }) + fetchAllRequest(urls, handleSuccess, handleErrors) }, []) return ( @@ -128,6 +161,7 @@ export default function TabPanelRede(props) { follower={true} loadingMore={loadingMoreFollowers} end={endOfFollowers} + error={errorInFollowers} noContentText={'Você não possui nenhum seguidor'} /> @@ -139,6 +173,7 @@ export default function TabPanelRede(props) { follower={false} loadingMore={loadingMoreFollowing} end={endOfFollowing} + error={errorInFollowing} noContentText={'Você ainda não segue nenhum usuário'} /> </React.Fragment> diff --git a/src/Pages/UserPage.js b/src/Pages/UserPage.js index 53a0c9c53f5ade9f72e739311f80122332cd37c6..259522a052527be06359a1f29e9e98b5faa31b9c 100644 --- a/src/Pages/UserPage.js +++ b/src/Pages/UserPage.js @@ -53,7 +53,7 @@ export default function UserPage(props) { const [follows, setFollows] = useState(0); const [following, setFollowing] = useState(0); - const [loading, setLoading] = useState(false); + const [loading, setLoading] = useState(false); const [tabValue, setTabValue] = useState(Number(props.location.state) || 0); const [tabs, setTabs] = useState([ "Atividades", diff --git a/src/env.js b/src/env.js index b7359157e1c0e9d260976bbe2b2545a2e0ca51b0..82bf229b11fe78f3cb5ff8a58d096eec156cedf2 100644 --- a/src/env.js +++ b/src/env.js @@ -17,7 +17,7 @@ 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/>.*/ -var apiDomain = 'https://api.portalmec.c3sl.ufpr.br', +var apiDomain = 'https://api.portalmectest.c3sl.ufpr.br', apiVersion = 'v1', apiUrl = apiDomain + '/' + apiVersion;