Skip to content

[feat] Move load test from modal dialog to inline tab panel #62

Description

@mertbekci

Problem

Load test şu an modal dialog olarak açılıyor. Dialog açıkken:

  • Diğer request tab'larına geçilemiyor
  • Request builder'daki diğer sekmeler (Headers, Body, Code vb.) kullanılamıyor
  • Load test arka planda çalışırken bile UI kilitli kalıyor

Çözüm

Load test'i Request Builder'daki tab bar'a yeni bir "Load Test" sekmesi olarak ekle (Params / Headers / Auth / Body / Settings / Code'un yanına). Dialog tamamen kalkar.

Implementation planı

1. Tab type güncelle

apps/desktop/src/renderer/src/components/RequestBuilder.tsx:

type Tab = 'params' | 'headers' | 'auth' | 'body' | 'settings' | 'code' | 'load';

2. LoadTestDialog → LoadTestPanel dönüşümü

  • apps/desktop/src/renderer/src/components/LoadTestDialog.tsxLoadTestPanel.tsx olarak rename veya yeni component
  • Radix Dialog wrapper'ını tamamen kaldır
  • İçerik aynı kalır: config form (total, concurrency, delay, validator) + live metrics + console log
  • Panel, RequestBuilder'ın body'sinde {tab === 'load' && <LoadTestPanel />} olarak render edilir

3. RequestBuilder'daki tab bar'a "Load Test" ekle

  • "Code" tab'ının yanına "Load Test" tab butonu
  • Tab'da load test çalışıyorsa küçük bir animated indicator (mevcut pulse-dot pattern'i reuse)

4. Dialog trigger'ları temizle

  • RequestBuilder header'daki "Load test" butonu artık setTab('load') çağırır (dialog açmak yerine)
  • LoadTestDialog import'ları ve state'i (loadTestOpen, setLoadTestOpen) kaldırılır
  • importCurlTick / loadTestTick tick pattern'i varsa kaldırılır veya tab set'e dönüştürülür

5. State korunması

  • Load test çalışırken başka tab'a geçip geri dönüldüğünde:
    • runId, progress, events state'i korunur (component unmount olmaz çünkü {tab === 'load' && ...} yerine display:none veya state'i yukarı taşı)
    • Ya da en temizi: load test state'ini store'a taşı (per-tab loadRunId, loadProgress)

Edge case'ler

Durum Davranış
Load test çalışırken başka request tab'ına geç Load test arka planda devam eder (main process), geri dönünce metrics güncellenir
Load test çalışırken URL değiştir Mevcut run etkilenmez, yeni run başlatılırsa yeni config kullanılır
Birden fazla tab'da load test Her tab'ın kendi runId'si var, main process loadRuns Map ile izole
Load test çalışırken tab kapat loadStop(runId) çağrılır, run abort edilir

Dokunulacak dosyalar

apps/desktop/src/renderer/src/components/LoadTestDialog.tsx → LoadTestPanel.tsx (rename + refactor)
apps/desktop/src/renderer/src/components/RequestBuilder.tsx (tab type + render + header button)

Out of scope

Priority

High — günlük kullanımda UX friction'ı.

Metadata

Metadata

Assignees

Labels

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions