2020-07-20 02:20:33 +00:00
|
|
|
<template>
|
2020-12-27 01:15:06 +00:00
|
|
|
<Tooltip class="filter-container">
|
2020-07-20 02:20:33 +00:00
|
|
|
<div class="filter">
|
|
|
|
<Icon icon="price-tag4" />
|
|
|
|
|
|
|
|
<div
|
|
|
|
v-if="selectedTags.length > 0"
|
|
|
|
class="filter-applied"
|
|
|
|
>{{ selectedTags.length }} {{ selectedTags.length > 1 ? 'tags' : 'tag' }}</div>
|
|
|
|
|
|
|
|
<div
|
|
|
|
v-else
|
|
|
|
class="filter-applied empty"
|
|
|
|
>Tags</div>
|
|
|
|
</div>
|
|
|
|
|
2022-02-11 21:14:44 +00:00
|
|
|
<template #tooltip>
|
2021-01-05 02:29:02 +00:00
|
|
|
<div
|
|
|
|
class="filter-options"
|
|
|
|
@click.stop
|
|
|
|
>
|
2020-12-27 01:15:06 +00:00
|
|
|
<select
|
|
|
|
v-model="mode"
|
|
|
|
class="filter-mode"
|
|
|
|
@change="$router.push({ query: { ...$route.query, mode }, params: { pageNumber: 1 } })"
|
2020-07-20 02:20:33 +00:00
|
|
|
>
|
2020-12-27 01:15:06 +00:00
|
|
|
<option value="all">match all selected</option>
|
|
|
|
<option value="any">match any selected</option>
|
|
|
|
</select>
|
|
|
|
|
|
|
|
<router-link
|
|
|
|
class="filter-clear"
|
|
|
|
:to="{ query: { ...$route.query, tags: undefined, mode: undefined } }"
|
|
|
|
:class="{ active: selectedTags.length > 0 }"
|
|
|
|
>clear all<Icon icon="cross2" /></router-link>
|
2020-07-20 02:20:33 +00:00
|
|
|
|
2020-12-27 01:15:06 +00:00
|
|
|
<ul class="filter-items nolist">
|
|
|
|
<li
|
|
|
|
v-for="tag in availableTags"
|
|
|
|
:key="`tag-${tag.id}`"
|
|
|
|
class="filter-item"
|
|
|
|
:class="{ selected: selectedTags.includes(tag.slug) }"
|
2020-07-20 02:20:33 +00:00
|
|
|
>
|
2020-12-27 01:15:06 +00:00
|
|
|
<router-link
|
|
|
|
:to="{ query: { ...$route.query, tags: tag.slug, mode }, params: { pageNumber: 1 } }"
|
|
|
|
class="filter-name"
|
|
|
|
>{{ tag.name }}</router-link>
|
2020-07-20 02:20:33 +00:00
|
|
|
|
2020-12-27 01:15:06 +00:00
|
|
|
<router-link
|
|
|
|
:to="{ query: { ...$route.query, ...getNewRange(tag.slug), mode }, params: { pageNumber: 1 } }"
|
|
|
|
class="filter-include"
|
|
|
|
>
|
|
|
|
<Icon
|
|
|
|
icon="checkmark"
|
|
|
|
class="filter-add"
|
|
|
|
/>
|
|
|
|
|
|
|
|
<Icon
|
|
|
|
icon="cross2"
|
|
|
|
class="filter-remove"
|
|
|
|
/>
|
|
|
|
</router-link>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
</div>
|
|
|
|
</template>
|
|
|
|
</Tooltip>
|
2020-07-20 02:20:33 +00:00
|
|
|
</template>
|
|
|
|
|
|
|
|
<script>
|
|
|
|
function getNewRange(tag) {
|
|
|
|
if (this.selectedTags.includes(tag)) {
|
2022-02-11 21:14:44 +00:00
|
|
|
return { tags: this.selectedTags.filter((selectedTag) => selectedTag !== tag).join(',') || undefined };
|
2020-07-20 02:20:33 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return { tags: this.selectedTags.concat(tag).join(',') };
|
|
|
|
}
|
|
|
|
|
|
|
|
function selectedTags() {
|
|
|
|
return this.$route.query.tags ? this.$route.query.tags.split(',') : [];
|
|
|
|
}
|
|
|
|
|
|
|
|
export default {
|
|
|
|
props: {
|
|
|
|
compact: {
|
|
|
|
type: Boolean,
|
|
|
|
default: false,
|
|
|
|
},
|
|
|
|
availableTags: {
|
|
|
|
type: Array,
|
|
|
|
default: () => [],
|
|
|
|
},
|
|
|
|
},
|
|
|
|
data() {
|
|
|
|
return {
|
|
|
|
mode: this.$route.query.mode || 'all',
|
|
|
|
};
|
|
|
|
},
|
|
|
|
computed: {
|
|
|
|
selectedTags,
|
|
|
|
},
|
|
|
|
methods: {
|
|
|
|
getNewRange,
|
|
|
|
},
|
|
|
|
};
|
|
|
|
</script>
|
2020-12-27 03:21:10 +00:00
|
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
|
|
.filter-options {
|
|
|
|
width: 15rem;
|
|
|
|
}
|
|
|
|
</style>
|