1

I am having one issue displaying different video links. Here is my component using react-modal-video. When I inspect the page in chrome, I see that the id is attached to the video, but, it keeps playing the first link. I have my data in a separate js file like this...

I'm assuming that when I click open, it is opening every modal at once, therefore displaying the first video. I would appreciate any help!


const projectdata = [
    {
    img: applitrack,
    title: 'appliTrack',
    video: 'NpdoTEbQ_2g',
    js: faJs,
    python: faPython,
    css: faCss3Alt,
    gitLink: 'https://github.com/braddonako/jobTracker_django'
    },
    {
    img: brog,
    title: 'brog',
    video: 'k6v3so0ZiFk',
    js: faJs,
    react: faReact,
    node: faNode,
    css: faCss3Alt,
    gitLink: 'https://github.com/braddonako/Brog-react'
    },
    {
    img: whatToEat,
    title: 'whatToEat',
    video: 'UTZLh9Jl6ZU',
    js: faJs,
    react: faReact,
    python: faPython,
    css: faCss3Alt,
    gitLink: 'https://github.com/braddonako/capstone-front-end'
    },
    {
    img: blackjack,
    title: 'TfMS3gqyA84',
    video: 'NpdoTEbQ_2g',
    js: faJs,
    css: faCss3Alt,
    html: faHtml5,
    gitLink: 'https://github.com/braddonako/blackjack-project1'
    },
    {
    img: rockhounding,
    title: 'rockhounding',
    video: 'NpdoTEbQ_2g',
    js: faJs,
    css: faCss3Alt,
    html: faHtml5,
    node: faNode,
    gitLink: 'https://github.com/Jordanbrun/project2-rockhounding'
    },
    {
    img: ahaha,
    title: 'ahaha',
    video: 'NpdoTEbQ_2g',
    js: faJs,
    css: faCss3Alt,
    html: faHtml5,
    gitLink: 'https://github.com/braddonako/ahaha'
    }
    

]

export default projectdata;

    constructor(props) {
        super(props)
        this.state = {
            isOpen: false,
            video: null,
            videos: []
        }
        this.openModal = this.openModal.bind(this)
    }
    

    componentDidMount(){
        this.getAllVideos();
    }

    getAllVideos = () => {
        const allVideos = projectdata
        
        console.log(allVideos, '<--all videos')
        this.setState({
            videos: allVideos
        })
    }

    openModal(video) {
    this.setState({
        isOpen: true,
        video: video
    })
  }



    render() {

        const projects = projectdata.map((project, i) => {
            console.log(project)
            
            
            // const youtubeVideo = [];
            // youtubeVideo.push(project.video)
            // console.log(youtubeVideo)

        return (   
        <div className='my-work' id='work' key={i}>
            

          <div className='portfolio'>
              <div className='portfolio_item'>
                <img src={project.img} alt={project.img} className='portfolio__img'/>
                
                <div className='tag'>
                <div>
                <a href={project.gitLink} >
                <FontAwesomeIcon
                        icon={faGithub}
                        className='icon'
                     />
                    </a>
                     <ModalVideo key={project.video} channel='youtube' isOpen={this.state.isOpen} videoId={project.video} onClose={() => this.setState({ isOpen: false, video: null })} />
                    <button onClick={this.openModal} key={project.video}>
                    DEMO
                    </button>
                   
                </div>
                </div>
                  <div className='tech'>
                        <FontAwesomeIcon 
                        icon={project.js}
                        className='icon'
                        />          
                        <FontAwesomeIcon 
                        icon={project.python}
                        className='icon'
                        />         
                        <FontAwesomeIcon 
                        icon={project.css}
                        className='icon'
                        />       
                        <FontAwesomeIcon 
                        icon={project.react}
                        className='icon'
                        />      
                        <FontAwesomeIcon 
                        icon={project.node}
                        className='icon'
                        />   
                        <FontAwesomeIcon 
                        icon={project.html}
                        className='icon'
                        />   
                  </div>
              </div>
                
       
           </div>
        </div>
        )
    })
    return(
        <div>
        <h2 className='section__title section__title--work'>Projects</h2>
        <div className='portfolio'>
            {projects}  
        </div>
        </div>
    )
    }
}

export default Projects;```
braddonak
  • 11
  • 1
  • Hey @braddonak, you figure this out yet? I'm using this in a current project and have the modal switching out videos just fine. However, I believe we have different structural setups. I cannot quite clearly see what your component structure is, but if you still need help, let me know and I'll see what I can do. – weo3dev Nov 20 '20 at 17:27

0 Answers0