Cheatsheet Plugin Development

Saat menulis plugin, sering muncul pertanyaan "barang ini sebenarnya harus ditulis di file mana, panggil API mana". Cheatsheet ini membantu Anda menemukan dengan cepat.

Struktur Direktori Plugin

Membuat plugin melalui yarn pm create @my-project/plugin-name, akan otomatis menggenerate struktur direktori berikut. Jangan membuat direktori secara manual, untuk menghindari langkah registrasi yang terlewatkan menyebabkan plugin tidak berfungsi. Untuk detail lihat Menulis Plugin Pertama.

plugin-name/
├── src/
   ├── client-v2/              # Kode client (v2)
   ├── plugin.tsx          # Entry plugin client
   ├── locale.ts           # Hook terjemahan useT / tExpr
   ├── models/             # FlowModel (Block, Field, Action)
   └── pages/              # Component halaman
   ├── client/                 # Kode client (v1, kompatibilitas)
   ├── plugin.tsx
   ├── locale.ts
   ├── models/
   └── pages/
   ├── server/                 # Kode server
   ├── plugin.ts           # Entry plugin server
   └── collections/        # Definisi tabel data
   └── locale/                 # File terjemahan multi-bahasa
       ├── zh-CN.json
       └── en-US.json
├── client-v2.js                # Entry direktori root (mengarah ke hasil build)
├── client-v2.d.ts
├── client.js
├── client.d.ts
├── server.js
├── server.d.ts
└── package.json

Client: Saya Ingin Lakukan Apa → Cara Menulis

Saya ingin lakukan apaTulis di file manaPanggil API apaDokumentasi
Mendaftarkan route halamanload() di plugin.tsxthis.router.add()Router
Mendaftarkan halaman pengaturan pluginload() di plugin.tsxpluginSettingsManager.addMenuItem() + addPageTabItem()Router
Mendaftarkan Block kustomload() di plugin.tsxthis.flowEngine.registerModelLoaders()FlowEngine → Ekstensi Block
Mendaftarkan Field kustomload() di plugin.tsxthis.flowEngine.registerModelLoaders()FlowEngine → Ekstensi Field
Mendaftarkan Action kustomload() di plugin.tsxthis.flowEngine.registerModelLoaders()FlowEngine → Ekstensi Action
Membuat tabel internal muncul di pemilihan tabel data Blockload() di plugin.tsxmainDS.addCollection()Collections Tabel Data
Menerjemahkan teks pluginlocale/zh-CN.json + locale/en-US.jsoni18n Internasionalisasi

Server: Saya Ingin Lakukan Apa → Cara Menulis

Saya ingin lakukan apaTulis di file manaPanggil API apaDokumentasi
Mendefinisikan tabel dataserver/collections/xxx.tsdefineCollection()Collections Tabel Data
Memperluas tabel data yang adaserver/collections/xxx.tsextendCollection()Collections Tabel Data
Mendaftarkan API kustomload() di server/plugin.tsthis.app.resourceManager.define()ResourceManager
Mengkonfigurasi hak akses APIload() di server/plugin.tsthis.app.acl.allow()ACL Kontrol Hak Akses
Menulis data awal saat plugin diinstalinstall() di server/plugin.tsthis.db.getRepository().create()Plugin

Cheatsheet FlowModel

Saya ingin lakukan apaExtends class apaAPI kunci
Membuat Block tampilan murniBlockModelrenderComponent() + define()
Membuat Block yang terikat tabel data (rendering kustom)CollectionBlockModelcreateResource() + renderComponent()
Membuat Block tabel lengkap (kustomisasi berdasarkan tabel bawaan)TableBlockModelfilterCollection() + customModelClasses
Membuat Component tampilan fieldClickableFieldModelrenderComponent(value) + bindModelToInterface()
Membuat tombol ActionActionModelstatic scene + registerFlow({ on: 'click' })

Cheatsheet Method Terjemahan

SkenarioGunakanImport dari mana
Di load() Pluginthis.t('key')Bawaan class Plugin
Di Component Reactconst t = useT(); t('key')locale.ts
Definisi statis FlowModel (define(), registerFlow())tExpr('key')locale.ts

Cheatsheet Panggilan API Umum

Saya ingin lakukan apaDi PluginDi Component
Membuat API requestthis.context.api.request()ctx.api.request()
Mendapatkan terjemahanthis.t()useT()
Mendapatkan logthis.context.loggerctx.logger
Mendaftarkan routethis.router.add()
Navigasi halamanctx.router.navigate()
Membuka modalctx.viewer.dialog()

Tautan Terkait