ctx.collectionField

Instance field data table (CollectionField) yang terkait dengan konteks eksekusi RunJS saat ini, untuk mengakses metadata field, tipe, aturan validasi, dan informasi relasi. Hanya ada saat field terikat ke definisi data table; field kustom/virtual mungkin null.

Skenario Penggunaan

SkenarioDeskripsi
JSFieldPada form field, melakukan linkage atau validasi berdasarkan interface, enum, targetCollection, dll.
JSItemPada item sub-table, mengakses metadata field yang sesuai dengan kolom saat ini
JSColumnPada kolom tabel, memilih cara render berdasarkan collectionField.interface, atau mengakses targetCollection

Perhatian: ctx.collectionField hanya tersedia saat field terikat ke definisi data table (Collection); pada skenario seperti JSBlock independen, action event tanpa field binding biasanya undefined, disarankan melakukan pengecekan null sebelum digunakan.

Definisi Tipe

collectionField: CollectionField | null | undefined;

Properti Umum

PropertiTipeDeskripsi
namestringNama field (seperti status, userId)
titlestringJudul field (termasuk i18n)
typestringTipe data field (string, integer, belongsTo, dll.)
interfacestringTipe interface field (input, select, m2o, o2m, m2m, dll.)
collectionCollectionData table tempat field berada
targetCollectionCollectionData table target dari field relasi (hanya ada untuk tipe relasi)
targetstringNama data table target (field relasi)
enumarrayOpsi enum (select, radio, dll.)
defaultValueanyNilai default
collectionNamestringNama data table tempat field berada
foreignKeystringNama field foreign key (belongsTo, dll.)
sourceKeystringSource key relasi (hasMany, dll.)
targetKeystringTarget key relasi
fullpathstringPath lengkap (seperti main.users.status), untuk referensi API atau variabel
resourceNamestringNama resource (seperti users.status)
readonlybooleanApakah read-only
titleablebooleanApakah dapat ditampilkan sebagai judul
validationobjectKonfigurasi aturan validasi
uiSchemaobjectKonfigurasi UI
targetCollectionTitleFieldCollectionFieldField judul dari data table target relasi (field relasi)

Method Umum

MethodDeskripsi
isAssociationField(): booleanApakah field relasi (belongsTo, hasMany, hasOne, belongsToMany, dll.)
isRelationshipField(): booleanApakah field tipe relationship (termasuk o2o, m2o, o2m, m2m, dll.)
getComponentProps(): objectMendapatkan props default dari komponen field
getFields(): CollectionField[]Mendapatkan list field dari data table target relasi (hanya field relasi)
getFilterOperators(): object[]Mendapatkan operator filter yang didukung field tersebut (seperti $eq, $ne, dll.)

Contoh

Render Cabang Berdasarkan Tipe Field

if (!ctx.collectionField) return null;
const { interface: iface } = ctx.collectionField;
if (['m2o', 'o2m', 'm2m'].includes(iface)) {
  // Field relasi: tampilkan record relasi
  const target = ctx.collectionField.targetCollection;
  // ...
} else if (iface === 'select' || iface === 'radioGroup') {
  const options = ctx.collectionField.enum || [];
  // ...
}

Memeriksa Apakah Field Relasi dan Mengakses Data Table Target

if (ctx.collectionField?.isAssociationField()) {
  const targetCol = ctx.collectionField.targetCollection;
  const titleField = targetCol?.titleCollectionField?.name;
  // Proses berdasarkan struktur data table target
}

Mendapatkan Opsi Enum

const options = ctx.collectionField?.enum ?? [];
const labels = options.map((o) => (typeof o === 'object' ? o.label : o));

Render Bersyarat Berdasarkan Mode Read-only/Display

const { Input } = ctx.libs.antd;
if (ctx.collectionField?.readonly) {
  ctx.render(<span>{ctx.getValue?.() ?? '-'}</span>);
} else {
  ctx.render(<Input onChange={(e) => ctx.setValue?.(e.target.value)} />);
}

Mendapatkan Field Judul dari Data Table Target Relasi

// Saat menampilkan field relasi, dapat menggunakan titleCollectionField dari data table target untuk mendapatkan nama field judul
const titleField = ctx.collectionField?.targetCollectionTitleField;
const titleKey = titleField?.name ?? 'title';
const assocValue = ctx.getValue?.() ?? ctx.record?.[ctx.collectionField?.name];
const label = assocValue?.[titleKey];

Hubungan dengan ctx.collection

KebutuhanPenggunaan yang Direkomendasikan
Data table tempat field saat ini beradactx.collectionField?.collection atau ctx.collection
Metadata field (nama, tipe, interface, enum, dll.)ctx.collectionField
Data table target relasictx.collectionField?.targetCollection

ctx.collection biasanya merepresentasikan data table yang terikat block saat ini; ctx.collectionField merepresentasikan definisi field saat ini di data table. Pada skenario seperti sub-table, field relasi, keduanya mungkin berbeda.

Hal yang Perlu Diperhatikan

  • Pada skenario seperti JSBlock, JSAction (tanpa field binding), ctx.collectionField biasanya undefined, disarankan menggunakan optional chaining sebelum mengakses.
  • JS field kustom yang tidak terikat ke field data table, ctx.collectionField mungkin null.
  • targetCollection hanya ada pada field tipe relasi (seperti m2o, o2m, m2m); enum hanya ada pada field dengan opsi seperti select, radioGroup.

Terkait