From ac7e64c75c823c80293672ab9bfaf5ec573fdaf2 Mon Sep 17 00:00:00 2001 From: Henrik Hautakoski Date: Fri, 30 Jul 2021 12:31:31 +0200 Subject: [PATCH] Adding Item Page --- app/Http/Controllers/ItemController.php | 27 ++++++++++++ app/Http/Livewire/Items.php | 43 ++++++++++++++++++ resources/views/item/index.blade.php | 8 ++++ resources/views/item/show.blade.php | 8 ++++ resources/views/livewire/items.blade.php | 55 ++++++++++++++++++++++++ routes/web.php | 7 +++ 6 files changed, 148 insertions(+) create mode 100644 app/Http/Controllers/ItemController.php create mode 100644 app/Http/Livewire/Items.php create mode 100644 resources/views/item/index.blade.php create mode 100644 resources/views/item/show.blade.php create mode 100644 resources/views/livewire/items.blade.php diff --git a/app/Http/Controllers/ItemController.php b/app/Http/Controllers/ItemController.php new file mode 100644 index 0000000..b1595ec --- /dev/null +++ b/app/Http/Controllers/ItemController.php @@ -0,0 +1,27 @@ + ['except' => ''], + 'reagent_for' => ['except' => false], + ]; + + /** + * Filter by name + */ + public string $name = ''; + + public $reagent_for = false; + + public function render() + { + $query = Item::query() + ->with(['reagent_for']); + + if ($this->reagent_for) { + $query->has('reagent_for'); + } + + // Filter by name + if (strlen($this->name) >= 3) { + $query->where('name', 'LIKE', '%' . $this->name . '%'); + } + + return view('livewire.items', [ + 'items' => $query->paginate($this->perPage) + ]); + } +} diff --git a/resources/views/item/index.blade.php b/resources/views/item/index.blade.php new file mode 100644 index 0000000..eeae322 --- /dev/null +++ b/resources/views/item/index.blade.php @@ -0,0 +1,8 @@ + + + {{ __('Items') }} + +
+ +
+
diff --git a/resources/views/item/show.blade.php b/resources/views/item/show.blade.php new file mode 100644 index 0000000..de1e7c4 --- /dev/null +++ b/resources/views/item/show.blade.php @@ -0,0 +1,8 @@ + + + {{ __('Item') }} - {{ $item->name }} + +
+ +
+
diff --git a/resources/views/livewire/items.blade.php b/resources/views/livewire/items.blade.php new file mode 100644 index 0000000..ea2fca5 --- /dev/null +++ b/resources/views/livewire/items.blade.php @@ -0,0 +1,55 @@ +
+ +
+ +
+ + +
+
+ + @if ($items->count()) + + + + + + + + + @foreach($items as $item) + + + + + @endforeach + +
{{ __('Name') }}{{ __('Reagent for') }}
+ + {{ $item->name }} + + + @if ($item->reagent_for && $item->reagent_for->count() > 0) +
    + @foreach($item->reagent_for->take(15) as $recipe) +
  • + +
  • + @endforeach + + @if ($item->reagent_for->count() > 15) +
  • and {{ $item->reagent_for->count() - 15 }} more
  • + @endif +
+ @else + {{ __('None') }} + @endif +
+ +
+ {{ $items->links() }} +
+ @else + No items found + @endif +
diff --git a/routes/web.php b/routes/web.php index 0747d0a..c6fd846 100644 --- a/routes/web.php +++ b/routes/web.php @@ -8,6 +8,7 @@ use App\Http\Controllers\CharacterController; use App\Http\Controllers\CharacterProfessionController; use App\Http\Controllers\ProfessionController; use App\Http\Controllers\RecipeController; +use App\Http\Controllers\ItemController; use App\Http\Controllers\Auth\SessionController; @@ -68,6 +69,12 @@ Route::prefix('recipes')->name('recipe.')->group(function () { Route::get('/{recipe}', [RecipeController::class, 'show'])->name('show'); }); +// Items +Route::prefix('items')->name('item.')->group(function () { + Route::get('/', [ItemController::class, 'index'])->name('index'); + Route::get('/{item}', [ItemController::class, 'show'])->name('show'); +}); + // Authenticated section // ---------------------------- Route::middleware(['auth'])->group(function() {