Skip to content

Commit

Permalink
Merge pull request #123 from CrisisCleanup/no-wait-invite
Browse files Browse the repository at this point in the history
No wait invite
  • Loading branch information
hueachilles authored Oct 23, 2024
2 parents 9c1a2ea + 82d1ef4 commit 1e92160
Show file tree
Hide file tree
Showing 6 changed files with 62 additions and 28 deletions.
2 changes: 1 addition & 1 deletion app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ plugins {

android {
defaultConfig {
val buildVersion = 233
val buildVersion = 234
applicationId = "com.crisiscleanup"
versionCode = buildVersion
versionName = "0.9.${buildVersion - 168}"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,6 @@ class CrisisCleanupDataManagementRepository @Inject constructor(
}

private fun isAppDataCleared() = incidentsRepository.incidentCount == 0L &&
worksiteChangeRepository.worksiteChangeCount == 0L &&
worksiteSyncStatDao.getWorksiteSyncStatCount() == 0L
worksiteChangeRepository.worksiteChangeCount == 0L &&
worksiteSyncStatDao.getWorksiteSyncStatCount() == 0L
}
Original file line number Diff line number Diff line change
Expand Up @@ -111,29 +111,14 @@ fun SelectIncidentDialog(
}

else -> {
Column(
RefreshIncidentsView(
isLoadingIncidents,
onRefreshIncidents,
// TODO Common dimensions
Modifier.sizeIn(maxWidth = 300.dp)
.then(listItemModifier),
verticalArrangement = Arrangement.spacedBy(
padding,
alignment = Alignment.CenterVertically,
),
) {
Text(
t("info.no_incidents_to_select"),
style = LocalFontStyles.current.header3,
)

Text(t("info.incident_load_error"))

CrisisCleanupTextButton(
Modifier.align(Alignment.End),
enabled = !isLoadingIncidents,
text = t("actions.retry"),
onClick = onRefreshIncidents,
)
}
padding,
)
}
}
}
Expand Down Expand Up @@ -228,3 +213,32 @@ private fun ColumnScope.IncidentSelectContent(
)
}
}

@Composable
fun RefreshIncidentsView(
isLoadingIncidents: Boolean,
onRefreshIncidents: () -> Unit,
modifier: Modifier = Modifier,
padding: Dp = 16.dp,
) {
val t = LocalAppTranslator.current

Column(
modifier,
verticalArrangement = Arrangement.spacedBy(padding, Alignment.CenterVertically),
) {
Text(
t("info.no_incidents_to_select"),
style = LocalFontStyles.current.header3,
)

Text(t("info.incident_load_error"))

CrisisCleanupTextButton(
Modifier.align(Alignment.End),
enabled = !isLoadingIncidents,
text = t("actions.retry"),
onClick = onRefreshIncidents,
)
}
}
1 change: 1 addition & 0 deletions feature/organizationmanage/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,5 @@ dependencies {
implementation(projects.core.data)
implementation(projects.core.designsystem)
implementation(projects.core.domain)
implementation(projects.core.selectincident)
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import com.crisiscleanup.core.common.log.CrisisCleanupLoggers.Onboarding
import com.crisiscleanup.core.common.log.Logger
import com.crisiscleanup.core.common.network.CrisisCleanupDispatchers.IO
import com.crisiscleanup.core.common.network.Dispatcher
import com.crisiscleanup.core.common.sync.SyncPuller
import com.crisiscleanup.core.common.throttleLatest
import com.crisiscleanup.core.data.IncidentSelectManager
import com.crisiscleanup.core.data.IncidentSelector
Expand Down Expand Up @@ -65,6 +66,7 @@ class InviteTeammateViewModel @Inject constructor(
private val inputValidator: InputValidator,
qrCodeGenerator: QrCodeGenerator,
incidentSelectManager: IncidentSelectManager,
private val syncPuller: SyncPuller,
private val translator: KeyResourceTranslator,
@Dispatcher(IO) private val ioDispatcher: CoroutineDispatcher,
@Logger(Onboarding) private val logger: AppLogger,
Expand Down Expand Up @@ -353,14 +355,19 @@ class InviteTeammateViewModel @Inject constructor(

val sendInviteErrorMessage = MutableStateFlow("")

val isLoadingIncidents = incidentsRepository.isLoading
.stateIn(
scope = viewModelScope,
initialValue = false,
started = SharingStarted.WhileSubscribed(),
)
val isLoading = combine(
isValidatingAccount,
affiliateOrganizationIds,
incidentsData,
::Triple,
::Pair,
)
.map { (b0, affiliateIds, incidents) ->
b0 || affiliateIds == null || incidents is IncidentsData.Loading
.map { (b0, affiliateIds) ->
b0 || affiliateIds == null
}
.stateIn(
scope = viewModelScope,
Expand Down Expand Up @@ -515,6 +522,10 @@ class InviteTeammateViewModel @Inject constructor(
return "$inviteUrl?org-id=${invite.orgId}&user-id=$userId&invite-token=${invite.token}"
}

fun refreshIncidents() {
syncPuller.appPull(true, cancelOngoing = false)
}

fun onSelectOrganization(organization: OrganizationIdName) {
selectedOtherOrg.value = organization
organizationNameQuery.value = organization.name
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ import com.crisiscleanup.core.designsystem.theme.primaryBlueColor
import com.crisiscleanup.core.model.data.EmptyIncident
import com.crisiscleanup.core.model.data.Incident
import com.crisiscleanup.core.model.data.OrganizationIdName
import com.crisiscleanup.core.selectincident.RefreshIncidentsView
import com.crisiscleanup.core.ui.rememberCloseKeyboard
import com.crisiscleanup.core.ui.scrollFlingListener
import com.crisiscleanup.feature.organizationmanage.InviteOrgState
Expand Down Expand Up @@ -487,8 +488,8 @@ private fun DropdownOrganizationItems(
@Composable
private fun NewOrganizationInput(
isEditable: Boolean,
viewModel: InviteTeammateViewModel = hiltViewModel(),
onEndOfInput: () -> Unit = {},
viewModel: InviteTeammateViewModel = hiltViewModel(),
) {
val t = LocalAppTranslator.current

Expand Down Expand Up @@ -580,6 +581,13 @@ private fun NewOrganizationInput(
}
}
}
} else {
val isLoadingIncidents by viewModel.isLoadingIncidents.collectAsStateWithLifecycle()
RefreshIncidentsView(
isLoadingIncidents,
viewModel::refreshIncidents,
listItemModifier,
)
}
}

Expand Down

0 comments on commit 1e92160

Please sign in to comment.