iranianpep / list-sorter

List Sorting Handler for Laravel

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

List Sorter

List Sorting Handler in Laravel

Latest Stable Version Build Status Build Status Code Climate Test Coverage Code Coverage Scrutinizer Code Quality Issue Count License StyleCI Codacy Badge Packagist GitHub license

Usage

Add the sorter to your composer:

composer require list-sorter/list-sorter

In the controller:

$listSorter = new ListSorter($request, [
    new SortableItem('name'),
    new SortableItem('created_at'),
]);

$listSorter->setDefaultSortBy('created_at');
$listSorter->setDefaultSortDir('desc');

// sort by e.g. name or created_at
$sortBy = $listSorter->getSortBy();

// sort direction e.g. asc or desc
$sortDir = $listSorter->getSortDir();

$items = User::orderBy($sortBy, $sortDir)->paginate(10);

return view('index', [
    'items' => $items,
    'listSorter' => $listSorter,
]);

Or the shorter version (column and title are determined based on the key):

$listSorter = new ListSorter(
    $request,
    [
        'title',
        'created_at',
    ]
);

$listSorter->setDefaultSortBy('created_at');
$listSorter->setDefaultSortDir('desc');

In the view and the table header:

<thead>
    <tr>
        @foreach($listSorter->getSortableItems() as $sortableItem)
            @if ($sortableItem->isHidden === true)
                @continue
            @endif
            <th>
                <a href="{{ request()->fullUrlWithQuery([$listSorter->getSortByKey() => $sortableItem->getKey(), $listSorter->getSortDirKey() => $sortableItem->getNewSortDir(), 'page' => $currentPage]) }}">
                    {{ $sortableItem->getTitle() }}
                    @if ($sortableItem->isSelected() === true)
                        @if (in_array($sortableItem->getSortDir(), ['asc', 'desc']))
                            <i class="fa fa-sort-{{ $sortableItem->getSortDir() }}" aria-hidden="true"></i>
                        @else
                            <i class="fa fa-sort-{{ $listSorter->getSortDir() }}" aria-hidden="true"></i>
                        @endif
                    @else
                        <i class="fa fa-sort" aria-hidden="true"></i>
                    @endif
                </a>
            </th>
        @endforeach
    </tr>
</thead>

About

List Sorting Handler for Laravel

License:MIT License


Languages

Language:PHP 100.0%