diff --git a/app/src/main/java/com/anytypeio/anytype/ui/spaces/SpaceListFragment.kt b/app/src/main/java/com/anytypeio/anytype/ui/spaces/SpaceListFragment.kt index 53ea940b33..6f90440b71 100644 --- a/app/src/main/java/com/anytypeio/anytype/ui/spaces/SpaceListFragment.kt +++ b/app/src/main/java/com/anytypeio/anytype/ui/spaces/SpaceListFragment.kt @@ -18,6 +18,7 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.fragment.app.viewModels import androidx.lifecycle.compose.collectAsStateWithLifecycle +import androidx.navigation.fragment.findNavController import com.anytypeio.anytype.R import com.anytypeio.anytype.core_ui.features.multiplayer.SpaceListScreen import com.anytypeio.anytype.core_ui.foundation.Warning @@ -29,6 +30,7 @@ import com.anytypeio.anytype.presentation.spaces.SpaceListViewModel import com.anytypeio.anytype.ui.settings.typography import javax.inject.Inject import kotlinx.coroutines.launch +import timber.log.Timber class SpaceListFragment : BaseBottomSheetComposeFragment() { @@ -53,7 +55,16 @@ class SpaceListFragment : BaseBottomSheetComposeFragment() { state = vm.state.collectAsStateWithLifecycle().value, onDeleteSpaceClicked = vm::onDeleteSpaceClicked, onLeaveSpaceClicked = vm::onLeaveSpaceClicked, - onCancelJoinRequestClicked = vm::onCancelJoinSpaceClicked + onCancelJoinRequestClicked = vm::onCancelJoinSpaceClicked, + onCreateSpaceClicked = { + runCatching { + findNavController().navigate( + R.id.actionCreateSpaceFromVault + ) + }.onFailure { + Timber.e(it, "Error while opening create-space screen from vault") + } + } ) } diff --git a/app/src/main/res/navigation/graph.xml b/app/src/main/res/navigation/graph.xml index c12155d91b..aa11a1aa42 100644 --- a/app/src/main/res/navigation/graph.xml +++ b/app/src/main/res/navigation/graph.xml @@ -277,7 +277,11 @@ + android:label="SpaceListScreen"> + + >, onDeleteSpaceClicked: (SpaceListItemView) -> Unit, onLeaveSpaceClicked: (SpaceListItemView) -> Unit, - onCancelJoinRequestClicked: (SpaceListItemView) -> Unit + onCancelJoinRequestClicked: (SpaceListItemView) -> Unit, + onCreateSpaceClicked: () -> Unit, ) { Column( modifier = Modifier @@ -71,7 +75,9 @@ fun SpaceListScreen( ) Header(text = stringResource(id = R.string.multiplayer_spaces)) LazyColumn( - modifier = Modifier.fillMaxWidth().weight(1.0f) + modifier = Modifier + .fillMaxWidth() + .weight(1.0f) ) { if (state is ViewState.Success) { itemsIndexed( @@ -102,11 +108,49 @@ fun SpaceListScreen( }, key = { _, item -> "space-list-item-${item.space.id}" } ) + if (state.data.isEmpty()) { + item { + SpaceListEmptyState( + onCreateSpaceClicked = onCreateSpaceClicked, + modifier = Modifier.fillParentMaxSize() + ) + } + } } } } } +@Composable +fun SpaceListEmptyState( + modifier: Modifier = Modifier, + onCreateSpaceClicked: () -> Unit +) { + Box(modifier = modifier) { + Column( + modifier = Modifier + .fillMaxWidth() + .align(Alignment.Center), + horizontalAlignment = Alignment.CenterHorizontally + ) { + Text( + text = stringResource(R.string.space_list_empty_state_it_is_empty_here), + color = colorResource(R.color.text_primary) + ) + Text( + text = stringResource(R.string.space_list_empty_state_create_your_first_space_to_get_started), + color = colorResource(R.color.text_secondary) + ) + Spacer(modifier = Modifier.height(16.dp)) + ButtonSecondary( + onClick = onCreateSpaceClicked, + text = "Create space", + size = ButtonSize.SmallSecondary + ) + } + } +} + @Composable fun SpaceListCardItem( spaceName: String, @@ -357,7 +401,8 @@ private fun SpaceListScreenPreview() { state = ViewState.Loading, onCancelJoinRequestClicked = {}, onDeleteSpaceClicked = {}, - onLeaveSpaceClicked = {} + onLeaveSpaceClicked = {}, + onCreateSpaceClicked = {} ) } @@ -376,5 +421,12 @@ private fun SpaceCardItemPreview() { ) } +@DefaultPreviews +@Composable +private fun SpaceListEmptyStatePreview() { + SpaceListEmptyState( + onCreateSpaceClicked = {} + ) +} diff --git a/localization/src/main/res/values/strings.xml b/localization/src/main/res/values/strings.xml index 41a81431aa..8ad4844670 100644 --- a/localization/src/main/res/values/strings.xml +++ b/localization/src/main/res/values/strings.xml @@ -1848,5 +1848,7 @@ Please provide specific details of your needs here. Saturday Sunday File + Create your first space to get started + It is empty here. \ No newline at end of file