list-sorter/list-sorter

Lists Sorting Handler in Laravel

v1.0.9 2018-02-09 23:31 UTC

README

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>