diff --git a/presentation/src/main/java/com/signal/signal_android/feature/main/feed/CommentDialog.kt b/presentation/src/main/java/com/signal/signal_android/feature/main/feed/CommentDialog.kt index 2d351907..c7615fae 100644 --- a/presentation/src/main/java/com/signal/signal_android/feature/main/feed/CommentDialog.kt +++ b/presentation/src/main/java/com/signal/signal_android/feature/main/feed/CommentDialog.kt @@ -139,7 +139,7 @@ private fun Comments( Comment( profileImageUrl = it.profile, writer = it.name, - time = it.dateTime.toString(), + time = it.dateTime, content = it.content, onClick = {}, ) diff --git a/presentation/src/main/java/com/signal/signal_android/feature/main/feed/Feed.kt b/presentation/src/main/java/com/signal/signal_android/feature/main/feed/Feed.kt index d41fab49..f00d753c 100644 --- a/presentation/src/main/java/com/signal/signal_android/feature/main/feed/Feed.kt +++ b/presentation/src/main/java/com/signal/signal_android/feature/main/feed/Feed.kt @@ -124,7 +124,7 @@ internal fun Feed( Posts( moveToFeedDetails = moveToFeedDetails, moveToReport = moveToReport, - posts = { state.posts }, + posts = feedViewModel._posts, showDropDown = { feedViewModel.setFeedId(it) expanded = it @@ -254,7 +254,7 @@ private fun Posts( moveToFeedDetails: (feedId: Long) -> Unit, moveToReport: () -> Unit, showDropDown: (feedId: Long) -> Unit, - posts: () -> List, + posts: List, onDismissRequest: () -> Unit, expanded: Long, onDelete: () -> Unit, @@ -274,7 +274,7 @@ private fun Posts( state = lazyListState, modifier = Modifier.fillMaxSize(), ) { - items(posts()) { + items(posts) { Post( moveToFeedDetails = { moveToFeedDetails(it.id) }, imageUrl = it.image, diff --git a/presentation/src/main/java/com/signal/signal_android/feature/main/feed/FeedState.kt b/presentation/src/main/java/com/signal/signal_android/feature/main/feed/FeedState.kt index 42a3478a..4c4256cd 100644 --- a/presentation/src/main/java/com/signal/signal_android/feature/main/feed/FeedState.kt +++ b/presentation/src/main/java/com/signal/signal_android/feature/main/feed/FeedState.kt @@ -8,7 +8,7 @@ import com.signal.domain.entity.PostDetailsEntity import com.signal.domain.enums.Tag data class FeedState( - val posts: SnapshotStateList, + val posts: List, val tag: Tag, val page: Long, val size: Long, @@ -24,7 +24,7 @@ data class FeedState( ) { companion object { fun getDefaultState() = FeedState( - posts = mutableStateListOf(), + posts = emptyList(), tag = Tag.GENERAL, page = 0, size = 10, diff --git a/presentation/src/main/java/com/signal/signal_android/feature/main/feed/FeedViewModel.kt b/presentation/src/main/java/com/signal/signal_android/feature/main/feed/FeedViewModel.kt index 576af8c3..a4d14fd1 100644 --- a/presentation/src/main/java/com/signal/signal_android/feature/main/feed/FeedViewModel.kt +++ b/presentation/src/main/java/com/signal/signal_android/feature/main/feed/FeedViewModel.kt @@ -16,8 +16,9 @@ import kotlinx.coroutines.launch internal class FeedViewModel( private val feedRepository: FeedRepository, ) : BaseViewModel(FeedState.getDefaultState()) { - private val _posts: MutableList = mutableListOf() - private val _comments: SnapshotStateList = mutableStateListOf() + internal val _posts: SnapshotStateList = mutableStateListOf() + private val _comments: SnapshotStateList = + mutableStateListOf() internal fun fetchPosts() { with(state.value) { @@ -29,13 +30,18 @@ internal class FeedViewModel( size = size, ) }.onSuccess { - _posts.addAll(it.postEntities) - setState( - copy( - posts = _posts.toMutableStateList(), - hasNextPage = it.postEntities.isNotEmpty() + with(it.postEntities) { + when (_posts.contains(firstOrNull())) { + true -> _posts.add(last()) + else -> _posts.addAll(this) + } + setState( + copy( + posts = _posts, + hasNextPage = isNotEmpty() + ) ) - ) + } } } } @@ -85,7 +91,7 @@ internal class FeedViewModel( with(state.value) { viewModelScope.launch(Dispatchers.IO) { feedRepository.fetchComments(feedId).onSuccess { - if(_comments.contains(it.comments.first())){ + if (_comments.contains(it.comments.first()) && _comments.size != it.comments.size) { _comments.add(it.comments.last()) } else { _comments.addAll(it.comments) @@ -189,7 +195,12 @@ internal class FeedViewModel( internal fun setTag(tag: Tag) { with(state.value) { - setState(copy(tag = tag)) + setState( + copy( + tag = tag, + page = 0, + ) + ) _posts.clear() fetchPosts() }