Skip to content

Commit a61c064

Browse files
committed
chore(fc): hook up close/reopen to room info screen
Signed-off-by: Brandon McAnsh <[email protected]>
1 parent 93e7831 commit a61c064

File tree

2 files changed

+75
-7
lines changed

2 files changed

+75
-7
lines changed

flipchatApp/src/main/kotlin/xyz/flipchat/app/features/chat/info/ChatInfoViewModel.kt

Lines changed: 72 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import kotlinx.coroutines.flow.mapNotNull
2121
import kotlinx.coroutines.flow.onEach
2222
import xyz.flipchat.app.R
2323
import xyz.flipchat.app.data.RoomInfo
24+
import xyz.flipchat.app.features.chat.conversation.ConversationViewModel.Event
2425
import xyz.flipchat.app.features.login.register.onResult
2526
import xyz.flipchat.app.util.IntentUtils
2627
import xyz.flipchat.chat.RoomController
@@ -82,8 +83,9 @@ class ChatInfoViewModel @Inject constructor(
8283
data class OnJoiningStateChanged(val joining: Boolean, val joined: Boolean = false) : Event
8384
data class OnBecameMember(val roomId: ID) : Event
8485

85-
data object CloseTemporarily : Event
86-
data object Reopen : Event
86+
data object OnOpenStateChangedRequested : Event
87+
data class OnOpenRoom(val conversationId: ID) : Event
88+
data class OnCloseRoom(val conversationId: ID) : Event
8789

8890
data object LeaveRoom : Event
8991
data class OnLeavingStateChanged(val leaving: Boolean, val left: Boolean = false) : Event
@@ -227,13 +229,78 @@ class ChatInfoViewModel @Inject constructor(
227229
}
228230
).launchIn(viewModelScope)
229231

232+
eventFlow
233+
.filterIsInstance<Event.OnOpenStateChangedRequested>()
234+
.mapNotNull { stateFlow.value.roomInfo.id }
235+
.map { it to stateFlow.value.isOpen }
236+
.onEach { (conversationId, isOpen) ->
237+
confirmOpenStateChange(conversationId, isOpen)
238+
}
239+
.launchIn(viewModelScope)
240+
241+
eventFlow
242+
.filterIsInstance<Event.OnOpenRoom>()
243+
.map { it.conversationId }
244+
.map { roomController.enableChat(it) }
245+
.onResult(
246+
onError = {
247+
TopBarManager.showMessage(
248+
TopBarManager.TopBarMessage(
249+
resources.getString(R.string.error_title_failedToReopenRoom),
250+
resources.getString(R.string.error_description_failedToReopenRoom)
251+
)
252+
)
253+
},
254+
).launchIn(viewModelScope)
255+
256+
eventFlow
257+
.filterIsInstance<Event.OnCloseRoom>()
258+
.map { it.conversationId }
259+
.map { roomController.disableChat(it) }
260+
.onResult(
261+
onError = {
262+
TopBarManager.showMessage(
263+
TopBarManager.TopBarMessage(
264+
resources.getString(R.string.error_title_failedToCloseRoom),
265+
resources.getString(R.string.error_description_failedToCloseRoom)
266+
)
267+
)
268+
},
269+
).launchIn(viewModelScope)
270+
230271
eventFlow
231272
.filterIsInstance<Event.OnShareRoomClicked>()
232273
.map { IntentUtils.shareRoom(stateFlow.value.roomInfo.roomNumber) }
233274
.onEach { dispatchEvent(Event.ShareRoom(it)) }
234275
.launchIn(viewModelScope)
235276
}
236277

278+
private fun confirmOpenStateChange(conversationId: ID, isRoomOpen: Boolean) {
279+
BottomBarManager.showMessage(
280+
BottomBarManager.BottomBarMessage(
281+
title = if (isRoomOpen) resources.getString(R.string.prompt_title_closeRoom) else resources.getString(
282+
R.string.prompt_title_reopenRoom
283+
),
284+
subtitle = if (isRoomOpen) resources.getString(R.string.prompt_description_closeRoom) else resources.getString(
285+
R.string.prompt_description_reopenRoom
286+
),
287+
positiveText = if (isRoomOpen) resources.getString(R.string.action_closeTemporarily) else resources.getString(
288+
R.string.action_reopenRoom
289+
),
290+
tertiaryText = resources.getString(R.string.action_cancel),
291+
onPositive = {
292+
if (isRoomOpen) {
293+
dispatchEvent(Event.OnCloseRoom(conversationId))
294+
} else {
295+
dispatchEvent(Event.OnOpenRoom(conversationId))
296+
}
297+
},
298+
type = BottomBarManager.BottomBarMessageType.THEMED,
299+
showScrim = true,
300+
)
301+
)
302+
}
303+
237304
companion object {
238305
val updateStateForEvent: (Event) -> ((State) -> State) = { event ->
239306
when (event) {
@@ -261,8 +328,9 @@ class ChatInfoViewModel @Inject constructor(
261328
is Event.ShareRoom,
262329
is Event.OnListenToClicked,
263330
is Event.OnBecameMember,
264-
is Event.CloseTemporarily,
265-
is Event.Reopen,
331+
is Event.OnOpenStateChangedRequested,
332+
is Event.OnCloseRoom,
333+
is Event.OnOpenRoom,
266334
Event.OnLeftRoom -> { state -> state }
267335

268336
is Event.OnHostStatusChanged -> { state -> state.copy(isHost = event.isHost) }

flipchatApp/src/main/kotlin/xyz/flipchat/app/features/chat/info/RoomInfoScreen.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ class RoomInfoScreen(
128128
val state by viewModel.stateFlow.collectAsState()
129129

130130
val goBack = {
131-
if (returnToSender) {
131+
if (!returnToSender) {
132132
navigator.pop()
133133
} else {
134134
navigator.popUntil { it is TabbedHomeScreen }
@@ -388,7 +388,7 @@ private fun buildBottomBarMessage(
388388
BottomBarAction(
389389
text = context.getString(R.string.action_closeFlipchatTemporarily),
390390
onClick = {
391-
dispatch(ChatInfoViewModel.Event.CloseTemporarily)
391+
dispatch(ChatInfoViewModel.Event.OnOpenStateChangedRequested)
392392
}
393393
)
394394
)
@@ -397,7 +397,7 @@ private fun buildBottomBarMessage(
397397
BottomBarAction(
398398
text = context.getString(R.string.action_reopenFlipchat),
399399
onClick = {
400-
dispatch(ChatInfoViewModel.Event.Reopen)
400+
dispatch(ChatInfoViewModel.Event.OnOpenStateChangedRequested)
401401
}
402402
)
403403
)

0 commit comments

Comments
 (0)