For this step you'll need to fetch likes
data from the API exposed at https://wines-api.herokuapp.com
.
The URL you need are the following
GET https://wines-api.herokuapp.com/api/wines/:id/like
=> returns an object with a boolean property namedlike
POST https://wines-api.herokuapp.com/api/wines/:id/like
=> change thelike
status of the wine
Obviously, you'll need to add the following functions to the module responsible for calling the API
export function likeWine(id) {
return fetch(`${host}/api/wines/${id}/like`, {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({ like: true })
});
}
export function unlikeWine(id) {
...
}
export function isWineLiked(id) {
...
}
Now, you have to write a new component to display the like
button into a <Wine />
component. The button will be added in the card-action
section. This component will have the following contract
import React, { Component } from 'react';
import PropTypes from 'prop-types';
export class LikeButton extends Component {
static propTypes = {
wine: PropTypes.object
};
state = {
liked: false
};
...
});
when the wine is unliked, the button must look something like the following snippet
<a class="waves-effect waves-teal btn-flat">
<span>Like <i class="material-icons left">thumb_up</i></span>
</a>
when the wine is liked, the button must look something like the following snippet
<a class="waves-effect waves-teal btn-flat">
<span>Unlike <i class="material-icons left">thumb_down</i></span>
</a>
If you need to react to the change of a property value in a component, you can use the componentWillReceiveProps
function
import React, { Component } from 'react';
import PropTypes from 'prop-types';
export class LikeButton extends Component {
static propTypes = {
wine: PropTypes.object
};
state = {
liked: false
};
componentWillReceiveProps(nextProps) {
if (nextProps.wine !== this.props.wine) {
...
}
}
...
}
And now your like button component should look something like that
Now you're ready to add support for comments to the Wine application. Go to the next step to start writing it.