Fitur Sort List pada Alurkerja Lowcode
Melanjutkan dari tulisan sebelumnya, tentang Get List pada Alurkerja Lowcode, sekarang akan dijelaskan tentang bagaimana cara mengurutkan (sort) list data pada Alurkerja Lowcode.
Persiapan
Siapkan project laravel yang telah dipasang Alurkerja Lowcode, jika belum tahu caranya, dapat dilihat disini.
Buat api CRUD dengan command laravolt, jika belum tahu caranya, dapat dilihat disini.
Pada tulisan ini menggunakan module name article dan model name article.
Siapkan beberapa row data pada database anda. Misalkan seperti ini :

SortableColumns
Untuk bagian ini, silahkan anda baca dulu terkait AutoMode pada model Alurkerja Lowcode.
Karena saat ini pada app/Models/Article menerapkan BLACKLIST, maka anda dapat meng-override variable sortableColumns
untuk menentukan atribut yang tidak ingin disertakan dalam sort (tidak akan di-sort).
Anda dapat menambahkan code sebagai berikut :
public AutoMode $sortMode = AutoMode::BLACKLIST;
protected array $sortableColumns = [
'name'
];
Dengan ini, maka atribut name tidak disertakan dalam sort.
Sebelum penambahan sortableColumns (list bisa diurutkan berdasarkan atribut name) :

Sesudah penambahan sortableColumns (list tidak bisa diurutkan berdasarkan atribut name) :

Custom Sort
Pada file service app/Services/article/ArticleService.php anda bisa menerapkan custom query untuk sort ini.
Secara default query yang akan diterapkan pada sort adalah :
$query->orderBy('nama_kolom', 'direction');
Anda bisa melakukan kustomisasi query sort dengan meng-override fungsi sortQuery.
Pertama-tama pastikan atribut name di-blacklist dari sortableColumns, lalu silahkan anda menambahkan code berikut :
protected function sortQuery(Builder $query, Request $request): Builder
{
$query = parent::sortQuery($query, $request);
$sort = $request->input('sort');
$direction = $request->input('asc') === 'true' ? 'asc' : 'desc';
//custom query sort pada name
if ($sort === 'name') {
$query->orderBy('name', $direction);
}
return $query;
}
Maka, list bisa diurutkan berdasarkan name, walaupun telah di-blacklist.
