MAKITTDocs

Product Facet Grid

docs/hcs-asset/product-facet-grid.md


id: 'product-facet-grid' status: completed

Product Facet Grid

Reference

  • URL: https://biodance.com/ (상품 목록 / PLP 영역)
  • 위치: 상단 정렬 바 아래 facet sidebar + product grid
  • 구조: 좌측 facet panel + 우측 상품 카드 그리드 + 선택된 필터 chip + sort dropdown + load more

React Component

  • Path: apps/makitt-standard-commerce/src/components/assets/product-facet-grid/
  • Status: implemented
  • 반응형: Desktop은 sidebar + grid, tablet/mobile은 facet이 상단 stack으로 이동
  • i18n: ko, en, ja
  • API:
    • shopApi.getProductFacets() — preset 기반 facet 섹션 조회
    • shopApi.searchProductCardsCursor() — 카드 결과 + cursor load more

HCS JSON Asset

  • Path: apps/builder/data/hcs-asset/product-facet-grid.json
  • Status: implemented
  • Resource 바인딩:
    • product.facets — facet panel / selected state / count
    • product.cardsSearch — cursor 기반 상품 카드 결과
  • 필터 전략:
    • URL query를 상태 저장소로 사용
    • multi-select facet은 CSV string (categories, tags, attributes) 토글
    • inStock, minPrice, maxPrice, sortBy도 query로 반영
  • UX:
    • checkbox 대신 selectable chip/button
    • price는 input blur 시 query 반영
    • fetchNext로 load more

Resource Registry

  • Package: @makitt/api
  • Keys:
    • product.facets
    • product.cardsSearch
  • Schema:
    • ProductFacetsResponseSchema
    • ProductCardCursorResponseSchema
  • Fetcher:
    • productApi.facets()
    • productApi.cardsSearch()

Prerequisites

makitt-server (shop-api)

고객 대면 API. shop storefront에서 호출.

APIMethodEndpointStatus
상품 facet 조회GET/shop/{shopId}/products/facetsavailable
상품 카드 cursor 검색GET/shop/{shopId}/products/cards/searchavailable
상품 상세GET/shop/{shopId}/products/{id}available
상품 slug 조회GET/shop/{shopId}/products/by-slug/{slug}available

makitt-server (admin-api)

셀러 어드민에서 discovery preset을 관리하기 위한 API.

APIMethodEndpointStatus
discovery preset 조회GET/api/v1/shops/{shopId}/product-discovery-settingsavailable
discovery preset 저장PUT/api/v1/shops/{shopId}/product-discovery-settingsavailable

makitt-server (도메인/모델링)

항목내용Status
Shop metadataproduct_discovery_configs preset 저장available
Product OpenSearchfacet count / price range / cursor search sourceavailable
Product discovery configsection / preset / allowed option valuesavailable

makitt-web (셀러 어드민 UI)

기능설명Status
상품 > 필터 > Discoverypreset 생성/편집/기본 preset 지정available
allowed option valuescategory / attribute value subset 지정available

@makitt/api (리소스 레지스트리)

항목설명Status
product.facets resourcefacet panel response + fetcheravailable
product.cardsSearch resourcecursor card response + fetcheravailable

makitt-shop (HCS 렌더링)

항목설명Status
select renderersort dropdown 표현available
input renderermin/max price 입력available
accordion rendererfacet section 묶음available
fetchNext actionload more cursoravailable
pagination actionURL query 기반 필터 반영available
checkbox renderer현재 미구현, 이번 asset은 button/chip으로 우회not required

HCS Conversion Notes

  • 이번 asset은 React reference 구현을 그대로 옮기기보다 HCS 제약에 맞게 재구성했다.
  • 핵심 상태는 local state가 아니라 URL query에 저장한다. 덕분에 facet resource와 cards resource가 같은 query를 바라보며 동시에 refetch된다.
  • multi-select는 toggle transform으로 CSV query string을 관리한다.
  • selected filters는 facet API의 option.selected를 그대로 사용해 chip으로 노출한다.
  • price input은 change마다 refetch하지 않고 blur 시점에 query를 갱신하도록 설계했다.