Skip to content

Commit 20dc7bc

Browse files
committed
fix(merge): show loader during initial fetch instead of flashing empty upload
On the merge page, summary started as null and was treated as "no merge", so on load the empty "Upload raw files" state flashed for a few seconds before the active merge appeared. Added an initialLoading flag: show a spinner until the first data fetch resolves, and only render the empty upload state once we actually know no merge exists.
1 parent a69431a commit 20dc7bc

1 file changed

Lines changed: 18 additions & 3 deletions

File tree

  • apps/web/app/projects/[id]/merge

apps/web/app/projects/[id]/merge/page.tsx

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { JobProgress } from "@/components/JobProgress";
77
import { PageHeader } from "@/components/PageHeader";
88
import {
99
Download, FileText, FileSpreadsheet, AlertTriangle, CheckCircle2,
10-
Clock, Layers, Brain, Check, X, BookOpen, Cpu,
10+
Clock, Layers, Brain, Check, X, BookOpen, Cpu, Loader2,
1111
} from "lucide-react";
1212
import { AuditLogPanel } from "@/components/AuditLogPanel";
1313
import { ActiveAnalysisHero } from "@/components/ActiveAnalysisHero";
@@ -36,6 +36,9 @@ export default function MergePage() {
3636
const [showInfo, setShowInfo] = useState(false);
3737
/** "Yeni analiz" tıklandı → mevcut merge kompakt "old"a çekilir, UploadSection öne gelir */
3838
const [newAnalysisMode, setNewAnalysisMode] = useState(false);
39+
/** İlk veri çekimi sürerken true — summary null "merge yok" değil "henüz bilinmiyor"
40+
* demektir; bu olmadan boş upload ekranı yanıp sonra aktif merge'e atlardı. */
41+
const [initialLoading, setInitialLoading] = useState(true);
3942

4043
const refresh = useCallback(async () => {
4144
try {
@@ -50,6 +53,8 @@ export default function MergePage() {
5053
setFiles(f);
5154
} catch (e) {
5255
setError(translateApiError(t, e));
56+
} finally {
57+
setInitialLoading(false);
5358
}
5459
}, [id]);
5560

@@ -138,6 +143,15 @@ export default function MergePage() {
138143
/>
139144
)}
140145

146+
{/* İlk veri çekimi sürerken loader — summary daha gelmeden boş upload
147+
ekranını gösterip sonra aktif merge'e atlama (flash) sorununu önler. */}
148+
{initialLoading && !jobId && (
149+
<div className="rounded-xl border border-border bg-bg-card shadow-card px-6 py-16 flex flex-col items-center justify-center gap-3 text-muted">
150+
<Loader2 className="h-6 w-6 animate-spin text-brand-500" />
151+
<span className="text-sm">{t("common.loading")}</span>
152+
</div>
153+
)}
154+
141155
{/* ── YÜKLEME ÖNDE: bayat (yeni ham dosya) VEYA "Yeni analiz" tıklandı →
142156
UploadSection öne + mevcut merge KOMPAKT "old" satırı (Burak: "yeni analiz
143157
deyince mevcutu old'a çek, data & merge'e at") ── */}
@@ -232,8 +246,9 @@ export default function MergePage() {
232246
isActive={currentMethod === "smart"}
233247
/>
234248

235-
{/* ── İlk merge YOK → yükle + Smart Merge (birleşik "Veri & Birleştirme" akışı) ── */}
236-
{!hasMerge && !jobId && (
249+
{/* ── İlk merge YOK → yükle + Smart Merge (birleşik "Veri & Birleştirme" akışı) ──
250+
initialLoading bitene kadar gösterme: aksi halde "merge yok" sanıp boş ekran çıkar. */}
251+
{!hasMerge && !jobId && !initialLoading && (
237252
<div id="add-data">
238253
<UploadSection
239254
projectId={id}

0 commit comments

Comments
 (0)