Documentation Index
Fetch the complete documentation index at: https://docs.mejik.web.id/llms.txt
Use this file to discover all available pages before exploring further.
Dokumentasi Implementasi Tree DataTable
Dokumentasi ini menjelaskan perubahan dari implementasi DataTable standar (flat) menjadi Tree DataTable (hierarkis) yang mampu menampilkan data dengan struktur induk-anak (parent-child).Perbedaan Utama: Flat DataTable vs. Tree DataTable
Perbedaan mendasar terletak pada cara data disiapkan di backend (Laravel) dan cara data dirender di frontend (Vue & TanStack Table). 1. Struktur Data (Backend)- Flat DataTable:
- Struktur: Backend mengirimkan data dalam bentuk array datar (flat array) dari hasil paginasi Laravel. Contoh:
[{ id: 1, name: 'A' }, { id: 2, name: 'B' }]. - Query: Menggunakan
->paginate()untuk membatasi jumlah data per halaman. Logika query sangat sederhana. - Tree DataTable:
- Struktur: Backend mengirimkan data dalam bentuk array yang sudah tersusun secara hierarkis (nested). Setiap objek data memiliki properti
_childrenyang berisi array dari anak-anaknya. Contoh:[{ id: 1, name: 'Parent', _children: [{ id: 2, name: 'Child' }] }]. - Query: Tidak lagi menggunakan paginasi. Controller akan mengambil semua data yang relevan lalu membangun struktur pohon di memori server sebelum dikirim ke frontend.
- Logika Pencarian:
- Pada flat data, pencarian hanya menampilkan baris yang cocok.
- Pada tree data, pencarian akan menemukan baris yang cocok, lalu menelusuri ke atas (ancestors) untuk menyertakan semua induknya hingga ke akar (root). Semua induk dari hasil pencarian akan ditandai
_expanded: trueagar otomatis terbuka dan menampilkan hasil yang relevan.
- Flat DataTable:
- Komponen: Menggunakan satu komponen
DataTable.vueyang generik. - TanStack Table: Konfigurasi dasar hanya menggunakan
getCoreRowModel(). - Rendering: Setiap baris dirender secara sekuensial tanpa ada indentasi atau tombol expand/collapse.
- Tree DataTable:
- Komponen: Menggunakan komponen baru
TreeDataTable.vueyang dirancang khusus untuk data hierarkis. - TanStack Table: Menggunakan fitur tambahan:
getSubRows: (row) => row._children: Memberi tahu tabel di mana properti anak berada.getExpandedRowModel(): Mengaktifkan fungsionalitas untuk membuka/menutup baris.- Mengelola state baru yaitu
expanded. - Rendering:
- Indentasi: Setiap baris anak akan memiliki
padding-leftuntuk menunjukkan kedalamannya (row.depth). - Tombol Expand/Collapse: Kolom utama (misalnya
name) kini memiliki tombolChevronyang hanya muncul jika baris tersebut memiliki anak (row.getCanExpand()). - Paginasi: Dihilangkan, karena seluruh struktur pohon ditampilkan sekaligus. Footer tabel disederhanakan untuk hanya menampilkan total data dan jumlah baris yang dipilih.
- Flat DataTable: Interaksi utama adalah sorting, filtering, dan paginasi.
- Tree DataTable: Interaksi utama adalah membuka dan menutup cabang pohon untuk menjelajahi data. Ditambah, ada aksi baru seperti
[+ Add Child]yang spesifik untuk konteks hierarki.
Implementasi Kode Lengkap
Berikut adalah kumpulan semua file kode yang telah dimodifikasi dan dibuat untuk implementasi Tree DataTable.1. Backend: MemberController.php
Controller ini diubah untuk membangun struktur data pohon dari data flat di database berdasarkan relasi parentId.
2. Frontend: columns.ts
Definisi kolom dimodifikasi untuk menambahkan tombol expand/collapse pada kolom name dan menambahkan event handler untuk tombol + Add Child.
3. Frontend: components/DataTableRowActions.vue (Modifikasi)
Komponen aksi baris ditambahkan prop onAddChild untuk menangani event klik pada menu + Add Child.
4. Frontend: TreeDataTable.vue (Komponen Baru)
Ini adalah komponen utama yang baru, yang meng-handle rendering tabel hierarkis.
5. Frontend: Index.vue (Halaman Pengguna)
Halaman ini sekarang menggunakan komponen TreeDataTable.vue dan menangani event @addChild.
