1
0
Fork 0
mirror of https://github.com/anyproto/anytype-kotlin.git synced 2025-06-08 05:47:05 +09:00

DROID-3133 Date as an Object | Design review (#1913)

This commit is contained in:
Konstantin Ivanov 2024-12-13 16:01:25 +01:00 committed by Evgenii Kozlov
parent d82f3e0d19
commit 95616ba231
32 changed files with 335 additions and 74 deletions

View file

@ -66,7 +66,7 @@ fun HeaderScreen(
onDateEvent(DateEvent.Header.OnPreviousClick)
},
contentDescription = "Previous day",
painter = painterResource(id = R.drawable.ic_arrow_disclosure_18),
painter = painterResource(id = R.drawable.ic_date_arrow),
contentScale = ContentScale.None
)
when (uiState) {
@ -132,7 +132,7 @@ fun HeaderScreen(
onDateEvent(DateEvent.Header.OnNextClick)
},
contentDescription = "Next day",
painter = painterResource(id = R.drawable.ic_arrow_disclosure_18),
painter = painterResource(id = R.drawable.ic_date_arrow),
contentScale = ContentScale.None
)
}

View file

@ -9,11 +9,13 @@ import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.ime
import androidx.compose.foundation.layout.navigationBars
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.statusBars
import androidx.compose.foundation.layout.windowInsetsPadding
import androidx.compose.foundation.layout.windowInsetsTopHeight
import androidx.compose.foundation.layout.wrapContentHeight
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Scaffold
import androidx.compose.material3.SnackbarDuration
@ -45,7 +47,7 @@ import com.anytypeio.anytype.feature_date.viewmodel.UiNavigationWidget
import com.anytypeio.anytype.feature_date.viewmodel.UiObjectsListState
import com.anytypeio.anytype.feature_date.viewmodel.UiSnackbarState
import com.anytypeio.anytype.feature_date.viewmodel.UiSyncStatusBadgeState
import com.anytypeio.anytype.feature_date.viewmodel.UiSyncStatusWidgetState
import com.anytypeio.anytype.presentation.sync.SyncStatusWidgetState
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
@ -59,7 +61,7 @@ fun DateMainScreen(
uiObjectsListState: UiObjectsListState,
uiNavigationWidget: UiNavigationWidget,
uiFieldsSheetState: UiFieldsSheetState,
uiSyncStatusState: UiSyncStatusWidgetState,
uiSyncStatusState: SyncStatusWidgetState,
uiCalendarState: UiCalendarState,
uiContentState: UiContentState,
uiSnackbarState: UiSnackbarState,
@ -126,7 +128,9 @@ fun DateMainScreen(
modifier = Modifier.height(32.dp)
)
FieldsScreen(
modifier = Modifier.fillMaxWidth().height(40.dp),
modifier = Modifier
.fillMaxWidth()
.height(40.dp),
uiState = uiFieldsState,
onDateEvent = onDateEvent
)
@ -186,19 +190,23 @@ fun DateMainScreen(
SnackbarHost(hostState = snackBarHostState)
}
)
if (uiSyncStatusState is UiSyncStatusWidgetState.Visible) {
Box(
modifier = Modifier.fillMaxSize(),
contentAlignment = Alignment.BottomCenter
) {
SpaceSyncStatusScreen(
uiState = uiSyncStatusState.status,
onDismiss = { onDateEvent(DateEvent.SyncStatusWidget.OnSyncStatusDismiss) },
scope = scope,
onUpdateAppClick = {}
)
}
Box(
modifier = Modifier.fillMaxSize(),
contentAlignment = Alignment.BottomCenter
) {
SpaceSyncStatusScreen(
modifier = Modifier
.fillMaxWidth()
.wrapContentHeight()
.windowInsetsPadding(WindowInsets.ime)
.padding(bottom = 27.dp, start = 8.dp, end = 8.dp),
uiState = uiSyncStatusState,
onDismiss = { onDateEvent(DateEvent.SyncStatusWidget.OnSyncStatusDismiss) },
scope = scope,
onUpdateAppClick = {}
)
}
if (uiFieldsSheetState is UiFieldsSheetState.Visible) {
FieldsSheetScreen(
uiState = uiFieldsSheetState,

View file

@ -24,7 +24,8 @@ fun EmptyScreen() {
Box(
modifier = Modifier
.windowInsetsPadding(WindowInsets.ime)
.fillMaxSize(),
.fillMaxSize()
.padding(bottom = 68.dp),
contentAlignment = Alignment.Center
) {
Text(
@ -32,7 +33,7 @@ fun EmptyScreen() {
.fillMaxWidth()
.padding(horizontal = 32.dp),
text = title,
color = colorResource(id = R.color.text_primary),
color = colorResource(id = R.color.text_secondary),
style = UXBody,
textAlign = TextAlign.Center
)

View file

@ -55,7 +55,6 @@ fun TopToolbarScreen(
StatusBadge(
status = uiSyncStatusBadgeState.status,
modifier = Modifier
.size(20.dp)
.align(Alignment.Center)
)
}

View file

@ -12,7 +12,6 @@ import com.anytypeio.anytype.core_models.primitives.SpaceId
import com.anytypeio.anytype.core_models.primitives.TimestampInSeconds
import com.anytypeio.anytype.feature_date.viewmodel.UiFieldsItem.Loading
import com.anytypeio.anytype.presentation.objects.ObjectIcon
import com.anytypeio.anytype.presentation.sync.SyncStatusWidgetState
data class DateObjectVmParams(
val objectId: Id,
@ -45,11 +44,6 @@ sealed class UiSyncStatusBadgeState {
data class Visible(val status: SpaceSyncAndP2PStatusState) : UiSyncStatusBadgeState()
}
sealed class UiSyncStatusWidgetState {
data object Hidden : UiSyncStatusWidgetState()
data class Visible(val status: SyncStatusWidgetState) : UiSyncStatusWidgetState()
}
data class UiFieldsState(
val items: List<UiFieldsItem>,
val selectedRelationKey: RelationKey? = null,

View file

@ -33,7 +33,6 @@ import com.anytypeio.anytype.feature_date.mapping.toUiObjectsListItem
import com.anytypeio.anytype.feature_date.ui.models.DateEvent
import com.anytypeio.anytype.feature_date.viewmodel.UiContentState.*
import com.anytypeio.anytype.presentation.analytics.AnalyticSpaceHelperDelegate
import com.anytypeio.anytype.presentation.extension.sendAnalyticsAllContentScreen
import com.anytypeio.anytype.presentation.extension.sendAnalyticsClickDateBack
import com.anytypeio.anytype.presentation.extension.sendAnalyticsClickDateCalendarView
import com.anytypeio.anytype.presentation.extension.sendAnalyticsClickDateForward
@ -46,6 +45,7 @@ import com.anytypeio.anytype.presentation.home.navigation
import com.anytypeio.anytype.presentation.objects.getCreateObjectParams
import com.anytypeio.anytype.presentation.search.GlobalSearchViewModel.Companion.DEFAULT_DEBOUNCE_DURATION
import com.anytypeio.anytype.presentation.search.ObjectSearchConstants.defaultKeys
import com.anytypeio.anytype.presentation.sync.SyncStatusWidgetState
import com.anytypeio.anytype.presentation.sync.toSyncStatusWidgetState
import kotlin.collections.map
import kotlin.text.take
@ -105,7 +105,7 @@ class DateObjectViewModel(
val uiContentState = MutableStateFlow<UiContentState>(UiContentState.Idle())
val uiCalendarState = MutableStateFlow<UiCalendarState>(UiCalendarState.Hidden)
val uiSyncStatusWidgetState =
MutableStateFlow<UiSyncStatusWidgetState>(UiSyncStatusWidgetState.Hidden)
MutableStateFlow<SyncStatusWidgetState>(SyncStatusWidgetState.Hidden)
val uiSnackbarState = MutableStateFlow<UiSnackbarState>(UiSnackbarState.Hidden)
val effects = MutableSharedFlow<DateObjectCommand>()
@ -257,10 +257,8 @@ class DateObjectViewModel(
uiSyncStatusBadgeState.value = UiSyncStatusBadgeState.Visible(syncAndP2pState)
val state = uiSyncStatusWidgetState.value
uiSyncStatusWidgetState.value = when (state) {
UiSyncStatusWidgetState.Hidden -> UiSyncStatusWidgetState.Hidden
is UiSyncStatusWidgetState.Visible -> state.copy(
status = syncAndP2pState.toSyncStatusWidgetState()
)
SyncStatusWidgetState.Hidden -> SyncStatusWidgetState.Hidden
else -> syncAndP2pState.toSyncStatusWidgetState()
}
}
}
@ -693,7 +691,7 @@ class DateObjectViewModel(
private fun onSyncStatusWidgetEvent(event: DateEvent.SyncStatusWidget) {
when (event) {
DateEvent.SyncStatusWidget.OnSyncStatusDismiss -> {
uiSyncStatusWidgetState.value = UiSyncStatusWidgetState.Hidden
uiSyncStatusWidgetState.value = SyncStatusWidgetState.Hidden
}
}
}
@ -719,9 +717,7 @@ class DateObjectViewModel(
is DateEvent.TopToolbar.OnSyncStatusClick -> {
uiSyncStatusWidgetState.value =
UiSyncStatusWidgetState.Visible(
status = event.status.toSyncStatusWidgetState()
)
event.status.toSyncStatusWidgetState()
}
}
}