diff --git a/shop/components/HeaderWrapper.tsx b/shop/components/HeaderWrapper.tsx index b7010ff..fa08852 100644 --- a/shop/components/HeaderWrapper.tsx +++ b/shop/components/HeaderWrapper.tsx @@ -17,8 +17,10 @@ export function HeaderWrapper({ navbar, children }: HeaderWrapperProps) { return <>{children}; } + const isWizard = pathname === "/order" || pathname === "/wizard"; + return ( -
+
{/* Demo Banner */}
+
{children}
diff --git a/shop/components/customer-accordion-list.tsx b/shop/components/customer-accordion-list.tsx index 72373b3..98f8235 100644 --- a/shop/components/customer-accordion-list.tsx +++ b/shop/components/customer-accordion-list.tsx @@ -1,6 +1,7 @@ 'use client' import React, { useState } from 'react' +import { motion, AnimatePresence } from 'framer-motion' import Link from 'next/link' import type { EndCustomerWithDevices, FlattenedDevice } from '@/lib/types' import { @@ -250,7 +251,16 @@ export function CustomerAccordionList({ customers }: CustomerAccordionListProps) {/* Akkordeon-Header */}
toggleCustomer(customer.id)} - className="p-5 flex items-center justify-between cursor-pointer hover:bg-white/[0.02] transition-colors select-none gap-4 flex-wrap" + onKeyDown={(e) => { + if (e.key === 'Enter' || e.key === ' ') { + e.preventDefault() + toggleCustomer(customer.id) + } + }} + tabIndex={0} + role="button" + aria-expanded={isOpen} + className="p-5 flex items-center justify-between cursor-pointer hover:bg-white/[0.02] transition-colors select-none gap-4 flex-wrap focus:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-inset" >
@@ -324,28 +334,38 @@ export function CustomerAccordionList({ customers }: CustomerAccordionListProps)
{/* Ausgeklappter Bereich mit Kassen */} - {isOpen && ( -
- {devices.length === 0 ? ( -
- Keine Kassen oder Bestellungen für diesen Kunden vorhanden. + + {isOpen && ( + +
+ {devices.length === 0 ? ( +
+ Keine Kassen oder Bestellungen für diesen Kunden vorhanden. +
+ ) : ( +
+

+ Zugeordnete Kassen ({devices.length}) +

+ {devices.map((device, idx) => ( + + ))} +
+ )}
- ) : ( -
-

- Zugeordnete Kassen ({devices.length}) -

- {devices.map((device, idx) => ( - - ))} -
- )} -
- )} + + )} + ) })} diff --git a/shop/components/order-wizard.tsx b/shop/components/order-wizard.tsx index faaa20d..367f68b 100644 --- a/shop/components/order-wizard.tsx +++ b/shop/components/order-wizard.tsx @@ -1085,6 +1085,7 @@ export function OrderWizard({ billingBadgeClass={billingBadgeClass} existingModuleIds={existingModuleIds} activeCategoryId={activeCategoryId} + editingDeviceName={editingIdx !== null ? (basketItems[editingIdx]?.deviceName || `Kasse ${editingIdx + 1}`) : null} />
diff --git a/shop/components/wizard/step-software.tsx b/shop/components/wizard/step-software.tsx index ea63193..08febab 100644 --- a/shop/components/wizard/step-software.tsx +++ b/shop/components/wizard/step-software.tsx @@ -29,6 +29,7 @@ interface StepSoftwareProps { /** Modul-IDs, die bereits lizenziert sind (Upgrade-Modus) */ existingModuleIds?: string[] activeCategoryId: string | null + editingDeviceName?: string | null } export function CategoryIcon({ icon, className }: { icon?: string | null; className?: string }) { @@ -52,6 +53,7 @@ export function StepSoftware({ billingBadgeClass, existingModuleIds = [], activeCategoryId, + editingDeviceName = null, }: StepSoftwareProps) { const currentCategory = visibleCategories.find(c => c.id === activeCategoryId) ?? visibleCategories[0] ?? null @@ -69,15 +71,22 @@ export function StepSoftware({ return ( - - - Optionen wählen + +
+ + Optionen wählen +
+ {editingDeviceName && ( + + ✏️ Bearbeite Kasse: "{editingDeviceName}" + + )}
Passen Sie die Konfiguration für {currentCategory.name} an.
- + diff --git a/shop/components/wizard/step-summary.tsx b/shop/components/wizard/step-summary.tsx index 11a40ee..ca27f77 100644 --- a/shop/components/wizard/step-summary.tsx +++ b/shop/components/wizard/step-summary.tsx @@ -70,6 +70,8 @@ export function StepSummary({ onAddNewBasketItem, onDeleteBasketItem, }: StepSummaryProps) { + const [confirmDeleteIdx, setConfirmDeleteIdx] = React.useState(null) + return (
{/* LINKER BEREICH: Scrollbares Bedienfeld */} @@ -211,16 +213,26 @@ export function StepSummary({ {onDeleteBasketItem && ( )}
diff --git a/shop/components/wizard/summary-sidebar.tsx b/shop/components/wizard/summary-sidebar.tsx index 420346a..4ddae47 100644 --- a/shop/components/wizard/summary-sidebar.tsx +++ b/shop/components/wizard/summary-sidebar.tsx @@ -283,7 +283,11 @@ export function SummarySidebar({ onClick={nextStep} disabled={isNextStepDisabled && basketItems.length === 0} > - Weiter zu Schritt 4 + {editingIdx !== null ? ( + <>Änderungen für "{basketItems[editingIdx]?.deviceName || `Kasse ${editingIdx + 1}`}" übernehmen + ) : ( + <>Weiter zu Schritt 4 + )}