tosanoob's picture
update a lot
0d37b12
import { useState, useEffect } from 'react';
import { Modal, Button, Container, Row, Col, Card, Form, Alert, Image } from 'react-bootstrap';
import AdminTemplate from "../../templates/AdminTemplate";
import DataStorage from '../../organisms/DataStorage';
import axios from 'axios';
import { useNavigate, useSearchParams } from 'react-router-dom';
export default function AdminMenuEditPage() {
const navigate = useNavigate();
useEffect(() => {
if (!DataStorage.get('isLoggedInAdmin')) {
navigate('/admin-login');
}
}, [navigate]);
const [searchParams] = useSearchParams();
const selectedItem = searchParams.get('id') || null;
const [error, setError] = useState("");
// const [loading, setLoading] = useState(true);
const [itemDetails, setItemDetails] = useState({
id: '',
item_name: '',
item_type: '1',
price: '',
description: '',
image_url: ''
});
const [showDeleteModal, setShowDeleteModal] = useState(false);
const handleShowDeleteModal = () => {
setShowDeleteModal(true);
}
const handleCloseDeleteModal = () => {
setShowDeleteModal(false);
}
const handleSubmit = async () => {
itemDetails.price = Number(itemDetails.price);
itemDetails.item_type = Number(itemDetails.item_type);
if (selectedItem) {
axios.patch(process.env.REACT_APP_API_URL + `/menu-items/${selectedItem}`, itemDetails)
.then((response) => {
navigate('/admin-menu');
})
.catch((error) => {
setError(JSON.stringify(error));
})
} else {
axios.post(process.env.REACT_APP_API_URL + `/menu-items`, itemDetails)
.then((response) => {
navigate('/admin-menu');
})
.catch((error) => {
setError(JSON.stringify(error));
})
}
}
const handleChange = (e) => {
const { name, value } = e.target;
setItemDetails((prevDetails) => ({
...prevDetails,
[name]: value, // Sử dụng tên của field để cập nhật động
}));
};
const handleAvatarUrlChange = (e) => {
const url = e.target.value;
setItemDetails((prevData) => ({
...prevData,
image_url: url // Cập nhật URL ảnh
}));
console.log(url);
};
const confirmDelete = async () => {
if (selectedItem) {
axios.delete(process.env.REACT_APP_API_URL + `/menu-items/${selectedItem}`)
.then((response) => {
handleCloseDeleteModal();
navigate('/admin-menu');
})
.catch((error) => {
setError(JSON.stringify(error));
})
}
}
useEffect(() => {
const fetchItemDetail = async () => {
if (selectedItem) {
try {
const response = await axios.get(process.env.REACT_APP_API_URL + `/menu-items/${selectedItem}`);
setItemDetails(response.data);
// setLoading(false);
} catch (error) {
setError(JSON.stringify(error));
}
} else {
setItemDetails(
{
id: '',
item_name: '',
item_type: '1',
price: '',
description: '',
image_url: ''
}
)
}
}
fetchItemDetail();
}, [selectedItem])
return (
<AdminTemplate content={(
<Container className='text-center align-items-center justify-content-center' style={{ minHeight: '80vh' }}>
{/* Modal xác nhận xóa */}
<Modal show={showDeleteModal} onHide={handleCloseDeleteModal}>
<Modal.Header closeButton>
<Modal.Title>Xác nhận xóa</Modal.Title>
</Modal.Header>
<Modal.Body>Bạn có chắc chắn muốn xóa món này khỏi menu không?</Modal.Body>
<Modal.Footer>
<Button variant="secondary" onClick={handleCloseDeleteModal}>
Hủy
</Button>
<Button variant="danger" onClick={confirmDelete}>
Xóa
</Button>
</Modal.Footer>
</Modal>
<Row className="align-items-center">
{/* <Col xs={1} md={2}></Col> */}
<Col>
<Card style={{ width: '100%' }} className='justify-content-center'>
<Card.Header>
<Card.Title className='mt-1 text-center'>{selectedItem ? 'Chỉnh sửa thông tin chi nhánh' : 'Tạo chi nhánh'}</Card.Title>
</Card.Header>
<Card.Body>
<Form>
{error && <Alert variant="danger">{error}</Alert>}
<Row className="mb-3">
<Col xs={12} className="text-center mb-3">
{/* Hiển thị ảnh từ URL */}
<Image
src={itemDetails.image_url || ''} // Hiển thị ảnh đại diện từ URL
alt="Ảnh món"
style={{ width: "100%", maxWidth: "100%", height: "auto" }}
className="mb-3"
/>
<Form.Group controlId="formImageUrl">
<Form.Label>URL ảnh món</Form.Label>
<Form.Control
type="text"
placeholder="Nhập URL ảnh"
value={itemDetails.image_url || ''}
onChange={handleAvatarUrlChange} // Gọi hàm khi URL thay đổi
/>
</Form.Group>
</Col>
<Col xs={12} className="mb-3">
<Form.Group controlId="formName">
<Form.Label>Tên món</Form.Label>
<Form.Control
type="text"
name="item_name"
placeholder={selectedItem ? 'Đang tải dữ liệu...' : 'Tên món'}
value={itemDetails.item_name || ''}
onChange={handleChange}
/>
</Form.Group>
</Col>
<Col xs={12} className="mb-3">
<Form.Group controlId="formName">
<Form.Label>Id món</Form.Label>
<Form.Control
type="text"
name="id"
disabled={selectedItem ? true : false}
placeholder={selectedItem ? 'Đang tải dữ liệu...' : ' id món'}
value={itemDetails.id || ''}
onChange={handleChange}
/>
</Form.Group>
</Col>
<Col xs={12} className="mb-3">
<Form.Group controlId="formText" className="mb-3">
<Form.Label>Mô tả món</Form.Label>
<Form.Control
as="textarea"
name="description"
placeholder={selectedItem ? 'Đang tải dữ liệu...' : ' tả món'}
rows={3}
value={itemDetails.description || ''}
onChange={handleChange}
/>
</Form.Group>
</Col>
<Col xs={12} className='mb-3'>
<Form.Group controlId="formType" className="mb-3">
<Form.Label>Chọn danh mục món ăn</Form.Label>
<Form.Select name='item_type' value={itemDetails.item_type || '1'} onChange={handleChange}>
<option value="1">Món chính</option>
<option value="2">Tráng miệng</option>
<option value="3">Đồ uống</option>
</Form.Select>
</Form.Group>
</Col>
<Col xs={12} className='mb-5'>
<Form.Group>
<Form.Label>Nhập giá tiền</Form.Label>
<Form.Control
type='text'
name='price'
placeholder={selectedItem ? 'Đang tải dữ liệu...' : 'Giá món'}
value={itemDetails.price || ''}
onChange={handleChange}
/>
</Form.Group>
</Col>
<Col xs={12} className='mb-3'>
<Button variant="primary" type="button" className='mx-5' onClick={handleSubmit}>
{selectedItem ? 'Cập nhật' : 'Tạo mới'}
</Button>
{selectedItem ?
(<Button variant="danger" type="button" className='mx-5' onClick={handleShowDeleteModal}>
Xóa
</Button>) : (<></>)
}
</Col>
</Row>
</Form>
</Card.Body>
</Card>
</Col>
{/* <Col xs={1} md={2}></Col> */}
</Row>
</Container>
)} />
)
}