profil: Speichern-Buttons für Persönliche Daten und Konto & Sicherheit

Die beiden oberen Panels auf /admin/me/profile hatten als einzige
keine eigene Speichern-Zeile — Sprach- und Kontaktdaten-Änderungen
ließen sich nur über die Buttons weiter unten sichern. Footer wie in
den übrigen Panels ergänzt, per flex/mt-auto bündig am Panel-Ende.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Kevin Adametz 2026-07-15 13:12:05 +00:00
parent ce59cbbf4a
commit 0b01929f80
2 changed files with 26 additions and 2 deletions

View file

@ -361,7 +361,7 @@ new #[Layout('components.layouts.app'), Title('Mein Profil')] class extends Comp
<form wire:submit="saveProfile" class="space-y-6">
{{-- ============== 1) PERSÖNLICHE DATEN + KONTO ============== --}}
<div class="grid gap-6 lg:grid-cols-2">
<article class="panel" id="profil">
<article class="panel flex flex-col" id="profil">
<div class="panel-head">
<span class="section-eyebrow">{{ __('Persönliche Daten') }}</span>
</div>
@ -389,9 +389,14 @@ new #[Layout('components.layouts.app'), Title('Mein Profil')] class extends Comp
</flux:select>
</div>
</div>
<div class="mt-auto px-5 py-4 border-t border-[color:var(--color-bg-rule)] flex justify-end">
<flux:button type="submit" variant="primary">
{{ __('Speichern') }}
</flux:button>
</div>
</article>
<article class="panel">
<article class="panel flex flex-col">
<div class="panel-head">
<span class="section-eyebrow">{{ __('Konto & Sicherheit') }}</span>
</div>
@ -407,6 +412,11 @@ new #[Layout('components.layouts.app'), Title('Mein Profil')] class extends Comp
</flux:button>
</div>
</div>
<div class="mt-auto px-5 py-4 border-t border-[color:var(--color-bg-rule)] flex justify-end">
<flux:button type="submit" variant="primary">
{{ __('Speichern') }}
</flux:button>
</div>
</article>
</div>

View file

@ -84,6 +84,20 @@ test('an incomplete billing address reports each missing field exactly once', fu
->assertHasErrors(['billingLastName', 'billingAddress1', 'billingPostalCode', 'billingCity']);
});
test('every profile panel offers a save button', function () {
/** @var TestCase $this */
$customer = User::factory()->create(['is_active' => true]);
$this->actingAs($customer);
// 6 Panels (Persönliche Daten, Konto & Sicherheit, Rechnungsadresse,
// Agentur-Angaben, E-Mail-Benachrichtigungen, Einstellungen) — jedes mit
// eigenem Submit-Button für dasselbe Formular.
$html = LivewireVolt::test('customer.profile')->html();
expect(substr_count($html, 'type="submit"'))->toBe(6);
});
test('a malformed vat id blocks saving with a field error', function () {
/** @var TestCase $this */
$customer = User::factory()->create(['is_active' => true]);