ViewStack
ViewStack dalam framework Ngorei,
mulai dari setup dasar, navigasi, state management, hingga implementasi callback events.
Panduan ini ditujukan untuk membantu developer dalam mengelola tampilan berbasis stack secara efektif.
Struktur HTML
Struktur HTML ViewStack menggunakan sistem nested views yang memungkinkan
pengorganisasian konten secara hierarkis. Parent view dapat memiliki multiple
child views yang diidentifikasi menggunakan data-section.
<!-- Parent View -->
<Viewstack id="parent-id" [true]>
<h4>Judul Parent</h4>
<!-- Child Views -->
<div data-section id="child-1">
<h4>Child 1</h4>
<!-- konten child 1 -->
</div>
<div data-section id="child-2">
<h4>Child 2</h4>
<!-- konten child 2 -->
</div>
</Viewstack>
Penjelasan Detail:
- Struktur Dasar
- Tag Viewstack sebagai container utama
- Atribut id untuk identifikasi unik
- Atribut true untuk tampilan awal
- data-section untuk child views
- Mendukung nested views hingga beberapa level
- Otomatis menangani visibilitas child views
- Terintegrasi dengan sistem routing
- Penggunaan Atribut
- id: Harus unik untuk setiap Viewstack
- true: Mengatur tampilan default saat load
- data-section: Menandai child view sections
- class: Untuk styling tambahan jika diperlukan
- Fitur Tambahan
- Mendukung lazy loading konten
- Kompatibel dengan animasi transisi
- Dapat dikustomisasi melalui CSS
- Terintegrasi dengan event system
Struktur Navigasi
Navigasi ViewStack menggunakan sistem URL berbasis hash yang memungkinkan
deep-linking dan browser history. Format navigasi mendukung hierarki parent-child
untuk kemudahan akses ke berbagai level konten.
<!-- Menu Navigasi -->
<ul class="navigation">
<!-- Parent Menu -->
<li><a href="#parent-id">Parent Menu</a>
<ul>
<!-- Child Menu -->
<li><a href="#parent-id/child-1">Child Menu 1</a></li>
<li><a href="#parent-id/child-2">Child Menu 2</a></li>
</ul>
</li>
</ul>
Penjelasan Detail:
- Navigasi
- Struktur menu bertingkat
- Format URL dengan hash (#)
- Nested navigation support
- Automatic state tracking
Fitur Utama
ViewStack menyediakan berbagai fitur utama untuk mengelola tampilan dan state aplikasi.
Fitur-fitur ini mencakup perilaku tampilan yang konsisten, manajemen state yang handal,
dan kemampuan untuk menyimpan state di URL maupun penyimpanan lokal.
Perilaku Tampilan
ViewStack memiliki perilaku tampilan yang intuitif dengan kemampuan menampilkan
konten secara dinamis berdasarkan interaksi pengguna. Sistem ini mendukung
navigasi bertingkat dan penyimpanan state otomatis.
- Perilaku Default
- Klik parent menu: Menampilkan semua child sections
- Klik child menu: Menampilkan hanya section yang dipilih
- State tersimpan di URL (hash) dan IndexedDB
- Mendukung browser back/forward navigation
State Management
Sistem manajemen state ViewStack menyediakan mekanisme untuk melacak dan
mempertahankan status tampilan. Informasi state disimpan dalam format yang
terstruktur dan dapat diakses melalui API yang disediakan.
// Mendapatkan informasi view aktif
const viewInfo = viewStack.getViewInfo();
console.log(viewInfo);
/* Output:
{
URL: "parent-id/child-1",
View: "parent-id",
Section: "child-1",
Page: "parent-id",
Params: "child-1"
}
*/
Penjelasan Detail:
- State Management
- Tracking view aktif
- Persistensi state via URL
- History management
- Parameter handling
Event Callbacks
Sistem callback pada ViewStack memungkinkan developer untuk merespon berbagai event
yang terjadi selama siklus hidup komponen. Callbacks ini berguna untuk implementasi
logika kustom, validasi, logging, dan penanganan error.
beforeViewChange
Event callback yang dipanggil sebelum perubahan view terjadi. Berguna untuk
validasi, konfirmasi, atau persiapan data sebelum navigasi dilakukan.
Dapat mencegah navigasi dengan mengembalikan nilai false.
const viewStack = new ViewStack({
beforeViewChange: (parentId, childId) => {
console.log(`Navigating to $${childId ? '/' + childId : ''}`);
// Return false to prevent navigation
return true;
}
});
Penjelasan:
- Dipanggil sebelum view berubah
- Dapat mencegah navigasi dengan return false
- Menerima parentId dan childId sebagai parameter
afterViewChange
Callback yang dieksekusi setelah perubahan view selesai. Ideal untuk
menginisialisasi komponen, memuat data, atau melakukan tracking setelah
navigasi berhasil dilakukan.
const viewStack = new ViewStack({
afterViewChange: (parentId, childId, view) => {
console.log(`Navigated to $${childId ? '/' + childId : ''}`);
// Akses element view yang aktif
console.log(view);
}
});
onViewNotFound
Handler untuk menangani kasus ketika view yang diminta tidak ditemukan.
Memungkinkan implementasi fallback view atau pesan error yang sesuai
dengan kebutuhan aplikasi.
const viewStack = new ViewStack({
onViewNotFound: (targetId) => {
console.warn(`View tidak ditemukan: $`);
// Handle view not found error
}
});
onNavigate
Event yang dipicu saat navigasi terjadi, baik melalui interaksi pengguna
maupun programatik. Berguna untuk tracking, logging, atau sinkronisasi
dengan komponen lain dalam aplikasi.
const viewStack = new ViewStack({
onNavigate: (targetId) => {
console.log(`Navigation occurred: $`);
// Track navigation events
}
});
Callback |
Parameter |
Deskripsi |
beforeViewChange |
(parentId, childId) |
Dipanggil sebelum view berubah |
afterViewChange |
(parentId, childId, view) |
Dipanggil setelah view berubah |
onViewNotFound |
(targetId) |
Dipanggil jika view tidak ditemukan |
onNavigate |
(targetId) |
Dipanggil saat navigasi terjadi |
Best Practices
Mengikuti best practices dalam penggunaan ViewStack akan membantu menciptakan
kode yang lebih maintainable dan menghindari masalah umum dalam pengembangan.
Bagian ini mencakup panduan untuk penamaan, strukturisasi, dan penanganan error.
- Penamaan dan Struktur
- Gunakan ID yang unik dan deskriptif
- Struktur HTML yang konsisten (Viewstack > data-section)
- Implementasikan error handling melalui callbacks
- Manfaatkan state management untuk persistensi data
Implementasi
Contoh implementasi lengkap ViewStack dalam skenario nyata. Bagian ini
mendemonstrasikan penggunaan ViewStack untuk manajemen database, termasuk
navigasi antar halaman konfigurasi dan manajemen tabel.
<!-- HTML -->
<ul class="navigation">
<li>
<a href="#database">Database</a>
<ul>
<li><a href="#database/config">Konfigurasi</a></li>
<li><a href="#database/tables">Tabel</a></li>
</ul>
</li>
</ul>
<Viewstack id="database" true>
<h4>Database Management</h4>
<div data-section id="config">
<h4>Konfigurasi Database</h4>
<!-- konten konfigurasi -->
</div>
<div data-section id="tables">
<h4>Manajemen Tabel</h4>
<!-- konten tabel -->
</div>
</Viewstack>