Home Reference Source Repository

component/Profile/ContentCourseUpdate.js

import React, { Component } from 'react'
import {Content, Card,CardTitle,CardText,Layout,Textfield,Chip,CardActions,Button} from 'react-mdl';
import { Router, Route, Link, browserHistory, IndexRoute  } from 'react-router'
import { connect } from "react-redux"

import "../../extra/material.js"

import { updateCourse,uploadCourse,uploadCourseFiles,fetchVendorCourse,fetchACourse } from "../Actions/courseActions"
import { saveTags,addTag,deleteTag} from "../Actions/tagActions"

import Toast from "../Toast.js"

var componentStyle = {
    margin: 'auto',
}
var formStyle = {
    marginTop: '5%'
}
var count = 1

@connect((store) => {
  return {
    user: store.user,
    course: store.course,
    profile: store.profile,
    tags: store.tags
  };
})/*dont add semicolon here!*/



class ContentCourseUpdate extends Component {
    /**
     * Check if array contains tag text
     * @param {array,text} array, text 
     * @return {boolean} boolean - return boolean
     */
    contains(a, text) {
        var i = a.length;
        while (i--) {
           if (a[i].text == text) {
               return true;
           }
        }
        return false;
    }

    /**
     * Handle add tag
     */
    handleAddTag(){
      const tags = this.props.tags
        var tagText = document.getElementById("addTagUpd").value
        if (tagText){
          if(!this.contains(tags,tagText)){
            if(tags.length<5){
              this.props.dispatch(addTag(tagText));
            }
          }
        }
        
    }
    /**
     * Handle delete tag
     */
    handleDelete(text){
        this.props.dispatch(deleteTag(text))
    }

    /**
     * Invoked immediately before a component is mounted, to get our state to current course
     */
    componentWillMount(){
        const {user} = this.props
        const {course}=this.props
        this.props.dispatch(fetchACourse(course.aCourseName));
    }
    
     /**
     * Invoked immediately after a component is mounted, to get text on textfield
     */
    componentDidUpdate(){
        const {course} = this.props
        document.getElementById("courseName").value=course.aCourse.courseName;
        document.getElementById("courseDescription").value=course.aCourse.courseDescription;
        document.getElementById("courseVideoId").value=course.aCourse.courseVideoId;
        if (course.aCourse.courseTags&&count==1){
            this.props.dispatch(saveTags(course.aCourse.courseTags));
            count--
        }

    }
    
    /**
     * Handle file selecting
     */
    handleFileSelect(evt) {
      const {course}=this.props
      var courseID = course.aCourse.courseID;
      var coursePrev = course.aCourse;
      evt.stopPropagation();
      evt.preventDefault();
      var file = evt.target.files[0];

      var fileName = file.name;
      var metadata = {
        'contentType': file.type
      };
      
      this.props.dispatch(uploadCourseFiles(courseID,coursePrev,{fileName,file,metadata}));
    }
    

    /**
     * Handle updating course
     */
    updateCourse(){
        const {course} = this.props
        /*the purchaser part is missing!!!!!!!!!!!*/
        var prevName=course.aCourse.courseName;
        var prevID=course.aCourse.courseID;
        var user = this.props.user.user
        var courseName = document.getElementById("courseName").value;
        var courseDescription = document.getElementById("courseDescription").value;
        var courseVideoId = document.getElementById("courseVideoId").value;
        var courseVendorEmail = user.email
        var courseID=prevID;
        const tags = this.props.tags
        var courseTags = tags
        var newCourse = {courseName, courseDescription, courseVendorEmail,courseVideoId,courseID,courseTags}
        this.props.dispatch(updateCourse(newCourse,courseID));
        
    }
    /**
    * Loads the course profile
    * @return {html} - returns course profile depending on type of user
    */
    render(){
        const tags = this.props.tags
        const mappedTags = tags.map(tag => 
            <Chip style={{marginRight:"3px"}} key={tag.text} onClose={()=>(this.handleDelete(tag.text))}>{tag.text}</Chip>
        )
        return(
            <Content className="learn-content">
                <div className="android-content mdl-layout__content">
                        <a name="top" />
                        <div style={{width: '80%', margin:'auto'}}>
                            
                            <CardText style={componentStyle}>

                                <p style={{color:'mediumblue',marginBottom:'0px'}}>Course Name</p>
                                <Textfield label="" className="form-control" ref="courseName" id="courseName"/>
                                </CardText>
                            <CardText style={componentStyle}>
                                <p style={{color:'mediumblue',marginBottom:'0px'}}>Course Description</p>
                                <Textfield  label="" ref="courseDescription" type="courseDescription" className="form-control" id="courseDescription"/>
                            </CardText>
                            <CardText style={componentStyle}>
                                <p style={{color:'mediumblue',marginBottom:'0px'}}>Course Video ID</p>
                                <Textfield  label="" ref="courseVideoId" type="courseVideoId" className="form-control" id="courseVideoId"/>
                            </CardText>
                            <CardText style={componentStyle}>
                                <Textfield style={{width:"100px"}} floatingLabel maxLength="20" label="Tags"  type="addTag" className="form-control" id="addTagUpd"/>
                                <Button onClick={this.handleAddTag.bind(this)}>add tag</Button>
                                
                            </CardText>

                            <CardText>{mappedTags}</CardText>
                            <CardText style={componentStyle}>
                                <p style={{color:'mediumblue',marginBottom:'0px'}}>Course Files</p>
                                <Textfield  label="Empty" ref="courseFiles" type="courseFiles" className="form-control" id="courseVideoId"/>
                            </CardText>
                        <div className="card__supporting-text mdl-color-text--white-600" id="messagesDiv">
                        <h6>Choose File to upload</h6>
                        <input type="file" id="file" name="file" onChange={this.handleFileSelect.bind(this)}/>
                        <span id="linkbox"></span>
                        </div>

                            <CardActions style={componentStyle}>
                                <Button onClick={this.updateCourse.bind(this)} accent ripple raised className="mdl-color--indigo mdl-color-text--white mdl-color-text--indigo btn btn-primary">Update Detail</Button>
                            </CardActions>
                        </div>
                    </div>
            </Content>
    )}
};



export default ContentCourseUpdate