Skip to content

Instantly share code, notes, and snippets.

@BTMPL
Created December 9, 2017 08:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save BTMPL/b90728148e4bcae494a0acc8409d4cd9 to your computer and use it in GitHub Desktop.
Save BTMPL/b90728148e4bcae494a0acc8409d4cd9 to your computer and use it in GitHub Desktop.
import React from "react";
import { render } from "react-dom";
import PropTypes from "prop-types";
class TweetForm extends React.Component {
setRef = (el) => {
this.textArea = el;
}
render() {
return (
<div>
<textarea ref={this.setRef} />
<button onClick={() => {
this.props.onSubmit(this.textArea.value);
this.textArea.value = '';
}}>Dodaj Tweet</button>
</div>
)
}
}
class App extends React.Component {
state = {
tweets: this.props.tweets,
active: true,
color: 'blue'
};
handleSubmit = (value) => {
const newTweet = {
user: {
userName: 'Bartek',
userAvatar: 'https://github.com/btmpl.png',
}
, text: value,
date: (new Date()).toString()
};
this.setState({
tweets: [newTweet, ...this.state.tweets]
})
}
render() {
let list;
if(!this.state.tweets) list = <p>SUPER nie ma tweetow</p>;
else if(this.state.tweets.length === 0) list = <p>Nie ma Tweetow :( </p>
else list = this.state.tweets.map(item => <Tweet tweet={item} key={item.text} />)
return (
<div>
<TweetForm onSubmit={this.handleSubmit} />
{list}
</div>
)
}
}
const userName = "Bartosz";
const userAvatar = "https://github.com/btmpl.png";
const date = (new Date()).toString();
const UserDetails = (props) => {
return (
<div>
<img src={props.userAvatar} />
<b>{props.userName}</b>
</div>
)
}
UserDetails.propTypes = {
userName: PropTypes.string,
userAvatar: PropTypes.string
};
UserDetails.defaultProps = {
userName: 'Anonim',
};
const Tweet = (props) => {
return (
<div>
<UserDetails {...props.tweet.user} />
<time>{props.tweet.date}</time>
<p>{props.tweet.text}</p>
</div>
);
}
Tweet.propTypes = {
tweet: PropTypes.shape({
user: PropTypes.shape({
userName: PropTypes.string,
userAvatar: PropTypes.string,
}),
text: PropTypes.string
})
};
Tweet.defaultProps = {
userName: 'Anonim',
};
const tweets = [
{
user: {
userName: 'BTM',
userAvatar: 'https://github.com/btmpl.png'
},
date: (new Date()).toString(),
text: "Hello world!1"
},
{
user: {
userName: 'BTM',
userAvatar: 'https://github.com/btmpl.png'
},
date: (new Date()).toString(),
text: "Hello world!2"
},
{
user: {
userName: 'BTM',
userAvatar: 'https://github.com/btmpl.png'
},
date: (new Date()).toString(),
text: "Hello world!3"
},
{
user: {
userName: 'BTM',
userAvatar: 'https://github.com/btmpl.png'
},
date: (new Date()).toString(),
text: "Hello world!4"
},
{
user: {
userName: 'BTM',
userAvatar: 'https://github.com/btmpl.png'
},
date: (new Date()).toString(),
text: "Hello world!5"
},
]
render(
<App tweets={tweets} />,
document.getElementById('root')
);
export default App;
export {
Tweet,
UserDetails,
TweetForm
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment