diff --git a/src/app/paket/page.tsx b/src/app/paket/page.tsx index 3d8131f..a6acc93 100644 --- a/src/app/paket/page.tsx +++ b/src/app/paket/page.tsx @@ -4,10 +4,7 @@ import type { Metadata } from "next"; import { SectionEyebrow } from "@/components/pixel-decor"; import { Parallax } from "@/components/parallax"; import { SiteFooter } from "@/components/site-footer"; -import { - PaketSatinAl, - PaketSatinAlSkeleton, -} from "@/features/odeme/components/paket-satinal"; +import { PaketSatinAl } from "@/features/odeme/components/paket-satinal"; import { sayfaMetadata } from "@/lib/seo"; export const metadata: Metadata = sayfaMetadata({ @@ -57,9 +54,9 @@ export default function PaketPage({
-
KolayTercih bir karar destek aracıdır; öneriler resmî YÖK Atlas
diff --git a/src/features/odeme/components/paket-satinal.tsx b/src/features/odeme/components/paket-satinal.tsx
index 5ebf077..d5cb8d6 100644
--- a/src/features/odeme/components/paket-satinal.tsx
+++ b/src/features/odeme/components/paket-satinal.tsx
@@ -1,3 +1,4 @@
+import { Suspense } from "react";
import Image from "next/image";
import Link from "next/link";
import {
@@ -11,7 +12,8 @@ import {
ShieldCheck,
} from "lucide-react";
import { getCurrentUser } from "@/lib/session";
-import { URUNLER, DENEME_KREDISI } from "@/lib/credits";
+import { URUNLER, DENEME_KREDISI, RAPOR_KREDI } from "@/lib/credits";
+import { ACIK_SATIR } from "@/lib/rapor-maske";
import { VERI_YIL_SAYISI } from "@/lib/veri-kapsami";
import { Button } from "@/components/ui/button";
import { Parallax } from "@/components/parallax";
@@ -39,11 +41,17 @@ const OZELLIKLER = [
},
] as const;
-// Paket + top-up kartları: kullanıcının paket/kredi durumuna göre CTA'lar
-// değişir, okuma burada yaşar.
-export async function PaketSatinAl() {
- const u = await getCurrentUser();
-
+// Paket + top-up kartları. Kartların gövdesi (başlık, fiyat, özellikler,
+// iyzico bandı) STATİK kabukta kalır; kullanıcıya bağlı olan yalnızca iki küçük
+// CTA alanıdır (PaketCta, TopupCta) ve her biri kendi Suspense sınırındadır.
+//
+// Neden bu kadar küçük parçalar: React Flight ~3,2 KB'ı aşan bir dinamik
+// parçanın devamını ayrı satırlara böler; PPR resume bunlara yeni segment
+// kimliği verirken kabukta geç tamamlanan sınırın (kök loading.tsx) kimliğiyle
+// çakışıyor (Next 16.2 / React 19.2) ve tarayıcıda HierarchyRequestError ile
+// sayfa boş kalıyordu. Dinamik parçayı bu sınırın altında tut: kartın gövdesini
+// yeniden bu async bileşenlerin içine TAŞIMA.
+export function PaketSatinAl() {
return (
- Girişte {DENEME_KREDISI} deneme kredisi de tanımlanır.
-
- Ek kredi, kilitli analizleri açmaz — o yüzden önce paket
- gerekir. Paket zaten {URUNLER.paket.credits} kredi içerir;
- bitince buradan yükleyebilirsin.
-
+ Girişte {DENEME_KREDISI} deneme kredisi tanımlanır; liste{" "} + {RAPOR_KREDI} kredi, ilk {ACIK_SATIR} satır açık. Paketi sonra + alırsın. +
++ Ek kredi, kilitli analizleri açmaz — o yüzden önce paket gerekir. + Paket zaten {URUNLER.paket.credits} kredi içerir; bitince buradan + yükleyebilirsin. +
+ ); + } + + return ( + ); }