feat(basicdata): tambahkan pencarian pada fitur ekspor Holiday Calendar

- Menambahkan kemampuan pencarian pada fitur ekspor Holiday Calendar.
- Mengubah konstruktor `HolidayCalendarExport` untuk menerima parameter `search` yang bersifat opsional.
- Menyesuaikan query pengambilan data pada `HolidayCalendarExport` agar mendukung filter berdasarkan:
  - Deskripsi (`description`).
  - Tipe (`type`).
  - Tanggal (`date`).
- Memperbaiki logika perhitungan halaman aktif pada pagination di `HolidayCalendarController`.
- Menambahkan parameter `search` pada fungsi `export` di `HolidayCalendarController`.
- Memperbarui URL export pada tampilan `index.blade.php` ketika input pencarian diubah.
- Menambahkan fungsi JavaScript `updateExportUrl()` untuk menyisipkan filter pencarian pada URL ekspor.
- Menjamin tidak ada perubahan URL ekspor jika pencarian kosong.

Fitur ini memungkinkan pengguna untuk mengekspor data kalender libur berdasarkan hasil pencarian spesifik.

Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
This commit is contained in:
Daeng Deni Mardaeni
2025-05-19 09:10:33 +07:00
parent 8d190cb10d
commit be271dbe6e
3 changed files with 45 additions and 6 deletions

View File

@@ -20,7 +20,7 @@
<div class="flex flex-wrap gap-2.5">
<div class="h-[24px] border border-r-gray-200"></div>
@can('basic-data.export')
<a class="btn btn-sm btn-light" href="{{ route('basicdata.holidaycalendar.export') }}"> Export to Excel </a>
<a id="export-btn" class="btn btn-sm btn-light" href="{{ route('basicdata.holidaycalendar.export') }}"> Export to Excel </a>
@endcan
@can('basic-data.create')
<a class="btn btn-sm btn-primary" href="{{ route('basicdata.holidaycalendar.create') }}"> Tambah Hari Libur </a>
@@ -149,6 +149,7 @@
const element = document.querySelector('#holiday-calendar-table');
const searchInput = document.getElementById('search');
const deleteSelectedButton = document.getElementById('deleteSelected');
const exportBtn = document.getElementById('export-btn');
const apiUrl = element.getAttribute('data-api-url');
const dataTableOptions = {
@@ -205,10 +206,28 @@
};
let dataTable = new KTDataTable(element, dataTableOptions);
// Update export URL with filters
function updateExportUrl() {
let url = new URL(exportBtn.href);
if (searchInput.value) {
url.searchParams.set('search', searchInput.value);
} else {
url.searchParams.delete('search');
}
exportBtn.href = url.toString();
}
// Custom search functionality
searchInput.addEventListener('input', function () {
const searchValue = this.value.trim();
dataTable.goPage(1);
dataTable.search(searchValue, true);
// Update export URL with search parameter
updateExportUrl();
});
function updateDeleteButtonVisibility() {