feat: [equipment] 목록 필터 상태를 sessionStorage에 저장/복원
- 검색/필터 후 수정 페이지 이동 → 목록 복귀 시 필터 유지 - 페이지네이션, select 변경 시에도 자동 저장
This commit is contained in:
@@ -83,12 +83,50 @@ class="bg-white rounded-lg shadow-sm">
|
||||
|
||||
@push('scripts')
|
||||
<script>
|
||||
document.getElementById('filterForm').addEventListener('submit', function(e) {
|
||||
const FILTER_KEY = 'equipment_filter';
|
||||
const filterForm = document.getElementById('filterForm');
|
||||
const filterFields = ['search', 'status', 'production_line', 'equipment_type', 'per_page', 'page'];
|
||||
|
||||
// 필터 상태 저장
|
||||
function saveFilter() {
|
||||
const data = {};
|
||||
filterFields.forEach(name => {
|
||||
const el = filterForm.querySelector(`[name="${name}"]`);
|
||||
if (el) data[name] = el.value;
|
||||
});
|
||||
sessionStorage.setItem(FILTER_KEY, JSON.stringify(data));
|
||||
}
|
||||
|
||||
// 필터 상태 복원 (페이지 로드 시)
|
||||
(function restoreFilter() {
|
||||
const saved = sessionStorage.getItem(FILTER_KEY);
|
||||
if (!saved) return;
|
||||
try {
|
||||
const data = JSON.parse(saved);
|
||||
filterFields.forEach(name => {
|
||||
const el = filterForm.querySelector(`[name="${name}"]`);
|
||||
if (el && data[name] !== undefined) el.value = data[name];
|
||||
});
|
||||
} catch (e) {}
|
||||
})();
|
||||
|
||||
filterForm.addEventListener('submit', function(e) {
|
||||
e.preventDefault();
|
||||
document.getElementById('pageInput').value = 1;
|
||||
saveFilter();
|
||||
htmx.trigger('#equipment-table', 'filterSubmit');
|
||||
});
|
||||
|
||||
// select 변경 시에도 저장
|
||||
filterForm.querySelectorAll('select').forEach(el => {
|
||||
el.addEventListener('change', saveFilter);
|
||||
});
|
||||
|
||||
// HTMX 요청 직전 필터 저장 (페이지네이션 등)
|
||||
document.body.addEventListener('htmx:configRequest', function() {
|
||||
saveFilter();
|
||||
});
|
||||
|
||||
function confirmDelete(id, name) {
|
||||
showDeleteConfirm(name, () => {
|
||||
fetch(`/api/admin/equipment/${id}`, {
|
||||
|
||||
Reference in New Issue
Block a user