Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor: Migrate Savings account activate fragment to compose #2137

Merged
merged 1 commit into from
Jul 13, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,11 @@ import com.mifos.core.designsystem.theme.BluePrimaryDark
import com.mifos.core.designsystem.theme.DarkGray

@Composable
fun MifosSweetError(message: String, onclick: () -> Unit) {
fun MifosSweetError(
message: String,
isRetryEnabled : Boolean = true,
onclick: () -> Unit
) {
Column(
modifier = Modifier
.fillMaxSize()
Expand Down Expand Up @@ -72,19 +76,21 @@ fun MifosSweetError(message: String, onclick: () -> Unit) {
color = DarkGray
)
)
Spacer(modifier = Modifier.height(20.dp))
Button(
onClick = { onclick() },
contentPadding = PaddingValues(),
colors = ButtonDefaults.buttonColors(
containerColor = if (isSystemInDarkTheme()) BluePrimaryDark else BluePrimary
)
) {
Text(
modifier = Modifier.padding(start = 20.dp, end = 20.dp),
text = stringResource(id = R.string.core_designsystem_try_again),
fontSize = 15.sp
)
if (isRetryEnabled){
Spacer(modifier = Modifier.height(20.dp))
Button(
onClick = { onclick() },
contentPadding = PaddingValues(),
colors = ButtonDefaults.buttonColors(
containerColor = if (isSystemInDarkTheme()) BluePrimaryDark else BluePrimary
)
) {
Text(
modifier = Modifier.padding(start = 20.dp, end = 20.dp),
text = stringResource(id = R.string.core_designsystem_try_again),
fontSize = 15.sp
)
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,20 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.compose.ui.platform.ComposeView
import androidx.compose.ui.platform.ViewCompositionStrategy
import androidx.fragment.app.DialogFragment
import androidx.fragment.app.viewModels
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.findNavController
import androidx.navigation.fragment.navArgs
import com.mifos.core.network.GenericResponse
import com.mifos.core.objects.accounts.savings.DepositType
import com.mifos.mifosxdroid.R
import com.mifos.mifosxdroid.core.MifosBaseFragment
import com.mifos.mifosxdroid.core.util.Toaster
import com.mifos.mifosxdroid.databinding.DialogFragmentApproveSavingsBinding
import com.mifos.mifosxdroid.online.loanaccountdisbursement.LoanAccountDisbursementScreen
import com.mifos.mifosxdroid.uihelpers.MFDatePicker
import com.mifos.mifosxdroid.uihelpers.MFDatePicker.OnDatePickListener
import com.mifos.utils.DateHelper
Expand All @@ -27,128 +32,40 @@ import dagger.hilt.android.AndroidEntryPoint

/**
* Created by Tarun on 01/06/17.
* Fragment to allow user to select a date for account approval.
* It uses the same layout as Savings Account Approve Fragment.
*/
@AndroidEntryPoint
class SavingsAccountActivateFragment : MifosBaseFragment(), OnDatePickListener {
class SavingsAccountActivateFragment : MifosBaseFragment() {

private lateinit var binding: DialogFragmentApproveSavingsBinding
private val arg: SavingsAccountActivateFragmentArgs by navArgs()
private val viewmodel: SavingsAccountActivateViewModel by viewModels()

private lateinit var viewModel: SavingsAccountActivateViewModel

var activationDate: String? = null
var savingsAccountNumber = 0
var savingsAccountType: DepositType? = null
private var mfDatePicker: DialogFragment? = null
private var safeUIBlockingUtility: SafeUIBlockingUtility? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
savingsAccountNumber = arg.savingsAccountNumber
savingsAccountType = arg.type
setHasOptionsMenu(true)
viewmodel.savingsAccountId = arg.savingsAccountNumber
}

override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
// Inflate the layout for this fragment
activity?.actionBar?.setDisplayHomeAsUpEnabled(true)
binding = DialogFragmentApproveSavingsBinding.inflate(inflater, container, false)
viewModel = ViewModelProvider(this)[SavingsAccountActivateViewModel::class.java]
safeUIBlockingUtility = SafeUIBlockingUtility(
requireContext(),
getString(R.string.savings_account_loading_message)
)
showUserInterface()

viewModel.savingsAccountActivateUiState.observe(viewLifecycleOwner) {
when (it) {
is SavingsAccountActivateUiState.ShowError -> {
showProgressbar(false)
showError(it.message)
}

is SavingsAccountActivateUiState.ShowProgressbar -> showProgressbar(true)

is SavingsAccountActivateUiState.ShowSavingAccountActivatedSuccessfully -> {
showProgressbar(false)
showSavingAccountActivatedSuccessfully(it.genericResponse)
}
return ComposeView(requireContext()).apply {
setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
setContent {
SavingsAccountActivateScreen(
navigateBack = { findNavController().popBackStack() }
)
}
}

return binding.root
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)

binding.tvApprovalDate.setOnClickListener {
onClickApprovalDate()
}

binding.btnApproveSavings.setOnClickListener {
onClickActivateSavings()
}
}

private fun showUserInterface() {
binding.etSavingsApprovalReason.visibility = View.GONE
binding.tvApprovalDateOn.text = resources.getString(R.string.activated_on)
mfDatePicker = MFDatePicker.newInsance(this)
binding.tvApprovalDate.text = MFDatePicker.datePickedAsString
activationDate = binding.tvApprovalDate.text.toString()
showActivationDate()
}

private fun onClickActivateSavings() {
val hashMap = HashMap<String, String>()
hashMap["dateFormat"] = "dd MMMM yyyy"
hashMap["activatedOnDate"] = activationDate.toString()
hashMap["locale"] = "en"
viewModel.activateSavings(savingsAccountNumber, hashMap)
}

private fun onClickApprovalDate() {
mfDatePicker?.show(
requireActivity().supportFragmentManager,
FragmentConstants.DFRAG_DATE_PICKER
)
}

override fun onDatePicked(date: String?) {
binding.tvApprovalDate.text = date
activationDate = date
showActivationDate()
}

private fun showActivationDate() {
activationDate = DateHelper.getDateAsStringUsedForCollectionSheetPayload(activationDate)
.replace("-", " ")
}

private fun showSavingAccountActivatedSuccessfully(genericResponse: GenericResponse?) {
Toaster.show(
binding.tvApprovalDateOn,
resources.getString(R.string.savings_account_activated)
)
Toast.makeText(activity, "Savings Activated", Toast.LENGTH_LONG).show()
requireActivity().supportFragmentManager.popBackStack()
override fun onResume() {
super.onResume()
toolbar?.visibility = View.GONE
}

private fun showError(message: String?) {
Toast.makeText(activity, message, Toast.LENGTH_LONG).show()
}

private fun showProgressbar(b: Boolean) {
if (b) {
safeUIBlockingUtility?.safelyBlockUI()
} else {
safeUIBlockingUtility?.safelyUnBlockUI()
}
override fun onPause() {
super.onPause()
toolbar?.visibility = View.VISIBLE
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,154 @@
///*
// * This project is licensed under the open source MPL V2.
// * See https://github.com/openMF/android-client/blob/master/LICENSE.md
// */
//package com.mifos.mifosxdroid.online.savingsaccountactivate
//
//import android.os.Bundle
//import android.view.LayoutInflater
//import android.view.View
//import android.view.ViewGroup
//import android.widget.Toast
//import androidx.fragment.app.DialogFragment
//import androidx.lifecycle.ViewModelProvider
//import androidx.navigation.fragment.navArgs
//import com.mifos.core.network.GenericResponse
//import com.mifos.core.objects.accounts.savings.DepositType
//import com.mifos.mifosxdroid.R
//import com.mifos.mifosxdroid.core.MifosBaseFragment
//import com.mifos.mifosxdroid.core.util.Toaster
//import com.mifos.mifosxdroid.databinding.DialogFragmentApproveSavingsBinding
//import com.mifos.mifosxdroid.uihelpers.MFDatePicker
//import com.mifos.mifosxdroid.uihelpers.MFDatePicker.OnDatePickListener
//import com.mifos.utils.DateHelper
//import com.mifos.utils.FragmentConstants
//import com.mifos.utils.SafeUIBlockingUtility
//import dagger.hilt.android.AndroidEntryPoint
//
///**
// * Created by Tarun on 01/06/17.
// * Fragment to allow user to select a date for account approval.
// * It uses the same layout as Savings Account Approve Fragment.
// */
//@AndroidEntryPoint
//class SavingsAccountActivateFragment : MifosBaseFragment(), OnDatePickListener {
//
// private lateinit var binding: DialogFragmentApproveSavingsBinding
// private val arg: SavingsAccountActivateFragmentArgs by navArgs()
//
// private lateinit var viewModel: SavingsAccountActivateViewModel
//
// var activationDate: String? = null
// var savingsAccountNumber = 0
// var savingsAccountType: DepositType? = null
// private var mfDatePicker: DialogFragment? = null
// private var safeUIBlockingUtility: SafeUIBlockingUtility? = null
// override fun onCreate(savedInstanceState: Bundle?) {
// super.onCreate(savedInstanceState)
// savingsAccountNumber = arg.savingsAccountNumber
// savingsAccountType = arg.type
// setHasOptionsMenu(true)
// }
//
// override fun onCreateView(
// inflater: LayoutInflater,
// container: ViewGroup?,
// savedInstanceState: Bundle?
// ): View {
// // Inflate the layout for this fragment
// activity?.actionBar?.setDisplayHomeAsUpEnabled(true)
// binding = DialogFragmentApproveSavingsBinding.inflate(inflater, container, false)
// viewModel = ViewModelProvider(this)[SavingsAccountActivateViewModel::class.java]
// safeUIBlockingUtility = SafeUIBlockingUtility(
// requireContext(),
// getString(R.string.savings_account_loading_message)
// )
// showUserInterface()
//
// viewModel.savingsAccountActivateUiState.observe(viewLifecycleOwner) {
// when (it) {
// is SavingsAccountActivateUiState.ShowError -> {
// showProgressbar(false)
// showError(it.message)
// }
//
// is SavingsAccountActivateUiState.ShowProgressbar -> showProgressbar(true)
//
// is SavingsAccountActivateUiState.ShowSavingAccountActivatedSuccessfully -> {
// showProgressbar(false)
// showSavingAccountActivatedSuccessfully(it.genericResponse)
// }
// }
// }
//
// return binding.root
// }
//
// override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
// super.onViewCreated(view, savedInstanceState)
//
// binding.tvApprovalDate.setOnClickListener {
// onClickApprovalDate()
// }
//
// binding.btnApproveSavings.setOnClickListener {
// onClickActivateSavings()
// }
// }
//
// private fun showUserInterface() {
// binding.etSavingsApprovalReason.visibility = View.GONE
// binding.tvApprovalDateOn.text = resources.getString(R.string.activated_on)
// mfDatePicker = MFDatePicker.newInsance(this)
// binding.tvApprovalDate.text = MFDatePicker.datePickedAsString
// activationDate = binding.tvApprovalDate.text.toString()
// showActivationDate()
// }
//
// private fun onClickActivateSavings() {
// val hashMap = HashMap<String, String>()
// hashMap["dateFormat"] = "dd MMMM yyyy"
// hashMap["activatedOnDate"] = activationDate.toString()
// hashMap["locale"] = "en"
// viewModel.activateSavings(savingsAccountNumber, hashMap)
// }
//
// private fun onClickApprovalDate() {
// mfDatePicker?.show(
// requireActivity().supportFragmentManager,
// FragmentConstants.DFRAG_DATE_PICKER
// )
// }
//
// override fun onDatePicked(date: String?) {
// binding.tvApprovalDate.text = date
// activationDate = date
// showActivationDate()
// }
//
// private fun showActivationDate() {
// activationDate = DateHelper.getDateAsStringUsedForCollectionSheetPayload(activationDate)
// .replace("-", " ")
// }
//
// private fun showSavingAccountActivatedSuccessfully(genericResponse: GenericResponse?) {
// Toaster.show(
// binding.tvApprovalDateOn,
// resources.getString(R.string.savings_account_activated)
// )
// Toast.makeText(activity, "Savings Activated", Toast.LENGTH_LONG).show()
// requireActivity().supportFragmentManager.popBackStack()
// }
//
// private fun showError(message: String?) {
// Toast.makeText(activity, message, Toast.LENGTH_LONG).show()
// }
//
// private fun showProgressbar(b: Boolean) {
// if (b) {
// safeUIBlockingUtility?.safelyBlockUI()
// } else {
// safeUIBlockingUtility?.safelyUnBlockUI()
// }
// }
//}
Loading
Loading