Skip to main content

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"
];
}