2023-11-08 23:23:20 +01:00
|
|
|
package org.thoughtcrime.securesms.groups.compose
|
|
|
|
|
2023-11-09 02:15:55 +01:00
|
|
|
import androidx.compose.foundation.clickable
|
|
|
|
import androidx.compose.foundation.layout.fillMaxSize
|
|
|
|
import androidx.compose.material.Text
|
2023-11-08 23:23:20 +01:00
|
|
|
import androidx.compose.runtime.Composable
|
|
|
|
import androidx.compose.runtime.collectAsState
|
|
|
|
import androidx.compose.runtime.getValue
|
2023-11-09 02:15:55 +01:00
|
|
|
import androidx.compose.runtime.mutableStateOf
|
2023-11-08 23:23:20 +01:00
|
|
|
import androidx.compose.runtime.remember
|
2023-11-09 02:15:55 +01:00
|
|
|
import androidx.compose.runtime.setValue
|
|
|
|
import androidx.compose.ui.Modifier
|
2023-11-08 23:23:20 +01:00
|
|
|
import androidx.lifecycle.ViewModel
|
|
|
|
import androidx.lifecycle.viewModelScope
|
|
|
|
import app.cash.molecule.RecompositionMode.Immediate
|
|
|
|
import app.cash.molecule.launchMolecule
|
|
|
|
import com.ramcosta.composedestinations.annotation.Destination
|
|
|
|
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
|
2023-11-09 02:15:55 +01:00
|
|
|
import dagger.assisted.Assisted
|
|
|
|
import dagger.assisted.AssistedFactory
|
|
|
|
import dagger.assisted.AssistedInject
|
2023-11-08 23:23:20 +01:00
|
|
|
import org.session.libsession.database.StorageProtocol
|
|
|
|
|
|
|
|
@EditGroupNavGraph(start = true)
|
|
|
|
@Composable
|
|
|
|
@Destination
|
|
|
|
fun EditClosedGroupScreen(
|
|
|
|
navigator: DestinationsNavigator,
|
|
|
|
viewModel: EditGroupViewModel
|
|
|
|
) {
|
|
|
|
|
2023-11-09 02:15:55 +01:00
|
|
|
val group by viewModel.viewState.collectAsState()
|
|
|
|
val viewState = group.viewState
|
|
|
|
val eventSink = group.eventSink
|
|
|
|
|
|
|
|
when (viewState) {
|
|
|
|
is EditGroupViewState.Display -> {
|
|
|
|
Text(
|
|
|
|
text = viewState.text,
|
|
|
|
modifier = Modifier.fillMaxSize()
|
|
|
|
.clickable {
|
|
|
|
eventSink(Unit)
|
|
|
|
}
|
|
|
|
)
|
|
|
|
}
|
|
|
|
else -> {
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-11-08 23:23:20 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-11-09 02:15:55 +01:00
|
|
|
class EditGroupViewModel @AssistedInject constructor(
|
|
|
|
@Assisted private val groupSessionId: String,
|
|
|
|
private val storage: StorageProtocol): ViewModel() {
|
2023-11-08 23:23:20 +01:00
|
|
|
|
|
|
|
val viewState = viewModelScope.launchMolecule(Immediate) {
|
|
|
|
|
|
|
|
val closedGroup = remember {
|
2023-11-09 02:15:55 +01:00
|
|
|
storage.getLibSessionClosedGroup(groupSessionId)
|
2023-11-08 23:23:20 +01:00
|
|
|
}
|
|
|
|
|
2023-11-09 02:15:55 +01:00
|
|
|
var displayText by remember {
|
|
|
|
mutableStateOf(closedGroup!!.groupSessionId.hexString())
|
|
|
|
}
|
|
|
|
|
|
|
|
EditGroupState(EditGroupViewState.Display(displayText)) { event ->
|
|
|
|
when (event) {
|
|
|
|
Unit -> displayText = "different"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@AssistedFactory
|
|
|
|
interface Factory {
|
|
|
|
fun create(groupSessionId: String): EditGroupViewModel
|
2023-11-08 23:23:20 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
data class EditGroupState(
|
|
|
|
val viewState: EditGroupViewState,
|
|
|
|
val eventSink: (Unit)->Unit
|
|
|
|
)
|
|
|
|
|
|
|
|
sealed class EditGroupViewState {
|
|
|
|
data object NoOp: EditGroupViewState()
|
2023-11-09 02:15:55 +01:00
|
|
|
data class Display(val text: String) : EditGroupViewState()
|
2023-11-08 23:23:20 +01:00
|
|
|
}
|