properly reverse items
This commit is contained in:
@@ -1,8 +1,5 @@
|
||||
-- videobox."saved_movie" definition
|
||||
|
||||
selectByUserId:
|
||||
SELECT * FROM "saved_movie" WHERE user_id = ? ORDER BY saved_movie_id;
|
||||
|
||||
selectByUserIdAndMovieId:
|
||||
SELECT * FROM "saved_movie" WHERE user_id = ? AND movie_id = ?;
|
||||
|
||||
@@ -22,4 +19,4 @@ SELECT
|
||||
FROM saved_movie AS sm
|
||||
JOIN movie AS m ON sm.movie_id = m.movie_id
|
||||
WHERE sm.user_id = ?
|
||||
ORDER BY sm.saved_movie_id DESC;
|
||||
ORDER BY sm.saved_movie_id ASC;
|
||||
|
||||
+2
-2
@@ -1,7 +1,7 @@
|
||||
package ru.shadowsparky.vbox.shared.presentation
|
||||
|
||||
import androiddev.apps.vbox.client.shared.generated.resources.Res
|
||||
import androiddev.apps.vbox.client.shared.generated.resources.chat_title
|
||||
import androiddev.apps.vbox.client.shared.generated.resources.chat_title_app_bar
|
||||
import androiddev.apps.vbox.client.shared.generated.resources.home
|
||||
import androiddev.apps.vbox.client.shared.generated.resources.recommendations
|
||||
import androiddev.apps.vbox.client.shared.generated.resources.saved_movies
|
||||
@@ -35,7 +35,7 @@ fun createNavigationList(): List<NavigationEntry<Route>> {
|
||||
),
|
||||
NavigationEntry(
|
||||
Route.Chat(),
|
||||
stringResource(Res.string.chat_title),
|
||||
stringResource(Res.string.chat_title_app_bar),
|
||||
painterResource(Res.drawable.svingpt)
|
||||
),
|
||||
NavigationEntry(
|
||||
|
||||
+5
-5
@@ -77,7 +77,7 @@ fun VideoScreen(component: VideoScreenComponent) {
|
||||
items,
|
||||
onRefresh = { component.load() },
|
||||
onShowOverview = { component.showOverview(it) },
|
||||
emptyResource = Res.string.not_found,
|
||||
emptyResource = Res.string.not_found
|
||||
)
|
||||
},
|
||||
appBar = {
|
||||
@@ -125,7 +125,7 @@ fun VideoScreenContent(
|
||||
AnimatedContent(
|
||||
items,
|
||||
content = {
|
||||
VideosInfo(items = items, paddingValues, emptyResource) {
|
||||
VideosInfo(items, paddingValues, emptyResource) {
|
||||
onShowOverview(it.id)
|
||||
}
|
||||
}
|
||||
@@ -136,7 +136,7 @@ fun VideoScreenContent(
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun VideosInfo(
|
||||
private fun VideosInfo(
|
||||
items: List<VideoItem>,
|
||||
paddingValues: PaddingValues,
|
||||
emptyResource: StringResource,
|
||||
@@ -180,7 +180,7 @@ fun VideosInfo(
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun Poster(
|
||||
private fun Poster(
|
||||
imageUrl: String,
|
||||
label: String,
|
||||
onClick: () -> Unit,
|
||||
@@ -255,7 +255,7 @@ fun Poster(
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun VideosNotFound(emptyResource: StringResource) {
|
||||
private fun VideosNotFound(emptyResource: StringResource) {
|
||||
Box(
|
||||
modifier = Modifier.fillMaxSize(),
|
||||
contentAlignment = Alignment.Center
|
||||
|
||||
+1
-2
@@ -8,7 +8,6 @@ import kotlinx.coroutines.flow.flowOf
|
||||
import kotlinx.coroutines.flow.map
|
||||
import org.koin.core.annotation.Factory
|
||||
import org.koin.core.annotation.Named
|
||||
import ru.shadowsparky.ui.nav.RootComponent
|
||||
import ru.shadowsparky.ui.nav.ComponentFactory
|
||||
import ru.shadowsparky.ui.nav.RouteNavigator
|
||||
import ru.shadowsparky.vbox.shared.domain.SavedMovieRepository
|
||||
@@ -50,7 +49,7 @@ class SavedMovieComponent(
|
||||
} else {
|
||||
movies.filter { it.id in ids }
|
||||
}
|
||||
}
|
||||
}.map { it.reversed() }
|
||||
|
||||
fun filterByTag(tagName: String?) {
|
||||
filterTagFlow.tryEmit(tagName)
|
||||
|
||||
-1
@@ -33,7 +33,6 @@ import androidx.compose.material3.Text
|
||||
import androidx.compose.material3.TextField
|
||||
import androidx.compose.material3.TextFieldColors
|
||||
import androidx.compose.material3.TextFieldDefaults
|
||||
import androidx.compose.material3.TopAppBarDefaults
|
||||
import androidx.compose.material3.rememberSearchBarState
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.LaunchedEffect
|
||||
|
||||
+2
-2
@@ -1,10 +1,10 @@
|
||||
package ru.shadowsparky.vbox.shared.presentation.search
|
||||
|
||||
import com.arkivanov.decompose.ComponentContext
|
||||
import kotlinx.coroutines.flow.map
|
||||
import kotlinx.coroutines.launch
|
||||
import org.koin.core.annotation.Factory
|
||||
import org.koin.core.annotation.Named
|
||||
import ru.shadowsparky.ui.nav.RootComponent
|
||||
import ru.shadowsparky.ui.nav.ComponentFactory
|
||||
import ru.shadowsparky.ui.nav.RouteNavigator
|
||||
import ru.shadowsparky.vbox.shared.domain.SearchRepository
|
||||
@@ -19,7 +19,7 @@ class SearchScreenComponent(
|
||||
val doBack: () -> Unit,
|
||||
private val searchRepository: SearchRepository,
|
||||
) : ComponentContext by context {
|
||||
val info = searchRepository.search("")
|
||||
val info = searchRepository.search("").map { it.reversed() }
|
||||
private val componentScope = createComponentScope()
|
||||
|
||||
fun done(request: String) {
|
||||
|
||||
+2
-10
@@ -18,17 +18,14 @@ import androidx.compose.foundation.layout.calculateStartPadding
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.heightIn
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.widthIn
|
||||
import androidx.compose.foundation.lazy.items
|
||||
import androidx.compose.foundation.lazy.rememberLazyListState
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.foundation.text.KeyboardActions
|
||||
import androidx.compose.foundation.text.KeyboardOptions
|
||||
import androidx.compose.foundation.text.selection.SelectionContainer
|
||||
import androidx.compose.foundation.verticalScroll
|
||||
import androidx.compose.material3.Button
|
||||
import androidx.compose.material3.Card
|
||||
import androidx.compose.material3.CardDefaults
|
||||
@@ -144,7 +141,7 @@ private fun ChatContent(
|
||||
|
||||
LaunchedEffect(state.messages.size) {
|
||||
if (state.messages.isNotEmpty()) {
|
||||
listState.animateScrollToItem(state.messages.lastIndex)
|
||||
listState.animateScrollToItem(0)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -218,7 +215,6 @@ private fun MessageBubble(
|
||||
onParseMessage: (String) -> List<TextToken>,
|
||||
onClickLink: (String) -> Unit
|
||||
) {
|
||||
val scrollState = rememberScrollState()
|
||||
val isUser = message.role == ChatRoles.USER
|
||||
val alignment = if (isUser) Alignment.CenterEnd else Alignment.CenterStart
|
||||
val containerColor = if (isUser) MaterialTheme.colorScheme.primaryContainer else MaterialTheme.colorScheme.surfaceVariant
|
||||
@@ -254,11 +250,7 @@ private fun MessageBubble(
|
||||
}
|
||||
}
|
||||
Box(
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
.heightIn(max = 400.dp)
|
||||
.focusable()
|
||||
.verticalScroll(scrollState)
|
||||
,
|
||||
modifier = Modifier.fillMaxWidth().focusable(),
|
||||
contentAlignment = alignment
|
||||
) {
|
||||
Card(
|
||||
|
||||
Reference in New Issue
Block a user