refactor (start chat) : use invite people module in room details screen
This commit is contained in:
parent
bfd1182baf
commit
74f6a83219
20 changed files with 207 additions and 543 deletions
|
|
@ -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))
|
||||
|
|
|
|||
|
|
@ -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 = {}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
)
|
||||
}
|
||||
)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue