Merge branch 'gece/0922-olcum' into is/0923-birlesik
This commit is contained in:
@@ -52,7 +52,7 @@ export default function KosullarPage() {
|
||||
Temel program arama ücretsizdir. Tercih Dönemi Paketi tek seferlik
|
||||
bir satın almadır; abonelik değildir, otomatik yenilenmez. Paket
|
||||
içeriği ve güncel fiyat{" "}
|
||||
<Link href="/paket" className="text-primary underline">
|
||||
<Link href="/paket?kaynak=kosullar" className="text-primary underline">
|
||||
paket sayfasında
|
||||
</Link>{" "}
|
||||
yazar.
|
||||
|
||||
@@ -540,7 +540,7 @@ export default function Home() {
|
||||
asChild
|
||||
className="h-12 w-full cursor-pointer bg-orange-500 px-8 text-white transition-colors duration-200 hover:bg-orange-600"
|
||||
>
|
||||
<Link href="/paket">
|
||||
<Link href="/paket?kaynak=fiyat_paket">
|
||||
{PAKET_FIYATI} TL — Paketi incele
|
||||
<ArrowRight className="size-4" aria-hidden />
|
||||
</Link>
|
||||
@@ -570,7 +570,7 @@ export default function Home() {
|
||||
variant="outline"
|
||||
className="mt-4 h-11 w-full cursor-pointer"
|
||||
>
|
||||
<Link href="/paket">
|
||||
<Link href="/paket?kaynak=fiyat_kredi">
|
||||
+{URUNLER.topup.credits} kredi — {TOPUP_FIYATI} TL
|
||||
<ArrowRight className="size-4" aria-hidden />
|
||||
</Link>
|
||||
|
||||
@@ -42,7 +42,7 @@ export function OdemeUstSerit() {
|
||||
</span>
|
||||
</div>
|
||||
<Link
|
||||
href="/paket"
|
||||
href="/paket?kaynak=odeme_geri"
|
||||
className="inline-flex shrink-0 items-center gap-1.5 text-sm text-slate-500 transition-colors hover:text-slate-700"
|
||||
>
|
||||
<ArrowLeft className="size-4" aria-hidden />
|
||||
|
||||
@@ -138,7 +138,7 @@ export async function OdemeSonucKarti({ siparis }: { siparis?: string }) {
|
||||
</p>
|
||||
<PagePixelDivider seed={83} className="mx-auto mt-5" />
|
||||
<Button asChild variant="outline" className="mt-6 h-11 cursor-pointer">
|
||||
<Link href="/paket">Tekrar dene</Link>
|
||||
<Link href="/paket?kaynak=odeme_hata">Tekrar dene</Link>
|
||||
</Button>
|
||||
</div>
|
||||
);
|
||||
|
||||
@@ -11,7 +11,38 @@ import { useEffect } from "react";
|
||||
import { olayBirKez } from "@/lib/analitik";
|
||||
|
||||
// Serbest metin analitiğe sızmasın: bilinmeyen değerler "diger"e düşer.
|
||||
const KAYNAKLAR = ["kilit", "kredi_bitti", "nav"] as const;
|
||||
// Yeni bir /paket linki eklerken değerini önce buraya yaz, sonra href'e koy —
|
||||
// listede olmayan her kaynak "diger"e düşer ve yüzey görünmez kalır.
|
||||
//
|
||||
// SERİ KIRILMASI: liste 3'ten 13 değere çıktığı için tekilleştirme anahtarı
|
||||
// da (aşağıda `kaynak`) çeşitlendi; `paket_goruntulendi`nin oturum başına
|
||||
// atılabilme tavanı 4'ten 14'e çıktı ve "diger" kovası artık yalnız gerçekten
|
||||
// bilinmeyen yüzeyleri taşıyor (eskiden 10 bilinen yüzey de oradaydı).
|
||||
// Bu tarihten önceki/sonraki toplamlar ve "diger" payı karşılaştırılamaz.
|
||||
const KAYNAKLAR = [
|
||||
// Kilitli liste satırı / kilit kartı (`listem-govde`)
|
||||
"kilit",
|
||||
// Üretimde kredi yetmedi (`liste-uretici`)
|
||||
"kredi_bitti",
|
||||
// Üst menü (`user-nav`)
|
||||
"nav",
|
||||
// Ana sayfa fiyat bölümü: paket kartı ve kredi (topup) kartı
|
||||
"fiyat_paket",
|
||||
"fiyat_kredi",
|
||||
// Koşullar metnindeki "paket sayfasında" linki
|
||||
"kosullar",
|
||||
// "Tercihlerin değişmiş" modalı: aksiyon satırı / kredi-yetersiz satırı
|
||||
"tercih_degisti",
|
||||
"tercih_degisti_yetersiz",
|
||||
// Danışman sohbeti: başlıktaki kredi rozeti, kredi bitti bandı, son krediler
|
||||
// uyarısı
|
||||
"danisman_rozet",
|
||||
"danisman_kredi_bitti",
|
||||
"danisman_kredi_az",
|
||||
// Ödeme akışı: checkout şeridindeki geri linki, başarısız sonuç kartı
|
||||
"odeme_geri",
|
||||
"odeme_hata",
|
||||
] as const;
|
||||
|
||||
export function PaketGorunumOlayi() {
|
||||
useEffect(() => {
|
||||
|
||||
@@ -348,7 +348,7 @@ export function SohbetClient({
|
||||
</button>
|
||||
) : null}
|
||||
<Link
|
||||
href="/paket"
|
||||
href="/paket?kaynak=danisman_rozet"
|
||||
className="inline-flex items-center gap-1.5 rounded-full border border-amber-200 bg-amber-50 px-2.5 py-1 text-xs font-semibold text-amber-700 transition-colors hover:bg-amber-100"
|
||||
title="Kredilerin — yüklemek için tıkla"
|
||||
>
|
||||
@@ -535,7 +535,7 @@ export function SohbetClient({
|
||||
size="sm"
|
||||
className="cursor-pointer bg-orange-500 text-white hover:bg-orange-600"
|
||||
>
|
||||
<Link href="/paket">Kredi yükle</Link>
|
||||
<Link href="/paket?kaynak=danisman_kredi_bitti">Kredi yükle</Link>
|
||||
</Button>
|
||||
</div>
|
||||
) : (
|
||||
@@ -543,7 +543,7 @@ export function SohbetClient({
|
||||
{kredi <= 3 ? (
|
||||
<p className="mb-2 px-1 text-xs text-amber-700">
|
||||
Son {kredi} kredin — bitse de listen ve sohbetin kaybolmaz;{" "}
|
||||
<Link href="/paket" className="underline hover:text-amber-800">
|
||||
<Link href="/paket?kaynak=danisman_kredi_az" className="underline hover:text-amber-800">
|
||||
kredi yükleyip
|
||||
</Link>{" "}
|
||||
kaldığın yerden devam edersin.
|
||||
|
||||
@@ -297,7 +297,7 @@ export function TercihDegistiModali({
|
||||
asChild
|
||||
className="cursor-pointer bg-orange-500 text-white transition-[background-color,transform] duration-200 active:scale-[0.97] hover:bg-orange-600"
|
||||
>
|
||||
<Link href="/paket">
|
||||
<Link href="/paket?kaynak=tercih_degisti">
|
||||
{hasPaket
|
||||
? "Kredi yükle ve güncelle"
|
||||
: "Paketi aktive et"}
|
||||
@@ -349,7 +349,7 @@ function KrediYetersiz({
|
||||
asChild
|
||||
className="cursor-pointer bg-orange-500 text-white transition-[background-color,transform] duration-200 active:scale-[0.97] hover:bg-orange-600"
|
||||
>
|
||||
<Link href="/paket">
|
||||
<Link href="/paket?kaynak=tercih_degisti_yetersiz">
|
||||
{hasPaket ? "Kredi yükle" : "Paketi aktive et"}
|
||||
<ArrowRight className="size-4" aria-hidden />
|
||||
</Link>
|
||||
|
||||
@@ -141,6 +141,25 @@ export function SihirbazAdimlar({
|
||||
() => canliFacetler.iller.filter((i) => HARITA_ILLERI.has(i.il)),
|
||||
[canliFacetler.iller],
|
||||
);
|
||||
// Huninin paydası: 1. adım hiçbir zaman "geçilmediği" için `adimaGit`ten
|
||||
// atılamıyordu (orası yalnız ileri geçişleri sayar) ve `sihirbaz_adim{1}`
|
||||
// hiç düşmüyordu — payda `sira_girildi`den türetilmek zorunda kalıyordu.
|
||||
// Modal kapanınca bileşen unmount olduğu için mount = "1. adım görüldü";
|
||||
// 1→2→1→2 gidip gelmek unmount etmediğinden tekrar tetiklenmez.
|
||||
//
|
||||
// Bilerek `olayBirKez` KULLANILMAZ (bkz. lib/analitik.ts:22-24, aynı kural
|
||||
// `liste_uretim_basladi` için yazılı): `:220`'deki ileri geçiş olayı
|
||||
// (`adim:2`, `adim:3`) her geçişte atılıyor. Paydayı oturum başına tekil
|
||||
// yapsaydık sihirbazı ikinci kez açan öğrencide pay 2, payda 1 kalır ve
|
||||
// 1→2 geçiş oranı %100'ü aşardı. Payda ile pay aynı birimde olmalı:
|
||||
// sihirbaz her açıldığında `adim:1` de düşer.
|
||||
//
|
||||
// SERİ KIRILMASI: bu satırın canlıya çıktığı tarihten önce `sihirbaz_adim`
|
||||
// serisinde `adim:1` hiç yok; öncesi/sonrası karşılaştırılamaz.
|
||||
useEffect(() => {
|
||||
olay("sihirbaz_adim", { adim: 1 });
|
||||
}, []);
|
||||
|
||||
const [facetYukleniyor, setFacetYukleniyor] = useState(false);
|
||||
useEffect(() => {
|
||||
if (adim === 0) return;
|
||||
@@ -201,7 +220,8 @@ export function SihirbazAdimlar({
|
||||
setYon(yeniAdim > adim ? 1 : -1);
|
||||
setGecisBasladi(true);
|
||||
setAdim(yeniAdim);
|
||||
// Yalnızca ileri geçişler huni adımı sayılır; geri dönüşler tekrar saymasın
|
||||
// Yalnızca ileri geçişler huni adımı sayılır; geri dönüşler tekrar saymasın.
|
||||
// `adim:1` buradan hiç geçmez — onu yukarıdaki mount effect'i atar.
|
||||
if (yeniAdim > adim) olay("sihirbaz_adim", { adim: yeniAdim + 1 });
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user