Skip to content

PrezelList 구현#72

Open
HamBeomJoon wants to merge 3 commits intodevelopfrom
feat/#71-prezel-list
Open

PrezelList 구현#72
HamBeomJoon wants to merge 3 commits intodevelopfrom
feat/#71-prezel-list

Conversation

@HamBeomJoon
Copy link
Contributor

@HamBeomJoon HamBeomJoon commented Feb 27, 2026

📌 작업 내용

PrezelList 컴포넌트 구현

🧩 관련 이슈


📸 스크린샷

스크린샷 2026-02-28 01 19 01 스크린샷 2026-02-28 01 19 23

📢 논의하고 싶은 내용

  • trailingContents: ImmutableList<@composable () -> Unit> = persistentListOf(), 으로받았는데 그냥 Composable로 받으면될까요?
  • size: PrezelListSize = PrezelListSize.REGULAR, 기본값으로 Regular를 했는데, 기본값 없애고 필수 파라미터로 변경하는게 좋을까요?

Summary by CodeRabbit

릴리스 노트

  • 새로운 기능
    • 디자인 시스템에 새로운 수평 목록 컴포넌트 추가
    • 작음/일반 두 가지 사이즈 변형 지원
    • 선행 및 후행 콘텐츠 커스터마이징 가능
    • 중첩 레이아웃 옵션 포함

디자인 시스템의 리스트 컴포넌트에서 공통으로 사용할 `PrezelListSize` 열거형과 사이즈별 스타일 처리 로직을 추가했습니다.

*   `PrezelListSize`: `SMALL`, `REGULAR` 사이즈 정의
*   `PrezelListIcon`: `IconSource`를 기반으로 사이즈에 따른 아이콘 렌더링 구현
*   `prezelListVerticalPadding`: 사이즈별 수직 패딩 값 제공
*   `prezelListTextStyle`: 사이즈별 타이포그래피 스타일 제공
*   사이즈별 간격 조절 함수(`prezelListIconTextSpacing`, `prezelListTextTrailingSpacing`, `prezelListTrailingIconSpacing`) 추가
디자인 시스템 가이드에 맞춘 리스트 아이템 컴포넌트인 `PrezelList`를 추가했습니다.

*   `PrezelListSize` (SMALL, REGULAR)에 따른 텍스트 스타일 및 간격 대응
*   `leadingContent` 및 `trailingContents`를 통한 아이콘/컨텐츠 삽입 지원
*   `nested` 파라미터를 통한 계층 구조 인덴트 지원
*   `ImmutableList`를 활용한 다중 트레일링 컨텐츠 렌더링 및 노출 제어 로직 구현
*   테마별 미리보기(Preview) 코드 추가
`PrezelList` 컴포넌트의 패딩 로직을 개선하고, 가독성을 위해 프리뷰 관련 코드를 별도 파일로 분리하였습니다.

*   **PrezelList**: `enabled`, `onClick` 등 미사용 파라미터를 제거하고, `nested` 상태에 따른 레이아웃 처리를 `prezelListContentPadding`으로 통합했습니다.
*   **PrezelListStyle**: `prezelListVerticalPadding`을 `prezelListContentPadding`으로 변경하여 `nested` 여부에 따른 `PaddingValues`를 반환하도록 수정했습니다.
*   **PrezelListPreview**: 기존 `PrezelList.kt`에 있던 프리뷰 코드를 `PrezelListPreview.kt`로 분리하고, 사이즈별(SMALL, REGULAR) 및 케이스별(Nested, Leading, Trailing) 상세 프리뷰를 추가했습니다.
@HamBeomJoon HamBeomJoon self-assigned this Feb 27, 2026
@HamBeomJoon HamBeomJoon added the ✨ feat 새로운 기능 추가 또는 기존 기능 확장 label Feb 27, 2026
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Feb 27, 2026

Walkthrough

세 개의 새로운 파일을 추가하여 PrezelList 컴포넌트를 구현합니다. PrezelList.kt에서는 제목, 선택적 리딩 콘텐츠, 트레일링 콘텐츠를 포함하는 가로 방향 목록 행을 렌더링하는 컴포저블을 정의합니다. PrezelListStyle.kt에서는 SMALL과 REGULAR 두 가지 크기 변형을 지정하는 PrezelListSize 열거형과 아이콘, 패딩, 텍스트 스타일, 간격을 관리하는 내부 컴포저블들을 제공합니다. PrezelListPreview.kt에서는 다양한 구성(중첩, 리딩 표시, 트레일링 표시)을 보여주는 미리보기 컴포저블들을 추가합니다.

Possibly related PRs

  • PrezelButton 구현 #25: PrezelList 컴포넌트에서 직접 사용되는 IconSource 및 DrawableIcon 추상화를 도입합니다.
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed PR 제목 'PrezelList 구현'은 추가된 주요 변경사항인 PrezelList 컴포넌트 구현을 명확하게 요약하고 있습니다.
Description check ✅ Passed PR 설명은 리포지토리의 필수 템플릿 구조를 완전히 따르고 있으며, 작업 내용, 관련 이슈, 스크린샷, 논의사항을 모두 포함하고 있습니다.
Linked Issues check ✅ Passed PR의 코드 변경사항(PrezelListSize 열거형, PrezelList 컴포넌트, 스타일 유틸리티, 프리뷰)이 이슈 #71의 PrezelList 컴포넌트 구현 요구사항을 모두 충족합니다.
Out of Scope Changes check ✅ Passed 모든 코드 변경사항이 이슈 #71의 PrezelList 컴포넌트 구현 요구사항 범위 내에 있습니다.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (2)
Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/list/PrezelList.kt (1)

30-35: showFirstTrailingContent 네이밍과 실제 동작 의미를 맞춰주세요.

현재는 showFirstTrailingContent = false일 때만 첫 아이템 1개로 제한되고, true면 전체가 노출됩니다. 호출자 입장에서 의미를 반대로 해석하기 쉬운 API입니다. 동작을 뒤집거나(이름 유지), 파라미터명을 showAllTrailingContents/limitToFirstTrailingContent처럼 명확하게 바꾸는 쪽이 안전합니다.

예시: 의미를 드러내는 파라미터명으로 변경
-    showFirstTrailingContent: Boolean = true,
+    showAllTrailingContents: Boolean = true,
...
-    val visibleTrailingContents =
-        if (!showFirstTrailingContent) trailingContents.take(1) else trailingContents
+    val visibleTrailingContents =
+        if (showAllTrailingContents) trailingContents else trailingContents.take(1)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/list/PrezelList.kt`
around lines 30 - 35, The parameter showFirstTrailingContent is misnamed vs its
behavior; rename it to showAllTrailingContents (or an equivalent clear name) and
update the logic in visibleTrailingContents so that when showAllTrailingContents
is true you return trailingContents, otherwise limit to
trailingContents.take(1); also update the parameter default and any call sites
that use showFirstTrailingContent to the new name to keep the API meaning clear.
Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/list/PrezelListPreview.kt (1)

57-67: prezelListTrailingIcons@Composable은 제거해도 됩니다.

이 함수는 컴포지션 상태를 읽지 않고 정적 리스트를 만드는 역할이라 일반 함수로 두는 편이 더 단순합니다.

정리 예시
-@Composable
 private fun prezelListTrailingIcons(size: PrezelListSize): ImmutableList<@Composable () -> Unit> =
     List(2) {
         `@Composable` {
             PrezelListIcon(
                 icon = IconSource(resId = PrezelIcons.Blank),
                 size = size,
             )
         }
     }.toPersistentList()
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/list/PrezelListPreview.kt`
around lines 57 - 67, Remove the unnecessary `@Composable` annotation from the
prezelListTrailingIcons function signature so it becomes a regular function that
returns ImmutableList<@Composable () -> Unit>; keep the inner lambdas (the
`@Composable` { PrezelListIcon(...) }) as-is so callers still get composable
trailing icon lambdas. Update the declaration of prezelListTrailingIcons (and
any related imports if needed) to be a plain function using PrezelListSize and
returning the same List(...).toPersistentList() result.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In
`@Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/list/PrezelList.kt`:
- Around line 55-66: The Spacer with
Modifier.width(prezelListTextTrailingSpacing(size = size)) is always rendered
causing unwanted space even when showTrailingContent is false; move the Spacer
inside the same conditional as the trailing Row so both the trailing spacing and
the Row (which renders visibleTrailingContents) are only rendered when
showTrailingContent is true—i.e., wrap the Spacer and the Row together under the
showTrailingContent check (references: Spacer, prezelListTextTrailingSpacing,
showTrailingContent, Row, visibleTrailingContents).

---

Nitpick comments:
In
`@Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/list/PrezelList.kt`:
- Around line 30-35: The parameter showFirstTrailingContent is misnamed vs its
behavior; rename it to showAllTrailingContents (or an equivalent clear name) and
update the logic in visibleTrailingContents so that when showAllTrailingContents
is true you return trailingContents, otherwise limit to
trailingContents.take(1); also update the parameter default and any call sites
that use showFirstTrailingContent to the new name to keep the API meaning clear.

In
`@Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/list/PrezelListPreview.kt`:
- Around line 57-67: Remove the unnecessary `@Composable` annotation from the
prezelListTrailingIcons function signature so it becomes a regular function that
returns ImmutableList<@Composable () -> Unit>; keep the inner lambdas (the
`@Composable` { PrezelListIcon(...) }) as-is so callers still get composable
trailing icon lambdas. Update the declaration of prezelListTrailingIcons (and
any related imports if needed) to be a plain function using PrezelListSize and
returning the same List(...).toPersistentList() result.

ℹ️ Review info

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 5423a9e and ee3fe36.

📒 Files selected for processing (3)
  • Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/list/PrezelList.kt
  • Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/list/PrezelListPreview.kt
  • Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/list/PrezelListStyle.kt

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

✨ feat 새로운 기능 추가 또는 기존 기능 확장

Projects

None yet

Development

Successfully merging this pull request may close these issues.

PrezelList 구현

1 participant