/** * 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: [], /** 검색창에 입력된 키워드 */ searchKeyword: '', /** 화면 보기 모드 ('grid' | 'table') */ viewMode: 'grid', /** 태그 필터리 모드 ('AND' | 'OR') */ tagMode: 'AND', /** 장바구니/내보내기 등을 위해 선택된 상품 ID 세트 (세션 스토리지 복원) */ selectedIds: new Set(JSON.parse(sessionStorage.getItem('selectedProductIds') || '[]')), /** 현재 활성화된 태그 필터 (교집합 필터링용) */ activeTags: new Set([]), /** * 현재 활성화된 상품 상태 필터 (판매중, 예약중 등) * config.js의 STATUS_META 설정을 기반으로 초기값 자동 생성 */ activeStatuses: new Set( Object.entries(STATUS_META) .filter(([_, meta]) => meta.isSystemVisible && meta.isDefaultActive) .map(([status]) => status), ), }; // ========================================================================== // 3. 상태 영속성 관리 (Persistence) // ========================================================================== /** * 선택된 상품 ID 목록을 세션 스토리지에 저장 * 체크박스 조작 등 상태가 변경될 때마다 호출하여 새로고침 시에도 데이터 유지 */ export function saveSelection() { const idsArray = Array.from(state.selectedIds); sessionStorage.setItem('selectedProductIds', JSON.stringify(idsArray)); }