diff --git a/src/App.tsx b/src/App.tsx index 2f57c17..0ad2a2f 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -6,28 +6,31 @@ import { createRoutesFromElements, } from 'react-router-dom'; -import Loader from '@common/Loader'; -import PageTitle from '@components/PageTitle'; -import Home from '@pages/Home'; -import Dashboard from '@pages/BranchManager/Dashboard'; -import BranchManagerLayout from '@layouts/BranchManagerLayout'; -import LoginPage from '@pages/User/LogIn'; -import UserLayout from '@layouts/UserLayout'; -import AddFoods from '@pages/BranchManager/Foods/AddFood'; -import FoodItem from '@pages/FoodItem'; -import AllFoodItems from '@pages/AllFoodItems'; -import FoodList from '@pages/BranchManager/FoodList'; -import { Gallery } from '@components/Gallery/Gallery'; +import Loader from '@/common/Loader'; +import PageTitle from '@/components/PageTitle'; +import Home from '@/pages/Home'; +import Dashboard from '@/pages/BranchManager/Dashboard'; +import BranchManagerLayout from '@/layouts/BranchManagerLayout'; +import LoginPage from '@/pages/User/LogIn'; +import UserLayout from '@/layouts/UserLayout'; +import AddFoods from '@/pages/BranchManager/Foods/AddFood'; +import FoodItem from '@/pages/FoodItem'; +import AllFoodItems from '@/pages/AllFoodItems'; +import FoodList from '@/pages/BranchManager/FoodList'; +import { Gallery } from '@/components/Gallery/Gallery'; import DiscountList from './pages/BranchManager/FoodList/DiscountList'; -import Cart from '@pages/Cart'; -import Checkout from '@pages/Checkout'; +import Cart from '@/pages/Cart'; +import Checkout from '@/pages/Checkout'; import { OrderHistory } from './components/User/OrderHistory/OrderHistory'; -import User from '@pages/BranchManager/Users'; -import UserAdd from '@pages/BranchManager/Users/AddUser'; -import UserEdit from '@pages/BranchManager/Users/EditUser'; -import EditFoods from '@pages/BranchManager/Foods/EditFood'; -import AddCategories from '@pages/BranchManager/Categories/AddCategories'; -import ViewCategories from './pages/BranchManager/Categories/ViewCategories'; +import User from '@/pages/BranchManager/Users'; +import UserAdd from '@/pages/BranchManager/Users/AddUser'; +import UserEdit from '@/pages/BranchManager/Users/EditUser'; +import EditFoods from '@/pages/BranchManager/Foods/EditFood'; +import AddCategories from '@/pages/BranchManager/Categories/AddCategories'; +import ViewCategories from '@/pages/BranchManager/Categories/ViewCategories'; +import AddCombos from '@/pages/BranchManager/FoodCombos/Add'; +import Combos from '@/pages/BranchManager/FoodCombos'; +import EditCombos from '@/pages/BranchManager/FoodCombos/Edit'; const routes = createRoutesFromElements( @@ -74,7 +77,7 @@ const routes = createRoutesFromElements( element={ <> - + } /> @@ -178,6 +181,35 @@ const routes = createRoutesFromElements( } /> + + + + + + } + /> + + + + + } + /> + + + + + } + /> + ; + +const ComboForm: FC = () => { + const Navigate = useNavigate(); + const { register, handleSubmit, formState, setValue } = + useForm({ + resolver: zodResolver(FormSchema), + }); + + const { errors } = formState; + + const [imageFile, setImageFile] = useState(null); + + useEffect(() => { + if (Object.keys(errors).length) { + console.log('Form errors:', errors); + } + }, [errors]); + + const onSubmit: SubmitHandler = async (data) => { + let imageUrl = data.image; + + if (imageFile) { + const formData = new FormData(); + formData.append('file', imageFile); + + try { + const uploadUrl = (import.meta as any).env.VITE_UPLOAD_URL; + const response = await fetch(`${uploadUrl}`, { + method: 'POST', + body: formData, + headers: { + 'Access-Control-Allow-Origin': '*', + 'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS', + 'Access-Control-Allow-Headers': 'Content-Type', + }, + }); + + if (response.ok) { + const result = await response.json(); + imageUrl = result.fileUrl; + setValue('image', imageUrl); + } else { + console.error('Image upload failed'); + return; + } + } catch (error) { + console.error('Error uploading image:', error); + return; + } + } + + const transformedData = { + cafeId: 'cafe 1', + available: 0, + deleted: 0, + ...data, + image: imageUrl, + foodIds: [], + }; + + try { + const apiUrl = (import.meta as any).env.VITE_API_URL; + const response = await fetch(`${apiUrl}/foodCombo`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify(transformedData), + }); + + if (response.ok) { + toast('Food combo added successfully', { type: 'success' }); + Navigate('/branch-manager/food-combos'); + } else { + toast('Failed to add food item', { type: 'error' }); + console.error('Failed to add food combo', response.statusText); + } + } catch (error) { + console.error('Error adding food combo', error); + toast('Failed to add food combo', { type: 'error' }); + } + }; + + const [foodIds] = useState([ + { key: 'Pizza', label: 'Pizza' }, + { key: 'Milk-Shake', label: 'Milk-Shake' }, + { key: 'Other', label: 'Other' }, + ]); + + return ( +
+
+
+

+ Add Food Combos +

+
+
+
+
+ +