Skip to content

Commit 30a7d7d

Browse files
authored
feat: 누락된 인자 추가 및 crash 수정 (#388)
* feat: QuackLazyVerticalGridTag 재구현 * feat: 플레이그라운드 최신화 * feat: QuackBasic2TextField 에 누락된 패딩 인자들 추가 * chore: api dump * chore: bump ui-components * feat: QuackSingeLazyRowTag 의 title 배치 문제 해결 * chore: bump playground * refactor: QuackLazyVerticalGridTag 에서 사용하지 않는 인자들 제거 * chore: api dump
1 parent 6388451 commit 30a7d7d

File tree

7 files changed

+172
-155
lines changed

7 files changed

+172
-155
lines changed

playground/src/main/kotlin/team/duckie/quackquack/playground/realworld/TagPlayground.kt

+48-2
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,24 @@
77

88
package team.duckie.quackquack.playground.realworld
99

10+
import androidx.compose.foundation.layout.PaddingValues
1011
import androidx.compose.runtime.Composable
1112
import androidx.compose.runtime.getValue
1213
import androidx.compose.runtime.mutableStateOf
1314
import androidx.compose.runtime.remember
1415
import androidx.compose.runtime.setValue
16+
import androidx.compose.ui.unit.dp
17+
import kotlin.random.Random
1518
import kotlinx.collections.immutable.ImmutableList
1619
import kotlinx.collections.immutable.persistentListOf
1720
import team.duckie.quackquack.playground.base.PlaygroundActivity
1821
import team.duckie.quackquack.playground.util.rememberToast
1922
import team.duckie.quackquack.ui.component.QuackCircleTag
2023
import team.duckie.quackquack.ui.component.QuackGrayscaleTag
24+
import team.duckie.quackquack.ui.component.QuackLazyVerticalGridTag
2125
import team.duckie.quackquack.ui.component.QuackRoundTag
26+
import team.duckie.quackquack.ui.component.QuackSingeLazyRowTag
27+
import team.duckie.quackquack.ui.component.QuackTagType
2228
import team.duckie.quackquack.ui.icon.QuackIcon
2329

2430
class TagPlayground : PlaygroundActivity(
@@ -28,6 +34,8 @@ class TagPlayground : PlaygroundActivity(
2834
::QuackGrayscaleTagDemo.name to { QuackGrayscaleTagDemo() },
2935
::QuackCircleTagDemo.name to { QuackCircleTagDemo() },
3036
::QuackRoundTagDemo.name to { QuackRoundTagDemo() },
37+
::QuackLazyVerticalGridTagDemo.name to { QuackLazyVerticalGridTagDemo() },
38+
::QuackSingeLazyRowTagDemo.name to { QuackSingeLazyRowTagDemo() },
3139
)
3240
}
3341

@@ -65,5 +73,43 @@ fun QuackRoundTagDemo() {
6573
)
6674
}
6775

68-
// TODO: QuackLazyVerticalGridTag 플레이그라운드
69-
// QuackLazyVerticalGridTag 가 정말 꽥꽥에서 제공이 필요할까?
76+
private val LazyTagContentHorizontalPadding = 20.dp
77+
private const val LazyTagItemChunkedSize = 5
78+
private val LazyTagDemoRange = 10..100
79+
80+
@Composable
81+
fun QuackLazyVerticalGridTagDemo() {
82+
val toast = rememberToast()
83+
84+
QuackLazyVerticalGridTag(
85+
contentPadding = PaddingValues(
86+
horizontal = LazyTagContentHorizontalPadding,
87+
),
88+
title = "Title",
89+
items = LazyTagDemoRange.map(Int::toString),
90+
itemSelections = LazyTagDemoRange.map { Random.nextBoolean() },
91+
itemChunkedSize = LazyTagItemChunkedSize,
92+
tagType = QuackTagType.Round,
93+
onClick = { index ->
94+
toast("Clicked $index index.")
95+
},
96+
)
97+
}
98+
99+
@Composable
100+
fun QuackSingeLazyRowTagDemo() {
101+
val toast = rememberToast()
102+
103+
QuackSingeLazyRowTag(
104+
contentPadding = PaddingValues(
105+
horizontal = LazyTagContentHorizontalPadding,
106+
),
107+
title = "Title",
108+
items = LazyTagDemoRange.map(Int::toString),
109+
itemSelections = LazyTagDemoRange.map { Random.nextBoolean() },
110+
tagType = QuackTagType.Round,
111+
onClick = { index ->
112+
toast("Clicked $index index.")
113+
},
114+
)
115+
}

playground/src/main/kotlin/team/duckie/quackquack/playground/realworld/TextFieldPlayground.kt

+6-1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ package team.duckie.quackquack.playground.realworld
1010
import androidx.compose.runtime.Composable
1111
import androidx.compose.runtime.mutableStateOf
1212
import androidx.compose.runtime.remember
13+
import androidx.compose.ui.unit.dp
1314
import kotlinx.collections.immutable.ImmutableList
1415
import kotlinx.collections.immutable.persistentListOf
1516
import team.duckie.quackquack.playground.base.PlaygroundActivity
@@ -58,6 +59,8 @@ fun QuackPriceTextFieldDemo() {
5859
)
5960
}
6061

62+
private val QuackBasic2TextFieldDecorationItemsHorizontalPadding = 5.dp
63+
6164
@Composable
6265
fun QuackBasic2TextFieldDemo() {
6366
val toast = rememberToast()
@@ -66,9 +69,11 @@ fun QuackBasic2TextFieldDemo() {
6669
QuackBasic2TextField(
6770
text = text,
6871
onTextChanged = setText,
69-
placeholderText = "Basic2TextFieldPlaceholder",
72+
placeholderText = "decoration items horizontal padding: 5.dp",
73+
leadingStartPadding = QuackBasic2TextFieldDecorationItemsHorizontalPadding,
7074
leadingIcon = QuackIcon.Heart,
7175
leadingIconOnClick = { toast("Heart clicked") },
76+
trailingEndPadding = QuackBasic2TextFieldDecorationItemsHorizontalPadding,
7277
trailingIcon = QuackIcon.FilledHeart,
7378
trailingIconOnClick = { toast("FilledHeart clicked") },
7479
)

ui-components/api/ui-components.api

+2-2
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ public final class team/duckie/quackquack/ui/component/TabKt {
212212
public final class team/duckie/quackquack/ui/component/TagKt {
213213
public static final fun QuackCircleTag-vwKyDFA (Landroidx/compose/ui/Modifier;Ljava/lang/String;Lteam/duckie/quackquack/ui/icon/QuackIcon;ZLkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)V
214214
public static final fun QuackGrayscaleTag (Landroidx/compose/ui/Modifier;Ljava/lang/String;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)V
215-
public static final fun QuackLazyVerticalGridTag-hW5Ac_0 (Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/layout/PaddingValues;Ljava/lang/String;Ljava/util/List;Ljava/util/List;IFFLteam/duckie/quackquack/ui/component/QuackTagType;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;III)V
215+
public static final fun QuackLazyVerticalGridTag-Y92LkZI (Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/layout/PaddingValues;Ljava/lang/String;Ljava/util/List;Ljava/util/List;IFFLteam/duckie/quackquack/ui/component/QuackTagType;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V
216216
public static final fun QuackRoundTag (Landroidx/compose/ui/Modifier;Ljava/lang/String;ZLkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)V
217217
public static final fun QuackSingeLazyRowTag-zadm560 (Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/layout/PaddingValues;Ljava/lang/String;Ljava/util/List;Ljava/util/List;FLteam/duckie/quackquack/ui/component/QuackTagType;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V
218218
}
@@ -224,7 +224,7 @@ public final class team/duckie/quackquack/ui/component/TextAreaKt {
224224
}
225225

226226
public final class team/duckie/quackquack/ui/component/TextFieldKt {
227-
public static final fun QuackBasic2TextField-M_XELVw (Landroidx/compose/ui/Modifier;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Ljava/lang/String;Lteam/duckie/quackquack/ui/icon/QuackIcon;Lkotlin/jvm/functions/Function0;Lteam/duckie/quackquack/ui/icon/QuackIcon;Lkotlin/jvm/functions/Function0;Landroidx/compose/foundation/text/KeyboardOptions;Landroidx/compose/foundation/text/KeyboardActions;Landroidx/compose/runtime/Composer;II)V
227+
public static final fun QuackBasic2TextField-92-ne5Y (Landroidx/compose/ui/Modifier;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Ljava/lang/String;FLteam/duckie/quackquack/ui/icon/QuackIcon;Lkotlin/jvm/functions/Function0;FLteam/duckie/quackquack/ui/icon/QuackIcon;Lkotlin/jvm/functions/Function0;Landroidx/compose/foundation/text/KeyboardOptions;Landroidx/compose/foundation/text/KeyboardActions;Landroidx/compose/runtime/Composer;III)V
228228
public static final fun QuackBasicTextField-VRGdc9Y (Landroidx/compose/ui/Modifier;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Ljava/lang/String;Lteam/duckie/quackquack/ui/icon/QuackIcon;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Landroidx/compose/foundation/text/KeyboardOptions;Landroidx/compose/foundation/text/KeyboardActions;Landroidx/compose/runtime/Composer;II)V
229229
public static final fun QuackErrorableTextField-ICnUfa0 (Landroidx/compose/ui/Modifier;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Ljava/lang/String;IZLjava/lang/String;ZLkotlin/jvm/functions/Function0;ILandroidx/compose/foundation/text/KeyboardActions;Landroidx/compose/runtime/Composer;III)V
230230
public static final fun QuackPriceTextField-VdmFRJE (Landroidx/compose/ui/Modifier;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Ljava/lang/String;ILandroidx/compose/foundation/text/KeyboardActions;Landroidx/compose/runtime/Composer;II)V

ui-components/src/main/kotlin/team/duckie/quackquack/ui/component/TextField.kt

+39-24
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,10 @@ import androidx.compose.foundation.layout.Box
1818
import androidx.compose.foundation.layout.Column
1919
import androidx.compose.foundation.layout.PaddingValues
2020
import androidx.compose.foundation.layout.Row
21+
import androidx.compose.foundation.layout.Spacer
2122
import androidx.compose.foundation.layout.fillMaxWidth
2223
import androidx.compose.foundation.layout.padding
24+
import androidx.compose.foundation.layout.width
2325
import androidx.compose.foundation.shape.RoundedCornerShape
2426
import androidx.compose.foundation.text.BasicTextField
2527
import androidx.compose.foundation.text.KeyboardActions
@@ -38,6 +40,7 @@ import androidx.compose.ui.layout.layoutId
3840
import androidx.compose.ui.text.input.ImeAction
3941
import androidx.compose.ui.text.input.KeyboardType
4042
import androidx.compose.ui.text.style.TextOverflow
43+
import androidx.compose.ui.unit.Dp
4144
import androidx.compose.ui.unit.dp
4245
import androidx.compose.ui.util.fastFirstOrNull
4346
import androidx.compose.ui.zIndex
@@ -352,6 +355,7 @@ private object QuackTextFieldDefaults {
352355
/**
353356
* leading content 로 표시될 아이콘 컴포저블을 나타냅니다.
354357
*
358+
* @param startPadding start 에 추가할 패딩
355359
* @param icon 표시할 아이콘
356360
* @param onClick leading content 가 클릭됐을 때 호출될 콜백
357361
*
@@ -361,28 +365,33 @@ private object QuackTextFieldDefaults {
361365
@SuppressLint("ComposableNaming")
362366
@Composable
363367
fun LeadingIcon(
368+
startPadding: Dp,
364369
icon: QuackIcon?,
365370
onClick: (() -> Unit)?,
366371
): (@Composable () -> Unit)? {
367372
return if (icon == null) {
368373
null
369374
} else {
370375
{
371-
QuackImage(
372-
padding = LeadingIconPadding,
373-
src = icon,
374-
size = LeadingIconSize,
375-
tint = LeadingIconTint,
376-
rippleEnabled = false,
377-
onClick = onClick,
378-
)
376+
Row {
377+
Spacer(modifier = Modifier.width(startPadding))
378+
QuackImage(
379+
padding = LeadingIconPadding,
380+
src = icon,
381+
size = LeadingIconSize,
382+
tint = LeadingIconTint,
383+
rippleEnabled = false,
384+
onClick = onClick,
385+
)
386+
}
379387
}
380388
}
381389
}
382390

383391
/**
384392
* trailing content 로 표시될 아이콘 컴포저블을 나타냅니다.
385393
*
394+
* @param endPadding end 에 추가할 패딩
386395
* @param icon 표시할 아이콘
387396
* @param isEnabled trailing content 가 활성화 되어 있는지 여부
388397
* @param onClick trailing content 가 클릭되었을 때 호출될 콜백
@@ -393,6 +402,7 @@ private object QuackTextFieldDefaults {
393402
@SuppressLint("ComposableNaming")
394403
@Composable
395404
fun TrailingIcon(
405+
endPadding: Dp,
396406
icon: QuackIcon?,
397407
isEnabled: Boolean?,
398408
onClick: (() -> Unit)?,
@@ -401,16 +411,19 @@ private object QuackTextFieldDefaults {
401411
null
402412
} else {
403413
{
404-
QuackImage(
405-
padding = TrailingIconPadding,
406-
src = icon,
407-
size = TrailingIconSize,
408-
tint = trailinIconTintFor(
409-
isEnabled = isEnabled,
410-
),
411-
rippleEnabled = false,
412-
onClick = onClick,
413-
)
414+
Row {
415+
QuackImage(
416+
padding = TrailingIconPadding,
417+
src = icon,
418+
size = TrailingIconSize,
419+
tint = trailinIconTintFor(
420+
isEnabled = isEnabled,
421+
),
422+
rippleEnabled = false,
423+
onClick = onClick,
424+
)
425+
Spacer(modifier = Modifier.width(endPadding))
426+
}
414427
}
415428
}
416429
}
@@ -1033,8 +1046,10 @@ public fun QuackPriceTextField(
10331046
* @param text 표시할 텍스트
10341047
* @param onTextChanged 새로운 텍스트가 입력됐을 때 호출될 람다
10351048
* @param placeholderText 텍스트가 입력되지 않았을 때 표시할 텍스트
1049+
* @param leadingStartPadding leading content 의 start 에 추가할 패딩
10361050
* @param leadingIcon leading content 로 표시할 아이콘
10371051
* @param leadingIconOnClick leading icon 을 클릭했을 때 호출될 람다
1052+
* @param trailingEndPadding trailing content 의 end 에 추가할 패딩
10381053
* @param trailingIcon trailing content 로 표시할 아이콘
10391054
* @param trailingIconOnClick trailing content 가 클릭됐을 때 호출될 람다
10401055
* @param keyboardOptions 키보드 옵션
@@ -1047,17 +1062,15 @@ public fun QuackBasic2TextField(
10471062
text: String,
10481063
onTextChanged: (text: String) -> Unit,
10491064
placeholderText: String? = null,
1065+
leadingStartPadding: Dp = 0.dp,
10501066
leadingIcon: QuackIcon? = null,
10511067
leadingIconOnClick: (() -> Unit)? = null,
1068+
trailingEndPadding: Dp = 0.dp,
10521069
trailingIcon: QuackIcon? = null,
10531070
trailingIconOnClick: (() -> Unit)? = null,
1054-
keyboardOptions: KeyboardOptions = KeyboardOptions(
1055-
imeAction = ImeAction.Done,
1056-
),
1071+
keyboardOptions: KeyboardOptions = KeyboardOptions(imeAction = ImeAction.Done),
10571072
keyboardActions: KeyboardActions = KeyboardActions(),
1058-
): Unit = with(
1059-
receiver = QuackTextFieldDefaults.Basic2,
1060-
) {
1073+
): Unit = with(QuackTextFieldDefaults.Basic2) {
10611074
val quackTextFieldColors = LocalQuackTextFieldColors.current
10621075

10631076
// 리컴포지션이 되는 메인 조건은 Text 가 바뀌었을 때인데 그러면
@@ -1116,10 +1129,12 @@ public fun QuackBasic2TextField(
11161129
placeholderText = placeholderText,
11171130
),
11181131
leadingContent = LeadingIcon(
1132+
startPadding = leadingStartPadding,
11191133
icon = leadingIcon,
11201134
onClick = leadingIconOnClick,
11211135
),
11221136
trailingContent = TrailingIcon(
1137+
endPadding = trailingEndPadding,
11231138
icon = trailingIcon,
11241139
isEnabled = !isPlaceholder,
11251140
onClick = trailingIconOnClick,

0 commit comments

Comments
 (0)