debian-mirror-gitlab/app/assets/javascripts/filtered_search/components/recent_searches_dropdown_content.vue

100 lines
2.6 KiB
Vue
Raw Normal View History

2018-03-27 19:54:05 +05:30
<script>
import eventHub from '../event_hub';
import FilteredSearchTokenizer from '../filtered_search_tokenizer';
export default {
name: 'RecentSearchesDropdownContent',
props: {
items: {
type: Array,
required: true,
},
isLocalStorageAvailable: {
type: Boolean,
required: false,
default: true,
},
allowedKeys: {
type: Array,
required: true,
},
},
computed: {
processedItems() {
2018-12-13 13:39:08 +05:30
return this.items.map(item => {
const { tokens, searchToken } = FilteredSearchTokenizer.processTokens(
item,
this.allowedKeys,
);
2018-03-27 19:54:05 +05:30
const resultantTokens = tokens.map(token => ({
prefix: `${token.key}:`,
suffix: `${token.symbol}${token.value}`,
}));
return {
text: item,
tokens: resultantTokens,
searchToken,
};
});
},
hasItems() {
return this.items.length > 0;
},
},
methods: {
onItemActivated(text) {
eventHub.$emit('recentSearchesItemSelected', text);
},
onRequestClearRecentSearches(e) {
// Stop the dropdown from closing
e.stopPropagation();
eventHub.$emit('requestClearRecentSearches');
},
},
};
</script>
<template>
<div>
2019-02-15 15:39:39 +05:30
<div v-if="!isLocalStorageAvailable" class="dropdown-info-note">
2019-09-30 21:07:59 +05:30
{{ __('This feature requires local storage to be enabled') }}
2018-03-27 19:54:05 +05:30
</div>
<ul v-else-if="hasItems">
2019-02-15 15:39:39 +05:30
<li v-for="(item, index) in processedItems" :key="`processed-items-${index}`">
2018-03-27 19:54:05 +05:30
<button
type="button"
class="filtered-search-history-dropdown-item"
2019-03-02 22:35:43 +05:30
@click="onItemActivated(item.text)"
2019-02-15 15:39:39 +05:30
>
2018-03-27 19:54:05 +05:30
<span>
<span
2018-12-05 23:21:45 +05:30
v-for="(token, tokenIndex) in item.tokens"
:key="`dropdown-token-${tokenIndex}`"
2018-11-08 19:23:39 +05:30
class="filtered-search-history-dropdown-token"
2018-03-27 19:54:05 +05:30
>
<span class="name">{{ token.prefix }}</span>
<span class="value">{{ token.suffix }}</span>
</span>
</span>
<span class="filtered-search-history-dropdown-search-token">
{{ item.searchToken }}
</span>
</button>
</li>
<li class="divider"></li>
<li>
<button
type="button"
class="filtered-search-history-clear-button"
2019-03-02 22:35:43 +05:30
@click="onRequestClearRecentSearches($event)"
2019-02-15 15:39:39 +05:30
>
2019-09-30 21:07:59 +05:30
{{ __('Clear recent searches') }}
2018-03-27 19:54:05 +05:30
</button>
</li>
</ul>
2019-09-30 21:07:59 +05:30
<div v-else class="dropdown-info-note">{{ __("You don't have any recent searches") }}</div>
2018-03-27 19:54:05 +05:30
</div>
</template>