summaryrefslogtreecommitdiff
path: root/src/components/_sila/Global/Search.vue
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/_sila/Global/Search.vue')
-rw-r--r--src/components/_sila/Global/Search.vue83
1 files changed, 83 insertions, 0 deletions
diff --git a/src/components/_sila/Global/Search.vue b/src/components/_sila/Global/Search.vue
new file mode 100644
index 00000000..ac8f9bfb
--- /dev/null
+++ b/src/components/_sila/Global/Search.vue
@@ -0,0 +1,83 @@
+<template>
+ <div class="search-global">
+ <b-form-group
+ :label="$t('global.form.search')"
+ :label-for="`searchInput-${_uid}`"
+ label-class="invisible"
+ class="mb-2"
+ >
+ <b-input-group size="md" class="align-items-center">
+ <b-input-group-prepend>
+ <icon-search class="search-icon" />
+ </b-input-group-prepend>
+ <b-form-input
+ :id="`searchInput-${_uid}`"
+ ref="searchInput"
+ v-model="filter"
+ class="search-input"
+ type="text"
+ :aria-label="$t('global.form.search')"
+ :placeholder="placeholder"
+ @input="onChangeInput"
+ >
+ </b-form-input>
+ <b-button
+ v-if="filter"
+ variant="link"
+ class="btn-icon-only input-action-btn"
+ :title="$t('global.ariaLabel.clearSearch')"
+ @click="onClearSearch"
+ >
+ <icon-close />
+ <span class="sr-only">{{ $t('global.ariaLabel.clearSearch') }}</span>
+ </b-button>
+ </b-input-group>
+ </b-form-group>
+ </div>
+</template>
+
+<script>
+import IconSearch from '@carbon/icons-vue/es/search/16';
+import IconClose from '@carbon/icons-vue/es/close/20';
+
+export default {
+ name: 'Search',
+ components: { IconSearch, IconClose },
+ props: {
+ placeholder: {
+ type: String,
+ default: function () {
+ return this.$t('global.form.search');
+ },
+ },
+ },
+ data() {
+ return {
+ filter: null,
+ };
+ },
+ methods: {
+ onChangeInput() {
+ this.$emit('change-search', this.filter);
+ },
+ onClearSearch() {
+ this.filter = '';
+ this.$emit('clear-search');
+ this.$refs.searchInput.focus();
+ },
+ },
+};
+</script>
+
+<style lang="scss" scoped>
+.search-input {
+ padding-left: ($spacer * 2);
+}
+.search-icon {
+ position: absolute;
+ left: 10px;
+ top: 12px;
+ z-index: 4;
+ stroke: gray('400');
+}
+</style>