필터 로직 개선
최종 스크립트 코드 정리
This commit is contained in:
2026-02-22 13:08:50 +09:00
parent 769e0f4b96
commit c3e207e94f
8 changed files with 1013 additions and 1029 deletions

View File

@@ -1,18 +1,47 @@
/** 앱 전역 상태 */
/**
* state.js
* 앱의 전역 상태 관리 및 세션 스토리지 동기화
*/
import products from '../data/index.js';
import { STATUS_META } from './config.js';
// ==========================================================================
// 1. 원본 데이터 정의
// ==========================================================================
/** 외부 파일에서 로드한 전체 상품 데이터 */
export const productsData = products;
// ==========================================================================
// 2. 앱 전역 상태 (Global State)
// ==========================================================================
export const state = {
/** 현재 페이지 번호 */
currentPage: 1,
/** 현재 선택된 카테고리 필터 (기본값: 'All') */
activeCategories: new Set(['All']),
visibleProducts: [], // 초기값은 빈 배열로 두고 main.js나 filter.js에서 첫 계산
/** 필터링이 완료되어 실제로 화면에 보여질 상품 배열 */
visibleProducts: [],
/** 검색창에 입력된 키워드 */
searchKeyword: '',
/** 화면 보기 모드 ('grid' | 'table') */
viewMode: 'grid',
/** 장바구니/내보내기 등을 위해 선택된 상품 ID 세트 (세션 스토리지 복원) */
selectedIds: new Set(JSON.parse(sessionStorage.getItem('selectedProductIds') || '[]')),
activeTags: new Set([]), // 선택된 태그들을 저장 (비어있으면 전체 노출)
// visible이 true인 상태만 초기 활성 필터로 저장
/** 현재 활성화된 태그 필터 (교집합 필터링용) */
activeTags: new Set([]),
/** * 현재 활성화된 상품 상태 필터 (판매중, 예약중 등)
* config.js의 STATUS_META 설정을 기반으로 초기값 자동 생성
*/
activeStatuses: new Set(
Object.entries(STATUS_META)
.filter(([_, meta]) => meta.isSystemVisible && meta.isDefaultActive)
@@ -20,7 +49,15 @@ export const state = {
),
};
// 선택 내역이 변경될 때마다 세션 스토리지에 저장하는 헬퍼 함수
// ==========================================================================
// 3. 상태 영속성 관리 (Persistence)
// ==========================================================================
/**
* 선택된 상품 ID 목록을 세션 스토리지에 저장
* 체크박스 조작 등 상태가 변경될 때마다 호출하여 새로고침 시에도 데이터 유지
*/
export function saveSelection() {
sessionStorage.setItem('selectedProductIds', JSON.stringify(Array.from(state.selectedIds)));
}
const idsArray = Array.from(state.selectedIds);
sessionStorage.setItem('selectedProductIds', JSON.stringify(idsArray));
}