|
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,
|
|
};
|
|
|