Alkademi Logo
Plugin System

Sistem Override

Implementasi saat ini memakai dua mekanisme utama: extend lewat route/layer plugin, dan replace core lewat field replaces. Tidak ada field overrideMode yang dibaca oleh source saat ini.

Sistem Override

Implementasi saat ini memakai dua mekanisme utama: extend lewat route/layer plugin, dan replace core lewat field replaces. Tidak ada field overrideMode yang dibaca oleh source saat ini.

Extend: Menambah Fitur Baru

Untuk menambah fitur baru, buat plugin aktif dengan routes sendiri dan biarkan replaces kosong atau tidak ditulis.

export default {
  enabled: true,
  routes: [
    {
      key: 'gamification',
      path: '/dashboard/gamification',
      icon: 'i-heroicons-trophy',
      label: 'Gamification'
    }
  ]
}

Hasilnya:

  • layer plugin dimasukkan ke Nuxt;
  • halaman plugin tersedia sesuai struktur pages/;
  • menu dashboard ditambahkan dari routes;
  • core bawaan tetap aktif.

Replace: Mengganti Core

Untuk mengganti fitur core, isi replaces dengan id core yang ingin dinonaktifkan.

export default {
  enabled: true,
  replaces: ['program'],
  routes: [
    {
      key: 'custom-program',
      path: '/dashboard/custom-program',
      icon: 'i-heroicons-rectangle-stack',
      label: 'Custom Program'
    }
  ]
}

Saat auto-discovery berjalan, shared/utils/layers.ts akan:

  1. membaca plugin aktif;
  2. mengumpulkan semua core id di replaces;
  3. melewati core dengan id tersebut ketika menyusun extends.

Dengan contoh di atas, cores/program tidak akan dimuat sebagai layer.

Partial Override Komponen

Nuxt Layers dapat melakukan resolusi komponen berdasarkan prioritas layer, tetapi project saat ini tidak memiliki field config khusus untuk "partial override". Jika ingin mengganti komponen tertentu, lakukan dengan hati-hati:

  • gunakan nama komponen yang sama dengan komponen target;
  • pastikan plugin aktif dan masuk komposisi layer;
  • verifikasi hasilnya di browser karena prioritas resolusi mengikuti aturan Nuxt Layers.

Untuk replacement yang eksplisit dan stabil, gunakan replaces.

Override Sidebar

Sidebar mengikuti config, bukan hardcoded:

  • item core berasal dari core.config.ts;
  • item plugin berasal dari plugin.config.ts;
  • item dinamis berasal dari sidebar.ts;
  • core yang ada di replaces tidak ditampilkan.

Jika item dari sidebar.ts memiliki key yang sama dengan item statis, keduanya akan di-merge. Ini berguna untuk menambahkan children dinamis pada menu plugin.


Siap mencoba? Ikuti panduan Membuat Plugin Pertama Anda.

Copyright © 2026