Channel Component

import React from 'react';
import './channel.scss';

import channel from './channeljs'

class Channel extends React.Component{
  constructor(props){
    super(props);
    this.state = {};
  }

  componentDidMount(){
    const script = document.createElement("script");
    script.src = "https://apis.google.com/js/client.js";
    script.onload = () => {
      window.gapi.load('client', () => {
        channel.getVidContent();
      });
    };

    document.body.appendChild(script);
  }

  render(){
    return(
      <div className="Channel">
        <section className="panel region">
          <div id="video-screen"></div>
          <div id="navigation">
            <img alt='' onClick={()=>channel.getVidContent(channel.yt_prevPageToken)} src={'/images/left.png'} />
            <img alt='' onClick={()=>channel.getVidContent()} src={'/images/home.png'} />
            <img alt='' onClick={()=>channel.getVidContent(channel.yt_nextPageToken)} src={"/images/right.png"} />
          </div>
        </section>

      </div>
    );
  }
}

export default Channel;
import $ from 'jquery';

class Channel{
  constructor(){
    this.pageTokens = [];
    this.apiKey = 'AIzaSyCDMr6toQGyDRFPChRsbQ2sheSQfTQLVqg';

    this.kplaylistId = 'UUQfwfsi5VrQ8yKZ-UWmAEFg';
    this.yt_nextPageToken = false;
    this.yt_prevPageToken = false;
    this.kclicked = false;
    this.kPlaylistt = [];
    this.kPlaylist = [];
    this.created = false;
    this.videoIds = [];
  }

  getVidContent(pageToken) {
    $('#navigation img').eq(1).attr('src', '/images/loading.gif')
    channel.option = {
      "part": ["snippet,contentDetails"],
      "playlistId": channel.kplaylistId,
      "maxResults": 5
    }

    if(pageToken)
    channel.option.pageToken = pageToken;

    window.gapi.client.init({
      'apiKey': channel.apiKey,
      'discoveryDocs': ['https://www.googleapis.com/discovery/v1/apis/youtube/v3/rest'],
    }).then(function() {
      return window.gapi.client.youtube.playlistItems.list(channel.option);
    }).then(function(response) {
      channel.yt_nextPageToken = response.result.nextPageToken;  
      channel.yt_prevPageToken = response.result.prevPageToken;
      channel.getVidData(response.result.items);
    }, function(reason) {
      console.log('Error: ' + reason.result.error.message);
    });
  }

  getVidData(items){
    this.videoIds = [];
    for(var v in items){
      this.videoIds.push(items[v].snippet.resourceId.videoId);
    }
    this.createPlayer();
  }

  createPlayer(){
    var html = ``;
    
    for(var v in this.videoIds){
      html += `
`; html += ``; html += `
`; } $('.panel #video-screen').html(html); $('#navigation img').eq(1).attr('src', '/images/home.png') } }//end class const channel = new Channel(); export default channel;
.panel{
  background:lightgrey;
  margin-top: 30px;
  border-radius:3px;
  #video-screen{
    display:grid;
    grid-template-columns:auto auto auto auto auto auto;
    grid-gap:15px;
    padding:15px;
    div{
      position:relative;
      padding-top:56.25%;
      iframe{
        position: absolute;
        top:0;
        left:0;
        width:100%;
        height:100%;
        border-width:0;
      }
    }
    div:nth-child(1){
      grid-column: 1 / span 3;
    }
    div:nth-child(2){
      grid-column: 4 / span 3;
    }
    div:nth-child(3){
      grid-column: 1 / span 2;
    }
    div:nth-child(4){
      grid-column: 3 / span 2;
    }
    div:nth-child(5){
      grid-column: 5 / span 2;
    }
  }
  #navigation{
    text-align: center;
    padding-bottom:10px;
    img{
      height:25px;
      margin: 0 2.5px;
    }
    img:hover{
      opacity:.5;
      cursor:pointer;
    }
  }
}

@media only screen and (max-width: 600px){
  .panel{
    #video-screen{
      grid-template-columns: 100%;
      div:nth-child(1){
        grid-column: 1 / span 1;
      }
      div:nth-child(2){
        grid-column: 1 / span 1;
      }
      div:nth-child(3){
        grid-column: 1 / span 1;
      }
      div:nth-child(4){
        grid-column: 1 / span 1;
      }
      div:nth-child(5){
        grid-column: 1 / span 1;
      }
    }
  }
}

GitHub: "https://github.com/Sokhavuth/emultimedia
Heroku: https://khmerweb-emultimedia.herokuapp.com/

Comments

Popular posts from this blog