isdeleted updated all module menu is pending for isdeleted, isdeleted datas hide on all module without module manage page
This commit is contained in:
parent
214ce43ff9
commit
a5a57a7cd7
@ -98,9 +98,13 @@ const AddNewProduct = () => {
|
||||
const res = await client?.get(
|
||||
`/Dine360%20Food%20Sides%20Category?fields=[%22*%22]&limit_page_length=100&filters=[["restaurantbranch","=","${restaruntBranch}"]]`
|
||||
);
|
||||
setSidesCategoryData(res?.data?.data);
|
||||
if (res?.data?.data?.[0]) {
|
||||
const first = res?.data?.data[0]?.name;
|
||||
const sidesCategorys = res?.data?.data
|
||||
// Filter out deleted ones
|
||||
const activeSideCategory = sidesCategorys.filter(sidesCategory => sidesCategory.isdeleted !== 1);
|
||||
|
||||
setSidesCategoryData(activeSideCategory);
|
||||
if (activeSideCategory.length > 0) {
|
||||
const first = activeSideCategory[0]?.name;
|
||||
setActiveCategory(first);
|
||||
await getSideData(first);
|
||||
}
|
||||
@ -115,8 +119,10 @@ const AddNewProduct = () => {
|
||||
`/Dine360%20Food%20Sides?fields=[%22*%22]&limit_page_length=100&filters=[["sidecategoryid","=","${sidesCategoryName}"]]`
|
||||
);
|
||||
const data = sideRes?.data?.data || [];
|
||||
setSidesData(data);
|
||||
setSidesDataByCategory((prev) => ({ ...prev, [sidesCategoryName]: data }));
|
||||
// Filter out deleted ones
|
||||
const activeSides = data.filter(sides => sides.isdeleted !== 1);
|
||||
setSidesData(activeSides);
|
||||
setSidesDataByCategory((prev) => ({ ...prev, [sidesCategoryName]: activeSides }));
|
||||
// keep existing selectionByCategory for that category (do not clear)
|
||||
} catch (error) {
|
||||
console.error("Error fetching sides data:", error);
|
||||
@ -508,8 +514,7 @@ const AddNewProduct = () => {
|
||||
type="button"
|
||||
onClick={toggleSelectAll}
|
||||
aria-pressed={isAllSelected}
|
||||
className={`btn radius-8 ${
|
||||
isAllSelected ? "btn-bg-theme text-white" : "btn-outline-theme"
|
||||
className={`btn radius-8 ${isAllSelected ? "btn-bg-theme text-white" : "btn-outline-theme"
|
||||
}`}
|
||||
style={{ display: "inline-flex", alignItems: "center", gap: 6 }}
|
||||
>
|
||||
@ -547,8 +552,7 @@ const AddNewProduct = () => {
|
||||
{sidesCategoryData?.map((sidesCategory) => (
|
||||
<li
|
||||
key={sidesCategory?.name}
|
||||
className={`nav-item border rounded-2 px-3 py-3 bg-border-theme d-flex align-items-center gap-3 position-relative ${
|
||||
activeCategory === sidesCategory.name
|
||||
className={`nav-item border rounded-2 px-3 py-3 bg-border-theme d-flex align-items-center gap-3 position-relative ${activeCategory === sidesCategory.name
|
||||
? "bg-theme text-white"
|
||||
: ""
|
||||
}`}
|
||||
@ -587,8 +591,7 @@ const AddNewProduct = () => {
|
||||
onClick={() => toggleSide(side?.name)}
|
||||
>
|
||||
<div
|
||||
className={`card p-3 shadow-2 radius-8 h-100 border position-relative ${
|
||||
selected ? "bg-theme text-white" : "border-white"
|
||||
className={`card p-3 shadow-2 radius-8 h-100 border position-relative ${selected ? "bg-theme text-white" : "border-white"
|
||||
}`}
|
||||
style={{
|
||||
transition: "background-color .2s, color .2s",
|
||||
|
||||
@ -26,7 +26,7 @@ const ProductListInner = () => {
|
||||
const [isMenuFieldEditMode, setIsMenuFieldEditMode] = useState(false);
|
||||
const [editingMenuId, setEditingMenuId] = useState(null);
|
||||
const [formErrors, setFormErrors] = useState({});
|
||||
const [menuFieldDeleteConfirm, setMenuFieldDeleteConfirm] = useState({ show: false, id: null });
|
||||
const [menuFieldDeleteConfirm, setMenuFieldDeleteConfirm] = useState({ show: false, id: null, isDeleted: null });
|
||||
const [menuFieldsFormData, setMenuFieldsFormData] = useState({
|
||||
menuname: "",
|
||||
description: "",
|
||||
@ -37,14 +37,14 @@ const ProductListInner = () => {
|
||||
const [isMenuCategoryEditMode, setIsMenuCategoryEditMode] = useState(false);
|
||||
const [editingMenuCategoryId, setEditingMenuCategoryId] = useState(null);
|
||||
const [formMenuCategoryErrors, setFormMenuCategoryErrors] = useState({});
|
||||
const [menuCategoryDeleteConfirm, setMenuCategoryDeleteConfirm] = useState({ show: false, id: null });
|
||||
const [menuCategoryDeleteConfirm, setMenuCategoryDeleteConfirm] = useState({ show: false, id: null, isDeleted: null });
|
||||
const [menuCategoryFormData, setMenuCategoryFormData] = useState({
|
||||
menucategoryname: "",
|
||||
description: "",
|
||||
is_active: 0,
|
||||
});
|
||||
|
||||
const [menuItemDeleteConfirm, setMenuItemDeleteConfirm] = useState({ show: false, id: null });
|
||||
const [menuItemDeleteConfirm, setMenuItemDeleteConfirm] = useState({ show: false, id: null, isDeleted: null });
|
||||
|
||||
|
||||
const [restaruntBranch, setRestaruntBranch] = useState("")
|
||||
@ -217,8 +217,11 @@ const ProductListInner = () => {
|
||||
|
||||
const handleMenuFieldDelete = async () => {
|
||||
try {
|
||||
await client.delete(`/Dine360 Menu/${menuFieldDeleteConfirm.id}`);
|
||||
setMenuFieldDeleteConfirm({ show: false, id: null });
|
||||
const body = {
|
||||
isdeleted: menuFieldDeleteConfirm?.isDeleted == 0 ? 1 : 0
|
||||
}
|
||||
await client.put(`/Dine360 Menu/${menuFieldDeleteConfirm.id}`, body);
|
||||
setMenuFieldDeleteConfirm({ show: false, id: null, isDeleted: null });
|
||||
getMenuItem();
|
||||
} catch (error) {
|
||||
if (
|
||||
@ -316,10 +319,13 @@ const ProductListInner = () => {
|
||||
|
||||
const handleMenuCategoryDelete = async () => {
|
||||
try {
|
||||
await client.delete(`/Dine360%20Menu%20Category%20Link/${catMenuActive} - ${menuCategoryDeleteConfirm.id}`)
|
||||
const Body = {
|
||||
isdelete: menuCategoryDeleteConfirm.isDeleted == 0 ? 1 : 0
|
||||
}
|
||||
// await client.delete(`/Dine360%20Menu%20Category%20Link/${catMenuActive} - ${menuCategoryDeleteConfirm.id}`)
|
||||
|
||||
await client.delete(`/Dine360%20Menu%20Category/${menuCategoryDeleteConfirm.id}`);
|
||||
setMenuCategoryDeleteConfirm({ show: false, id: null });
|
||||
await client.put(`/Dine360%20Menu%20Category/${menuCategoryDeleteConfirm.id}`, Body);
|
||||
setMenuCategoryDeleteConfirm({ show: false, id: null, isDeleted: null });
|
||||
getMenuItem();
|
||||
} catch (error) {
|
||||
if (
|
||||
@ -337,8 +343,11 @@ const ProductListInner = () => {
|
||||
|
||||
const handleMenuItemDelete = async () => {
|
||||
try {
|
||||
await client.delete(`/Dine360%20Menu%20Category/${activeCategory}/${menuItemDeleteConfirm.id}`);
|
||||
setMenuItemDeleteConfirm({ show: false, id: null });
|
||||
const body = {
|
||||
isdelete: menuItemDeleteConfirm?.isDeleted == 0 ? 1 : 0
|
||||
}
|
||||
await client.put(`/Dine360%20Menu%20Category/${activeCategory}/${menuItemDeleteConfirm.id}`, body);
|
||||
setMenuItemDeleteConfirm({ show: false, id: null, isDeleted: null });
|
||||
getMenuItem();
|
||||
} catch (error) {
|
||||
if (
|
||||
@ -370,6 +379,12 @@ const ProductListInner = () => {
|
||||
<p className="text-sm mb-0 mt-1">${menu.price?.toFixed(2)}</p>
|
||||
</div>
|
||||
</div>
|
||||
{
|
||||
menu?.isdelete == 1 && (<Icon icon="mdi:block-helper" style={{
|
||||
color: "red", position: "absolute", top: "5%",
|
||||
left: "5%", zIndex: 1
|
||||
}} />)
|
||||
}
|
||||
<div className="position-absolute top-0 end-0 me-1 mt-1" onClick={(e) => e.stopPropagation()}>
|
||||
<div className="dropdown">
|
||||
<button
|
||||
@ -402,11 +417,18 @@ const ProductListInner = () => {
|
||||
onClick={(e) => {
|
||||
e.preventDefault();
|
||||
e.stopPropagation(); // optional
|
||||
setMenuItemDeleteConfirm({ show: true, id: menu.name });
|
||||
setMenuItemDeleteConfirm({ show: true, id: menu.name, isDeleted: menu.isdelete });
|
||||
}}
|
||||
>
|
||||
<Icon icon="fluent:delete-24-regular" className="menu-icon" />
|
||||
Delete
|
||||
{menu.isdelete == 1 ? (
|
||||
<>
|
||||
<Icon icon="mdi:restore" /> Restore
|
||||
</>
|
||||
) : (
|
||||
<>
|
||||
<Icon icon="fluent:delete-24-regular" /> Delete
|
||||
</>
|
||||
)}
|
||||
</Link>
|
||||
</li>
|
||||
</ul>
|
||||
@ -449,11 +471,14 @@ const ProductListInner = () => {
|
||||
onClick={() => handleCatMenuClick(menu?.menuname)}
|
||||
style={{ cursor: "pointer" }}
|
||||
>
|
||||
{menu.isdeleted !== 1 ? (
|
||||
<img
|
||||
src="/assets/images/menu/menu-icons/all-menu.png"
|
||||
alt="menu"
|
||||
className="w-28-px h-28-px"
|
||||
/>
|
||||
/>) : (
|
||||
<Icon icon="mdi:block-helper" style={{ color: "red" }} />
|
||||
)}
|
||||
<span className="line-height-1">{menu?.menuname}</span>
|
||||
<div className="position-absolute top-0 end-0 me-1 mt-1" onClick={(e) => e.stopPropagation()}>
|
||||
<div className="dropdown">
|
||||
@ -487,11 +512,18 @@ const ProductListInner = () => {
|
||||
onClick={(e) => {
|
||||
e.preventDefault();
|
||||
e.stopPropagation(); // optional
|
||||
setMenuFieldDeleteConfirm({ show: true, id: menu.name });
|
||||
setMenuFieldDeleteConfirm({ show: true, id: menu.name, isDeleted: menu.isdeleted });
|
||||
}}
|
||||
>
|
||||
<Icon icon="fluent:delete-24-regular" className="menu-icon" />
|
||||
Delete
|
||||
{menu.isdeleted === 1 ? (
|
||||
<>
|
||||
<Icon icon="mdi:restore" /> Restore
|
||||
</>
|
||||
) : (
|
||||
<>
|
||||
<Icon icon="fluent:delete-24-regular" /> Delete
|
||||
</>
|
||||
)}
|
||||
</Link>
|
||||
</li>
|
||||
</ul>
|
||||
@ -528,11 +560,14 @@ const ProductListInner = () => {
|
||||
>
|
||||
{/* Left: Icon and Name */}
|
||||
<div className="d-flex align-items-center gap-2">
|
||||
{menu.isdelete == 0 ? (
|
||||
<img
|
||||
src="/assets/images/menu/menu-icons/all-menu.png"
|
||||
alt="menu icon"
|
||||
alt="menu"
|
||||
className="w-28-px h-28-px"
|
||||
/>
|
||||
/>) : (
|
||||
<Icon icon="mdi:block-helper" style={{ color: "red" }} />
|
||||
)}
|
||||
<span className="line-height-1">{menu?.menucategoryname}</span>
|
||||
</div>
|
||||
|
||||
@ -569,10 +604,18 @@ const ProductListInner = () => {
|
||||
href="#"
|
||||
onClick={(e) => {
|
||||
e.preventDefault();
|
||||
setMenuCategoryDeleteConfirm({ show: true, id: menu.name }); // 👈 use menu
|
||||
setMenuCategoryDeleteConfirm({ show: true, id: menu.name, isDeleted: menu.isdelete }); // 👈 use menu
|
||||
}}
|
||||
>
|
||||
{menu.isdelete == 1 ? (
|
||||
<>
|
||||
<Icon icon="mdi:restore" /> Restore
|
||||
</>
|
||||
) : (
|
||||
<>
|
||||
<Icon icon="fluent:delete-24-regular" /> Delete
|
||||
</>
|
||||
)}
|
||||
</Link>
|
||||
</li>
|
||||
</ul>
|
||||
@ -680,23 +723,27 @@ const ProductListInner = () => {
|
||||
|
||||
<div className="modal-body">
|
||||
<div className="d-flex justify-content-between mb-1">
|
||||
<h6 className="text-lg mb-0">Confirm Delete</h6>
|
||||
<h6 className="text-lg mb-0"> {menuFieldDeleteConfirm?.isDeleted == 0 ? "Confirm to Delete" : "Confirm to Restore"}</h6>
|
||||
<button
|
||||
type="button"
|
||||
className="btn-close"
|
||||
onClick={() => setMenuFieldDeleteConfirm({ show: false, id: null })}
|
||||
onClick={() => setMenuFieldDeleteConfirm({ show: false, id: null, isDeleted: null })}
|
||||
></button>
|
||||
</div>
|
||||
<p className="m-0">Are you sure you want to delete this Menu?</p>
|
||||
<p className="mb-0">
|
||||
{menuFieldDeleteConfirm?.isDeleted === 0
|
||||
? "Are you sure you want to set this Menu Fields as Delete?"
|
||||
: "Are you sure you want to set this Menu Fields as Restore?"}
|
||||
</p>
|
||||
<div className="d-flex justify-content-end gap-2 mt-1 ">
|
||||
<button
|
||||
className="btn btn-outline-danger px-14 py-6 text-sm"
|
||||
onClick={() => setMenuFieldDeleteConfirm({ show: false, id: null })}
|
||||
onClick={() => setMenuFieldDeleteConfirm({ show: false, id: null, isDeleted: null })}
|
||||
>
|
||||
Cancel
|
||||
</button>
|
||||
<button className="btn btn-danger px-14 py-6 text-sm" onClick={handleMenuFieldDelete}>
|
||||
Delete
|
||||
{menuFieldDeleteConfirm?.isDeleted === 0 ? "Delete" : "Restore"}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
@ -779,23 +826,27 @@ const ProductListInner = () => {
|
||||
|
||||
<div className="modal-body">
|
||||
<div className="d-flex justify-content-between mb-1">
|
||||
<h6 className="text-lg mb-0">Confirm Delete</h6>
|
||||
<h6 className="text-lg mb-0"> {menuCategoryDeleteConfirm?.isDeleted == 0 ? "Confirm to Delete" : "Confirm to Restore"}</h6>
|
||||
<button
|
||||
type="button"
|
||||
className="btn-close"
|
||||
onClick={() => setMenuCategoryDeleteConfirm({ show: false, id: null })}
|
||||
onClick={() => setMenuCategoryDeleteConfirm({ show: false, id: null, isDeleted: null })}
|
||||
></button>
|
||||
</div>
|
||||
<p className="m-0">Are you sure you want to delete this Menu?</p>
|
||||
<p className="mb-0">
|
||||
{menuCategoryDeleteConfirm?.isDeleted === 0
|
||||
? "Are you sure you want to set this Menu Category as Delete?"
|
||||
: "Are you sure you want to set this Menu Category as Restore?"}
|
||||
</p>
|
||||
<div className="d-flex justify-content-end gap-2 mt-1 ">
|
||||
<button
|
||||
className="btn btn-outline-danger px-14 py-6 text-sm"
|
||||
onClick={() => setMenuCategoryDeleteConfirm({ show: false, id: null })}
|
||||
onClick={() => setMenuCategoryDeleteConfirm({ show: false, id: null, isDeleted: null })}
|
||||
>
|
||||
Cancel
|
||||
</button>
|
||||
<button className="btn btn-danger px-14 py-6 text-sm" onClick={handleMenuCategoryDelete}>
|
||||
Delete
|
||||
{menuCategoryDeleteConfirm?.isDeleted == 0 ? "Delete" : "Restore"}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
@ -812,23 +863,27 @@ const ProductListInner = () => {
|
||||
|
||||
<div className="modal-body">
|
||||
<div className="d-flex justify-content-between mb-1">
|
||||
<h6 className="text-lg mb-0">Confirm Delete</h6>
|
||||
<h6 className="text-lg mb-0"> {menuItemDeleteConfirm?.isDeleted == 0 ? "Confirm to Delete" : "Confirm to Restore"}</h6>
|
||||
<button
|
||||
type="button"
|
||||
className="btn-close"
|
||||
onClick={() => setMenuItemDeleteConfirm({ show: false, id: null })}
|
||||
onClick={() => setMenuItemDeleteConfirm({ show: false, id: null, isDeleted: null })}
|
||||
></button>
|
||||
</div>
|
||||
<p className="m-0">Are you sure you want to delete this Menu?</p>
|
||||
<p className="m-0">
|
||||
{menuItemDeleteConfirm?.isDeleted === 0
|
||||
? "Are you sure you want to set this Sides as Delete?"
|
||||
: "Are you sure you want to set this Sides as Restore?"}
|
||||
</p>
|
||||
<div className="d-flex justify-content-end gap-2 mt-1 ">
|
||||
<button
|
||||
className="btn btn-outline-danger px-14 py-6 text-sm"
|
||||
onClick={() => setMenuItemDeleteConfirm({ show: false, id: null })}
|
||||
onClick={() => setMenuItemDeleteConfirm({ show: false, id: null, isDeleted: null })}
|
||||
>
|
||||
Cancel
|
||||
</button>
|
||||
<button className="btn btn-danger px-14 py-6 text-sm" onClick={handleMenuItemDelete}>
|
||||
Delete
|
||||
{menuItemDeleteConfirm?.isDeleted == 0 ? "Delete" : "Restore"}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -30,7 +30,7 @@ const SidesPageInner = () => {
|
||||
image_preview: null,
|
||||
});
|
||||
const [errors, setErrors] = useState({});
|
||||
const [deleteConfirm, setDeleteConfirm] = useState({ show: false, id: null });
|
||||
const [deleteConfirm, setDeleteConfirm] = useState({ show: false, id: null, isDeleted: null });
|
||||
const [restaruntBranch, setRestaruntBranch] = useState("");
|
||||
|
||||
// Sides Category
|
||||
@ -44,7 +44,7 @@ const SidesPageInner = () => {
|
||||
description: "",
|
||||
});
|
||||
const [sidesCategoryErrors, setSidesCategoryErrors] = useState({});
|
||||
const [sidesCategoryDeleteConfirm, setSidesCategoryDeleteConfirm] = useState({ show: false, id: null });
|
||||
const [sidesCategoryDeleteConfirm, setSidesCategoryDeleteConfirm] = useState({ show: false, id: null, isDeleted: null });
|
||||
|
||||
useEffect(() => {
|
||||
const restarunt = localStorage.getItem("restaurantbranch");
|
||||
@ -199,8 +199,11 @@ const SidesPageInner = () => {
|
||||
|
||||
const handleDelete = async () => {
|
||||
try {
|
||||
await client.delete(`/Dine360%20Food%20Sides/${deleteConfirm?.id}`);
|
||||
setDeleteConfirm({ show: false, id: null });
|
||||
const body = {
|
||||
isdeleted: deleteConfirm.isDeleted == 0 ? 1 : 0
|
||||
}
|
||||
await client.put(`/Dine360%20Food%20Sides/${deleteConfirm?.id}`, body);
|
||||
setDeleteConfirm({ show: false, id: null, isDeleted: null });
|
||||
getSideData(activeCategory);
|
||||
} catch (error) {
|
||||
alert("Error deleting. It might be linked to other data.");
|
||||
@ -284,8 +287,11 @@ const SidesPageInner = () => {
|
||||
|
||||
const handleSidesCategoryDelete = async () => {
|
||||
try {
|
||||
await client.delete(`/Dine360%20Food%20Sides%20Category/${sidesCategoryDeleteConfirm.id}`);
|
||||
setSidesCategoryDeleteConfirm({ show: false, id: null });
|
||||
const body = {
|
||||
isdeleted: sidesCategoryDeleteConfirm.isDeleted == 0 ? 1 : 0
|
||||
}
|
||||
await client.put(`/Dine360%20Food%20Sides%20Category/${sidesCategoryDeleteConfirm.id}`, body);
|
||||
setSidesCategoryDeleteConfirm({ show: false, id: null, isDeleted: null });
|
||||
getSidesCategory();
|
||||
} catch (error) {
|
||||
if (
|
||||
@ -331,11 +337,21 @@ const SidesPageInner = () => {
|
||||
onClick={() => handleSidesCategoryClick(sidesCategory?.name)}
|
||||
style={{ cursor: "pointer" }}
|
||||
>
|
||||
|
||||
{
|
||||
sidesCategory?.isdeleted == 0 ? (
|
||||
<img
|
||||
src="/assets/images/menu/menu-icons/all-menu.png"
|
||||
alt="menu"
|
||||
className="w-28-px h-28-px"
|
||||
/>
|
||||
)
|
||||
:
|
||||
(
|
||||
<Icon icon="mdi:block-helper" style={{ color: "red" }} />
|
||||
)
|
||||
}
|
||||
|
||||
<span className="line-height-1">{sidesCategory?.sidecategoryname}</span>
|
||||
<div className="position-absolute top-0 end-0 me-1 mt-1" onClick={(e) => e.stopPropagation()}>
|
||||
<div className="dropdown">
|
||||
@ -366,14 +382,18 @@ const SidesPageInner = () => {
|
||||
className='dropdown-item px-16 py-8 d-flex align-items-center gap-2 rounded text-secondary-light bg-hover-neutral-200 text-hover-neutral-900'
|
||||
onClick={(e) => {
|
||||
e.preventDefault();
|
||||
setSidesCategoryDeleteConfirm({ show: true, id: sidesCategory.name });
|
||||
setSidesCategoryDeleteConfirm({ show: true, id: sidesCategory.name, isDeleted: sidesCategory.isdeleted });
|
||||
}}
|
||||
>
|
||||
<Icon
|
||||
icon='fluent:delete-24-regular'
|
||||
className='menu-icon'
|
||||
/>
|
||||
Delete
|
||||
{sidesCategory.isdeleted === 1 ? (
|
||||
<>
|
||||
<Icon icon="mdi:restore" /> Restore
|
||||
</>
|
||||
) : (
|
||||
<>
|
||||
<Icon icon="fluent:delete-24-regular" /> Delete
|
||||
</>
|
||||
)}
|
||||
</Link>
|
||||
</li>
|
||||
</ul>
|
||||
@ -417,13 +437,27 @@ const SidesPageInner = () => {
|
||||
</Link>
|
||||
</li>
|
||||
<li>
|
||||
<Link href="#" className='dropdown-item px-16 py-8 d-flex align-items-center gap-2 rounded text-secondary-light bg-hover-neutral-200 text-hover-neutral-900' onClick={(e) => { e.preventDefault(); setDeleteConfirm({ show: true, id: room.name }); }}>
|
||||
<Icon icon='fluent:delete-24-regular' className='menu-icon' /> Delete
|
||||
<Link href="#" className='dropdown-item px-16 py-8 d-flex align-items-center gap-2 rounded text-secondary-light bg-hover-neutral-200 text-hover-neutral-900' onClick={(e) => { e.preventDefault(); setDeleteConfirm({ show: true, id: room.name, isDeleted: room.isdeleted }); }}>
|
||||
{room.isdeleted === 1 ? (
|
||||
<>
|
||||
<Icon icon="mdi:restore" /> Restore
|
||||
</>
|
||||
) : (
|
||||
<>
|
||||
<Icon icon="fluent:delete-24-regular" /> Delete
|
||||
</>
|
||||
)}
|
||||
</Link>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
{
|
||||
room?.isdeleted == 1 && (<Icon icon="mdi:block-helper" style={{
|
||||
color: "red", position: "absolute", top: "5%",
|
||||
left: "5%", zIndex: 1
|
||||
}} />)
|
||||
}
|
||||
<div className="card-body text-center p-3">
|
||||
<img src={`${ImageBase}/${room.item_image}`} alt="" className="w-100-px h-100-px rounded-circle object-fit-cover" />
|
||||
<h6 className="text-md mb-0 mt-3">{room?.sidename}</h6>
|
||||
@ -526,23 +560,27 @@ const SidesPageInner = () => {
|
||||
|
||||
<div className="modal-body">
|
||||
<div className="d-flex justify-content-between mb-1">
|
||||
<h6 className="text-lg mb-0">Confirm Delete</h6>
|
||||
<h6 className="text-lg mb-0">{sidesCategoryDeleteConfirm?.isDeleted == 0 ? "Confirm to Delete" : "Confirm to Restore"}</h6>
|
||||
<button
|
||||
type="button"
|
||||
className="btn-close"
|
||||
onClick={() => setSidesCategoryDeleteConfirm({ show: false, id: null })}
|
||||
onClick={() => setSidesCategoryDeleteConfirm({ show: false, id: null, isDeleted: null })}
|
||||
></button>
|
||||
</div>
|
||||
<p className="m-0">Are you sure you want to delete this sidesCategory?</p>
|
||||
<p className="m-0">
|
||||
{sidesCategoryDeleteConfirm?.isDeleted == 0
|
||||
? "Are you sure you want to set this Sides as Delete?"
|
||||
: "Are you sure you want to set this Sides as Restore?"}
|
||||
</p>
|
||||
<div className="d-flex justify-content-end gap-2 mt-1 ">
|
||||
<button
|
||||
className="btn btn-outline-danger px-14 py-6 text-sm"
|
||||
onClick={() => setSidesCategoryDeleteConfirm({ show: false, id: null })}
|
||||
onClick={() => setSidesCategoryDeleteConfirm({ show: false, id: null, isDeleted: null })}
|
||||
>
|
||||
Cancel
|
||||
</button>
|
||||
<button className="btn btn-danger px-14 py-6 text-sm" onClick={handleSidesCategoryDelete}>
|
||||
Delete
|
||||
{sidesCategoryDeleteConfirm?.isDeleted == 0 ? "Delete" : "Restore"}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
@ -659,13 +697,17 @@ const SidesPageInner = () => {
|
||||
<div className="modal-content">
|
||||
<div className="modal-body">
|
||||
<div className="d-flex justify-content-between mb-1">
|
||||
<h6 className="text-lg mb-0">Confirm Delete</h6>
|
||||
<button type="button" className="btn-close" onClick={() => setDeleteConfirm({ show: false, id: null })}></button>
|
||||
<h6 className="text-lg mb-0"> {deleteConfirm?.isDeleted == 0 ? "Confirm to Delete" : "Confirm to Restore"}</h6>
|
||||
<button type="button" className="btn-close" onClick={() => setDeleteConfirm({ show: false, id: null, isDeleted: null })}></button>
|
||||
</div>
|
||||
<p>Are you sure you want to delete this item?</p>
|
||||
<p className="m-0">
|
||||
{deleteConfirm?.isDeleted === 0
|
||||
? "Are you sure you want to set this Sides as Delete?"
|
||||
: "Are you sure you want to set this Sides as Restore?"}
|
||||
</p>
|
||||
<div className="d-flex justify-content-end gap-2 mt-1">
|
||||
<button className="btn btn-outline-danger" onClick={() => setDeleteConfirm({ show: false, id: null })}>Cancel</button>
|
||||
<button className="btn btn-danger" onClick={handleDelete}>Delete</button>
|
||||
<button className="btn btn-outline-danger" onClick={() => setDeleteConfirm({ show: false, id: null, isDeleted: null })}>Cancel</button>
|
||||
<button className="btn btn-danger" onClick={handleDelete}> {deleteConfirm?.isDeleted == 0 ? "Delete" : "Restore"}</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -49,8 +49,10 @@ const MenuItemsCategoryInner = () => {
|
||||
const getMenuItem = async () => {
|
||||
try {
|
||||
const res = await client?.get(`/Dine360 Menu?fields=["*"]&limit_page_length=100`);
|
||||
setCatMenu(res?.data?.data || []);
|
||||
setCatMenuActive(res?.data?.data[0]?.name || [])
|
||||
const menuFieldRes = res?.data?.data
|
||||
const activeMenuFields = menuFieldRes.filter(menuField => menuField.isdeleted !== 1);
|
||||
setCatMenu(activeMenuFields || []);
|
||||
setCatMenuActive(activeMenuFields[0]?.name || [])
|
||||
} catch (error) {
|
||||
console.error("Error fetching menu list:", error);
|
||||
}
|
||||
@ -81,7 +83,10 @@ const MenuItemsCategoryInner = () => {
|
||||
|
||||
const menuLinks = menuRes?.data?.data || [];
|
||||
|
||||
const menuCategoryPromises = menuLinks.map(async (menuItem) => {
|
||||
const activeMenuCategoryLink = menuLinks.filter(menuCatLink => menuCatLink.isdeleted !== 1);
|
||||
console.log("activeMenuCategoryLink", activeMenuCategoryLink)
|
||||
|
||||
const menuCategoryPromises = activeMenuCategoryLink.map(async (menuItem) => {
|
||||
const res = await client.get(
|
||||
`/Dine360%20Menu%20Category?fields=["*"]&limit_page_length=100&filters=[["name","=","${menuItem.menucategory}"]]`
|
||||
);
|
||||
@ -106,7 +111,10 @@ const MenuItemsCategoryInner = () => {
|
||||
const res = await client.get(
|
||||
`/Dine360%20Menu%20Category/${category.name}?fields=["*"]&limit_page_length=100`
|
||||
);
|
||||
setMenuItems(res?.data?.data || []);
|
||||
const menuItem = res?.data?.data
|
||||
console.log("menuItem", menuItem)
|
||||
const activeMenuItem = menuItem?.menuitems_child?.filter(menuItem => menuItem.isdeleted !== 1);
|
||||
setMenuItems(activeMenuItem || []);
|
||||
} catch (error) {
|
||||
console.error("Error fetching menu items:", error);
|
||||
}
|
||||
@ -398,8 +406,6 @@ const MenuItemsCategoryInner = () => {
|
||||
{
|
||||
loading ? (
|
||||
<PageLoader />
|
||||
) : menuData?.length == 0 ? (
|
||||
<PageNoData />
|
||||
) : (
|
||||
<div className="row gy-4">
|
||||
{/* Menu Category - Always col-xxl-2 */}
|
||||
|
||||
@ -68,12 +68,15 @@ const TableOrderInner = () => {
|
||||
`/Dine360 Floor?fields=["*"]&limit_page_length=100&filters=[["restaurantbranch","=","${restaruntBranch}"]]`
|
||||
);
|
||||
const floors = res?.data?.data || [];
|
||||
setFloorData(floors);
|
||||
|
||||
if (floors.length > 0) {
|
||||
setSelectedFloor(floors[0].name);
|
||||
// Filter out deleted ones
|
||||
const activeFloors = floors.filter(floor => floor.isdeleted !== 1);
|
||||
setFloorData(activeFloors);
|
||||
|
||||
if (activeFloors.length > 0) {
|
||||
setSelectedFloor(activeFloors[0].name);
|
||||
setSelectedRoom(null);
|
||||
getRoomData(floors[0].name);
|
||||
getRoomData(activeFloors[0].name);
|
||||
} else {
|
||||
setSelectedFloor(null);
|
||||
setRoomData([]);
|
||||
@ -91,11 +94,12 @@ const TableOrderInner = () => {
|
||||
`/Dine360 Room?fields=["*"]&limit_page_length=100&filters=[["floor","=","${floorName}"]]`
|
||||
);
|
||||
const rooms = res?.data?.data || [];
|
||||
setRoomData(rooms);
|
||||
const activeRooms = rooms.filter(room => room.isdeleted !== 1);
|
||||
setRoomData(activeRooms);
|
||||
|
||||
if (rooms.length > 0) {
|
||||
setSelectedRoom(rooms[0].name);
|
||||
getTableData(rooms[0].name);
|
||||
if (activeRooms.length > 0) {
|
||||
setSelectedRoom(activeRooms[0].name);
|
||||
getTableData(activeRooms[0].name);
|
||||
} else {
|
||||
setSelectedRoom(null); // clear selection if no rooms
|
||||
setTables([]); // clear table data
|
||||
@ -112,7 +116,9 @@ const TableOrderInner = () => {
|
||||
const res = await client.get(
|
||||
`/Dine360 Table?fields=["*"]&limit_page_length=100&filters=[["room","=","${roomName}"]]`
|
||||
);
|
||||
setTables(res?.data?.data || []);
|
||||
const tables = res?.data?.data
|
||||
const activeRooms = tables.filter(table => table.isdeleted !== 1);
|
||||
setTables(activeRooms || []);
|
||||
} catch (error) {
|
||||
console.error("Error fetching table data:", error);
|
||||
} finally {
|
||||
|
||||
@ -14,7 +14,7 @@ const DateReservationMainComponent = () => {
|
||||
|
||||
const [dateReservation, setDateReservation] = useState([]);
|
||||
const [loading, setLoading] = useState(true);
|
||||
const [deleteConfirm, setDeleteConfirm] = useState({ show: false, id: null });
|
||||
const [deleteConfirm, setDeleteConfirm] = useState({ show: false, id: null, isDeleted: null });
|
||||
const [restaruntBranch, setRestaruntBranch] = useState("")
|
||||
|
||||
useEffect(() => {
|
||||
@ -66,8 +66,11 @@ const DateReservationMainComponent = () => {
|
||||
|
||||
const handleDelete = async () => {
|
||||
try {
|
||||
await client.delete(`/Dine360 Table Reservation Master/${deleteConfirm?.id}`);
|
||||
setDeleteConfirm({ show: false, id: null });
|
||||
const body = {
|
||||
isdeleted: deleteConfirm?.isDeleted == 0 ? 1 : 0
|
||||
}
|
||||
await client.put(`/Dine360 Table Reservation Master/${deleteConfirm?.id}`, body);
|
||||
setDeleteConfirm({ show: false, id: null, isDeleted: null });
|
||||
getReservationDate();
|
||||
} catch (error) {
|
||||
if (
|
||||
@ -145,13 +148,23 @@ const DateReservationMainComponent = () => {
|
||||
</button>
|
||||
<button onClick={(e) => {
|
||||
e.preventDefault();
|
||||
setDeleteConfirm({ show: true, id: reservation.name })
|
||||
setDeleteConfirm({ show: true, id: reservation.name, isDeleted: reservation?.isdeleted })
|
||||
}}
|
||||
type="button"
|
||||
className="bg-danger-focus text-danger-600 w-40-px h-40-px d-flex justify-content-center align-items-center rounded-circle"
|
||||
className={`w-40-px h-40-px d-flex justify-content-center align-items-center rounded-circle
|
||||
${reservation.isdeleted === 1
|
||||
? "bg-success-focus bg-hover-success-200 text-success-600"
|
||||
: "bg-danger-focus bg-hover-danger-200 text-danger-600"
|
||||
}`}
|
||||
>
|
||||
<Icon icon="fluent:delete-24-regular" className="menu-icon" />
|
||||
{reservation.isdeleted === 1 ? (
|
||||
<Icon icon="mdi:restore" />
|
||||
) : (
|
||||
<Icon icon="fluent:delete-24-regular" />
|
||||
)}
|
||||
</button>
|
||||
|
||||
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@ -181,19 +194,25 @@ const DateReservationMainComponent = () => {
|
||||
<button
|
||||
type="button"
|
||||
className="btn-close"
|
||||
onClick={() => setDeleteConfirm({ show: false, id: null })}
|
||||
onClick={() => setDeleteConfirm({ show: false, id: null, isDeleted: null })}
|
||||
></button>
|
||||
</div>
|
||||
<p>Are you sure you want to delete this Reservation?</p>
|
||||
<div>
|
||||
<p className="mb-0">
|
||||
{deleteConfirm?.isDeleted === 0
|
||||
? "Are you sure you want to set this Day as Delete?"
|
||||
: "Are you sure you want to set this Day as Restore?"}
|
||||
</p>
|
||||
</div>
|
||||
<div className="d-flex justify-content-end gap-2">
|
||||
<button
|
||||
className="btn btn-secondary"
|
||||
onClick={() => setDeleteConfirm({ show: false, id: null })}
|
||||
onClick={() => setDeleteConfirm({ show: false, id: null, isDeleted: null })}
|
||||
>
|
||||
Cancel
|
||||
</button>
|
||||
<button className="btn btn-danger" onClick={handleDelete}>
|
||||
Delete
|
||||
{deleteConfirm?.isDeleted === 0 ? "Delete" : "Restore"}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -22,7 +22,7 @@ const DayReservationMainComponent = () => {
|
||||
const [formData, setFormData] = useState({ day: "" });
|
||||
const [existingDays, setExistingDays] = useState([]);
|
||||
const [formError, setFormError] = useState("");
|
||||
const [deleteConfirm, setDeleteConfirm] = useState({ show: false, id: null });
|
||||
const [deleteConfirm, setDeleteConfirm] = useState({ show: false, id: null, isDeleted: null });
|
||||
const [restaruntBranch, setRestaruntBranch] = useState("")
|
||||
|
||||
useEffect(() => {
|
||||
@ -85,8 +85,12 @@ const DayReservationMainComponent = () => {
|
||||
const handleDeleteConfirm = async () => {
|
||||
if (!deleteConfirm.id) return;
|
||||
try {
|
||||
await client.delete(`/Dine360 Days/${deleteConfirm.id}`);
|
||||
setDeleteConfirm({ show: false, id: null });
|
||||
const body = {
|
||||
isdeleted: deleteConfirm?.isDeleted == 0 ? 1 : 0
|
||||
}
|
||||
|
||||
await client.put(`/Dine360 Days/${deleteConfirm.id}`, body);
|
||||
setDeleteConfirm({ show: false, id: null, isDeleted: null });
|
||||
getDayData();
|
||||
} catch (err) {
|
||||
alert("Delete failed.");
|
||||
@ -137,12 +141,23 @@ const DayReservationMainComponent = () => {
|
||||
|
||||
{/* Delete Button Top-Right */}
|
||||
<button
|
||||
className="remove-item-btn bg-danger-focus bg-hover-danger-200 text-danger-600 fw-medium w-40-px h-40-px d-flex justify-content-center align-items-center rounded-circle position-absolute"
|
||||
className={`remove-item-btn fw-medium w-40-px h-40-px d-flex justify-content-center align-items-center rounded-circle position-absolute
|
||||
${days.isdeleted === 1
|
||||
? "bg-success-focus bg-hover-success-200 text-success-600"
|
||||
: "bg-danger-focus bg-hover-danger-200 text-danger-600"
|
||||
}`}
|
||||
style={{ top: "8px", right: "8px" }}
|
||||
onClick={() => setDeleteConfirm({ show: true, id: days.name })}
|
||||
onClick={() =>
|
||||
setDeleteConfirm({ show: true, id: days.name, isDeleted: days?.isdeleted })
|
||||
}
|
||||
>
|
||||
<Icon icon="fluent:delete-24-regular" className="menu-icon" />
|
||||
{days.isdeleted === 1 ? (
|
||||
<Icon icon="mdi:restore" />
|
||||
) : (
|
||||
<Icon icon="fluent:delete-24-regular" />
|
||||
)}
|
||||
</button>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -205,20 +220,24 @@ const DayReservationMainComponent = () => {
|
||||
<div className="modal-body">
|
||||
<div className="mb-1 d-flex justify-content-between align-items-center">
|
||||
<h5 className="mb-0 text-lg">Delete Confirmation</h5>
|
||||
<button type="button" className="btn-close" onClick={() => setDeleteConfirm({ show: false, id: null })}></button>
|
||||
<button type="button" className="btn-close" onClick={() => setDeleteConfirm({ show: false, id: null, isDeleted: null })}></button>
|
||||
</div>
|
||||
<div>
|
||||
<p>Are you sure you want to delete this day?</p>
|
||||
<p className="mb-0">
|
||||
{deleteConfirm?.isDeleted === 0
|
||||
? "Are you sure you want to set this Day as Delete?"
|
||||
: "Are you sure you want to set this Day as Restore?"}
|
||||
</p>
|
||||
</div>
|
||||
<div className="d-flex justify-content-end align-items-center gap-2">
|
||||
<button
|
||||
className="btn btn-secondary"
|
||||
onClick={() => setDeleteConfirm({ show: false, id: null })}
|
||||
onClick={() => setDeleteConfirm({ show: false, id: null, isDeleted: null })}
|
||||
>
|
||||
Cancel
|
||||
</button>
|
||||
<button className="btn btn-danger" onClick={handleDeleteConfirm}>
|
||||
Yes, Delete
|
||||
{deleteConfirm?.isDeleted === 0 ? "Delete" : "Restore"}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -181,6 +181,8 @@ const DayReservationTableEnableInner = () => {
|
||||
};
|
||||
|
||||
const sortedTables = [...tables].sort((a, b) => a.tablename.localeCompare(b.tablename));
|
||||
|
||||
console.log("sortedTables", sortedTables)
|
||||
return (
|
||||
<>
|
||||
|
||||
@ -209,7 +211,7 @@ const DayReservationTableEnableInner = () => {
|
||||
</div>
|
||||
|
||||
<div className="row gy-3 gx-3 gx-lg-5 gy-lg-5 justify-content-center">
|
||||
{sortedTables.map((table) => (
|
||||
{sortedTables.filter((table) => table.isdeleted !== 1).map((table) => (
|
||||
<div
|
||||
className="col-xxl-2 col-lg-3 col-md-4 col-sm-6 col-6 text-center"
|
||||
key={table.name}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user