List Articles

id title author body
10 Non quisquam et illum nulla earum. Bryce Qui eius totam enim voluptatem fuga eligendi. Moll...
9 Ullam et beatae amet ut asperiores. Bryce Rerum impedit quod doloremque dolorem et occaecati...
8 Corporis impedit ex et quibusdam commodi accusamus. Libbie Eveniet autem esse laudantium sunt quibusdam tempo...
7 Ipsum inventore blanditiis est doloribus. Libbie Quam dolores doloribus rerum pariatur repellat rer...
6 Hic nobis placeat et et recusandae neque. Maria Et quis aut eaque rerum et. Aut veritatis porro bl...
5 Consequatur aut quia quae ipsa doloremque id quos aliquam. Maria Quod non sapiente et cumque. Fugit non vel adipisc...
4 Aut voluptas nulla eligendi id deleniti alias. Mallie Aut asperiores dolores accusantium facilis dolorum...
3 Cupiditate odit et dolorem dolorem. Mallie Laudantium aut quod perferendis quia cupiditate do...
2 Quod quibusdam expedita odio qui hic ratione aperiam. Natalie Quisquam et repellendus cum velit ut excepturi ex....
1 Non eaque a recusandae ab. Natalie Et accusantium modi minima assumenda. Voluptatem o...
tot. 20

module structure


laravel/
├─ app/
│  ├─ Modules/
│  │  ├─ Demo/
│  │  │  ├─ Livewire/
│  │  │  │  ├─ Articles/
│  │  │  │  │  ├─ views/
│  │  │  │  │  │  ├─ articles_edit.blade.php
│  │  │  │  │  │  ├─ articles_table.blade.php
│  │  │  │  │  │  ├─ articles_view.blade.php
│  │  │  │  │  ├─ ArticlesEdit.php
│  │  │  │  │  ├─ ArticlesTable.php
│  │  │  │  │  ├─ ArticlesView.php
│  │  │  │  ├─ routes.php

route

Livewire/routes.php


Route::get('demo/articles'ArticlesTable::class)
    ->
middleware(['web'])
    ->
name('demo.articles')
    ->
crumbs(fn ($crumbs) => $crumbs->parent('demo')->push('Articles'route('demo.articles')));

component

Livewire/Articles/ArticlesTable.php


<?php

namespace App\Modules\Demo\Livewire\Articles;

use 
App\Modules\Demo\Models\Author;
use 
App\Modules\Demo\Models\Article;
use 
Zofe\Rapyd\Traits\WithDataTable;
use 
Livewire\Component;

class 
ArticlesTable extends Component
{
    use 
WithDataTable;
    public 
$search;
    public 
$author_id;

    public function 
updatedAuthorId()
    {
        
$this->resetPage();
    }

    public function 
updatedSearch()
    {
        
$this->resetPage();
    }

    public function 
getDataSet()
    {
        
$items Article::ssearch($this->search);

        if (
$this->author_id) {
            
$items $items->where('author_id','=',$this->author_id);
        }

        return 
$items $items
            
->orderBy($this->sortField,$this->sortAsc ?'asc':'desc')
            ->
paginate($this->perPage)
            ;
    }

    public function 
render()
    {
        
$items $this->getDataSet();
        
$authors Author::all()->pluck('firstname','id')->toArray();



        return 
view('demo::Articles.views.articles_table',
                    
compact('items','authors')
        )->
layout('demo::admin');
    }
}

view

Livewire/Articles/views/articles_table.blade.php


<x-rpd::card>
    <
x-rpd::table
        title
="List Articles"
        
:items="$items"
    
>
        <
x-slot name="filters">
            <
x-rpd::input col="col" debounce="350" model="search"  placeholder="search..." />
            <
x-rpd::select col="col" lazy model="author_id" :options="$authorsplaceholder="author..."
                           
addempty />
        </
x-slot>

        <
x-slot name="buttons">
            <
a href="{{ route('demo.articles') }}" class="btn btn-outline-dark">reset</a>
            <
a href="{{ route('demo.articles.edit') }}" class="btn btn-outline-primary">add</a>
        </
x-slot>

        <
table class="table">
            <
thead>
            <
tr>
                <
th>
                    <
x-rpd::sort model="id" label="id" />
                </
th>
                <
th>title</th>
                <
th>author</th>
                <
th>body</th>
            </
tr>
            </
thead>
            <
tbody>
            @foreach (
$items as $article)
            <
tr>
                <
td>
                    <
a href="{{ route('demo.articles.view',$article->id) }}">{{ $article->id }}</a>
                </
td>
                <
td>{{ $article->title }}</td>
                <
td>{{ $article->author->firstname }}</td>
                <
td>{{ Str::limit($article->body,50) }}</td>
            </
tr>
            @endforeach
            </
tbody>
        </
table>

    </
x-rpd::table>
</
x-rpd::card>