diff --git a/shop/components/wizard/step-customer.tsx b/shop/components/wizard/step-customer.tsx index 7c904e4..f8cf0d4 100644 --- a/shop/components/wizard/step-customer.tsx +++ b/shop/components/wizard/step-customer.tsx @@ -154,8 +154,28 @@ export function StepCustomer({ Wählen Sie den Partner (für Admins) und den Endkunden aus oder legen Sie einen neuen an. - -
+ + {/* Modus-Toggle: Bestandskunde vs. Neuer Kunde */} +
+ + +
+ +
{/* ─── 1. ADMIN PARTNER SELECTION ─── */} {isAdmin && (
@@ -349,274 +369,251 @@ export function StepCustomer({
)} - {/* ─── 2. CUSTOMER WRAPPER ─── */} -
- {/* Modus-Toggle: Bestandskunde vs. Neuer Kunde */} -
- - -
- - - {/* ─── 2. CUSTOMER SELECTION ─── */} - {customerMode === 'select' && ( - -
-
- -

- {isAdmin && selectedCompanyId && selectedCompanyId !== 'all' - ? `Endkunden für den Partner "${companies.find((c) => c.id === selectedCompanyId)?.name || selectedCompanyId}"` - : 'Alle verfügbaren Endkunden'} -

-
+
+
+ +

+ {isAdmin && selectedCompanyId && selectedCompanyId !== 'all' + ? `Endkunden für den Partner "${companies.find((c) => c.id === selectedCompanyId)?.name || selectedCompanyId}"` + : 'Alle verfügbaren Endkunden'} +

+
- {customersByCompany.length === 0 ? ( -
- -

- {isAdmin && selectedCompanyId && selectedCompanyId !== 'all' - ? 'Keine Endkunden für den ausgewählten Partner vorhanden.' - : 'Noch keine Endkunden vorhanden.'} -

- -
- ) : ( -
- {/* Customer Header Controls: Search & Page Size */} -
-
- - setSearchTerm(e.target.value)} - className="pl-9 bg-white/5 border-white/10 text-white placeholder:text-slate-500 text-sm h-9" - /> -
- - {/* Page Size Selector */} -
- Kunden pro Seite: - -
+ {customersByCompany.length === 0 ? ( +
+ +

+ {isAdmin && selectedCompanyId && selectedCompanyId !== 'all' + ? 'Keine Endkunden für den ausgewählten Partner vorhanden.' + : 'Noch keine Endkunden vorhanden.'} +

+ +
+ ) : ( +
+ {/* Customer Header Controls: Search & Page Size */} +
+
+ + setSearchTerm(e.target.value)} + className="pl-9 bg-white/5 border-white/10 text-white placeholder:text-slate-500 text-sm h-9" + />
- {filteredCustomers.length === 0 ? ( -
- Keine passenden Kunden gefunden. -
- ) : ( - <> - {/* Customer Card List */} -
- {paginatedCustomers.map((customer) => { - const isSelected = selectedEndCustomerId === customer.id + {/* Page Size Selector */} +
+ Kunden pro Seite: + +
+
- return ( -
handleSelectCustomer(customer)} - className={`flex items-start p-3.5 rounded-xl border-2 cursor-pointer transition-all select-none ${ - isSelected - ? 'border-primary bg-primary/10 shadow-lg shadow-primary/5' - : 'border-white/5 bg-white/5 hover:bg-white/10' - }`} - > - handleSelectCustomer(customer)} - className="sr-only" - /> -
-
-

{customer.company_name}

- {isAdmin && customer.partner_id && ( - - Partner: {companies.find((co) => co.id === customer.partner_id)?.name || customer.partner_id} - - )} -
-

- {[customer.first_name, customer.last_name].filter(Boolean).join(' ')} - {customer.first_name || customer.last_name ? ' · ' : ''} - {[customer.street, customer.zip, customer.city].filter(Boolean).join(', ')} -

+ {filteredCustomers.length === 0 ? ( +
+ Keine passenden Kunden gefunden. +
+ ) : ( + <> + {/* Customer Card List */} +
+ {paginatedCustomers.map((customer) => { + const isSelected = selectedEndCustomerId === customer.id + + return ( +
handleSelectCustomer(customer)} + className={`flex items-start p-3.5 rounded-xl border-2 cursor-pointer transition-all select-none ${ + isSelected + ? 'border-primary bg-primary/10 shadow-lg shadow-primary/5' + : 'border-white/5 bg-white/5 hover:bg-white/10' + }`} + > + handleSelectCustomer(customer)} + className="sr-only" + /> +
+
+

{customer.company_name}

+ {isAdmin && customer.partner_id && ( + + Partner: {companies.find((co) => co.id === customer.partner_id)?.name || customer.partner_id} + + )}
- {isSelected && } +

+ {[customer.first_name, customer.last_name].filter(Boolean).join(' ')} + {customer.first_name || customer.last_name ? ' · ' : ''} + {[customer.street, customer.zip, customer.city].filter(Boolean).join(', ')} +

- ); - })} + {isSelected && } +
+ ); + })} +
+ + {/* Customer Pagination Footer */} +
+
+ Zeige {totalCustomerCount === 0 ? 0 : (currentPage - 1) * pageSize + 1} bis{' '} + {Math.min(currentPage * pageSize, totalCustomerCount)} von {totalCustomerCount} Kunden
- {/* Customer Pagination Footer */} -
-
- Zeige {totalCustomerCount === 0 ? 0 : (currentPage - 1) * pageSize + 1} bis{' '} - {Math.min(currentPage * pageSize, totalCustomerCount)} von {totalCustomerCount} Kunden -
+
+ + -
- - + + Seite {currentPage} von {totalCustomerPages} + - - Seite {currentPage} von {totalCustomerPages} - - - - -
+ +
- - )} -
- )} - - )} - - {/* ─── MODUS B: NEUEN KUNDEN ANLEGEN ─── */} - {customerMode === 'create' && ( - - {( - [ - { label: 'Firmenname *', key: 'company_name', span: true, placeholder: 'GmbH / Einzelunternehmen' }, - { label: 'USt-IdNr.', key: 'vat_id', span: false, placeholder: 'DE123456789' }, - { label: 'Vorname', key: 'first_name', span: false, placeholder: '' }, - { label: 'Nachname', key: 'last_name', span: false, placeholder: '' }, - { label: 'Straße & Hausnummer', key: 'street', span: true, placeholder: '' }, - { label: 'PLZ', key: 'zip', span: false, placeholder: '' }, - { label: 'Ort', key: 'city', span: false, placeholder: '' }, - { label: 'Kontoinhaber', key: 'bank_owner', span: false, placeholder: 'Max Mustermann' }, - { label: 'IBAN', key: 'bank_iban', span: false, placeholder: 'DE89370400440532013000' }, - { label: 'BIC', key: 'bank_bic', span: false, placeholder: 'SOLADE21XXX' }, - { label: 'Bankname', key: 'bank_name', span: false, placeholder: 'Musterbank' }, - ] as const - ).map(({ label, key, span, placeholder }) => ( -
- - - setNewCustomerForm((prev: any) => ({ ...prev, [key]: e.target.value })) - } - placeholder={placeholder} - className="bg-white/5 border-white/10 text-white placeholder:text-slate-500" - /> -
- ))} -
- - +
+ + )}
- - )} - -
+ )} + + )} + + {/* ─── MODUS B: NEUEN KUNDEN ANLEGEN ─── */} + {customerMode === 'create' && ( + + {( + [ + { label: 'Firmenname *', key: 'company_name', span: true, placeholder: 'GmbH / Einzelunternehmen' }, + { label: 'USt-IdNr.', key: 'vat_id', span: false, placeholder: 'DE123456789' }, + { label: 'Vorname', key: 'first_name', span: false, placeholder: '' }, + { label: 'Nachname', key: 'last_name', span: false, placeholder: '' }, + { label: 'Straße & Hausnummer', key: 'street', span: true, placeholder: '' }, + { label: 'PLZ', key: 'zip', span: false, placeholder: '' }, + { label: 'Ort', key: 'city', span: false, placeholder: '' }, + { label: 'Kontoinhaber', key: 'bank_owner', span: false, placeholder: 'Max Mustermann' }, + { label: 'IBAN', key: 'bank_iban', span: false, placeholder: 'DE89370400440532013000' }, + { label: 'BIC', key: 'bank_bic', span: false, placeholder: 'SOLADE21XXX' }, + { label: 'Bankname', key: 'bank_name', span: false, placeholder: 'Musterbank' }, + ] as const + ).map(({ label, key, span, placeholder }) => ( +
+ + + setNewCustomerForm((prev: any) => ({ ...prev, [key]: e.target.value })) + } + placeholder={placeholder} + className="bg-white/5 border-white/10 text-white placeholder:text-slate-500" + /> +
+ ))} +
+ + +
+
+ )} +