Initial commit
This commit is contained in:
@@ -0,0 +1,114 @@
|
||||
---
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import ReviewCard from '../../components/ui/ReviewCard.astro';
|
||||
import Icon from '../../components/ui/Icon.astro';
|
||||
import VenueReviewForm from '../../components/islands/VenueReviewForm';
|
||||
import { localizedPath, getDict } from '../../lib/i18n';
|
||||
import type { Locale } from '../../lib/i18n';
|
||||
import { getVenueReviews } from '../../lib/db';
|
||||
import { VENUE } from '../../lib/venue';
|
||||
|
||||
const { lang } = Astro.params;
|
||||
const locale = (lang ?? 'ua') as Locale;
|
||||
const dict = getDict(locale);
|
||||
const supabase = Astro.locals.supabase;
|
||||
const user = Astro.locals.user;
|
||||
|
||||
const reviews = await getVenueReviews(supabase);
|
||||
const canDelete = (reviewUserId: string) => user !== null && (user.isAdmin || reviewUserId === user.id);
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
locale={locale}
|
||||
dict={dict}
|
||||
pagePath="/about"
|
||||
user={user}
|
||||
title={`${dict.about.pageTitle} — ${dict.meta.siteName}`}
|
||||
description={dict.about.pageDescription}
|
||||
>
|
||||
<section class="section">
|
||||
<div class="container">
|
||||
<div class="split">
|
||||
<div>
|
||||
<span class="eyebrow">{dict.meta.siteName}</span>
|
||||
<h1>{dict.about.pageTitle}</h1>
|
||||
<h2>{dict.about.storyTitle}</h2>
|
||||
<p>{dict.about.story}</p>
|
||||
<h2>{dict.about.contactsTitle}</h2>
|
||||
<div class="contact-details">
|
||||
<div class="contact-detail">
|
||||
<span><Icon name="pin" size={18} /></span>
|
||||
<div>
|
||||
<div class="contact-detail__label">{dict.contacts.addressLabel}</div>
|
||||
{locale === 'en' ? '12 Vifleemska St, Kyiv, Ukraine' : 'вул. Вифлеємська, 12, Київ, Україна'}
|
||||
</div>
|
||||
</div>
|
||||
<div class="contact-detail">
|
||||
<span><Icon name="mail" size={18} /></span>
|
||||
<div>
|
||||
<div class="contact-detail__label">{dict.contacts.emailLabel}</div>
|
||||
<a href={`mailto:${VENUE.email}`}>{VENUE.email}</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="contact-detail">
|
||||
<span><Icon name="clock" size={18} /></span>
|
||||
<div>
|
||||
<div class="contact-detail__label">{dict.contacts.hoursLabel}</div>
|
||||
{dict.contacts.hoursValue}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<div class="card" style="padding:24px;margin-bottom:24px;">
|
||||
<h3>{dict.about.writeVenueReview}</h3>
|
||||
{user ? (
|
||||
<VenueReviewForm dict={dict} />
|
||||
) : (
|
||||
<p>
|
||||
<a href={localizedPath(locale, `/login?redirect=${encodeURIComponent(`/${locale}/about`)}`)}>
|
||||
{dict.event.signInToReview}
|
||||
</a>
|
||||
</p>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="section section--alt">
|
||||
<div class="container">
|
||||
<div class="section-head">
|
||||
<div>
|
||||
<span class="eyebrow">{dict.about.venueReviewsTitle}</span>
|
||||
<h2>
|
||||
{dict.about.venueReviewsTitle}{' '}
|
||||
<span class="text-muted" style="font-family:var(--font-sans);font-size:1rem;">
|
||||
({reviews.length})
|
||||
</span>
|
||||
</h2>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{reviews.length > 0 ? (
|
||||
<div class="grid-2">
|
||||
{reviews.map((review) => (
|
||||
<ReviewCard
|
||||
review={review}
|
||||
locale={locale}
|
||||
dict={dict}
|
||||
deleteUrl={canDelete(review.user_id) ? `/api/venue-reviews/${review.id}` : undefined}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
) : (
|
||||
<div class="empty-state">
|
||||
<div class="empty-state__icon"><Icon name="chat" size={40} /></div>
|
||||
<p>{dict.about.noVenueReviews}</p>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
</section>
|
||||
</BaseLayout>
|
||||
Reference in New Issue
Block a user