Something went wrong on our end
-
Henrik Askjer authoredHenrik Askjer authored
SearchResults.vue 4.05 KiB
<template>
<section id="search_results" :class="$vuetify.breakpoint.name">
<Pagination @update-page="$emit('update-page')"/>
<div class="flex-container" :class="$vuetify.breakpoint.name">
<ul class="hits" v-if="$vuetify.breakpoint.smAndDown">
<li class="article_container" v-for="(result, index) in both_dicts" :key="index + both_hash">
<Article
:article="result"
:title_id="`title_${index}`"
@article-click="article_link_click"
@details-click="details_click">
</Article>
</li>
</ul>
<ul class="hits" v-if="!$vuetify.breakpoint.smAndDown && count_bm">
<li class="article_container" v-for="(result, index) in results_bm" :key="index + bm_hash">
<Article
:article="result"
:title_id="`title_${index}`"
@article-click="article_link_click"
@details-click="details_click">
</Article>
</li>
</ul>
<ul class="hits" v-if="!$vuetify.breakpoint.smAndDown && count_nn">
<li class="article_container" v-for="(result, index) in results_nn" :key="index + nn_hash">
<Article
:article="result"
:title_id="`title_${index + results_bm.length}`"
@article-click="article_link_click"
@details-click="details_click"
:class="right_col_class_name">
</Article>
</li>
</ul>
</div>
<Pagination @update-page="$emit('update-page')" bottom/>
</section>
</template>
<script>
const interleave = ([ x, ...xs ], ys = []) => x === undefined ? ys : [ x, ...interleave (ys, xs) ]
import Article from './Article.vue'
import Pagination from './Pagination.vue'
export default {
name: 'SearchResults',
props: {
results_bm: Array,
results_nn: Array,
lang: String,
meta: Object
},
computed: {
right_col_class_name: function() {
if (this.$vuetify.breakpoint.mdAndUp) {
if (this.results_bm) {
return 'righ_hand_column'
}
}
return ''
},
both_dicts: function() {
let merged = interleave(this.results_bm, this.results_nn)
return merged
},
both_hash: function(){
return this.both_dicts.reduce((hash, hit) => (hash + hit.article_id) % 10000, 0)
},
bm_hash: function(){
return this.results_bm.reduce((hash, hit) => (hash + hit.article_id) % 10000, 0)
},
nn_hash: function(){
return this.results_nn.reduce((hash, hit) => (hash + hit.article_id) % 10000, 0)
},
count_bm: function(){
if (this.$parent.article_info.articles.bm ){
return this.$parent.article_info.articles.bm.length
}
else {
return 0
}
},
count_nn: function(){
if (this.$parent.article_info.articles.nn ){
return this.$parent.article_info.articles.nn.length
}
else {
return 0
}
}
},
methods: {
article_link_click: function(item) {
this.$emit('article-click', item)
},
details_click: function(item) {
this.$emit('details-click', item)
},
},
components: {
Article,
Pagination
}
}
</script>
<style >
h2 {
color: var(--v-primary-base);
margin: 0px;
padding: 20px 0px 20px 0px;
}
.hits {
min-width: 50%;
}
.flex-container {
display: flex;
}
.flex-container.xs, .flex-container.sm {
flex-direction: column;
}
.flex-container > ul {
padding: 0px !important;
min-width: 50%;
}
.results-count {
color: var(--v-primary-base);
margin-left: 24px;
}
article.right_hand_column div.inflection-wrapper {
right: -35px;
}
.pagination {
margin-left: 10px;
display: flex;
flex-wrap: wrap;
}
.total-results {
font-weight: bold;
color: var(--v-primary-base);
}
.result-counts {
padding: 10px;
justify-content: right !important;
}
.total-results, .dict-counts {
white-space: nowrap;
}
.pagination ul {
padding-inline-start: 0px !important;
justify-content: right;
}
</style>