-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -21,6 +33,9 @@ import { useCardStore } from '~/store/card'
import { usePlayerStore } from '~/store/player'
import { useUiStore } from '~/store/ui'
import type { Box } from '~~/types/types'
+import SelectCardSuit from '~/components/ui/SelectCardSuit.vue'
+import SelectCardRank from '~/components/ui/SelectCardRank.vue'
+import SearchInput from '~/components/ui/SearchInput.vue'
const props = defineProps<{
box: Box
@@ -33,10 +48,63 @@ const uiStore = useUiStore()
const deck = ref()
const tracks = computed(() => dataStore.getTracksByboxId(props.box.id))
+const filteredTracks = ref(tracks.value)
+
+// Variables réactives pour les filtres
+const selectedSuit = ref('')
+const selectedRank = ref('')
+const searchQuery = ref('')
const isCardRevealed = (trackId: number) => cardStore.isCardRevealed(trackId)
const closeDatBox = () => {
uiStore.closeBox()
}
+
+const onSuitChange = (suit: string) => {
+ selectedSuit.value = suit
+ applyFilters()
+}
+
+const onRankChange = (rank: string) => {
+ selectedRank.value = rank
+ applyFilters()
+}
+
+const onSearch = (query: string) => {
+ searchQuery.value = query
+ applyFilters()
+}
+
+// Applique tous les filtres (couleur, rang et recherche)
+const applyFilters = () => {
+ let result = [...tracks.value]
+
+ // Filtre par couleur
+ if (selectedSuit.value) {
+ result = result.filter(track => track.card?.suit === selectedSuit.value)
+ }
+
+ // Filtre par rang
+ if (selectedRank.value) {
+ result = result.filter(track => track.card?.rank === selectedRank.value)
+ }
+
+ // Filtre par recherche textuelle
+ if (searchQuery.value) {
+ const query = searchQuery.value.toLowerCase()
+ result = result.filter(track => {
+ // Gestion du nom d'artiste (peut être un objet ou une chaîne)
+ const artistName = typeof track.artist === 'object' ? track.artist?.name : String(track.artist || '')
+ // Recherche dans le titre, l'artiste et l'année
+ return (
+ track.title?.toLowerCase().includes(query) ||
+ artistName.toLowerCase().includes(query) ||
+ String(track.year || '').includes(query)
+ )
+ })
+ }
+
+ filteredTracks.value = result
+}
diff --git a/app/components/ui/SearchInput.vue b/app/components/ui/SearchInput.vue
new file mode 100644
index 0000000..522f017
--- /dev/null
+++ b/app/components/ui/SearchInput.vue
@@ -0,0 +1,25 @@
+
+
+
+
+
diff --git a/app/components/ui/SelectCardRank.vue b/app/components/ui/SelectCardRank.vue
new file mode 100644
index 0000000..cf7bb76
--- /dev/null
+++ b/app/components/ui/SelectCardRank.vue
@@ -0,0 +1,37 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/components/ui/SelectCardSuit.vue b/app/components/ui/SelectCardSuit.vue
new file mode 100644
index 0000000..c045a94
--- /dev/null
+++ b/app/components/ui/SelectCardSuit.vue
@@ -0,0 +1,28 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/layouts/default.vue b/app/layouts/default.vue
index 1c1a9d1..08eaab0 100644
--- a/app/layouts/default.vue
+++ b/app/layouts/default.vue
@@ -3,6 +3,6 @@
-
+