Fix: Search query reload (#79)

* On every route change, update local variables from query params

* ResultSection is keyed to query to force re-render

* Resolved lint warnings
This commit is contained in:
2022-08-27 11:58:30 +02:00
committed by GitHub
parent 2fed03a882
commit dec15194e4

View File

@@ -12,13 +12,18 @@
</div> </div>
</div> </div>
<ResultsSection v-if="query" :title="title" :api-function="search" /> <ResultsSection
v-if="query"
:key="query"
:title="title"
:api-function="search"
/>
<h1 v-else class="no-results">No query found, please search above</h1> <h1 v-else class="no-results">No query found, please search above</h1>
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref, computed } from "vue"; import { ref, computed, watch } from "vue";
import { useRoute, useRouter } from "vue-router"; import { useRoute, useRouter } from "vue-router";
import ResultsSection from "@/components/ResultsSection.vue"; import ResultsSection from "@/components/ResultsSection.vue";
@@ -45,6 +50,7 @@
const title = computed(() => `Search results: ${query.value}`); const title = computed(() => `Search results: ${query.value}`);
function readQueryParams() {
const urlQuery = route.query; const urlQuery = route.query;
if (urlQuery && urlQuery?.query) { if (urlQuery && urlQuery?.query) {
query.value = decodeURIComponent(urlQuery?.query?.toString()); query.value = decodeURIComponent(urlQuery?.query?.toString());
@@ -52,6 +58,7 @@
adult.value = Boolean(urlQuery?.adult) || adult.value; adult.value = Boolean(urlQuery?.adult) || adult.value;
mediaType.value = (urlQuery?.media_type as MediaTypes) || mediaType.value; mediaType.value = (urlQuery?.media_type as MediaTypes) || mediaType.value;
} }
}
const search = ( const search = (
_page = page.value || 1, _page = page.value || 1,
@@ -73,6 +80,12 @@
function toggleChanged() { function toggleChanged() {
updateQueryParams(); updateQueryParams();
} }
readQueryParams();
watch(
() => route.fullPath,
() => readQueryParams()
);
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>