9
9
*/
10
10
package com.mifos.feature.groups.createNewGroup
11
11
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
14
24
import androidx.compose.animation.AnimatedVisibility
15
25
import androidx.compose.animation.expandVertically
16
26
import androidx.compose.animation.fadeIn
@@ -50,12 +60,8 @@ import androidx.compose.runtime.saveable.rememberSaveable
50
60
import androidx.compose.runtime.setValue
51
61
import androidx.compose.ui.Alignment
52
62
import androidx.compose.ui.Modifier
53
- import androidx.compose.ui.platform.LocalContext
54
63
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
59
65
import androidx.compose.ui.unit.dp
60
66
import androidx.lifecycle.compose.collectAsStateWithLifecycle
61
67
import com.mifos.core.designsystem.component.MifosCircularProgress
@@ -65,12 +71,10 @@ import com.mifos.core.designsystem.component.MifosScaffold
65
71
import com.mifos.core.designsystem.component.MifosSweetError
66
72
import com.mifos.core.designsystem.component.MifosTextFieldDropdown
67
73
import com.mifos.core.model.objects.responses.SaveResponse
68
- import com.mifos.feature.groups.R
69
74
import com.mifos.room.entities.group.GroupPayloadEntity
70
75
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
74
78
75
79
/* *
76
80
* Created by Pronay Sarker on 30/06/2024 (7:53 AM)
@@ -113,7 +117,7 @@ internal fun CreateNewGroupScreen(
113
117
114
118
MifosScaffold (
115
119
modifier = modifier,
116
- title = stringResource(id = R .string.feature_groups_create_new_group),
120
+ title = stringResource(Res .string.feature_groups_create_new_group),
117
121
onBackPressed = {},
118
122
snackbarHostState = snackbarHostState,
119
123
) { paddingValues ->
@@ -125,7 +129,7 @@ internal fun CreateNewGroupScreen(
125
129
when (uiState) {
126
130
is CreateNewGroupUiState .ShowFetchingError -> {
127
131
MifosSweetError (
128
- message = uiState.message,
132
+ message = stringResource( uiState.message) ,
129
133
onclick = { onRetry.invoke() },
130
134
)
131
135
}
@@ -181,6 +185,7 @@ private fun CreateNewGroupContent(
181
185
val density = LocalDensity .current
182
186
val scrollState = rememberScrollState()
183
187
var officeId by rememberSaveable { mutableIntStateOf(0 ) }
188
+ // todo
184
189
var activationDate by rememberSaveable { mutableLongStateOf(System .currentTimeMillis()) }
185
190
var submittedOnDate by rememberSaveable { mutableLongStateOf(System .currentTimeMillis()) }
186
191
@@ -222,15 +227,15 @@ private fun CreateNewGroupContent(
222
227
submitDatePicker = false
223
228
activationDatePicker = false
224
229
},
225
- ) { Text (stringResource(id = R .string.feature_groups_select_date)) }
230
+ ) { Text (stringResource(androidclient.feature.groups.generated.resources. Res .string.feature_groups_select_date)) }
226
231
},
227
232
dismissButton = {
228
233
TextButton (
229
234
onClick = {
230
235
activationDatePicker = false
231
236
submitDatePicker = false
232
237
},
233
- ) { Text (stringResource(id = R .string.feature_groups_dismiss)) }
238
+ ) { Text (stringResource(Res .string.feature_groups_dismiss)) }
234
239
},
235
240
) {
236
241
DatePicker (state = if (submitDatePicker) sumittedDatePickerState else activateDatePickerState)
@@ -247,7 +252,7 @@ private fun CreateNewGroupContent(
247
252
MifosOutlinedTextField (
248
253
value = groupName,
249
254
onValueChange = { groupName = it },
250
- label = stringResource(id = R .string.feature_groups_name),
255
+ label = stringResource(Res .string.feature_groups_name),
251
256
error = null ,
252
257
)
253
258
@@ -264,13 +269,14 @@ private fun CreateNewGroupContent(
264
269
officeId = it
265
270
}
266
271
},
267
- label = R .string.feature_groups_office_name_mandatory,
272
+ labelString = stringResource( Res .string.feature_groups_office_name_mandatory) ,
268
273
options = officeList.map { it.name.toString() },
269
274
readOnly = true ,
270
275
)
271
276
272
277
Spacer (modifier = Modifier .height(16 .dp))
273
278
279
+ // todo use kotlin
274
280
MifosDatePickerTextField (
275
281
value = SimpleDateFormat (" dd MMMM yyyy" , Locale .getDefault()).format(
276
282
submittedOnDate,
@@ -286,7 +292,7 @@ private fun CreateNewGroupContent(
286
292
MifosOutlinedTextField (
287
293
value = externalId,
288
294
onValueChange = { externalId = it },
289
- label = stringResource(id = R .string.feature_groups_external_id),
295
+ label = stringResource(Res .string.feature_groups_external_id),
290
296
error = null ,
291
297
)
292
298
@@ -303,7 +309,7 @@ private fun CreateNewGroupContent(
303
309
checked = isActive,
304
310
onCheckedChange = { isActive = ! isActive },
305
311
)
306
- Text (text = stringResource(id = R .string.feature_groups_active))
312
+ Text (text = stringResource(Res .string.feature_groups_active))
307
313
}
308
314
309
315
AnimatedVisibility (
@@ -323,7 +329,8 @@ private fun CreateNewGroupContent(
323
329
value = SimpleDateFormat (" dd MMMM yyyy" , Locale .getDefault()).format(
324
330
activationDate,
325
331
),
326
- label = stringResource(R .string.feature_groups_activation_date),
332
+
333
+ label = stringResource(Res .string.feature_groups_activation_date),
327
334
openDatePicker = {
328
335
activationDatePicker = true
329
336
},
@@ -384,11 +391,11 @@ private fun CreateNewGroupContent(
384
391
// }
385
392
},
386
393
) {
387
- Text (text = stringResource(id = R .string.feature_groups_submit))
394
+ Text (text = stringResource(Res .string.feature_groups_submit))
388
395
}
389
396
}
390
397
}
391
-
398
+ // todo move into viewmodels
392
399
private fun validateFields (groupName : String , officeName : String , context : Context ): Boolean {
393
400
return when {
394
401
groupName.isEmpty() -> {
@@ -431,27 +438,27 @@ private fun validateFields(groupName: String, officeName: String, context: Conte
431
438
}
432
439
}
433
440
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
+ // }
0 commit comments