advicepharma / tablegenerator
A table generator to be used with react js
Installs: 1 658
Dependents: 0
Suggesters: 0
Security: 0
Stars: 3
Watchers: 1
Forks: 1
Open Issues: 0
Requires
- php: ^7.4|^8.0
- illuminate/support: ^8.0|^9.0
Requires (Dev)
- laravel/framework: ^8.0|^9.0
- laravel/pint: ^1.3
- orchestra/testbench: ^6.0
- phpstan/phpstan: ^1.9
- phpunit/phpunit: ^9.0
README
A package to create a structured jason that should be consumed with a react component.
Requirements
You have to install:
- spatie query builder (https://spatie.be/docs/laravel-query-builder/v3/introduction)
Installation
You can install the package via composer:
composer require advicepharma/tablegenerator
Basic Usage
use Advicepharma\Tablegenerator\Tablegenerator; use Advicepharma\Tablegenerator\Elements\Action; use Advicepharma\Tablegenerator\Elements\Column; use Advicepharma\Tablegenerator\Elements\ActionColumn; use Spatie\QueryBuilder\QueryBuilder; $users = QueryBuilder::for(App\Models\User::class); $table = new Tablegenerator; $table->query($users) ->paginate() ->addFilter() ->addSorts() ->table() ->addColumn( [ (new Column) ->field('id') ->label('ID') ->filtrable() ->sortable(), (new Column) ->field('name') ->label('Name') ->filtrable() ] );
Table creation command
php artisan make:advtable TableName --model=Model
like
php artisan make:advtable UserTable --model=User
Column object
label(<string>)
column label (header)
field(<string>)
display the field in QueryBuilder
object
filtrable()
set the column filtrable
sortable()
set the column sortable
Adding column
Adding column accpets array of Column
or Column
object.
$table->->table() ->addColumn( [ (new Column) ->field('name') ->label('Name'), (new Column) ->field('email') ->label('Email') ] )
or:
$table->->table() ->addColumn( (new Column) ->field('name') ->filterKey('name') ->label('Name') ->filtrable() ->sortable() )
Action column
Action column are used to render actions in the table. Default action are edit and delete:
(new ActionColumn) ->label('') ->addAction( (new Action) ->type(Action::ACTION_EDIT) ->properties( [ 'link_to' => '/account/users/#id#' ] ) ) ->addAction( (new Action) ->type(Action::ACTION_DELETE) ->properties( [ 'confirm' => true, 'confirm_message' => 'Do you really want to delete this user?', 'link_to' => route('user.destroy', '#id#', false) ] ) )
type
can be whatever you want: this two are the default one.
properties
can contains all the properties that are going to be consumed by frontend
Pagination
Pagination is super easy: you have to add ->paginate()
to create default pagination structure.
If you want, you can specify the pagesize passing an integer value ->paginate(100)
Api resource
If you want to use ApiResource feature, you can add it with
$table->->table() ->withResource(YourResource::class)
Relationship column
If you are working with a QueryBuilder with relationship, like:
QueryBuilder::for(App\Models\Post::class)->with('user');
Al you need to do is to specify the colum field with dot notation:
(new Column)->field('user.name')->label('User Name')
If you want to filter a related field, you need to add filterKey('user.name')
(or whatever table.field value you want to search)
Unforturnately sorting a relation field is not yet supported
Testing
composer test
Changelog
Please see CHANGELOG for more information what has changed recently.
Contributing
Please see CONTRIBUTING for details.
Security
If you discover any security related issues, please email giacomo.garavaglia@advicepharma.com instead of using the issue tracker.
Credits
License
The MIT License (MIT). Please see License File for more information.
Laravel Package Boilerplate
This package was generated using the Laravel Package Boilerplate.