diff --git a/app/src/main/java/com/anytypeio/anytype/ui/multiplayer/RequestJoinSpaceFragment.kt b/app/src/main/java/com/anytypeio/anytype/ui/multiplayer/RequestJoinSpaceFragment.kt
index 74c49b3e1e..e57bb41181 100644
--- a/app/src/main/java/com/anytypeio/anytype/ui/multiplayer/RequestJoinSpaceFragment.kt
+++ b/app/src/main/java/com/anytypeio/anytype/ui/multiplayer/RequestJoinSpaceFragment.kt
@@ -146,6 +146,10 @@ class RequestJoinSpaceFragment : BaseBottomSheetComposeFragment() {
JoinSpaceWithoutApproveScreen(
isLoading = isLoading,
onRequestJoinSpaceClicked = vm::onRequestToJoinClicked,
+ onCancelClicked = {
+ vm.onCancelJoinSpaceRequestClicked()
+ dismiss()
+ },
spaceName = spaceName,
createdByName = createdByName
)
@@ -155,6 +159,10 @@ class RequestJoinSpaceFragment : BaseBottomSheetComposeFragment() {
onRequestJoinSpaceClicked = vm::onRequestToJoinClicked,
spaceName = spaceName,
createdByName = createdByName,
+ onCancelClicked = {
+ vm.onCancelJoinSpaceRequestClicked()
+ dismiss()
+ }
)
}
} else {
diff --git a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/features/multiplayer/Joining.kt b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/features/multiplayer/Joining.kt
index 637265eeff..c143ccbaed 100644
--- a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/features/multiplayer/Joining.kt
+++ b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/features/multiplayer/Joining.kt
@@ -34,6 +34,7 @@ import com.anytypeio.anytype.core_ui.views.Title2
@Composable
fun JoinSpaceScreen(
onRequestJoinSpaceClicked: () -> Unit,
+ onCancelClicked: () -> Unit,
spaceName: String,
createdByName: String,
isLoading: Boolean = false
@@ -87,7 +88,16 @@ fun JoinSpaceScreen(
loading = isLoading
)
}
- Spacer(modifier = Modifier.height(20.dp))
+ Spacer(modifier = Modifier.height(8.dp))
+ ButtonSecondary(
+ onClick = throttledClick(
+ onClick = { onCancelClicked() }
+ ),
+ text = stringResource(R.string.cancel),
+ modifier = Modifier.fillMaxWidth(),
+ size = ButtonSize.Large,
+ )
+ Spacer(modifier = Modifier.height(10.dp))
Text(
text = stringResource(R.string.multiplayer_request_to_join_explanation),
style = Caption1Regular,
@@ -102,6 +112,7 @@ fun JoinSpaceScreen(
@Composable
fun JoinSpaceWithoutApproveScreen(
onRequestJoinSpaceClicked: () -> Unit,
+ onCancelClicked: () -> Unit,
spaceName: String,
createdByName: String,
isLoading: Boolean = false
@@ -162,7 +173,7 @@ fun JoinSpaceWithoutApproveScreen(
Spacer(modifier = Modifier.height(8.dp))
ButtonSecondary(
onClick = throttledClick(
- onClick = { onRequestJoinSpaceClicked() }
+ onClick = { onCancelClicked() }
),
text = stringResource(R.string.cancel),
modifier = Modifier.fillMaxWidth(),
@@ -172,6 +183,63 @@ fun JoinSpaceWithoutApproveScreen(
}
}
+@Composable
+fun JoinSpaceRequestSentScreen(
+ onDoneClicked: () -> Unit,
+ onManageSpaces: () -> Unit
+) {
+ Column(
+ modifier = Modifier
+ .fillMaxWidth()
+ .padding(horizontal = 16.dp)
+ ) {
+ Dragger(
+ modifier = Modifier
+ .align(Alignment.CenterHorizontally)
+ .padding(vertical = 6.dp)
+ )
+ Spacer(modifier = Modifier.height(16.dp))
+ Text(
+ text = stringResource(R.string.multiplayer_request_to_join_sent_title,),
+ style = HeadlineHeading,
+ color = colorResource(id = R.color.text_primary),
+ modifier = Modifier
+ .fillMaxWidth()
+ .padding(horizontal = 16.dp),
+ textAlign = TextAlign.Center
+ )
+ Spacer(modifier = Modifier.height(8.dp))
+ Text(
+ text = stringResource(R.string.multiplayer_request_to_join_sent_description,),
+ style = Title2,
+ color = colorResource(id = R.color.text_primary),
+ modifier = Modifier
+ .fillMaxWidth()
+ .padding(horizontal = 16.dp),
+ textAlign = TextAlign.Center
+ )
+ Spacer(modifier = Modifier.height(19.dp))
+ ButtonPrimaryLoading(
+ onClick = throttledClick(
+ onClick = { }
+ ),
+ size = ButtonSize.Large,
+ text = stringResource(R.string.done),
+ modifierButton = Modifier.fillMaxWidth(),
+ )
+ Spacer(modifier = Modifier.height(8.dp))
+ ButtonSecondary(
+ onClick = throttledClick(
+ onClick = { }
+ ),
+ text = stringResource(R.string.multiplayer_request_to_join_btn_manage_spaces),
+ modifier = Modifier.fillMaxWidth(),
+ size = ButtonSize.Large,
+ )
+ Spacer(modifier = Modifier.height(16.dp))
+ }
+}
+
@Composable
fun JoiningLoadingState(
onCancelLoadingInviteClicked: () -> Unit
@@ -227,7 +295,8 @@ fun JoinSpaceScreenPreview() {
JoinSpaceScreen(
onRequestJoinSpaceClicked = {},
spaceName = "Anytype Android App",
- createdByName = "Konstantin"
+ createdByName = "Konstantin",
+ onCancelClicked = {}
)
}
@@ -237,7 +306,8 @@ fun JoinSpaceScreenPreviewWithEmptyNames() {
JoinSpaceScreen(
onRequestJoinSpaceClicked = {},
spaceName = "",
- createdByName = ""
+ createdByName = "",
+ onCancelClicked = {}
)
}
@@ -247,6 +317,7 @@ fun JoinSpaceScreenPreviewWithoutApprove() {
JoinSpaceWithoutApproveScreen(
onRequestJoinSpaceClicked = {},
spaceName = "",
- createdByName = ""
+ createdByName = "",
+ onCancelClicked = {}
)
}
\ No newline at end of file
diff --git a/localization/src/main/res/values/strings.xml b/localization/src/main/res/values/strings.xml
index c270628369..76de3f4fab 100644
--- a/localization/src/main/res/values/strings.xml
+++ b/localization/src/main/res/values/strings.xml
@@ -1361,6 +1361,9 @@
Join %1$s
You\'ve been invited to join %1$s, created by %2$s
Join Space
+ Request sent
+ You will receive a notification when the space owner will approve your request.
+ Manage spaces
Hang tight — we’re setting things up for you. This should only take a moment.
diff --git a/presentation/src/main/java/com/anytypeio/anytype/presentation/multiplayer/RequestJoinSpaceViewModel.kt b/presentation/src/main/java/com/anytypeio/anytype/presentation/multiplayer/RequestJoinSpaceViewModel.kt
index 4d553bfa74..0d1844ae5b 100644
--- a/presentation/src/main/java/com/anytypeio/anytype/presentation/multiplayer/RequestJoinSpaceViewModel.kt
+++ b/presentation/src/main/java/com/anytypeio/anytype/presentation/multiplayer/RequestJoinSpaceViewModel.kt
@@ -28,7 +28,6 @@ import com.anytypeio.anytype.presentation.common.BaseViewModel
import com.anytypeio.anytype.presentation.common.TypedViewState
import javax.inject.Inject
import kotlinx.coroutines.Job
-import kotlinx.coroutines.cancel
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.launch
@@ -54,6 +53,7 @@ class RequestJoinSpaceViewModel(
val commands = MutableSharedFlow(0)
val showLoadingInviteProgress = MutableStateFlow(false)
private var getSpaceInviteViewJob: Job? = null
+ private var joinSpaceRequestJob: Job? = null
init {
Timber.i("RequestJoinSpaceViewModel, init")
@@ -132,7 +132,8 @@ class RequestJoinSpaceViewModel(
fun onRequestToJoinClicked() {
when(val curr = state.value) {
is TypedViewState.Success -> {
- viewModelScope.launch {
+ joinSpaceRequestJob?.cancel()
+ joinSpaceRequestJob = viewModelScope.launch {
val fileKey = spaceInviteResolver.parseFileKey(params.link)
val contentId = spaceInviteResolver.parseContentId(params.link)
if (contentId != null && fileKey != null) {
@@ -156,10 +157,14 @@ class RequestJoinSpaceViewModel(
onSuccess = {
analytics.sendEvent(eventName = screenRequestSent)
if (notificator.areNotificationsEnabled) {
- commands.emit(Command.Toast.RequestSent)
+ if (!curr.data.withoutApprove) {
+ commands.emit(Command.Toast.RequestSent)
+ }
commands.emit(Command.Dismiss)
} else {
- commands.emit(Command.Toast.RequestSent)
+ if (!curr.data.withoutApprove) {
+ commands.emit(Command.Toast.RequestSent)
+ }
showEnableNotificationDialog.value = true
}
}
@@ -173,6 +178,11 @@ class RequestJoinSpaceViewModel(
}
}
+ fun onCancelJoinSpaceRequestClicked() {
+ joinSpaceRequestJob?.cancel()
+ isRequestInProgress.value = false
+ }
+
fun onOpenSpaceClicked(space: SpaceId) {
viewModelScope.launch {
val curr = spaceManager.get()