From 1cce68cf86d85dfbd0def7a5e41210d15ac52226 Mon Sep 17 00:00:00 2001 From: kapmaurya Date: Thu, 21 Aug 2025 11:17:40 +0530 Subject: [PATCH 1/2] Preview Document --- cmp-android/src/main/AndroidManifest.xml | 11 ++++-- cmp-shared/build.gradle.kts | 8 +++++ .../commonMain/kotlin/cmp/shared/SharedApp.kt | 7 ++++ feature/client/build.gradle.kts | 1 + .../src/androidMain/AndroidManifest.xml | 13 +++++++ .../kotlin/com/mifos/feature/client/MyApp.kt | 13 +++++++ .../mifos/feature/client/OpenPdf.android.kt | 23 ++++++++++++ .../src/androidMain/res/xml/file_paths.xml | 4 +++ .../clientDetails/ClientDetailsScreen.kt | 3 ++ .../clientDetails/ClientDetailsViewModel.kt | 35 +++++++++++++++++++ .../com/mifos/feature/client/utils/OpenPdf.kt | 5 +++ .../feature/client/utils/OpenPdf.desktop.kt | 12 +++++++ .../mifos/feature/client/utils/OpenPdf.ios.kt | 11 ++++++ .../documentList/DocumentListScreen.kt | 26 ++++++++++++++ .../documentList/DocumentListViewModel.kt | 17 +++++++++ settings.gradle.kts | 2 ++ 16 files changed, 188 insertions(+), 3 deletions(-) create mode 100644 feature/client/src/androidMain/kotlin/com/mifos/feature/client/MyApp.kt create mode 100644 feature/client/src/androidMain/kotlin/com/mifos/feature/client/OpenPdf.android.kt create mode 100644 feature/client/src/androidMain/res/xml/file_paths.xml create mode 100644 feature/client/src/commonMain/kotlin/com/mifos/feature/client/utils/OpenPdf.kt create mode 100644 feature/client/src/desktopMain/kotlin/com/mifos/feature/client/utils/OpenPdf.desktop.kt create mode 100644 feature/client/src/iosMain/kotlin/com/mifos/feature/client/utils/OpenPdf.ios.kt diff --git a/cmp-android/src/main/AndroidManifest.xml b/cmp-android/src/main/AndroidManifest.xml index 9f7f879e5b0..2fc95031c1d 100644 --- a/cmp-android/src/main/AndroidManifest.xml +++ b/cmp-android/src/main/AndroidManifest.xml @@ -64,14 +64,19 @@ + android:grantUriPermissions="true" + tools:replace="android:authorities"> + + android:resource="@xml/file_paths" + tools:replace="android:resource" /> + + + + + + + + + \ No newline at end of file diff --git a/feature/client/src/androidMain/kotlin/com/mifos/feature/client/MyApp.kt b/feature/client/src/androidMain/kotlin/com/mifos/feature/client/MyApp.kt new file mode 100644 index 00000000000..754efeb0902 --- /dev/null +++ b/feature/client/src/androidMain/kotlin/com/mifos/feature/client/MyApp.kt @@ -0,0 +1,13 @@ +package com.example + +import android.app.Application + +// Global application context (Android only) +lateinit var appContext: Application + +class MyApp : Application() { + override fun onCreate() { + super.onCreate() + appContext = this + } +} diff --git a/feature/client/src/androidMain/kotlin/com/mifos/feature/client/OpenPdf.android.kt b/feature/client/src/androidMain/kotlin/com/mifos/feature/client/OpenPdf.android.kt new file mode 100644 index 00000000000..e44ff19bfee --- /dev/null +++ b/feature/client/src/androidMain/kotlin/com/mifos/feature/client/OpenPdf.android.kt @@ -0,0 +1,23 @@ +package com.mifos.feature.client.utils + +import android.content.Intent +import android.net.Uri +import androidx.core.content.FileProvider +import com.example.appContext +import java.io.File + +actual fun openPdf(path: String) { + val file = File(path) + val uri: Uri = FileProvider.getUriForFile( + appContext, + "${appContext.packageName}.fileprovider", + file + ) + + val intent = Intent(Intent.ACTION_VIEW).apply { + setDataAndType(uri, "application/pdf") + addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) + } + + appContext.startActivity(Intent.createChooser(intent, "Open PDF")) +} diff --git a/feature/client/src/androidMain/res/xml/file_paths.xml b/feature/client/src/androidMain/res/xml/file_paths.xml new file mode 100644 index 00000000000..3197349cc81 --- /dev/null +++ b/feature/client/src/androidMain/res/xml/file_paths.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/feature/client/src/commonMain/kotlin/com/mifos/feature/client/clientDetails/ClientDetailsScreen.kt b/feature/client/src/commonMain/kotlin/com/mifos/feature/client/clientDetails/ClientDetailsScreen.kt index 8039e20f40c..816c9a4cdaf 100644 --- a/feature/client/src/commonMain/kotlin/com/mifos/feature/client/clientDetails/ClientDetailsScreen.kt +++ b/feature/client/src/commonMain/kotlin/com/mifos/feature/client/clientDetails/ClientDetailsScreen.kt @@ -309,6 +309,7 @@ internal fun ClientDetailsScreen( uploadImage = { galleryLauncher.launch() }, + deleteImage = { clientDetailsViewModel.deleteClientImage(clientId) showSelectImageDialog = false @@ -407,6 +408,7 @@ private fun MifosClientDetailsScreen( value = it, ) } + client?.mobileNo?.let { MifosClientDetailsText( icon = MifosIcons.MobileFriendly, @@ -814,6 +816,7 @@ private fun MifosSelectImageDialog( textAlign = TextAlign.Center, ) } + Button( onClick = { deleteImage() }, colors = ButtonDefaults.buttonColors(MaterialTheme.colorScheme.secondary), diff --git a/feature/client/src/commonMain/kotlin/com/mifos/feature/client/clientDetails/ClientDetailsViewModel.kt b/feature/client/src/commonMain/kotlin/com/mifos/feature/client/clientDetails/ClientDetailsViewModel.kt index cf62052d703..94119aa3d2d 100644 --- a/feature/client/src/commonMain/kotlin/com/mifos/feature/client/clientDetails/ClientDetailsViewModel.kt +++ b/feature/client/src/commonMain/kotlin/com/mifos/feature/client/clientDetails/ClientDetailsViewModel.kt @@ -20,10 +20,12 @@ import com.mifos.core.domain.useCases.UploadClientImageUseCase import com.mifos.core.ui.util.imageToByteArray import com.mifos.feature.client.utils.compressImage import com.mifos.feature.client.utils.createImageRequestBody +import com.mifos.feature.client.utils.openPdf import com.mifos.room.entities.accounts.loans.LoanAccountEntity import com.mifos.room.entities.accounts.savings.SavingsAccountEntity import com.mifos.room.entities.client.ClientEntity import io.github.vinceglb.filekit.PlatformFile +import io.github.vinceglb.filekit.path import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.launch @@ -59,6 +61,10 @@ class ClientDetailsViewModel( private val _showLoading = MutableStateFlow(true) val showLoading = _showLoading.asStateFlow() +// private val _lastUploadedFilePath = MutableStateFlow(null) +// val lastUploadedFilePath = _lastUploadedFilePath.asStateFlow() + + init { viewModelScope.launch { getUserProfile() @@ -88,6 +94,30 @@ class ClientDetailsViewModel( } } + private fun uploadImages(id: Int, imageFile: PlatformFile) = viewModelScope.launch { + uploadClientImageUseCase(id, createImageRequestBody(imageFile)).collect { result -> + when (result) { + is DataState.Error -> { + _clientDetailsUiState.value = + ClientDetailsUiState.ShowError(result.message) + _showLoading.value = false + } + + is DataState.Loading -> { + _showLoading.value = true + } + + is DataState.Success -> { + _clientDetailsUiState.value = ClientDetailsUiState.ShowUploadImageSuccessfully( + result.data, + ) + getUserProfile() + _showLoading.value = false + } + } + } + } + fun deleteClientImage(clientId: Int) = viewModelScope.launch { _showLoading.value = true try { @@ -131,7 +161,10 @@ class ClientDetailsViewModel( try { _showLoading.value = true val compressed = compressImage(imageFile, clientId) + // _lastUploadedFilePath.value = compressed.path // Save for preview uploadImage(clientId, compressed) + uploadImages(clientId, compressed) + } catch (e: Exception) { _showLoading.value = false _clientDetailsUiState.value = ClientDetailsUiState.ShowError(e.message ?: "Unexpected error") @@ -150,4 +183,6 @@ class ClientDetailsViewModel( } } } + + } diff --git a/feature/client/src/commonMain/kotlin/com/mifos/feature/client/utils/OpenPdf.kt b/feature/client/src/commonMain/kotlin/com/mifos/feature/client/utils/OpenPdf.kt new file mode 100644 index 00000000000..c46b026dcef --- /dev/null +++ b/feature/client/src/commonMain/kotlin/com/mifos/feature/client/utils/OpenPdf.kt @@ -0,0 +1,5 @@ +package com.mifos.feature.client.utils + + +expect fun openPdf(path: String) + diff --git a/feature/client/src/desktopMain/kotlin/com/mifos/feature/client/utils/OpenPdf.desktop.kt b/feature/client/src/desktopMain/kotlin/com/mifos/feature/client/utils/OpenPdf.desktop.kt new file mode 100644 index 00000000000..17cd75a5bc8 --- /dev/null +++ b/feature/client/src/desktopMain/kotlin/com/mifos/feature/client/utils/OpenPdf.desktop.kt @@ -0,0 +1,12 @@ +package com.mifos.feature.client.utils + + +import java.awt.Desktop +import java.io.File + +actual fun openPdf(path: String) { + val file = File(path) + if (Desktop.isDesktopSupported()) { + Desktop.getDesktop().open(file) + } +} diff --git a/feature/client/src/iosMain/kotlin/com/mifos/feature/client/utils/OpenPdf.ios.kt b/feature/client/src/iosMain/kotlin/com/mifos/feature/client/utils/OpenPdf.ios.kt new file mode 100644 index 00000000000..4c460247301 --- /dev/null +++ b/feature/client/src/iosMain/kotlin/com/mifos/feature/client/utils/OpenPdf.ios.kt @@ -0,0 +1,11 @@ +package com.mifos.feature.client.utils + +import platform.Foundation.NSURL +import platform.UIKit.UIApplication + +actual fun openPdf(path: String) { + val url = NSURL.fileURLWithPath(path) + if (UIApplication.sharedApplication.canOpenURL(url)) { + UIApplication.sharedApplication.openURL(url) + } +} diff --git a/feature/document/src/commonMain/kotlin/com/mifos/feature/document/documentList/DocumentListScreen.kt b/feature/document/src/commonMain/kotlin/com/mifos/feature/document/documentList/DocumentListScreen.kt index c9231639a0c..737e85f3ee3 100644 --- a/feature/document/src/commonMain/kotlin/com/mifos/feature/document/documentList/DocumentListScreen.kt +++ b/feature/document/src/commonMain/kotlin/com/mifos/feature/document/documentList/DocumentListScreen.kt @@ -144,6 +144,9 @@ internal fun DocumentListScreen( onRemovedDocument = { documentId -> viewModel.removeDocument(entityType, entityId, documentId) }, + onPreviewDocument = { documentId -> + + } ) } @@ -159,6 +162,7 @@ internal fun DocumentListScreen( onAddDocument: () -> Unit, onDownloadDocument: (Int) -> Unit, onUpdateDocument: (Document) -> Unit, + onPreviewDocument: (Document) -> Unit, modifier: Modifier = Modifier, onRemovedDocument: (Int) -> Unit, ) { @@ -182,6 +186,11 @@ internal fun DocumentListScreen( selectedDocument?.let { onUpdateDocument(it) } showSelectOptionsDialog = !showSelectOptionsDialog }, + previewDocument={ + selectedDocument?.let{onPreviewDocument(it)} + + }, + removeDocument = { selectedDocument?.id?.let { onRemovedDocument(it) } showSelectOptionsDialog = !showSelectOptionsDialog @@ -323,12 +332,15 @@ private fun DocumentItem( } } + + @Composable private fun SelectOptionsDialog( onDismissRequest: () -> Unit, downloadDocument: () -> Unit, updateDocument: () -> Unit, removeDocument: () -> Unit, + previewDocument: () -> Unit, ) { Dialog( onDismissRequest = { onDismissRequest() }, @@ -382,6 +394,18 @@ private fun SelectOptionsDialog( textAlign = TextAlign.Center, ) } + + MifosButton( + onClick = { previewDocument() }, + ) { + Text( + text = "Preview Document", + modifier = Modifier.fillMaxWidth(), + style = MaterialTheme.typography.bodyLarge, + textAlign = TextAlign.Center, + ) + } + } } } @@ -400,6 +424,7 @@ private class DocumentListUiStateProvider : PreviewParameterProvider Unit) = + viewModelScope.launch { + downloadDocumentUseCase(entityType, entityId, documentId).collect { result -> + when (result) { + is DataState.Success -> { + val localPath: HttpResponse = result.data + // onPreviewReady(localPath) + } + else -> { } + } + } + } + } diff --git a/settings.gradle.kts b/settings.gradle.kts index 1733b452bd1..38437b0765c 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -64,3 +64,5 @@ include(":feature:search") include(":feature:settings") //include(":feature:passcode") include(":feature:search") + + From 0ef08050b8d856643edd729e14e9e1d3a9bc894c Mon Sep 17 00:00:00 2001 From: kapmaurya Date: Thu, 21 Aug 2025 17:34:40 +0530 Subject: [PATCH 2/2] Preview Document --- .../clientDetails/ClientDetailsViewModel.kt | 2 - .../ClientIdentifiersDialogScreen.kt | 2 + .../com/mifos/feature/client/utils/OpenPdf.kt | 5 --- feature/document/build.gradle.kts | 8 +++- .../src/androidMain/AndroidManifest.xml | 37 +++++++++++---- .../mifos/feature/document/utils}/MyApp.kt | 3 +- .../document/utils}/OpenPdf.android.kt | 20 ++++++++- .../documentDialog/DocumentDialogScreen.kt | 45 ++++++++++++++++++- .../documentDialog/DocumentDialogViewModel.kt | 1 + .../document/navigation/DocumentNavigation.kt | 9 ++++ .../mifos/feature/document/utils/OpenPdf.kt | 6 +++ .../document}/utils/OpenPdf.desktop.kt | 5 ++- .../feature/document}/utils/OpenPdf.ios.kt | 5 ++- .../document/src/main/res/values/strings.xml | 3 ++ .../document/src/main/res/values/themes.xml | 3 ++ .../document/src/main/res/xml/file_paths.xml | 4 ++ 16 files changed, 134 insertions(+), 24 deletions(-) delete mode 100644 feature/client/src/commonMain/kotlin/com/mifos/feature/client/utils/OpenPdf.kt rename feature/{client/src/androidMain/kotlin/com/mifos/feature/client => document/src/androidMain/kotlin/com/mifos/feature/document/utils}/MyApp.kt (84%) rename feature/{client/src/androidMain/kotlin/com/mifos/feature/client => document/src/androidMain/kotlin/com/mifos/feature/document/utils}/OpenPdf.android.kt (52%) create mode 100644 feature/document/src/commonMain/kotlin/com/mifos/feature/document/utils/OpenPdf.kt rename feature/{client/src/desktopMain/kotlin/com/mifos/feature/client => document/src/desktopMain/kotlin/com/mifos/feature/document}/utils/OpenPdf.desktop.kt (70%) rename feature/{client/src/iosMain/kotlin/com/mifos/feature/client => document/src/iosMain/kotlin/com/mifos/feature/document}/utils/OpenPdf.ios.kt (76%) create mode 100644 feature/document/src/main/res/values/strings.xml create mode 100644 feature/document/src/main/res/values/themes.xml create mode 100644 feature/document/src/main/res/xml/file_paths.xml diff --git a/feature/client/src/commonMain/kotlin/com/mifos/feature/client/clientDetails/ClientDetailsViewModel.kt b/feature/client/src/commonMain/kotlin/com/mifos/feature/client/clientDetails/ClientDetailsViewModel.kt index 94119aa3d2d..3dfc10f4da5 100644 --- a/feature/client/src/commonMain/kotlin/com/mifos/feature/client/clientDetails/ClientDetailsViewModel.kt +++ b/feature/client/src/commonMain/kotlin/com/mifos/feature/client/clientDetails/ClientDetailsViewModel.kt @@ -20,12 +20,10 @@ import com.mifos.core.domain.useCases.UploadClientImageUseCase import com.mifos.core.ui.util.imageToByteArray import com.mifos.feature.client.utils.compressImage import com.mifos.feature.client.utils.createImageRequestBody -import com.mifos.feature.client.utils.openPdf import com.mifos.room.entities.accounts.loans.LoanAccountEntity import com.mifos.room.entities.accounts.savings.SavingsAccountEntity import com.mifos.room.entities.client.ClientEntity import io.github.vinceglb.filekit.PlatformFile -import io.github.vinceglb.filekit.path import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.launch diff --git a/feature/client/src/commonMain/kotlin/com/mifos/feature/client/clientIdentifiersDialog/ClientIdentifiersDialogScreen.kt b/feature/client/src/commonMain/kotlin/com/mifos/feature/client/clientIdentifiersDialog/ClientIdentifiersDialogScreen.kt index 15899c8eebf..5ffd90af802 100644 --- a/feature/client/src/commonMain/kotlin/com/mifos/feature/client/clientIdentifiersDialog/ClientIdentifiersDialogScreen.kt +++ b/feature/client/src/commonMain/kotlin/com/mifos/feature/client/clientIdentifiersDialog/ClientIdentifiersDialogScreen.kt @@ -263,7 +263,9 @@ private class ClientIdentifiersDialogUiStatePreview : get() = sequenceOf( ClientIdentifierDialogUiState.Loading, ClientIdentifierDialogUiState.Error(Res.string.feature_client_failed_to_load_client_identifiers), + ClientIdentifierDialogUiState.IdentifierCreatedSuccessfully, + ) } diff --git a/feature/client/src/commonMain/kotlin/com/mifos/feature/client/utils/OpenPdf.kt b/feature/client/src/commonMain/kotlin/com/mifos/feature/client/utils/OpenPdf.kt deleted file mode 100644 index c46b026dcef..00000000000 --- a/feature/client/src/commonMain/kotlin/com/mifos/feature/client/utils/OpenPdf.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.mifos.feature.client.utils - - -expect fun openPdf(path: String) - diff --git a/feature/document/build.gradle.kts b/feature/document/build.gradle.kts index b75274e3602..f18af540ae5 100644 --- a/feature/document/build.gradle.kts +++ b/feature/document/build.gradle.kts @@ -31,10 +31,16 @@ kotlin { implementation(libs.filekit.compose) implementation(libs.filekit.dialog.compose) implementation(compose.components.uiToolingPreview) + } } } dependencies { debugImplementation(compose.uiTooling) -} \ No newline at end of file +} + +//dependencies { +// implementation(libs.material) +// +//} \ No newline at end of file diff --git a/feature/document/src/androidMain/AndroidManifest.xml b/feature/document/src/androidMain/AndroidManifest.xml index 1dc76da0f7e..6bd6d8edbc1 100644 --- a/feature/document/src/androidMain/AndroidManifest.xml +++ b/feature/document/src/androidMain/AndroidManifest.xml @@ -1,13 +1,32 @@ - + + + + + + + + + + + + + + - See https://github.com/openMF/android-client/blob/master/LICENSE.md ---> - - \ No newline at end of file + diff --git a/feature/client/src/androidMain/kotlin/com/mifos/feature/client/MyApp.kt b/feature/document/src/androidMain/kotlin/com/mifos/feature/document/utils/MyApp.kt similarity index 84% rename from feature/client/src/androidMain/kotlin/com/mifos/feature/client/MyApp.kt rename to feature/document/src/androidMain/kotlin/com/mifos/feature/document/utils/MyApp.kt index 754efeb0902..450fed43f72 100644 --- a/feature/client/src/androidMain/kotlin/com/mifos/feature/client/MyApp.kt +++ b/feature/document/src/androidMain/kotlin/com/mifos/feature/document/utils/MyApp.kt @@ -1,10 +1,11 @@ -package com.example +package com.mifos.feature.document.utils import android.app.Application // Global application context (Android only) lateinit var appContext: Application + class MyApp : Application() { override fun onCreate() { super.onCreate() diff --git a/feature/client/src/androidMain/kotlin/com/mifos/feature/client/OpenPdf.android.kt b/feature/document/src/androidMain/kotlin/com/mifos/feature/document/utils/OpenPdf.android.kt similarity index 52% rename from feature/client/src/androidMain/kotlin/com/mifos/feature/client/OpenPdf.android.kt rename to feature/document/src/androidMain/kotlin/com/mifos/feature/document/utils/OpenPdf.android.kt index e44ff19bfee..0b22ac916fd 100644 --- a/feature/client/src/androidMain/kotlin/com/mifos/feature/client/OpenPdf.android.kt +++ b/feature/document/src/androidMain/kotlin/com/mifos/feature/document/utils/OpenPdf.android.kt @@ -1,9 +1,8 @@ -package com.mifos.feature.client.utils +package com.mifos.feature.document.utils import android.content.Intent import android.net.Uri import androidx.core.content.FileProvider -import com.example.appContext import java.io.File actual fun openPdf(path: String) { @@ -21,3 +20,20 @@ actual fun openPdf(path: String) { appContext.startActivity(Intent.createChooser(intent, "Open PDF")) } + +actual fun openImage(filePath: String) { + // ✅ Use appContext instead of getApplicationContext() + val file = File(filePath) + val uri = FileProvider.getUriForFile( + appContext, + "${appContext.packageName}.fileprovider", + file + ) + + val intent = Intent(Intent.ACTION_VIEW).apply { + setDataAndType(uri, "image/*") + addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) + } + + appContext.startActivity(intent) +} diff --git a/feature/document/src/commonMain/kotlin/com/mifos/feature/document/documentDialog/DocumentDialogScreen.kt b/feature/document/src/commonMain/kotlin/com/mifos/feature/document/documentDialog/DocumentDialogScreen.kt index a5302a6e9d0..2717196245c 100644 --- a/feature/document/src/commonMain/kotlin/com/mifos/feature/document/documentDialog/DocumentDialogScreen.kt +++ b/feature/document/src/commonMain/kotlin/com/mifos/feature/document/documentDialog/DocumentDialogScreen.kt @@ -66,8 +66,11 @@ import com.mifos.core.designsystem.component.MifosCircularProgress import com.mifos.core.designsystem.component.MifosOutlinedTextField import com.mifos.core.designsystem.icon.MifosIcons import com.mifos.core.model.objects.noncoreobjects.Document +import com.mifos.feature.document.utils.openImage +import com.mifos.feature.document.utils.openPdf import io.github.vinceglb.filekit.PlatformFile import io.github.vinceglb.filekit.name +import io.github.vinceglb.filekit.path import org.jetbrains.compose.resources.StringResource import org.jetbrains.compose.resources.getString import org.jetbrains.compose.resources.stringResource @@ -97,6 +100,7 @@ internal fun DocumentDialogScreen( var fileName by rememberSaveable { mutableStateOf(document?.name) } var fileChosen by rememberSaveable { mutableStateOf(null) } + DocumentDialogScreen( uiState = state, modifier = modifier.background(MaterialTheme.colorScheme.background), @@ -138,6 +142,22 @@ internal fun DocumentDialogScreen( }, filename = fileName, closeScreen = closeScreen, + + onPreviewFile = { // 🔹 Added callback + fileChosen?.let { file -> + val path = file.path ?: return@let + if (file.name.endsWith(".pdf", ignoreCase = true)) { + openPdf(path) // 🔹 Use your expect/actual implementation + } else if ( + file.name.endsWith(".jpg", true) || + file.name.endsWith(".jpeg", true) || + file.name.endsWith(".png", true) + ) { + openImage(path) // 🔹 New expect/actual function for image + } + } + } + ) } @@ -148,12 +168,15 @@ internal fun DocumentDialogScreen( snackbarHostState: SnackbarHostState, document: Document?, openFilePicker: () -> Unit, - closeDialog: () -> Unit?, + closeDialog: () -> Unit, uploadDocument: (String, String) -> Unit, filename: String?, modifier: Modifier = Modifier, closeScreen: () -> Unit, + onPreviewFile: () -> Unit + ) { + when (uiState) { is DocumentDialogUiState.Initial -> { DocumentDialogContent( @@ -163,7 +186,8 @@ internal fun DocumentDialogScreen( openFilePicker = openFilePicker, uploadDocument = uploadDocument, fileName = filename, - modifier = modifier, + onPreviewFile = onPreviewFile, + modifier = modifier ) } @@ -211,7 +235,9 @@ private fun DocumentDialogContent( openFilePicker: () -> Unit, uploadDocument: (String, String) -> Unit, fileName: String?, + onPreviewFile: () -> Unit, modifier: Modifier = Modifier, + ) { var dialogTitle = stringResource(Res.string.feature_document_upload_document) var name by rememberSaveable(stateSaver = TextFieldValue.Saver) { @@ -357,6 +383,17 @@ private fun DocumentDialogContent( onClick = openFilePicker, ) + + Spacer(modifier = Modifier.height(12.dp)) + + if (!fileName.isNullOrEmpty()) { + DialogButton( + text = "Preview File", + onClick = onPreviewFile + ) + Spacer(modifier = Modifier.height(12.dp)) + } + Spacer(modifier = Modifier.height(20.dp)) DialogButton( @@ -388,6 +425,8 @@ private fun DialogButton( } } + + private class DocumentDialogPreviewProvider : PreviewParameterProvider { override val values: Sequence get() = sequenceOf( @@ -415,5 +454,7 @@ private fun DocumentDialogPreview( uploadDocument = { _, _ -> }, filename = "", closeScreen = { }, + onPreviewFile = { } + ) } diff --git a/feature/document/src/commonMain/kotlin/com/mifos/feature/document/documentDialog/DocumentDialogViewModel.kt b/feature/document/src/commonMain/kotlin/com/mifos/feature/document/documentDialog/DocumentDialogViewModel.kt index 0c3857e5aa8..67dcd2f59a3 100644 --- a/feature/document/src/commonMain/kotlin/com/mifos/feature/document/documentDialog/DocumentDialogViewModel.kt +++ b/feature/document/src/commonMain/kotlin/com/mifos/feature/document/documentDialog/DocumentDialogViewModel.kt @@ -65,6 +65,7 @@ class DocumentDialogViewModel( } } + fun resetDialogUiState() { _documentDialogUiState.value = DocumentDialogUiState.Initial } diff --git a/feature/document/src/commonMain/kotlin/com/mifos/feature/document/navigation/DocumentNavigation.kt b/feature/document/src/commonMain/kotlin/com/mifos/feature/document/navigation/DocumentNavigation.kt index 1b9c0a2342e..becedfd0552 100644 --- a/feature/document/src/commonMain/kotlin/com/mifos/feature/document/navigation/DocumentNavigation.kt +++ b/feature/document/src/commonMain/kotlin/com/mifos/feature/document/navigation/DocumentNavigation.kt @@ -9,6 +9,7 @@ */ package com.mifos.feature.document.navigation +import androidx.compose.ui.text.input.KeyboardType.Companion.Uri import androidx.navigation.NavController import androidx.navigation.NavGraphBuilder import androidx.navigation.NavType @@ -39,3 +40,11 @@ fun NavGraphBuilder.documentListScreen( fun NavController.navigateToDocumentListScreen(entityId: Int, entityType: String) { navigate(DocumentScreens.DocumentListScreen.argument(entityId, entityType)) } + + + + + + + + diff --git a/feature/document/src/commonMain/kotlin/com/mifos/feature/document/utils/OpenPdf.kt b/feature/document/src/commonMain/kotlin/com/mifos/feature/document/utils/OpenPdf.kt new file mode 100644 index 00000000000..25de1dacc6b --- /dev/null +++ b/feature/document/src/commonMain/kotlin/com/mifos/feature/document/utils/OpenPdf.kt @@ -0,0 +1,6 @@ +package com.mifos.feature.document.utils + + +expect fun openPdf(path: String) + +expect fun openImage(filePath: String) \ No newline at end of file diff --git a/feature/client/src/desktopMain/kotlin/com/mifos/feature/client/utils/OpenPdf.desktop.kt b/feature/document/src/desktopMain/kotlin/com/mifos/feature/document/utils/OpenPdf.desktop.kt similarity index 70% rename from feature/client/src/desktopMain/kotlin/com/mifos/feature/client/utils/OpenPdf.desktop.kt rename to feature/document/src/desktopMain/kotlin/com/mifos/feature/document/utils/OpenPdf.desktop.kt index 17cd75a5bc8..0ecc1696684 100644 --- a/feature/client/src/desktopMain/kotlin/com/mifos/feature/client/utils/OpenPdf.desktop.kt +++ b/feature/document/src/desktopMain/kotlin/com/mifos/feature/document/utils/OpenPdf.desktop.kt @@ -1,4 +1,4 @@ -package com.mifos.feature.client.utils +package com.mifos.feature.document.utils import java.awt.Desktop @@ -10,3 +10,6 @@ actual fun openPdf(path: String) { Desktop.getDesktop().open(file) } } + +actual fun openImage(filePath: String) { +} \ No newline at end of file diff --git a/feature/client/src/iosMain/kotlin/com/mifos/feature/client/utils/OpenPdf.ios.kt b/feature/document/src/iosMain/kotlin/com/mifos/feature/document/utils/OpenPdf.ios.kt similarity index 76% rename from feature/client/src/iosMain/kotlin/com/mifos/feature/client/utils/OpenPdf.ios.kt rename to feature/document/src/iosMain/kotlin/com/mifos/feature/document/utils/OpenPdf.ios.kt index 4c460247301..753a7a6d50a 100644 --- a/feature/client/src/iosMain/kotlin/com/mifos/feature/client/utils/OpenPdf.ios.kt +++ b/feature/document/src/iosMain/kotlin/com/mifos/feature/document/utils/OpenPdf.ios.kt @@ -1,4 +1,4 @@ -package com.mifos.feature.client.utils +package com.mifos.feature.document.utils import platform.Foundation.NSURL import platform.UIKit.UIApplication @@ -9,3 +9,6 @@ actual fun openPdf(path: String) { UIApplication.sharedApplication.openURL(url) } } + +actual fun openImage(filePath: String) { +} \ No newline at end of file diff --git a/feature/document/src/main/res/values/strings.xml b/feature/document/src/main/res/values/strings.xml new file mode 100644 index 00000000000..3330e714926 --- /dev/null +++ b/feature/document/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ + + Mifos Client + \ No newline at end of file diff --git a/feature/document/src/main/res/values/themes.xml b/feature/document/src/main/res/values/themes.xml new file mode 100644 index 00000000000..f11f7450a82 --- /dev/null +++ b/feature/document/src/main/res/values/themes.xml @@ -0,0 +1,3 @@ + + + diff --git a/feature/document/src/main/res/xml/file_paths.xml b/feature/document/src/main/res/xml/file_paths.xml new file mode 100644 index 00000000000..3197349cc81 --- /dev/null +++ b/feature/document/src/main/res/xml/file_paths.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file