fix(web): explore 필터 interim 정직화 — 무효 정렬 숨김·칩 desync·CategoryFilter 재배선·드롭다운 크롬 (#843)#880
Merged
Merged
Conversation
…배선·드롭다운 크롬 (#843) BE 비종속 FE 정직화 (PRD #825 / D-EXPLORE #797). 서버 facet 소비는 graduated(#799/#851/#842). - 정렬(crit1): mode-aware 옵션 — browse는 solution_count 숨김(useInfinitePosts 미지원, 무성 no-op), search만 노출(service.rs가 실제 지원). search→browse 전환 시 coerceSortForMode로 표시값 정합. - 스타일 칩 desync(crit2): activeStyle을 query에서 파생(단일 소스). 자유 입력·서제스천 선택으로 query가 갈라지면 하이라이트 자동 해제 → stale-highlight 제거. - CategoryFilter(crit3): 아무도 안 읽던 useFilterStore write(죽은 컴포넌트)를 controlled canned-query 팔레트로 재배선 + 마운트. 파생 하이라이트, 빈 결과는 기존 recovery 상태로. - editorial 칩(crit4): 라벨=canned query 유지, 파생 하이라이트로 dead-end 구조적 제거. - 검색 드롭다운(crit5): ExploreClient wrapper 카드 + SearchSuggestions 자체 카드 이중크롬 제거 (단일 크롬). input을 combobox(aria-expanded/controls/autocomplete)로, listbox에 id/aria-label. canned query 값은 product/editorial 결정(라벨=title/artist/group 텍스트 검색, 결과 충만도는 라이브 인덱스 콘텐츠 의존). TDD: exploreFilters 순수 로직 15 케이스. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
3 tasks
thxforall
marked this pull request as ready for review
July 10, 2026 16:39
5 tasks
thxforall
added a commit
that referenced
this pull request
Jul 10, 2026
explore surface의 하드코딩 영문을 useTranslations("Explore")로 배선
(#838 홈 baseline 패턴 복제). messages/{ko,en}.json에 Explore 네임스페이스
신설(ko는 실제 한국어 초안), 키셋 1:1 파리티 + ICU 보간 정적 테스트를
i18n/__tests__에 추가. explore는 CSR(client mutator가 URL locale 추종)
이라 RSC serverApiGet locale 전달 스텝은 불필요(홈 전용 갭).
배선: ExploreClient(헤더/검색/에러·엠프티 상태/로딩), EntityTabBar(탭
라벨+aria), ComingSoonState(타이틀/설명/배지), SortDropdown(정렬 라벨),
ExploreCardCell(alt/스팟 aria, ICU plural). 엠프티 상태 동적 카피는 ICU
이스케이프 함정을 피해 곡선따옴표(‘{query}’) 사용 + 보간 테스트로 가드.
스코프 결정:
- STYLE_TAXONOMY 스타일칩/POPULAR_SEARCH_TAGS는 미번역 — 라벨이 검색
쿼리로 그대로 주입(setQuery)되는 검색 토큰/고유명사라 번역 시 백엔드
검색 동작이 바뀜.
- SearchSuggestions(전역 검색 드롭다운)는 이번 스코프 제외 — 비지역화
루트 레이아웃 Header에도 마운트되어 NextIntlClientProvider 밖이라
useTranslations 배선 시 전역 크래시. 셸 프로바이더 커버리지 후속 필요.
#880(#843 explore 필터 interim)과 ExploreClient.tsx·SortDropdown.tsx
공유 — 문자열만 t() 교체, 필터 로직/SORT_OPTIONS 상수 shape 미변경
(나중 머지 rebase 최소화).
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #843
요약
Explore 필터 interim 정직화 (FE-only, BE 비종속). PRD #825 / D-EXPLORE #797.
mode-aware sort(무효 정렬 숨김) · 스타일 칩 desync 제거(query 파생) · CategoryFilter 재배선 · editorial 칩 dead-end 제거 · 검색 드롭다운 이중크롬 제거 + a11y.
이 브랜치는 이전에 구현·2축 리뷰까지 끝났으나 base가 stale해져 재통합했다. 아래는 재머지(dev 최신화) 내역이며, #843 코드 델타 자체는 원 SHIP 커밋(
40de9c8f)과 byte-identical이다.Stale base 재머지 (dev #863 / #857 / #827 / #766 / #766 위)
git merge origin/dev(942aabf3.04b8d06e)가 익스플로어 필터 interim (FE-only 정직화) #843 커밋의 부모였고, dev는 그 이후 40커밋 동안 #843의 6개 파일을 전혀 건드리지 않음(양측 diff 대조로 실측 확인). 즉 #843은 이미 fix(web): explore SSR seed를 recent 정렬에만 게이팅 (#857 후속) #863/perf(web): explore browse 첫 페이지 SSR seed로 첫 페인트 당김 (#856) #857/fix(web): explore browse 카드에 이미지 치수 배선 + 데드 상태 정리 (#814) #827/#766을 포함한 dev 위에서 작성돼 있었고, 재머지는 그 위에 dev의 나머지 40커밋(파일 삭제·image-loader 등, 익스플로어 필터 interim (FE-only 정직화) #843 파일과 무관)을 얹은 것.useExploreData(dev가 17줄 변경한 fix(web): explore SSR seed를 recent 정렬에만 게이팅 (#857 후속) #863/perf(web): explore browse 첫 페이지 SSR seed로 첫 페인트 당김 (#856) #857 seed-sort 훅) ↔ 익스플로어 필터 interim (FE-only 정직화) #843 소비 경계를tsc0에러 +explore-seed-sort.test.tsgreen으로 확인.#857과 직교 (seed 게이팅 미변경)
useExploreData.ts:browseSort = activeSort === "popular" ? "popular" : "recent",initialItems는browseSort === "recent"일 때만 seed)은 dev 것 그대로 유지. #843은 훅을 건드리지 않음.coerceSortForMode(activeSort, mode)는 표시 레이어 전용(<select>가 mode가 못 지키는 sort를 노출하지 않게 coerce). 훅의 fetch/seed는 rawactiveSort를 읽음 → 두 레이어 직교, 상호 정합.#844와 공유 파일 (나중 머지 시 rebase 필요)
SearchSuggestions.tsx를 별도 병렬 PR 검색 엔티티 히트 UX: alias→canonical 브리지 (interim) #844와 공유. 본 PR은 dev feat(#765): feat(web): explore 검색 서제스천에 엔티티 히트 통합 (/search/entities 소비) #766 엔티티 히트(useEntitySearch/ENTITY_KIND_META/onSelect(hit.name)) 위에 익스플로어 필터 interim (FE-only 정직화) #843 델타(listboxid/aria-label)만 얹음. #844가 먼저/나중 머지되면 나머지 PR은 이 파일에서 rebase 필요.검증 (실측)
bun run generate:api(orval v8.5.3, offlineopenapi.json소비) → OKrm -rf .next && bun run tsc --noEmit→ 0 errorseslint→ 0 (dev baseline 전체 lint는 사전에러 있어 미실행)vitest:exploreFilters.test.ts+explore-seed-sort.test.ts→ 17 passed ·messages-parity.test.ts(i18n 카탈로그 정합) → pass변경 파일 (6)
explore/ExploreClient.tsx— mode-aware sort +coerceSortForMode+ CategoryFilter 배선 + 이중크롬 제거 + combobox a11yexplore/exploreFilters.ts(신규) +__tests__/exploreFilters.test.ts(신규, 15케이스)explore/CategoryFilter.tsx— dead store-write → controlled canned-query 팔레트explore/SortDropdown.tsx—optionsprop 추가search/SearchSuggestions.tsx— listboxid/aria-label(feat(#765): feat(web): explore 검색 서제스천에 엔티티 히트 통합 (/search/entities 소비) #766 엔티티 히트 위에 델타만)🤖 Generated with Claude Code