handle click when have unsaved changes

This commit is contained in:
Avently
2024-11-22 20:14:00 +07:00
parent 3b1e8c800d
commit 39ca03f9c0
3 changed files with 24 additions and 13 deletions
@@ -431,8 +431,10 @@ fun DesktopScreen(userPickerState: MutableStateFlow<AnimatedViewState>) {
.fillMaxSize()
.padding(start = DEFAULT_START_MODAL_WIDTH * fontSizeSqrtMultiplier)
.clickable(interactionSource = remember { MutableInteractionSource() }, indication = null, onClick = {
ModalManager.start.closeModals()
userPickerState.value = AnimatedViewState.HIDING
if (chatModel.centerPanelBackgroundClickHandler == null || chatModel.centerPanelBackgroundClickHandler?.invoke() == false) {
ModalManager.start.closeModals()
userPickerState.value = AnimatedViewState.HIDING
}
})
)
}
@@ -167,6 +167,9 @@ object ChatModel {
val processedCriticalError: ProcessedErrors<AgentErrorType.CRITICAL> = ProcessedErrors(60_000)
val processedInternalError: ProcessedErrors<AgentErrorType.INTERNAL> = ProcessedErrors(20_000)
// return true if you handled the click
var centerPanelBackgroundClickHandler: (() -> Boolean)? = null
fun getUser(userId: Long): User? = if (currentUser.value?.userId == userId) {
currentUser.value
} else {
@@ -52,18 +52,24 @@ fun ModalData.NetworkAndServersView(close: () -> Unit) {
val scope = rememberCoroutineScope()
val proxyPort = remember { derivedStateOf { appPrefs.networkProxy.state.value.port } }
ModalView(
close = {
if (!serversCanBeSaved(currUserServers.value, userServers.value, serverErrors.value)) {
close()
} else {
showUnsavedChangesAlert(
{ scope.launch { saveServers(currentRemoteHost?.remoteHostId, currUserServers, userServers) }},
close
)
}
fun onClose(): Boolean = if (!serversCanBeSaved(currUserServers.value, userServers.value, serverErrors.value)) {
close()
false
} else {
showUnsavedChangesAlert(
{ scope.launch { saveServers(currentRemoteHost?.remoteHostId, currUserServers, userServers) }},
close
)
true
}
DisposableEffect(Unit) {
chatModel.centerPanelBackgroundClickHandler = ::onClose
onDispose {
chatModel.centerPanelBackgroundClickHandler = null
}
) {
}
ModalView(close = ::onClose) {
NetworkAndServersLayout(
currentRemoteHost = currentRemoteHost,
networkUseSocksProxy = networkUseSocksProxy,