Skip to content

Commit

Permalink
applying Detekt (#2241)
Browse files Browse the repository at this point in the history
  • Loading branch information
Darkeye14 authored Nov 29, 2024
1 parent 9c6958e commit 8aa5800
Show file tree
Hide file tree
Showing 3 changed files with 73 additions and 135 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -46,14 +46,15 @@ import androidx.compose.material3.TopAppBar
import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.State
import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableIntStateOf
import androidx.compose.runtime.mutableStateListOf
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import androidx.compose.runtime.snapshots.SnapshotStateList
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
Expand Down Expand Up @@ -84,11 +85,11 @@ import com.mifos.feature.checker_inbox_task.R
import java.sql.Timestamp

@Composable
internal fun CheckerInboxScreen(
internal fun CheckerInboxScreen(
onBackPressed: () -> Unit,
viewModel: CheckerInboxViewModel = hiltViewModel(),
) {
val context = LocalContext.current
val viewModel: CheckerInboxViewModel = hiltViewModel()
val state by viewModel.checkerInboxUiState.collectAsStateWithLifecycle()
var isDialogBoxActive by rememberSaveable { mutableStateOf(false) }
var searchQuery by rememberSaveable { mutableStateOf("") }
Expand Down Expand Up @@ -201,7 +202,6 @@ private fun CheckerInboxScreen(
onApprove: (Int) -> Unit,
onReject: (Int) -> Unit,
onDelete: (Int) -> Unit,
onRetry: () -> Unit = {},
onApproveList: (List<Int>) -> Unit,
onRejectList: (List<Int>) -> Unit,
onDeleteList: (List<Int>) -> Unit,
Expand All @@ -211,6 +211,7 @@ private fun CheckerInboxScreen(
isSearching: Boolean,
filteredList: List<CheckerTask>,
setList: (List<CheckerTask>) -> Unit,
onRetry: () -> Unit = {},
) {
val snackbarHostState = remember { SnackbarHostState() }
var searchInbox by rememberSaveable { mutableStateOf("") }
Expand All @@ -221,20 +222,20 @@ private fun CheckerInboxScreen(
var deleteId by rememberSaveable { mutableIntStateOf(0) }
var showDeleteDialog by rememberSaveable { mutableStateOf(false) }
var isInSelectionMode by rememberSaveable { mutableStateOf(false) }
val selectedItems = remember { mutableStateListOf<Int>() }
val selectedItemsState = remember { SelectedItemsState() }
var fetchedList: List<CheckerTask> = listOf()
val resetSelectionMode = {
isInSelectionMode = false
selectedItems.clear()
selectedItemsState.clear()
}
BackHandler(enabled = isInSelectionMode) {
resetSelectionMode()
}
LaunchedEffect(
key1 = isInSelectionMode,
key2 = selectedItems.size,
key2 = selectedItemsState.size(),
) {
if (isInSelectionMode && selectedItems.isEmpty()) {
if (isInSelectionMode && selectedItemsState.size() == 0) {
isInSelectionMode = false
}
}
Expand Down Expand Up @@ -279,11 +280,11 @@ private fun CheckerInboxScreen(
topBar = {
if (isInSelectionMode) {
SelectionModeTopAppBar(
itemCount = selectedItems.size,
itemCount = selectedItemsState.size(),
resetSelectionMode = resetSelectionMode,
actions = {
IconButton(onClick = {
onApproveList(selectedItems)
onApproveList(selectedItemsState.selectedItems.value)
resetSelectionMode()
}) {
Icon(
Expand All @@ -293,7 +294,7 @@ private fun CheckerInboxScreen(
)
}
IconButton(onClick = {
onRejectList(selectedItems)
onRejectList(selectedItemsState.selectedItems.value)
resetSelectionMode()
}) {
Icon(
Expand All @@ -303,7 +304,7 @@ private fun CheckerInboxScreen(
)
}
IconButton(onClick = {
onDeleteList(selectedItems)
onDeleteList(selectedItemsState.selectedItems.value)
resetSelectionMode()
}) {
Icon(
Expand Down Expand Up @@ -411,7 +412,7 @@ private fun CheckerInboxScreen(
showDeleteDialog = true
},
isInSelectionMode = isInSelectionMode,
selectedItems = selectedItems,
selectedItemsState = selectedItemsState,
selectedMode = {
isInSelectionMode = true
},
Expand Down Expand Up @@ -448,7 +449,7 @@ private fun CheckerInboxContent(
onReject: (Int) -> Unit,
onDelete: (Int) -> Unit,
isInSelectionMode: Boolean,
selectedItems: SnapshotStateList<Int>,
selectedItemsState: SelectedItemsState,
selectedMode: () -> Unit,
) {
LazyColumn {
Expand All @@ -459,24 +460,51 @@ private fun CheckerInboxContent(
onReject = onReject,
onDelete = onDelete,
isInSelectionMode = isInSelectionMode,
selectedItems = selectedItems,
selectedItemsState = selectedItemsState,
selectedMode = selectedMode,
)
}
}
}

class SelectedItemsState(initialSelectedItems: List<Int> = emptyList()) {
private val _selectedItems = mutableStateListOf<Int>().also { it.addAll(initialSelectedItems) }
val selectedItems: State<List<Int>> = derivedStateOf { _selectedItems }

fun add(itemId: Int) {
_selectedItems.add(itemId)
}

fun remove(itemId: Int) {
_selectedItems.remove(itemId)
}

fun contains(itemId: Int): Boolean {
return _selectedItems.contains(itemId)
}

fun clear() {
_selectedItems.clear()
}

fun size(): Int {
return _selectedItems.size
}
}

@Composable
private fun CheckerInboxItem(
checkerTask: CheckerTask,
onApprove: (Int) -> Unit,
onReject: (Int) -> Unit,
onDelete: (Int) -> Unit,
isInSelectionMode: Boolean,
selectedItems: SnapshotStateList<Int>,
selectedItemsState: SelectedItemsState,
selectedMode: () -> Unit,
) {
val isSelected = selectedItems.contains(checkerTask.id)
val selectedItems by selectedItemsState.selectedItems
val isSelected = selectedItemsState.contains(checkerTask.id)

var cardColor by remember { mutableStateOf(White) }

var expendCheckerTask by remember { mutableStateOf(false) }
Expand All @@ -488,10 +516,10 @@ private fun CheckerInboxItem(
onClick = {
if (isInSelectionMode) {
cardColor = if (isSelected) {
selectedItems.remove(checkerTask.id)
selectedItemsState.remove(checkerTask.id)
White
} else {
selectedItems.add(checkerTask.id)
selectedItemsState.add(checkerTask.id)
LightGray
}
} else {
Expand All @@ -501,15 +529,15 @@ private fun CheckerInboxItem(
onLongClick = {
if (isInSelectionMode) {
cardColor = if (isSelected) {
selectedItems.remove(checkerTask.id)
selectedItemsState.remove(checkerTask.id)
White
} else {
selectedItems.add(checkerTask.id)
selectedItemsState.add(checkerTask.id)
LightGray
}
} else {
selectedMode()
selectedItems.add(checkerTask.id)
selectedItemsState.add(checkerTask.id)
cardColor = LightGray
}
},
Expand Down Expand Up @@ -652,116 +680,26 @@ private fun getFilteredList(
}
}

val filteredList = mutableListOf<CheckerTask>()
val aLL = "ALL"
if (!resourceId.isNullOrEmpty()) {
// If resource id is available there is no need to check for other filter options
for (checkerTask in checkerList) {
if (resourceId == checkerTask.resourceId) {
filteredList.add(checkerTask)
}
}
return filteredList
} else {
// Resource Id is not available.
// If Clear Filter clicked
if (fromDate == null && toDate == null) {
return checkerList
} else if (fromDate == null) {
// From Date is not available
if (action == aLL && entity == aLL) {
// No need to check for Action and Entity
for (checkerTask in checkerList) {
if (!checkerTask.getTimeStamp().after(toDate)) {
filteredList.add(checkerTask)
}
}
return filteredList
} else if (action == aLL) {
// Entity has a specific value
for (checkerTask in checkerList) {
if (checkerTask.getTimeStamp().before(toDate)) {
if (entity.equals(checkerTask.entityName, true)) {
filteredList.add(checkerTask)
}
}
}
return filteredList
} else if (entity == aLL) {
// Action has a specific value
for (checkerTask in checkerList) {
if (checkerTask.getTimeStamp().before(toDate)) {
if (action.equals(checkerTask.actionName, true)) {
filteredList.add(checkerTask)
}
}
}
return filteredList
} else {
// Both Action and Entity have specific values
for (checkerTask in checkerList) {
if (checkerTask.getTimeStamp().before(toDate)) {
if (action.equals(checkerTask.actionName, true) &&
entity.equals(checkerTask.entityName, true)
) {
filteredList.add(checkerTask)
}
}
}
return filteredList
}
return checkerList.filter { resourceId == it.resourceId }
}

if (fromDate == null && toDate == null) {
return checkerList
}

val aLL = "ALL"
return checkerList.filter { checkerTask ->
val isDateInRange = if (fromDate == null) {
!checkerTask.getTimeStamp().after(toDate)
} else {
// Both dates are available
if (action == aLL && entity == aLL) {
// No need to check for Action and Entity
for (checkerTask in checkerList) {
if (checkerTask.getTimeStamp().after(fromDate) &&
checkerTask.getTimeStamp().before(toDate)
) {
filteredList.add(checkerTask)
}
}
return filteredList
} else if (action == aLL) {
// Entity has a specific value
for (checkerTask in checkerList) {
if (checkerTask.getTimeStamp().after(fromDate) &&
checkerTask.getTimeStamp().before(toDate)
) {
if (entity.equals(checkerTask.entityName, true)) {
filteredList.add(checkerTask)
}
}
}
return filteredList
} else if (entity == aLL) {
// Action has a specific value
for (checkerTask in checkerList) {
if (checkerTask.getTimeStamp().after(fromDate) &&
checkerTask.getTimeStamp().before(toDate)
) {
if (action.equals(checkerTask.actionName, true)) {
filteredList.add(checkerTask)
}
}
}
return filteredList
} else {
// Both Action and Entity have specific values
for (checkerTask in checkerList) {
if (checkerTask.getTimeStamp().after(fromDate) &&
checkerTask.getTimeStamp().before(toDate)
) {
if (action.equals(checkerTask.actionName, true) &&
entity.equals(checkerTask.entityName, true)
) {
filteredList.add(checkerTask)
}
}
}
return filteredList
}
checkerTask.getTimeStamp().after(fromDate) && checkerTask.getTimeStamp().before(toDate)
}

val isActionMatch = action == aLL || action.equals(checkerTask.actionName, true)
val isEntityMatch = entity == aLL || entity.equals(checkerTask.entityName, true)

isDateInRange && isActionMatch && isEntityMatch
}
}

Expand All @@ -785,7 +723,7 @@ private fun CheckerInboxItemPreview() {
onReject = {},
onDelete = {},
isInSelectionMode = false,
selectedItems = remember { mutableStateListOf() },
selectedItemsState = SelectedItemsState(),
selectedMode = {},
)
}
Expand All @@ -799,7 +737,7 @@ private fun CheckerInboxContentPreview() {
onReject = {},
onDelete = {},
isInSelectionMode = false,
selectedItems = remember { mutableStateListOf() },
selectedItemsState = SelectedItemsState(),
selectedMode = {},
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,8 +79,8 @@ internal fun CheckerInboxTasksFilterDialog(
action: String?,
entity: String?,
resourceId: String?,
viewModel: CheckerInboxViewModel = hiltViewModel(),
) {
val viewModel: CheckerInboxViewModel = hiltViewModel()
val searchTemplate by viewModel.searchTemplate.collectAsStateWithLifecycle()
LaunchedEffect(key1 = true) {
viewModel.loadSearchTemplate()
Expand Down Expand Up @@ -279,7 +279,7 @@ private fun CheckerInboxTasksFilterDialog(

MifosTextFieldDropdown(
value = action,
onValueChanged = { it ->
onValueChanged = {
action = it
},
readOnly = true,
Expand All @@ -295,7 +295,7 @@ private fun CheckerInboxTasksFilterDialog(

MifosTextFieldDropdown(
value = entity,
onValueChanged = { it ->
onValueChanged = {
entity = it
},
readOnly = true,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,9 +48,9 @@ import com.mifos.feature.checker_inbox_task.R

@Composable
internal fun CheckerInboxTasksScreen(
checkerInboxTasksViewModel: CheckerInboxTasksViewModel = hiltViewModel(),
onBackPressed: () -> Unit,
checkerInbox: () -> Unit,
checkerInboxTasksViewModel: CheckerInboxTasksViewModel = hiltViewModel(),
) {
val state =
checkerInboxTasksViewModel.checkerInboxTasksUiState.collectAsStateWithLifecycle().value
Expand Down

0 comments on commit 8aa5800

Please sign in to comment.