Skip to content

Commit 5b627a2

Browse files
committed
Migrate :feature:groups to CMP
1 parent befb189 commit 5b627a2

File tree

19 files changed

+224
-161
lines changed

19 files changed

+224
-161
lines changed

build-logic/convention/src/main/kotlin/CMPFeatureConventionPlugin.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ class CMPFeatureConventionPlugin : Plugin<Project> {
1717
dependencies {
1818
add("commonMainImplementation", project(":core:ui"))
1919
add("commonMainImplementation", project(":core:designsystem"))
20-
add("commonMainImplementation", project(":core:testing"))
21-
add("commonMainImplementation", project(":core:data"))
20+
// add("commonMainImplementation", project(":core:testing"))
21+
// add("commonMainImplementation", project(":core:data"))
2222

2323
add("commonMainImplementation", libs.findLibrary("koin.compose").get())
2424
add("commonMainImplementation", libs.findLibrary("koin.compose.viewmodel").get())

core/designsystem/src/commonMain/kotlin/com/mifos/core/designsystem/component/MifosTextFieldDropdown.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ fun MifosTextFieldDropdown(
4242
modifier: Modifier = Modifier
4343
.fillMaxWidth()
4444
.padding(start = 16.dp, end = 16.dp),
45-
label: Int? = null,
4645
labelString: String? = null,
4746
readOnly: Boolean = false,
4847
) {

core/designsystem/src/commonMain/kotlin/com/mifos/core/designsystem/icon/MifosIcons.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,10 @@ import androidx.compose.material.icons.outlined.DateRange
5353
import androidx.compose.material.icons.outlined.EventRepeat
5454
import androidx.compose.material.icons.outlined.Group
5555
import androidx.compose.material.icons.outlined.Home
56+
import androidx.compose.material.icons.outlined.HomeWork
5657
import androidx.compose.material.icons.outlined.Mail
58+
import androidx.compose.material.icons.outlined.Numbers
59+
import androidx.compose.material.icons.outlined.PersonOutline
5760
import androidx.compose.material.icons.outlined.Visibility
5861
import androidx.compose.material.icons.outlined.VisibilityOff
5962
import androidx.compose.material.icons.outlined.Wallet
@@ -152,5 +155,8 @@ object MifosIcons {
152155
val FlashOff = Icons.Default.FlashOff
153156
val Error2 = Icons.Filled.Error
154157
val Notifications = Icons.Filled.Notifications
158+
val Numbers = Icons.Outlined.Numbers
159+
val Homework = Icons.Outlined.HomeWork
160+
val PersonOutline = Icons.Outlined.PersonOutline
155161
val NavigationDrawer = Icons.Default.Menu
156162
}

feature/groups/build.gradle.kts

Lines changed: 41 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -8,34 +8,51 @@
88
* See https://github.com/openMF/android-client/blob/master/LICENSE.md
99
*/
1010
plugins {
11-
alias(libs.plugins.mifos.android.feature)
12-
alias(libs.plugins.mifos.android.library.compose)
13-
alias(libs.plugins.mifos.android.library.jacoco)
14-
}
11+
alias(libs.plugins.mifos.cmp.feature)
12+
alias(libs.plugins.mifos.kmp.koin)
1513

14+
// alias(libs.plugins.mifos.android.library.compose)
15+
// alias(libs.plugins.mifos.android.library.jacoco)
16+
}
1617

1718
android {
1819
namespace = "com.mifos.feature.groups"
1920
}
2021

21-
dependencies {
22-
implementation(projects.core.domain)
23-
24-
// swipe refresh
25-
implementation(libs.accompanist.swiperefresh)
26-
27-
// paging 3
28-
implementation(libs.androidx.paging.runtime.ktx)
29-
implementation(libs.androidx.paging.compose)
30-
31-
//DBFlow dependencies
32-
implementation(libs.dbflow)
33-
34-
androidTestImplementation(libs.androidx.compose.ui.test)
35-
debugApi(libs.androidx.compose.ui.test.manifest)
36-
37-
testImplementation(libs.hilt.android.testing)
38-
testImplementation(projects.core.testing)
22+
kotlin{
23+
sourceSets{
24+
commonMain.dependencies {
25+
// implementation(projects.core.domain)
26+
implementation(compose.material3)
27+
implementation(compose.components.resources)
28+
implementation(compose.ui)
29+
implementation(projects.core.model)
30+
// implementation(projects.core.data)
31+
implementation(projects.core.database)
32+
implementation(projects.core.designsystem)
33+
34+
}
35+
}
36+
}
3937

40-
androidTestImplementation(projects.core.testing)
41-
}
38+
//dependencies {
39+
// implementation(projects.core.domain)
40+
//
41+
// // swipe refresh
42+
// implementation(libs.accompanist.swiperefresh)
43+
//
44+
// // paging 3
45+
// implementation(libs.androidx.paging.runtime.ktx)
46+
// implementation(libs.androidx.paging.compose)
47+
//
48+
// //DBFlow dependencies
49+
// implementation(libs.dbflow)
50+
//
51+
// androidTestImplementation(libs.androidx.compose.ui.test)
52+
// debugApi(libs.androidx.compose.ui.test.manifest)
53+
//
54+
// testImplementation(libs.hilt.android.testing)
55+
// testImplementation(projects.core.testing)
56+
//
57+
// androidTestImplementation(projects.core.testing)
58+
//}

feature/groups/src/main/java/com/mifos/feature/groups/createNewGroup/CreateNewGroupScreen.kt renamed to feature/groups/src/commonMain/kotlin/com/mifos/feature/groups/createNewGroup/CreateNewGroupScreen.kt

Lines changed: 53 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,18 @@
99
*/
1010
package com.mifos.feature.groups.createNewGroup
1111

12-
import android.content.Context
13-
import android.widget.Toast
12+
13+
import androidclient.feature.groups.generated.resources.Res
14+
import androidclient.feature.groups.generated.resources.feature_groups_activation_date
15+
import androidclient.feature.groups.generated.resources.feature_groups_active
16+
import androidclient.feature.groups.generated.resources.feature_groups_create_new_group
17+
import androidclient.feature.groups.generated.resources.feature_groups_dismiss
18+
import androidclient.feature.groups.generated.resources.feature_groups_external_id
19+
import androidclient.feature.groups.generated.resources.feature_groups_groups
20+
import androidclient.feature.groups.generated.resources.feature_groups_name
21+
import androidclient.feature.groups.generated.resources.feature_groups_office_name_mandatory
22+
import androidclient.feature.groups.generated.resources.feature_groups_select_date
23+
import androidclient.feature.groups.generated.resources.feature_groups_submit
1424
import androidx.compose.animation.AnimatedVisibility
1525
import androidx.compose.animation.expandVertically
1626
import androidx.compose.animation.fadeIn
@@ -50,12 +60,8 @@ import androidx.compose.runtime.saveable.rememberSaveable
5060
import androidx.compose.runtime.setValue
5161
import androidx.compose.ui.Alignment
5262
import androidx.compose.ui.Modifier
53-
import androidx.compose.ui.platform.LocalContext
5463
import androidx.compose.ui.platform.LocalDensity
55-
import androidx.compose.ui.res.stringResource
56-
import androidx.compose.ui.tooling.preview.Preview
57-
import androidx.compose.ui.tooling.preview.PreviewParameter
58-
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
64+
import androidx.compose.ui.text.intl.Locale
5965
import androidx.compose.ui.unit.dp
6066
import androidx.lifecycle.compose.collectAsStateWithLifecycle
6167
import com.mifos.core.designsystem.component.MifosCircularProgress
@@ -65,12 +71,10 @@ import com.mifos.core.designsystem.component.MifosScaffold
6571
import com.mifos.core.designsystem.component.MifosSweetError
6672
import com.mifos.core.designsystem.component.MifosTextFieldDropdown
6773
import com.mifos.core.model.objects.responses.SaveResponse
68-
import com.mifos.feature.groups.R
6974
import com.mifos.room.entities.group.GroupPayloadEntity
7075
import com.mifos.room.entities.organisation.OfficeEntity
71-
import org.koin.androidx.compose.koinViewModel
72-
import java.text.SimpleDateFormat
73-
import java.util.Locale
76+
import org.jetbrains.compose.resources.stringResource
77+
import org.koin.compose.viewmodel.koinViewModel
7478

7579
/**
7680
* Created by Pronay Sarker on 30/06/2024 (7:53 AM)
@@ -113,7 +117,7 @@ internal fun CreateNewGroupScreen(
113117

114118
MifosScaffold(
115119
modifier = modifier,
116-
title = stringResource(id = R.string.feature_groups_create_new_group),
120+
title = stringResource(Res.string.feature_groups_create_new_group),
117121
onBackPressed = {},
118122
snackbarHostState = snackbarHostState,
119123
) { paddingValues ->
@@ -125,7 +129,7 @@ internal fun CreateNewGroupScreen(
125129
when (uiState) {
126130
is CreateNewGroupUiState.ShowFetchingError -> {
127131
MifosSweetError(
128-
message = uiState.message,
132+
message = stringResource(uiState.message),
129133
onclick = { onRetry.invoke() },
130134
)
131135
}
@@ -181,6 +185,7 @@ private fun CreateNewGroupContent(
181185
val density = LocalDensity.current
182186
val scrollState = rememberScrollState()
183187
var officeId by rememberSaveable { mutableIntStateOf(0) }
188+
//todo
184189
var activationDate by rememberSaveable { mutableLongStateOf(System.currentTimeMillis()) }
185190
var submittedOnDate by rememberSaveable { mutableLongStateOf(System.currentTimeMillis()) }
186191

@@ -222,15 +227,15 @@ private fun CreateNewGroupContent(
222227
submitDatePicker = false
223228
activationDatePicker = false
224229
},
225-
) { Text(stringResource(id = R.string.feature_groups_select_date)) }
230+
) { Text(stringResource(androidclient.feature.groups.generated.resources.Res.string.feature_groups_select_date)) }
226231
},
227232
dismissButton = {
228233
TextButton(
229234
onClick = {
230235
activationDatePicker = false
231236
submitDatePicker = false
232237
},
233-
) { Text(stringResource(id = R.string.feature_groups_dismiss)) }
238+
) { Text(stringResource(Res.string.feature_groups_dismiss)) }
234239
},
235240
) {
236241
DatePicker(state = if (submitDatePicker) sumittedDatePickerState else activateDatePickerState)
@@ -247,7 +252,7 @@ private fun CreateNewGroupContent(
247252
MifosOutlinedTextField(
248253
value = groupName,
249254
onValueChange = { groupName = it },
250-
label = stringResource(id = R.string.feature_groups_name),
255+
label = stringResource(Res.string.feature_groups_name),
251256
error = null,
252257
)
253258

@@ -264,13 +269,14 @@ private fun CreateNewGroupContent(
264269
officeId = it
265270
}
266271
},
267-
label = R.string.feature_groups_office_name_mandatory,
272+
labelString = stringResource(Res.string.feature_groups_office_name_mandatory),
268273
options = officeList.map { it.name.toString() },
269274
readOnly = true,
270275
)
271276

272277
Spacer(modifier = Modifier.height(16.dp))
273278

279+
//todo use kotlin
274280
MifosDatePickerTextField(
275281
value = SimpleDateFormat("dd MMMM yyyy", Locale.getDefault()).format(
276282
submittedOnDate,
@@ -286,7 +292,7 @@ private fun CreateNewGroupContent(
286292
MifosOutlinedTextField(
287293
value = externalId,
288294
onValueChange = { externalId = it },
289-
label = stringResource(id = R.string.feature_groups_external_id),
295+
label = stringResource(Res.string.feature_groups_external_id),
290296
error = null,
291297
)
292298

@@ -303,7 +309,7 @@ private fun CreateNewGroupContent(
303309
checked = isActive,
304310
onCheckedChange = { isActive = !isActive },
305311
)
306-
Text(text = stringResource(id = R.string.feature_groups_active))
312+
Text(text = stringResource(Res.string.feature_groups_active))
307313
}
308314

309315
AnimatedVisibility(
@@ -323,7 +329,8 @@ private fun CreateNewGroupContent(
323329
value = SimpleDateFormat("dd MMMM yyyy", Locale.getDefault()).format(
324330
activationDate,
325331
),
326-
label = stringResource(R.string.feature_groups_activation_date),
332+
333+
label = stringResource(Res.string.feature_groups_activation_date),
327334
openDatePicker = {
328335
activationDatePicker = true
329336
},
@@ -384,11 +391,11 @@ private fun CreateNewGroupContent(
384391
// }
385392
},
386393
) {
387-
Text(text = stringResource(id = R.string.feature_groups_submit))
394+
Text(text = stringResource(Res.string.feature_groups_submit))
388395
}
389396
}
390397
}
391-
398+
// todo move into viewmodels
392399
private fun validateFields(groupName: String, officeName: String, context: Context): Boolean {
393400
return when {
394401
groupName.isEmpty() -> {
@@ -431,27 +438,27 @@ private fun validateFields(groupName: String, officeName: String, context: Conte
431438
}
432439
}
433440

434-
private class CreateNewGroupScreenPreviewProvider : PreviewParameterProvider<CreateNewGroupUiState> {
435-
override val values: Sequence<CreateNewGroupUiState>
436-
get() = sequenceOf(
437-
CreateNewGroupUiState.ShowProgressbar,
438-
CreateNewGroupUiState.ShowOffices(listOf()),
439-
CreateNewGroupUiState.ShowFetchingError("Failed to fetch Offices"),
440-
CreateNewGroupUiState.ShowGroupCreatedSuccessfully(saveResponse = SaveResponse()),
441-
)
442-
}
443-
444-
@Composable
445-
@Preview(showSystemUi = true)
446-
private fun PreviewCreateNewGroupScreen(
447-
@PreviewParameter(CreateNewGroupScreenPreviewProvider::class) createNewGroupUiState: CreateNewGroupUiState,
448-
) {
449-
CreateNewGroupScreen(
450-
uiState = createNewGroupUiState,
451-
onRetry = {},
452-
invokeGroupCreation = {},
453-
onGroupCreated = { _ ->
454-
},
455-
getResponse = { "" },
456-
)
457-
}
441+
//private class CreateNewGroupScreenPreviewProvider : PreviewParameterProvider<CreateNewGroupUiState> {
442+
// override val values: Sequence<CreateNewGroupUiState>
443+
// get() = sequenceOf(
444+
// CreateNewGroupUiState.ShowProgressbar,
445+
// CreateNewGroupUiState.ShowOffices(listOf()),
446+
// CreateNewGroupUiState.ShowFetchingError("Failed to fetch Offices"),
447+
// CreateNewGroupUiState.ShowGroupCreatedSuccessfully(saveResponse = SaveResponse()),
448+
// )
449+
//}
450+
//
451+
//@Composable
452+
//@Preview(showSystemUi = true)
453+
//private fun PreviewCreateNewGroupScreen(
454+
// @PreviewParameter(CreateNewGroupScreenPreviewProvider::class) createNewGroupUiState: CreateNewGroupUiState,
455+
//) {
456+
// CreateNewGroupScreen(
457+
// uiState = createNewGroupUiState,
458+
// onRetry = {},
459+
// invokeGroupCreation = {},
460+
// onGroupCreated = { _ ->
461+
// },
462+
// getResponse = { "" },
463+
// )
464+
//}

feature/groups/src/main/java/com/mifos/feature/groups/createNewGroup/CreateNewGroupUiState.kt renamed to feature/groups/src/commonMain/kotlin/com/mifos/feature/groups/createNewGroup/CreateNewGroupUiState.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ package com.mifos.feature.groups.createNewGroup
1111

1212
import com.mifos.core.model.objects.responses.SaveResponse
1313
import com.mifos.room.entities.organisation.OfficeEntity
14+
import org.jetbrains.compose.resources.StringResource
1415

1516
/**
1617
* Created by Aditya Gupta on 10/08/23.
@@ -19,7 +20,7 @@ sealed class CreateNewGroupUiState {
1920

2021
data object ShowProgressbar : CreateNewGroupUiState()
2122

22-
data class ShowFetchingError(val message: String) : CreateNewGroupUiState()
23+
data class ShowFetchingError(val message: StringResource) : CreateNewGroupUiState()
2324

2425
data class ShowOffices(val offices: List<OfficeEntity>) : CreateNewGroupUiState()
2526

0 commit comments

Comments
 (0)