Skip to content

Commit e4f4525

Browse files
leandroBorgesFerreiraLeandro Ferreira
andauthored
Coming back to select workspace when not selected (#517)
Co-authored-by: Leandro Ferreira <[email protected]>
1 parent d113c9a commit e4f4525

18 files changed

Lines changed: 92 additions & 94 deletions

File tree

application/composeApp/src/commonMain/kotlin/io/writeopia/navigation/StartUp.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import androidx.compose.ui.Modifier
1212
import androidx.navigation.NavController
1313
import androidx.navigation.NavGraphBuilder
1414
import androidx.navigation.compose.composable
15+
import io.writeopia.auth.core.manager.LoginStatus
1516
import io.writeopia.auth.di.AuthInjection
1617
import io.writeopia.auth.menu.AuthMenuViewModel
1718
import io.writeopia.common.utils.Destinations
@@ -42,10 +43,10 @@ fun NavGraphBuilder.startScreen(
4243
authMenuViewModel.isLoggedIn().collect { loggedIn ->
4344
delay(300)
4445
navigationController.navigate(
45-
if (loggedIn) {
46-
Destinations.MAIN_APP.id
47-
} else {
48-
Destinations.AUTH_MENU_INNER_NAVIGATION.id
46+
when (loggedIn) {
47+
LoginStatus.OFFLINE -> Destinations.AUTH_MENU_INNER_NAVIGATION.id
48+
LoginStatus.CHOOSE_WORKSPACE -> Destinations.CHOOSE_WORKSPACE.id
49+
LoginStatus.ONLINE -> Destinations.MAIN_APP.id
4950
}
5051
)
5152
}

application/core/auth_core/config/ktlint/baseline.xml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,6 @@
1919
<error line="24" column="79" source="standard:class-signature" />
2020
<error line="52" column="84" source="standard:function-expression-body" />
2121
</file>
22-
<file name="src/commonMain/kotlin/io/writeopia/auth/core/manager/AuthRepository.kt">
23-
<error line="14" column="76" source="standard:curly-spacing" />
24-
</file>
2522
<file name="src/commonMain/kotlin/io/writeopia/auth/core/manager/SqlDelightAuthRepository.kt">
2623
<error line="16" column="51" source="standard:function-expression-body" />
2724
</file>

application/core/auth_core/src/commonMain/kotlin/io/writeopia/auth/core/manager/AuthRepository.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ interface AuthRepository : UserRepository {
1111

1212
override fun listenForUser(): Flow<WriteopiaUser> = flow { emit(getUser()) }
1313

14-
fun listenForWorkspace(): Flow<Workspace> = flow { emit(getWorkspace())}
14+
fun listenForWorkspace(): Flow<Workspace> =
15+
flow { emit(getWorkspace() ?: Workspace.disconnectedWorkspace()) }
1516

1617
override suspend fun getUser(): WriteopiaUser
1718

@@ -27,7 +28,7 @@ interface AuthRepository : UserRepository {
2728

2829
suspend fun useOffline()
2930

30-
override suspend fun getWorkspace(): Workspace
31+
override suspend fun getWorkspace(): Workspace?
3132

3233
suspend fun saveWorkspace(workspace: Workspace)
3334

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package io.writeopia.auth.core.manager
2+
3+
enum class LoginStatus {
4+
OFFLINE,
5+
CHOOSE_WORKSPACE,
6+
ONLINE
7+
}

application/core/auth_core/src/commonMain/kotlin/io/writeopia/auth/core/manager/SqlDelightAuthRepository.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ internal class SqlDelightAuthRepository(
6565
saveUser(user.copy(id = WriteopiaUser.DISCONNECTED), true)
6666
}
6767

68-
override suspend fun getWorkspace(): Workspace =
68+
override suspend fun getWorkspace(): Workspace? =
6969
writeopiaDb?.workspaceEntityQueries
7070
?.selectCurrentWorkspace()
7171
?.executeAsOneOrNull()
@@ -78,7 +78,7 @@ internal class SqlDelightAuthRepository(
7878
selected = entity.selected.toBoolean(),
7979
role = ""
8080
)
81-
} ?: Workspace.disconnectedWorkspace()
81+
}
8282

8383
override suspend fun saveWorkspace(workspace: Workspace) {
8484
writeopiaDb?.workspaceEntityQueries

application/core/documents/src/commonMain/kotlin/io/writeopia/core/folders/sync/FolderSync.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ class FolderSync(
2222
* This logic is atomic. If it fails, the whole process must be tried again in a future time.
2323
* The sync time of the folder will only be updated with everything works correctly.
2424
*/
25-
suspend fun syncFolder(folderId: String, workspaceId: String, userId: String) {
25+
suspend fun syncFolder(folderId: String, workspaceId: String) {
2626
val authToken = authRepository.getAuthToken() ?: return
2727

2828
// println("folderId: $folderId")

application/core/documents/src/commonMain/kotlin/io/writeopia/core/folders/sync/WorkspaceSync.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ class WorkspaceSync(
1818
suspend fun syncWorkspace(workspaceId: String): ResultData<Unit> {
1919
try {
2020
val authToken = authRepository.getAuthToken() ?: return ResultData.Error(null)
21-
val workspace = authRepository.getWorkspace()
21+
val workspace = authRepository.getWorkspace() ?: return ResultData.Idle()
2222

2323
val response = documentsApi.getWorkspaceNewData(
2424
workspaceId,

application/core/persistence_sqldelight/src/commonMain/kotlin/io/writeopia/sqldelight/dao/WorkspaceSqlDelightDao.kt

Lines changed: 0 additions & 38 deletions
This file was deleted.

application/features/account/src/commonMain/kotlin/io/writeopia/account/viewmodel/AccountMenuKmpViewModel.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ internal class AccountMenuKmpViewModel(
2323

2424
override fun logout(onLogOutSuccess: () -> Unit) {
2525
viewModelScope.launch {
26+
authRepository.unselectAllWorkspaces()
2627
val result = authRepository.logout()
2728

2829
if (result.toBoolean()) {

application/features/auth/src/commonMain/kotlin/io/writeopia/auth/menu/AuthMenuViewModel.kt

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import androidx.lifecycle.ViewModel
44
import androidx.lifecycle.viewModelScope
55
import io.writeopia.auth.core.data.AuthApi
66
import io.writeopia.auth.core.manager.AuthRepository
7+
import io.writeopia.auth.core.manager.LoginStatus
78
import io.writeopia.sdk.models.user.Tier
89
import io.writeopia.sdk.models.user.WriteopiaUser
910
import io.writeopia.sdk.models.utils.ResultData
@@ -39,11 +40,21 @@ class AuthMenuViewModel(
3940
_password.value = name
4041
}
4142

42-
fun isLoggedIn(): Flow<Boolean> = flow {
43+
fun isLoggedIn(): Flow<LoginStatus> = flow {
4344
val user = authRepository.getUser()
45+
val workspace = authRepository.getWorkspace()
46+
4447
val loggedId = authRepository.isLoggedIn() || user.id != WriteopiaUser.DISCONNECTED
4548

46-
emit(loggedId)
49+
val status = when {
50+
loggedId && workspace != null -> LoginStatus.ONLINE
51+
52+
loggedId && workspace == null -> LoginStatus.CHOOSE_WORKSPACE
53+
54+
else -> LoginStatus.OFFLINE
55+
}
56+
57+
emit(status)
4758
}
4859

4960
fun useOffline(sideEffect: () -> Unit) {

0 commit comments

Comments
 (0)