Skip to content

Commit 9aff293

Browse files
committed
feat(android_sidebar): adding the profil page and password edit
1 parent 6da09af commit 9aff293

File tree

7 files changed

+59
-38
lines changed

7 files changed

+59
-38
lines changed
Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
package com.xpeho.xpeapp.data.entity.user
22

3+
import com.google.gson.annotations.SerializedName
4+
35
data class UserEditPassword(
4-
val initialPassword: String,
5-
val password: String,
6-
val passwordRepeat: String,
6+
@SerializedName("initial_password") val initialPassword: String,
7+
@SerializedName("password") val password: String,
8+
@SerializedName("password_repeat") val passwordRepeat: String,
9+
10+
711
)

xpeapp_android/app/src/main/java/com/xpeho/xpeapp/data/service/WordpressRepository.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ class WordpressRepository(
200200
)
201201
}
202202

203-
/*suspend fun updatePassword(
203+
suspend fun updatePassword(
204204
editPassword: UserEditPassword
205205
): Boolean {
206206
handleServiceExceptions(
@@ -212,7 +212,7 @@ class WordpressRepository(
212212
return false
213213
}
214214
)
215-
}*/
215+
}
216216

217217
// Exceptions handling
218218

xpeapp_android/app/src/main/java/com/xpeho/xpeapp/data/service/WordpressService.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,11 +67,11 @@ interface WordpressService {
6767
@GET("xpeho/v1/user-infos")
6868
suspend fun fetchUserInfos(): UserInfos
6969

70-
/*// Update the user infos
70+
// Update the user infos
7171
@Headers("Content-Type: application/json")
7272
@POST("xpeho/v1/update-password")
7373
suspend fun updatePassword(
7474
@Body editPassword: UserEditPassword,
75-
): Boolean*/
75+
): Boolean
7676
}
7777

xpeapp_android/app/src/main/java/com/xpeho/xpeapp/ui/page/user/ProfileEditPasswordView.kt

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,10 @@ import androidx.lifecycle.viewmodel.compose.viewModel
1313
import com.xpeho.xpeapp.R
1414
import com.xpeho.xpeapp.XpeApp
1515
import com.xpeho.xpeapp.data.entity.user.UserEditPassword
16+
import com.xpeho.xpeapp.ui.components.CustomDialog
1617
import com.xpeho.xpeapp.ui.components.layout.Title
18+
import com.xpeho.xpeapp.ui.uiState.PasswordUpdateUiState
19+
import com.xpeho.xpeapp.ui.uiState.UserInfosUiState
1720
import com.xpeho.xpeapp.ui.viewModel.user.UserInfosViewModel
1821
import com.xpeho.xpeapp.ui.viewModel.viewModelFactory
1922
import com.xpeho.xpeho_ui_android.ClickyButton
@@ -37,6 +40,9 @@ fun ProfileEditPasswordView(
3740
var newPassword by remember { mutableStateOf("") }
3841
var confirmPassword by remember { mutableStateOf("") }
3942

43+
val passwordUpdateState = userInfosViewModel.passwordUpdateState
44+
45+
4046
Column(
4147
modifier = Modifier
4248
.fillMaxWidth()
@@ -97,15 +103,26 @@ fun ProfileEditPasswordView(
97103
ClickyButton(
98104
label = stringResource(id = R.string.profil_page_modify_password_save),
99105
onPress = {
100-
// if (newPassword == confirmPassword) {
101-
// userInfosViewModel.updatePassword(UserEditPassword(
102-
// initialPassword, newPassword, confirmPassword))
103-
// onChangePassword()
104-
// } else {
105-
// // Handle password mismatch error
106-
// }
106+
if (passwordUpdateState is PasswordUpdateUiState.SUCCESS) {
107+
userInfosViewModel.updatePassword(UserEditPassword(
108+
initialPassword, newPassword, confirmPassword))
109+
onChangePassword()
110+
} else {
111+
//userInfosViewModel.passwordUpdateState = PasswordUpdateUiState.ERROR("Les mots de passe ne correspondent pas.")
112+
}
107113
}
108114
)
115+
116+
if (passwordUpdateState is PasswordUpdateUiState.ERROR) {
117+
CustomDialog(
118+
title = stringResource(id = R.string.home_page_error),
119+
message = (userInfosViewModel.state as UserInfosUiState.ERROR).error,
120+
closeDialog = {
121+
userInfosViewModel.resetState()
122+
}
123+
)
124+
}
125+
109126
}
110127
}
111128
}

xpeapp_android/app/src/main/java/com/xpeho/xpeapp/ui/page/user/ProfilePage.kt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,7 @@ import androidx.compose.ui.semantics.semantics
88
import androidx.compose.ui.semantics.contentDescription
99
import androidx.compose.ui.unit.dp
1010
import androidx.compose.runtime.Composable
11-
import androidx.lifecycle.viewmodel.compose.viewModel
1211
import androidx.navigation.NavController
13-
import com.xpeho.xpeapp.XpeApp
14-
import com.xpeho.xpeapp.ui.viewModel.user.UserInfosViewModel
15-
import com.xpeho.xpeapp.ui.viewModel.viewModelFactory
1612

1713
@Composable
1814
fun ProfilePage(
Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
/*
21
package com.xpeho.xpeapp.ui.uiState
32

43
interface PasswordUpdateUiState {
@@ -7,4 +6,4 @@ interface PasswordUpdateUiState {
76
data class SUCCESS(val isSuccessful: Boolean) : PasswordUpdateUiState
87
data class ERROR(val errorMessage: String) : PasswordUpdateUiState
98
}
10-
*/
9+

xpeapp_android/app/src/main/java/com/xpeho/xpeapp/ui/viewModel/user/UserInfosViewModel.kt

Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import com.xpeho.xpeapp.data.entity.user.UserEditPassword
99
import com.xpeho.xpeapp.data.service.WordpressRepository
1010
import com.xpeho.xpeapp.domain.AuthState
1111
import com.xpeho.xpeapp.domain.AuthenticationManager
12-
// import com.xpeho.xpeapp.ui.uiState.PasswordUpdateUiState
12+
import com.xpeho.xpeapp.ui.uiState.PasswordUpdateUiState
1313
import com.xpeho.xpeapp.ui.uiState.UserInfosUiState
1414
import kotlinx.coroutines.launch
1515

@@ -19,7 +19,7 @@ class UserInfosViewModel (
1919
) : ViewModel() {
2020

2121
var state: UserInfosUiState by mutableStateOf(UserInfosUiState.EMPTY)
22-
// var passwordUpdateState: PasswordUpdateUiState by mutableStateOf(PasswordUpdateUiState.EMPTY)
22+
var passwordUpdateState: PasswordUpdateUiState by mutableStateOf(PasswordUpdateUiState.EMPTY)
2323

2424
init {
2525
fetchUserInfos()
@@ -43,26 +43,31 @@ class UserInfosViewModel (
4343
}
4444
}
4545

46-
// fun updatePassword(editPassword: UserEditPassword) {
47-
// passwordUpdateState = PasswordUpdateUiState.LOADING
48-
// viewModelScope.launch {
49-
// try {
50-
// val result = wordpressRepo.updatePassword(editPassword)
51-
// passwordUpdateState = if (result) {
52-
// PasswordUpdateUiState.SUCCESS(true)
53-
// } else {
54-
// PasswordUpdateUiState.ERROR("La mise à jour du mot de passe a échoué.")
55-
// }
56-
// } catch (e: Exception) {
57-
// passwordUpdateState = PasswordUpdateUiState.ERROR("Erreur : ${e.message}")
58-
// }
59-
// }
60-
// }
46+
fun updatePassword(editPassword: UserEditPassword) {
47+
passwordUpdateState = PasswordUpdateUiState.LOADING
48+
viewModelScope.launch {
49+
try {
50+
val result = wordpressRepo.updatePassword(editPassword)
51+
passwordUpdateState = if (result) {
52+
PasswordUpdateUiState.SUCCESS(true)
53+
} else {
54+
PasswordUpdateUiState.ERROR("La mise à jour du mot de passe a échoué.")
55+
}
56+
} catch (e: Exception) {
57+
val errorMessage = when {
58+
e.message?.contains("incorrect_password") == false -> "Le mot de passe initial est incorrect."
59+
e.message?.contains("password_mismatch") == false -> "Les mots de passe ne correspondent pas."
60+
else -> "Erreur : ${e.message}"
61+
}
62+
passwordUpdateState = PasswordUpdateUiState.ERROR(errorMessage)
63+
}
64+
}
65+
}
6166

6267

6368
fun resetState() {
6469
state = UserInfosUiState.EMPTY
65-
//passwordUpdateState = PasswordUpdateUiState.EMPTY
70+
passwordUpdateState = PasswordUpdateUiState.EMPTY
6671
}
6772

6873
fun updateState() {

0 commit comments

Comments
 (0)