diff --git a/01-frontend/public/locales/de/translation.json b/01-frontend/public/locales/de/translation.json index 1d3134f..24e0224 100644 --- a/01-frontend/public/locales/de/translation.json +++ b/01-frontend/public/locales/de/translation.json @@ -1,6 +1,8 @@ { "account": "Konto", "accountDeleted": "Konto erfolgreich gelöscht!", + "active": "laufend", + "activeOrder": "Laufende Bestellung", "address": "Adresse", "addToCart": "In den Warenkorb", "addedToCart": "Produkt wurde erfolgreich dem Warenkorb hinzugefügt", @@ -10,6 +12,7 @@ "back": "Zurück", "backToHome": "Zurück zur Startseite", "cancel": "Abbrechen", + "cancelOrder": "Bestellung stornieren", "categories": "Kategorien", "category": "Kategorie", "checkout": "Zur Kasse", @@ -28,11 +31,19 @@ "freeShipping": "Kostenloser Versand ab 50 € Bestellwert", "gardenSupplies": "Gartenzubehör", "inStock": "Verfügbar", + "item": "Artikel", + "items": "Artikel", "lastName": "Nachname", "logout": "Ausloggen", "myAccount": "Mein Konto", + "myOrders": "Meine Bestellungen", "name": "Name", "next": "Weiter", + "noActiveOrders": "Keine laufenden Bestellungen.", + "noPreviousOrders": "Keine vergangenen Bestellungen.", + "order": "Bestellung", + "orderCancelled": "Folgende Bestellung wurde storniert:", + "orderDate": "Bestelldatum", "orderedItems": "Bestellte Artikel", "orders": "Bestellungen", "orderSummary": "Bestellübersicht", @@ -44,7 +55,10 @@ "phone": "Telefon", "placeOrder": "Zahlungspflichtig bestellen", "postalCode": "Postleitzahl", + "previous": "vergangen", + "previousOrder": "Vergangene Bestellung", "price": "Preis", + "pricePerItem": "Stückpreis", "productDoesNotExist": "Dieses Produkt existiert nicht oder wurde bereits gelöscht.", "productNotFound": "Produkt nicht gefunden!", "quantity": "Anzahl", @@ -56,8 +70,10 @@ "save": "Speichern", "search": "Suchen", "seeds": "Saatgut", + "shippingAddress": "Versandadresse", "shippingDetails": "Versand", "submit": "Senden", + "sum": "Gesamtsumme", "technicalComponents": "Technik", "thanksForOrder": "Vielen Dank für die Bestellung!", "wrongTurn": "Ein falscher Weg wurde eingeschlagen. Hier geht es zurück auf den richtigen Pfad.", diff --git a/01-frontend/public/locales/en/translation.json b/01-frontend/public/locales/en/translation.json index 897cf80..01da0d6 100644 --- a/01-frontend/public/locales/en/translation.json +++ b/01-frontend/public/locales/en/translation.json @@ -1,6 +1,8 @@ { "account": "Account", "accountDeleted": "Account deleted successfully!", + "active": "active", + "activeOrder": "Active order", "address": "Address", "addToCart": "Add to cart", "addedToCart": "Product added to shopping cart successfully", @@ -10,6 +12,7 @@ "back": "Back", "backToHome": "Go back to home", "cancel": "Cancel", + "cancelOrder": "Cancel order", "categories": "Categories", "category": "Category", "checkout": "Checkout", @@ -28,11 +31,19 @@ "freeShipping": "Free shipping for orders over 50 €", "gardenSupplies": "Garden supplies", "inStock": "In stock", + "item": "Item", + "items": "items", "lastName": "Last name", "logout": "Logout", "myAccount": "My Account", + "myOrders": "My Orders", "name": "Name", "next": "Next", + "noActiveOrders": "No active orders.", + "noPreviousOrders": "No previous orders.", + "order": "Order", + "orderCancelled": "The following order has been cancelled:", + "orderDate": "Order date", "orderedItems": "Ordered items", "orders": "Orders", "orderSummary": "Order summary", @@ -44,7 +55,10 @@ "phone": "Phone number", "placeOrder": "Place order", "postalCode": "Postal code", + "previous": "previous", + "previousOrder": "Previous order", "price": "Price", + "pricePerItem": "Price per item", "productDoesNotExist": "It seems you are locking for a product that doesn't exist or has been removed.", "productNotFound": "Product not found!", "quantity": "Quantity", @@ -56,8 +70,10 @@ "save": "Save", "search": "Search", "seeds": "Seeds", + "shippingAddress": "Shipping address", "shippingDetails": "Shipping details", "submit": "Submit", + "sum": "Total", "technicalComponents": "Technical components", "thanksForOrder": "Thank you for your order!", "wrongTurn": "It seems you may have taken a wrong turn. Let's get you back on track.", diff --git a/01-frontend/src/pages/Orders.tsx b/01-frontend/src/pages/Orders.tsx index 1ed4b95..27aa69b 100644 --- a/01-frontend/src/pages/Orders.tsx +++ b/01-frontend/src/pages/Orders.tsx @@ -1,11 +1,12 @@ import { Box, Button, Dialog, DialogActions, DialogContent, DialogTitle, Divider, List, ListItemButton, ListItemText, Paper, Stack, Tab, Tabs, Typography } from "@mui/material"; import { useState } from "react"; import "./pages.css"; +import {useTranslation} from "react-i18next"; type Order = { id: string; date: string; - status: "laufend" | "abgeschlossen"; + status: "laufend" | "inactive"; items: { name: string; quantity: number; price: number }[]; total: number; address: string; @@ -15,7 +16,7 @@ const mockOrders: Order[] = [ { id: "1001", date: "2025-05-20", - status: "laufend", + status: "active", items: [ { name: "Tomatensamen", quantity: 2, price: 3.99 }, { name: "Blumenerde", quantity: 1, price: 7.49 } @@ -26,7 +27,7 @@ const mockOrders: Order[] = [ { id: "1000", date: "2025-05-10", - status: "abgeschlossen", + status: "inactive", items: [ { name: "Gießkanne", quantity: 1, price: 12.99 } ], @@ -36,17 +37,20 @@ const mockOrders: Order[] = [ ]; export default function Orders() { + + const { t } = useTranslation(); + const [tab, setTab] = useState(0); const [selectedOrder, setSelectedOrder] = useState(null); - const laufendeBestellungen = mockOrders.filter(o => o.status === "laufend"); - const vergangeneBestellungen = mockOrders.filter(o => o.status === "abgeschlossen"); + const activeOrders = mockOrders.filter(o => o.status === "active"); + const inactiveOrders = mockOrders.filter(o => o.status === "inactive"); const handleTabChange = (_: React.SyntheticEvent, newValue: number) => setTab(newValue); const handleCancelOrder = (orderId: string) => { // Hier API-Call zum Stornieren einbauen - alert(`Bestellung ${orderId} wurde storniert.`); + alert(`${t('orderCancelled')} #${orderId}`); setSelectedOrder(null); }; @@ -54,80 +58,80 @@ export default function Orders() { - Meine Bestellungen + {t('myOrders')} - - + + {tab === 0 ? ( - laufendeBestellungen.length > 0 ? ( + activeOrders.length > 0 ? ( - {laufendeBestellungen.map(order => ( + {activeOrders.map(order => ( setSelectedOrder(order)}> ))} ) : ( - Keine laufenden Bestellungen. + {t('noActiveOrders')} ) ) : ( - vergangeneBestellungen.length > 0 ? ( + inactiveOrders.length > 0 ? ( - {vergangeneBestellungen.map(order => ( + {inactiveOrders.map(order => ( setSelectedOrder(order)}> ))} ) : ( - Keine vergangenen Bestellungen. + {t('noPreviousOrders')} ) )} setSelectedOrder(null)} maxWidth="sm" fullWidth> - {selectedOrder?.status === "laufend" ? "Laufende Bestellung" : "Vergangene Bestellung"} #{selectedOrder?.id} + {`${selectedOrder?.status === "active" ? t('activeOrder') : t('previousOrder')} #${selectedOrder?.id}`} {selectedOrder && ( - Bestelldatum: {selectedOrder.date} - Lieferadresse: {selectedOrder.address} + {`${t('orderDate')}: ${selectedOrder.date}`} + {`${t('shippingAddress')}: ${selectedOrder.address}`} - Artikel: + {t('orderedItems')}: {selectedOrder.items.map((item, idx) => ( ))} - Gesamtsumme: {selectedOrder.total.toFixed(2)} € + {`${t('sum')}: ${selectedOrder.total.toFixed(2)} €`} )} - {selectedOrder?.status === "laufend" && ( + {selectedOrder?.status === "active" && ( )} - + ); -} \ No newline at end of file +}