mirror of
				https://github.com/mmahdium/TBW.git
				synced 2025-11-04 04:28:13 +01:00 
			
		
		
		
	Fix filters store
This commit is contained in:
		@@ -1,11 +1,11 @@
 | 
				
			|||||||
<script setup lang="ts">
 | 
					<script setup lang="ts">
 | 
				
			||||||
import '@/style.css'
 | 
					import '@/style.css'
 | 
				
			||||||
import NavBar from './components/NavBar.vue'
 | 
					import NavBar from './components/NavBar.vue'
 | 
				
			||||||
import { SpeedInsights } from "@vercel/speed-insights/vue"
 | 
					import { SpeedInsights } from '@vercel/speed-insights/vue'
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<template>
 | 
					<template>
 | 
				
			||||||
  <SpeedInsights/>
 | 
					  <SpeedInsights />
 | 
				
			||||||
  <NavBar />
 | 
					  <NavBar />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  <RouterView />
 | 
					  <RouterView />
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,7 +3,7 @@ import type { SearchFilters } from '@/types/SearchFilters'
 | 
				
			|||||||
import { reactive, watch } from 'vue'
 | 
					import { reactive, watch } from 'vue'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const props = defineProps<{
 | 
					const props = defineProps<{
 | 
				
			||||||
  modelValue?: SearchFilters // optional initial value
 | 
					  modelValue: SearchFilters // optional initial value
 | 
				
			||||||
}>()
 | 
					}>()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const emit = defineEmits<{
 | 
					const emit = defineEmits<{
 | 
				
			||||||
@@ -11,9 +11,9 @@ const emit = defineEmits<{
 | 
				
			|||||||
}>()
 | 
					}>()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const local = reactive<SearchFilters>({
 | 
					const local = reactive<SearchFilters>({
 | 
				
			||||||
  includeAdult: props.modelValue?.includeAdult ?? false,
 | 
					  includeAdult: props.modelValue?.includeAdult,
 | 
				
			||||||
  onlyMovies: props.modelValue?.onlyMovies ?? true,
 | 
					  onlyMovies: props.modelValue?.onlyMovies,
 | 
				
			||||||
  onlySeries: props.modelValue?.onlySeries ?? false,
 | 
					  onlySeries: props.modelValue?.onlySeries,
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function toggleIncludeAdult(e: Event) {
 | 
					function toggleIncludeAdult(e: Event) {
 | 
				
			||||||
@@ -34,7 +34,6 @@ function toggleOnlySeries(e: Event) {
 | 
				
			|||||||
  local.onlySeries = checked
 | 
					  local.onlySeries = checked
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
watch(
 | 
					watch(
 | 
				
			||||||
  () => ({ ...local }),
 | 
					  () => ({ ...local }),
 | 
				
			||||||
  (next) => {
 | 
					  (next) => {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,10 +18,12 @@ const isLoadingMore = ref(false)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
const state = useSearchPageStore()
 | 
					const state = useSearchPageStore()
 | 
				
			||||||
const store = useMediaStore()
 | 
					const store = useMediaStore()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Initialize filters with stored values from the state, defaulting to initial values if not available
 | 
				
			||||||
const filters = ref<SearchFilters>({
 | 
					const filters = ref<SearchFilters>({
 | 
				
			||||||
  includeAdult: false,
 | 
					  includeAdult: state.searchFilters?.includeAdult ?? false,
 | 
				
			||||||
  onlyMovies: true,
 | 
					  onlyMovies: state.searchFilters?.onlyMovies ?? true,
 | 
				
			||||||
  onlySeries: false,
 | 
					  onlySeries: state.searchFilters?.onlySeries ?? false,
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const handleAddMedia = (media: MediaType) => {
 | 
					const handleAddMedia = (media: MediaType) => {
 | 
				
			||||||
@@ -37,7 +39,6 @@ async function searchMovie() {
 | 
				
			|||||||
    isSearching.value = true
 | 
					    isSearching.value = true
 | 
				
			||||||
    searchPage.value = 1
 | 
					    searchPage.value = 1
 | 
				
			||||||
    const result = await loadMedia(searchQuery.value, searchPage.value, filters.value)
 | 
					    const result = await loadMedia(searchQuery.value, searchPage.value, filters.value)
 | 
				
			||||||
    console.log(result)
 | 
					 | 
				
			||||||
    if (result.totalResults === 0) {
 | 
					    if (result.totalResults === 0) {
 | 
				
			||||||
      medias.value = []
 | 
					      medias.value = []
 | 
				
			||||||
      seachError.value = 'No results found'
 | 
					      seachError.value = 'No results found'
 | 
				
			||||||
@@ -46,7 +47,7 @@ async function searchMovie() {
 | 
				
			|||||||
    seachError.value = ''
 | 
					    seachError.value = ''
 | 
				
			||||||
    medias.value = result.Results
 | 
					    medias.value = result.Results
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    state.setState(searchPage.value, searchQuery.value, result.Results)
 | 
					    state.setState(searchPage.value, searchQuery.value, result.Results, filters.value)
 | 
				
			||||||
  } catch (error) {
 | 
					  } catch (error) {
 | 
				
			||||||
    medias.value = []
 | 
					    medias.value = []
 | 
				
			||||||
    console.error(error)
 | 
					    console.error(error)
 | 
				
			||||||
@@ -62,7 +63,12 @@ async function loadMore() {
 | 
				
			|||||||
    searchPage.value++
 | 
					    searchPage.value++
 | 
				
			||||||
    const result = await loadMedia(searchQuery.value, searchPage.value, filters.value)
 | 
					    const result = await loadMedia(searchQuery.value, searchPage.value, filters.value)
 | 
				
			||||||
    medias.value?.push(...result.Results)
 | 
					    medias.value?.push(...result.Results)
 | 
				
			||||||
    state.setState(searchPage.value, searchQuery.value, medias.value ? medias.value : [])
 | 
					    state.setState(
 | 
				
			||||||
 | 
					      searchPage.value,
 | 
				
			||||||
 | 
					      searchQuery.value,
 | 
				
			||||||
 | 
					      medias.value ? medias.value : [],
 | 
				
			||||||
 | 
					      filters.value,
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
  } catch (error) {
 | 
					  } catch (error) {
 | 
				
			||||||
    searchPage.value = 1
 | 
					    searchPage.value = 1
 | 
				
			||||||
    seachError.value = (error as Error).message
 | 
					    seachError.value = (error as Error).message
 | 
				
			||||||
@@ -101,6 +107,12 @@ watch(searchQuery, () => {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
watch(filters, () => {
 | 
					watch(filters, () => {
 | 
				
			||||||
  if (searchQuery.value.length > 2) {
 | 
					  if (searchQuery.value.length > 2) {
 | 
				
			||||||
 | 
					    state.setState(
 | 
				
			||||||
 | 
					      searchPage.value,
 | 
				
			||||||
 | 
					      searchQuery.value,
 | 
				
			||||||
 | 
					      medias.value ? medias.value : [],
 | 
				
			||||||
 | 
					      filters.value,
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
    searchMovie()
 | 
					    searchMovie()
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
@@ -118,7 +130,7 @@ watch(filters, () => {
 | 
				
			|||||||
    <!-- Search bar -->
 | 
					    <!-- Search bar -->
 | 
				
			||||||
    <SearchBar v-model="searchQuery" @submit="searchMovie" />
 | 
					    <SearchBar v-model="searchQuery" @submit="searchMovie" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <MediaFilters @update:filters="(f) => (filters = f)" />
 | 
					    <MediaFilters @update:filters="(f) => (filters = f)" :modelValue="filters" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <!-- Loading spinner -->
 | 
					    <!-- Loading spinner -->
 | 
				
			||||||
    <div v-if="isSearching" class="flex justify-center my-16">
 | 
					    <div v-if="isSearching" class="flex justify-center my-16">
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user