test2 / client /src /components /ItemDisplay.jsx
jaothan's picture
Upload 36 files
050d2e1 verified
import PropTypes from 'prop-types';
import Container from 'react-bootstrap/Container';
import Row from 'react-bootstrap/Row';
import Col from 'react-bootstrap/Col';
import Button from 'react-bootstrap/Button';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { faTrash } from '@fortawesome/free-solid-svg-icons/faTrash';
import faCheckSquare from '@fortawesome/fontawesome-free-regular/faCheckSquare';
import faSquare from '@fortawesome/fontawesome-free-regular/faSquare';
import './ItemDisplay.scss';
export function ItemDisplay({ item, onItemUpdate, onItemRemoval }) {
const toggleCompletion = () => {
fetch(`/api/items/${item.id}`, {
method: 'PUT',
body: JSON.stringify({
name: item.name,
completed: !item.completed,
}),
headers: { 'Content-Type': 'application/json' },
})
.then((r) => r.json())
.then(onItemUpdate);
};
const removeItem = () => {
fetch(`/api/items/${item.id}`, { method: 'DELETE' }).then(() =>
onItemRemoval(item),
);
};
return (
<Container fluid className={`item ${item.completed && 'completed'}`}>
<Row>
<Col xs={2} className="text-center">
<Button
className="toggles"
size="sm"
variant="link"
onClick={toggleCompletion}
aria-label={
item.completed
? 'Mark item as incomplete'
: 'Mark item as complete'
}
>
<FontAwesomeIcon
icon={item.completed ? faCheckSquare : faSquare}
/>
<i
className={`far ${
item.completed ? 'fa-check-square' : 'fa-square'
}`}
/>
</Button>
</Col>
<Col xs={8} className="name">
{item.name}
</Col>
<Col xs={2} className="text-center remove">
<Button
size="sm"
variant="link"
onClick={removeItem}
aria-label="Remove Item"
>
<FontAwesomeIcon
icon={faTrash}
className="text-danger"
/>
</Button>
</Col>
</Row>
</Container>
);
}
ItemDisplay.propTypes = {
item: PropTypes.shape({
id: PropTypes.string,
name: PropTypes.string,
completed: PropTypes.bool,
}),
onItemUpdate: PropTypes.func,
onItemRemoval: PropTypes.func,
};