(() => { const { EventManager, pageHelper } = ShopbySkin; const searchParams = new URLSearchParams(location.search); const params = Object.fromEntries(searchParams.entries()); const boardReviewsListHelper = pageHelper.boardReviewsListHelper(); boardReviewsListHelper.initialize(params); const moduleActionHandler = { REGISTER: ({ target }) => { const usesAttachment = target.closest('[shopby-uses-attachment]')?.getAttribute('shopby-uses-attachment'); EventManager.fire('OPEN_LAYER_MODAL', { name: 'product-review-form', title: '상품후기', modalAddClass: 'product-review-form-modal', isFull: false, data: { isSelectProduct: true, usesAttachment, }, onClose: ({ reason }) => { if (reason === 'DID_SUBMIT') { EventManager.fire('MODAL_ALERT_OPEN', { noticeType: 'success', message: '상품후기가 등록되었습니다.', onClose: () => { location.reload(); }, }); } }, }); }, }; //리뷰 select 타입변경 이벤트 처리 const CHANGE_REVIEW_ACTION_HANDLER_MAP = { SELECT_SORT_TYPE: (target) => { const fullValue = target.value; const searchParams = new URLSearchParams(location.search); const ordering = fullValue.includes('ASC') ? 'ASC' : 'DESC'; searchParams.set('ordering', ordering); searchParams.set('sortCriterion', fullValue); searchParams.set('pageNumber', '1'); location.href = `?${searchParams.toString()}#PRODUCT_REVIEW`; }, }; document.querySelector('board-review-search-field')?.addEventListener('click', ({ target }) => { const action = target.closest('[shopby-action]')?.getAttribute('shopby-action'); moduleActionHandler[action]?.({ target }); }); const reviewSearchFieldEl = document.querySelector('board-review-search-field'); reviewSearchFieldEl?.addEventListener('change', ({ target }) => { CHANGE_REVIEW_ACTION_HANDLER_MAP[target.closest('[shopby-action]')?.getAttribute('shopby-action')]?.(target); }); const updateTotalCount = (countFromEvent) => { const listState = document.querySelector('board-reviews-list')?.store.getState(); const totalCount = countFromEvent ?? listState?.totalCount ?? 0; const updateData = { ...reviewSearchFieldEl?.store.getState(), totalCount, }; reviewSearchFieldEl?.store.setState(updateData); reviewSearchFieldEl?.updateSlot(updateData, 'titleTotalCount'); }; EventManager.on('QUERY_REVIEWS_BOARDS', (commonData) => { if (document.querySelector('board-reviews-list')) { updateTotalCount(commonData?.totalCount); } }); })();