Manipulasi Spec Dengan Backend
pada dasarnya spec dapat dimanipulasi dengan mengubah / melakukan override pada fungsi spec dimodel yang kita ingin sesuaikan, untuk melakukan berikut contoh override yang bisa di lakuakan pada model untuk mengubah action_label menjadi Tambah jenis Bantuan
public function spec(): Collection
{
$spec = parent::spec();
$spec['header_action'] = Arr::map($spec['header_action'], function ($specHeaderAction) {
if ($specHeaderAction['method'] === 'post') {
$specHeaderAction['path'] = $this->path;
$specHeaderAction['action_label'] = 'Tambah Jenis Bantuan';
}
return $specHeaderAction;
});
return $spec;
}
namun dengan membuat code seperti itu code yang kita buat akan menjadi complex dan susah untuk dimanaitain sehingga di sediakan fungsi untuk melakukan override dio bawh ini
Mengganti path pada spec
untuk mengganti path pada spec, maka perlu merubah property $path pada model yang di inginkan
<?php
class ExampleModel extends CrudModel
{
...
protected string $path = "example";
...
}
Hide Show Button
Digunakan untuk melakukan hide show button pada table, create, edit, delete, dan detail, untuk melakukanya dapat menambahkan nama button pada property yang di inginkan di dalam model. default nya semua button akan di tampilkan (true)
<?php
class ExampleModel extends CrudModel
{
...
protected bool $canCreate = false;
protected bool $canEdit = false;
protected bool $canDelete = false;
protected bool $canDetail = false;
protected bool $canBulk = false;
...
}
Hide Spec In Table, Create, Detail Dan Edit
Diguanakan utnuk melakukan hide field pada tempat yagn di inginkan di bawah ini kita hide process instance di semua tempat, untuk melakukanya dapat menambahkan nama column pada property yang di inginkan di dalam model
<?php
class ExampleModel extends CrudModel
{
...
protected array $hiddenOnCreate =['process_instance_id'];
protected array $hiddenOnList =['process_instance_id'];
protected array $hiddenOnEdit =['process_instance_id'];
protected array $hiddenOnDetail = ['process_instance_id'];
...
}
Mengurutkan field di list, create ataupun edit
Digunakan untuk melakukan ordering field pada list, create ataupun edit, sehingga urutan field yang ditampilkan bisa sesuai dengan kenginan.
class ExampleModel extends CrudModel
{
...
protected array $listOrderColumns = ['nama_field'];
protected array $createOrderColumns = ['nama_field'];
protected array $editOrderColumns = ['nama_field'];
...
}
Field Selection
digunakan untuk membuat bentuk select untuk field user_id yang akan di ambil dari url /api/profile/user-profile dengan method get dengan key yang di gunakan adalah id label yang di munculkan di select adalah first_name
protected function getUser_idSelection()
{
return new UrlForeignSelection("/api/profile/user-profile", "get", "id", "first_name");
}
Selain itu ada juga bentuk lain yang bis di gunaakn untuk membuat select seperti
Url Selection
return new UrlForeignSelection("/api/profile/user-profile", "get", "id", "first_name");
Url Foreign Selection
return new UrlSelection("/api/profile/user-profile", "get", "id", "first_name");
Static Selection
return new StaticSelection([
[
"key" => "diterima",
"label" => "Diterima",
],
[
"key" => "ditolak",
"label" => "Ditolak",
]
], "key", "label");
Table Value Mapping
value mapping ini di gunakan untuk menampilkan data dari relasi yang sudah disiapkan seperti kasus di bawah kita akan memapping user_id , dengan mapping hasOne atau berbentuk object dari relasi author dan di ambil first_name yang akan di munculkan di table
public function tableValueMapping(): array
{
return [
new BaseTableValue("user_id", "hasOne", "author", "first_name")
];
}
Upload file dan image
upload file dan image dapat menggunakan spec yang di buat oleh 2 fungsi yaitu addAdditionalFieldSpec dan setCustomFieldAtribute
addtional field spec berguna untuk membuat field transient yang tidak terdapat pada field table berikut contohnya
public function addAdditionalFieldSpec(): array
{
return [
BaseSpec::createInstanceFromArray([
"name" => "profile",
'label' => "profile",
])
];
}
dari fungsi diatas akan membuat field baru pada spec yang bertype kosong dan bisa di set menggunakan fungsi setCustomFieldAtribute
public function setCustomFieldAtribute(): array
{
return [
new BaseUploadFileFieldAtribute("profile", "/api/media/" , false, [])
]; // TODO: Change the autogenerated stub
}
type file upload ada 2 yuaitu BaseUploadFileFieldAtribute dan BaseUploadImageFieldAtribute dengan parameter
| Atribute |
|---|
| string $name, |
| string $service, |
| bool $isMultiple = true, |
| array $allowedExtension = [], |
| $actionMessage = "Klik Untuk Mengunggah Atau Drag File", |
| $fileTypeMessage = "File yang bisa diupload adalah " |
mengubah field tambahan yang tidak ada di constructor bisa menggunakan dengan cara Fluent Interface contohnya
new BaseUploadFileFieldAtribute("profile", "/api/media/" , false, [])->setUploadingMessage("Memuat Naik .. ")->setUploadErrorHeader("Gagal Memuat Naik")
Fe Format
untuk mengubah format kita bisa melakukan override pada fungsi getFeFormatMapping yang akan mereturn BaseFeFormatAtribute dengan atribute name nama field , dan format format yang akan di gunakan
public function getFeFormatMapping(): array
{
return [
new BaseFeFormatAtribute("updated_at" , "YYYY")
];
}
Label Mapping
untuk megubah label bisa menggunakan fungsi label Mapping yang berisi key => value
public function labelMapping()
{
return [
"process_instance_id" => "Id Process instance"
];
}