Jump to content
Search Community

Minjong

Members
  • Posts

    2
  • Joined

  • Last visited

Posts posted by Minjong

  1. (Hello this is my first forum post ever, please let me know if I can improve my post in any way :) )

    I've been loving using GSAP and recently started learning React and started utilizing GSAP with it.

    So, when I use TweenMax, it works totally fine but when I try to use TimelineLite/TimelineMax, it gives me an error. 


     

    Uncaught TypeError: gsap_TweenMax__WEBPACK_IMPORTED_MODULE_4__.TimelineLite.to is not a function
    

     

    It's unclear for me what's causing this. (Wondering I might be doing something wrong with importing? or my react code?)

    Below is the Comment component that I'm working on. 

     

    import React, { Component } from 'react'
    import axios from 'axios';
    import TimeAgo from 'react-timeago'
    //typical import
    import {TweenMax, Power2, TimelineLite} from "gsap/TweenMax";
     
    export default class Comment extends Component {
    
        constructor(props) {
            super(props);
            this.state = {
                isEditing: false,
                isDeleting: false,
                play: false,
                comment: {
                    title: this.props.comment.title,
                    content: this.props.comment.content,
                    number: this.props.comment.number,
                    time: this.props.comment.time
                }
            }
            this.handleEdit = this.handleEdit.bind(this);
            this.deleteConfirm = this.deleteConfirm.bind(this);
            this.deleteTransition = this.deleteTransition.bind(this);
            this.delete = this.delete.bind(this);
            this.deleteAfter = this.deleteAfter.bind(this);
            this.edit = this.edit.bind(this);
            this.cancel = this.cancel.bind(this);
            this.update = this.update.bind(this);
            // reference to the DOM node && reference to the animation
            this.myElement = null;
            this.myTween = null;
            this.deleteTween = null;
        }
    
        edit() { this.setState({ isEditing: true }); }
        cancel() { this.setState({ isEditing: false }) }
        update() {
            const obj = {
                title: this.state.comment.title,
                content: this.state.comment.content,
                number: this.state.comment.number
            };
            axios.post('http://localhost:4000/post/update/' + this.props.comment._id, obj)
                .then( res => {
                    console.log('Updated');
                    this.setState({
                        isEditing: false
                    })
                });
        }
    
        deleteConfirm() {
            this.setState(prevState => ({
                isDeleting: !prevState.isDeleting
            }))
            this.myTween.reverse();
            
            console.log(this.state.isDeleting);
        }
        deleteTransition() {
            this.deleteTween.play();
        }
        deleteAfter() {
            console.log('Delete after called');
            
        }
        delete() {
            // console.log(this.props.comment._id);
            axios.get('http://localhost:4000/post/delete/' + this.props.comment._id)
                .then(
                    this.props.removeComment(this.props.comment, this.props.comment._id)
                )
                .catch(err => console.log(err))
        }
        handleEdit = event => {
            const { value, name } = event.target;
            this.setState({
                ...this.state,
                comment: {
                    ...this.state.comment,
                    [name]: value
                }
            });
        }
        componentDidMount() {
            this.myTween = TimelineLite.to(this.myElement, .4, { opacity: 0.4, x: -80, ease: Power2.easeOut }).paused(true);
            this.deleteTween = TimelineLite.to(this.myElement, .4, { opacity: 0, x: -400, ease: Power2.easeOut, onComplete: this.deleteAfter }).paused(true);
        }
    
        render() {
            // const { title, content, number, time } = this.props.comment;
            if (this.state.isEditing) {
                return (
                    <div className="post-block">
                        <input type="text" name="title" autoComplete="off" value={ this.state.comment.title } onChange={ this.handleEdit } placeholder="Write Title..."></input>
                        <textarea type="text" name="content" autoComplete="off" value={ this.state.comment.content } onChange={ this.handleEdit } placeholder="Write Content..."></textarea>
                        <input type="number" name="number" autoComplete="off" value={ this.state.comment.number } onChange={ this.handleEdit } placeholder="Write Number..."></input>
                        <button onClick={ this.update }>Update</button>
                        <button onClick={ this.cancel }>Cancel</button>
                    </div>
                )
            } else {
                let time = new Date( this.state.comment.time );
                console.log(time);
                return (
                        <div className="post-block">
                            { this.state.isDeleting ? 
                                <div className="flex-container">
                                    <button onClick={ this.deleteTransition }>I'm sure! Get rid of it!!</button>
                                    <button onClick={ this.deleteConfirm }>Cancel</button>
                                </div>
                                : null 
                            }
                            <div ref={div => this.myElement = div} className={ this.state.isDeleting ? this.myTween.play() : null }>
                                <h4 className="title">{ this.state.comment.title } </h4>
                                <p><TimeAgo date={ this.state.comment.time }>{({ value }) => <p>{ value }</p>}</TimeAgo></p>
                                <p className="content">{ this.state.comment.content }</p>
                                <p>{ this.state.comment.number }</p>
                                <div className="change">
                                    <button onClick={ this.edit }>Edit</button>
                                    <button onClick={ this.deleteConfirm }>Delete</button>
                                </div>
                            </div>
                        </div>
                )
            }
            
        }
    }

     

     

×
×
  • Create New...