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:
parent
d82f3e0d19
commit
95616ba231
32 changed files with 335 additions and 74 deletions
|
@ -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
|
||||
)
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
)
|
||||
|
|
|
@ -55,7 +55,6 @@ fun TopToolbarScreen(
|
|||
StatusBadge(
|
||||
status = uiSyncStatusBadgeState.status,
|
||||
modifier = Modifier
|
||||
.size(20.dp)
|
||||
.align(Alignment.Center)
|
||||
)
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue