Front-End Web Dev. with React Week 1
Front-End Web Development With React
Assignment Week 1
Menu Component
import React, { Component } from "react";
import { Card, CardImg, CardImgOverlay, CardText, CardBody, CardTitle } from "reactstrap";
import DishDetail from './DishdetailComponent';
class Menu extends Component{
constructor(props){
super(props);
// stores iproperties of this component
this.state = {
selectedDish: null
};
console.log('Menu component constructed');
}
onDishSelect(dish){
this.setState({
selectedDish: dish
});
}
render(){
console.log('renders menu component');
const menu = this.props.dishes.map((dish) => {
return (
<div key={ dish.id } className="col-12 col-md-5 m-1">
<Card onClick={ () => this.onDishSelect( dish ) } >
<CardImg width="100%" src={ dish.image } alt={ dish.name } />
<CardImgOverlay>
<CardTitle> { dish.name }</CardTitle>
</CardImgOverlay>
</Card>
</div>
);
});
return(
<div className="container">
<div className="row">
{ menu }
</div>
<DishDetail dish={this.state.selectedDish} />
</div>
);
}
componentDidMount(){
console.log('Menu component componentDidMounbt is invoked');
}
}
export default Menu;
Assignment Week 1 Coursera Solution
DishDetail Component
import React, { Component } from "react";
import { Card, CardImg, CardImgOverlay, CardText, CardBody, CardTitle } from "reactstrap";
class DishDetail extends Component{
constructor(props) {
super(props);
console.log(props);
// stores iproperties of this component
this.state = {
selectedDishDetail: this.props.dsdetail
};
}
renderDish(dish) {
if (dish != null) {
return (
<div className='col-12 col-md-5 m-1'>
<Card>
<CardImg width="100%" src={dish.image} alt={dish.name} />
<CardBody>
<CardTitle> {dish.name}</CardTitle>
<CardText> {dish.description} </CardText>
</CardBody>
</Card>
</div>
);
}
else {
return (
<div></div>
);
}
}
renderComments(comments){
if (comments == null) {
return (<div></div>)
}
const cmnts = comments.map(comment => {
return (
<li key={comment.id}>
<p>{comment.comment}</p>
<p>-- {comment.author},
{new Intl.DateTimeFormat('en-US', {
year: 'numeric',
month: 'long',
day: '2-digit'
}).format(new Date(comment.date))}
</p>
</li>
)
})
return (
<div className='col-12 col-md-5 m-1'>
<h4> Comments </h4>
<ul className='list-unstyled'>
{cmnts}
</ul>
</div>
)
}
render(){
const dish = this.props.dish
console.log(dish);
if (dish == null) {
return (<div></div>);
}
const dishItem = this.renderDish(dish);
const dishComment = this.renderComments(dish.comments);
return (
<div className='row'>
{dishItem}
{dishComment}
</div>
)
}
}
export default DishDetail;
Assignment Week 1
For Assignment Week 1 reference .js File is attached below