fix(discover): Enforce AuthGuard visibility block during category or text search filtering

This commit is contained in:
2026-03-12 14:23:56 -05:00
parent 1b94aac0a5
commit 13584b0625

View File

@ -228,53 +228,59 @@ function resetFilters() {
</button> </button>
</div> </div>
<!-- Grid de resultados --> <!-- CONTENIDO PROTEGIDO CON AUTHGUARD -->
<TransitionGroup v-if="filteredBusinesses.length > 0" name="fade" tag="div" class="biz-grid"> <AuthGuard
<div :title="t('discover.auth.title') || '¡Locales exclusivos!'"
v-for="biz in filteredBusinesses" :message="t('discover.auth.message') || 'Regístrate para descubrir los mejores rincones de la ciudad y ofertas directas.'"
:key="biz.id" >
v-memo="[biz.id]" <!-- Grid de resultados -->
class="biz-card" <TransitionGroup v-if="filteredBusinesses.length > 0" name="fade" tag="div" class="biz-grid">
@click="handleExplore(biz)" <div
> v-for="biz in filteredBusinesses"
<div class="biz-img-wrap"> :key="biz.id"
<img v-memo="[biz.id]"
:src="getImageUrl(biz.image_url, 'business')" class="biz-card"
:alt="biz.name" @click="handleExplore(biz)"
loading="lazy" >
decoding="async" <div class="biz-img-wrap">
class="biz-img" <img
@error="(e) => (e.target as HTMLImageElement).src = getImageUrl(null, 'business')" :src="getImageUrl(biz.image_url, 'business')"
/> :alt="biz.name"
<span class="biz-cat-badge"> loading="lazy"
<span class="material-icons" style="font-size:0.875rem">{{ catIcon(biz.category || '') }}</span> decoding="async"
{{ catName(biz.category || '') }} class="biz-img"
</span> @error="(e) => (e.target as HTMLImageElement).src = getImageUrl(null, 'business')"
</div> />
<div class="biz-body"> <span class="biz-cat-badge">
<p class="biz-name">{{ biz.name }}</p> <span class="material-icons" style="font-size:0.875rem">{{ catIcon(biz.category || '') }}</span>
<p class="biz-area"> {{ catName(biz.category || '') }}
<span class="material-icons biz-area-icon">near_me</span> </span>
{{ biz.area }} </div>
</p> <div class="biz-body">
<p class="biz-name">{{ biz.name }}</p>
<p class="biz-area">
<span class="material-icons biz-area-icon">near_me</span>
{{ biz.area }}
</p>
</div>
</div> </div>
</TransitionGroup>
<!-- Vacío -->
<div v-else class="empty-state">
<span class="material-icons empty-icon">search_off</span>
<h2 class="empty-title">{{ t('discover.noResults') }}</h2>
<p class="empty-sub">{{ t('discover.noResultsDesc') }}</p>
<button class="cta-btn" @click="resetFilters">{{ t('discover.viewAll') }}</button>
</div> </div>
</TransitionGroup>
<!-- Vacío --> <!-- CTA al final -->
<div v-else class="empty-state"> <div v-if="filteredBusinesses.length > 0" class="more-card" @click="resetFilters">
<span class="material-icons empty-icon">search_off</span> <p class="more-card-title">{{ t('discover.lookingMore') }}</p>
<h2 class="empty-title">{{ t('discover.noResults') }}</h2> <p class="more-card-sub">{{ t('discover.exploreWithoutFilters') }}</p>
<p class="empty-sub">{{ t('discover.noResultsDesc') }}</p> <button class="cta-btn">{{ t('common.all') }}</button>
<button class="cta-btn" @click="resetFilters">{{ t('discover.viewAll') }}</button> </div>
</div> </AuthGuard>
<!-- CTA al final -->
<div v-if="filteredBusinesses.length > 0" class="more-card" @click="resetFilters">
<p class="more-card-title">{{ t('discover.lookingMore') }}</p>
<p class="more-card-sub">{{ t('discover.exploreWithoutFilters') }}</p>
<button class="cta-btn">{{ t('common.all') }}</button>
</div>
</div> </div>
<!-- VISTA INICIO (sin filtros) --> <!-- VISTA INICIO (sin filtros) -->