diff --git a/docs/quality/uygulama-durumu.md b/docs/quality/uygulama-durumu.md index fdf6916..f28c2d0 100644 --- a/docs/quality/uygulama-durumu.md +++ b/docs/quality/uygulama-durumu.md @@ -2218,3 +2218,9 @@ Browser QA, dinamik sekme yüklemesi sonrası günlük bülten başlığını do Headless browser kabulü artık giriş sonrası Günlük Bülten sekmesini dinamik olarak açıyor ve `Günlük İhale Bülteni` başlığını doğruluyor. Böylece İstanbul günü düzeltmesiyle birlikte sekme yükleme ve erişilebilir başlık regresyonu da otomatik izleniyor. Doğrulama: browser QA başarılı; günlük bülten, analitik, ICS, çıktı ve mobil kontrolleri aynı koşuda geçti. + +### 2026-09-06 · Örtük düğme gönderimlerinin kaldırılması + +Tüm JSX ekranlarında form dışında kalan düğmeler açık `type="button"` kullanacak şekilde standardize edildi. Filtre, gezinme, dışa aktarma, modal, pazar, bildirim ve yönetim eylemleri artık bir form kapsayıcısına taşınsa bile istemeden submit tetiklemiyor; gerçek form gönderimleri `type="submit"` olarak korunuyor. + +Doğrulama: 293 otomatik test, üretim derlemesi ve browser QA başarılı. QA akışı Günlük Bülten, Analitik, ICS, çıktı ve 390px mobil kontrollerini geçti. diff --git a/src/components/AiSpecAnalyzerModal.jsx b/src/components/AiSpecAnalyzerModal.jsx index 86ee827..d23b1de 100644 --- a/src/components/AiSpecAnalyzerModal.jsx +++ b/src/components/AiSpecAnalyzerModal.jsx @@ -371,7 +371,7 @@ export const AiSpecAnalyzerModal = () => {
- @@ -225,7 +225,7 @@ export const LandingPage = ({ onGiris }) => { fiyat analizini tek panelde toplar. Siz teklife odaklanın, takibi biz yapalım.

- @@ -329,7 +329,7 @@ export const LandingPage = ({ onGiris }) => {

Yarınki ilanlar sizi beklemeyecek.

Bugün girin, kriterlerinizi kurun; yarın sabah ilk bülteniniz hazır olsun.

-
@@ -347,7 +347,7 @@ export const LandingPage = ({ onGiris }) => {
Gizlilik Politikası Kullanım Şartları - +
diff --git a/src/components/LeftSidebar.jsx b/src/components/LeftSidebar.jsx index 007f206..50bc4e9 100644 --- a/src/components/LeftSidebar.jsx +++ b/src/components/LeftSidebar.jsx @@ -90,7 +90,7 @@ export const LeftSidebar = ({onOpenProductSearch} = {}) => { Hızlı Erişim {(detailedQueries.institution || detailedQueries.registration || selectedRegion || quickFilter !== 'all' || selectedSektorler.length || selectedCpvler.length || selectedCity || selectedAlimTuru || selectedKurumTipi) && ( - +

👤 {filter.user} {filter.sehir && `• 📍 ${filter.sehir}`}

- {openSections.kurumTipleri && (
- {INSTITUTION_TYPES_LIST.map(k => ( - {openSections.iller && (
- {CITIES_LIST.map(city => ( -
- - {idx + 1} - @@ -155,11 +155,11 @@ export const AiModelSettings = () => {
{idx !== 0 && ( - )} -
@@ -178,7 +178,7 @@ export const AiModelSettings = () => {
{available.map(m => ( - } + {hata && }
@@ -124,7 +124,7 @@ const ApiKeySession = () => { {yeniAnahtar.anahtar} -
- @@ -180,7 +180,7 @@ const ApiKeySession = () => { setYeniAd(e.target.value)} aria-label="Anahtar adı" placeholder="Anahtar adı (ör. ERP Entegrasyonu)" disabled={kilitli || busy || loading || !durum} className="min-w-0 flex-1 bg-slate-50 border border-slate-200 rounded-lg px-2.5 py-2 text-xs disabled:opacity-50" /> - diff --git a/src/components/tools/BriefTercihi.jsx b/src/components/tools/BriefTercihi.jsx index b400f50..4ec6983 100644 --- a/src/components/tools/BriefTercihi.jsx +++ b/src/components/tools/BriefTercihi.jsx @@ -34,9 +34,9 @@ function BriefPanel(){

Haftalık Brief

Haftanın takipli ihaleleri ve geçen hafta sonuçlanan takipliler için özet tercihi. Gönderim, sunucu zamanlayıcısının ve ilgili e-posta/Telegram hizmetinin etkin olmasına bağlıdır.

- {value&&} - - + {value&&} + +
{busy&&

Haftalık özet işlemi sürüyor…

} {error&&

{error}

} diff --git a/src/components/tools/CompetitorRadar.jsx b/src/components/tools/CompetitorRadar.jsx index d0b1ebd..9309baf 100644 --- a/src/components/tools/CompetitorRadar.jsx +++ b/src/components/tools/CompetitorRadar.jsx @@ -59,7 +59,7 @@ export const CompetitorRadar = () => {
-
- - - diff --git a/src/components/tools/McpRssKarti.jsx b/src/components/tools/McpRssKarti.jsx index aebab84..36c86cb 100644 --- a/src/components/tools/McpRssKarti.jsx +++ b/src/components/tools/McpRssKarti.jsx @@ -24,7 +24,7 @@ export const McpRssKarti = () => {

{o.ad} — {o.not}

- +
{o.kod}
@@ -32,7 +32,7 @@ export const McpRssKarti = () => {

RSS beslemesi — Feedly, Outlook, Slack RSS, n8n… (il, sektor, q filtreleri)

- +
{rss}

Sonuç ilanları beslemesi anahtarsız: {origin}/api/feeds/sonuc.rss (firma, idare, il filtreleri). Anahtarı ih_live_ANAHTARINIZ yerine yazın.

diff --git a/src/components/tools/NotifySubscriptions.jsx b/src/components/tools/NotifySubscriptions.jsx index 224d545..88bdf01 100644 --- a/src/components/tools/NotifySubscriptions.jsx +++ b/src/components/tools/NotifySubscriptions.jsx @@ -126,7 +126,7 @@ const SubscriptionForm = () => { {a.deliveryStatus && {a.deliveryStatus.state==='uncertain'?'Gönderim sonucu belirsiz. Uygulama yöneticisinin sağlayıcı kaydını kontrol etmesi gerekiyor.':'E-posta gönderimi bekliyor.'}}

- @@ -143,7 +143,7 @@ const SubscriptionForm = () => { setSite(e.target.value)} placeholder="firmasitesi.com" className="flex-1 bg-white border border-blue-200 rounded-lg px-2.5 py-2 text-xs" /> - @@ -185,7 +185,7 @@ const SubscriptionForm = () => { {konular.map((k) => ( {k} - + ))} @@ -196,14 +196,14 @@ const SubscriptionForm = () => { onKeyDown={(e) => { if (e.key === 'Enter') { konuEkle(ozelKonu); setOzelKonu(''); } }} placeholder="Kendi konunuzu yazın ve Enter'a basın" className="flex-1 bg-slate-50 border border-slate-200 rounded-lg px-2.5 py-2 text-xs" /> -

Hazır sektörler:

{sektorListesi.map((s) => ( - @@ -213,7 +213,7 @@ const SubscriptionForm = () => { {/* Gelişmiş daraltma (isteğe bağlı) */}
- @@ -235,7 +235,7 @@ const SubscriptionForm = () => { )}
-

+

{error}

)} diff --git a/src/components/tools/Pricing.jsx b/src/components/tools/Pricing.jsx index 88427a4..aa5d817 100644 --- a/src/components/tools/Pricing.jsx +++ b/src/components/tools/Pricing.jsx @@ -62,10 +62,10 @@ export const Pricing = () => { {/* Aylık / Yıllık */}
- -
@@ -107,7 +107,7 @@ export const Pricing = () => {
{plan.iptalEdilebilir && ( - + ) : permission === 'unsupported' ? (

Bu tarayıcıda bildirim özelliği kullanılamıyor. Uygulama içindeki bildirim listesini kullanabilirsiniz.

) : permission !== 'granted' ? ( - ) : ( - @@ -268,7 +268,7 @@ const PwaPanel = () => {

E-posta gönderimlerini aşağıdaki bildirim aboneliklerinden yönetin. Tarayıcı bildirim seçimi ve sessiz saatler e-posta aboneliklerini kapatmaz.

- ))} - -