Files
consumocuidado/components/SearchInput.vue
2025-09-15 14:37:26 +02:00

218 lines
4.0 KiB
Vue

<template>
<form class="search-container" @submit.prevent="search">
<div class="categorias-wrapper">
<select v-model="searchCategory" class="categorias">
<option selected value="">Todas las categorías</option>
<option
v-for="(category, key) in categories"
:key="key"
:value="category"
>
{{ category }}
</option>
</select>
</div>
<input
v-model="searchText"
class="search-text"
type="text"
autocomplete="off"
placeholder="Buscar"
/>
<div class="search-link">
<img
class="search-icon"
src="@/assets/img/latienda-search-blue.svg"
alt="consumo-cuidado-search"
@click="search"
/>
</div>
</form>
</template>
<script>
export default {
name: 'SearchInput',
data() {
return {
searchText: '',
searchCategory: '',
categories: [
'Alimentación',
'Agricultura ',
'Energía',
'Hogar y jardín',
'Moda y Textil',
'Salud y Cuidados',
'Movilidad y Mensajería',
'Ocio y Deporte',
'Turismo y Gastronomía',
'Cultura, Educación y Medios',
'Tecnología y Servicios Digitales',
'Economía Circular y Reparación',
'Finanzas Éticas y Seguros',
'Servicios Profesionales',
],
}
},
methods: {
search() {
if (this.searchText) {
if (this.searchCategory) {
return this.$router.push({
name: 'busqueda',
query: { q: this.searchText, category: [this.searchCategory] },
})
} else {
return this.$router.push({
name: 'busqueda',
query: { q: this.searchText },
})
}
}
},
},
}
</script>
<style lang="scss" scoped>
.search-container {
background-color: rgba(255, 255, 255, 0.5);
height: 40px;
border-radius: 40px;
overflow: hidden;
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
margin: 50px 5px;
@include mobile {
}
@include tablet {
width: 40%;
}
@include desktop {
width: 50%;
}
}
.categorias-wrapper {
height: 100%;
padding: 6px, 10px;
border-right: 1px solid rgba(104, 102, 102, 0.5);
@include mobile {
display: none;
}
@include tablet {
display: none;
}
@include desktop {
display: block;
}
}
.categorias {
outline: none;
border: none;
--webkit-appearance: none;
--moz-appearance: none;
background-color: rgba(255, 255, 255, 0.5);
background: transparent;
color: $color-navy;
height: 100%;
width: 200px;
font-size: $s;
padding-left: 1rem;
@include mobile {
display: none;
}
@include tablet {
display: none;
}
@include desktop {
display: block;
}
}
.search-link {
@include mobile {
width: 40px;
height: 40px;
padding: 0.6rem;
float: right;
display: flex;
justify-content: center;
align-items: center;
text-decoration: none;
transition: 0.4s;
}
@include tablet {
width: 4rem;
margin-right: 1.5rem;
}
}
.search-icon {
@include mobile {
margin-left: 0;
width: 100%;
padding: 0.1rem;
}
@include tablet {
float: right;
width: 100%;
padding: 1rem;
}
@include desktop {
margin-left: 0;
width: 100%;
padding: 0.4rem;
}
}
.search-text {
outline: none;
border: none;
width: 100%;
text-align: center;
color: $color-navy;
font-size: $s;
@include mobile {
border: none;
background: none;
float: left;
color: $color-greytext;
font-size: 16px;
transition: 0.4s;
line-height: 2.5rem;
width: 0rem;
}
}
::placeholder {
color: $color-navy;
font-size: $s;
}
select {
--webkit-appearance: auto;
}
.search-container:matches(:hover, :focus-within) > .search-text {
@include mobile {
width: 60px;
padding: 0 0.2rem;
}
}
.search-text:hover > .search-link {
@include mobile {
align-self: right;
}
}
</style>