Extensions
Tambahkan halaman baru ke Lenz Dashboard — misalnya analitik khusus industri — lewat extension yang dipasang dari katalog, tanpa memperbarui Lenz itu sendiri.
Pengenalan
Extensions menambahkan halaman baru ke Lenz Dashboard tanpa perlu memperbarui Lenz. Setiap extension adalah halaman yang dibuat dan di-deploy terpisah — misalnya dashboard lalu lintas pengunjung toko atau pemantauan antrean kasir — lalu dipasang dari katalog. Setelah terpasang, extension tampil sebagai menu di sidebar dan terbuka di dalam tampilan Lenz seperti halaman bawaan lainnya.

Extension yang terpasang dikumpulkan dalam grup Extensions tepat di bawah Home (tanda 1). Klik salah satunya (tanda 2) untuk membukanya.
Cara Kerja
Extension disediakan oleh sebuah Extension Server yang dihubungkan ke Lenz oleh tim deployment Anda. Server ini menyimpan katalog extension yang tersedia beserta kode halamannya. Lenz hanya menampilkan daftar dan memuat halaman extension saat Anda membukanya.
Extension bekerja atas nama pengguna yang sedang login. Artinya, extension hanya dapat membaca data yang memang boleh Anda akses, dan setiap aksinya tercatat seperti aksi Anda sendiri.
Siapa yang Bisa Menggunakan
| Kebutuhan | Keterangan |
|---|---|
| Extension Server terhubung | Dikonfigurasi oleh tim deployment di sisi server (variabel EXTENSION_SERVER_URL). Selama belum terhubung, menu Extensions tidak muncul sama sekali. Tidak ada pengaturan di halaman Preferences untuk ini. |
| Izin peran pada resource Extension | Read untuk melihat dan membuka extension, Create untuk install, Update untuk mengubah nama, ikon, dan urutan, serta Delete untuk uninstall. Atur di User & Access. |
Setiap extension juga memakai data Lenz lain — misalnya statistik atau daftar kamera. Pastikan peran pengguna juga memiliki izin atas data tersebut, atau halaman extension akan tampil kosong.
Cara Menggunakan
Membuka Halaman Extension Settings
Di sidebar, buka System → System Config → Extensions, atau akses /extension-settings langsung. Halaman Extensions menampilkan semua extension dari Extension Server, dibagi menjadi dua bagian:

- Terinstall — extension yang sudah terpasang dan tampil di sidebar. Setiap kartu menampilkan lencana Terinstall serta tombol Edit dan Uninstall (tanda 5).
- Tersedia — extension yang belum terpasang, masing-masing dengan tombol Install (tanda 6).
Gunakan kolom Cari extension... (tanda 1) untuk menyaring berdasarkan nama atau deskripsi.
Menginstall Extension
Pilih extension di bagian Tersedia
Baca deskripsi setiap extension — sebagian extension membutuhkan kamera atau analitik tertentu agar datanya terisi.
Klik Install
Klik Install pada kartu extension (tanda 6). Untuk memasang semua extension yang tersedia sekaligus, klik Install Semua (tanda 3). Dialog konfirmasi menampilkan daftar extension yang akan dipasang; klik Install Semua Extension untuk melanjutkan.
Buka extension dari sidebar
Extension langsung pindah ke bagian Terinstall dan muncul di grup Extensions di sidebar — tanpa perlu memuat ulang halaman.
Mengubah Urutan di Sidebar
Urutan kartu di bagian Terinstall sama dengan urutan menu di grup Extensions sidebar.
- Seret kartu menggunakan pegangan ⋮⋮ di sisi kirinya (tanda 4) ke posisi yang diinginkan.
- Klik tombol Terapkan Urutan yang muncul di samping kolom pencarian untuk menyimpan.
Pegangan seret disembunyikan selama kolom pencarian terisi. Kosongkan pencarian terlebih dahulu bila ingin mengubah urutan.
Mengubah Nama dan Ikon
Klik Edit pada extension yang terinstall untuk membuka dialog Edit Extension.

- Nama — nama yang tampil di sidebar dan di judul halaman extension.
- Ikon — klik untuk membuka pemilih ikon. Cari ikon lewat kolom Search icons... atau saring per kategori (People, Analytics, Media, Security, System, Communication, Business, General, Navigation, Data, Transport, Time), lalu klik ikon yang diinginkan.
- Klik Simpan. Sidebar langsung diperbarui.
Menguninstall Extension
Klik Uninstall pada extension yang tidak lagi dibutuhkan, lalu konfirmasi di dialog Uninstall Ekstensi?.

Untuk menghapus semua extension sekaligus, klik Uninstall Semua (tanda 2 pada halaman Extension Settings).
Yang terjadi saat uninstall
- Extension hilang dari sidebar dan kembali ke bagian Tersedia.
- Nama, ikon, dan urutan yang pernah Anda ubah ikut terhapus. Saat diinstall ulang, extension kembali memakai nama dan ikon bawaan.
- Data milik extension tetap tersimpan — misalnya pengaturan toko pada extension analitik ritel — dan kembali dapat dipakai setelah extension diinstall ulang.
Membuka Extension
Klik nama extension di grup Extensions pada sidebar. Halaman extension terbuka di /extensions/<slug>, misalnya /extensions/store-traffic.
Saat pertama kali dibuka dalam satu sesi, Lenz menampilkan kartu pemuatan dengan tahap Connecting, Loading module, dan Rendering selama halaman extension diunduh dari Extension Server. Setelah itu halaman disimpan di memori, sehingga kunjungan berikutnya langsung tampil.
Bila halaman tidak berhasil ditampilkan, Lenz menunjukkan salah satu pesan berikut:
| Pesan | Artinya |
|---|---|
| Extension not found | Tidak ada extension terinstall dengan alamat tersebut — mungkin sudah di-uninstall atau alamatnya salah ketik. |
| Failed to load extension | Kode halaman extension gagal diunduh atau dijalankan, misalnya karena Extension Server sedang tidak dapat dihubungi. |
Hal yang Perlu Diketahui
- Extension Settings adalah extension sistem. Halaman pengelolaan ini sendiri disediakan oleh Extension Server, tetapi tidak muncul di daftar katalog, tidak tampil di grup Extensions sidebar, dan tidak dapat di-uninstall.
- Tidak ada tombol aktif/nonaktif. Untuk menyembunyikan extension dari sidebar, uninstall extension tersebut. Menonaktifkan tanpa uninstall hanya tersedia lewat API (
PATCHdenganis_enabled: false). - Judul grup sidebar secara default adalah Extensions. Judul ini dapat diganti oleh administrator melalui preferensi sistem, tetapi belum ada pengaturannya di UI Lenz.
- Satu Extension Server per deployment. Semua pengguna pada satu instalasi Lenz melihat katalog dan daftar extension terinstall yang sama.
Fitur Utama
Pasang dari Katalog
Install satu per satu atau semua sekaligus — extension langsung muncul di sidebar tanpa memuat ulang halaman.
Atur Tampilan Sidebar
Ubah nama, ikon, dan urutan menu extension sesuai kebutuhan tim Anda.
Menyatu dengan Lenz
Halaman extension tampil di dalam layout Lenz dan dapat membuka detail stream atau event bawaan Lenz.
Aman Mengikuti Hak Akses
Extension bekerja dengan sesi pengguna yang login, sehingga hanya mengakses data yang memang diizinkan untuk pengguna tersebut.
Data Tetap Tersimpan
Uninstall hanya menghapus extension dari sidebar — data milik extension tetap ada saat diinstall ulang.
Tercatat di Audit Logs
Setiap install, edit, urutan, dan uninstall tercatat di Audit Logs.
Tips & Troubleshooting
Untuk Developer Extension
Bagian ini ditujukan bagi developer yang membangun extension untuk Lenz.
Prinsip Dasar
Extension adalah aplikasi React yang dibangun sebagai Module Federation remote. Extension Server menyajikan dua hal:
- Katalog di
/api/extensions/*— daftar extension beserta status instalasinya. Lenz meneruskan request ini ke Extension Server setelah memeriksa login dan izin RBAC pengguna. Kontrak lengkapnya ada di API Reference. - Bundle di
/extensions/static/*— berisiremoteEntry.jsdan chunk-nya. Lenz meneruskan path ini tanpa autentikasi, sehinggaremote_urlcukup ditulis relatif, misalnya/extensions/static/remoteEntry.js.
Kontrak Komponen
Setiap modul yang di-expose harus mengekspor komponen React sebagai default. Lenz me-mount komponen tersebut dengan props berikut:
interface HostContext {
authToken: string | null; // Token pengguna aktif saat halaman dibuka
apiBaseUrl: string; // Base URL API Lenz (kosong = origin yang sama)
getAuthToken?: () => Promise<string | null>; // Header Authorization terbaru — gunakan ini untuk sesi panjang
onExtensionsChanged?: () => void; // Panggil setelah install/uninstall/edit/reorder agar sidebar Lenz diperbarui
onNavigate?: (path: string) => void; // Navigasi ke route Lenz
navigateToStream?: (streamId: string) => void; // Buka halaman detail stream
openEventDetail?: (pipelineEventId: string) => void; // Buka detail event di Event History
}Semua field bertanda ? bersifat opsional — periksa keberadaannya sebelum dipanggil. Untuk request API, selalu utamakan getAuthToken() dibanding authToken, karena Token di authToken tidak diperbarui selama halaman terbuka.
Konfigurasi Module Federation
nameharus sama dengan fieldscopedi katalog.exposes— key-nya harus sama persis denganmodule_namedi katalog, termasuk prefix./(misalnya./StoreTraffic).shared—reactdanreact-domwajibsingleton: truedengan versi yang kompatibel dengan Lenz (React 19).
Lenz memuat modul lewat loadRemote("<scope>/<module_name tanpa ./>"), sehingga ketiga nilai di atas harus konsisten antara bundle dan katalog.
Ikon
Field icon memakai kunci kebab-case, misalnya chart-bar, storefront, map-pin, clock, atau users-three. Kunci yang tidak dikenali ditampilkan sebagai ikon puzzle.
Extension Sistem
Tandai halaman pengelolaan extension sebagai is_system: true. Extension sistem tidak tampil di grup Extensions sidebar, tidak dapat di-uninstall atau dinonaktifkan, dan dibuka lewat menu System Config → Extensions (/extension-settings diarahkan ke /extensions/extension-settings).