knock requests : rename KnockRequestsActionTarget to KnockRequestAction

This commit is contained in:
ganfra
2024-12-19 20:08:14 +01:00
parent 87ce71a883
commit 5e2fed1ecd
6 changed files with 69 additions and 69 deletions

View File

@@ -30,7 +30,7 @@ class KnockRequestsListPresenter @Inject constructor(
@Composable
override fun present(): KnockRequestsListState {
val asyncAction = remember { mutableStateOf<AsyncAction<Unit>>(AsyncAction.Uninitialized) }
var actionTarget by remember { mutableStateOf<KnockRequestsActionTarget>(KnockRequestsActionTarget.None) }
var currentAction by remember { mutableStateOf<KnockRequestsAction>(KnockRequestsAction.None) }
val permissions by knockRequestsService.permissionsFlow.collectAsState()
val knockRequests by knockRequestsService.knockRequestsFlow.collectAsState()
@@ -40,36 +40,36 @@ class KnockRequestsListPresenter @Inject constructor(
fun handleEvents(event: KnockRequestsListEvents) {
when (event) {
KnockRequestsListEvents.AcceptAll -> {
actionTarget = KnockRequestsActionTarget.AcceptAll
currentAction = KnockRequestsAction.AcceptAll
}
is KnockRequestsListEvents.Accept -> {
actionTarget = KnockRequestsActionTarget.Accept(event.knockRequest)
currentAction = KnockRequestsAction.Accept(event.knockRequest)
}
is KnockRequestsListEvents.Decline -> {
actionTarget = KnockRequestsActionTarget.Decline(event.knockRequest)
currentAction = KnockRequestsAction.Decline(event.knockRequest)
}
is KnockRequestsListEvents.DeclineAndBan -> {
actionTarget = KnockRequestsActionTarget.DeclineAndBan(event.knockRequest)
currentAction = KnockRequestsAction.DeclineAndBan(event.knockRequest)
}
KnockRequestsListEvents.ResetCurrentAction -> {
asyncAction.value = AsyncAction.Uninitialized
actionTarget = KnockRequestsActionTarget.None
currentAction = KnockRequestsAction.None
}
KnockRequestsListEvents.RetryCurrentAction -> {
coroutineScope.executeAction(actionTarget, asyncAction, isActionConfirmed = true)
coroutineScope.executeAction(currentAction, asyncAction, isActionConfirmed = true)
}
KnockRequestsListEvents.ConfirmCurrentAction -> {
coroutineScope.executeAction(actionTarget, asyncAction, isActionConfirmed = true)
coroutineScope.executeAction(currentAction, asyncAction, isActionConfirmed = true)
}
}
}
LaunchedEffect(actionTarget) {
executeAction(actionTarget, asyncAction, isActionConfirmed = false)
LaunchedEffect(currentAction) {
executeAction(currentAction, asyncAction, isActionConfirmed = false)
}
return KnockRequestsListState(
knockRequests = knockRequests,
actionTarget = actionTarget,
currentAction = currentAction,
permissions = permissions,
asyncAction = asyncAction.value,
eventSink = ::handleEvents
@@ -77,35 +77,35 @@ class KnockRequestsListPresenter @Inject constructor(
}
private fun CoroutineScope.executeAction(
actionTarget: KnockRequestsActionTarget,
currentAction: KnockRequestsAction,
asyncAction: MutableState<AsyncAction<Unit>>,
isActionConfirmed: Boolean,
) = launch {
when (actionTarget) {
is KnockRequestsActionTarget.Accept -> {
when (currentAction) {
is KnockRequestsAction.Accept -> {
runUpdatingState(asyncAction) {
knockRequestsService.acceptKnockRequest(actionTarget.knockRequest)
knockRequestsService.acceptKnockRequest(currentAction.knockRequest)
}
}
is KnockRequestsActionTarget.Decline -> {
is KnockRequestsAction.Decline -> {
if (isActionConfirmed) {
runUpdatingState(asyncAction) {
knockRequestsService.declineKnockRequest(actionTarget.knockRequest)
knockRequestsService.declineKnockRequest(currentAction.knockRequest)
}
} else {
asyncAction.value = AsyncAction.ConfirmingNoParams
}
}
is KnockRequestsActionTarget.DeclineAndBan -> {
is KnockRequestsAction.DeclineAndBan -> {
if (isActionConfirmed) {
runUpdatingState(asyncAction) {
knockRequestsService.declineAndBanKnockRequest(actionTarget.knockRequest)
knockRequestsService.declineAndBanKnockRequest(currentAction.knockRequest)
}
} else {
asyncAction.value = AsyncAction.ConfirmingNoParams
}
}
is KnockRequestsActionTarget.AcceptAll -> {
is KnockRequestsAction.AcceptAll -> {
if (isActionConfirmed) {
runUpdatingState(asyncAction) {
knockRequestsService.acceptAllKnockRequests()
@@ -114,7 +114,7 @@ class KnockRequestsListPresenter @Inject constructor(
asyncAction.value = AsyncAction.ConfirmingNoParams
}
}
KnockRequestsActionTarget.None -> Unit
KnockRequestsAction.None -> Unit
}
}
}

View File

@@ -16,7 +16,7 @@ import kotlinx.collections.immutable.ImmutableList
data class KnockRequestsListState(
val knockRequests: AsyncData<ImmutableList<KnockRequestPresentable>>,
val actionTarget: KnockRequestsActionTarget,
val currentAction: KnockRequestsAction,
val asyncAction: AsyncAction<Unit>,
val permissions: KnockRequestPermissions,
val eventSink: (KnockRequestsListEvents) -> Unit,
@@ -25,10 +25,10 @@ data class KnockRequestsListState(
}
@Immutable
sealed interface KnockRequestsActionTarget {
data object None : KnockRequestsActionTarget
data class Accept(val knockRequest: KnockRequestPresentable) : KnockRequestsActionTarget
data class Decline(val knockRequest: KnockRequestPresentable) : KnockRequestsActionTarget
data class DeclineAndBan(val knockRequest: KnockRequestPresentable) : KnockRequestsActionTarget
data object AcceptAll : KnockRequestsActionTarget
sealed interface KnockRequestsAction {
data object None : KnockRequestsAction
data class Accept(val knockRequest: KnockRequestPresentable) : KnockRequestsAction
data class Decline(val knockRequest: KnockRequestPresentable) : KnockRequestsAction
data class DeclineAndBan(val knockRequest: KnockRequestPresentable) : KnockRequestsAction
data object AcceptAll : KnockRequestsAction
}

View File

@@ -65,7 +65,7 @@ open class KnockRequestsListStateProvider : PreviewParameterProvider<KnockReques
aKnockRequestPresentable()
)
),
actionTarget = KnockRequestsActionTarget.AcceptAll,
currentAction = KnockRequestsAction.AcceptAll,
asyncAction = AsyncAction.ConfirmingNoParams,
),
aKnockRequestsListState(
@@ -74,7 +74,7 @@ open class KnockRequestsListStateProvider : PreviewParameterProvider<KnockReques
aKnockRequestPresentable()
)
),
actionTarget = KnockRequestsActionTarget.AcceptAll,
currentAction = KnockRequestsAction.AcceptAll,
asyncAction = AsyncAction.Loading,
),
aKnockRequestsListState(
@@ -88,7 +88,7 @@ open class KnockRequestsListStateProvider : PreviewParameterProvider<KnockReques
canDecline = true,
canBan = true,
),
actionTarget = KnockRequestsActionTarget.AcceptAll,
currentAction = KnockRequestsAction.AcceptAll,
asyncAction = AsyncAction.Failure(Throwable("Failed to accept all")),
),
aKnockRequestsListState(
@@ -132,7 +132,7 @@ open class KnockRequestsListStateProvider : PreviewParameterProvider<KnockReques
fun aKnockRequestsListState(
knockRequests: AsyncData<ImmutableList<KnockRequestPresentable>> = AsyncData.Success(persistentListOf()),
actionTarget: KnockRequestsActionTarget = KnockRequestsActionTarget.None,
currentAction: KnockRequestsAction = KnockRequestsAction.None,
asyncAction: AsyncAction<Unit> = AsyncAction.Uninitialized,
permissions: KnockRequestPermissions = KnockRequestPermissions(
canAccept = true,
@@ -142,7 +142,7 @@ fun aKnockRequestsListState(
eventSink: (KnockRequestsListEvents) -> Unit = {},
) = KnockRequestsListState(
knockRequests = knockRequests,
actionTarget = actionTarget,
currentAction = currentAction,
asyncAction = asyncAction,
permissions = permissions,
eventSink = eventSink,

View File

@@ -153,7 +153,7 @@ private fun KnockRequestsListContent(
else -> Unit
}
KnockRequestsActionsView(
actionTarget = state.actionTarget,
currentAction = state.currentAction,
asyncAction = state.asyncAction,
onConfirm = {
state.eventSink(KnockRequestsListEvents.ConfirmCurrentAction)
@@ -181,7 +181,7 @@ private fun KnockRequestsListContent(
@Composable
private fun KnockRequestsActionsView(
actionTarget: KnockRequestsActionTarget,
currentAction: KnockRequestsAction,
asyncAction: AsyncAction<Unit>,
onConfirm: () -> Unit,
onDismiss: () -> Unit,
@@ -195,20 +195,20 @@ private fun KnockRequestsActionsView(
onErrorDismiss = onDismiss,
confirmationDialog = {
KnockRequestActionConfirmation(
actionTarget = actionTarget,
currentAction = currentAction,
onSubmit = onConfirm,
onDismiss = onDismiss,
)
},
progressDialog = {
KnockRequestActionProgress(target = actionTarget)
KnockRequestActionProgress(target = currentAction)
},
errorMessage = {
when (actionTarget) {
is KnockRequestsActionTarget.Accept -> stringResource(R.string.screen_knock_requests_list_accept_failed_alert_description)
is KnockRequestsActionTarget.Decline -> stringResource(R.string.screen_knock_requests_list_decline_failed_alert_description)
is KnockRequestsActionTarget.DeclineAndBan -> stringResource(R.string.screen_knock_requests_list_decline_failed_alert_description)
KnockRequestsActionTarget.AcceptAll -> stringResource(R.string.screen_knock_requests_list_accept_all_failed_alert_description)
when (currentAction) {
is KnockRequestsAction.Accept -> stringResource(R.string.screen_knock_requests_list_accept_failed_alert_description)
is KnockRequestsAction.Decline -> stringResource(R.string.screen_knock_requests_list_decline_failed_alert_description)
is KnockRequestsAction.DeclineAndBan -> stringResource(R.string.screen_knock_requests_list_decline_failed_alert_description)
KnockRequestsAction.AcceptAll -> stringResource(R.string.screen_knock_requests_list_accept_all_failed_alert_description)
else -> ""
}
},
@@ -219,25 +219,25 @@ private fun KnockRequestsActionsView(
@Composable
private fun KnockRequestActionConfirmation(
actionTarget: KnockRequestsActionTarget,
currentAction: KnockRequestsAction,
onSubmit: () -> Unit,
onDismiss: () -> Unit,
modifier: Modifier = Modifier,
) {
val (title, content, submitText) = when (actionTarget) {
KnockRequestsActionTarget.AcceptAll -> Triple(
val (title, content, submitText) = when (currentAction) {
KnockRequestsAction.AcceptAll -> Triple(
stringResource(R.string.screen_knock_requests_list_accept_all_alert_title),
stringResource(R.string.screen_knock_requests_list_accept_all_alert_description),
stringResource(R.string.screen_knock_requests_list_accept_all_alert_confirm_button_title),
)
is KnockRequestsActionTarget.Decline -> Triple(
is KnockRequestsAction.Decline -> Triple(
stringResource(R.string.screen_knock_requests_list_decline_alert_title),
stringResource(R.string.screen_knock_requests_list_decline_alert_description, actionTarget.knockRequest.getBestName()),
stringResource(R.string.screen_knock_requests_list_decline_alert_description, currentAction.knockRequest.getBestName()),
stringResource(R.string.screen_knock_requests_list_decline_alert_confirm_button_title),
)
is KnockRequestsActionTarget.DeclineAndBan -> Triple(
is KnockRequestsAction.DeclineAndBan -> Triple(
stringResource(R.string.screen_knock_requests_list_ban_alert_title),
stringResource(R.string.screen_knock_requests_list_ban_alert_description, actionTarget.knockRequest.getBestName()),
stringResource(R.string.screen_knock_requests_list_ban_alert_description, currentAction.knockRequest.getBestName()),
stringResource(R.string.screen_knock_requests_list_ban_alert_confirm_button_title),
)
else -> return
@@ -254,14 +254,14 @@ private fun KnockRequestActionConfirmation(
@Composable
private fun KnockRequestActionProgress(
target: KnockRequestsActionTarget,
target: KnockRequestsAction,
modifier: Modifier = Modifier,
) {
val progressText = when (target) {
is KnockRequestsActionTarget.Accept -> stringResource(R.string.screen_knock_requests_list_accept_loading_title)
is KnockRequestsActionTarget.Decline -> stringResource(R.string.screen_knock_requests_list_decline_loading_title)
is KnockRequestsActionTarget.DeclineAndBan -> stringResource(R.string.screen_knock_requests_list_ban_loading_title)
KnockRequestsActionTarget.AcceptAll -> stringResource(R.string.screen_knock_requests_list_accept_all_loading_title)
is KnockRequestsAction.Accept -> stringResource(R.string.screen_knock_requests_list_accept_loading_title)
is KnockRequestsAction.Decline -> stringResource(R.string.screen_knock_requests_list_decline_loading_title)
is KnockRequestsAction.DeclineAndBan -> stringResource(R.string.screen_knock_requests_list_ban_loading_title)
KnockRequestsAction.AcceptAll -> stringResource(R.string.screen_knock_requests_list_accept_all_loading_title)
else -> return
}
ProgressDialog(

View File

@@ -69,7 +69,7 @@ class KnockRequestsListPresenterTest {
skipItems(1)
awaitItem().also { state ->
val knockRequestPresentable = state.knockRequests.dataOrNull()?.first()!!
assertThat(state.actionTarget).isEqualTo(KnockRequestsActionTarget.Accept(knockRequestPresentable))
assertThat(state.currentAction).isEqualTo(KnockRequestsAction.Accept(knockRequestPresentable))
assertThat(state.asyncAction).isInstanceOf(AsyncAction.Loading::class.java)
}
awaitItem().also { state ->
@@ -79,7 +79,7 @@ class KnockRequestsListPresenterTest {
skipItems(2)
awaitItem().also { state ->
assertThat(state.asyncAction).isInstanceOf(AsyncAction.Uninitialized::class.java)
assertThat(state.actionTarget).isEqualTo(KnockRequestsActionTarget.None)
assertThat(state.currentAction).isEqualTo(KnockRequestsAction.None)
assertThat(state.knockRequests.dataOrNull().orEmpty()).isEmpty()
}
assert(acceptLambda).isCalledOnce()
@@ -103,7 +103,7 @@ class KnockRequestsListPresenterTest {
skipItems(1)
awaitItem().also { state ->
val knockRequestPresentable = state.knockRequests.dataOrNull()?.first()!!
assertThat(state.actionTarget).isEqualTo(KnockRequestsActionTarget.Accept(knockRequestPresentable))
assertThat(state.currentAction).isEqualTo(KnockRequestsAction.Accept(knockRequestPresentable))
assertThat(state.asyncAction).isInstanceOf(AsyncAction.Loading::class.java)
}
awaitItem().also { state ->
@@ -120,7 +120,7 @@ class KnockRequestsListPresenterTest {
skipItems(1)
awaitItem().also { state ->
assertThat(state.asyncAction).isInstanceOf(AsyncAction.Uninitialized::class.java)
assertThat(state.actionTarget).isEqualTo(KnockRequestsActionTarget.None)
assertThat(state.currentAction).isEqualTo(KnockRequestsAction.None)
assertThat(state.knockRequests.dataOrNull()).hasSize(1)
}
assert(acceptLambda).isCalledExactly(2)
@@ -144,7 +144,7 @@ class KnockRequestsListPresenterTest {
skipItems(1)
awaitItem().also { state ->
val knockRequestPresentable = state.knockRequests.dataOrNull()?.first()!!
assertThat(state.actionTarget).isEqualTo(KnockRequestsActionTarget.Decline(knockRequestPresentable))
assertThat(state.currentAction).isEqualTo(KnockRequestsAction.Decline(knockRequestPresentable))
assertThat(state.asyncAction).isInstanceOf(AsyncAction.ConfirmingNoParams::class.java)
state.eventSink(KnockRequestsListEvents.ConfirmCurrentAction)
}
@@ -158,7 +158,7 @@ class KnockRequestsListPresenterTest {
skipItems(2)
awaitItem().also { state ->
assertThat(state.asyncAction).isInstanceOf(AsyncAction.Uninitialized::class.java)
assertThat(state.actionTarget).isEqualTo(KnockRequestsActionTarget.None)
assertThat(state.currentAction).isEqualTo(KnockRequestsAction.None)
assertThat(state.knockRequests.dataOrNull().orEmpty()).isEmpty()
}
}
@@ -182,7 +182,7 @@ class KnockRequestsListPresenterTest {
skipItems(1)
awaitItem().also { state ->
val knockRequestPresentable = state.knockRequests.dataOrNull()?.first()!!
assertThat(state.actionTarget).isEqualTo(KnockRequestsActionTarget.DeclineAndBan(knockRequestPresentable))
assertThat(state.currentAction).isEqualTo(KnockRequestsAction.DeclineAndBan(knockRequestPresentable))
assertThat(state.asyncAction).isInstanceOf(AsyncAction.ConfirmingNoParams::class.java)
state.eventSink(KnockRequestsListEvents.ConfirmCurrentAction)
}
@@ -196,7 +196,7 @@ class KnockRequestsListPresenterTest {
skipItems(2)
awaitItem().also { state ->
assertThat(state.asyncAction).isInstanceOf(AsyncAction.Uninitialized::class.java)
assertThat(state.actionTarget).isEqualTo(KnockRequestsActionTarget.None)
assertThat(state.currentAction).isEqualTo(KnockRequestsAction.None)
assertThat(state.knockRequests.dataOrNull().orEmpty()).isEmpty()
}
}
@@ -223,7 +223,7 @@ class KnockRequestsListPresenterTest {
}
skipItems(1)
awaitItem().also { state ->
assertThat(state.actionTarget).isEqualTo(KnockRequestsActionTarget.AcceptAll)
assertThat(state.currentAction).isEqualTo(KnockRequestsAction.AcceptAll)
assertThat(state.asyncAction).isInstanceOf(AsyncAction.ConfirmingNoParams::class.java)
state.eventSink(KnockRequestsListEvents.ConfirmCurrentAction)
}
@@ -237,7 +237,7 @@ class KnockRequestsListPresenterTest {
skipItems(2)
awaitItem().also { state ->
assertThat(state.asyncAction).isInstanceOf(AsyncAction.Uninitialized::class.java)
assertThat(state.actionTarget).isEqualTo(KnockRequestsActionTarget.None)
assertThat(state.currentAction).isEqualTo(KnockRequestsAction.None)
assertThat(state.knockRequests.dataOrNull().orEmpty()).isEmpty()
}
}
@@ -265,7 +265,7 @@ class KnockRequestsListPresenterTest {
}
skipItems(1)
awaitItem().also { state ->
assertThat(state.actionTarget).isEqualTo(KnockRequestsActionTarget.AcceptAll)
assertThat(state.currentAction).isEqualTo(KnockRequestsAction.AcceptAll)
assertThat(state.asyncAction).isInstanceOf(AsyncAction.ConfirmingNoParams::class.java)
state.eventSink(KnockRequestsListEvents.ConfirmCurrentAction)
}
@@ -279,7 +279,7 @@ class KnockRequestsListPresenterTest {
skipItems(2)
awaitItem().also { state ->
assertThat(state.asyncAction).isInstanceOf(AsyncAction.Uninitialized::class.java)
assertThat(state.actionTarget).isEqualTo(KnockRequestsActionTarget.None)
assertThat(state.currentAction).isEqualTo(KnockRequestsAction.None)
assertThat(state.knockRequests.dataOrNull()).hasSize(1)
}
}

View File

@@ -109,7 +109,7 @@ class KnockRequestsListViewTest {
aKnockRequestsListState(
knockRequests = AsyncData.Success(knockRequests),
asyncAction = AsyncAction.Failure(Throwable("Failed to accept all")),
actionTarget = KnockRequestsActionTarget.AcceptAll,
currentAction = KnockRequestsAction.AcceptAll,
eventSink = eventsRecorder,
),
)
@@ -125,7 +125,7 @@ class KnockRequestsListViewTest {
aKnockRequestsListState(
knockRequests = AsyncData.Success(knockRequests),
asyncAction = AsyncAction.Failure(Throwable("Failed to accept all")),
actionTarget = KnockRequestsActionTarget.AcceptAll,
currentAction = KnockRequestsAction.AcceptAll,
eventSink = eventsRecorder,
),
)
@@ -141,7 +141,7 @@ class KnockRequestsListViewTest {
aKnockRequestsListState(
knockRequests = AsyncData.Success(knockRequests),
asyncAction = AsyncAction.ConfirmingNoParams,
actionTarget = KnockRequestsActionTarget.AcceptAll,
currentAction = KnockRequestsAction.AcceptAll,
eventSink = eventsRecorder,
),
)