fix(android): extract PendingDialogs from AdminUsersScreen (detekt LongMethod)

AdminUsersScreen body was 65 lines vs the 60 cap because both
dialogs were rendered inline. Pulled them into a single
PendingDialogs helper that takes the two nullable selections + the
clear/confirm callbacks. AdminUsersScreen is back to ~45 lines and
PendingDialogs is ~30.

File function count is still 8 (Screen + UserList + UserRow +
ToggleRow + PendingDialogs + ResetPasswordDialog + DeleteConfirmDialog
+ LoadingCentered), under the 11 cap.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-25 01:48:01 -04:00
parent 2e8124d496
commit d6301f5bdc
@@ -95,24 +95,42 @@ fun AdminUsersScreen(
}
}
PendingDialogs(
resetPasswordFor = resetPasswordFor,
deleteCandidate = deleteCandidate,
onClearReset = { resetPasswordFor = null },
onClearDelete = { deleteCandidate = null },
onConfirmReset = viewModel::resetPassword,
onConfirmDelete = viewModel::delete,
)
}
@Composable
private fun PendingDialogs(
resetPasswordFor: AdminUserRef?,
deleteCandidate: AdminUserRef?,
onClearReset: () -> Unit,
onClearDelete: () -> Unit,
onConfirmReset: (String, String) -> Unit,
onConfirmDelete: (String) -> Unit,
) {
resetPasswordFor?.let { user ->
ResetPasswordDialog(
user = user,
onDismiss = { resetPasswordFor = null },
onDismiss = onClearReset,
onConfirm = { newPassword ->
viewModel.resetPassword(user.id, newPassword)
resetPasswordFor = null
onConfirmReset(user.id, newPassword)
onClearReset()
},
)
}
deleteCandidate?.let { user ->
DeleteConfirmDialog(
user = user,
onDismiss = { deleteCandidate = null },
onDismiss = onClearDelete,
onConfirm = {
viewModel.delete(user.id)
deleteCandidate = null
onConfirmDelete(user.id)
onClearDelete()
},
)
}