feat: pripomienky cez zdielany odkaz; predvolena poloha stitkov a pouzit na vsetky

Pripomienky:
- odkaz /review/<token> so snimkou newslettra: nic sa neda upravit, da sa
  komentovat (spendlik), pisat text do newslettra a kreslit; meno autora sa pamata
- pripomienky su ukotvene k modulu a ulozene k odkazu - vidi ich kazdy s odkazom
- v editore: tlacidlo Pripomienky (pocet otvorenych), vytvorenie a kopirovanie
  odkazu, aktualizacia nahladu v odkaze, zoznam pripomienok, Hotovo a mazanie;
  pripomienky sa zobrazuju aj priamo na platne a daju sa tam oznacit ako hotove
- supabase/migrations/002_reviews.sql (tabulky reviews, review_comments)
- pismo Poppins v layoute (nahlad vernejsi e-mailu)

Stitky predajni:
- predvolena poloha -15 vodorovne / +5 zvisle od praveho horneho rohu pozadia cenovky
- tlacidlo Polohu stitkov pouzit na vsetky produkty

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Jakub_HostacnyandClaude Opus 5.5 committed 2026-10-21 11:03:34 +02:00
1 parent b0a050bd12
commit cfacf2474b
13 files changed
+1162 -10

No files matched your search

+24 -2
View File
@@ -13,7 +13,8 @@ import {
Edit2,
RefreshCw,
UploadCloud,
Check
Check,
MessageSquare
} from 'lucide-react';
import { NewsletterCampaign } from '@/types/newsletter';
import { getBrevoCampaignUrl } from '@/lib/brevo';
@@ -32,6 +33,8 @@ interface TopBarProps {
brevoListingUrl?: string | null;
onClearBrevoId?: () => void;
onAddModule: (type: any) => void;
onOpenReviews?: () => void;
reviewOpenCount?: number; // počet otvorených pripomienok
}
export const TopBar: React.FC<TopBarProps> = ({
@@ -45,7 +48,9 @@ export const TopBar: React.FC<TopBarProps> = ({
onExportBrevo,
isExportingBrevo,
onClearBrevoId,
onAddModule
onAddModule,
onOpenReviews,
reviewOpenCount = 0
}) => {
const [isEditingTitle, setIsEditingTitle] = useState(false);
const [isVerifyingBrevo, setIsVerifyingBrevo] = useState(false);
@@ -173,6 +178,23 @@ export const TopBar: React.FC<TopBarProps> = ({
{/* Pravá časť: Uložiť, Duplikovať, Export do ZIP a Inteligentné Brevo akcie */}
<div className="flex items-center gap-2">
{/* Pripomienky cez zdieľaný odkaz */}
{onOpenReviews && (
<button
onClick={onOpenReviews}
className="relative flex items-center gap-1.5 text-xs font-bold text-gray-700 bg-white border border-gray-200 hover:bg-gray-50 px-3 py-1.5 rounded-xl transition-all shadow-xs"
title="Odkaz na pripomienky a zoznam pripomienok"
>
<MessageSquare className="w-3.5 h-3.5 text-gray-600" />
<span className="hidden md:inline">Pripomienky</span>
{reviewOpenCount > 0 && (
<span className="absolute -top-1.5 -right-1.5 min-w-[18px] h-[18px] px-1 rounded-full bg-[#e2001a] text-white text-[10px] font-black flex items-center justify-center">
{reviewOpenCount}
</span>
)}
</button>
)}
{/* Tlačidlo manuálneho uloženia */}
<button
onClick={onSave}