|
@@ -1,48 +1,81 @@
|
|
|
<template>
|
|
|
<div id="search" class="col-11">
|
|
|
- <form class="search-form">
|
|
|
- <label for="keys">Search</label>
|
|
|
- <input
|
|
|
- id="keys"
|
|
|
- v-model="keys"
|
|
|
- type="text"
|
|
|
- placeholder="search"
|
|
|
- @keydown.enter.prevent="submit"
|
|
|
- >
|
|
|
- <span
|
|
|
- v-if="!isloading"
|
|
|
- class="mdi mdi-magnify"
|
|
|
- title="rechercher"
|
|
|
- @click.prevent="submit"
|
|
|
- @keydown.enter.prevent="submit"
|
|
|
- />
|
|
|
- <span
|
|
|
- v-else
|
|
|
- class="mdi mdi-loading"
|
|
|
- title="chargement"
|
|
|
- />
|
|
|
- <!-- <input
|
|
|
- id="submit-search"
|
|
|
- type="submit"
|
|
|
- name="search"
|
|
|
- value="Search"
|
|
|
- class="mdi mdi-magnify"
|
|
|
- @click.prevent="submit"
|
|
|
- @keyup.enter="submit"
|
|
|
- > -->
|
|
|
+ <form class="search-form row">
|
|
|
+ <fieldset class="search col-3">
|
|
|
+ <div>
|
|
|
+ <label for="keys">Search</label>
|
|
|
+ <input
|
|
|
+ id="keys"
|
|
|
+ v-model="keys"
|
|
|
+ type="text"
|
|
|
+ placeholder="search"
|
|
|
+ @keydown.enter.prevent="submit"
|
|
|
+ >
|
|
|
+ <v-select
|
|
|
+ id="search-type"
|
|
|
+ type="select"
|
|
|
+ placeholder="dans ..."
|
|
|
+ append-to-body
|
|
|
+ :calculate-position="withPopper"
|
|
|
+ :options="searchTypeOptions"
|
|
|
+ :clearable="false"
|
|
|
+ :value="searchTypeValue"
|
|
|
+ @input="onSearchTypeSelected"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <span
|
|
|
+ v-if="!isloading"
|
|
|
+ class="mdi mdi-magnify"
|
|
|
+ title="rechercher"
|
|
|
+ @click.prevent="submit"
|
|
|
+ @keydown.enter.prevent="submit"
|
|
|
+ />
|
|
|
+ <span
|
|
|
+ v-else
|
|
|
+ class="mdi mdi-loading"
|
|
|
+ title="chargement"
|
|
|
+ />
|
|
|
+ <!-- <input
|
|
|
+ id="submit-search"
|
|
|
+ type="submit"
|
|
|
+ name="search"
|
|
|
+ value="Search"
|
|
|
+ class="mdi mdi-magnify"
|
|
|
+ @click.prevent="submit"
|
|
|
+ @keyup.enter="submit"
|
|
|
+ > -->
|
|
|
+ </fieldset>
|
|
|
+ <fieldset class="filters-nominum col-3">
|
|
|
+ <span>Filters Nominum</span>
|
|
|
+ </fieldset>
|
|
|
+ <fieldset class="filters-locorum col-3">
|
|
|
+ <span>Filters Nominum</span>
|
|
|
+ </fieldset>
|
|
|
+ <fieldset class="filters-operum col-3">
|
|
|
+ <span>Filters Nominum</span>
|
|
|
+ </fieldset>
|
|
|
</form>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
|
|
|
+import { createPopper } from '@popperjs/core'
|
|
|
+
|
|
|
import { mapActions, mapState } from 'vuex'
|
|
|
|
|
|
export default {
|
|
|
name: 'Search',
|
|
|
- // data: () => ({
|
|
|
- // typed: ''
|
|
|
- // }),
|
|
|
+ data: () => ({
|
|
|
+ searchTypeOptions: [
|
|
|
+ { 'code': 'text', 'label': 'Dans les textes' },
|
|
|
+ { 'code': 'nominum', 'label': 'Dans les personnes' },
|
|
|
+ { 'code': 'locorum', 'label': 'Dans les lieux' },
|
|
|
+ { 'code': 'operum', 'label': 'Dans les objets' }
|
|
|
+ ],
|
|
|
+ searchTypeValue: { 'code': 'text', 'label': 'Dans les textes' }
|
|
|
+ }),
|
|
|
computed: {
|
|
|
keys: {
|
|
|
get () { return this.$store.state.Search.keys },
|
|
@@ -59,6 +92,52 @@ export default {
|
|
|
submit () {
|
|
|
console.log('submited', this.keys)
|
|
|
this.getResults()
|
|
|
+ },
|
|
|
+ withPopper (dropdownList, component, { width }) {
|
|
|
+ /**
|
|
|
+ * We need to explicitly define the dropdown width since
|
|
|
+ * it is usually inherited from the parent with CSS.
|
|
|
+ */
|
|
|
+ dropdownList.style.width = width
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Here we position the dropdownList relative to the $refs.toggle Element.
|
|
|
+ *
|
|
|
+ * The 'offset' modifier aligns the dropdown so that the $refs.toggle and
|
|
|
+ * the dropdownList overlap by 1 pixel.
|
|
|
+ *
|
|
|
+ * The 'toggleClass' modifier adds a 'drop-up' class to the Vue Select
|
|
|
+ * wrapper so that we can set some styles for when the dropdown is placed
|
|
|
+ * above.
|
|
|
+ */
|
|
|
+ const popper = createPopper(component.$refs.toggle, dropdownList, {
|
|
|
+ placement: 'top',
|
|
|
+ modifiers: [
|
|
|
+ {
|
|
|
+ name: 'offset',
|
|
|
+ options: {
|
|
|
+ offset: [0, -1]
|
|
|
+ }
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: 'toggleClass',
|
|
|
+ enabled: true,
|
|
|
+ phase: 'write',
|
|
|
+ fn ({ state }) {
|
|
|
+ component.$el.classList.toggle('drop-up', state.placement === 'top')
|
|
|
+ }
|
|
|
+ }]
|
|
|
+ })
|
|
|
+
|
|
|
+ /**
|
|
|
+ * To prevent memory leaks Popper needs to be destroyed.
|
|
|
+ * If you return function, it will be called just before dropdown is removed from DOM.
|
|
|
+ */
|
|
|
+ return () => popper.destroy()
|
|
|
+ },
|
|
|
+ onSearchTypeSelected (e) {
|
|
|
+ console.log('onSearchTypeSelected', e)
|
|
|
+ this.searchTypeValue = e
|
|
|
}
|
|
|
}
|
|
|
}
|