Membuat Halaman Pengaturan Plugin
Banyak plugin memerlukan halaman pengaturan untuk memungkinkan user mengonfigurasi parameter — seperti API Key dari layanan pihak ketiga, alamat Webhook, dll. Contoh ini menunjukkan cara membuat halaman pengaturan plugin yang lengkap dengan pluginSettingsManager + Component React + ctx.api.
Contoh ini tidak melibatkan FlowEngine, murni kombinasi Plugin + Router + Component + Context.
Disarankan memahami konten berikut terlebih dahulu agar pengembangan lebih lancar:
- Menulis Plugin Pertama Anda — Pembuatan plugin dan struktur direktori
- Plugin — Entry point Plugin dan lifecycle
load() - Router — Registrasi halaman pengaturan
pluginSettingsManager - Pengembangan Component — Cara menulis Component React dan useFlowContext
- i18n Internasionalisasi — Cara menulis file terjemahan dan penggunaan
useT()
Hasil Akhir
Yang akan kita buat adalah halaman pengaturan "External Service Configuration":
- Muncul di menu "Konfigurasi Plugin"
- Menyediakan UI form dengan Antd Form
- Memanggil interface backend untuk membaca dan menyimpan konfigurasi melalui
ctx.api - Memberikan notifikasi setelah berhasil disimpan

Source code lengkap lihat @nocobase-example/plugin-settings-page. Jika Anda ingin langsung menjalankannya secara lokal untuk melihat hasilnya:
Berikutnya, mari kita bangun plugin ini dari nol, langkah demi langkah.
Langkah 1: Membuat Skeleton Plugin
Eksekusi di direktori root repository:
Ini akan menghasilkan struktur file dasar di packages/plugins/@my-project/plugin-settings-page, termasuk direktori src/client-v2/, src/server/, src/locale/, dll. Untuk penjelasan detail lihat Menulis Plugin Pertama Anda.
Langkah 2: Mendaftarkan Halaman Pengaturan
Edit src/client-v2/plugin.tsx, daftarkan halaman pengaturan dengan this.pluginSettingsManager di load(). Dua langkah — pertama daftarkan menu entry dengan addMenuItem(), lalu daftarkan halaman aktual dengan addPageTabItem():
Setelah didaftarkan, di menu "Konfigurasi Plugin" akan muncul entry "External Service Configuration" dengan dua tab di bagian atas — "API Configuration" dan "About". Ketika hanya ada satu halaman di bawah menu, tab bar akan otomatis disembunyikan; di sini kita mendaftarkan dua halaman sehingga akan otomatis ditampilkan. this.t() akan secara otomatis menggunakan nama paket plugin saat ini sebagai i18n namespace, untuk detail lihat Context → Kapabilitas Umum.

Langkah 3: Menulis Component Halaman Pengaturan
Buat src/client-v2/pages/ExternalApiSettingsPage.tsx. Halaman pengaturan adalah Component React biasa, di sini kita menggunakan Form dan Card dari Antd untuk membangun UI, menggunakan useFlowContext() untuk mendapatkan ctx.api untuk berinteraksi dengan backend, dan menggunakan useT() untuk mendapatkan function terjemahan.
Beberapa poin penting:
useFlowContext()— Diimpor dari@nocobase/flow-engine, untuk mendapatkan kapabilitas Context sepertictx.api, dll.useT()— Hook terjemahan yang diimpor darilocale.ts, sudah ter-bind dengan namespace plugin, untuk detail lihat i18n InternasionalisasiuseRequest()— Berasal dari ahooks, menangani state loading dan error request.manual: trueartinya tidak mengirim request secara otomatis, perlu memanggilrun()secara manualctx.api.request()— Penggunaan sama dengan Axios, NocoBase akan secara otomatis menambahkan informasi autentikasi
Langkah 4: Menambahkan File Multibahasa
Edit file terjemahan di src/locale/ plugin:
Pertama kali menambahkan file bahasa perlu restart aplikasi agar berlaku.
Untuk cara penulisan file terjemahan, hook useT(), tExpr() dan penggunaan lainnya, lihat i18n Internasionalisasi.
Langkah 5: Interface Server
Form di client memerlukan dua interface dari backend yaitu externalApi:get dan externalApi:set. Bagian server tidak rumit — definisikan tabel data untuk menyimpan konfigurasi, lalu daftarkan dua interface.
Mendefinisikan Tabel Data
Buat src/server/collections/externalApiSettings.ts. NocoBase akan secara otomatis memuat definisi collection di direktori ini:
Mendaftarkan Resource dan Interface
Edit src/server/plugin.ts, daftarkan resource dengan resourceManager.define(), lalu konfigurasikan hak akses ACL:
Beberapa poin penting:
ctx.db.getRepository()— Mendapatkan object operasi data berdasarkan nama collectionctx.action.params.values— Data body request POSTacl.allow()—'loggedIn'artinya user yang sudah login dapat mengaksesnya. Interfacesettidak secara eksplisit di-allow, default-nya hanya admin yang dapat memanggilnyaawait next()— Setiap action harus memanggil ini di akhir, ini adalah konvensi middleware Koa
Langkah 6: Menulis Halaman "About"
Di langkah 2 kita mendaftarkan dua tab, Component halaman "API Configuration" sudah ditulis di langkah 3, sekarang mari menulis halaman tab "About".
Buat src/client-v2/pages/AboutPage.tsx:
Halaman ini sangat sederhana — menggunakan Descriptions dari Antd untuk menampilkan informasi plugin. Dalam proyek nyata, tab "About" dapat digunakan untuk menempatkan version, changelog, link bantuan, dll.
Langkah 7: Mengaktifkan Plugin
Setelah diaktifkan refresh halaman, di menu "Konfigurasi Plugin" Anda akan melihat entry "External Service Configuration".

Source Code Lengkap
- @nocobase-example/plugin-settings-page — Contoh lengkap halaman pengaturan plugin
Ringkasan
Kapabilitas yang digunakan dalam contoh ini:
Tautan Terkait
- Menulis Plugin Pertama Anda — Membuat skeleton plugin dari nol
- Plugin — Entry point Plugin dan lifecycle
- Router — Route halaman dan registrasi halaman pengaturan plugin
- Context → Kapabilitas Umum — ctx.api, ctx.t, dll.
- Pengembangan Component — Cara menulis Component React
- Ikhtisar Pengembangan Server — Mendefinisikan interface backend
- i18n Internasionalisasi — Cara menulis file terjemahan
- i18n Internasionalisasi (Server) — Terjemahan server

