blob: 82d97199c366a9cfd43c7da31a514e3afc3dcfc8 [file] [log] [blame]
SurenNeware71724be2020-06-01 15:31:00 +05301<template>
2 <div class="search-global">
3 <b-form-group
4 :label="$t('global.form.search')"
jason westoverd36ac8a2025-11-03 20:58:59 -06005 :label-for="`searchInput-${uid}`"
SurenNeware787635a2020-11-24 22:42:42 +05306 label-class="invisible"
SurenNeware71724be2020-06-01 15:31:00 +05307 class="mb-2"
8 >
9 <b-input-group size="md" class="align-items-center">
jason westoverd36ac8a2025-11-03 20:58:59 -060010 <template #prepend>
11 <b-input-group-text>
12 <icon-search class="search-icon" />
13 </b-input-group-text>
14 </template>
SurenNeware71724be2020-06-01 15:31:00 +053015 <b-form-input
jason westoverd36ac8a2025-11-03 20:58:59 -060016 :id="`searchInput-${uid}`"
Dixsie Wolmers9b22b492020-09-07 21:26:06 -050017 ref="searchInput"
SurenNeware71724be2020-06-01 15:31:00 +053018 v-model="filter"
Yoshie Muranaka129d79b2020-07-02 16:04:18 -070019 class="search-input"
SurenNeware71724be2020-06-01 15:31:00 +053020 type="text"
SurenNeware787635a2020-11-24 22:42:42 +053021 :aria-label="$t('global.form.search')"
SurenNeware71724be2020-06-01 15:31:00 +053022 :placeholder="placeholder"
23 @input="onChangeInput"
Dixsie Wolmers9b22b492020-09-07 21:26:06 -050024 >
25 </b-form-input>
26 <b-button
27 v-if="filter"
28 variant="link"
Dixsie Wolmers30f11f82020-11-10 16:07:56 -060029 class="btn-icon-only input-action-btn"
Dixsie Wolmers30f11f82020-11-10 16:07:56 -060030 :title="$t('global.ariaLabel.clearSearch')"
Dixsie Wolmers9b22b492020-09-07 21:26:06 -050031 @click="onClearSearch"
32 >
Dixsie Wolmers30f11f82020-11-10 16:07:56 -060033 <icon-close />
jason westoverd36ac8a2025-11-03 20:58:59 -060034 <span class="visually-hidden">
35 {{ $t('global.ariaLabel.clearSearch') }}
36 </span>
Dixsie Wolmers9b22b492020-09-07 21:26:06 -050037 </b-button>
SurenNeware71724be2020-06-01 15:31:00 +053038 </b-input-group>
39 </b-form-group>
40 </div>
41</template>
42
43<script>
44import IconSearch from '@carbon/icons-vue/es/search/16';
Dixsie Wolmers9b22b492020-09-07 21:26:06 -050045import IconClose from '@carbon/icons-vue/es/close/20';
Ed Tanous883a0d52024-03-23 14:56:34 -070046import { useI18n } from 'vue-i18n';
47import i18n from '@/i18n';
Dixsie Wolmers9b22b492020-09-07 21:26:06 -050048
SurenNeware71724be2020-06-01 15:31:00 +053049export default {
50 name: 'Search',
Dixsie Wolmers9b22b492020-09-07 21:26:06 -050051 components: { IconSearch, IconClose },
SurenNeware71724be2020-06-01 15:31:00 +053052 props: {
53 placeholder: {
54 type: String,
Derick Montague602e98a2020-10-21 16:20:00 -050055 default: function () {
Ed Tanous883a0d52024-03-23 14:56:34 -070056 return i18n.global.t('global.form.search');
Derick Montague602e98a2020-10-21 16:20:00 -050057 },
58 },
SurenNeware71724be2020-06-01 15:31:00 +053059 },
Hariharan Rangasamyc5d60f52025-10-31 12:58:56 +053060 emits: ['change-search', 'clear-search'],
SurenNeware71724be2020-06-01 15:31:00 +053061 data() {
62 return {
Ed Tanous883a0d52024-03-23 14:56:34 -070063 $t: useI18n().t,
Derick Montague602e98a2020-10-21 16:20:00 -050064 filter: null,
jason westoverd36ac8a2025-11-03 20:58:59 -060065 uid: Math.random().toString(36).slice(2),
SurenNeware71724be2020-06-01 15:31:00 +053066 };
67 },
68 methods: {
69 onChangeInput() {
Sukanya Pandeyedb8a772020-10-29 11:33:42 +053070 this.$emit('change-search', this.filter);
Dixsie Wolmers9b22b492020-09-07 21:26:06 -050071 },
72 onClearSearch() {
73 this.filter = '';
Sukanya Pandeyedb8a772020-10-29 11:33:42 +053074 this.$emit('clear-search');
jason westoverd36ac8a2025-11-03 20:58:59 -060075 const input = this.$refs.searchInput;
76 if (input && typeof input.focus === 'function') input.focus();
Derick Montague602e98a2020-10-21 16:20:00 -050077 },
78 },
SurenNeware71724be2020-06-01 15:31:00 +053079};
80</script>
81
82<style lang="scss" scoped>
SurenNeware71724be2020-06-01 15:31:00 +053083.search-icon {
jason westoverd36ac8a2025-11-03 20:58:59 -060084 stroke: $gray-400;
SurenNeware71724be2020-06-01 15:31:00 +053085}
SurenNeware71724be2020-06-01 15:31:00 +053086</style>