Added vue book search.

This commit is contained in:
krzysiej
2022-06-13 11:44:50 +02:00
parent 040ca01158
commit 5c154b740c
4 changed files with 48 additions and 16 deletions

View File

@@ -1,8 +1,10 @@
import Vue from 'vue';
import Book from './pages/book'
import BookListing from './pages/booklisting'
import BookListingHeader from './pages/booklistingheader'
Vue.component('Book', Book);
Vue.component('BookListing', BookListing);
Vue.component('BookListingHeader', BookListingHeader);
new Vue().$mount('#app');

View File

@@ -1,5 +1,6 @@
<template>
<div>
<input type="text" v-model="searchTerm" @keydown.enter="search"/>
<table class="table">
<thead>
<tr>
@@ -52,13 +53,20 @@ export default {
},
methods: {
search: function () {
this.updateHistory();
axios.get('/api/books', {
params: {title: this.searchTerm},
headers: {'accept': 'application/json'}
}).then(response => {
this.books = response.data;
});
}).finally(() => window.EventBus.$emit('updateBookListingHeader', {searchTerm: this.searchTerm}));
},
updateHistory: function () {
if (history.pushState) {
let url = window.location.protocol + "//" + window.location.host + window.location.pathname + '?search=' + this.searchTerm;
window.history.pushState({path: url}, '', url);
}
}
},
mounted() {
const urlParams = new URLSearchParams(window.location.search);

View File

@@ -0,0 +1,28 @@
<template>
<div>
<h1 v-if="searchTerm" v-html="'Book search: '+searchTerm"></h1>
<h1 v-else>Book list</h1>
</div>
</template>
<script>
import {EventBus} from "../event-bus";
export default {
name: 'BookListingHeader',
data() {
return {
searchTerm: null,
}
},
created() {
window.EventBus.$on('updateBookListingHeader', (data) => {
this.searchTerm = data.searchTerm;
});
},
mounted() {
const urlParams = new URLSearchParams(window.location.search);
this.searchTerm = urlParams.get('search') || "";
}
}
</script>