Anna преди 6 дни
родител
ревизия
36a5b4c889

+ 0 - 1
Project_exvesta/.idea/misc.xml

@@ -1,4 +1,3 @@
-<?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
   <component name="ExternalStorageConfigurationManager" enabled="true" />
   <component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="jbr-17" project-jdk-type="JavaSDK">

+ 182 - 115
Project_exvesta/app/src/main/java/com/example/exvesta/Screans/Filters.kt

@@ -58,16 +58,17 @@ import androidx.compose.runtime.*
 @Composable
 public  fun Filters(isVisible: Boolean,  onClose: () -> Unit) {
     var styledubs by remember { mutableStateOf<List<Style_dublicate>>(listOf()) }
-    var subdubtype by remember { mutableStateOf<List<Type_subtype_dublicate>>(listOf()) }
-    var dubtype by remember { mutableStateOf<List<Type_dublicate>>(listOf()) }
+    var subdubtypes by remember { mutableStateOf<List<Type_subtype_dublicate>>(listOf()) }
+    var typedubs by remember { mutableStateOf<List<Type_dublicate>>(listOf()) }
     var seasondubs by remember { mutableStateOf<List<Season_dublicate>>(listOf()) }
     var selectedSeasondub by remember { mutableStateOf<Season_dublicate?>(null) }
     var selectedStyledub by remember { mutableStateOf<Style_dublicate?>(null) }
+    var selectedTypedub by remember { mutableStateOf<Type_subtype_dublicate?>(null) }
     LaunchedEffect(Unit) {
         withContext(Dispatchers.IO) {
-            subdubtype = Constants.supabase.from("Type_subtype_dublicate")
+            subdubtypes = Constants.supabase.from("Type_subtype_dublicate")
                 .select().decodeList<Type_subtype_dublicate>()
-            dubtype = Constants.supabase.from("Type_dublicate")
+            typedubs = Constants.supabase.from("Type_dublicate")
                 .select().decodeList<Type_dublicate>()
             seasondubs = Constants.supabase.from("Season_dublicate")
                 .select().decodeList<Season_dublicate>()
@@ -76,6 +77,9 @@ public  fun Filters(isVisible: Boolean,  onClose: () -> Unit) {
             seasondubs.forEach { it ->
                 Log.d("ts", it.title_season)
             }
+            typedubs.forEach { it ->
+                Log.d("ts", it.title_type)
+            }
         }
     }
     if (isVisible) {
@@ -102,17 +106,19 @@ public  fun Filters(isVisible: Boolean,  onClose: () -> Unit) {
             Button(
                 onClick = { onClose() }, // Закрыть выбор фильтров
                 modifier = Modifier.padding(top = 16.dp)
+                    .background( Color(0xFFD05656),shape = ButtonDefaults.shape),
+                colors = ButtonDefaults.buttonColors(containerColor = Color.Transparent)
             ) {
                 Text("Закрыть выбор фильтров")
             }
 
-            Spacer(modifier = Modifier.height(30.dp))
+            Spacer(modifier = Modifier.height(20.dp))
 
             // Белый бокс с закругленными краями
             Box(
                 modifier = Modifier
                     .fillMaxWidth() // Бокс на всю ширину
-                    .padding(start = 16.dp, end = 16.dp, bottom = 10.dp)
+                    .padding(start = 16.dp, end = 16.dp)
                     .background(
                         color = Color.White,
                         shape = RoundedCornerShape(16.dp) // Закругленные края
@@ -120,142 +126,203 @@ public  fun Filters(isVisible: Boolean,  onClose: () -> Unit) {
                     .padding(16.dp) // Отступы внутри бокса
             ) {
                 // Используем Column для размещения текста и кнопки
-                Column(horizontalAlignment = Alignment.CenterHorizontally) {
-                    // Текст заголовка
-                    Text(
-                        text = "Фильтры",
-                        fontSize = 16.sp,
-                        fontWeight = FontWeight.Medium,
-                        color = Color(0xFF92A2B0)
-                    )
-                    Divider(
-                        modifier = Modifier.padding(vertical = 8.dp),
-                        color = Color.LightGray,
-                        thickness = 1.dp
-                    )
-                    Spacer(modifier = Modifier.height(10.dp)) // Отступ между текстом и кнопкой
-
-                    // Текст "Сезон"
-                    Box(
-
-                        modifier = Modifier
-                            .align(Alignment.Start)
-                            .fillMaxWidth()
-                    ) {
-                        Text("Сезон")
+                LazyColumn(horizontalAlignment = Alignment.CenterHorizontally) {
+                    item {
+                        // Текст заголовка
+                        Text(
+                            text = "Фильтры",
+                            fontSize = 16.sp,
+                            fontWeight = FontWeight.Medium,
+                            color = Color(0xFF92A2B0)
+                        )
+                        Divider(
+                            modifier = Modifier.padding(vertical = 8.dp),
+                            color = Color.LightGray,
+                            thickness = 1.dp
+                        )
+                        Spacer(modifier = Modifier.height(10.dp)) // Отступ между текстом и кнопкой
 
+                        // Текст "Сезон"
+                        Box(
 
-                        FlowRow(
                             modifier = Modifier
+//                                .align(Alignment.Start)
                                 .fillMaxWidth()
-                                .padding(10.dp)
                         ) {
-                            seasondubs.forEach { seasondub ->
-                                Row(
-                                    verticalAlignment = Alignment.CenterVertically,
-                                    modifier = Modifier
-                                        .padding(4.dp) // Отступы между элементами
-                                        .selectable(
+                            Text("Сезон")
+
+
+                            FlowRow(
+                                modifier = Modifier
+                                    .fillMaxWidth()
+                                    .padding(10.dp)
+                            ) {
+                                seasondubs.forEach { seasondub ->
+                                    Row(
+                                        verticalAlignment = Alignment.CenterVertically,
+                                        modifier = Modifier
+                                            .padding(4.dp) // Отступы между элементами
+                                            .selectable(
+                                                selected = (seasondub == selectedSeasondub),
+                                                onClick = { selectedSeasondub = seasondub }
+                                            )
+                                    ) {
+                                        RadioButton(
                                             selected = (seasondub == selectedSeasondub),
                                             onClick = { selectedSeasondub = seasondub }
                                         )
-                                ) {
-                                    RadioButton(
-                                        selected = (seasondub == selectedSeasondub),
-                                        onClick = { selectedSeasondub = seasondub }
-                                    )
-                                    Text(
-                                        text = seasondub.title_season,
-                                        fontSize = 16.sp,
-                                        modifier = Modifier.padding(start = 8.dp),
-                                        color = Color(0xFF92A2B0)
-                                    )
+                                        Text(
+                                            text = seasondub.title_season,
+                                            fontSize = 16.sp,
+                                            modifier = Modifier.padding(start = 8.dp),
+                                            color = Color(0xFF92A2B0)
+                                        )
+                                    }
                                 }
                             }
                         }
-                    }
                         Spacer(modifier = Modifier.height(10.dp))
-                    Box(
+                        Box(
 
-                        modifier = Modifier
-                            .align(Alignment.Start)
-                            .fillMaxWidth()
+                            modifier = Modifier
+//                                .align(Alignment.Start)
+                                .fillMaxWidth()
 
-                    ) {
-                        Text("Стиль")
-                    }
-                    Box(
+                        ) {
+                            Text("Стиль")
+                        }
+                        Box(
 
-                        modifier = Modifier
-                            .align(Alignment.Start)
-                            .fillMaxWidth()
-                            .padding(10.dp)
-                    ) {
-                    FlowRow(
-                                    modifier = Modifier
-                                        .fillMaxWidth()
-                                        .padding(10.dp)
-                                    ) {
-                        styledubs.forEach { styledub ->
-                            Box(
+                            modifier = Modifier
+//                                .align(Alignment.Start)
+                                .fillMaxWidth()
+                                .padding(10.dp)
+                        ) {
+                            FlowRow(
                                 modifier = Modifier
-                                    .padding(4.dp) // Отступы между элементами
-                                    .background(
-                                        Color(0xFFF1F1F3),
-                                        shape = RoundedCornerShape(20.dp)
-                                    )
-                                    .width(145.dp)// Задаем одинаковую ширину для всех элементов
-                                    .height(38.dp) // Устанавливаем фиксированную высоту для всех элементов
+                                    .fillMaxWidth()
+                                    .padding(10.dp)
                             ) {
-                                Row(
-                                    verticalAlignment = Alignment.CenterVertically,
-                                    modifier = Modifier
+                                styledubs.forEach { styledub ->
+                                    Box(
+                                        modifier = Modifier
+                                            .padding(4.dp) // Отступы между элементами
+                                            .background(
+                                                Color(0xFFF1F1F3),
+                                                shape = RoundedCornerShape(20.dp)
+                                            )
+                                            .width(145.dp)// Задаем одинаковую ширину для всех элементов
+                                            .height(38.dp) // Устанавливаем фиксированную высоту для всех элементов
+                                    ) {
+                                        Row(
+                                            verticalAlignment = Alignment.CenterVertically,
+                                            modifier = Modifier
 
-                                        .selectable(
-                                            selected = (styledub == selectedStyledub),
-                                            onClick = { selectedStyledub = styledub }
-                                        )
-                                ) {
-                                    RadioButton(
-                                        selected = (styledub == selectedStyledub),
-                                        onClick = { selectedStyledub = styledub }
-                                    )
-                                    Text(
-                                        text = styledub.title_style,
-                                        fontSize = 16.sp,
-                                        modifier = Modifier.padding(start = 0.dp), // Отступ слева от радиокнопки
-                                        color = Color(0xFF92A2B0)
-                                    )
+                                                .selectable(
+                                                    selected = (styledub == selectedStyledub),
+                                                    onClick = { selectedStyledub = styledub }
+                                                )
+                                        ) {
+                                            RadioButton(
+                                                selected = (styledub == selectedStyledub),
+                                                onClick = { selectedStyledub = styledub }
+                                            )
+                                            Text(
+                                                text = styledub.title_style,
+                                                fontSize = 16.sp,
+                                                modifier = Modifier.padding(start = 0.dp), // Отступ слева от радиокнопки
+                                                color = Color(0xFF92A2B0)
+                                            )
+                                        }
+                                    }
                                 }
                             }
-                           }
                         }
-                    }
-                    Box(
+                        Box(
 
-                        modifier = Modifier
-                            .align(Alignment.Start)
-                            .fillMaxWidth()
+                            modifier = Modifier
+//                                .align(Alignment.Start)
+                                .fillMaxWidth()
+
+                        ) {
+                            Text("Типы")
+                        }
+
+                        FlowRow(
+                            modifier = Modifier
+                                .fillMaxWidth()
+                                .padding(10.dp)
+                        )
+                        {
+                            typedubs.forEach { typedub ->
+
+                                Box(
+                                    modifier = Modifier
+                                        .padding(4.dp) // Отступы между элементами
+                                        .background(
+                                            Color(0xFFF1F1F3),
+                                            shape = RoundedCornerShape(20.dp)
+                                        )
+                                        .width(145.dp)// Задаем одинаковую ширину для всех элементов
+                                        .height(245.dp) // Устанавливаем фиксированную высоту для всех элементов
+                                ) {
+
+                                            Text(text = typedub.title_type)
+
+
+
+                                    LazyColumn {
+                                        items(
+                                            subdubtypes,
+                                            key = { subdubtype -> subdubtype.id },
+                                        ) { subtypedub ->
+                                            if (subtypedub.id_type == typedub.id) {
+                                                Row(
+                                                    verticalAlignment = Alignment.CenterVertically,
+                                                    modifier = Modifier
+
+                                                        .selectable(
+                                                            selected = (subtypedub == selectedTypedub),
+                                                            onClick = { selectedTypedub = subtypedub }
+                                                        )
+                                                        .padding(top = 14.dp)
+
+
+
+                                                ) {
+                                                    RadioButton(
+                                                        selected = (subtypedub == selectedTypedub),
+                                                        onClick = { selectedTypedub = subtypedub }
+                                                    )
+                                                    Text(
+                                                        text = subtypedub.sub_type,
+                                                        fontSize = 16.sp,
+                                                        modifier = Modifier.padding(start = 0.dp), // Отступ слева от радиокнопки
+                                                        color = Color(0xFF92A2B0)
+
+                                                    )
+                                                }
+                                            }
+
+                                        }
+
+                                    }
+
+
+                                }
+
+                            }
 
-                    ) {
-                        Text("Типы")
-                    }
 
-                    FlowRow(
-                        modifier = Modifier
-                            .fillMaxWidth()
-                            .padding(10.dp)
-                    )
-                    {
-                        Column() {
 
                         }
                     }
+                }
 
-
-                    Button(
-                            onClick = { /* Действие при нажатии */ },
+                Button(
+                    onClick = { /* Действие при нажатии */ },
                     modifier = Modifier
+                        .align(Alignment.BottomCenter)
                         .fillMaxWidth() // Занять всю ширину
                         .height(50.dp)
                         .padding(horizontal = 20.dp)
@@ -268,7 +335,8 @@ public  fun Filters(isVisible: Boolean,  onClose: () -> Unit) {
                             ),
                             shape = ButtonDefaults.shape
                         ),
-                    colors = ButtonDefaults.buttonColors(containerColor = Color.Transparent)
+                    colors = ButtonDefaults.buttonColors(containerColor = Color.Transparent),
+
                     ) {
                     Text(
                         text = "Применить",
@@ -276,7 +344,6 @@ public  fun Filters(isVisible: Boolean,  onClose: () -> Unit) {
                         fontWeight = FontWeight.Medium
                     )
                 }
-                }
             }
         }
     }

+ 2 - 1
Project_exvesta/app/src/main/java/com/example/exvesta/Screans/Home.kt

@@ -388,8 +388,9 @@ fun Home(navHost: NavHostController) {
 
 
                     }
-
+                    Spacer(modifier = Modifier.height(20.dp))
                 }
+
             }
 
 

+ 55 - 2
Project_exvesta/app/src/main/java/com/example/exvesta/Screans/MainViewModel.kt

@@ -1,15 +1,26 @@
 package com.example.exvesta.Screans
 
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.setValue
 import androidx.lifecycle.LiveData
 import androidx.lifecycle.MutableLiveData
 import androidx.lifecycle.ViewModel
 import androidx.lifecycle.viewModelScope
 import com.example.exvesta.domain.utils.Constants
+import com.example.exvesta.model.Publicthings
+import com.example.exvesta.model.Type_dublicate
+import com.example.exvesta.model.Type_subtype_dublicate
 import io.github.jan.supabase.gotrue.auth
 import io.github.jan.supabase.gotrue.providers.builtin.Email
 import io.github.jan.supabase.gotrue.providers.builtin.OTP
-
+import io.github.jan.supabase.postgrest.from
+import kotlinx.coroutines.Dispatchers
+import io.github.jan.supabase.postgrest.query.filter.PostgrestFilterBuilder
+import io.github.jan.supabase.postgrest.query.PostgrestQueryBuilder
+import io.github.jan.supabase.postgrest.result.PostgrestResult
 import kotlinx.coroutines.launch
+import kotlinx.coroutines.withContext
 
 class MainViewModel(): ViewModel() {
     private val _loginResult = MutableLiveData<Boolean>()
@@ -71,4 +82,46 @@ class MainViewModel(): ViewModel() {
         }
         return _loginResult.value ?: false
     }
-}
+}
+
+class FiltersViewModel : ViewModel() {
+    var selectedType by mutableStateOf<Type_dublicate?>(null)
+    var selectedSubType by mutableStateOf<Type_subtype_dublicate?>(null)
+    var filteredData by mutableStateOf<List<Publicthings>>(listOf())
+
+    class FiltersViewModel : ViewModel() {
+        var selectedType by mutableStateOf<Type_dublicate?>(null)
+        var selectedSubType by mutableStateOf<Type_subtype_dublicate?>(null)
+        var filteredData by mutableStateOf<List<Publicthings>>(listOf())
+
+        fun applyFilters() {
+            viewModelScope.launch {
+                val typeId = selectedType?.id
+                val subTypeId = selectedSubType?.id
+
+                // Выполняем запрос к базе данных
+                filteredData = withContext(Dispatchers.IO) {
+                    // Создаем запрос
+                    var query = Constants.supabase.from("Publicthings").select()
+
+                    // Применяем фильтры, если они указаны
+//                    if (typeId != null) {
+//                        query = query.eq("type_id", typeId) // Фильтр по type_id
+//                    }
+//                    if (subTypeId != null) {
+//                        query = query.eq("subtype_id", subTypeId) // Фильтр по subtype_id
+//                    }
+
+                    // Выполняем запрос и декодируем результат
+                    try {
+                        query.decodeList<Publicthings>()
+                    } catch (e: Exception) {
+                        // Обработка ошибок, если запрос не удался
+                        e.printStackTrace()
+                        emptyList() // Возвращаем пустой список в случае ошибки
+                    }
+                }
+            }
+        }
+    }
+    }

+ 1 - 1
Project_exvesta/app/src/main/java/com/example/exvesta/Screans/items/Itemstypesdub.kt

@@ -1,4 +1,4 @@
-package com.example.exvesta.Screans.items
+ package com.example.exvesta.Screans.items
 
 import androidx.compose.foundation.layout.padding
 import androidx.compose.material3.Text