Skip to content

Instantly share code, notes, and snippets.

@fobbyal
Last active January 28, 2016 19:53
Show Gist options
  • Save fobbyal/b0554963643eb22845a2 to your computer and use it in GitHub Desktop.
Save fobbyal/b0554963643eb22845a2 to your computer and use it in GitHub Desktop.
export default class CardsTable extends React.Component {
constructor(props) {
super(props);
this.state = {data: []};
}
createDuplicates = (arr) => {
let doubleArr = arr.slice(0);
for (let obj of arr) {
let clone = JSON.parse(JSON.stringify(obj));
clone.id = `${obj.id}@2`;
doubleArr.push(clone);
}
return doubleArr;
}
loadGhipy = (data) => {
this.setState({data: []});
let baseUrl = 'http://api.giphy.com/v1/gifs/search?q',
keyword = data.keyword || 'cards',
limit = data.number || 1,
apikey = 'dc6zaTOxFJmzC';
loadAjax(`${baseUrl}=${keyword}&api_key=${apikey}&limit=${limit}`,
(xhr) => {
let cardsData = JSON.parse(xhr.responseText),
doubleData = this.createDuplicates(cardsData.data);
this.setState({data: doubleData});
}
);
}
handleFormSubmit = (formData) => {
this.loadGhipy(formData);
}
componentDidMount = () => {
let dummyData = [];
this.loadGhipy(dummyData);
}
render = () => {
return (
<div className="cards-table">
<h2 className="cards-table__title">{this.props.title}</h2>
<CardsForm onFormSubmit={this.handleFormSubmit} />
<CardsList data={this.state.data} />
</div>
);
}
}
export default class CardsList extends React.Component {
constructor(props) {
super(props);
this.state = {
turns: 0,
change: false
};
}
handleCardClick = (i) => {
let itemClick = this.props.data[i].slug;
let t=this.state.turns + 1
this.setState(
{turns: t, change: t>=2 }
);
}
render() {
return (
<div className="cards-list">
{this.props.data.map((card, i) => {
return (
<Card onClick={this.handleCardClick.bind(this,i)}
title={card.slug}
key={card.id}
bgImage={card.images.original.url}
/>
);
})}
</div>
);
}
}
export default class Card extends React.Component {
constructor(props) {
super(props);
this.state = {
active: false
};
}
handleclick = (ev) => {
this.setState({active: !this.state.active});
this.props.onClick();
}
render() {
let imgUrl = this.props.bgImage,
CardBackStyle = {
backgroundImage: 'url(' + imgUrl + ')',
backgroundSize: 'cover'
},
activeClass = this.state.active ? 'clicked' : 'not-clicked',
classes = `card ${activeClass}`;
return (
<div className={classes} onClick={this.handleclick} >
<div className="card__container">
<div className="card__front"></div>
<div className="card__back" style={CardBackStyle}>
<h4 className="card__title"> {this.props.title} </h4>
</div>
</div>
</div>
);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment