isdeleted updated all module menu is pending for isdeleted, isdeleted datas hide on all module without module manage page

This commit is contained in:
alaguraj 2025-08-12 18:07:17 +05:30
parent 214ce43ff9
commit a5a57a7cd7
8 changed files with 280 additions and 128 deletions

View File

@ -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",

View File

@ -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>

View File

@ -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>

View File

@ -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 */}

View File

@ -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 {

View File

@ -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>

View File

@ -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>

View File

@ -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}