Table

Tabel data dashboard dengan pencarian per kolom, sorting, selection, loading, tampilan kosong, dan ruang aksi per baris.

Dasar

Definisikan kolom sekali, lalu berikan daftar objek pada rows. Slot #cell-[key] dapat menampilkan badge, tautan, avatar, atau isi khusus lainnya.

IDLokasiJadwalStatus
PU-0042Kantor Bekasi21 Sep 2026, 09.00Terjadwal
PU-0043Gudang Cakung21 Sep 2026, 13.30Berjalan
PU-0044Pabrik Karawang22 Sep 2026, 10.00Selesai

Sorting

Kolom sortable berputar dari menaik, menurun, lalu kembali ke urutan asli. Secara default data diurutkan lokal. Aktifkan manual-sort dan tangani @sort-change untuk API server.

Plastik PET125 kgRp 437.500
Kardus80 kgRp 144.000
Aluminium24 kgRp 408.000
Kaca210 kgRp 126.000

Urutan asli digunakan.

Filter dan pencarian

Tambahkan search: true pada kolom untuk pencarian teks. Konfigurasi type: 'select' atau type: 'date' memakai kontrol W4C yang sesuai. Secara default hasil disaring lokal. Untuk API server, aktifkan manual-filter dan tangani @filter-change; event ini sudah memiliki debounce 300 ms.

IDLokasiStatusTanggal
PU-0042Kantor BekasiTerjadwal23/9/2026
PU-0043Gudang CakungBerjalan23/9/2026
PU-0044Pabrik KarawangSelesai24/9/2026

Belum ada filter.

Kolom yang tertahan

freeze menahan sejumlah kolom pertama di tempatnya saat tabelnya digulir ke samping, jadi kolom pengenal barisnya tetap terbaca sejauh apa pun geserannya. freeze-actions melakukan hal yang sama untuk kolom aksi di tepi kanan.

Handle urutan dan kotak pilih ikut tertahan bersama kolom pertama — membiarkan keduanya tergulir sementara kolom pertama tetap akan terbaca sebagai kesalahan, bukan pilihan. Garis pemisahnya hanya muncul ketika memang ada yang lewat di bawahnya, jadi tabel yang belum digulir tidak memakai garis yang tidak berarti apa-apa.

Dua batas yang perlu diketahui. Kolom yang tertahan harus berurutan dari tepi: freeze adalah jumlah, bukan daftar, karena kolom di tengah tidak punya tepi untuk menempel. Dan jangan menahan lebih banyak dari yang muat — kalau kolom tertahan memenuhi wadahnya, tidak ada ruang tersisa untuk digulir.

KodePelangganKotaArmadaPetugasJadwalBeratStatusAksi
PK-1041Kantor Pusat SudirmanJakartaB 9021 XZDwi Cahyono02 Okt 20261.240 kgSelesai
PK-1042Gudang CakungJakartaB 7744 KMRina Puspita02 Okt 2026860 kgDiproses
PK-1043Pabrik Karawang 2KarawangB 1180 QTAgus Riyanto03 Okt 20262.310 kgDijadwalkan
PK-1044Hotel Kuta SelatanBadungDK 4410 ABMade Sukerta04 Okt 2026540 kgDijadwalkan

Belum ada aksi yang dipilih.

Pilih baris

Gunakan selectable dan v-model:selected. Checkbox header otomatis menampilkan status sebagian terpilih dan melewati baris yang dinonaktifkan.

IDLokasiStatus
PU-0042Kantor BekasiTerjadwal
PU-0043Gudang CakungBerjalan
PU-0044Pabrik KarawangDibatalkan

Terpilih: PU-0042

Ubah urutan baris

Aktifkan draggable dan hubungkan v-model:rows. Handle memakai perilaku W4cDraggable yang sama untuk mouse, sentuhan, dan keyboard. Reorder dinonaktifkan ketika sorting kolom aktif karena urutan visual sedang ditentukan oleh sorting.

UrutanPrioritasLokasiJadwal
1

Kantor Bekasi

PU-0042

09.00
2

Gudang Cakung

PU-0043

10.30
3

Pabrik Karawang

PU-0044

13.00

Tekan Enter atau Spasi untuk mengangkat baris, gunakan tombol panah untuk memindahkan, lalu tekan Enter atau Spasi untuk meletakkan. Tekan Escape untuk membatalkan.

Tarik handle atau gunakan keyboard untuk mengubah prioritas.

Aksi per baris

Slot #actions menambahkan kolom khusus di ujung. Untuk banyak aksi, gunakan W4cDropdownMenu agar tabel tetap ringkas.

IDLokasiPelangganAksi
PU-0042BekasiPT Sejahtera
PU-0043Jakarta TimurCV Bersih

Belum ada aksi yang dipilih.

Loading dan kosong

State loading mempertahankan header dan bentuk tabel melalui skeleton. Ketika data kosong, pesan menggunakan W4cEmptyState dan dapat diganti seluruhnya melalui slot.

Loading

IDLokasiStatus
Memuat data

Kosong

IDLokasiStatus

Pickup tidak ditemukan

Ubah filter atau tambahkan jadwal pickup baru.

API

Props

PropTipeDefaultKeterangan
columnsW4cTableColumn[][]Definisi kolom yang ditampilkan.
rowsRecord<string, unknown>[][]Daftar objek data untuk baris tabel.
rowKeystring | (row, index) => string | number'id'Properti atau fungsi yang menghasilkan kunci stabil tiap baris.
selected(string | number)[][]Kunci baris terpilih, mendukung v-model:selected.
sortW4cTableSortundefinedStatus urutan aktif, mendukung v-model:sort.
defaultSortW4cTableSortundefinedUrutan awal untuk penggunaan tanpa v-model.
filtersW4cTableFilters{}Nilai filter per key kolom, mendukung v-model:filters.
defaultFiltersW4cTableFilters{}Filter awal untuk penggunaan tanpa v-model.
manualFilterbooleanfalseMengirim perubahan filter tanpa menyaring rows; gunakan untuk data server.
filterDebouncenumber300Jeda event filterChange setelah pengguna berhenti mengetik.
selectablebooleanfalseMenampilkan checkbox pilihan per baris dan pilih-semua.
draggablebooleanfalseMenampilkan handle untuk mengubah urutan baris.
dragHandleLabelstring'Ubah urutan baris'Awalan nama aksesibel tombol drag handle.
dragDisabled(row, index) => booleanundefinedMencegah baris tertentu dipindahkan.
manualSortbooleanfalseHanya mengirim perubahan sort tanpa mengurutkan rows; gunakan untuk data server.
loadingbooleanfalseMengganti isi tabel dengan skeleton loading.
loadingRowsnumber5Jumlah baris skeleton.
emptyTitlestring'Belum ada data'Judul tampilan kosong.
emptyDescriptionstringundefinedPenjelasan pada tampilan kosong.
emptyIconstring | false'lucide:inbox'Ikon Iconify tampilan kosong; false menyembunyikannya.
size'sm' | 'md' | 'lg''md'Kepadatan tinggi header dan baris.
variant'bordered' | 'plain''bordered'Tabel berbingkai atau menyatu dengan wadah induk.
stripedbooleanfalseMemberi latar bergantian pada baris.
hoverablebooleantrueMenandai baris yang sedang ditunjuk.
stickyHeaderbooleanfalseMenahan header di atas ketika wadah tabel digulir.
freezenumber0Jumlah kolom pertama yang tertahan saat tabel digulir ke samping. Handle urutan dan kotak pilih ikut tertahan bersamanya.
freezeActionsbooleanfalseMenahan kolom aksi di tepi kanan.
minWidthnumber | string640Lebar minimum sebelum wadah tabel menggulir horizontal.
selectionLabelstring'Pilih baris'Awalan nama aksesibel checkbox selection.
actionsLabelstring'Aksi'Nama aksesibel kolom aksi.
rowDisabled(row, index) => booleanundefinedMenonaktifkan pemilihan baris tertentu.
rowLabel(row, index) => stringrow keyNama baris yang dibacakan pada checkbox selection.

W4cTableColumn

PropTipeDefaultKeterangan
keystringwajibKunci unik kolom dan path nilai bawaan; path bertingkat seperti customer.name didukung.
labelstringwajibJudul kolom.
sortablebooleanfalseMengubah header menjadi tombol sorting tiga keadaan.
align'start' | 'center' | 'end''start'Perataan header dan isi kolom.
widthnumber | stringundefinedLebar CSS kolom; angka dianggap piksel.
getValue(row, index) => unknownundefinedMengambil nilai sel secara kustom.
format(value, row, index) => unknownundefinedMemformat renderer teks bawaan.
sortValue(row, index) => unknownundefinedNilai pembanding khusus untuk sorting lokal.
searchboolean | W4cTableSearchfalseMenampilkan pencarian teks, select, atau tanggal di bawah judul kolom.
PropTipeDefaultKeterangan
type'text' | 'select' | 'date''text'Jenis kontrol pada baris filter.
placeholderstringotomatis dari labelPetunjuk singkat di dalam kontrol.
optionsW4cFormSelectItem[][]Pilihan untuk type select.
searchablebooleanfalseMengaktifkan pencarian di dalam select.
multiplebooleanfalseMengizinkan beberapa nilai pada select.
rangebooleanfalseMengubah filter tanggal menjadi rentang inklusif.
min / maxstringundefinedBatas tanggal YYYY-MM-DD.
disabledbooleanfalseMenonaktifkan kontrol filter kolom.
match(cellValue, searchValue, row, index) => booleanundefinedPencocokan lokal khusus untuk kebutuhan kolom.

Slots

SlotTipeDefaultKeterangan
caption——Caption tabel yang terlihat.
header{ column }—Isi bawaan semua header.
header-[key]{ column }—Isi header untuk satu kolom.
search{ column, value, update }—Mengganti kontrol pencarian bawaan semua kolom.
search-[key]{ column, value, update }—Mengganti kontrol pencarian pada satu kolom.
cell{ column, row, value, index }—Isi bawaan semua sel.
cell-[key]{ column, row, value, index }—Isi sel untuk satu kolom, misalnya badge status.
actions{ row, index }—Menambahkan kolom aksi di ujung tabel.
loading——Mengganti baris skeleton bawaan.
empty——Mengganti W4cEmptyState bawaan.

Events

EventTipeDefaultKeterangan
update:filters(filters: W4cTableFilters) => void—Nilai langsung untuk v-model:filters pada setiap perubahan.
filterChange(filters: W4cTableFilters) => void—Perubahan filter setelah filterDebounce, cocok untuk memuat data server.
update:rows(rows: W4cTableRow[]) => void—Array baris baru untuk v-model:rows setelah reorder.
reorder({ item, oldIndex, newIndex, items }) => void—Detail baris yang selesai dipindahkan.
update:selected(keys: W4cTableKey[]) => void—Dipicu ketika pilihan berubah.
selectionChange(keys: W4cTableKey[]) => void—Alias event perubahan pilihan untuk handler biasa.
update:sort(sort?: W4cTableSort) => void—Dipicu ketika urutan berubah.
sortChange(sort?: W4cTableSort) => void—Alias event sorting untuk memuat data server.
rowClick(row, index, event) => void—Dipicu saat area noninteraktif pada baris diklik.