Skip to content

perbaiki filter dan pagination bantuan dll#1551

Merged
affandii06 merged 7 commits into
devfrom
dev-1546
May 20, 2026
Merged

perbaiki filter dan pagination bantuan dll#1551
affandii06 merged 7 commits into
devfrom
dev-1546

Conversation

@habibie11
Copy link
Copy Markdown
Contributor

@habibie11 habibie11 commented May 19, 2026

issue #1546
penyesuaian migrasi di Api Gabungan https://github.com/OpenSID/API-Database-Gabungan/pull/405

📋 Ringkasan

Menyelaraskan AJAX, parameter, dan komponen dropdown pada halaman Data Program Bantuan Gabungan agar konsisten dengan pola yang sudah diterapkan di halaman Data Penduduk Gabungan.

File yang diubah

Acuan


🔄 Perubahan

1. Dropdown Desa — gunakan shared component

Sebelum: Dropdown desa menggunakan 3 sumber sekaligus yang saling tumpang tindih:

  1. HTML <select> inline (baris 27-36)
  2. Blade @foreach ($list_desa as $desa) yang me-render opsi server-side (baris 32-34)
  3. Fungsi loadDesa() yang melakukan AJAX POST ke /api/v1/opendk/desa-datatable, lalu menimpa seluruh isi <select> dengan .empty().append(...) (baris 63-88)

Default value "" (empty string), label "Semua Desa".

Sesudah: Menggunakan shared component @include('layouts.fragments.list-desa') yang me-render data desa via DesaService secara server-side. Fungsi loadDesa() dan @foreach Blade dihapus karena tidak diperlukan lagi.

Dampak: Menghilangkan redundansi (tidak ada lagi render ganda + overwrite AJAX), mengurangi 1 HTTP request, dan nilai default berubah dari "" menjadi "Semua" sesuai konvensi shared component.

2. DataTable AJAX — hapus header tidak perlu

Sebelum:

headers: {
    "Accept": "application/ld+json",
    "Content-Type": "application/json; charset=utf-8",
    "Authorization": `Bearer {{ $settings['api_key_database_gabungan'] ?? '' }}`
},

Sesudah:

headers: {
    "Authorization": `Bearer {{ $settings['api_key_database_gabungan'] ?? '' }}`
},

Header Accept: application/ld+json tidak standar dan tidak digunakan di penduduk. Header Content-Type tidak diperlukan karena DataTables akan mengirimkannya otomatis.

3. DataTable data() — hapus fields[program], perbaiki sentinel desa

Sebelum:

data: function(row) {
    const desaId = $('#list_desa').val();
    return {
        "page[size]": row.length,
        "page[number]": (row.start / row.length) + 1,
        "filter[kode_desa]": desaId || '',          // ❌ "Semua" tidak akan jadi ''
        "filter[search]": row.search.value,
        "fields[program]": "*",                      // ❌ tidak ada di penduduk
        "sort": ...
    };
}

Sesudah:

data: function(row) {
    var selectedDesa = $('#list_desa').val();
    var searchValue = row.search.value;
    return {
        "page[size]": row.length,
        "page[number]": (row.start / row.length) + 1,
        "filter[search]": searchValue,
        "filter[kode_desa]": selectedDesa == 'Semua' ? '' : selectedDesa,
        "sort": ...
    };
}
  • fields[program] dihapus — parameter ini tidak dikirim di penduduk.
  • filter[kode_desa] sekarang menangani sentinel "Semua" menjadi '', sama persis seperti penduduk.

4. DataTable dataSrc() — return data mentah, mapping ke render()

Sebelum: Mapping dilakukan di dataSrc via .map():

dataSrc: function(json) {
    json.recordsTotal = json.meta.pagination.total;
    json.recordsFiltered = json.meta.pagination.total;
    return json.data.map(item => ({
        aksi: `...`,
        nama: item.attributes.nama,
        desa: item.attributes.desa || 'N/A',
        masa_berlaku: item.attributes.masa_berlaku || '-',
        nama_sasaran: item.attributes.nama_sasaran || '-'
    }));
}

Sesudah: Return json.data langsung, mapping default value dipindahkan ke render() di tiap kolom:

dataSrc: function(json) {
    json.recordsTotal = json.meta.pagination.total;
    json.recordsFiltered = json.meta.pagination.total;
    return json.data;
}

Dan di kolom:

{
    data: 'attributes.desa',
    name: 'desa',
    render: function(data) {
        return data || 'N/A';
    }
}

5. Export Excel — tambahkan kode_desa dengan handle sentinel

Sebelum: Parameter kode_desa tidak dikirim sama sekali ke endpoint export. Hanya totalData dan kode_kecamatan yang dikirim (baris 225-228):

urlParams.append('totalData', totalData);
var kode_kecamatan = "...";
urlParams.append('kode_kecamatan', kode_kecamatan);
// ❌ kode_desa tidak dikirim — filter desa diabaikan saat export

Sesudah: kode_desa ditambahkan dengan handle sentinel "Semua":

urlParams.append('totalData', totalData);
var kode_kecamatan = "...";
urlParams.append('kode_kecamatan', kode_kecamatan);

var kode_desa = $('#list_desa').val();
urlParams.append('kode_desa', kode_desa == 'Semua' ? '' : kode_desa);

Ini memperbaiki bug di mana export Excel selalu mengunduh semua data tanpa memperhitungkan filter desa yang sedang aktif.

6. Tambahkan @include('forms.datatable-vertical')

Ditambahkan di akhir @push('scripts') untuk konsistensi styling vertikal-align sel tabel, sama seperti di penduduk.


✅ Hasil

Setelah perubahan ini, halaman program bantuan memiliki pola yang konsisten dengan penduduk:

Aspek Sebelum Sesudah
Dropdown desa HTML inline + @foreach + loadDesa() AJAX (3 sumber) @include('layouts.fragments.list-desa') (1 sumber)
DataTable headers 3 header (Accept, Content-Type, Auth) 1 header (Authorization)
filter[kode_desa] desaId || '' selectedDesa == 'Semua' ? '' : selectedDesa
fields[program] Dikirim Dihapus
dataSrc mapping Via .map() di dataSrc Via render() di tiap kolom
Export kode_desa Tidak dikirim (bug) Dikirim dengan handle "Semua"""
datatable-vertical Tidak ada Ada

🧪 Testing

  • Dropdown desa muncul dengan data dari DesaService
  • Filter per desa berfungsi (pilih desa → DataTable reload)
  • Filter "Semua" menampilkan seluruh data
  • Export Excel berfungsi dengan dan tanpa filter desa
  • Export Excel dengan "Semua" terpilih mengirim kode_desa kosong
  • Export Excel dengan desa tertentu terpilih mengirim kode_desa yang sesuai

@github-actions
Copy link
Copy Markdown

🔄 AI PR Review sedang antri di server...

Proses review akan segera dimulai di background — hasil akan muncul sebagai komentar setelah selesai.
Powered by CrewAI · PR #1551

@habibie11 habibie11 requested a review from affandii06 May 19, 2026 09:38
@affandii06
Copy link
Copy Markdown
Contributor

ada conflict mas @habibie11

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants