From 8018b76128dbbb9bd4f3d7ad464d64ef7aa93817 Mon Sep 17 00:00:00 2001 From: FlorianSpeicher Date: Sat, 3 May 2025 19:47:21 +0200 Subject: [PATCH] Add dummy Payment page. --- 01-frontend/src/pages/Payment.tsx | 234 ++++++++++++++++++++++++++++-- 1 file changed, 219 insertions(+), 15 deletions(-) diff --git a/01-frontend/src/pages/Payment.tsx b/01-frontend/src/pages/Payment.tsx index 988475e..9c481c1 100644 --- a/01-frontend/src/pages/Payment.tsx +++ b/01-frontend/src/pages/Payment.tsx @@ -1,23 +1,227 @@ -import { useBasket } from "../helper/BasketProvider"; +import React, { useState } from 'react'; +import { + Box, + Button, + Container, + Step, + StepLabel, + Stepper, + Typography, + TextField, + Grid, + Paper, + List, + ListItem, + ListItemText, + Divider, + styled, +} from '@mui/material'; +import { useBasket } from '../helper/BasketProvider'; +import { useNavigate } from 'react-router-dom'; + +const Item = styled(Paper)(({ theme }) => ({ + backgroundColor: '#fff', + ...theme.typography.body2, + padding: theme.spacing(1), + textAlign: 'center', + })); + +const steps = ['Review Items', 'Shipping Details', 'Payment', 'Order Summary']; export default function Payment() { + const navigator = useNavigate(); const { basket, clearBasket } = useBasket(); + const [activeStep, setActiveStep] = useState(0); + const [shippingDetails, setShippingDetails] = useState({ + name: '', + address: '', + city: '', + postalCode: '', + }); + const [orderNumber, setOrderNumber] = useState(null); - if (basket.length === 0) { - return
Your basket is empty
; - } + const handleNext = () => { + if (activeStep === steps.length - 2) { + // Simulate order placement and generate order number + const generatedOrderNumber = `ORD-${Math.floor(Math.random() * 1000000)}`; + setOrderNumber(generatedOrderNumber); + clearBasket(); // Clear the basket after placing the order + } + setActiveStep((prevStep) => prevStep + 1); + }; + + const handleBack = () => { + setActiveStep((prevStep) => prevStep - 1); + }; + + const handleInputChange = (e: React.ChangeEvent) => { + const { name, value } = e.target; + setShippingDetails((prevDetails) => ({ + ...prevDetails, + [name]: value, + })); + }; + const handleClearBasket = () => { + clearBasket(); + }; + + const renderStepContent = (step: number) => { + switch (step) { + case 0: + return ( + + + Review Items + + + {basket.map((item) => ( + + + + ))} + + + + + ); + case 1: + return ( + + + Shipping Details + + + + + + + + + + + + + + + + + ); + case 2: + return ( + + + Payment + + + Payment method not implemented yet. + + + ); + case 3: + return ( + + + Order Summary + + + Thank you for your order! + + + Your order number is: {orderNumber} + + + Shipping Details: + + {shippingDetails.name}, {shippingDetails.address}, {shippingDetails.city},{' '} + {shippingDetails.postalCode} + + + Ordered Items: + + {basket.map((item) => ( + + + + ))} + + + ); + default: + return
Unknown step
; + } + }; return ( -
-

Payment Page

-
    - {basket.map((item) => ( -
  • - Item ID: {item.itemId}, Quantity: {item.quantity} -
  • - ))} -
- -
+ + + + Checkout + + + {steps.map((label) => ( + + {label} + + ))} + + {renderStepContent(activeStep)} + + + {activeStep === steps.length - 1 ? ( + + ) : ( + + )} + + + ); } \ No newline at end of file