List Articles

id title author body
20 Hic velit recusandae enim esse. Norene Non nesciunt porro laborum sequi omnis est placeat...
19 Eaque explicabo dolore sit eaque rerum aspernatur consequatur. Norene Error et maxime optio libero voluptatem. Dolor sin...
18 Et excepturi natus quidem rem libero et saepe. Freda Explicabo ullam voluptates tempore. Tempora vel ac...
17 Eius laborum aut facere architecto illo iste doloribus velit. Freda Qui ipsam et ut sed nam. Blanditiis et voluptatem...
16 Ut placeat reprehenderit magnam. Ariane Sed in nisi a delectus aliquid. Mollitia debitis n...
15 Blanditiis harum aliquam rerum. Ariane Dolorem necessitatibus hic ut sit. Voluptas quis u...
14 Ipsa quod ad culpa nam velit fugit. Walker Ut quaerat laudantium quos quam quis. Modi perfere...
13 Eos sunt consequatur voluptates natus qui eum optio. Walker Labore vitae aut ullam ipsa ipsum. Qui nihil volup...
12 Molestias maiores est dolores. Kacey Temporibus sit eveniet illum repudiandae. Occaecat...
11 Non nihil qui est cupiditate ipsam debitis cum. Kacey Qui debitis id mollitia veniam animi ea possimus....
tot.20

module structure


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

route

Components/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

Components/Articles/ArticlesTable.php


<?php

namespace App\Modules\Demo\Components\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

Components/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>