Skip to content

Commit f0fc3f3

Browse files
committed
(All) Let use-case setups invoke recomposition #9
Also removes the previous standard behavior that a use-case is reset when it's done.
1 parent 3d15518 commit f0fc3f3

File tree

12 files changed

+29
-8
lines changed

12 files changed

+29
-8
lines changed

app/src/main/java/com/mk/sheets/compose/samples/BottomSheetSample.kt

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import androidx.compose.material3.ExperimentalMaterial3Api
2525
import androidx.compose.material3.MaterialTheme
2626
import androidx.compose.material3.Surface
2727
import androidx.compose.runtime.Composable
28+
import androidx.compose.runtime.LaunchedEffect
2829
import androidx.compose.runtime.rememberCoroutineScope
2930
import com.maxkeppeker.sheets.core.models.base.rememberSheetState
3031
import com.maxkeppeler.sheets.calendar.CalendarView
@@ -40,7 +41,19 @@ fun BottomSheetSample(
4041
) {
4142
val coroutine = rememberCoroutineScope()
4243
val hideBottomSheet = { coroutine.launch { state.animateTo(ModalBottomSheetValue.Hidden) } }
43-
val dialogSheetState = rememberSheetState(visible = true, onCloseRequest = { hideBottomSheet() })
44+
val dialogSheetState =
45+
rememberSheetState(visible = true, onCloseRequest = { hideBottomSheet(); })
46+
47+
LaunchedEffect(state.currentValue) {
48+
when (state.currentValue) {
49+
ModalBottomSheetValue.Hidden,
50+
ModalBottomSheetValue.Expanded -> {
51+
dialogSheetState.invokeReset() // Manually reset internal state if required
52+
}
53+
ModalBottomSheetValue.HalfExpanded -> Unit
54+
55+
}
56+
}
4457

4558
ModalBottomSheetLayout(
4659
content = screenContent,

calendar/src/main/java/com/maxkeppeler/sheets/calendar/CalendarState.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -279,6 +279,7 @@ internal fun rememberCalendarState(
279279
selection: CalendarSelection,
280280
config: CalendarConfig,
281281
): CalendarState = rememberSaveable(
282+
inputs = arrayOf(selection, config),
282283
saver = CalendarState.Saver(selection, config),
283284
init = { CalendarState(selection, config) }
284285
)

clock/src/main/java/com/maxkeppeler/sheets/clock/ClockState.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,7 @@ internal fun rememberClockState(
205205
selection: ClockSelection,
206206
config: ClockConfig,
207207
): ClockState = rememberSaveable(
208+
inputs = arrayOf(selection, config),
208209
saver = ClockState.Saver(context, selection, config),
209210
init = { ClockState(context, selection, config) }
210211
)

color/src/main/java/com/maxkeppeler/sheets/color/ColorState.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ internal fun rememberColorState(
117117
selection: ColorSelection,
118118
config: ColorConfig,
119119
): ColorState = rememberSaveable(
120+
inputs = arrayOf(selection, config),
120121
saver = ColorState.Saver(context, selection, config),
121122
init = { ColorState(context, selection, config) }
122123
)

core/src/main/java/com/maxkeppeker/sheets/core/models/base/BaseEffects.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ fun StateHandler(
2424
sheetState: SheetState,
2525
baseState: BaseTypeState,
2626
) {
27-
DisposableEffect(sheetState.visible, sheetState.reset) {
28-
if (!sheetState.visible || sheetState.reset) {
27+
DisposableEffect(sheetState.reset) {
28+
if (sheetState.reset) {
2929
baseState.reset()
3030
sheetState.clearReset()
3131
}

core/src/main/java/com/maxkeppeker/sheets/core/models/base/SheetState.kt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@ class SheetState(
5454
*/
5555
fun hide() {
5656
visible = false
57-
reset = true
5857
onDismissRequest?.invoke(this)
5958
onCloseRequest?.invoke(this)
6059
}
@@ -63,13 +62,15 @@ class SheetState(
6362
reset = false
6463
}
6564

66-
private fun invokeReset() {
65+
/**
66+
* Reset the current state data.
67+
*/
68+
fun invokeReset() {
6769
reset = true
6870
}
6971

7072
// Closed
7173
internal fun dismiss() {
72-
invokeReset()
7374
if (!embedded) visible = false
7475
onDismissRequest?.invoke(this)
7576
onCloseRequest?.invoke(this)
@@ -85,9 +86,7 @@ class SheetState(
8586
The parent container (Dialog, PopUp, BottomSheet)
8687
can be hidden with the use-case view.
8788
*/
88-
invokeReset()
8989
if (!embedded) visible = false
90-
9190
onFinishedRequest?.invoke(this)
9291
onCloseRequest?.invoke(this)
9392
}

date_time/src/main/java/com/maxkeppeler/sheets/date_time/DateTimeState.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ internal fun rememberDateTimeState(
116116
selection: DateTimeSelection,
117117
config: DateTimeConfig,
118118
): DateTimeState = rememberSaveable(
119+
inputs = arrayOf(selection, config),
119120
saver = DateTimeState.Saver(selection, config),
120121
init = { DateTimeState(selection, config) }
121122
)

duration/src/main/java/com/maxkeppeler/sheets/duration/DurationState.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,7 @@ internal fun rememberDurationState(
156156
selection: DurationSelection,
157157
config: DurationConfig,
158158
): DurationState = rememberSaveable(
159+
inputs = arrayOf(selection, config),
159160
saver = DurationState.Saver(selection, config),
160161
init = { DurationState(selection, config) }
161162
)

emoji/src/main/java/com/maxkeppeler/sheets/emoji/EmojiState.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@ internal fun rememberEmojiState(
122122
selection: EmojiSelection,
123123
config: EmojiConfig
124124
): EmojiState = rememberSaveable(
125+
inputs = arrayOf(selection, config),
125126
saver = EmojiState.Saver(selection, config),
126127
init = { EmojiState(selection, config) }
127128
)

input/src/main/java/com/maxkeppeler/sheets/input/InputState.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ internal class InputState(
109109
internal fun rememberInputState(
110110
selection: InputSelection,
111111
): InputState = rememberSaveable(
112+
inputs = arrayOf(selection),
112113
saver = InputState.Saver(selection),
113114
init = { InputState(selection) }
114115
)

0 commit comments

Comments
 (0)