refactor (start chat) : use invite people module in room details screen

This commit is contained in:
ganfra 2025-08-08 19:06:19 +02:00 committed by Benoit Marty
parent bfd1182baf
commit 74f6a83219
20 changed files with 207 additions and 543 deletions

View file

@ -15,6 +15,7 @@ import com.bumble.appyx.core.node.Node
import com.bumble.appyx.core.plugin.Plugin
import com.bumble.appyx.navmodel.backstack.BackStack
import com.bumble.appyx.navmodel.backstack.operation.push
import com.bumble.appyx.navmodel.backstack.operation.replace
import dagger.assisted.Assisted
import dagger.assisted.AssistedInject
import io.element.android.anvilannotations.ContributesNode
@ -48,7 +49,7 @@ class CreateRoomFlowNode @AssistedInject constructor(
NavTarget.ConfigureRoom -> {
val callback = object : ConfigureRoomNode.Callback {
override fun onCreateRoomSuccess(roomId: RoomId) {
backstack.push(NavTarget.AddPeople(roomId))
backstack.replace(NavTarget.AddPeople(roomId))
}
}
createNode<ConfigureRoomNode>(buildContext, plugins = listOf(callback))

View file

@ -12,7 +12,6 @@ import androidx.compose.ui.Modifier
import com.bumble.appyx.core.modality.BuildContext
import com.bumble.appyx.core.node.Node
import com.bumble.appyx.core.plugin.Plugin
import com.squareup.anvil.annotations.ContributesBinding
import dagger.assisted.Assisted
import dagger.assisted.AssistedInject
import io.element.android.anvilannotations.ContributesNode
@ -27,13 +26,13 @@ import io.element.android.libraries.matrix.api.room.JoinedRoom
class AddPeopleNode @AssistedInject constructor(
@Assisted buildContext: BuildContext,
@Assisted plugins: List<Plugin>,
private val invitePeoplePresenterFactory: InvitePeoplePresenter.Factory,
invitePeoplePresenterFactory: InvitePeoplePresenter.Factory,
private val invitePeopleRenderer: InvitePeopleRenderer,
) : Node(buildContext, plugins = plugins) {
data class Inputs(
val joinedRoom: JoinedRoom
): NodeInputs
) : NodeInputs
private val joinedRoom = inputs<Inputs>().joinedRoom
private val invitePeoplePresenter = invitePeoplePresenterFactory.create(joinedRoom)
@ -41,6 +40,10 @@ class AddPeopleNode @AssistedInject constructor(
@Composable
override fun View(modifier: Modifier) {
val state = invitePeoplePresenter.present()
invitePeopleRenderer.Render(state, Modifier)
AddPeopleView(
state = state,
invitePeopleView = { invitePeopleRenderer.Render(state, Modifier) },
onFinish = {}
)
}
}

View file

@ -0,0 +1,64 @@
/*
* Copyright 2025 New Vector Ltd.
*
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
* Please see LICENSE files in the repository root for full details.
*/
package io.element.android.features.createroom.impl.addpeople
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import io.element.android.features.invitepeople.api.InvitePeopleEvents
import io.element.android.features.invitepeople.api.InvitePeopleState
import io.element.android.libraries.designsystem.atomic.pages.HeaderFooterPage
import io.element.android.libraries.designsystem.theme.components.Button
import io.element.android.libraries.designsystem.theme.components.TextButton
import io.element.android.libraries.designsystem.theme.components.TopAppBar
import io.element.android.libraries.ui.strings.CommonStrings
@Composable
fun AddPeopleView(
state: InvitePeopleState,
invitePeopleView: @Composable () -> Unit,
onFinish: () -> Unit,
modifier: Modifier = Modifier,
) {
HeaderFooterPage(
modifier = modifier,
contentPadding = PaddingValues(0.dp),
topBar = {
AddPeopleTopBar(onSkipClick = onFinish)
},
footer = {
Button(
text = "Finish",
onClick = { state.eventSink(InvitePeopleEvents.SendInvites) },
enabled = state.canInvite,
modifier = Modifier.padding(bottom = 16.dp)
)
},
content = invitePeopleView
)
}
@OptIn(ExperimentalMaterial3Api::class)
@Composable
private fun AddPeopleTopBar(
onSkipClick: () -> Unit,
) {
TopAppBar(
titleStr = "Invite people",
actions = {
TextButton(
text = stringResource(CommonStrings.action_skip),
onClick = onSkipClick,
)
}
)
}