livewire: Volt entfernt — Komponenten als Livewire-4-Single-File-Components, Route::livewire(), Livewire::test(); livewire/volt deinstalliert
- 83 Komponenten: Livewire\Volt\Component → Livewire\Component
- 73 Routen (admin, auth, customer): Volt::route() → Route::livewire()
- 88 Testdateien: Volt::test/actingAs → Livewire::test/actingAs
- VoltServiceProvider gelöscht; composer remove livewire/volt
- config/livewire.php auf v4-Schlüssel (component_layout, component_placeholder,
component_locations, make_command: SFC ohne ⚡). Der alte Schlüssel layout war
wirkungslos; alle gerouteten Komponenten setzen ihr Layout selbst.
- CLAUDE.md, AGENTS.md, boost.json, .cursorrules, Skill volt-development
- Roadmap: erledigt; Larastan erfasst SFCs weiterhin nicht (Blade-Dateien)
Suite 2.325 grün, einer übersprungen; Larastan und Pint ohne Meldung;
route:cache und view:cache laufen.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
79bb6cf1d0
commit
31da9ea8b6
186 changed files with 889 additions and 1075 deletions
|
|
@ -1,88 +0,0 @@
|
|||
---
|
||||
name: volt-development
|
||||
description: "Develops single-file Livewire components with Volt. Activates when creating Volt components, converting Livewire to Volt, working with @volt directive, functional or class-based Volt APIs; or when the user mentions Volt, single-file components, functional Livewire, or inline component logic in Blade files."
|
||||
license: MIT
|
||||
metadata:
|
||||
author: laravel
|
||||
---
|
||||
|
||||
# Volt Development
|
||||
|
||||
## Documentation
|
||||
|
||||
Use `search-docs` for detailed Volt patterns and documentation.
|
||||
|
||||
## Basic Usage
|
||||
|
||||
Create components with `vendor/bin/sail artisan make:volt [name] [--test] [--pest]`.
|
||||
|
||||
Important: Check existing Volt components to determine if they use functional or class-based style before creating new ones.
|
||||
|
||||
### Functional Components
|
||||
|
||||
<!-- Volt Functional Component -->
|
||||
```php
|
||||
@@volt
|
||||
<?php
|
||||
use function Livewire\Volt\{state, computed};
|
||||
|
||||
state(['count' => 0]);
|
||||
|
||||
$increment = fn () => $this->count++;
|
||||
$double = computed(fn () => $this->count * 2);
|
||||
?>
|
||||
|
||||
<div>
|
||||
<h1>Count: @{{ $count }} (Double: @{{ $this->double }})</h1>
|
||||
<button wire:click="increment">+</button>
|
||||
</div>
|
||||
@@endvolt
|
||||
```
|
||||
|
||||
### Class-Based Components
|
||||
|
||||
<!-- Volt Class-based Component -->
|
||||
```php
|
||||
use Livewire\Volt\Component;
|
||||
|
||||
new class extends Component {
|
||||
public int $count = 0;
|
||||
|
||||
public function increment(): void
|
||||
{
|
||||
$this->count++;
|
||||
}
|
||||
} ?>
|
||||
|
||||
<div>
|
||||
<h1>@{{ $count }}</h1>
|
||||
<button wire:click="increment">+</button>
|
||||
</div>
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Tests go in existing Volt test directory or `tests/Feature/Volt`:
|
||||
|
||||
<!-- Volt Test Example -->
|
||||
```php
|
||||
use Livewire\Volt\Volt;
|
||||
|
||||
test('counter increments', function () {
|
||||
Volt::test('counter')
|
||||
->assertSee('Count: 0')
|
||||
->call('increment')
|
||||
->assertSee('Count: 1');
|
||||
});
|
||||
```
|
||||
|
||||
## Verification
|
||||
|
||||
1. Check existing components for functional vs class-based style
|
||||
2. Test component with `Volt::test()`
|
||||
|
||||
## Common Pitfalls
|
||||
|
||||
- Not checking existing style (functional vs class-based) before creating
|
||||
- Forgetting `@volt` directive wrapper
|
||||
- Missing `--test` or `--pest` flag when tests are needed
|
||||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
## Tech Stack & Paradigmen
|
||||
- **Framework:** Laravel 12 (PHP 8.4+)
|
||||
- **Frontend-Architektur:** Livewire Volt (ausschließlich Functional API).
|
||||
- **Frontend-Architektur:** Livewire 4 Single-File-Components (klassenbasiert, `new class extends Livewire\Component`); Volt ist seit 06.10.2026 entfernt.
|
||||
- **UI-Komponenten:** FluxUI (nutze `<flux:...>` statt Standard-Blade/HTML).
|
||||
- **Styling:** Tailwind CSS (für Layout) & FluxUI (für Komponenten).
|
||||
- **Backend:** Klassisches MVC für das Admin-System, Services für Business-Logik.
|
||||
|
|
|
|||
11
AGENTS.md
11
AGENTS.md
|
|
@ -17,7 +17,6 @@ This application is a Laravel application and its main Laravel ecosystems packag
|
|||
- livewire/flux (FLUXUI_FREE) - v2
|
||||
- livewire/flux-pro (FLUXUI_PRO) - v2
|
||||
- livewire/livewire (LIVEWIRE) - v4
|
||||
- livewire/volt (VOLT) - v1
|
||||
- larastan/larastan (LARASTAN) - v3
|
||||
- laravel/boost (BOOST) - v2
|
||||
- laravel/mcp (MCP) - v0
|
||||
|
|
@ -36,7 +35,6 @@ This project has domain-specific skills available. You MUST activate the relevan
|
|||
- `fortify-development` — ACTIVATE when the user works on authentication in Laravel. This includes login, registration, password reset, email verification, two-factor authentication (2FA/TOTP/QR codes/recovery codes), profile updates, password confirmation, or any auth-related routes and controllers. Activate when the user mentions Fortify, auth, authentication, login, register, signup, forgot password, verify email, 2FA, or references app/Actions/Fortify/, CreateNewUser, UpdateUserProfileInformation, FortifyServiceProvider, config/fortify.php, or auth guards. Fortify is the frontend-agnostic authentication backend for Laravel that registers all auth routes and controllers. Also activate when building SPA or headless authentication, customizing login redirects, overriding response contracts like LoginResponse, or configuring login throttling. Do NOT activate for Laravel Passport (OAuth2 API tokens), Socialite (OAuth social login), or non-auth Laravel features.
|
||||
- `laravel-best-practices` — Apply this skill whenever writing, reviewing, or refactoring Laravel PHP code. This includes creating or modifying controllers, models, migrations, form requests, policies, jobs, scheduled commands, service classes, and Eloquent queries. Triggers for N+1 and query performance issues, caching strategies, authorization and security patterns, validation, error handling, queue and job configuration, route definitions, and architectural decisions. Also use for Laravel code reviews and refactoring existing Laravel code to follow best practices. Covers any task involving Laravel backend PHP code patterns.
|
||||
- `fluxui-development` — Use this skill for Flux UI development in Livewire applications only. Trigger when working with <flux:*> components, building or customizing Livewire component UIs, creating forms, modals, tables, or other interactive elements. Covers: flux: components (buttons, inputs, modals, forms, tables, date-pickers, kanban, badges, tooltips, etc.), component composition, Tailwind CSS styling, Heroicons/Lucide icon integration, validation patterns, responsive design, and theming. Do not use for non-Livewire frameworks or non-component styling.
|
||||
- `volt-development` — Develops single-file Livewire components with Volt. Activates when creating Volt components, converting Livewire to Volt, working with @volt directive, functional or class-based Volt APIs; or when the user mentions Volt, single-file components, functional Livewire, or inline component logic in Blade files.
|
||||
- `pest-testing` — Use this skill for Pest PHP testing in Laravel projects only. Trigger whenever any test is being written, edited, fixed, or refactored — including fixing tests that broke after a code change, adding assertions, converting PHPUnit to Pest, adding datasets, and TDD workflows. Always activate when the user asks how to write something in Pest, mentions test files or directories (tests/Feature, tests/Unit) or architecture tests. Covers: test()/it()/expect() syntax, datasets, mocking, browser testing, arch(), Livewire component tests, RefreshDatabase, and all Pest 3 features. Do not use for editing factories, seeders, migrations, controllers, models, or non-test PHP code.
|
||||
- `tailwindcss-development` — Always invoke when the user's message includes 'tailwind' in any form. Also invoke for: building responsive grid layouts (multi-column card grids, product grids), flex/grid page structures (dashboards with sidebars, fixed topbars, mobile-toggle navs), styling UI components (cards, tables, navbars, pricing sections, forms, inputs, badges), adding dark mode variants, fixing spacing or typography, and Tailwind v3/v4 work. The core use case: writing or fixing Tailwind utility classes in HTML templates (Blade, JSX, Vue). Skip for backend PHP logic, database queries, API routes, JavaScript with no HTML/CSS component, CSS file audits, build tool configuration, and vanilla CSS.
|
||||
|
||||
|
|
@ -199,15 +197,6 @@ This project has domain-specific skills available. You MUST activate the relevan
|
|||
|
||||
- Casts can and likely should be set in a `casts()` method on a model rather than the `$casts` property. Follow existing conventions from other models.
|
||||
|
||||
=== volt/core rules ===
|
||||
|
||||
# Livewire Volt
|
||||
|
||||
- Single-file Livewire components: PHP logic and Blade templates in one file.
|
||||
- Always check existing Volt components to determine functional vs class-based style.
|
||||
- IMPORTANT: Always use `search-docs` tool for version-specific Volt documentation and updated code examples.
|
||||
- IMPORTANT: Activate `volt-development` every time you're working with a Volt or single-file component-related task.
|
||||
|
||||
=== pint/core rules ===
|
||||
|
||||
# Laravel Pint Code Formatter
|
||||
|
|
|
|||
15
CLAUDE.md
15
CLAUDE.md
|
|
@ -4,7 +4,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
|
|||
|
||||
## Project Overview
|
||||
|
||||
This is a multi-domain Laravel application ("Pressekonto") that supports different domains with distinct themes and styling. The application uses Laravel with Livewire, Volt, and Fortify for authentication, along with Flux UI components.
|
||||
This is a multi-domain Laravel application ("Pressekonto") that supports different domains with distinct themes and styling. The application uses Laravel with Livewire 4 (single-file components) and Fortify for authentication, along with Flux UI components.
|
||||
|
||||
### Supported Domains
|
||||
|
||||
|
|
@ -85,7 +85,7 @@ The application uses a sophisticated domain-based theme system that determines s
|
|||
- Settings components in `resources/views/livewire/settings/` (profile, password, appearance)
|
||||
- Admin components in `resources/views/livewire/admin/` (users management)
|
||||
- Web components in `resources/views/livewire/web/` (frontend features)
|
||||
- **Volt Components**: Single-file Livewire components using functional API for rapid development
|
||||
- **Single-file components (Livewire 4)**: PHP class (`new class extends Livewire\Component`) and Blade template in one file under `resources/views/livewire/`; the name follows the path (`admin/users/index.blade.php` → `admin.users.index`). Full-page routes use `Route::livewire()`, tests `Livewire::test()`. Volt was removed on 06.10.2026 — do not reintroduce it.
|
||||
- **Flux UI**: Premium UI component library for consistent design (Portal only)
|
||||
- **Multi-Build System**: Separate Vite configurations for different asset bundles
|
||||
|
||||
|
|
@ -232,7 +232,6 @@ This application is a Laravel application and its main Laravel ecosystems packag
|
|||
- livewire/flux (FLUXUI_FREE) - v2
|
||||
- livewire/flux-pro (FLUXUI_PRO) - v2
|
||||
- livewire/livewire (LIVEWIRE) - v4
|
||||
- livewire/volt (VOLT) - v1
|
||||
- larastan/larastan (LARASTAN) - v3
|
||||
- laravel/boost (BOOST) - v2
|
||||
- laravel/mcp (MCP) - v0
|
||||
|
|
@ -251,7 +250,6 @@ This project has domain-specific skills available. You MUST activate the relevan
|
|||
- `fortify-development` — ACTIVATE when the user works on authentication in Laravel. This includes login, registration, password reset, email verification, two-factor authentication (2FA/TOTP/QR codes/recovery codes), profile updates, password confirmation, or any auth-related routes and controllers. Activate when the user mentions Fortify, auth, authentication, login, register, signup, forgot password, verify email, 2FA, or references app/Actions/Fortify/, CreateNewUser, UpdateUserProfileInformation, FortifyServiceProvider, config/fortify.php, or auth guards. Fortify is the frontend-agnostic authentication backend for Laravel that registers all auth routes and controllers. Also activate when building SPA or headless authentication, customizing login redirects, overriding response contracts like LoginResponse, or configuring login throttling. Do NOT activate for Laravel Passport (OAuth2 API tokens), Socialite (OAuth social login), or non-auth Laravel features.
|
||||
- `laravel-best-practices` — Apply this skill whenever writing, reviewing, or refactoring Laravel PHP code. This includes creating or modifying controllers, models, migrations, form requests, policies, jobs, scheduled commands, service classes, and Eloquent queries. Triggers for N+1 and query performance issues, caching strategies, authorization and security patterns, validation, error handling, queue and job configuration, route definitions, and architectural decisions. Also use for Laravel code reviews and refactoring existing Laravel code to follow best practices. Covers any task involving Laravel backend PHP code patterns.
|
||||
- `fluxui-development` — Use this skill for Flux UI development in Livewire applications only. Trigger when working with <flux:*> components, building or customizing Livewire component UIs, creating forms, modals, tables, or other interactive elements. Covers: flux: components (buttons, inputs, modals, forms, tables, date-pickers, kanban, badges, tooltips, etc.), component composition, Tailwind CSS styling, Heroicons/Lucide icon integration, validation patterns, responsive design, and theming. Do not use for non-Livewire frameworks or non-component styling.
|
||||
- `volt-development` — Develops single-file Livewire components with Volt. Activates when creating Volt components, converting Livewire to Volt, working with @volt directive, functional or class-based Volt APIs; or when the user mentions Volt, single-file components, functional Livewire, or inline component logic in Blade files.
|
||||
- `pest-testing` — Use this skill for Pest PHP testing in Laravel projects only. Trigger whenever any test is being written, edited, fixed, or refactored — including fixing tests that broke after a code change, adding assertions, converting PHPUnit to Pest, adding datasets, and TDD workflows. Always activate when the user asks how to write something in Pest, mentions test files or directories (tests/Feature, tests/Unit) or architecture tests. Covers: test()/it()/expect() syntax, datasets, mocking, browser testing, arch(), Livewire component tests, RefreshDatabase, and all Pest 3 features. Do not use for editing factories, seeders, migrations, controllers, models, or non-test PHP code.
|
||||
- `tailwindcss-development` — Always invoke when the user's message includes 'tailwind' in any form. Also invoke for: building responsive grid layouts (multi-column card grids, product grids), flex/grid page structures (dashboards with sidebars, fixed topbars, mobile-toggle navs), styling UI components (cards, tables, navbars, pricing sections, forms, inputs, badges), adding dark mode variants, fixing spacing or typography, and Tailwind v3/v4 work. The core use case: writing or fixing Tailwind utility classes in HTML templates (Blade, JSX, Vue). Skip for backend PHP logic, database queries, API routes, JavaScript with no HTML/CSS component, CSS file audits, build tool configuration, and vanilla CSS.
|
||||
|
||||
|
|
@ -414,15 +412,6 @@ This project has domain-specific skills available. You MUST activate the relevan
|
|||
|
||||
- Casts can and likely should be set in a `casts()` method on a model rather than the `$casts` property. Follow existing conventions from other models.
|
||||
|
||||
=== volt/core rules ===
|
||||
|
||||
# Livewire Volt
|
||||
|
||||
- Single-file Livewire components: PHP logic and Blade templates in one file.
|
||||
- Always check existing Volt components to determine functional vs class-based style.
|
||||
- IMPORTANT: Always use `search-docs` tool for version-specific Volt documentation and updated code examples.
|
||||
- IMPORTANT: Activate `volt-development` every time you're working with a Volt or single-file component-related task.
|
||||
|
||||
=== pint/core rules ===
|
||||
|
||||
# Laravel Pint Code Formatter
|
||||
|
|
|
|||
|
|
@ -17,7 +17,6 @@ use Laravel\Fortify\Contracts\FailedTwoFactorLoginResponse;
|
|||
use Laravel\Fortify\Contracts\LoginResponse;
|
||||
use Laravel\Fortify\Contracts\TwoFactorLoginResponse;
|
||||
use Laravel\Fortify\Fortify;
|
||||
use Livewire\Volt\Volt;
|
||||
|
||||
class FortifyServiceProvider extends ServiceProvider
|
||||
{
|
||||
|
|
@ -29,7 +28,7 @@ class FortifyServiceProvider extends ServiceProvider
|
|||
$this->app->singleton(LoginResponse::class, RoleAwareLoginResponse::class);
|
||||
$this->app->singleton(TwoFactorLoginResponse::class, RoleAwareLoginResponse::class);
|
||||
// Fortifys Default leitet auf die nicht registrierte Route
|
||||
// `two-factor.login` (views => false) – zurück zur Volt-Challenge.
|
||||
// `two-factor.login` (views => false) – zurück zur Livewire-Challenge.
|
||||
$this->app->singleton(FailedTwoFactorLoginResponse::class, FailedTwoFactorChallengeResponse::class);
|
||||
}
|
||||
|
||||
|
|
@ -44,7 +43,7 @@ class FortifyServiceProvider extends ServiceProvider
|
|||
Fortify::resetUserPasswordsUsing(ResetUserPassword::class);
|
||||
Fortify::redirectUserForTwoFactorAuthenticationUsing(RedirectIfTwoFactorAuthenticatable::class);
|
||||
|
||||
// Keine View-Definitionen, da wir Volt verwenden
|
||||
// Keine View-Definitionen, die Auth-Seiten sind Livewire-Komponenten
|
||||
|
||||
RateLimiter::for('login', function (Request $request) {
|
||||
$throttleKey = Str::transliterate(Str::lower($request->input(Fortify::username())).'|'.$request->ip());
|
||||
|
|
|
|||
|
|
@ -1,28 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Providers;
|
||||
|
||||
use Illuminate\Support\ServiceProvider;
|
||||
use Livewire\Volt\Volt;
|
||||
|
||||
class VoltServiceProvider extends ServiceProvider
|
||||
{
|
||||
/**
|
||||
* Register services.
|
||||
*/
|
||||
public function register(): void
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Bootstrap services.
|
||||
*/
|
||||
public function boot(): void
|
||||
{
|
||||
Volt::mount([
|
||||
config('livewire.view_path', resource_path('views/livewire')),
|
||||
resource_path('views/pages'),
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
|
@ -12,7 +12,6 @@
|
|||
"fortify-development",
|
||||
"laravel-best-practices",
|
||||
"fluxui-development",
|
||||
"volt-development",
|
||||
"pest-testing",
|
||||
"tailwindcss-development"
|
||||
]
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@
|
|||
use App\Providers\AppServiceProvider;
|
||||
use App\Providers\FortifyServiceProvider;
|
||||
use App\Providers\ThemeServiceProvider;
|
||||
use App\Providers\VoltServiceProvider;
|
||||
use Barryvdh\Debugbar\ServiceProvider;
|
||||
use FluxPro\FluxProServiceProvider;
|
||||
|
||||
|
|
@ -11,7 +10,6 @@ return [
|
|||
AppServiceProvider::class,
|
||||
ThemeServiceProvider::class,
|
||||
FortifyServiceProvider::class,
|
||||
VoltServiceProvider::class,
|
||||
FluxProServiceProvider::class,
|
||||
ServiceProvider::class,
|
||||
];
|
||||
|
|
|
|||
|
|
@ -19,7 +19,6 @@
|
|||
"laravel/tinker": "^2.10.1",
|
||||
"livewire/flux": "^2.1.1",
|
||||
"livewire/flux-pro": "^2.1",
|
||||
"livewire/volt": "^1.7.0",
|
||||
"mews/purifier": "^3.4",
|
||||
"sentry/sentry-laravel": "^4.28",
|
||||
"spatie/laravel-permission": "^6.17",
|
||||
|
|
|
|||
73
composer.lock
generated
73
composer.lock
generated
|
|
@ -4,7 +4,7 @@
|
|||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "ea2446398f933fba3c1e67a0ea180364",
|
||||
"content-hash": "62e8b30de10f89b16d0d1b2c6ba68d9b",
|
||||
"packages": [
|
||||
{
|
||||
"name": "bacon/bacon-qr-code",
|
||||
|
|
@ -3173,77 +3173,6 @@
|
|||
],
|
||||
"time": "2026-09-28T18:12:51+00:00"
|
||||
},
|
||||
{
|
||||
"name": "livewire/volt",
|
||||
"version": "v1.11.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/livewire/volt.git",
|
||||
"reference": "1e46197d615bcd395ae87784fd8d25077782043d"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/livewire/volt/zipball/1e46197d615bcd395ae87784fd8d25077782043d",
|
||||
"reference": "1e46197d615bcd395ae87784fd8d25077782043d",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"laravel/framework": "^10.38.2|^11.0|^12.0|^13.0",
|
||||
"livewire/livewire": "^3.6.1|^4.0",
|
||||
"php": "^8.1"
|
||||
},
|
||||
"require-dev": {
|
||||
"laravel/folio": "^1.1",
|
||||
"orchestra/testbench": "^8.36|^9.15|^10.8|^11.0",
|
||||
"pestphp/pest": "^2.9.5|^3.0|^4.0",
|
||||
"phpstan/phpstan": "^1.10|^2.1"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"laravel": {
|
||||
"providers": [
|
||||
"Livewire\\Volt\\VoltServiceProvider"
|
||||
]
|
||||
},
|
||||
"branch-alias": {
|
||||
"dev-master": "1.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"files": [
|
||||
"functions.php"
|
||||
],
|
||||
"psr-4": {
|
||||
"Livewire\\Volt\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Taylor Otwell",
|
||||
"email": "taylor@laravel.com"
|
||||
},
|
||||
{
|
||||
"name": "Nuno Maduro",
|
||||
"email": "nuno@laravel.com"
|
||||
}
|
||||
],
|
||||
"description": "An elegantly crafted functional API for Laravel Livewire.",
|
||||
"homepage": "https://github.com/livewire/volt",
|
||||
"keywords": [
|
||||
"laravel",
|
||||
"livewire",
|
||||
"volt"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/livewire/volt/issues",
|
||||
"source": "https://github.com/livewire/volt"
|
||||
},
|
||||
"time": "2026-07-31T16:13:54+00:00"
|
||||
},
|
||||
{
|
||||
"name": "mews/purifier",
|
||||
"version": "3.4.4",
|
||||
|
|
|
|||
|
|
@ -38,7 +38,38 @@ return [
|
|||
|
|
||||
*/
|
||||
|
||||
'layout' => 'components.layouts.app',
|
||||
'component_layout' => 'components.layouts.app',
|
||||
|
||||
/*
|
||||
|---------------------------------------------------------------------------
|
||||
| Component Locations
|
||||
|---------------------------------------------------------------------------
|
||||
|
|
||||
| Verzeichnisse für Single-File-Komponenten (seit Livewire 4; vorher hat
|
||||
| Volt resources/views/livewire eingebunden). Komponentennamen ergeben sich
|
||||
| aus dem Pfad: admin/users/index.blade.php → 'admin.users.index'.
|
||||
|
|
||||
*/
|
||||
|
||||
'component_locations' => [
|
||||
resource_path('views/components'),
|
||||
resource_path('views/livewire'),
|
||||
],
|
||||
|
||||
/*
|
||||
|---------------------------------------------------------------------------
|
||||
| Make Command
|
||||
|---------------------------------------------------------------------------
|
||||
|
|
||||
| php artisan make:livewire legt Single-File-Komponenten an, ohne
|
||||
| ⚡-Präfix im Dateinamen — wie die bestehenden Komponenten.
|
||||
|
|
||||
*/
|
||||
|
||||
'make_command' => [
|
||||
'type' => 'sfc',
|
||||
'emoji' => false,
|
||||
],
|
||||
|
||||
/*
|
||||
|---------------------------------------------------------------------------
|
||||
|
|
@ -50,7 +81,7 @@ return [
|
|||
|
|
||||
*/
|
||||
|
||||
'lazy_placeholder' => null,
|
||||
'component_placeholder' => null,
|
||||
|
||||
/*
|
||||
|---------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -47,26 +47,26 @@ Phasen im Archiv (`dev/archive/`).
|
|||
|
||||
## Nächste Entwicklungen / Optimierungen (Ideen-Backlog)
|
||||
|
||||
- [ ] **Volt entfernen, auf Livewire-4-Single-File-Components umstellen**
|
||||
(Betreiber, 05.10.2026). Seit Livewire 4 sind Single-File-Components
|
||||
eingebaut, mit derselben Syntax wie Volts Klassenkomponenten — Volt
|
||||
ist damit überflüssig. Umfang (Stand v1.1.0): 83 Komponenten unter
|
||||
`resources/views/livewire` (nur klassenbasiert, keine funktionale
|
||||
Volt-API, kein `@volt`), 73 `Volt::route()`, 549 `Volt::test()` in 80
|
||||
Testdateien. Schritte nach dem offiziellen Upgrade-Leitfaden
|
||||
(livewire.laravel.com/docs/4.x/upgrading, „Upgrading Volt“):
|
||||
`Livewire\Volt\Component` → `Livewire\Component`; `Volt::route()` →
|
||||
`Route::livewire()`; `Volt::test()`/`LivewireVolt::test()` →
|
||||
`Livewire::test()`; `VoltServiceProvider` löschen und aus
|
||||
`bootstrap/providers.php` nehmen; `composer remove livewire/volt`.
|
||||
Livewire 4 findet `resources/views/livewire` standardmäßig
|
||||
(`component_locations`); `config/livewire.php` stammt noch aus v3 und
|
||||
sollte bei der Gelegenheit abgeglichen werden. Danach CLAUDE.md und
|
||||
die Boost-Richtlinien (Volt-Abschnitt, Skill `volt-development`)
|
||||
anpassen und prüfen, ob Larastan die Komponenten jetzt erfasst
|
||||
(offener Punkt aus dem Umsetzungsaudit 02.10., 5.6). Mechanische
|
||||
Umstellung, aber großflächig — als eigener Branch mit voller Suite,
|
||||
nicht nebenbei in einem Fach-Block.
|
||||
- [x] **Volt entfernen, auf Livewire-4-Single-File-Components umstellen**
|
||||
— **erledigt 06.10.2026** (Branch `technik/volt-entfernen`). 83
|
||||
Komponenten auf `Livewire\Component`, 73 Routen auf
|
||||
`Route::livewire()`, 88 Testdateien auf `Livewire::test()`/
|
||||
`Livewire::actingAs()`; `VoltServiceProvider` gelöscht,
|
||||
`livewire/volt` entfernt (sonst keine Paketänderung).
|
||||
`config/livewire.php` auf v4-Schlüssel: `component_layout`,
|
||||
`component_placeholder`, `component_locations`, `make_command` (SFC
|
||||
ohne ⚡). Befund dabei: Der alte Schlüssel `layout` war wirkungslos,
|
||||
Livewire 4 legte seinen Standard `layouts::app` darüber; alle 73
|
||||
gerouteten Komponenten setzen ihr Layout aber selbst. CLAUDE.md,
|
||||
AGENTS.md, `boost.json`, `.cursorrules` und der Skill
|
||||
`volt-development` angepasst bzw. entfernt (von Hand —
|
||||
`boost:update` hätte nebenbei alle Skills auf eine neue
|
||||
Boost-Fassung gehoben, das ist ein eigener Schritt). Suite 2.325
|
||||
grün, einer übersprungen; Larastan und Pint ohne Meldung.
|
||||
**Larastan erfasst die Komponenten weiterhin nicht**: Es analysiert
|
||||
nur `.php`-Dateien, Single-File-Komponenten sind Blade-Dateien.
|
||||
Abhilfe wäre die Umwandlung einzelner großer Komponenten in
|
||||
Klassen-Komponenten (`php artisan livewire:convert`), kein Muss.
|
||||
|
||||
- [ ] Frontend-Audit-Reste aus `dev/archive/frontend-audits/
|
||||
frontend-optimize-protokoll.md` sichten — P2/P3-Punkte, die bewusst
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ use Flux\Flux;
|
|||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Attributes\Url;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
use Livewire\WithPagination;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ use Illuminate\Support\Facades\DB;
|
|||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Attributes\Validate;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
|
||||
new #[Layout('components.layouts.app'), Title('Kategorie anlegen')] class extends Component
|
||||
{
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ use Livewire\Attributes\Layout;
|
|||
use Livewire\Attributes\Locked;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Attributes\Validate;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
|
||||
new #[Layout('components.layouts.app'), Title('Kategorie bearbeiten')] class extends Component
|
||||
{
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ use App\Services\Admin\AdminPerformanceCache;
|
|||
use App\Services\CurrentPortalContext;
|
||||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
use Livewire\WithPagination;
|
||||
|
||||
new #[Layout('components.layouts.app'), Title('Kategorien')] class extends Component
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ use Illuminate\Support\Str;
|
|||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Attributes\Validate;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
use Livewire\WithFileUploads;
|
||||
|
||||
new #[Layout('components.layouts.app'), Title('Neue Firma')] class extends Component
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ use Livewire\Attributes\Layout;
|
|||
use Livewire\Attributes\Locked;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Attributes\Validate;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
use Livewire\WithFileUploads;
|
||||
|
||||
new #[Layout('components.layouts.app'), Title('Firma bearbeiten')] class extends Component
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ use App\Services\CurrentPortalContext;
|
|||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Attributes\Url;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
use Livewire\WithPagination;
|
||||
|
||||
new #[Layout('components.layouts.app'), Title('Firmen')] class extends Component
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ use App\Models\Company;
|
|||
use App\Models\Contact;
|
||||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
|
||||
new #[Layout('components.layouts.app'), Title('Firma anzeigen')] class extends Component
|
||||
{
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ use App\Models\ContactMessage;
|
|||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Attributes\Url;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
use Livewire\WithPagination;
|
||||
|
||||
new #[Layout('components.layouts.app'), Title('Kontakt')] class extends Component
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ use App\Models\ContactMessage;
|
|||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Locked;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
|
||||
new #[Layout('components.layouts.app'), Title('Anliegen · Kontakt')] class extends Component
|
||||
{
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ use App\Models\Contact;
|
|||
use Illuminate\Validation\Rule;
|
||||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
|
||||
new #[Layout('components.layouts.app'), Title('Kontakt anlegen')] class extends Component
|
||||
{
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ use Illuminate\Validation\Rule;
|
|||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Locked;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
|
||||
new #[Layout('components.layouts.app'), Title('Kontakt bearbeiten')] class extends Component
|
||||
{
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ use Illuminate\Validation\Rule;
|
|||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Attributes\Url;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
use Livewire\WithPagination;
|
||||
|
||||
new #[Layout('components.layouts.app'), Title('Kontakte')] class extends Component
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
|
||||
new #[Layout('components.layouts.app'), Title('Gutscheine')] class extends Component
|
||||
{
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ use Illuminate\Support\Facades\DB;
|
|||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Attributes\Validate;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
|
||||
new #[Layout('components.layouts.app'), Title('Footer-Code anlegen')] class extends Component
|
||||
{
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ use Illuminate\Support\Facades\DB;
|
|||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Attributes\Validate;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
|
||||
new #[Layout('components.layouts.app'), Title('Footer-Code bearbeiten')] class extends Component
|
||||
{
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ use App\Enums\Portal;
|
|||
use App\Models\FooterCode;
|
||||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
use Livewire\WithPagination;
|
||||
|
||||
new #[Layout('components.layouts.app'), Title('Footer-Codes')] class extends Component
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ use App\Scopes\PortalScope;
|
|||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Attributes\Url;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
use Livewire\WithPagination;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Builder;
|
|||
use Illuminate\Support\Facades\Schema;
|
||||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
use Livewire\WithPagination;
|
||||
|
||||
new #[Layout('components.layouts.app'), Title('Legacy Rechnungen')] class extends Component
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ use App\Models\WithdrawalRequest;
|
|||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Attributes\Url;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
use Livewire\WithPagination;
|
||||
|
||||
new #[Layout('components.layouts.app'), Title('Recht & Compliance')] class extends Component
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ use Illuminate\Support\Facades\Mail;
|
|||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Locked;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
|
||||
new #[Layout('components.layouts.app'), Title('Anfrage · Recht & Compliance')] class extends Component
|
||||
{
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ use Illuminate\Validation\Rule;
|
|||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Attributes\Url;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
use Livewire\WithPagination;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ use Illuminate\Support\Facades\Mail;
|
|||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Locked;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
use Mews\Purifier\Facades\Purifier;
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
use App\Models\NewsletterCampaign;
|
||||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
use Livewire\WithPagination;
|
||||
|
||||
new #[Layout('components.layouts.app'), Title('Newsletter')] class extends Component
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ use App\Services\Newsletter\CampaignRecipients;
|
|||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Locked;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
use Livewire\WithPagination;
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ use App\Services\Admin\AdminPerformanceCache;
|
|||
use App\Services\Newsletter\NewsletterSyncService;
|
||||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
|
||||
new #[Layout('components.layouts.app'), Title('Newsletter Sync')] class extends Component
|
||||
{
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ use App\Enums\EmailNotificationType;
|
|||
use App\Models\EmailNotificationOptOut;
|
||||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
use Livewire\WithPagination;
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ use Illuminate\Support\Carbon;
|
|||
use Laravel\Cashier\Subscription;
|
||||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
use Livewire\WithPagination;
|
||||
|
||||
new #[Layout('components.layouts.app'), Title('Zahlungen')] class extends Component
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ use App\Services\Billing\StripePlanSyncService;
|
|||
use Flux\Flux;
|
||||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
|
||||
new #[Layout('components.layouts.app'), Title('Tarife & Pakete')] class extends Component
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
|
||||
use App\Enums\Portal;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
|
||||
new class extends Component
|
||||
{
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ use App\Models\AdminPreset;
|
|||
use Illuminate\Validation\Rule;
|
||||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
|
||||
new #[Layout('components.layouts.app'), Title('Neue Voreinstellung')] class extends Component
|
||||
{
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ use Illuminate\Validation\Rule;
|
|||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Locked;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
|
||||
new #[Layout('components.layouts.app'), Title('Voreinstellung bearbeiten')] class extends Component
|
||||
{
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ use App\Models\AdminPreset;
|
|||
use App\Services\Admin\AdminPerformanceCache;
|
||||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
use Livewire\WithPagination;
|
||||
|
||||
new #[Layout('components.layouts.app'), Title('Voreinstellungen')] class extends Component
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ use Illuminate\Validation\Rule;
|
|||
use Livewire\Attributes\Computed;
|
||||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
|
||||
new #[Layout('components.layouts.app'), Title('Neue Pressemitteilung')] class extends Component {
|
||||
use \App\Livewire\Concerns\InteractsWithPressReleaseContacts;
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ use Livewire\Attributes\Computed;
|
|||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Locked;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
|
||||
new #[Layout('components.layouts.app'), Title('Pressemitteilung bearbeiten')] class extends Component {
|
||||
use \App\Livewire\Concerns\HandlesAdminPressReleaseActions;
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ use Flux\Flux;
|
|||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Attributes\Url;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
use Livewire\WithPagination;
|
||||
|
||||
new #[Layout('components.layouts.app'), Title('Pressemitteilungen')] class extends Component
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ use Flux\Flux;
|
|||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Locked;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
|
||||
new #[Layout('components.layouts.app'), Title('Pressemitteilung')] class extends Component
|
||||
{
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ use App\Enums\ActivityType;
|
|||
use App\Models\ActivityEvent;
|
||||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
use Livewire\WithPagination;
|
||||
|
||||
new #[Layout('components.layouts.app'), Title('Verlauf')] class extends Component
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ use App\Services\SearchConsole\SearchConsoleClient;
|
|||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Attributes\Url;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
use Symfony\Component\HttpFoundation\StreamedResponse;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
use App\Services\Admin\AdminSlowRequestReporter;
|
||||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
|
||||
new #[Layout('components.layouts.app'), Title('Performance Reports')] class extends Component
|
||||
{
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ use Livewire\Attributes\Computed;
|
|||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Attributes\Url;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
use Symfony\Component\HttpFoundation\StreamedResponse;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
use App\Services\Admin\AdminSystemHealth;
|
||||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
|
||||
new #[Layout('components.layouts.app'), Title('Betriebsüberwachung')] class extends Component
|
||||
{
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ use Illuminate\Support\Str;
|
|||
use Illuminate\Validation\Rule;
|
||||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
use Spatie\Permission\Models\Permission;
|
||||
use Spatie\Permission\Models\Role;
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ use Illuminate\Validation\Rule;
|
|||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Locked;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
use Spatie\Permission\Models\Permission;
|
||||
use Spatie\Permission\Models\Role;
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
use Spatie\Permission\Models\Role;
|
||||
|
||||
new #[Layout('components.layouts.app'), Title('Rollen & Rechte')] class extends Component
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ use Illuminate\Database\Eloquent\Builder;
|
|||
use Illuminate\Support\Facades\Auth;
|
||||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
use Livewire\WithPagination;
|
||||
use Spatie\Permission\Models\Role;
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ use App\Services\Admin\AdminPerformanceCache;
|
|||
use Illuminate\Database\Eloquent\Collection;
|
||||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
use Spatie\Permission\Models\Role;
|
||||
|
||||
new #[Layout('components.layouts.app'), Title('Benutzer anlegen')] class extends Component
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ use Illuminate\Validation\Rule;
|
|||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Locked;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
use Spatie\Permission\Models\Role;
|
||||
|
||||
new #[Layout('components.layouts.app'), Title('Benutzer bearbeiten')] class extends Component
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ use Flux\Flux;
|
|||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Locked;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
|
||||
new #[Layout('components.layouts.app'), Title('Benutzer anzeigen')] class extends Component
|
||||
{
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
|
||||
new #[Layout('components.layouts.auth.pressekonto', ['heading' => 'Passwort bestätigen', 'eyebrow' => 'Sicherheitsbereich', 'showFromBanner' => false])] class extends Component {
|
||||
public string $password = '';
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ use Illuminate\Support\Facades\RateLimiter;
|
|||
use Illuminate\Support\Str;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
|
||||
new #[Layout('components.layouts.auth.pressekonto', ['heading' => 'Passwort vergessen', 'eyebrow' => 'Passwort zurücksetzen', 'topRightLabel' => 'Doch erinnert?', 'topRightLinkText' => 'Zur Anmeldung', 'topRightLinkHref' => '/login'])] class extends Component {
|
||||
public string $email = '';
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ use Illuminate\Support\Str;
|
|||
use Illuminate\Validation\ValidationException;
|
||||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Validate;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
|
||||
new #[Layout('components.layouts.auth.pressekonto', ['heading' => 'Willkommen zurück', 'eyebrow' => 'Anmeldung im Publisher-Hub', 'topRightLabel' => 'Noch kein Konto?', 'topRightLinkText' => 'Konto erstellen', 'topRightLinkHref' => '/register'])] class extends Component {
|
||||
#[Validate('required|string|email')]
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ use Illuminate\Support\Str;
|
|||
use Illuminate\Validation\ValidationException;
|
||||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Validate;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
|
||||
new #[Layout('components.layouts.auth.pressekonto', ['heading' => 'Anmeldung per E-Mail-Link', 'eyebrow' => 'Ohne Passwort anmelden', 'topRightLabel' => 'Lieber mit Passwort?', 'topRightLinkText' => 'Anmelden', 'topRightLinkHref' => '/login'])] class extends Component {
|
||||
#[Validate('required|string|email')]
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ use Illuminate\Support\Facades\RateLimiter;
|
|||
use Illuminate\Validation\Rules;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
|
||||
new #[Layout('components.layouts.auth.pressekonto', ['heading' => 'Konto erstellen', 'eyebrow' => 'Registrierung im Publisher-Hub', 'topRightLabel' => 'Bereits Konto?', 'topRightLinkText' => 'Anmelden', 'topRightLinkHref' => '/login'])] class extends Component {
|
||||
public string $name = '';
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ use Illuminate\Support\Str;
|
|||
use Illuminate\Validation\Rules;
|
||||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Locked;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
|
||||
new #[Layout('components.layouts.auth.pressekonto', ['heading' => 'Neues Passwort vergeben', 'eyebrow' => 'Passwort zurücksetzen'])] class extends Component {
|
||||
#[Locked]
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
|
||||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
|
||||
new #[Layout('components.layouts.auth.pressekonto', ['heading' => 'Zwei-Faktor-Bestätigung', 'eyebrow' => 'Sicherheitsprüfung', 'showFromBanner' => false])] class extends Component {
|
||||
public function mount(): void
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Session;
|
||||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
|
||||
new #[Layout('components.layouts.auth.pressekonto', ['heading' => 'Danke für Ihre Registrierung', 'eyebrow' => 'Nur noch ein Schritt', 'showFromBanner' => false])] class extends Component {
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ use App\Services\PressRelease\PressReleaseAttachmentStorage;
|
|||
use App\Scopes\PortalScope;
|
||||
use Flux\Flux;
|
||||
use Livewire\Attributes\Locked;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
use Livewire\WithFileUploads;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ use App\Services\PressRelease\Images\PressReleaseImageUploader;
|
|||
use Flux\Flux;
|
||||
use Illuminate\Validation\Rule;
|
||||
use Livewire\Attributes\Locked;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
use Livewire\WithFileUploads;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ use App\Scopes\PortalScope;
|
|||
use Flux\Flux;
|
||||
use Illuminate\Validation\Rule;
|
||||
use Livewire\Attributes\Locked;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
use Livewire\WithFileUploads;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
use App\Enums\PressReleasePlaceholder;
|
||||
use Flux\Flux;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
|
||||
/**
|
||||
* Auswahl-Modal für die SVG-Titelbild-Platzhalter.
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ use App\Services\Billing\VatResolver;
|
|||
use Flux\Flux;
|
||||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
|
||||
/**
|
||||
* Buchungen & Add-ons (Phase 9F): Tarif-Raster mit Stripe-Checkout,
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
|
||||
use App\Services\Customer\CustomerCompanyContext;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
|
||||
new class extends Component
|
||||
{
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ use Illuminate\Database\Eloquent\Builder;
|
|||
use Illuminate\Support\Carbon;
|
||||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
|
||||
new #[Layout('components.layouts.app'), Title('Mein Dashboard')] class extends Component {
|
||||
public function with(): array
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ use App\Models\Invoice;
|
|||
use App\Models\LegacyInvoice;
|
||||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
use Livewire\WithPagination;
|
||||
|
||||
new #[Layout('components.layouts.app'), Title('Rechnungen')] class extends Component
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ use Illuminate\Validation\Rule;
|
|||
use Illuminate\Validation\ValidationException;
|
||||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
|
||||
new #[Layout('components.layouts.app'), Title('Neue Firma anlegen')] class extends Component
|
||||
{
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ use Illuminate\Support\Facades\DB;
|
|||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Attributes\Url;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
use Livewire\WithPagination;
|
||||
|
||||
new #[Layout('components.layouts.app'), Title('Meine Firmen')] class extends Component
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ use Illuminate\Validation\ValidationException;
|
|||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Locked;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
use Livewire\WithFileUploads;
|
||||
|
||||
new #[Layout('components.layouts.app'), Title('Firma')] class extends Component {
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ use Livewire\Attributes\Computed;
|
|||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\On;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
|
||||
new #[Layout('components.layouts.app'), Title('Neue Pressemitteilung')] class extends Component
|
||||
{
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ use Livewire\Attributes\Layout;
|
|||
use Livewire\Attributes\Locked;
|
||||
use Livewire\Attributes\On;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
|
||||
new #[Layout('components.layouts.app'), Title('Pressemitteilung bearbeiten')] class extends Component
|
||||
{
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ use Illuminate\Support\Facades\DB;
|
|||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Attributes\Url;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
use Livewire\WithPagination;
|
||||
|
||||
new #[Layout('components.layouts.app'), Title('Meine Pressemitteilungen')] class extends Component {
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ use Livewire\Attributes\Layout;
|
|||
use Livewire\Attributes\Locked;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Attributes\Url;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
|
||||
new #[Layout('components.layouts.app'), Title('Pressemitteilung')] class extends Component
|
||||
{
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ use App\Services\Billing\VatIdValidationService;
|
|||
use Illuminate\Validation\Rule;
|
||||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
|
||||
new #[Layout('components.layouts.app'), Title('Mein Profil')] class extends Component
|
||||
{
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ use Laravel\Fortify\TwoFactorAuthenticationProvider;
|
|||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Locked;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
|
||||
new #[Layout('components.layouts.app'), Title('Konto-Sicherheit')] class extends Component
|
||||
{
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ use App\Services\Api\ApiAccessEligibilityService;
|
|||
use Illuminate\Validation\Rule;
|
||||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Attributes\Title;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
|
||||
new #[Layout('components.layouts.app'), Title('API-Tokens')] class extends Component
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<?php
|
||||
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
|
||||
new class extends Component {
|
||||
public bool $notifications = false;
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
|
||||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
|
||||
new #[Layout('components.layouts.app')] class extends Component
|
||||
{
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
use App\Livewire\Actions\Logout;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
|
||||
new class extends Component
|
||||
{
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ use Illuminate\Support\Facades\Hash;
|
|||
use Illuminate\Validation\Rules\Password;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
|
||||
new #[Layout('components.layouts.app')] class extends Component
|
||||
{
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ use Illuminate\Support\Facades\Auth;
|
|||
use Illuminate\Support\Facades\Session;
|
||||
use Illuminate\Validation\Rule;
|
||||
use Livewire\Attributes\Layout;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
|
||||
new #[Layout('components.layouts.app')] class extends Component
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<?php
|
||||
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
|
||||
new class extends Component {
|
||||
public $timeframe = '7';
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ use Illuminate\Pagination\LengthAwarePaginator;
|
|||
use Illuminate\Pagination\Paginator;
|
||||
use Illuminate\Support\Carbon;
|
||||
use Livewire\Attributes\Locked;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
use Livewire\WithPagination;
|
||||
|
||||
new class extends Component
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ use Illuminate\Database\Eloquent\Builder;
|
|||
use Illuminate\Pagination\LengthAwarePaginator;
|
||||
use Livewire\Attributes\Locked;
|
||||
use Livewire\Attributes\Url;
|
||||
use Livewire\Volt\Component;
|
||||
use Livewire\Component;
|
||||
use Livewire\WithPagination;
|
||||
|
||||
new class extends Component
|
||||
|
|
|
|||
105
routes/admin.php
105
routes/admin.php
|
|
@ -10,7 +10,6 @@ use App\Http\Middleware\BlockAdminDuringImpersonation;
|
|||
use App\Http\Middleware\EnsureUserIsAdmin;
|
||||
use App\Http\Middleware\LogSlowAdminRequests;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
use Livewire\Volt\Volt;
|
||||
|
||||
// Hinweis: Die Root-Route (`/`) auf der Portal-Domain rendert seit dem
|
||||
// Hub-Launch die öffentliche Publisher-Landing (web/pressekonto.blade.php).
|
||||
|
|
@ -26,8 +25,8 @@ Route::get('dashboard', DashboardController::class)
|
|||
Route::middleware(['auth', 'verified'])->group(function () {
|
||||
Route::redirect('settings', '/admin/me/profile');
|
||||
Route::redirect('settings/profile', '/admin/me/profile')->name('settings.profile');
|
||||
Volt::route('settings/password', 'settings.password')->name('settings.password');
|
||||
Volt::route('settings/appearance', 'settings.appearance')->name('settings.appearance');
|
||||
Route::livewire('settings/password', 'settings.password')->name('settings.password');
|
||||
Route::livewire('settings/appearance', 'settings.appearance')->name('settings.appearance');
|
||||
});
|
||||
|
||||
Route::post('admin/impersonate/leave', LeaveImpersonationController::class)
|
||||
|
|
@ -40,10 +39,10 @@ Route::post('admin/impersonate/leave', LeaveImpersonationController::class)
|
|||
Route::middleware(['auth', 'verified', BlockAdminDuringImpersonation::class, EnsureUserIsAdmin::class, LogSlowAdminRequests::class])->group(function () {
|
||||
|
||||
// Content Management
|
||||
Volt::route('admin/press-releases', 'admin.press-releases.index')->name('admin.press-releases.index');
|
||||
Volt::route('admin/press-releases/create', 'admin.press-releases.create')->name('admin.press-releases.create');
|
||||
Volt::route('admin/press-releases/{id}', 'admin.press-releases.show')->name('admin.press-releases.show');
|
||||
Volt::route('admin/press-releases/{id}/edit', 'admin.press-releases.edit')->name('admin.press-releases.edit');
|
||||
Route::livewire('admin/press-releases', 'admin.press-releases.index')->name('admin.press-releases.index');
|
||||
Route::livewire('admin/press-releases/create', 'admin.press-releases.create')->name('admin.press-releases.create');
|
||||
Route::livewire('admin/press-releases/{id}', 'admin.press-releases.show')->name('admin.press-releases.show');
|
||||
Route::livewire('admin/press-releases/{id}/edit', 'admin.press-releases.edit')->name('admin.press-releases.edit');
|
||||
// Beweisoriginal und veröffentlichte Fassung (Bildkennzeichnung E.4):
|
||||
// nur hier, nur mit Zweck (per POST, Audit A-08), jeder Abruf
|
||||
// protokolliert; Restnachweise entfernter Bilder nur mit
|
||||
|
|
@ -55,106 +54,106 @@ Route::middleware(['auth', 'verified', BlockAdminDuringImpersonation::class, Ens
|
|||
|
||||
// Rubriken-Taxonomie: portalweite Struktur — nur admin (Befund H2).
|
||||
Route::middleware('can:categories:manage')->group(function (): void {
|
||||
Volt::route('admin/categories', 'admin.categories.index')->name('admin.categories.index');
|
||||
Volt::route('admin/categories/create', 'admin.categories.create')->name('admin.categories.create');
|
||||
Volt::route('admin/categories/{id}/edit', 'admin.categories.edit')->name('admin.categories.edit');
|
||||
Route::livewire('admin/categories', 'admin.categories.index')->name('admin.categories.index');
|
||||
Route::livewire('admin/categories/create', 'admin.categories.create')->name('admin.categories.create');
|
||||
Route::livewire('admin/categories/{id}/edit', 'admin.categories.edit')->name('admin.categories.edit');
|
||||
});
|
||||
|
||||
Route::middleware('can:footer-codes:manage')->group(function (): void {
|
||||
Volt::route('admin/footer-codes', 'admin.footer-codes.index')->name('admin.footer-codes.index');
|
||||
Volt::route('admin/footer-codes/create', 'admin.footer-codes.create')->name('admin.footer-codes.create');
|
||||
Volt::route('admin/footer-codes/{id}/edit', 'admin.footer-codes.edit')->name('admin.footer-codes.edit');
|
||||
Route::livewire('admin/footer-codes', 'admin.footer-codes.index')->name('admin.footer-codes.index');
|
||||
Route::livewire('admin/footer-codes/create', 'admin.footer-codes.create')->name('admin.footer-codes.create');
|
||||
Route::livewire('admin/footer-codes/{id}/edit', 'admin.footer-codes.edit')->name('admin.footer-codes.edit');
|
||||
});
|
||||
|
||||
// CRM
|
||||
// Lesen (companies:read) auch für Editoren; Schreiben nur admin (companies:write, Befund H2).
|
||||
Volt::route('admin/companies', 'admin.companies.index')->name('admin.companies.index');
|
||||
Volt::route('admin/companies/{id}', 'admin.companies.show')->where('id', '[0-9]+')->name('admin.companies.show');
|
||||
Volt::route('admin/contacts', 'admin.contacts.index')->name('admin.contacts.index');
|
||||
Route::livewire('admin/companies', 'admin.companies.index')->name('admin.companies.index');
|
||||
Route::livewire('admin/companies/{id}', 'admin.companies.show')->where('id', '[0-9]+')->name('admin.companies.show');
|
||||
Route::livewire('admin/contacts', 'admin.contacts.index')->name('admin.contacts.index');
|
||||
|
||||
Route::middleware('can:companies:write')->group(function (): void {
|
||||
Volt::route('admin/companies/create', 'admin.companies.create')->name('admin.companies.create');
|
||||
Volt::route('admin/companies/{id}/edit', 'admin.companies.edit')->name('admin.companies.edit');
|
||||
Volt::route('admin/companies/{companyId}/contacts/create', 'admin.contacts.create')->name('admin.companies.contacts.create');
|
||||
Volt::route('admin/contacts/create', 'admin.contacts.create')->name('admin.contacts.create');
|
||||
Volt::route('admin/contacts/{id}/edit', 'admin.contacts.edit')->name('admin.contacts.edit');
|
||||
Route::livewire('admin/companies/create', 'admin.companies.create')->name('admin.companies.create');
|
||||
Route::livewire('admin/companies/{id}/edit', 'admin.companies.edit')->name('admin.companies.edit');
|
||||
Route::livewire('admin/companies/{companyId}/contacts/create', 'admin.contacts.create')->name('admin.companies.contacts.create');
|
||||
Route::livewire('admin/contacts/create', 'admin.contacts.create')->name('admin.contacts.create');
|
||||
Route::livewire('admin/contacts/{id}/edit', 'admin.contacts.edit')->name('admin.contacts.edit');
|
||||
});
|
||||
|
||||
// Recht & Compliance (WS-3): Queue für DSGVO-/Persönlichkeitsrechts-/Meldungen
|
||||
// — sensible Vorgänge, nur admin (Befund H2).
|
||||
Route::middleware('can:compliance:manage')->group(function (): void {
|
||||
Volt::route('admin/legal-requests', 'admin.legal-requests.index')->name('admin.legal-requests.index');
|
||||
Volt::route('admin/legal-requests/{id}', 'admin.legal-requests.show')->name('admin.legal-requests.show');
|
||||
Route::livewire('admin/legal-requests', 'admin.legal-requests.index')->name('admin.legal-requests.index');
|
||||
Route::livewire('admin/legal-requests/{id}', 'admin.legal-requests.show')->name('admin.legal-requests.show');
|
||||
|
||||
// Kontakt: Queue für Anliegen aus dem Kontakt-Widget (Kontaktaufnahme,
|
||||
// Fehlermeldung, PM-Meldung, Feedback)
|
||||
Volt::route('admin/contact-messages', 'admin.contact-messages.index')->name('admin.contact-messages.index');
|
||||
Volt::route('admin/contact-messages/{id}', 'admin.contact-messages.show')->name('admin.contact-messages.show');
|
||||
Route::livewire('admin/contact-messages', 'admin.contact-messages.index')->name('admin.contact-messages.index');
|
||||
Route::livewire('admin/contact-messages/{id}', 'admin.contact-messages.show')->name('admin.contact-messages.show');
|
||||
});
|
||||
|
||||
// Billing: Rechnungen, Zahlungen, Tarife, Gutscheine — nur admin (Befund H2).
|
||||
Route::middleware('can:billing:manage')->group(function (): void {
|
||||
Volt::route('admin/invoices', 'admin.invoices.index')->name('admin.invoices.index');
|
||||
Route::livewire('admin/invoices', 'admin.invoices.index')->name('admin.invoices.index');
|
||||
Route::get('admin/legacy-invoices/{legacyInvoice}/pdf', LegacyInvoicePdfController::class)->name('admin.legacy-invoices.pdf');
|
||||
Route::get('admin/invoices/{invoice}/pdf', InvoicePdfController::class)->name('admin.invoices.pdf');
|
||||
Volt::route('admin/payments', 'admin.payments.index')->name('admin.payments.index');
|
||||
Volt::route('admin/payments/plans', 'admin.payments.plans')->name('admin.payments.plans');
|
||||
Volt::route('admin/coupons', 'admin.coupons.index')->name('admin.coupons.index');
|
||||
Volt::route('admin/newsletter-sync', 'admin.newsletter.sync')->name('admin.newsletter.sync');
|
||||
Route::livewire('admin/payments', 'admin.payments.index')->name('admin.payments.index');
|
||||
Route::livewire('admin/payments/plans', 'admin.payments.plans')->name('admin.payments.plans');
|
||||
Route::livewire('admin/coupons', 'admin.coupons.index')->name('admin.coupons.index');
|
||||
Route::livewire('admin/newsletter-sync', 'admin.newsletter.sync')->name('admin.newsletter.sync');
|
||||
});
|
||||
|
||||
// Administration
|
||||
Volt::route('admin/presets', 'admin.presets.index')->name('admin.presets.index');
|
||||
Volt::route('admin/presets/create', 'admin.presets.create')->name('admin.presets.create');
|
||||
Volt::route('admin/presets/{id}/edit', 'admin.presets.edit')->name('admin.presets.edit');
|
||||
Route::livewire('admin/presets', 'admin.presets.index')->name('admin.presets.index');
|
||||
Route::livewire('admin/presets/create', 'admin.presets.create')->name('admin.presets.create');
|
||||
Route::livewire('admin/presets/{id}/edit', 'admin.presets.edit')->name('admin.presets.edit');
|
||||
|
||||
Volt::route('admin/users', 'admin.users')->name('admin.users.index');
|
||||
Volt::route('admin/users/create', 'admin.users.create')->name('admin.users.create');
|
||||
Route::livewire('admin/users', 'admin.users')->name('admin.users.index');
|
||||
Route::livewire('admin/users/create', 'admin.users.create')->name('admin.users.create');
|
||||
// Gutschriften auf der Detailseite sind finanzwirksam: die Berechtigung
|
||||
// hängt an der Route (persistente Authorize-Middleware, greift auch für
|
||||
// Livewire-Folge-Requests) und nicht nur an mount() (Audit F08).
|
||||
Volt::route('admin/users/{id}', 'admin.users.show')->middleware('can:users:manage')->name('admin.users.show');
|
||||
Volt::route('admin/users/{id}/edit', 'admin.users.edit')->name('admin.users.edit');
|
||||
Route::livewire('admin/users/{id}', 'admin.users.show')->middleware('can:users:manage')->name('admin.users.show');
|
||||
Route::livewire('admin/users/{id}/edit', 'admin.users.edit')->name('admin.users.edit');
|
||||
|
||||
// Interner Newsletter: Kampagnen an Bestands-User (Filter + Protokoll).
|
||||
// Massenversand an die User-Datenbank → nur mit users:manage (admin).
|
||||
Route::middleware('can:users:manage')->group(function (): void {
|
||||
// Mail-Sperrliste (Bounce-Suppression, Roadmap 1b.6)
|
||||
Volt::route('admin/mail/sperrliste', 'admin.mail.suppressions')->name('admin.mail.suppressions');
|
||||
Volt::route('admin/newsletter', 'admin.newsletter.campaigns.index')->name('admin.newsletter.campaigns.index');
|
||||
Volt::route('admin/newsletter/abmeldungen', 'admin.newsletter.unsubscribes')->name('admin.newsletter.unsubscribes');
|
||||
Volt::route('admin/newsletter/create', 'admin.newsletter.campaigns.edit')->name('admin.newsletter.campaigns.create');
|
||||
Volt::route('admin/newsletter/{id}', 'admin.newsletter.campaigns.show')->where('id', '[0-9]+')->name('admin.newsletter.campaigns.show');
|
||||
Volt::route('admin/newsletter/{id}/edit', 'admin.newsletter.campaigns.edit')->where('id', '[0-9]+')->name('admin.newsletter.campaigns.edit');
|
||||
Route::livewire('admin/mail/sperrliste', 'admin.mail.suppressions')->name('admin.mail.suppressions');
|
||||
Route::livewire('admin/newsletter', 'admin.newsletter.campaigns.index')->name('admin.newsletter.campaigns.index');
|
||||
Route::livewire('admin/newsletter/abmeldungen', 'admin.newsletter.unsubscribes')->name('admin.newsletter.unsubscribes');
|
||||
Route::livewire('admin/newsletter/create', 'admin.newsletter.campaigns.edit')->name('admin.newsletter.campaigns.create');
|
||||
Route::livewire('admin/newsletter/{id}', 'admin.newsletter.campaigns.show')->where('id', '[0-9]+')->name('admin.newsletter.campaigns.show');
|
||||
Route::livewire('admin/newsletter/{id}/edit', 'admin.newsletter.campaigns.edit')->where('id', '[0-9]+')->name('admin.newsletter.campaigns.edit');
|
||||
});
|
||||
|
||||
Volt::route('admin/roles', 'admin.roles.index')->name('admin.roles.index');
|
||||
Volt::route('admin/roles/create', 'admin.roles.create')->name('admin.roles.create');
|
||||
Volt::route('admin/roles/{id}/edit', 'admin.roles.edit')->name('admin.roles.edit');
|
||||
Route::livewire('admin/roles', 'admin.roles.index')->name('admin.roles.index');
|
||||
Route::livewire('admin/roles/create', 'admin.roles.create')->name('admin.roles.create');
|
||||
Route::livewire('admin/roles/{id}/edit', 'admin.roles.edit')->name('admin.roles.edit');
|
||||
|
||||
// Bilder (Bildkennzeichnung): alle Titelbilder mit Nachweis, Bestätigung und KI-Vorab-Check.
|
||||
Volt::route('admin/images', 'admin.images.index')->name('admin.images.index');
|
||||
Route::livewire('admin/images', 'admin.images.index')->name('admin.images.index');
|
||||
|
||||
// Beweisarchiv (Bildkennzeichnung Block F): Liste, Legal Hold, Öffnen/Export mit Zweck.
|
||||
Route::middleware('can:compliance:manage')->group(function (): void {
|
||||
Volt::route('admin/archive', 'admin.archive.index')->name('admin.archive.index');
|
||||
Route::livewire('admin/archive', 'admin.archive.index')->name('admin.archive.index');
|
||||
Route::match(['get', 'post'], 'admin/archive/{entry}/download', [ArchiveEntryController::class, 'download'])->whereNumber('entry')->name('admin.archive.download');
|
||||
Route::match(['get', 'post'], 'admin/archive/{entry}/export', [ArchiveEntryController::class, 'export'])->whereNumber('entry')->name('admin.archive.export');
|
||||
});
|
||||
|
||||
// Reports
|
||||
Volt::route('admin/reports/activity', 'admin.reports.activity')->name('admin.reports.activity');
|
||||
Volt::route('admin/reports/slow-requests', 'admin.reports.slow-requests')->name('admin.reports.slow-requests');
|
||||
Route::livewire('admin/reports/activity', 'admin.reports.activity')->name('admin.reports.activity');
|
||||
Route::livewire('admin/reports/slow-requests', 'admin.reports.slow-requests')->name('admin.reports.slow-requests');
|
||||
|
||||
// Einlieferer-Bericht: unzustellbare Kontaktdaten und abgelehnte
|
||||
// Meldungen je API-Einlieferer (Kontakterreichbarkeit).
|
||||
Volt::route('admin/reports/einlieferer', 'admin.reports.submitter-contacts')->name('admin.reports.submitter-contacts');
|
||||
Route::livewire('admin/reports/einlieferer', 'admin.reports.submitter-contacts')->name('admin.reports.submitter-contacts');
|
||||
|
||||
// Indexierungsstatus aus der Search Console (Roadmap 1c.4): Verteilung
|
||||
// nach Direkteinreichung/Syndikation — Grundlage für die Kundenansicht.
|
||||
Volt::route('admin/reports/indexierung', 'admin.reports.index-status')->name('admin.reports.index-status');
|
||||
Route::livewire('admin/reports/indexierung', 'admin.reports.index-status')->name('admin.reports.index-status');
|
||||
|
||||
Route::middleware('can:settings:manage')->group(function (): void {
|
||||
Volt::route('admin/reports/system-health', 'admin.reports.system-health')->name('admin.reports.system-health');
|
||||
Route::livewire('admin/reports/system-health', 'admin.reports.system-health')->name('admin.reports.system-health');
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -6,12 +6,11 @@ use App\Http\Controllers\Auth\MagicLinkConsumeController;
|
|||
use App\Http\Controllers\Auth\VerifyEmailController;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
use Laravel\Fortify\Http\Controllers\AuthenticatedSessionController;
|
||||
use Livewire\Volt\Volt;
|
||||
|
||||
// Fortify-Routen für Authentifizierung mit Livewire
|
||||
Route::group(['middleware' => config('fortify.middleware', ['web'])], function () {
|
||||
// Login mit Livewire
|
||||
Volt::route('/login', 'auth.login')
|
||||
Route::livewire('/login', 'auth.login')
|
||||
->middleware(['guest:'.config('fortify.guard')])
|
||||
->name('login');
|
||||
|
||||
|
|
@ -24,7 +23,7 @@ Route::group(['middleware' => config('fortify.middleware', ['web'])], function (
|
|||
|
||||
// Anmeldung per E-Mail-Link (Magic-Link): zusammengeführte Seite für
|
||||
// Bestandskonten UND hinterlegte Pressekontakte ohne Account (WS-2).
|
||||
Volt::route('/anmeldelink', 'auth.magic-link')
|
||||
Route::livewire('/anmeldelink', 'auth.magic-link')
|
||||
->middleware(['guest:'.config('fortify.guard')])
|
||||
->name('magic-link.request');
|
||||
|
||||
|
|
@ -41,22 +40,22 @@ Route::group(['middleware' => config('fortify.middleware', ['web'])], function (
|
|||
->name('oauth.google.callback');
|
||||
|
||||
// Registrierung mit Livewire
|
||||
Volt::route('/register', 'auth.register')
|
||||
Route::livewire('/register', 'auth.register')
|
||||
->middleware(['guest:'.config('fortify.guard')])
|
||||
->name('register');
|
||||
|
||||
// Passwort vergessen mit Livewire
|
||||
Volt::route('/forgot-password', 'auth.forgot-password')
|
||||
Route::livewire('/forgot-password', 'auth.forgot-password')
|
||||
->middleware(['guest:'.config('fortify.guard')])
|
||||
->name('password.request');
|
||||
|
||||
// Passwort zurücksetzen mit Livewire
|
||||
Volt::route('/reset-password/{token}', 'auth.reset-password')
|
||||
Route::livewire('/reset-password/{token}', 'auth.reset-password')
|
||||
->middleware(['guest:'.config('fortify.guard')])
|
||||
->name('password.reset');
|
||||
|
||||
// E-Mail-Verifizierung: Notice-/Danke-Seite (Volt)
|
||||
Volt::route('/verify-email', 'auth.verify-email')
|
||||
Route::livewire('/verify-email', 'auth.verify-email')
|
||||
->middleware(['auth:'.config('fortify.guard')])
|
||||
->name('verification.notice');
|
||||
|
||||
|
|
@ -81,12 +80,12 @@ Route::group(['middleware' => config('fortify.middleware', ['web'])], function (
|
|||
|
||||
// 2FA-Challenge-Seite (Volt-Frontend für Fortifys two-factor-challenge);
|
||||
// der eigentliche POST geht an Fortifys Controller.
|
||||
Volt::route('/two-factor-challenge', 'auth.two-factor-challenge')
|
||||
Route::livewire('/two-factor-challenge', 'auth.two-factor-challenge')
|
||||
->middleware(['guest:'.config('fortify.guard')])
|
||||
->name('two-factor.challenge');
|
||||
|
||||
// Passwort bestätigen mit Livewire
|
||||
Volt::route('/confirm-password', 'auth.confirm-password')
|
||||
Route::livewire('/confirm-password', 'auth.confirm-password')
|
||||
->middleware(['auth:'.config('fortify.guard')])
|
||||
->name('password.confirm');
|
||||
|
||||
|
|
|
|||
|
|
@ -10,7 +10,6 @@ use App\Http\Controllers\Web\PressReleaseReportController;
|
|||
use App\Http\Middleware\EnsureUserIsCustomer;
|
||||
use App\Http\Middleware\LogSlowAdminRequests;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
use Livewire\Volt\Volt;
|
||||
|
||||
// ============================================================
|
||||
// "Mein Bereich" – Eigentümer-Sicht im gemeinsamen Admin-Panel
|
||||
|
|
@ -23,12 +22,12 @@ Route::middleware(['auth', 'verified', EnsureUserIsCustomer::class, LogSlowAdmin
|
|||
->name('me.')
|
||||
->group(function () {
|
||||
|
||||
Volt::route('/', 'customer.dashboard')->name('dashboard');
|
||||
Route::livewire('/', 'customer.dashboard')->name('dashboard');
|
||||
|
||||
Volt::route('press-releases', 'customer.press-releases.index')->name('press-releases.index');
|
||||
Volt::route('press-releases/create', 'customer.press-releases.create')->name('press-releases.create');
|
||||
Volt::route('press-releases/{id}', 'customer.press-releases.show')->name('press-releases.show');
|
||||
Volt::route('press-releases/{id}/edit', 'customer.press-releases.edit')->name('press-releases.edit');
|
||||
Route::livewire('press-releases', 'customer.press-releases.index')->name('press-releases.index');
|
||||
Route::livewire('press-releases/create', 'customer.press-releases.create')->name('press-releases.create');
|
||||
Route::livewire('press-releases/{id}', 'customer.press-releases.show')->name('press-releases.show');
|
||||
Route::livewire('press-releases/{id}/edit', 'customer.press-releases.edit')->name('press-releases.edit');
|
||||
Route::get('press-releases/{id}/nachweis', ProofPdfController::class)
|
||||
->where('id', '[0-9]+')
|
||||
->name('press-releases.proof');
|
||||
|
|
@ -39,14 +38,14 @@ Route::middleware(['auth', 'verified', EnsureUserIsCustomer::class, LogSlowAdmin
|
|||
->where('pressReleaseId', '[0-9]+')
|
||||
->name('press-releases.report');
|
||||
|
||||
Volt::route('firmen', 'customer.press-kits.index')->name('press-kits.index');
|
||||
Volt::route('firmen/anlegen', 'customer.press-kits.create')->name('press-kits.create');
|
||||
Volt::route('firmen/{id}', 'customer.press-kits.show')->name('press-kits.show');
|
||||
Route::livewire('firmen', 'customer.press-kits.index')->name('press-kits.index');
|
||||
Route::livewire('firmen/anlegen', 'customer.press-kits.create')->name('press-kits.create');
|
||||
Route::livewire('firmen/{id}', 'customer.press-kits.show')->name('press-kits.show');
|
||||
Route::redirect('pressemappen', '/admin/me/firmen', 301);
|
||||
Route::get('pressemappen/{id}', fn (string $id) => redirect("/admin/me/firmen/{$id}", 301))
|
||||
->where('id', '[0-9]+');
|
||||
|
||||
Volt::route('buchungen-add-ons', 'customer.bookings')->name('bookings.index');
|
||||
Route::livewire('buchungen-add-ons', 'customer.bookings')->name('bookings.index');
|
||||
Route::get('checkout/abo/{planSlug}/{interval}', [CheckoutController::class, 'subscription'])
|
||||
->whereIn('interval', ['monthly', 'yearly'])
|
||||
->name('checkout.subscription');
|
||||
|
|
@ -65,14 +64,14 @@ Route::middleware(['auth', 'verified', EnsureUserIsCustomer::class, LogSlowAdmin
|
|||
->name('checkout.change');
|
||||
Route::get('checkout/abo-verwalten', [CheckoutController::class, 'billingPortal'])
|
||||
->name('checkout.billing-portal');
|
||||
Volt::route('invoices', 'customer.invoices')->name('invoices.index');
|
||||
Route::livewire('invoices', 'customer.invoices')->name('invoices.index');
|
||||
Route::get('legacy-invoices/{legacyInvoice}/pdf', LegacyInvoicePdfController::class)->name('invoices.pdf');
|
||||
Route::get('invoices/{invoice}/stripe', StripeInvoiceRedirectController::class)->name('invoices.stripe');
|
||||
Route::get('invoices/{invoice}/pdf', InvoicePdfController::class)->name('invoices.manual-pdf');
|
||||
Volt::route('tokens', 'customer.tokens')->name('tokens.index');
|
||||
Route::livewire('tokens', 'customer.tokens')->name('tokens.index');
|
||||
|
||||
Volt::route('profile', 'customer.profile')->name('profile');
|
||||
Volt::route('security', 'customer.security')->name('security');
|
||||
Route::livewire('profile', 'customer.profile')->name('profile');
|
||||
Route::livewire('security', 'customer.security')->name('security');
|
||||
});
|
||||
|
||||
// ============================================================
|
||||
|
|
|
|||
|
|
@ -15,14 +15,14 @@ use Illuminate\Auth\Events\Login;
|
|||
use Illuminate\Support\Facades\Mail;
|
||||
use Illuminate\Support\Facades\Notification;
|
||||
use Illuminate\Support\Facades\Queue;
|
||||
use Livewire\Volt\Volt;
|
||||
use Livewire\Livewire;
|
||||
use Tests\TestCase;
|
||||
|
||||
test('a self registration is recorded in the activity log', function () {
|
||||
/** @var TestCase $this */
|
||||
Notification::fake();
|
||||
|
||||
Volt::test('auth.register')
|
||||
Livewire::test('auth.register')
|
||||
->set('name', 'Verlauf Tester')
|
||||
->set('email', 'verlauf@example.com')
|
||||
->set('password', 'password')
|
||||
|
|
@ -106,7 +106,7 @@ test('the activity report page lists events and filters by type', function () {
|
|||
|
||||
$this->get(route('admin.reports.activity'))->assertOk();
|
||||
|
||||
Volt::test('admin.reports.activity')
|
||||
Livewire::test('admin.reports.activity')
|
||||
->assertSee('Kontaktanfrage „Testthema“')
|
||||
->assertSee('hat sich angemeldet')
|
||||
->set('typeFilter', ActivityType::ContactRequest->value)
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ use App\Models\User;
|
|||
use App\Support\WebPageCache;
|
||||
use Database\Seeders\RolesAndPermissionsSeeder;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Livewire\Volt\Volt as LivewireVolt;
|
||||
use Livewire\Livewire;
|
||||
use Tests\TestCase;
|
||||
|
||||
beforeEach(function (): void {
|
||||
|
|
@ -27,7 +27,7 @@ test('admin can render category create page', function () {
|
|||
});
|
||||
|
||||
test('admin can create a new category with both translations', function () {
|
||||
LivewireVolt::test('admin.categories.create')
|
||||
Livewire::test('admin.categories.create')
|
||||
->set('portal', Portal::Both->value)
|
||||
->set('nameDe', 'Künstliche Intelligenz')
|
||||
->set('nameEn', 'Artificial Intelligence')
|
||||
|
|
@ -52,7 +52,7 @@ test('admin can create a new category with both translations', function () {
|
|||
});
|
||||
|
||||
test('category create requires both names', function () {
|
||||
LivewireVolt::test('admin.categories.create')
|
||||
Livewire::test('admin.categories.create')
|
||||
->set('nameDe', '')
|
||||
->set('nameEn', '')
|
||||
->call('save')
|
||||
|
|
@ -66,7 +66,7 @@ test('category create generates unique slug per locale on collision', function (
|
|||
['locale' => 'en', 'name' => 'Business', 'slug' => 'business'],
|
||||
]);
|
||||
|
||||
LivewireVolt::test('admin.categories.create')
|
||||
Livewire::test('admin.categories.create')
|
||||
->set('nameDe', 'Wirtschaft')
|
||||
->set('nameEn', 'Business')
|
||||
->call('save')
|
||||
|
|
@ -87,7 +87,7 @@ test('admin can edit an existing category and rename slugs in place', function (
|
|||
['locale' => 'en', 'name' => 'Old Name', 'slug' => 'old-name'],
|
||||
]);
|
||||
|
||||
LivewireVolt::test('admin.categories.edit', ['id' => $category->id])
|
||||
Livewire::test('admin.categories.edit', ['id' => $category->id])
|
||||
->set('nameDe', 'Neuer Name')
|
||||
->set('slugDe', 'neuer-name')
|
||||
->set('nameEn', 'New Name')
|
||||
|
|
@ -116,7 +116,7 @@ test('category edit refuses parent assignment that would create a hierarchy loop
|
|||
['locale' => 'en', 'name' => 'Child', 'slug' => 'child-en'],
|
||||
]);
|
||||
|
||||
LivewireVolt::test('admin.categories.edit', ['id' => $parent->id])
|
||||
Livewire::test('admin.categories.edit', ['id' => $parent->id])
|
||||
->set('nameDe', 'Parent')
|
||||
->set('slugDe', 'parent')
|
||||
->set('nameEn', 'Parent')
|
||||
|
|
@ -137,7 +137,7 @@ test('category cannot be deleted while it has press releases', function () {
|
|||
'category_id' => $category->id,
|
||||
]);
|
||||
|
||||
LivewireVolt::test('admin.categories.edit', ['id' => $category->id])
|
||||
Livewire::test('admin.categories.edit', ['id' => $category->id])
|
||||
->call('deleteCategory');
|
||||
|
||||
expect(Category::query()->find($category->id))->not->toBeNull();
|
||||
|
|
@ -150,7 +150,7 @@ test('category can be deleted when empty', function () {
|
|||
['locale' => 'en', 'name' => 'Empty', 'slug' => 'empty-en'],
|
||||
]);
|
||||
|
||||
LivewireVolt::test('admin.categories.edit', ['id' => $category->id])
|
||||
Livewire::test('admin.categories.edit', ['id' => $category->id])
|
||||
->call('deleteCategory')
|
||||
->assertRedirect(route('admin.categories.index'));
|
||||
|
||||
|
|
@ -170,7 +170,7 @@ test('deactivating a category clears the cached public pages and its feed at onc
|
|||
// Feed warm im Seiten-Cache.
|
||||
$this->get('https://presseecho.test/de/category/handel/feed')->assertSuccessful();
|
||||
|
||||
LivewireVolt::test('admin.categories.edit', ['id' => $category->id])
|
||||
Livewire::test('admin.categories.edit', ['id' => $category->id])
|
||||
->set('isActive', false)
|
||||
->call('save')
|
||||
->assertHasNoErrors();
|
||||
|
|
@ -184,7 +184,7 @@ test('creating an active category clears the cached public pages at once', funct
|
|||
$generation = WebPageCache::generation();
|
||||
Cache::put('web.llms.presseecho.test', 'alt', 3600);
|
||||
|
||||
LivewireVolt::test('admin.categories.create')
|
||||
Livewire::test('admin.categories.create')
|
||||
->set('portal', Portal::Presseecho->value)
|
||||
->set('nameDe', 'Energie')
|
||||
->set('nameEn', 'Energy')
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue