labhackercd/linguagem-simples-front

View on GitHub
src/components/Dashboard/Content/SavedContent/savedContent.js

Summary

Maintainability
A
0 mins
Test Coverage
A
100%

import React from 'react';
import { Grid, Typography } from '@material-ui/core';
import Box from '@material-ui/core/Box';
import List from '@material-ui/core/List'
import CircularProgress from '@material-ui/core/CircularProgress';
import InputAdornment from '@material-ui/core/InputAdornment';
import SearchIcon from '@material-ui/icons/Search';
import TextField from '@material-ui/core/TextField';

import NoSavedContentImage from './assets/noSavedContent.svg'

import fetchDataSavedContentCamara from './fetchDataSavedContent'
import NewsCard from './../AgenciaCamara/newsCard'
import TVCard from './../TVCamara/tvCamaraCard'
import RadioCard from './../RadioCamara/radioCard'


function topBarSavedContent(props){
  return(
    <React.Fragment>
      <Grid item xs={10}>
        <Typography variant="h6" style={{ color: "#007E5A" }}>Mais recentes </Typography>
      </Grid>

      <Grid item xs={2}>
        <TextField
          id="input-search-agencia"
          size="small"
          InputProps={{
            endAdornment: (<InputAdornment position="start"><SearchIcon /></InputAdornment>),
          }}
        />
      </Grid>
    </React.Fragment>
  );
}

export default class SavedContent extends React.Component {

  constructor(props){
    super(props);
    this.state = { 
        savedContent: [], 
        dataLoaded: false
    };
    this.updateComponent=this.updateComponent.bind(this);
  }

  fetchSavedContent = async term => {
    //try {
      const data = await fetchDataSavedContentCamara(this.props.sessionId);

      this.setState({savedContent:data})
      this.setState({dataLoaded:true});
      //console.log(this.state.savedContent)

    //} catch (error) {
    //    throw error;
    //}
  };

  updateComponent(status) {
    this.setState({dataLoaded: false});
    this.fetchSavedContent();
  }

  componentDidMount(){
      this._isMounted = true;

      if(this._isMounted){
          this.fetchSavedContent();
      }
  }

  handleCardRenderType(info){
    switch(info.content_type) {
      case 'news':
        return <NewsCard info={info} sessionId={this.props.sessionId} updateComponent={this.updateComponent}></NewsCard>
      case 'tv':
        return <TVCard info={info} sessionId={this.props.sessionId} updateComponent={this.updateComponent}></TVCard>;
      case 'radio':
        return <RadioCard info={info} sessionId={this.props.sessionId} updateComponent={this.updateComponent}></RadioCard>;
      default:
        return null;
    }
  }

  render(){

    if(!this.state.dataLoaded){
      return (<Box display="flex" justifyContent="center" alignItems="center"><CircularProgress></CircularProgress></Box>)
    }

    if(this.state.savedContent.length < 1){
      return (
        <Box width={1} height={"295px"}>
          <Box display="flex" justifyContent="center" alignItems="center" width={"100%"} height={"100%"} marginTop={"1"}>
            <img src={NoSavedContentImage} alt="Nenhum conteúdo salvo"></img>
          </Box>
        </Box>
      )
    }

    return (
      <div>
        <Grid container>
          {topBarSavedContent()}  
          <Grid item xs={12}>
            <Box paddingTop={3}>
              <List style={{maxHeight: '200px', overflow: 'auto'}}>            
                {this.state.savedContent.map((card) => (
                    <li key={`section-${card.id}`}>
                        <Box my={0.5}>{this.handleCardRenderType(card)}</Box>
                    </li>
                ))}
              </List>
            </Box>
          </Grid>
        </Grid>
      </div>
    )
  }
}