Files
shoptime/com.twin.app.shoptime
optrader 62d32a6f6f [250904] feat: UserReviews 전체 표시 기능 및 TScroller 동기화 구현
🕐 커밋 시간: 2025. 09. 04. 16:38:16

💬 사용자 메시지:
  UserReviews showAllReviews 토글 기능 완전 구현 (Target 동기화)

주요 변경사항:
• Redux 상태 관리 완전 동기화 (Source와 동일)
  - actionTypes.js: TOGGLE_SHOW_ALL_REVIEWS 액션 타입 추가
  - productActions.js: toggleShowAllReviews() 액션 크리에이터 구현
  - productReducer.js: handleToggleShowAllReviews 리듀서 핸들러 추가

• ProductAllSection 컴포넌트 수정 (Source와 동일)
  - LayoutSample 버튼에 toggleShowAllReviews 디스패치 연결
  - handleLayoutSampleClick 핸들러로 Redux 액션 호출 구현
  - ProductAllSection.module.less에 LayoutSample 스타일 추가

• UserReviews 컴포넌트 핵심 개선 (Target 전용 수정)
  - 기존 복잡한 DOM 조작 로직 완전 제거
    * containerRef.current.querySelector 방식 삭제
    * 복잡한 스타일 조작 및 resize 이벤트 로직 제거
  - Source의 간단한 TScroller ref 기반 로직으로 교체
    * tScrollerRef.current.calculateMetrics() 호출
    * tScrollerRef.current.scrollTo() 호출
    * 100ms setTimeout으로 단순화
  - toggleShowAllReviews import 및 dispatch 연결 완성

• TScroller 동작 최적화
  - key prop 동적 변경으로 강제 재렌더링 트리거
  - showAllReviews 상태 변경 시 스크롤 영역 자동 재계산
  - 5개 → 100개 리뷰 전체 렌더링 지원

• 코드 안정성 개선
  - 복잡한 DOM 쿼리 로직 제거로 에러 가능성 감소
  - TScroller ref 직접 접근으로 안정적인 스크롤 업데이트
  - React 렌더링 사이클과 동기화된 업데이트 타이밍

Target 특화 문제 해결:
- Source와 완전 동일한 코드 베이스 구축
- 복잡한 DOM 조작 로직을 간단한 ref 기반으로 통합
- LayoutSample 클릭 → 100개 리뷰 표시 기능 완성

📊 변경 통계:
  • 총 파일: 8개
  • 추가: +192줄
  • 삭제: -26줄

📁 추가된 파일:
  + package-lock.json

📝 수정된 파일:
  ~ com.twin.app.shoptime/src/actions/actionTypes.js
  ~ com.twin.app.shoptime/src/actions/productActions.js
  ~ com.twin.app.shoptime/src/reducers/productReducer.js
  ~ com.twin.app.shoptime/src/views/DetailPanel/ProductAllSection/ProductAllSection.jsx
  ~ com.twin.app.shoptime/src/views/DetailPanel/ProductAllSection/ProductAllSection.module.less
  ~ com.twin.app.shoptime/src/views/DetailPanel/ProductContentSection/UserReviews/UserReviews.jsx
  ~ com.twin.app.shoptime/src/views/DetailPanel/ProductContentSection/UserReviews/UserReviews.module.less

🔧 주요 변경 내용:
  • 타입 시스템 안정성 강화
  • 핵심 비즈니스 로직 개선
  • 중간 규모 기능 개선
  • 모듈 구조 개선
2025-09-04 16:38:19 +09:00
..
2024-02-20 11:13:55 +09:00
2025-06-30 00:51:34 +00:00

Enact Client

  • npm install -g @enact/cli@6.0.4

enact 및 기타 라이브러리 버전 변경 불가

Node.js >= v14.0.0 (recommended: v16.13.0)

개발 및 테스트 환경

빌드 방법

# 개발 빌드
npm run build
# 또는
npm run pack

# 빌드 결과물 테스트를 위한 로컬 서버 실행
npx http-server ./dist

Chrome 테스트 환경

  • WebOS 3.0용 Chrome 38 버전 필수
  • Chrome 38 버전 다운로드 및 설치: WebOS TV 개발자 사이트
  • 모든 기능은 반드시 Chrome 38에서 테스트 필요

Chrome 38 브라우저 호환성 제한사항

JavaScript 제한사항

  1. async/await 문법 - 지원되지 않음 (Chrome 55부터 지원)

    • 대체방법: Promise 체이닝 방식 사용
    // Promise 방식으로 비동기 처리
    function getData() {
        return fetch('/api/data')
            .then(function(result) {
                return result;
            });
    }
    
  2. ESLint - 지원되지 않음 (Enact CLI 6.0.4 버전 제한)

    • 이유: ESLint 6 이후 버전과의 호환성 문제
    • WebOS 3.0 호환성을 위해 Enact 버전 업그레이드 불가
  3. React import 문 필수

    • 모든 컴포넌트 파일 상단에 React import 필요
    import React from "react";
    

CSS 제한사항

  1. CSS Grid Layout
  2. CSS Flexbox
  3. CSS Variables (Custom Properties)
  4. CSS gap 속성 - margin 혹은 padding 사용
  5. CSS calc() - 제한적 지원 (문자열로 사용 필요)
calc(@toplayerHeight + 22px); 
 /* 사용불가 */

 ~"calc(@{toplayerHeight} + 22px)";
  /* 문자열로 사용 가능 */
  1. CSS Transforms 3D
  2. CSS Animations/Transitions
  3. CSS Filter Effects
  4. CSS Masks
  5. CSS Custom Scroll Snap
  6. CSS Logical Properties

code convention

  1. vs-code extension: js/ts import/export sorter 설치

  2. vs-code setting.json


{

"prettier.tabWidth": 2,

"prettier.printWidth": 80,

"prettier.trailingComma": "es5",

"tsImportSorter.configuration.keepUnused": [".*"],

}

배포

npm install -g @enact/cli@6.0.4 npm install npm run build --> ./dist 폴더 배포

배포 시 주의 사항

  • develop 환경에서는 오토 스크롤 영역을 명확하게 보기 위해 background-color를 보여지게 했으나, 배포 시에는 production 상태로 바꿔서 빌드하셔야 합니다.
// AutoScrollArea.module.less

.autoScrollArea {
  position: absolute;
  z-index: 20;
  background-color: transparent; /* production */
  // background-color: #ff00001f; /* develop */
}

상태로 변경 후 배포 부탁드립니다.

TVirtualGridList 사용시 여백

OnSaleProductList.jsx 참고 --> 가로 100%일 경우 container에서 여백 제어하는 것이 아니라 각 사용하려는 컴포넌트에서 class로 "TVirtualGridList" 추가한 부분에서 좌측 여백 추가(여백은 padding-left로 조절)

// OnSaleProductList.module.less
.tVirtualGridList {
  padding-left: 60px; /* GUI 가이드에 맞도록 적절히 조절 */
}

TScroller 사용시 여백

SubCategory.jsx 참고(Home) --> 가로 100%일 경우 TScroller 자체에서 여백 제어하는 것이 아니라 손자 엘리먼트에 좌측 여백 추가(여백은 padding-left로 조절)

// SubCategory.module.less
.home {
  > div {
    > div {
      padding-left: 60px; /* GUI 가이드에 맞도록 적절히 조절 */
    }
  }
}

자막영상

ontv4u 검색 후 첫 영상

컴포넌트 사용 가이드라인

1. Grid 레이아웃 여백 설정

TVirtualGridList 사용시 여백

OnSaleProductList.jsx 참고 --> 가로 100%일 경우 container에서 여백 제어하는 것이 아니라 각 사용하려는 컴포넌트에서 class로 "TVirtualGridList" 추가한 부분에서 좌측 여백 추가(여백은 padding-left로 조절)

// OnSaleProductList.module.less
.tVirtualGridList {
  padding-left: 60px; /* GUI 가이드에 맞도록 적절히 조절 */
}

2. 스크롤 레이아웃 여백 설정

TScroller 사용시 여백

SubCategory.jsx 참고(Home) --> 가로 100%일 경우 TScroller 자체에서 여백 제어하는 것이 아니라 손자 엘리먼트에 좌측 여백 추가(여백은 padding-left로 조절)

// SubCategory.module.less
.home {
  > div {
    > div {
      padding-left: 60px; /* GUI 가이드에 맞도록 적절히 조절 */
    }
  }
}

3. 테스트용 자막 영상

자막영상 테스트

ontv4u 검색 후 첫 영상