From e6fbc62fe9377b62ca98ac347397fde970507ae0 Mon Sep 17 00:00:00 2001 From: bilalgursen Date: Tue, 22 Sep 2026 01:18:24 +0300 Subject: [PATCH] =?UTF-8?q?feat(olcum):=20/listem=3Furet=3D1=20yollar?= =?UTF-8?q?=C4=B1na=20kaynak=20parametresi?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Üretim denemesinin hangi yüzeyden başladığı ölçülebilsin diye dört yol `&kaynak=` taşır: sihirbazın tamamlanması ve girişsiz callback'i (sihirbaz), giriş dönüşündeki otomatik yönlendirme (giris_donusu), hazır seçimler panelinin giriş CTA'sı (hazir_cta) ve paketi aktif kullanıcının kartı (odeme_sonrasi). Sabit href yerine listemUretHref(kaynak): `uret=1` her zaman ilk parametre kalmalı, çünkü giris-karti.tsx:31 funnel metnini callbackURL.startsWith("/listem?uret=1") ile seçiyor. Co-Authored-By: Claude Opus 5 --- .../odeme/components/paket-satinal.tsx | 2 +- .../components/sihirbaz-cagri-karti.tsx | 19 ++++++++++++++----- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/features/odeme/components/paket-satinal.tsx b/src/features/odeme/components/paket-satinal.tsx index d5cb8d6..fcca771 100644 --- a/src/features/odeme/components/paket-satinal.tsx +++ b/src/features/odeme/components/paket-satinal.tsx @@ -154,7 +154,7 @@ async function PaketCta() { {/* ?uret=1: rapor varsa /listem raporu gösterir (bayrak yok sayılır), yoksa bekleyen seçimlerle üretim başlar; seçim de yoksa boş durum sihirbaza yönlendirir. */} - + listeni oluştur diff --git a/src/features/sihirbaz/components/sihirbaz-cagri-karti.tsx b/src/features/sihirbaz/components/sihirbaz-cagri-karti.tsx index 888128e..a89c8fc 100644 --- a/src/features/sihirbaz/components/sihirbaz-cagri-karti.tsx +++ b/src/features/sihirbaz/components/sihirbaz-cagri-karti.tsx @@ -17,7 +17,14 @@ import { SihirbazModal } from "./sihirbaz-modal"; // Üretim /listem'de koşar (bkz. listem/liste-uretici.tsx); sihirbaz // tamamlanınca seçimler storage'a yazılıp kullanıcı buraya yönlendirilir. -const LISTEM_URET_HREF = "/listem?uret=1"; +// `kaynak` denemenin hangi yüzeyden başladığını ölçer (bkz. +// rapor/components/uretim-basladi-olayi.tsx — izinli değerler orada). +// `uret=1` HER ZAMAN ilk parametre kalmalı: giris-karti.tsx:31 funnel +// metnini `callbackURL.startsWith("/listem?uret=1")` ile seçiyor, sıra +// bozulursa girişteki "Seçimlerin hazır" metni kaybolur. +function listemUretHref(kaynak: string) { + return `/listem?uret=1&kaynak=${kaynak}`; +} // SSR'da false, client'ta true — storage'a ancak mount sonrası dokunuruz const bosAbone = () => () => {}; @@ -182,10 +189,12 @@ export function SihirbazBolumu({ await modalCikisiniOynat(); setElleAcik(false); if (!girisliMi) { - router.push(`/giris?callback=${encodeURIComponent(LISTEM_URET_HREF)}`); + router.push( + `/giris?callback=${encodeURIComponent(listemUretHref("sihirbaz"))}`, + ); return; } - router.push(LISTEM_URET_HREF); + router.push(listemUretHref("sihirbaz")); } /** @@ -213,7 +222,7 @@ export function SihirbazBolumu({ if (otomatikGonder && !otomatikBasladi.current) { otomatikBasladi.current = true; // replace: geri tuşu bu sayfaya dönünce tekrar /listem'e sekmesin - router.replace(LISTEM_URET_HREF); + router.replace(listemUretHref("giris_donusu")); } // eslint-disable-next-line react-hooks/exhaustive-deps }, [otomatikGonder]); @@ -242,7 +251,7 @@ export function SihirbazBolumu({ // kaydedilmesi olarak sunulur. Girişten dönüşte üretim /listem'de başlar. // Sinyal URL'den (?hazir=1) gelir ki SSR'da doğru panel render edilsin. const girisBekliyor = Boolean(!girisliMi && secimlerHazir && !raporVar); - const girisUrl = `/giris?callback=${encodeURIComponent(LISTEM_URET_HREF)}`; + const girisUrl = `/giris?callback=${encodeURIComponent(listemUretHref("hazir_cta"))}`; // Kapı 1 ölçümü: panel yalnızca girisBekliyor dalında render edilir; ref // başka dalda bağlanmadığından observer da yalnızca o durumda kurulur. const hazirPanelRef = useGorunumOlayi("hazir_panel_goruntulendi");