menu item deleted option updated
This commit is contained in:
parent
a5a57a7cd7
commit
efac879e03
@ -8,7 +8,8 @@ import PageNoData from "@/components/common-component/PageNoData";
|
|||||||
import Breadcrumb from "@/components/Breadcrumb";
|
import Breadcrumb from "@/components/Breadcrumb";
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
import { useRouter } from "next/navigation";
|
import { useRouter } from "next/navigation";
|
||||||
import { ImageBase } from "@utils/BaseUrl.utils";
|
import { Baseurl, ImageBase } from "@utils/BaseUrl.utils";
|
||||||
|
import axios from "axios";
|
||||||
|
|
||||||
const ProductListInner = () => {
|
const ProductListInner = () => {
|
||||||
|
|
||||||
@ -44,7 +45,7 @@ const ProductListInner = () => {
|
|||||||
is_active: 0,
|
is_active: 0,
|
||||||
});
|
});
|
||||||
|
|
||||||
const [menuItemDeleteConfirm, setMenuItemDeleteConfirm] = useState({ show: false, id: null, isDeleted: null });
|
const [menuItemDeleteConfirm, setMenuItemDeleteConfirm] = useState({ show: false, id: null, isDeleted: null, menu: null });
|
||||||
|
|
||||||
|
|
||||||
const [restaruntBranch, setRestaruntBranch] = useState("")
|
const [restaruntBranch, setRestaruntBranch] = useState("")
|
||||||
@ -69,7 +70,7 @@ const ProductListInner = () => {
|
|||||||
try {
|
try {
|
||||||
const res = await client?.get(`/Dine360 Menu?fields=["*"]&limit_page_length=100`);
|
const res = await client?.get(`/Dine360 Menu?fields=["*"]&limit_page_length=100`);
|
||||||
setCatMenu(res?.data?.data || []);
|
setCatMenu(res?.data?.data || []);
|
||||||
setCatMenuActive(res?.data?.data[0]?.name || []);
|
setCatMenuActive(res?.data?.data[0]?.menuname || []);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("Error fetching menu list:", error);
|
console.error("Error fetching menu list:", error);
|
||||||
}
|
}
|
||||||
@ -77,7 +78,7 @@ const ProductListInner = () => {
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (catMenu?.length > 0) {
|
if (catMenu?.length > 0) {
|
||||||
getMenuCategoryItems(catMenu[0]?.menuname);
|
getMenuCategoryItems(catMenu[0]?.name);
|
||||||
}
|
}
|
||||||
}, [catMenu]);
|
}, [catMenu]);
|
||||||
|
|
||||||
@ -109,7 +110,7 @@ const ProductListInner = () => {
|
|||||||
|
|
||||||
const categories = await Promise.all(menuCategoryPromises);
|
const categories = await Promise.all(menuCategoryPromises);
|
||||||
const validCategories = categories.filter(Boolean);
|
const validCategories = categories.filter(Boolean);
|
||||||
|
console.log("validCategories", validCategories)
|
||||||
setMenuData(validCategories);
|
setMenuData(validCategories);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("Error fetching menu categories:", error);
|
console.error("Error fetching menu categories:", error);
|
||||||
@ -131,12 +132,13 @@ const ProductListInner = () => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleCatMenuClick = async (menuname) => {
|
const handleCatMenuClick = async (menu) => {
|
||||||
await getMenuCategoryItems(menuname);
|
await getMenuCategoryItems(menu.name);
|
||||||
setCatMenuActive(menuname);
|
setCatMenuActive(menu.name);
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleMenuClick = async (menu) => {
|
const handleMenuClick = async (menu) => {
|
||||||
|
console.log("menu", menu)
|
||||||
try {
|
try {
|
||||||
const res = await client.get(
|
const res = await client.get(
|
||||||
`/Dine360%20Menu%20Category/${menu.name}?fields=["*"]&limit_page_length=100`
|
`/Dine360%20Menu%20Category/${menu.name}?fields=["*"]&limit_page_length=100`
|
||||||
@ -320,7 +322,7 @@ const ProductListInner = () => {
|
|||||||
const handleMenuCategoryDelete = async () => {
|
const handleMenuCategoryDelete = async () => {
|
||||||
try {
|
try {
|
||||||
const Body = {
|
const Body = {
|
||||||
isdelete: menuCategoryDeleteConfirm.isDeleted == 0 ? 1 : 0
|
isdeleted: menuCategoryDeleteConfirm.isDeleted == 0 ? 1 : 0
|
||||||
}
|
}
|
||||||
// await client.delete(`/Dine360%20Menu%20Category%20Link/${catMenuActive} - ${menuCategoryDeleteConfirm.id}`)
|
// await client.delete(`/Dine360%20Menu%20Category%20Link/${catMenuActive} - ${menuCategoryDeleteConfirm.id}`)
|
||||||
|
|
||||||
@ -341,28 +343,92 @@ const ProductListInner = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const handleMenuItemDelete = async () => {
|
const handleMenuItemDelete = async () => {
|
||||||
try {
|
try {
|
||||||
const body = {
|
const body = {
|
||||||
isdelete: menuItemDeleteConfirm?.isDeleted == 0 ? 1 : 0
|
name: menuItemDeleteConfirm?.menu?.name || '',
|
||||||
|
menuitemname: menuItemDeleteConfirm?.menu?.menuitemname || '',
|
||||||
|
price: menuItemDeleteConfirm?.menu?.price || 0,
|
||||||
|
is_active: menuItemDeleteConfirm?.menu?.is_active ? 1 : 0,
|
||||||
|
is_special: menuItemDeleteConfirm?.menu?.is_special ? 1 : 0,
|
||||||
|
availability_time: menuItemDeleteConfirm?.menu?.availability_time || '',
|
||||||
|
preparation_time: menuItemDeleteConfirm?.menu?.preparation_time || '',
|
||||||
|
description: menuItemDeleteConfirm?.menu?.description || '',
|
||||||
|
isdeleted: menuItemDeleteConfirm?.isDeleted == 0 ? 1 : 0
|
||||||
|
};
|
||||||
|
|
||||||
|
// // ✅ Convert image to File using Axios with arraybuffer
|
||||||
|
// async function getImageAsFile(imageUrl, fileName) {
|
||||||
|
// try {
|
||||||
|
// const response = await axios.get(imageUrl, {
|
||||||
|
// responseType: "arraybuffer", // Important for binary data
|
||||||
|
// });
|
||||||
|
// const mimeType = response.headers["content-type"] || "image/jpeg";
|
||||||
|
// const blob = new Blob([response.data], { type: mimeType });
|
||||||
|
// return new File([blob], fileName || "image.jpg", { type: mimeType });
|
||||||
|
// } catch (err) {
|
||||||
|
// console.error("Image fetch error:", err);
|
||||||
|
// return null;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// Prepare image if exists
|
||||||
|
// let imageFile = null;
|
||||||
|
// if (menuItemDeleteConfirm?.menu?.item_image) {
|
||||||
|
// const fullUrl = `${ImageBase}${menuItemDeleteConfirm.menu.item_image}`;
|
||||||
|
// const fileName = menuItemDeleteConfirm.menu.item_image.split("/").pop();
|
||||||
|
// imageFile = await getImageAsFile(fullUrl, fileName);
|
||||||
|
// }
|
||||||
|
|
||||||
|
// Prepare FormData
|
||||||
|
const formDataToSend = new FormData();
|
||||||
|
formDataToSend.append("endpoint", "Dine360 Menu Category");
|
||||||
|
// if (imageFile) {
|
||||||
|
// formDataToSend.append("file", imageFile);
|
||||||
|
// formDataToSend.append("fileid", "item_image");
|
||||||
|
// }
|
||||||
|
formDataToSend.append("childjson", JSON.stringify(body));
|
||||||
|
formDataToSend.append("childkey", "menuitems_child");
|
||||||
|
formDataToSend.append("docname", activeCategory);
|
||||||
|
formDataToSend.append("isimageupdateorcreate", 0);
|
||||||
|
|
||||||
|
// Send request
|
||||||
|
const response = await axios.post(
|
||||||
|
`${Baseurl}/Upload-Image-To-Frappe/parent-child`,
|
||||||
|
formDataToSend,
|
||||||
|
{
|
||||||
|
headers: {
|
||||||
|
Authorization: "token 482beca79d9c005:b8778f51fcca82b",
|
||||||
|
},
|
||||||
}
|
}
|
||||||
await client.put(`/Dine360%20Menu%20Category/${activeCategory}/${menuItemDeleteConfirm.id}`, body);
|
);
|
||||||
setMenuItemDeleteConfirm({ show: false, id: null, isDeleted: null });
|
|
||||||
|
console.log("response", response.data);
|
||||||
|
|
||||||
|
setMenuItemDeleteConfirm({ show: false, id: null, isDeleted: null, menu: null });
|
||||||
getMenuItem();
|
getMenuItem();
|
||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
if (
|
if (
|
||||||
error?.response?.data?.exception?.includes("DuplicateEntryError") ||
|
error?.response?.data?.exception?.includes("DuplicateEntryError") ||
|
||||||
error?.response?.data?.message?.includes("Duplicate entry")
|
error?.response?.data?.message?.includes("Duplicate entry")
|
||||||
) {
|
) {
|
||||||
alert("Menu Name already exists. Please use a different name.");
|
alert("Menu Name already exists. Please use a different name.");
|
||||||
} else if (error?.response?.data?.exception?.includes("LinkExistsError") ||
|
} else if (
|
||||||
error?.response?.data?.message?.includes("LinkExistsError")) {
|
error?.response?.data?.exception?.includes("LinkExistsError") ||
|
||||||
alert("Cannot delete or cancel because Dine360 Menu three is linked with Dine360 Menu Category ");
|
error?.response?.data?.message?.includes("LinkExistsError")
|
||||||
|
) {
|
||||||
|
alert("Cannot delete or cancel because Dine360 Menu three is linked with Dine360 Menu Category");
|
||||||
|
} else {
|
||||||
|
console.error("Unexpected error:", error);
|
||||||
|
alert("Something went wrong. Please try again.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const renderMenuItem = (menu) => (
|
const renderMenuItem = (menu) => (
|
||||||
<div key={menu.name} className="col-xxl-2 col-md-6 user-grid-card">
|
<div key={menu.name} className="col-xxl-2 col-md-6 user-grid-card">
|
||||||
<div className="border radius-16 overflow-hidden">
|
<div className="border radius-16 overflow-hidden">
|
||||||
@ -380,7 +446,7 @@ const ProductListInner = () => {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{
|
{
|
||||||
menu?.isdelete == 1 && (<Icon icon="mdi:block-helper" style={{
|
menu?.isdeleted == 1 && (<Icon icon="mdi:block-helper" style={{
|
||||||
color: "red", position: "absolute", top: "5%",
|
color: "red", position: "absolute", top: "5%",
|
||||||
left: "5%", zIndex: 1
|
left: "5%", zIndex: 1
|
||||||
}} />)
|
}} />)
|
||||||
@ -417,10 +483,10 @@ const ProductListInner = () => {
|
|||||||
onClick={(e) => {
|
onClick={(e) => {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
e.stopPropagation(); // optional
|
e.stopPropagation(); // optional
|
||||||
setMenuItemDeleteConfirm({ show: true, id: menu.name, isDeleted: menu.isdelete });
|
setMenuItemDeleteConfirm({ show: true, id: menu.name, isDeleted: menu.isdeleted, menu: menu });
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{menu.isdelete == 1 ? (
|
{menu.isdeleted == 1 ? (
|
||||||
<>
|
<>
|
||||||
<Icon icon="mdi:restore" /> Restore
|
<Icon icon="mdi:restore" /> Restore
|
||||||
</>
|
</>
|
||||||
@ -440,6 +506,8 @@ const ProductListInner = () => {
|
|||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|
||||||
|
console.log("menuData", menuData)
|
||||||
|
console.log("activecategory", activeCategory)
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
@ -468,7 +536,7 @@ const ProductListInner = () => {
|
|||||||
className={`nav-item border rounded-2 px-3 py-3 bg-border-theme d-flex align-items-center gap-3 position-relative ${catMenuActive === menu.menuname ? "bg-theme" : ""
|
className={`nav-item border rounded-2 px-3 py-3 bg-border-theme d-flex align-items-center gap-3 position-relative ${catMenuActive === menu.menuname ? "bg-theme" : ""
|
||||||
}`}
|
}`}
|
||||||
role="presentation"
|
role="presentation"
|
||||||
onClick={() => handleCatMenuClick(menu?.menuname)}
|
onClick={() => handleCatMenuClick(menu)}
|
||||||
style={{ cursor: "pointer" }}
|
style={{ cursor: "pointer" }}
|
||||||
>
|
>
|
||||||
{menu.isdeleted !== 1 ? (
|
{menu.isdeleted !== 1 ? (
|
||||||
@ -560,7 +628,7 @@ const ProductListInner = () => {
|
|||||||
>
|
>
|
||||||
{/* Left: Icon and Name */}
|
{/* Left: Icon and Name */}
|
||||||
<div className="d-flex align-items-center gap-2">
|
<div className="d-flex align-items-center gap-2">
|
||||||
{menu.isdelete == 0 ? (
|
{menu.isdeleted == 0 ? (
|
||||||
<img
|
<img
|
||||||
src="/assets/images/menu/menu-icons/all-menu.png"
|
src="/assets/images/menu/menu-icons/all-menu.png"
|
||||||
alt="menu"
|
alt="menu"
|
||||||
@ -604,10 +672,10 @@ const ProductListInner = () => {
|
|||||||
href="#"
|
href="#"
|
||||||
onClick={(e) => {
|
onClick={(e) => {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
setMenuCategoryDeleteConfirm({ show: true, id: menu.name, isDeleted: menu.isdelete }); // 👈 use menu
|
setMenuCategoryDeleteConfirm({ show: true, id: menu.name, isDeleted: menu.isdeleted }); // 👈 use menu
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{menu.isdelete == 1 ? (
|
{menu.isdeleted == 1 ? (
|
||||||
<>
|
<>
|
||||||
<Icon icon="mdi:restore" /> Restore
|
<Icon icon="mdi:restore" /> Restore
|
||||||
</>
|
</>
|
||||||
@ -867,7 +935,7 @@ const ProductListInner = () => {
|
|||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
className="btn-close"
|
className="btn-close"
|
||||||
onClick={() => setMenuItemDeleteConfirm({ show: false, id: null, isDeleted: null })}
|
onClick={() => setMenuItemDeleteConfirm({ show: false, id: null, isDeleted: null, menu: null })}
|
||||||
></button>
|
></button>
|
||||||
</div>
|
</div>
|
||||||
<p className="m-0">
|
<p className="m-0">
|
||||||
@ -878,7 +946,7 @@ const ProductListInner = () => {
|
|||||||
<div className="d-flex justify-content-end gap-2 mt-1 ">
|
<div className="d-flex justify-content-end gap-2 mt-1 ">
|
||||||
<button
|
<button
|
||||||
className="btn btn-outline-danger px-14 py-6 text-sm"
|
className="btn btn-outline-danger px-14 py-6 text-sm"
|
||||||
onClick={() => setMenuItemDeleteConfirm({ show: false, id: null, isDeleted: null })}
|
onClick={() => setMenuItemDeleteConfirm({ show: false, id: null, isDeleted: null, menu: null })}
|
||||||
>
|
>
|
||||||
Cancel
|
Cancel
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@ -131,12 +131,16 @@ const UpdateProduct = () => {
|
|||||||
try {
|
try {
|
||||||
const formDataToSend = new FormData();
|
const formDataToSend = new FormData();
|
||||||
formDataToSend.append("endpoint", "Dine360 Menu Category");
|
formDataToSend.append("endpoint", "Dine360 Menu Category");
|
||||||
formDataToSend.append("file", imageFile); // ✅ use imageFile
|
|
||||||
formDataToSend.append("fileid", "item_image");
|
formDataToSend.append("fileid", "item_image");
|
||||||
formDataToSend.append("childjson", JSON.stringify(body))
|
formDataToSend.append("childjson", JSON.stringify(body))
|
||||||
formDataToSend.append("childkey", "menuitems_child");
|
formDataToSend.append("childkey", "menuitems_child");
|
||||||
formDataToSend.append("docname", category);
|
formDataToSend.append("docname", category);
|
||||||
formDataToSend.append("isimageupdateorcreate", 1);
|
if (imageFile) {
|
||||||
|
formDataToSend.append("isimageupdateorcreate", 1); // ✅ new image uploaded
|
||||||
|
formDataToSend.append("file", imageFile);
|
||||||
|
} else {
|
||||||
|
formDataToSend.append("isimageupdateorcreate", 0); // ✅ keep old image
|
||||||
|
}
|
||||||
console.log(formDataToSend)
|
console.log(formDataToSend)
|
||||||
const response = await axios.post(`${Baseurl}/Upload-Image-To-Frappe/parent-child`, formDataToSend, {
|
const response = await axios.post(`${Baseurl}/Upload-Image-To-Frappe/parent-child`, formDataToSend, {
|
||||||
headers: {
|
headers: {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user