Add livewire, add pagination

This commit is contained in:
Alex Thomassen 2023-11-24 14:56:12 +00:00
parent af2d996c12
commit 48778b3f5c
Signed by: Alex
GPG Key ID: 10BD786B5F6FF5DE
36 changed files with 1750 additions and 155 deletions

View File

@ -141,6 +141,23 @@
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
'Laravel\Socialite\Contracts\Factory' => \Laravel\Socialite\SocialiteManager::class,
'Livewire\EventBus' => \Livewire\EventBus::class,
'Livewire\LivewireManager' => \Livewire\LivewireManager::class,
'Livewire\Mechanisms\ComponentRegistry' => \Livewire\Mechanisms\ComponentRegistry::class,
'Livewire\Mechanisms\DataStore' => \Livewire\Mechanisms\DataStore::class,
'Livewire\Mechanisms\ExtendBlade\ExtendBlade' => \Livewire\Mechanisms\ExtendBlade\ExtendBlade::class,
'Livewire\Mechanisms\FrontendAssets\FrontendAssets' => \Livewire\Mechanisms\FrontendAssets\FrontendAssets::class,
'Livewire\Mechanisms\HandleComponents\HandleComponents' => \Livewire\Mechanisms\HandleComponents\HandleComponents::class,
'Livewire\Mechanisms\HandleRequests\HandleRequests' => \Livewire\Mechanisms\HandleRequests\HandleRequests::class,
'Livewire\Mechanisms\PersistentMiddleware\PersistentMiddleware' => \Livewire\Mechanisms\PersistentMiddleware\PersistentMiddleware::class,
'Livewire\Mechanisms\RenderComponent' => \Livewire\Mechanisms\RenderComponent::class,
'Livewire\Volt\ComponentFactory' => \Livewire\Volt\ComponentFactory::class,
'Livewire\Volt\ComponentResolver' => \Livewire\Volt\ComponentResolver::class,
'Livewire\Volt\LivewireManager' => \Livewire\Volt\LivewireManager::class,
'Livewire\Volt\MountedDirectories' => \Livewire\Volt\MountedDirectories::class,
'Livewire\Volt\Precompilers\ExtractFragments' => \Livewire\Volt\Precompilers\ExtractFragments::class,
'Livewire\Volt\Precompilers\ExtractTemplate' => \Livewire\Volt\Precompilers\ExtractTemplate::class,
'Livewire\Volt\VoltManager' => \Livewire\Volt\VoltManager::class,
'NunoMaduro\Collision\Provider' => \NunoMaduro\Collision\Provider::class,
'SocialiteProviders\Manager\Contracts\Helpers\ConfigRetrieverInterface' => \SocialiteProviders\Manager\Helpers\ConfigRetriever::class,
'Spatie\FlareClient\Flare' => \Spatie\FlareClient\Flare::class,
@ -197,6 +214,7 @@
'queue.worker' => \Illuminate\Queue\Worker::class,
'redirect' => \Illuminate\Routing\Redirector::class,
'redis' => \Illuminate\Redis\RedisManager::class,
'redis.connection' => \Illuminate\Redis\Connections\PredisConnection::class,
'router' => \Illuminate\Routing\Router::class,
'session' => \Illuminate\Session\SessionManager::class,
'session.store' => \Illuminate\Session\Store::class,
@ -340,6 +358,23 @@
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
'Laravel\Socialite\Contracts\Factory' => \Laravel\Socialite\SocialiteManager::class,
'Livewire\EventBus' => \Livewire\EventBus::class,
'Livewire\LivewireManager' => \Livewire\LivewireManager::class,
'Livewire\Mechanisms\ComponentRegistry' => \Livewire\Mechanisms\ComponentRegistry::class,
'Livewire\Mechanisms\DataStore' => \Livewire\Mechanisms\DataStore::class,
'Livewire\Mechanisms\ExtendBlade\ExtendBlade' => \Livewire\Mechanisms\ExtendBlade\ExtendBlade::class,
'Livewire\Mechanisms\FrontendAssets\FrontendAssets' => \Livewire\Mechanisms\FrontendAssets\FrontendAssets::class,
'Livewire\Mechanisms\HandleComponents\HandleComponents' => \Livewire\Mechanisms\HandleComponents\HandleComponents::class,
'Livewire\Mechanisms\HandleRequests\HandleRequests' => \Livewire\Mechanisms\HandleRequests\HandleRequests::class,
'Livewire\Mechanisms\PersistentMiddleware\PersistentMiddleware' => \Livewire\Mechanisms\PersistentMiddleware\PersistentMiddleware::class,
'Livewire\Mechanisms\RenderComponent' => \Livewire\Mechanisms\RenderComponent::class,
'Livewire\Volt\ComponentFactory' => \Livewire\Volt\ComponentFactory::class,
'Livewire\Volt\ComponentResolver' => \Livewire\Volt\ComponentResolver::class,
'Livewire\Volt\LivewireManager' => \Livewire\Volt\LivewireManager::class,
'Livewire\Volt\MountedDirectories' => \Livewire\Volt\MountedDirectories::class,
'Livewire\Volt\Precompilers\ExtractFragments' => \Livewire\Volt\Precompilers\ExtractFragments::class,
'Livewire\Volt\Precompilers\ExtractTemplate' => \Livewire\Volt\Precompilers\ExtractTemplate::class,
'Livewire\Volt\VoltManager' => \Livewire\Volt\VoltManager::class,
'NunoMaduro\Collision\Provider' => \NunoMaduro\Collision\Provider::class,
'SocialiteProviders\Manager\Contracts\Helpers\ConfigRetrieverInterface' => \SocialiteProviders\Manager\Helpers\ConfigRetriever::class,
'Spatie\FlareClient\Flare' => \Spatie\FlareClient\Flare::class,
@ -396,6 +431,7 @@
'queue.worker' => \Illuminate\Queue\Worker::class,
'redirect' => \Illuminate\Routing\Redirector::class,
'redis' => \Illuminate\Redis\RedisManager::class,
'redis.connection' => \Illuminate\Redis\Connections\PredisConnection::class,
'router' => \Illuminate\Routing\Router::class,
'session' => \Illuminate\Session\SessionManager::class,
'session.store' => \Illuminate\Session\Store::class,
@ -539,6 +575,23 @@
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
'Laravel\Socialite\Contracts\Factory' => \Laravel\Socialite\SocialiteManager::class,
'Livewire\EventBus' => \Livewire\EventBus::class,
'Livewire\LivewireManager' => \Livewire\LivewireManager::class,
'Livewire\Mechanisms\ComponentRegistry' => \Livewire\Mechanisms\ComponentRegistry::class,
'Livewire\Mechanisms\DataStore' => \Livewire\Mechanisms\DataStore::class,
'Livewire\Mechanisms\ExtendBlade\ExtendBlade' => \Livewire\Mechanisms\ExtendBlade\ExtendBlade::class,
'Livewire\Mechanisms\FrontendAssets\FrontendAssets' => \Livewire\Mechanisms\FrontendAssets\FrontendAssets::class,
'Livewire\Mechanisms\HandleComponents\HandleComponents' => \Livewire\Mechanisms\HandleComponents\HandleComponents::class,
'Livewire\Mechanisms\HandleRequests\HandleRequests' => \Livewire\Mechanisms\HandleRequests\HandleRequests::class,
'Livewire\Mechanisms\PersistentMiddleware\PersistentMiddleware' => \Livewire\Mechanisms\PersistentMiddleware\PersistentMiddleware::class,
'Livewire\Mechanisms\RenderComponent' => \Livewire\Mechanisms\RenderComponent::class,
'Livewire\Volt\ComponentFactory' => \Livewire\Volt\ComponentFactory::class,
'Livewire\Volt\ComponentResolver' => \Livewire\Volt\ComponentResolver::class,
'Livewire\Volt\LivewireManager' => \Livewire\Volt\LivewireManager::class,
'Livewire\Volt\MountedDirectories' => \Livewire\Volt\MountedDirectories::class,
'Livewire\Volt\Precompilers\ExtractFragments' => \Livewire\Volt\Precompilers\ExtractFragments::class,
'Livewire\Volt\Precompilers\ExtractTemplate' => \Livewire\Volt\Precompilers\ExtractTemplate::class,
'Livewire\Volt\VoltManager' => \Livewire\Volt\VoltManager::class,
'NunoMaduro\Collision\Provider' => \NunoMaduro\Collision\Provider::class,
'SocialiteProviders\Manager\Contracts\Helpers\ConfigRetrieverInterface' => \SocialiteProviders\Manager\Helpers\ConfigRetriever::class,
'Spatie\FlareClient\Flare' => \Spatie\FlareClient\Flare::class,
@ -595,6 +648,7 @@
'queue.worker' => \Illuminate\Queue\Worker::class,
'redirect' => \Illuminate\Routing\Redirector::class,
'redis' => \Illuminate\Redis\RedisManager::class,
'redis.connection' => \Illuminate\Redis\Connections\PredisConnection::class,
'router' => \Illuminate\Routing\Router::class,
'session' => \Illuminate\Session\SessionManager::class,
'session.store' => \Illuminate\Session\Store::class,
@ -738,6 +792,23 @@
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
'Laravel\Socialite\Contracts\Factory' => \Laravel\Socialite\SocialiteManager::class,
'Livewire\EventBus' => \Livewire\EventBus::class,
'Livewire\LivewireManager' => \Livewire\LivewireManager::class,
'Livewire\Mechanisms\ComponentRegistry' => \Livewire\Mechanisms\ComponentRegistry::class,
'Livewire\Mechanisms\DataStore' => \Livewire\Mechanisms\DataStore::class,
'Livewire\Mechanisms\ExtendBlade\ExtendBlade' => \Livewire\Mechanisms\ExtendBlade\ExtendBlade::class,
'Livewire\Mechanisms\FrontendAssets\FrontendAssets' => \Livewire\Mechanisms\FrontendAssets\FrontendAssets::class,
'Livewire\Mechanisms\HandleComponents\HandleComponents' => \Livewire\Mechanisms\HandleComponents\HandleComponents::class,
'Livewire\Mechanisms\HandleRequests\HandleRequests' => \Livewire\Mechanisms\HandleRequests\HandleRequests::class,
'Livewire\Mechanisms\PersistentMiddleware\PersistentMiddleware' => \Livewire\Mechanisms\PersistentMiddleware\PersistentMiddleware::class,
'Livewire\Mechanisms\RenderComponent' => \Livewire\Mechanisms\RenderComponent::class,
'Livewire\Volt\ComponentFactory' => \Livewire\Volt\ComponentFactory::class,
'Livewire\Volt\ComponentResolver' => \Livewire\Volt\ComponentResolver::class,
'Livewire\Volt\LivewireManager' => \Livewire\Volt\LivewireManager::class,
'Livewire\Volt\MountedDirectories' => \Livewire\Volt\MountedDirectories::class,
'Livewire\Volt\Precompilers\ExtractFragments' => \Livewire\Volt\Precompilers\ExtractFragments::class,
'Livewire\Volt\Precompilers\ExtractTemplate' => \Livewire\Volt\Precompilers\ExtractTemplate::class,
'Livewire\Volt\VoltManager' => \Livewire\Volt\VoltManager::class,
'NunoMaduro\Collision\Provider' => \NunoMaduro\Collision\Provider::class,
'SocialiteProviders\Manager\Contracts\Helpers\ConfigRetrieverInterface' => \SocialiteProviders\Manager\Helpers\ConfigRetriever::class,
'Spatie\FlareClient\Flare' => \Spatie\FlareClient\Flare::class,
@ -794,6 +865,7 @@
'queue.worker' => \Illuminate\Queue\Worker::class,
'redirect' => \Illuminate\Routing\Redirector::class,
'redis' => \Illuminate\Redis\RedisManager::class,
'redis.connection' => \Illuminate\Redis\Connections\PredisConnection::class,
'router' => \Illuminate\Routing\Router::class,
'session' => \Illuminate\Session\SessionManager::class,
'session.store' => \Illuminate\Session\Store::class,
@ -937,6 +1009,23 @@
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
'Laravel\Socialite\Contracts\Factory' => \Laravel\Socialite\SocialiteManager::class,
'Livewire\EventBus' => \Livewire\EventBus::class,
'Livewire\LivewireManager' => \Livewire\LivewireManager::class,
'Livewire\Mechanisms\ComponentRegistry' => \Livewire\Mechanisms\ComponentRegistry::class,
'Livewire\Mechanisms\DataStore' => \Livewire\Mechanisms\DataStore::class,
'Livewire\Mechanisms\ExtendBlade\ExtendBlade' => \Livewire\Mechanisms\ExtendBlade\ExtendBlade::class,
'Livewire\Mechanisms\FrontendAssets\FrontendAssets' => \Livewire\Mechanisms\FrontendAssets\FrontendAssets::class,
'Livewire\Mechanisms\HandleComponents\HandleComponents' => \Livewire\Mechanisms\HandleComponents\HandleComponents::class,
'Livewire\Mechanisms\HandleRequests\HandleRequests' => \Livewire\Mechanisms\HandleRequests\HandleRequests::class,
'Livewire\Mechanisms\PersistentMiddleware\PersistentMiddleware' => \Livewire\Mechanisms\PersistentMiddleware\PersistentMiddleware::class,
'Livewire\Mechanisms\RenderComponent' => \Livewire\Mechanisms\RenderComponent::class,
'Livewire\Volt\ComponentFactory' => \Livewire\Volt\ComponentFactory::class,
'Livewire\Volt\ComponentResolver' => \Livewire\Volt\ComponentResolver::class,
'Livewire\Volt\LivewireManager' => \Livewire\Volt\LivewireManager::class,
'Livewire\Volt\MountedDirectories' => \Livewire\Volt\MountedDirectories::class,
'Livewire\Volt\Precompilers\ExtractFragments' => \Livewire\Volt\Precompilers\ExtractFragments::class,
'Livewire\Volt\Precompilers\ExtractTemplate' => \Livewire\Volt\Precompilers\ExtractTemplate::class,
'Livewire\Volt\VoltManager' => \Livewire\Volt\VoltManager::class,
'NunoMaduro\Collision\Provider' => \NunoMaduro\Collision\Provider::class,
'SocialiteProviders\Manager\Contracts\Helpers\ConfigRetrieverInterface' => \SocialiteProviders\Manager\Helpers\ConfigRetriever::class,
'Spatie\FlareClient\Flare' => \Spatie\FlareClient\Flare::class,
@ -993,6 +1082,7 @@
'queue.worker' => \Illuminate\Queue\Worker::class,
'redirect' => \Illuminate\Routing\Redirector::class,
'redis' => \Illuminate\Redis\RedisManager::class,
'redis.connection' => \Illuminate\Redis\Connections\PredisConnection::class,
'router' => \Illuminate\Routing\Router::class,
'session' => \Illuminate\Session\SessionManager::class,
'session.store' => \Illuminate\Session\Store::class,
@ -1136,6 +1226,23 @@
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
'Laravel\Socialite\Contracts\Factory' => \Laravel\Socialite\SocialiteManager::class,
'Livewire\EventBus' => \Livewire\EventBus::class,
'Livewire\LivewireManager' => \Livewire\LivewireManager::class,
'Livewire\Mechanisms\ComponentRegistry' => \Livewire\Mechanisms\ComponentRegistry::class,
'Livewire\Mechanisms\DataStore' => \Livewire\Mechanisms\DataStore::class,
'Livewire\Mechanisms\ExtendBlade\ExtendBlade' => \Livewire\Mechanisms\ExtendBlade\ExtendBlade::class,
'Livewire\Mechanisms\FrontendAssets\FrontendAssets' => \Livewire\Mechanisms\FrontendAssets\FrontendAssets::class,
'Livewire\Mechanisms\HandleComponents\HandleComponents' => \Livewire\Mechanisms\HandleComponents\HandleComponents::class,
'Livewire\Mechanisms\HandleRequests\HandleRequests' => \Livewire\Mechanisms\HandleRequests\HandleRequests::class,
'Livewire\Mechanisms\PersistentMiddleware\PersistentMiddleware' => \Livewire\Mechanisms\PersistentMiddleware\PersistentMiddleware::class,
'Livewire\Mechanisms\RenderComponent' => \Livewire\Mechanisms\RenderComponent::class,
'Livewire\Volt\ComponentFactory' => \Livewire\Volt\ComponentFactory::class,
'Livewire\Volt\ComponentResolver' => \Livewire\Volt\ComponentResolver::class,
'Livewire\Volt\LivewireManager' => \Livewire\Volt\LivewireManager::class,
'Livewire\Volt\MountedDirectories' => \Livewire\Volt\MountedDirectories::class,
'Livewire\Volt\Precompilers\ExtractFragments' => \Livewire\Volt\Precompilers\ExtractFragments::class,
'Livewire\Volt\Precompilers\ExtractTemplate' => \Livewire\Volt\Precompilers\ExtractTemplate::class,
'Livewire\Volt\VoltManager' => \Livewire\Volt\VoltManager::class,
'NunoMaduro\Collision\Provider' => \NunoMaduro\Collision\Provider::class,
'SocialiteProviders\Manager\Contracts\Helpers\ConfigRetrieverInterface' => \SocialiteProviders\Manager\Helpers\ConfigRetriever::class,
'Spatie\FlareClient\Flare' => \Spatie\FlareClient\Flare::class,
@ -1192,6 +1299,7 @@
'queue.worker' => \Illuminate\Queue\Worker::class,
'redirect' => \Illuminate\Routing\Redirector::class,
'redis' => \Illuminate\Redis\RedisManager::class,
'redis.connection' => \Illuminate\Redis\Connections\PredisConnection::class,
'router' => \Illuminate\Routing\Router::class,
'session' => \Illuminate\Session\SessionManager::class,
'session.store' => \Illuminate\Session\Store::class,
@ -1335,6 +1443,23 @@
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
'Laravel\Socialite\Contracts\Factory' => \Laravel\Socialite\SocialiteManager::class,
'Livewire\EventBus' => \Livewire\EventBus::class,
'Livewire\LivewireManager' => \Livewire\LivewireManager::class,
'Livewire\Mechanisms\ComponentRegistry' => \Livewire\Mechanisms\ComponentRegistry::class,
'Livewire\Mechanisms\DataStore' => \Livewire\Mechanisms\DataStore::class,
'Livewire\Mechanisms\ExtendBlade\ExtendBlade' => \Livewire\Mechanisms\ExtendBlade\ExtendBlade::class,
'Livewire\Mechanisms\FrontendAssets\FrontendAssets' => \Livewire\Mechanisms\FrontendAssets\FrontendAssets::class,
'Livewire\Mechanisms\HandleComponents\HandleComponents' => \Livewire\Mechanisms\HandleComponents\HandleComponents::class,
'Livewire\Mechanisms\HandleRequests\HandleRequests' => \Livewire\Mechanisms\HandleRequests\HandleRequests::class,
'Livewire\Mechanisms\PersistentMiddleware\PersistentMiddleware' => \Livewire\Mechanisms\PersistentMiddleware\PersistentMiddleware::class,
'Livewire\Mechanisms\RenderComponent' => \Livewire\Mechanisms\RenderComponent::class,
'Livewire\Volt\ComponentFactory' => \Livewire\Volt\ComponentFactory::class,
'Livewire\Volt\ComponentResolver' => \Livewire\Volt\ComponentResolver::class,
'Livewire\Volt\LivewireManager' => \Livewire\Volt\LivewireManager::class,
'Livewire\Volt\MountedDirectories' => \Livewire\Volt\MountedDirectories::class,
'Livewire\Volt\Precompilers\ExtractFragments' => \Livewire\Volt\Precompilers\ExtractFragments::class,
'Livewire\Volt\Precompilers\ExtractTemplate' => \Livewire\Volt\Precompilers\ExtractTemplate::class,
'Livewire\Volt\VoltManager' => \Livewire\Volt\VoltManager::class,
'NunoMaduro\Collision\Provider' => \NunoMaduro\Collision\Provider::class,
'SocialiteProviders\Manager\Contracts\Helpers\ConfigRetrieverInterface' => \SocialiteProviders\Manager\Helpers\ConfigRetriever::class,
'Spatie\FlareClient\Flare' => \Spatie\FlareClient\Flare::class,
@ -1391,6 +1516,7 @@
'queue.worker' => \Illuminate\Queue\Worker::class,
'redirect' => \Illuminate\Routing\Redirector::class,
'redis' => \Illuminate\Redis\RedisManager::class,
'redis.connection' => \Illuminate\Redis\Connections\PredisConnection::class,
'router' => \Illuminate\Routing\Router::class,
'session' => \Illuminate\Session\SessionManager::class,
'session.store' => \Illuminate\Session\Store::class,
@ -1534,6 +1660,23 @@
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
'Laravel\Socialite\Contracts\Factory' => \Laravel\Socialite\SocialiteManager::class,
'Livewire\EventBus' => \Livewire\EventBus::class,
'Livewire\LivewireManager' => \Livewire\LivewireManager::class,
'Livewire\Mechanisms\ComponentRegistry' => \Livewire\Mechanisms\ComponentRegistry::class,
'Livewire\Mechanisms\DataStore' => \Livewire\Mechanisms\DataStore::class,
'Livewire\Mechanisms\ExtendBlade\ExtendBlade' => \Livewire\Mechanisms\ExtendBlade\ExtendBlade::class,
'Livewire\Mechanisms\FrontendAssets\FrontendAssets' => \Livewire\Mechanisms\FrontendAssets\FrontendAssets::class,
'Livewire\Mechanisms\HandleComponents\HandleComponents' => \Livewire\Mechanisms\HandleComponents\HandleComponents::class,
'Livewire\Mechanisms\HandleRequests\HandleRequests' => \Livewire\Mechanisms\HandleRequests\HandleRequests::class,
'Livewire\Mechanisms\PersistentMiddleware\PersistentMiddleware' => \Livewire\Mechanisms\PersistentMiddleware\PersistentMiddleware::class,
'Livewire\Mechanisms\RenderComponent' => \Livewire\Mechanisms\RenderComponent::class,
'Livewire\Volt\ComponentFactory' => \Livewire\Volt\ComponentFactory::class,
'Livewire\Volt\ComponentResolver' => \Livewire\Volt\ComponentResolver::class,
'Livewire\Volt\LivewireManager' => \Livewire\Volt\LivewireManager::class,
'Livewire\Volt\MountedDirectories' => \Livewire\Volt\MountedDirectories::class,
'Livewire\Volt\Precompilers\ExtractFragments' => \Livewire\Volt\Precompilers\ExtractFragments::class,
'Livewire\Volt\Precompilers\ExtractTemplate' => \Livewire\Volt\Precompilers\ExtractTemplate::class,
'Livewire\Volt\VoltManager' => \Livewire\Volt\VoltManager::class,
'NunoMaduro\Collision\Provider' => \NunoMaduro\Collision\Provider::class,
'SocialiteProviders\Manager\Contracts\Helpers\ConfigRetrieverInterface' => \SocialiteProviders\Manager\Helpers\ConfigRetriever::class,
'Spatie\FlareClient\Flare' => \Spatie\FlareClient\Flare::class,
@ -1590,6 +1733,7 @@
'queue.worker' => \Illuminate\Queue\Worker::class,
'redirect' => \Illuminate\Routing\Redirector::class,
'redis' => \Illuminate\Redis\RedisManager::class,
'redis.connection' => \Illuminate\Redis\Connections\PredisConnection::class,
'router' => \Illuminate\Routing\Router::class,
'session' => \Illuminate\Session\SessionManager::class,
'session.store' => \Illuminate\Session\Store::class,
@ -1733,6 +1877,23 @@
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
'Laravel\Socialite\Contracts\Factory' => \Laravel\Socialite\SocialiteManager::class,
'Livewire\EventBus' => \Livewire\EventBus::class,
'Livewire\LivewireManager' => \Livewire\LivewireManager::class,
'Livewire\Mechanisms\ComponentRegistry' => \Livewire\Mechanisms\ComponentRegistry::class,
'Livewire\Mechanisms\DataStore' => \Livewire\Mechanisms\DataStore::class,
'Livewire\Mechanisms\ExtendBlade\ExtendBlade' => \Livewire\Mechanisms\ExtendBlade\ExtendBlade::class,
'Livewire\Mechanisms\FrontendAssets\FrontendAssets' => \Livewire\Mechanisms\FrontendAssets\FrontendAssets::class,
'Livewire\Mechanisms\HandleComponents\HandleComponents' => \Livewire\Mechanisms\HandleComponents\HandleComponents::class,
'Livewire\Mechanisms\HandleRequests\HandleRequests' => \Livewire\Mechanisms\HandleRequests\HandleRequests::class,
'Livewire\Mechanisms\PersistentMiddleware\PersistentMiddleware' => \Livewire\Mechanisms\PersistentMiddleware\PersistentMiddleware::class,
'Livewire\Mechanisms\RenderComponent' => \Livewire\Mechanisms\RenderComponent::class,
'Livewire\Volt\ComponentFactory' => \Livewire\Volt\ComponentFactory::class,
'Livewire\Volt\ComponentResolver' => \Livewire\Volt\ComponentResolver::class,
'Livewire\Volt\LivewireManager' => \Livewire\Volt\LivewireManager::class,
'Livewire\Volt\MountedDirectories' => \Livewire\Volt\MountedDirectories::class,
'Livewire\Volt\Precompilers\ExtractFragments' => \Livewire\Volt\Precompilers\ExtractFragments::class,
'Livewire\Volt\Precompilers\ExtractTemplate' => \Livewire\Volt\Precompilers\ExtractTemplate::class,
'Livewire\Volt\VoltManager' => \Livewire\Volt\VoltManager::class,
'NunoMaduro\Collision\Provider' => \NunoMaduro\Collision\Provider::class,
'SocialiteProviders\Manager\Contracts\Helpers\ConfigRetrieverInterface' => \SocialiteProviders\Manager\Helpers\ConfigRetriever::class,
'Spatie\FlareClient\Flare' => \Spatie\FlareClient\Flare::class,
@ -1789,6 +1950,7 @@
'queue.worker' => \Illuminate\Queue\Worker::class,
'redirect' => \Illuminate\Routing\Redirector::class,
'redis' => \Illuminate\Redis\RedisManager::class,
'redis.connection' => \Illuminate\Redis\Connections\PredisConnection::class,
'router' => \Illuminate\Routing\Router::class,
'session' => \Illuminate\Session\SessionManager::class,
'session.store' => \Illuminate\Session\Store::class,
@ -1932,6 +2094,23 @@
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
'Laravel\Socialite\Contracts\Factory' => \Laravel\Socialite\SocialiteManager::class,
'Livewire\EventBus' => \Livewire\EventBus::class,
'Livewire\LivewireManager' => \Livewire\LivewireManager::class,
'Livewire\Mechanisms\ComponentRegistry' => \Livewire\Mechanisms\ComponentRegistry::class,
'Livewire\Mechanisms\DataStore' => \Livewire\Mechanisms\DataStore::class,
'Livewire\Mechanisms\ExtendBlade\ExtendBlade' => \Livewire\Mechanisms\ExtendBlade\ExtendBlade::class,
'Livewire\Mechanisms\FrontendAssets\FrontendAssets' => \Livewire\Mechanisms\FrontendAssets\FrontendAssets::class,
'Livewire\Mechanisms\HandleComponents\HandleComponents' => \Livewire\Mechanisms\HandleComponents\HandleComponents::class,
'Livewire\Mechanisms\HandleRequests\HandleRequests' => \Livewire\Mechanisms\HandleRequests\HandleRequests::class,
'Livewire\Mechanisms\PersistentMiddleware\PersistentMiddleware' => \Livewire\Mechanisms\PersistentMiddleware\PersistentMiddleware::class,
'Livewire\Mechanisms\RenderComponent' => \Livewire\Mechanisms\RenderComponent::class,
'Livewire\Volt\ComponentFactory' => \Livewire\Volt\ComponentFactory::class,
'Livewire\Volt\ComponentResolver' => \Livewire\Volt\ComponentResolver::class,
'Livewire\Volt\LivewireManager' => \Livewire\Volt\LivewireManager::class,
'Livewire\Volt\MountedDirectories' => \Livewire\Volt\MountedDirectories::class,
'Livewire\Volt\Precompilers\ExtractFragments' => \Livewire\Volt\Precompilers\ExtractFragments::class,
'Livewire\Volt\Precompilers\ExtractTemplate' => \Livewire\Volt\Precompilers\ExtractTemplate::class,
'Livewire\Volt\VoltManager' => \Livewire\Volt\VoltManager::class,
'NunoMaduro\Collision\Provider' => \NunoMaduro\Collision\Provider::class,
'SocialiteProviders\Manager\Contracts\Helpers\ConfigRetrieverInterface' => \SocialiteProviders\Manager\Helpers\ConfigRetriever::class,
'Spatie\FlareClient\Flare' => \Spatie\FlareClient\Flare::class,
@ -1988,6 +2167,7 @@
'queue.worker' => \Illuminate\Queue\Worker::class,
'redirect' => \Illuminate\Routing\Redirector::class,
'redis' => \Illuminate\Redis\RedisManager::class,
'redis.connection' => \Illuminate\Redis\Connections\PredisConnection::class,
'router' => \Illuminate\Routing\Router::class,
'session' => \Illuminate\Session\SessionManager::class,
'session.store' => \Illuminate\Session\Store::class,
@ -2131,6 +2311,23 @@
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
'Laravel\Socialite\Contracts\Factory' => \Laravel\Socialite\SocialiteManager::class,
'Livewire\EventBus' => \Livewire\EventBus::class,
'Livewire\LivewireManager' => \Livewire\LivewireManager::class,
'Livewire\Mechanisms\ComponentRegistry' => \Livewire\Mechanisms\ComponentRegistry::class,
'Livewire\Mechanisms\DataStore' => \Livewire\Mechanisms\DataStore::class,
'Livewire\Mechanisms\ExtendBlade\ExtendBlade' => \Livewire\Mechanisms\ExtendBlade\ExtendBlade::class,
'Livewire\Mechanisms\FrontendAssets\FrontendAssets' => \Livewire\Mechanisms\FrontendAssets\FrontendAssets::class,
'Livewire\Mechanisms\HandleComponents\HandleComponents' => \Livewire\Mechanisms\HandleComponents\HandleComponents::class,
'Livewire\Mechanisms\HandleRequests\HandleRequests' => \Livewire\Mechanisms\HandleRequests\HandleRequests::class,
'Livewire\Mechanisms\PersistentMiddleware\PersistentMiddleware' => \Livewire\Mechanisms\PersistentMiddleware\PersistentMiddleware::class,
'Livewire\Mechanisms\RenderComponent' => \Livewire\Mechanisms\RenderComponent::class,
'Livewire\Volt\ComponentFactory' => \Livewire\Volt\ComponentFactory::class,
'Livewire\Volt\ComponentResolver' => \Livewire\Volt\ComponentResolver::class,
'Livewire\Volt\LivewireManager' => \Livewire\Volt\LivewireManager::class,
'Livewire\Volt\MountedDirectories' => \Livewire\Volt\MountedDirectories::class,
'Livewire\Volt\Precompilers\ExtractFragments' => \Livewire\Volt\Precompilers\ExtractFragments::class,
'Livewire\Volt\Precompilers\ExtractTemplate' => \Livewire\Volt\Precompilers\ExtractTemplate::class,
'Livewire\Volt\VoltManager' => \Livewire\Volt\VoltManager::class,
'NunoMaduro\Collision\Provider' => \NunoMaduro\Collision\Provider::class,
'SocialiteProviders\Manager\Contracts\Helpers\ConfigRetrieverInterface' => \SocialiteProviders\Manager\Helpers\ConfigRetriever::class,
'Spatie\FlareClient\Flare' => \Spatie\FlareClient\Flare::class,
@ -2187,6 +2384,7 @@
'queue.worker' => \Illuminate\Queue\Worker::class,
'redirect' => \Illuminate\Routing\Redirector::class,
'redis' => \Illuminate\Redis\RedisManager::class,
'redis.connection' => \Illuminate\Redis\Connections\PredisConnection::class,
'router' => \Illuminate\Routing\Router::class,
'session' => \Illuminate\Session\SessionManager::class,
'session.store' => \Illuminate\Session\Store::class,

View File

@ -18603,6 +18603,408 @@ public static function getContainer()
}
}
namespace Livewire {
/**
*
*
* @see \Livewire\LivewireManager
*/
class Livewire {
/**
* {@inheritDoc}
*
* @static
*/
public static function mount($name, $params = [], $key = null)
{
/** @var \Livewire\Volt\LivewireManager $instance */
return $instance->mount($name, $params, $key);
}
/**
* {@inheritDoc}
*
* @static
*/
public static function update($snapshot, $diff, $calls)
{
/** @var \Livewire\Volt\LivewireManager $instance */
return $instance->update($snapshot, $diff, $calls);
}
/**
*
*
* @static
*/
public static function setProvider($provider)
{ //Method inherited from \Livewire\LivewireManager
/** @var \Livewire\Volt\LivewireManager $instance */
return $instance->setProvider($provider);
}
/**
*
*
* @static
*/
public static function provide($callback)
{ //Method inherited from \Livewire\LivewireManager
/** @var \Livewire\Volt\LivewireManager $instance */
return $instance->provide($callback);
}
/**
*
*
* @static
*/
public static function component($name, $class = null)
{ //Method inherited from \Livewire\LivewireManager
/** @var \Livewire\Volt\LivewireManager $instance */
return $instance->component($name, $class);
}
/**
*
*
* @static
*/
public static function componentHook($hook)
{ //Method inherited from \Livewire\LivewireManager
/** @var \Livewire\Volt\LivewireManager $instance */
return $instance->componentHook($hook);
}
/**
*
*
* @static
*/
public static function propertySynthesizer($synth)
{ //Method inherited from \Livewire\LivewireManager
/** @var \Livewire\Volt\LivewireManager $instance */
return $instance->propertySynthesizer($synth);
}
/**
*
*
* @static
*/
public static function directive($name, $callback)
{ //Method inherited from \Livewire\LivewireManager
/** @var \Livewire\Volt\LivewireManager $instance */
return $instance->directive($name, $callback);
}
/**
*
*
* @static
*/
public static function precompiler($callback)
{ //Method inherited from \Livewire\LivewireManager
/** @var \Livewire\Volt\LivewireManager $instance */
return $instance->precompiler($callback);
}
/**
*
*
* @static
*/
public static function new($name, $id = null)
{ //Method inherited from \Livewire\LivewireManager
/** @var \Livewire\Volt\LivewireManager $instance */
return $instance->new($name, $id);
}
/**
*
*
* @static
*/
public static function isDiscoverable($componentNameOrClass)
{ //Method inherited from \Livewire\LivewireManager
/** @var \Livewire\Volt\LivewireManager $instance */
return $instance->isDiscoverable($componentNameOrClass);
}
/**
*
*
* @static
*/
public static function resolveMissingComponent($resolver)
{ //Method inherited from \Livewire\LivewireManager
/** @var \Livewire\Volt\LivewireManager $instance */
return $instance->resolveMissingComponent($resolver);
}
/**
*
*
* @static
*/
public static function snapshot($component)
{ //Method inherited from \Livewire\LivewireManager
/** @var \Livewire\Volt\LivewireManager $instance */
return $instance->snapshot($component);
}
/**
*
*
* @static
*/
public static function fromSnapshot($snapshot)
{ //Method inherited from \Livewire\LivewireManager
/** @var \Livewire\Volt\LivewireManager $instance */
return $instance->fromSnapshot($snapshot);
}
/**
*
*
* @static
*/
public static function listen($eventName, $callback)
{ //Method inherited from \Livewire\LivewireManager
/** @var \Livewire\Volt\LivewireManager $instance */
return $instance->listen($eventName, $callback);
}
/**
*
*
* @static
*/
public static function current()
{ //Method inherited from \Livewire\LivewireManager
/** @var \Livewire\Volt\LivewireManager $instance */
return $instance->current();
}
/**
*
*
* @static
*/
public static function updateProperty($component, $path, $value)
{ //Method inherited from \Livewire\LivewireManager
/** @var \Livewire\Volt\LivewireManager $instance */
return $instance->updateProperty($component, $path, $value);
}
/**
*
*
* @static
*/
public static function isLivewireRequest()
{ //Method inherited from \Livewire\LivewireManager
/** @var \Livewire\Volt\LivewireManager $instance */
return $instance->isLivewireRequest();
}
/**
*
*
* @static
*/
public static function componentHasBeenRendered()
{ //Method inherited from \Livewire\LivewireManager
/** @var \Livewire\Volt\LivewireManager $instance */
return $instance->componentHasBeenRendered();
}
/**
*
*
* @static
*/
public static function forceAssetInjection()
{ //Method inherited from \Livewire\LivewireManager
/** @var \Livewire\Volt\LivewireManager $instance */
return $instance->forceAssetInjection();
}
/**
*
*
* @static
*/
public static function setUpdateRoute($callback)
{ //Method inherited from \Livewire\LivewireManager
/** @var \Livewire\Volt\LivewireManager $instance */
return $instance->setUpdateRoute($callback);
}
/**
*
*
* @static
*/
public static function getUpdateUri()
{ //Method inherited from \Livewire\LivewireManager
/** @var \Livewire\Volt\LivewireManager $instance */
return $instance->getUpdateUri();
}
/**
*
*
* @static
*/
public static function setScriptRoute($callback)
{ //Method inherited from \Livewire\LivewireManager
/** @var \Livewire\Volt\LivewireManager $instance */
return $instance->setScriptRoute($callback);
}
/**
*
*
* @static
*/
public static function useScriptTagAttributes($attributes)
{ //Method inherited from \Livewire\LivewireManager
/** @var \Livewire\Volt\LivewireManager $instance */
return $instance->useScriptTagAttributes($attributes);
}
/**
*
*
* @static
*/
public static function withUrlParams($params)
{ //Method inherited from \Livewire\LivewireManager
/** @var \Livewire\Volt\LivewireManager $instance */
return $instance->withUrlParams($params);
}
/**
*
*
* @static
*/
public static function withQueryParams($params)
{ //Method inherited from \Livewire\LivewireManager
/** @var \Livewire\Volt\LivewireManager $instance */
return $instance->withQueryParams($params);
}
/**
*
*
* @static
*/
public static function withCookie($name, $value)
{ //Method inherited from \Livewire\LivewireManager
/** @var \Livewire\Volt\LivewireManager $instance */
return $instance->withCookie($name, $value);
}
/**
*
*
* @static
*/
public static function withCookies($cookies)
{ //Method inherited from \Livewire\LivewireManager
/** @var \Livewire\Volt\LivewireManager $instance */
return $instance->withCookies($cookies);
}
/**
*
*
* @static
*/
public static function test($name, $params = [])
{ //Method inherited from \Livewire\LivewireManager
/** @var \Livewire\Volt\LivewireManager $instance */
return $instance->test($name, $params);
}
/**
*
*
* @static
*/
public static function visit($name)
{ //Method inherited from \Livewire\LivewireManager
/** @var \Livewire\Volt\LivewireManager $instance */
return $instance->visit($name);
}
/**
*
*
* @static
*/
public static function actingAs($user, $driver = null)
{ //Method inherited from \Livewire\LivewireManager
/** @var \Livewire\Volt\LivewireManager $instance */
return $instance->actingAs($user, $driver);
}
/**
*
*
* @static
*/
public static function isRunningServerless()
{ //Method inherited from \Livewire\LivewireManager
/** @var \Livewire\Volt\LivewireManager $instance */
return $instance->isRunningServerless();
}
/**
*
*
* @static
*/
public static function addPersistentMiddleware($middleware)
{ //Method inherited from \Livewire\LivewireManager
/** @var \Livewire\Volt\LivewireManager $instance */
return $instance->addPersistentMiddleware($middleware);
}
/**
*
*
* @static
*/
public static function setPersistentMiddleware($middleware)
{ //Method inherited from \Livewire\LivewireManager
/** @var \Livewire\Volt\LivewireManager $instance */
return $instance->setPersistentMiddleware($middleware);
}
/**
*
*
* @static
*/
public static function getPersistentMiddleware()
{ //Method inherited from \Livewire\LivewireManager
/** @var \Livewire\Volt\LivewireManager $instance */
return $instance->getPersistentMiddleware();
}
/**
*
*
* @static
*/
public static function flushState()
{ //Method inherited from \Livewire\LivewireManager
/** @var \Livewire\Volt\LivewireManager $instance */
return $instance->flushState();
}
/**
*
*
* @static
*/
public static function originalUrl()
{ //Method inherited from \Livewire\LivewireManager
/** @var \Livewire\Volt\LivewireManager $instance */
return $instance->originalUrl();
}
/**
*
*
* @static
*/
public static function originalPath()
{ //Method inherited from \Livewire\LivewireManager
/** @var \Livewire\Volt\LivewireManager $instance */
return $instance->originalPath();
}
/**
*
*
* @static
*/
public static function originalMethod()
{ //Method inherited from \Livewire\LivewireManager
/** @var \Livewire\Volt\LivewireManager $instance */
return $instance->originalMethod();
}
}
}
namespace Spatie\LaravelIgnition\Facades {
@ -19081,6 +19483,170 @@ public static function hasValidSignatureWhileIgnoring($ignoreQuery = [], $absolu
}
}
namespace Illuminate\Routing {
/**
*
*
*/
class Route {
/**
*
*
* @see \Livewire\Features\SupportLazyLoading\SupportLazyLoading::registerRouteMacro()
* @param mixed $enabled
* @static
*/
public static function lazy($enabled = true)
{
return \Illuminate\Routing\Route::lazy($enabled);
}
}
}
namespace Illuminate\View {
/**
*
*
*/
class ComponentAttributeBag {
/**
*
*
* @see \Livewire\Features\SupportBladeAttributes\SupportBladeAttributes::provide()
* @param mixed $name
* @static
*/
public static function wire($name)
{
return \Illuminate\View\ComponentAttributeBag::wire($name);
}
}
/**
*
*
*/
class View {
/**
*
*
* @see \Livewire\Features\SupportPageComponents\SupportPageComponents::registerLayoutViewMacros()
* @param mixed $data
* @static
*/
public static function layoutData($data = [])
{
return \Illuminate\View\View::layoutData($data);
}
/**
*
*
* @see \Livewire\Features\SupportPageComponents\SupportPageComponents::registerLayoutViewMacros()
* @param mixed $section
* @static
*/
public static function section($section)
{
return \Illuminate\View\View::section($section);
}
/**
*
*
* @see \Livewire\Features\SupportPageComponents\SupportPageComponents::registerLayoutViewMacros()
* @param mixed $title
* @static
*/
public static function title($title)
{
return \Illuminate\View\View::title($title);
}
/**
*
*
* @see \Livewire\Features\SupportPageComponents\SupportPageComponents::registerLayoutViewMacros()
* @param mixed $slot
* @static
*/
public static function slot($slot)
{
return \Illuminate\View\View::slot($slot);
}
/**
*
*
* @see \Livewire\Features\SupportPageComponents\SupportPageComponents::registerLayoutViewMacros()
* @param mixed $view
* @param mixed $params
* @static
*/
public static function extends($view, $params = [])
{
return \Illuminate\View\View::extends($view, $params);
}
/**
*
*
* @see \Livewire\Features\SupportPageComponents\SupportPageComponents::registerLayoutViewMacros()
* @param mixed $view
* @param mixed $params
* @static
*/
public static function layout($view, $params = [])
{
return \Illuminate\View\View::layout($view, $params);
}
/**
*
*
* @see \Livewire\Features\SupportPageComponents\SupportPageComponents::registerLayoutViewMacros()
* @param callable $callback
* @static
*/
public static function response($callback)
{
return \Illuminate\View\View::response($callback);
}
}
}
namespace Illuminate\Testing {
/**
*
*
* @mixin \Illuminate\Http\Response
*/
class TestResponse {
/**
*
*
* @see \Livewire\Volt\VoltServiceProvider::registerTestingMacros()
* @param mixed $component
* @static
*/
public static function assertSeeVolt($component)
{
return \Illuminate\Testing\TestResponse::assertSeeVolt($component);
}
/**
*
*
* @see \Livewire\Volt\VoltServiceProvider::registerTestingMacros()
* @param mixed $component
* @static
*/
public static function assertDontSeeVolt($component)
{
return \Illuminate\Testing\TestResponse::assertDontSeeVolt($component);
}
}
}
@ -23043,6 +23609,7 @@ class Validator extends \Illuminate\Support\Facades\Validator {}
class View extends \Illuminate\Support\Facades\View {}
class Vite extends \Illuminate\Support\Facades\Vite {}
class Socialite extends \Laravel\Socialite\Facades\Socialite {}
class Livewire extends \Livewire\Livewire {}
class Flare extends \Spatie\LaravelIgnition\Facades\Flare {}
}

View File

@ -4,7 +4,7 @@
use Illuminate\Http\Request;
use App\Models\Trace\Channel;
use Illuminate\Support\Facades\Gate;
use App\Http\Requests\ChannelActionsRequest;
class DashboardController extends Controller
{
@ -18,15 +18,13 @@ public function index(Request $request)
]);
}
public function channel(Channel $channel)
public function channel(ChannelActionsRequest $request, Channel $channel)
{
if (!Gate::allows('access-channel', $channel)) {
abort(404);
}
$limit = $request->input('limit', 25);
return view('dashboard.channel', [
'channel' => $channel,
'actions' => $channel->actions()->orderBy('timestamp', 'desc')->paginate(100),
'actions' => $channel->actions()->orderBy('timestamp', 'desc')->paginate($limit),
]);
}
}

View File

@ -0,0 +1,29 @@
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Gate;
class ChannelActionsRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return Gate::allows('access-channel', $this->route('channel'));
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
*/
public function rules(): array
{
return [
'limit' => 'sometimes|integer|min:1|max:100',
];
}
}

View File

@ -0,0 +1,20 @@
<?php
namespace App\Livewire\Actions;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Session;
class Logout
{
/**
* Log the current user out of the application.
*/
public function __invoke(): void
{
Auth::guard('web')->logout();
Session::invalidate();
Session::regenerateToken();
}
}

View File

@ -0,0 +1,28 @@
<?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([
resource_path('views/livewire'),
resource_path('views/pages'),
]);
}
}

View File

@ -10,6 +10,8 @@
"laravel/framework": "^10.10",
"laravel/sanctum": "^3.3",
"laravel/tinker": "^2.8",
"livewire/livewire": "^3.0",
"livewire/volt": "^1.0",
"predis/predis": "^2.2",
"socialiteproviders/twitch": "^5.3"
},

148
composer.lock generated
View File

@ -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": "36901d5853a460a1a7fe84c00fe5b7a6",
"content-hash": "6fd7ce42d633a30642af35da590c42df",
"packages": [
{
"name": "brick/math",
@ -1964,6 +1964,152 @@
},
"time": "2022-04-15T14:02:14+00:00"
},
{
"name": "livewire/livewire",
"version": "v3.2.1",
"source": {
"type": "git",
"url": "https://github.com/livewire/livewire.git",
"reference": "95083c0b61c1910ad28c4628e0dfa9c227eb1c41"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/livewire/livewire/zipball/95083c0b61c1910ad28c4628e0dfa9c227eb1c41",
"reference": "95083c0b61c1910ad28c4628e0dfa9c227eb1c41",
"shasum": ""
},
"require": {
"illuminate/database": "^10.0",
"illuminate/support": "^10.0",
"illuminate/validation": "^10.0",
"league/mime-type-detection": "^1.9",
"php": "^8.1",
"symfony/http-kernel": "^6.2"
},
"require-dev": {
"calebporzio/sushi": "^2.1",
"laravel/framework": "^10.0",
"laravel/prompts": "^0.1.6",
"mockery/mockery": "^1.3.1",
"orchestra/testbench": "^8.0",
"orchestra/testbench-dusk": "^8.0",
"phpunit/phpunit": "^9.0",
"psy/psysh": "@stable"
},
"type": "library",
"extra": {
"laravel": {
"providers": [
"Livewire\\LivewireServiceProvider"
],
"aliases": {
"Livewire": "Livewire\\Livewire"
}
}
},
"autoload": {
"files": [
"src/helpers.php"
],
"psr-4": {
"Livewire\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Caleb Porzio",
"email": "calebporzio@gmail.com"
}
],
"description": "A front-end framework for Laravel.",
"support": {
"issues": "https://github.com/livewire/livewire/issues",
"source": "https://github.com/livewire/livewire/tree/v3.2.1"
},
"funding": [
{
"url": "https://github.com/livewire",
"type": "github"
}
],
"time": "2023-11-20T17:05:06+00:00"
},
{
"name": "livewire/volt",
"version": "v1.5.0",
"source": {
"type": "git",
"url": "https://github.com/livewire/volt.git",
"reference": "22b15922d02db57e78bd1f1b3bab02843053c3d4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/livewire/volt/zipball/22b15922d02db57e78bd1f1b3bab02843053c3d4",
"reference": "22b15922d02db57e78bd1f1b3bab02843053c3d4",
"shasum": ""
},
"require": {
"laravel/framework": "^10.27|^11.0",
"livewire/livewire": "^3.0",
"php": "^8.1"
},
"require-dev": {
"laravel/folio": "^1.1",
"mockery/mockery": "^1.6",
"orchestra/testbench": "^8.15.0",
"pestphp/pest": "^2.9.5",
"phpstan/phpstan": "^1.10"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.x-dev"
},
"laravel": {
"providers": [
"Livewire\\Volt\\VoltServiceProvider"
]
}
},
"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": "2023-11-20T14:51:18+00:00"
},
{
"name": "monolog/monolog",
"version": "3.5.0",

View File

@ -168,6 +168,7 @@
// App\Providers\BroadcastServiceProvider::class,
App\Providers\EventServiceProvider::class,
App\Providers\RouteServiceProvider::class,
App\Providers\VoltServiceProvider::class,
\SocialiteProviders\Manager\ServiceProvider::class,
])->toArray(),

View File

@ -0,0 +1,10 @@
@props(['on'])
<div x-data="{ shown: false, timeout: null }"
x-init="@this.on('{{ $on }}', () => { clearTimeout(timeout); shown = true; timeout = setTimeout(() => { shown = false }, 2000); })"
x-show.transition.out.opacity.duration.1500ms="shown"
x-transition:leave.opacity.duration.1500ms
style="display: none;"
{{ $attributes->merge(['class' => 'text-sm text-gray-600 dark:text-gray-400']) }}>
{{ $slot->isEmpty() ? 'Saved.' : $slot }}
</div>

View File

@ -0,0 +1,17 @@
<x-app-layout>
<x-slot name="header">
<h2 class="font-semibold text-xl text-gray-800 dark:text-gray-200 leading-tight">
{{ __('Dashboard') }}
</h2>
</x-slot>
<div class="py-12">
<div class="max-w-7xl mx-auto sm:px-6 lg:px-8">
<div class="bg-white dark:bg-gray-800 overflow-hidden shadow-sm sm:rounded-lg">
<div class="p-6 text-gray-900 dark:text-gray-100">
{{ __("You're logged in!") }}
</div>
</div>
</div>
</div>
</x-app-layout>

View File

@ -32,6 +32,14 @@
</tr>
@endforeach
</tbody>
<tfoot>
<tr>
<td colspan="3" class="border px-4 py-2">
{{ $actions->links() }}
</td>
</tr>
</tfoot>
</table>
</div>
</div>
</div>

View File

@ -16,7 +16,7 @@
</head>
<body class="font-sans antialiased">
<div class="min-h-screen bg-gray-100 dark:bg-gray-900">
@include('layouts.navigation')
<livewire:layout.navigation />
<!-- Page Heading -->
@if (isset($header))
@ -27,28 +27,6 @@
</header>
@endif
<div class="mt-4">
<div class="max-w-full mx-auto sm:px-6 lg:px-8">
<div class="bg-white dark:bg-gray-800 overflow-hidden shadow-sm sm:rounded-lg">
<div class="p-6 text-gray-900 dark:text-gray-100">
<p>This is the initial implementation of this project. A few different things that are planned:</p>
<ul class="list-disc list-inside mt-2">
<li>Channels that are tracked where you have moderator access will be <a href="https://twitch.uservoice.com/forums/310213-developers/suggestions/38203849-add-endpoint-to-return-channels-where-the-user-is" class="underline text-amber-400">automatically retrieved from Twitch's API</a>. At the moment you have to be manually added to the database.</li>
<li>Different filtering options: Type of action (timeout, raid etc.), moderator (whodunit), user/viewer (next point).</li>
<li>See related moderation actions, for example if a specific viewer has been timed out or banned multiple times.</li>
<li>Searching by text.</li>
<li>Linking any affected viewer's to their Twitch viewer card.</li>
<li>Pagination, currently you can only see the latest 100 moderator actions.</li>
<li>Automatic conversion to local time. Currently it's displayed in UTC.</li>
<li>Ability to see a viewer's chat messages at the time of action, alongside messages before/after to see context.</li>
<li>... and probably more I'll figure out as I go along.</li>
</ul>
</div>
</div>
</div>
</div>
<!-- Page Content -->
<main>
{{ $slot }}

View File

@ -17,7 +17,7 @@
<body class="font-sans text-gray-900 antialiased">
<div class="min-h-screen flex flex-col sm:justify-center items-center pt-6 sm:pt-0 bg-gray-100 dark:bg-gray-900">
<div>
<a href="/">
<a href="/" wire:navigate>
<x-application-logo class="w-20 h-20 fill-current text-gray-500" />
</a>
</div>

View File

View File

@ -0,0 +1,108 @@
<?php
use App\Livewire\Actions\Logout;
use App\Livewire\Forms\LogoutForm;
use Livewire\Volt\Component;
new class extends Component
{
/**
* Log the current user out of the application.
*/
public function logout(Logout $logout): void
{
$logout();
$this->redirect('/', navigate: true);
}
}; ?>
<nav x-data="{ open: false }" class="bg-white dark:bg-gray-800 border-b border-gray-100 dark:border-gray-700">
<!-- Primary Navigation Menu -->
<div class="max-w-full mx-auto px-4 sm:px-6 lg:px-8">
<div class="flex justify-between h-16">
<div class="flex">
<!-- Logo -->
<div class="shrink-0 flex items-center">
<a href="{{ route('dashboard') }}" wire:navigate>
<x-application-logo class="block h-9 w-auto fill-current text-gray-800 dark:text-gray-200" />
</a>
</div>
<!-- Navigation Links -->
<div class="hidden space-x-8 sm:-my-px sm:ms-10 sm:flex">
<x-nav-link :href="route('dashboard')" :active="request()->routeIs('dashboard')" wire:navigate>
{{ __('Dashboard') }}
</x-nav-link>
</div>
</div>
<!-- Settings Dropdown -->
@if (Auth::check())
<div class="hidden sm:flex sm:items-center sm:ms-6">
<x-dropdown align="right" width="48">
<x-slot name="trigger">
<button class="inline-flex items-center px-3 py-2 border border-transparent text-sm leading-4 font-medium rounded-md text-gray-500 dark:text-gray-400 bg-white dark:bg-gray-800 hover:text-gray-700 dark:hover:text-gray-300 focus:outline-none transition ease-in-out duration-150">
<img src="{{ Auth::user()->avatar }}" class="h-6 w-6 rounded-full" alt="{{ Auth::user()->display_name }}" />
<div class="ml-2">{{ Auth::user()->display_name }}</div>
<div class="ms-1">
<svg class="fill-current h-4 w-4" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20">
<path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd" />
</svg>
</div>
</button>
</x-slot>
<x-slot name="content">
<!-- Authentication -->
<button wire:click="logout" class="w-full text-start">
<x-dropdown-link>
{{ __('Log Out') }}
</x-dropdown-link>
</button>
</x-slot>
</x-dropdown>
</div>
@endif
<!-- Hamburger -->
<div class="-me-2 flex items-center sm:hidden">
<button @click="open = ! open" class="inline-flex items-center justify-center p-2 rounded-md text-gray-400 dark:text-gray-500 hover:text-gray-500 dark:hover:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-900 focus:outline-none focus:bg-gray-100 dark:focus:bg-gray-900 focus:text-gray-500 dark:focus:text-gray-400 transition duration-150 ease-in-out">
<svg class="h-6 w-6" stroke="currentColor" fill="none" viewBox="0 0 24 24">
<path :class="{'hidden': open, 'inline-flex': ! open }" class="inline-flex" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16" />
<path :class="{'hidden': ! open, 'inline-flex': open }" class="hidden" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" />
</svg>
</button>
</div>
</div>
</div>
<!-- Responsive Navigation Menu -->
@if (Auth::check())
<div :class="{'block': open, 'hidden': ! open}" class="hidden sm:hidden">
<div class="pt-2 pb-3 space-y-1">
<x-responsive-nav-link :href="route('dashboard')" :active="request()->routeIs('dashboard')" wire:navigate>
{{ __('Dashboard') }}
</x-responsive-nav-link>
</div>
<!-- Responsive Settings Options -->
<div class="pt-4 pb-1 border-t border-gray-200 dark:border-gray-600">
<div class="px-4">
<div class="font-medium text-base text-gray-800 dark:text-gray-200" x-data="{ name: '{{ auth()->user()->display_name }}' }" x-text="name" x-on:profile-updated.window="name = $event.detail.name"></div>
<div class="font-medium text-sm text-gray-500">{{ auth()->user()->display_name }}</div>
</div>
<div class="mt-3 space-y-1">
<!-- Authentication -->
<button wire:click="logout" class="w-full text-start">
<x-responsive-nav-link>
{{ __('Log Out') }}
</x-responsive-nav-link>
</button>
</div>
</div>
</div>
@endif
</nav>

View File

View File

@ -0,0 +1,11 @@
<div class="sm:fixed sm:top-0 sm:right-0 p-6 text-end z-10">
@auth
<a href="{{ url('/dashboard') }}" class="font-semibold text-gray-600 hover:text-gray-900 dark:text-gray-400 dark:hover:text-white focus:outline focus:outline-2 focus:rounded-sm focus:outline-red-500" wire:navigate>Dashboard</a>
@else
<a href="{{ route('login') }}" class="font-semibold text-gray-600 hover:text-gray-900 dark:text-gray-400 dark:hover:text-white focus:outline focus:outline-2 focus:rounded-sm focus:outline-red-500" wire:navigate>Log in</a>
@if (Route::has('register'))
<a href="{{ route('register') }}" class="ms-4 font-semibold text-gray-600 hover:text-gray-900 dark:text-gray-400 dark:hover:text-white focus:outline focus:outline-2 focus:rounded-sm focus:outline-red-500" wire:navigate>Register</a>
@endif
@endauth
</div>

View File

@ -0,0 +1,46 @@
@if ($paginator->hasPages())
<nav>
<ul class="pagination">
{{-- Previous Page Link --}}
@if ($paginator->onFirstPage())
<li class="page-item disabled" aria-disabled="true" aria-label="@lang('pagination.previous')">
<span class="page-link" aria-hidden="true">&lsaquo;</span>
</li>
@else
<li class="page-item">
<a class="page-link" href="{{ $paginator->previousPageUrl() }}" rel="prev" aria-label="@lang('pagination.previous')">&lsaquo;</a>
</li>
@endif
{{-- Pagination Elements --}}
@foreach ($elements as $element)
{{-- "Three Dots" Separator --}}
@if (is_string($element))
<li class="page-item disabled" aria-disabled="true"><span class="page-link">{{ $element }}</span></li>
@endif
{{-- Array Of Links --}}
@if (is_array($element))
@foreach ($element as $page => $url)
@if ($page == $paginator->currentPage())
<li class="page-item active" aria-current="page"><span class="page-link">{{ $page }}</span></li>
@else
<li class="page-item"><a class="page-link" href="{{ $url }}">{{ $page }}</a></li>
@endif
@endforeach
@endif
@endforeach
{{-- Next Page Link --}}
@if ($paginator->hasMorePages())
<li class="page-item">
<a class="page-link" href="{{ $paginator->nextPageUrl() }}" rel="next" aria-label="@lang('pagination.next')">&rsaquo;</a>
</li>
@else
<li class="page-item disabled" aria-disabled="true" aria-label="@lang('pagination.next')">
<span class="page-link" aria-hidden="true">&rsaquo;</span>
</li>
@endif
</ul>
</nav>
@endif

View File

@ -0,0 +1,88 @@
@if ($paginator->hasPages())
<nav class="d-flex justify-items-center justify-content-between">
<div class="d-flex justify-content-between flex-fill d-sm-none">
<ul class="pagination">
{{-- Previous Page Link --}}
@if ($paginator->onFirstPage())
<li class="page-item disabled" aria-disabled="true">
<span class="page-link">@lang('pagination.previous')</span>
</li>
@else
<li class="page-item">
<a class="page-link" href="{{ $paginator->previousPageUrl() }}" rel="prev">@lang('pagination.previous')</a>
</li>
@endif
{{-- Next Page Link --}}
@if ($paginator->hasMorePages())
<li class="page-item">
<a class="page-link" href="{{ $paginator->nextPageUrl() }}" rel="next">@lang('pagination.next')</a>
</li>
@else
<li class="page-item disabled" aria-disabled="true">
<span class="page-link">@lang('pagination.next')</span>
</li>
@endif
</ul>
</div>
<div class="d-none flex-sm-fill d-sm-flex align-items-sm-center justify-content-sm-between">
<div>
<p class="small text-muted">
{!! __('Showing') !!}
<span class="fw-semibold">{{ $paginator->firstItem() }}</span>
{!! __('to') !!}
<span class="fw-semibold">{{ $paginator->lastItem() }}</span>
{!! __('of') !!}
<span class="fw-semibold">{{ $paginator->total() }}</span>
{!! __('results') !!}
</p>
</div>
<div>
<ul class="pagination">
{{-- Previous Page Link --}}
@if ($paginator->onFirstPage())
<li class="page-item disabled" aria-disabled="true" aria-label="@lang('pagination.previous')">
<span class="page-link" aria-hidden="true">&lsaquo;</span>
</li>
@else
<li class="page-item">
<a class="page-link" href="{{ $paginator->previousPageUrl() }}" rel="prev" aria-label="@lang('pagination.previous')">&lsaquo;</a>
</li>
@endif
{{-- Pagination Elements --}}
@foreach ($elements as $element)
{{-- "Three Dots" Separator --}}
@if (is_string($element))
<li class="page-item disabled" aria-disabled="true"><span class="page-link">{{ $element }}</span></li>
@endif
{{-- Array Of Links --}}
@if (is_array($element))
@foreach ($element as $page => $url)
@if ($page == $paginator->currentPage())
<li class="page-item active" aria-current="page"><span class="page-link">{{ $page }}</span></li>
@else
<li class="page-item"><a class="page-link" href="{{ $url }}">{{ $page }}</a></li>
@endif
@endforeach
@endif
@endforeach
{{-- Next Page Link --}}
@if ($paginator->hasMorePages())
<li class="page-item">
<a class="page-link" href="{{ $paginator->nextPageUrl() }}" rel="next" aria-label="@lang('pagination.next')">&rsaquo;</a>
</li>
@else
<li class="page-item disabled" aria-disabled="true" aria-label="@lang('pagination.next')">
<span class="page-link" aria-hidden="true">&rsaquo;</span>
</li>
@endif
</ul>
</div>
</div>
</nav>
@endif

View File

@ -0,0 +1,46 @@
@if ($paginator->hasPages())
<nav>
<ul class="pagination">
{{-- Previous Page Link --}}
@if ($paginator->onFirstPage())
<li class="disabled" aria-disabled="true" aria-label="@lang('pagination.previous')">
<span aria-hidden="true">&lsaquo;</span>
</li>
@else
<li>
<a href="{{ $paginator->previousPageUrl() }}" rel="prev" aria-label="@lang('pagination.previous')">&lsaquo;</a>
</li>
@endif
{{-- Pagination Elements --}}
@foreach ($elements as $element)
{{-- "Three Dots" Separator --}}
@if (is_string($element))
<li class="disabled" aria-disabled="true"><span>{{ $element }}</span></li>
@endif
{{-- Array Of Links --}}
@if (is_array($element))
@foreach ($element as $page => $url)
@if ($page == $paginator->currentPage())
<li class="active" aria-current="page"><span>{{ $page }}</span></li>
@else
<li><a href="{{ $url }}">{{ $page }}</a></li>
@endif
@endforeach
@endif
@endforeach
{{-- Next Page Link --}}
@if ($paginator->hasMorePages())
<li>
<a href="{{ $paginator->nextPageUrl() }}" rel="next" aria-label="@lang('pagination.next')">&rsaquo;</a>
</li>
@else
<li class="disabled" aria-disabled="true" aria-label="@lang('pagination.next')">
<span aria-hidden="true">&rsaquo;</span>
</li>
@endif
</ul>
</nav>
@endif

View File

@ -0,0 +1,36 @@
@if ($paginator->hasPages())
<div class="ui pagination menu" role="navigation">
{{-- Previous Page Link --}}
@if ($paginator->onFirstPage())
<a class="icon item disabled" aria-disabled="true" aria-label="@lang('pagination.previous')"> <i class="left chevron icon"></i> </a>
@else
<a class="icon item" href="{{ $paginator->previousPageUrl() }}" rel="prev" aria-label="@lang('pagination.previous')"> <i class="left chevron icon"></i> </a>
@endif
{{-- Pagination Elements --}}
@foreach ($elements as $element)
{{-- "Three Dots" Separator --}}
@if (is_string($element))
<a class="icon item disabled" aria-disabled="true">{{ $element }}</a>
@endif
{{-- Array Of Links --}}
@if (is_array($element))
@foreach ($element as $page => $url)
@if ($page == $paginator->currentPage())
<a class="item active" href="{{ $url }}" aria-current="page">{{ $page }}</a>
@else
<a class="item" href="{{ $url }}">{{ $page }}</a>
@endif
@endforeach
@endif
@endforeach
{{-- Next Page Link --}}
@if ($paginator->hasMorePages())
<a class="icon item" href="{{ $paginator->nextPageUrl() }}" rel="next" aria-label="@lang('pagination.next')"> <i class="right chevron icon"></i> </a>
@else
<a class="icon item disabled" aria-disabled="true" aria-label="@lang('pagination.next')"> <i class="right chevron icon"></i> </a>
@endif
</div>
@endif

View File

@ -0,0 +1,27 @@
@if ($paginator->hasPages())
<nav>
<ul class="pagination">
{{-- Previous Page Link --}}
@if ($paginator->onFirstPage())
<li class="page-item disabled" aria-disabled="true">
<span class="page-link">@lang('pagination.previous')</span>
</li>
@else
<li class="page-item">
<a class="page-link" href="{{ $paginator->previousPageUrl() }}" rel="prev">@lang('pagination.previous')</a>
</li>
@endif
{{-- Next Page Link --}}
@if ($paginator->hasMorePages())
<li class="page-item">
<a class="page-link" href="{{ $paginator->nextPageUrl() }}" rel="next">@lang('pagination.next')</a>
</li>
@else
<li class="page-item disabled" aria-disabled="true">
<span class="page-link">@lang('pagination.next')</span>
</li>
@endif
</ul>
</nav>
@endif

View File

@ -0,0 +1,29 @@
@if ($paginator->hasPages())
<nav role="navigation" aria-label="Pagination Navigation">
<ul class="pagination">
{{-- Previous Page Link --}}
@if ($paginator->onFirstPage())
<li class="page-item disabled" aria-disabled="true">
<span class="page-link">{!! __('pagination.previous') !!}</span>
</li>
@else
<li class="page-item">
<a class="page-link" href="{{ $paginator->previousPageUrl() }}" rel="prev">
{!! __('pagination.previous') !!}
</a>
</li>
@endif
{{-- Next Page Link --}}
@if ($paginator->hasMorePages())
<li class="page-item">
<a class="page-link" href="{{ $paginator->nextPageUrl() }}" rel="next">{!! __('pagination.next') !!}</a>
</li>
@else
<li class="page-item disabled" aria-disabled="true">
<span class="page-link">{!! __('pagination.next') !!}</span>
</li>
@endif
</ul>
</nav>
@endif

View File

@ -0,0 +1,19 @@
@if ($paginator->hasPages())
<nav>
<ul class="pagination">
{{-- Previous Page Link --}}
@if ($paginator->onFirstPage())
<li class="disabled" aria-disabled="true"><span>@lang('pagination.previous')</span></li>
@else
<li><a href="{{ $paginator->previousPageUrl() }}" rel="prev">@lang('pagination.previous')</a></li>
@endif
{{-- Next Page Link --}}
@if ($paginator->hasMorePages())
<li><a href="{{ $paginator->nextPageUrl() }}" rel="next">@lang('pagination.next')</a></li>
@else
<li class="disabled" aria-disabled="true"><span>@lang('pagination.next')</span></li>
@endif
</ul>
</nav>
@endif

View File

@ -0,0 +1,25 @@
@if ($paginator->hasPages())
<nav role="navigation" aria-label="Pagination Navigation" class="flex justify-between">
{{-- Previous Page Link --}}
@if ($paginator->onFirstPage())
<span class="relative inline-flex items-center px-4 py-2 text-sm font-medium text-gray-800 dark:text-gray-200 bg-white border border-gray-300 cursor-default leading-5 rounded-md">
{!! __('pagination.previous') !!}
</span>
@else
<a href="{{ $paginator->previousPageUrl() }}" rel="prev" class="relative inline-flex items-center px-4 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 leading-5 rounded-md hover:text-gray-800 dark:text-gray-200 focus:outline-none focus:ring ring-gray-300 focus:border-blue-300 active:bg-gray-100 active:text-gray-700 transition ease-in-out duration-150">
{!! __('pagination.previous') !!}
</a>
@endif
{{-- Next Page Link --}}
@if ($paginator->hasMorePages())
<a href="{{ $paginator->nextPageUrl() }}" rel="next" class="relative inline-flex items-center px-4 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 leading-5 rounded-md hover:text-gray-800 dark:text-gray-200 focus:outline-none focus:ring ring-gray-300 focus:border-blue-300 active:bg-gray-100 active:text-gray-700 transition ease-in-out duration-150">
{!! __('pagination.next') !!}
</a>
@else
<span class="relative inline-flex items-center px-4 py-2 text-sm font-medium text-gray-800 dark:text-gray-200 bg-white border border-gray-300 cursor-default leading-5 rounded-md">
{!! __('pagination.next') !!}
</span>
@endif
</nav>
@endif

View File

@ -0,0 +1,106 @@
@if ($paginator->hasPages())
<nav role="navigation" aria-label="{{ __('Pagination Navigation') }}" class="flex items-center justify-between">
<div class="flex justify-between flex-1 sm:hidden">
@if ($paginator->onFirstPage())
<span class="relative inline-flex items-center px-4 py-2 text-sm font-medium text-gray-800 dark:text-gray-200 bg-white border border-gray-300 cursor-default leading-5 rounded-md">
{!! __('pagination.previous') !!}
</span>
@else
<a href="{{ $paginator->previousPageUrl() }}" class="relative inline-flex items-center px-4 py-2 text-sm font-medium text-gray-800 dark:text-gray-200 bg-white border border-gray-300 leading-5 rounded-md hover:text-gray-800 dark:text-gray-200 focus:outline-none focus:ring ring-gray-300 focus:border-blue-300 active:bg-gray-100 active:text-gray-800 dark:text-gray-200 transition ease-in-out duration-150">
{!! __('pagination.previous') !!}
</a>
@endif
@if ($paginator->hasMorePages())
<a href="{{ $paginator->nextPageUrl() }}" class="relative inline-flex items-center px-4 py-2 ml-3 text-sm font-medium text-gray-800 dark:text-gray-200 bg-white border border-gray-300 leading-5 rounded-md hover:text-gray-800 dark:text-gray-200 focus:outline-none focus:ring ring-gray-300 focus:border-blue-300 active:bg-gray-100 active:text-gray-800 dark:text-gray-200 transition ease-in-out duration-150">
{!! __('pagination.next') !!}
</a>
@else
<span class="relative inline-flex items-center px-4 py-2 ml-3 text-sm font-medium text-gray-800 dark:text-gray-200 bg-white border border-gray-300 cursor-default leading-5 rounded-md">
{!! __('pagination.next') !!}
</span>
@endif
</div>
<div class="hidden sm:flex-1 sm:flex sm:items-center sm:justify-between">
<div>
<p class="text-sm text-gray-800 dark:text-gray-200 leading-5">
{!! __('Showing') !!}
@if ($paginator->firstItem())
<span class="font-medium">{{ $paginator->firstItem() }}</span>
{!! __('to') !!}
<span class="font-medium">{{ $paginator->lastItem() }}</span>
@else
{{ $paginator->count() }}
@endif
{!! __('of') !!}
<span class="font-medium">{{ $paginator->total() }}</span>
{!! __('results') !!}
</p>
</div>
<div>
<span class="relative z-0 inline-flex shadow-sm rounded-md">
{{-- Previous Page Link --}}
@if ($paginator->onFirstPage())
<span aria-disabled="true" aria-label="{{ __('pagination.previous') }}">
<span class="relative inline-flex items-center px-2 py-2 text-sm font-medium text-gray-500 bg-white border border-gray-300 cursor-default rounded-l-md leading-5" aria-hidden="true">
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20">
<path fill-rule="evenodd" d="M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z" clip-rule="evenodd" />
</svg>
</span>
</span>
@else
<a href="{{ $paginator->previousPageUrl() }}" rel="prev" class="relative inline-flex items-center px-2 py-2 text-sm font-medium text-gray-500 bg-white border border-gray-300 rounded-l-md leading-5 hover:text-gray-400 focus:z-10 focus:outline-none focus:ring ring-gray-300 focus:border-blue-300 active:bg-gray-100 active:text-gray-500 transition ease-in-out duration-150" aria-label="{{ __('pagination.previous') }}">
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20">
<path fill-rule="evenodd" d="M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z" clip-rule="evenodd" />
</svg>
</a>
@endif
{{-- Pagination Elements --}}
@foreach ($elements as $element)
{{-- "Three Dots" Separator --}}
@if (is_string($element))
<span aria-disabled="true">
<span class="relative inline-flex items-center px-4 py-2 -ml-px text-sm font-medium text-gray-800 dark:text-gray-200 bg-white border border-gray-300 cursor-default leading-5">{{ $element }}</span>
</span>
@endif
{{-- Array Of Links --}}
@if (is_array($element))
@foreach ($element as $page => $url)
@if ($page == $paginator->currentPage())
<span aria-current="page">
<span class="relative inline-flex items-center px-4 py-2 -ml-px text-sm font-medium text-black bg-white border border-gray-300 cursor-default leading-5">{{ $page }}</span>
</span>
@else
<a href="{{ $url }}" class="relative inline-flex items-center px-4 py-2 -ml-px text-sm font-medium text-gray-800 bg-white border border-gray-300 leading-5 hover:text-gray-500 focus:z-10 focus:outline-none focus:ring ring-gray-300 focus:border-blue-300 active:bg-gray-100 active:text-gray-800 transition ease-in-out duration-150" aria-label="{{ __('Go to page :page', ['page' => $page]) }}">
{{ $page }}
</a>
@endif
@endforeach
@endif
@endforeach
{{-- Next Page Link --}}
@if ($paginator->hasMorePages())
<a href="{{ $paginator->nextPageUrl() }}" rel="next" class="relative inline-flex items-center px-2 py-2 -ml-px text-sm font-medium text-gray-500 bg-white border border-gray-300 rounded-r-md leading-5 hover:text-gray-400 focus:z-10 focus:outline-none focus:ring ring-gray-300 focus:border-blue-300 active:bg-gray-100 active:text-gray-500 transition ease-in-out duration-150" aria-label="{{ __('pagination.next') }}">
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20">
<path fill-rule="evenodd" d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z" clip-rule="evenodd" />
</svg>
</a>
@else
<span aria-disabled="true" aria-label="{{ __('pagination.next') }}">
<span class="relative inline-flex items-center px-2 py-2 -ml-px text-sm font-medium text-gray-500 bg-white border border-gray-300 cursor-default rounded-r-md leading-5" aria-hidden="true">
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20">
<path fill-rule="evenodd" d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z" clip-rule="evenodd" />
</svg>
</span>
</span>
@endif
</span>
</div>
</div>
</nav>
@endif

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,5 @@
<?php
use App\Http\Controllers\ProfileController;
use Illuminate\Support\Facades\Route;
/*

View File

@ -5,6 +5,7 @@
use App\Models\User;
use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Livewire\Volt\Volt;
use Tests\TestCase;
class AuthenticationTest extends TestCase
@ -15,41 +16,72 @@ public function test_login_screen_can_be_rendered(): void
{
$response = $this->get('/login');
$response->assertStatus(200);
$response
->assertSeeVolt('pages.auth.login')
->assertOk();
}
public function test_users_can_authenticate_using_the_login_screen(): void
{
$user = User::factory()->create();
$response = $this->post('/login', [
'email' => $user->email,
'password' => 'password',
]);
$component = Volt::test('pages.auth.login')
->set('form.email', $user->email)
->set('form.password', 'password');
$component->call('login');
$component
->assertHasNoErrors()
->assertRedirect(RouteServiceProvider::HOME);
$this->assertAuthenticated();
$response->assertRedirect(RouteServiceProvider::HOME);
}
public function test_users_can_not_authenticate_with_invalid_password(): void
{
$user = User::factory()->create();
$this->post('/login', [
'email' => $user->email,
'password' => 'wrong-password',
]);
$component = Volt::test('pages.auth.login')
->set('form.email', $user->email)
->set('form.password', 'wrong-password');
$component->call('login');
$component
->assertHasErrors()
->assertNoRedirect();
$this->assertGuest();
}
public function test_navigation_menu_can_be_rendered(): void
{
$user = User::factory()->create();
$this->actingAs($user);
$response = $this->get('/dashboard');
$response
->assertSeeVolt('layout.navigation')
->assertOk();
}
public function test_users_can_logout(): void
{
$user = User::factory()->create();
$response = $this->actingAs($user)->post('/logout');
$this->actingAs($user);
$component = Volt::test('layout.navigation');
$component->call('logout');
$component
->assertHasNoErrors()
->assertRedirect('/');
$this->assertGuest();
$response->assertRedirect('/');
}
}

View File

@ -22,7 +22,9 @@ public function test_email_verification_screen_can_be_rendered(): void
$response = $this->actingAs($user)->get('/verify-email');
$response->assertStatus(200);
$response
->assertSeeVolt('pages.auth.verify-email')
->assertStatus(200);
}
public function test_email_can_be_verified(): void

View File

@ -4,6 +4,7 @@
use App\Models\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Livewire\Volt\Volt;
use Tests\TestCase;
class PasswordConfirmationTest extends TestCase
@ -16,29 +17,40 @@ public function test_confirm_password_screen_can_be_rendered(): void
$response = $this->actingAs($user)->get('/confirm-password');
$response->assertStatus(200);
$response
->assertSeeVolt('pages.auth.confirm-password')
->assertStatus(200);
}
public function test_password_can_be_confirmed(): void
{
$user = User::factory()->create();
$response = $this->actingAs($user)->post('/confirm-password', [
'password' => 'password',
]);
$this->actingAs($user);
$response->assertRedirect();
$response->assertSessionHasNoErrors();
$component = Volt::test('pages.auth.confirm-password')
->set('password', 'password');
$component->call('confirmPassword');
$component
->assertRedirect('/dashboard')
->assertHasNoErrors();
}
public function test_password_is_not_confirmed_with_invalid_password(): void
{
$user = User::factory()->create();
$response = $this->actingAs($user)->post('/confirm-password', [
'password' => 'wrong-password',
]);
$this->actingAs($user);
$response->assertSessionHasErrors();
$component = Volt::test('pages.auth.confirm-password')
->set('password', 'wrong-password');
$component->call('confirmPassword');
$component
->assertNoRedirect()
->assertHasErrors('password');
}
}

View File

@ -6,6 +6,7 @@
use Illuminate\Auth\Notifications\ResetPassword;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Facades\Notification;
use Livewire\Volt\Volt;
use Tests\TestCase;
class PasswordResetTest extends TestCase
@ -16,7 +17,9 @@ public function test_reset_password_link_screen_can_be_rendered(): void
{
$response = $this->get('/forgot-password');
$response->assertStatus(200);
$response
->assertSeeVolt('pages.auth.forgot-password')
->assertStatus(200);
}
public function test_reset_password_link_can_be_requested(): void
@ -25,7 +28,9 @@ public function test_reset_password_link_can_be_requested(): void
$user = User::factory()->create();
$this->post('/forgot-password', ['email' => $user->email]);
Volt::test('pages.auth.forgot-password')
->set('email', $user->email)
->call('sendPasswordResetLink');
Notification::assertSentTo($user, ResetPassword::class);
}
@ -36,12 +41,16 @@ public function test_reset_password_screen_can_be_rendered(): void
$user = User::factory()->create();
$this->post('/forgot-password', ['email' => $user->email]);
Volt::test('pages.auth.forgot-password')
->set('email', $user->email)
->call('sendPasswordResetLink');
Notification::assertSentTo($user, ResetPassword::class, function ($notification) {
$response = $this->get('/reset-password/'.$notification->token);
$response->assertStatus(200);
$response
->assertSeeVolt('pages.auth.reset-password')
->assertStatus(200);
return true;
});
@ -53,17 +62,21 @@ public function test_password_can_be_reset_with_valid_token(): void
$user = User::factory()->create();
$this->post('/forgot-password', ['email' => $user->email]);
Volt::test('pages.auth.forgot-password')
->set('email', $user->email)
->call('sendPasswordResetLink');
Notification::assertSentTo($user, ResetPassword::class, function ($notification) use ($user) {
$response = $this->post('/reset-password', [
'token' => $notification->token,
'email' => $user->email,
'password' => 'password',
'password_confirmation' => 'password',
]);
$component = Volt::test('pages.auth.reset-password', ['token' => $notification->token])
->set('email', $user->email)
->set('password', 'password')
->set('password_confirmation', 'password');
$response->assertSessionHasNoErrors();
$component->call('resetPassword');
$component
->assertRedirect('/login')
->assertHasNoErrors();
return true;
});

View File

@ -5,6 +5,7 @@
use App\Models\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Facades\Hash;
use Livewire\Volt\Volt;
use Tests\TestCase;
class PasswordUpdateTest extends TestCase
@ -15,18 +16,17 @@ public function test_password_can_be_updated(): void
{
$user = User::factory()->create();
$response = $this
->actingAs($user)
->from('/profile')
->put('/password', [
'current_password' => 'password',
'password' => 'new-password',
'password_confirmation' => 'new-password',
]);
$this->actingAs($user);
$response
->assertSessionHasNoErrors()
->assertRedirect('/profile');
$component = Volt::test('profile.update-password-form')
->set('current_password', 'password')
->set('password', 'new-password')
->set('password_confirmation', 'new-password')
->call('updatePassword');
$component
->assertHasNoErrors()
->assertNoRedirect();
$this->assertTrue(Hash::check('new-password', $user->refresh()->password));
}
@ -35,17 +35,16 @@ public function test_correct_password_must_be_provided_to_update_password(): voi
{
$user = User::factory()->create();
$response = $this
->actingAs($user)
->from('/profile')
->put('/password', [
'current_password' => 'wrong-password',
'password' => 'new-password',
'password_confirmation' => 'new-password',
]);
$this->actingAs($user);
$response
->assertSessionHasErrorsIn('updatePassword', 'current_password')
->assertRedirect('/profile');
$component = Volt::test('profile.update-password-form')
->set('current_password', 'wrong-password')
->set('password', 'new-password')
->set('password_confirmation', 'new-password')
->call('updatePassword');
$component
->assertHasErrors(['current_password'])
->assertNoRedirect();
}
}

View File

@ -4,6 +4,7 @@
use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Livewire\Volt\Volt;
use Tests\TestCase;
class RegistrationTest extends TestCase
@ -14,19 +15,23 @@ public function test_registration_screen_can_be_rendered(): void
{
$response = $this->get('/register');
$response->assertStatus(200);
$response
->assertSeeVolt('pages.auth.register')
->assertOk();
}
public function test_new_users_can_register(): void
{
$response = $this->post('/register', [
'name' => 'Test User',
'email' => 'test@example.com',
'password' => 'password',
'password_confirmation' => 'password',
]);
$component = Volt::test('pages.auth.register')
->set('name', 'Test User')
->set('email', 'test@example.com')
->set('password', 'password')
->set('password_confirmation', 'password');
$component->call('register');
$component->assertRedirect(RouteServiceProvider::HOME);
$this->assertAuthenticated();
$response->assertRedirect(RouteServiceProvider::HOME);
}
}

View File

@ -4,6 +4,7 @@
use App\Models\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Livewire\Volt\Volt;
use Tests\TestCase;
class ProfileTest extends TestCase
@ -14,27 +15,29 @@ public function test_profile_page_is_displayed(): void
{
$user = User::factory()->create();
$response = $this
->actingAs($user)
->get('/profile');
$response = $this->actingAs($user)->get('/profile');
$response->assertOk();
$response
->assertSeeVolt('profile.update-profile-information-form')
->assertSeeVolt('profile.update-password-form')
->assertSeeVolt('profile.delete-user-form')
->assertOk();
}
public function test_profile_information_can_be_updated(): void
{
$user = User::factory()->create();
$response = $this
->actingAs($user)
->patch('/profile', [
'name' => 'Test User',
'email' => 'test@example.com',
]);
$this->actingAs($user);
$response
->assertSessionHasNoErrors()
->assertRedirect('/profile');
$component = Volt::test('profile.update-profile-information-form')
->set('name', 'Test User')
->set('email', 'test@example.com')
->call('updateProfileInformation');
$component
->assertHasNoErrors()
->assertNoRedirect();
$user->refresh();
@ -47,16 +50,16 @@ public function test_email_verification_status_is_unchanged_when_the_email_addre
{
$user = User::factory()->create();
$response = $this
->actingAs($user)
->patch('/profile', [
'name' => 'Test User',
'email' => $user->email,
]);
$this->actingAs($user);
$response
->assertSessionHasNoErrors()
->assertRedirect('/profile');
$component = Volt::test('profile.update-profile-information-form')
->set('name', 'Test User')
->set('email', $user->email)
->call('updateProfileInformation');
$component
->assertHasNoErrors()
->assertNoRedirect();
$this->assertNotNull($user->refresh()->email_verified_at);
}
@ -65,14 +68,14 @@ public function test_user_can_delete_their_account(): void
{
$user = User::factory()->create();
$response = $this
->actingAs($user)
->delete('/profile', [
'password' => 'password',
]);
$this->actingAs($user);
$response
->assertSessionHasNoErrors()
$component = Volt::test('profile.delete-user-form')
->set('password', 'password')
->call('deleteUser');
$component
->assertHasNoErrors()
->assertRedirect('/');
$this->assertGuest();
@ -83,16 +86,15 @@ public function test_correct_password_must_be_provided_to_delete_account(): void
{
$user = User::factory()->create();
$response = $this
->actingAs($user)
->from('/profile')
->delete('/profile', [
'password' => 'wrong-password',
]);
$this->actingAs($user);
$response
->assertSessionHasErrorsIn('userDeletion', 'password')
->assertRedirect('/profile');
$component = Volt::test('profile.delete-user-form')
->set('password', 'wrong-password')
->call('deleteUser');
$component
->assertHasErrors('password')
->assertNoRedirect();
$this->assertNotNull($user->fresh());
}