# Blok ödeme sayfasında sözleşme hatasına odaklanma

Tarih: 28 Ekim 2026. Bu düzeltme 2.4.13 sürüm paketine dahil edilmiştir; önceki 2.4.12 etiketi değiştirilmemiştir.

## Neden

Sözleşme kabul edilmediğinde `wc/store/validation` içinde hata oluşuyor ve mesaj gösteriliyordu. Ancak `CheckboxControl` bileşenine `hasError` iletilmediğinden kutunun kapsayıcısı `.has-error`, kutunun kendisi de `aria-invalid="true"` almıyordu.

WooCommerce 11.2.1'in `ScrollOnError` bileşeni, başarısız gönderimden sonra hataları görünür yapıp `input:invalid, .has-error input, .has-error select` seçicisiyle ilk hatalı alanı arıyor. Kutuyu bulamayınca `withScrollToTop` ödeme alanının başındaki kaydırma noktasına dönüyordu.

Resmi kaynaklar:

- [Checkout ve ScrollOnError](https://github.com/woocommerce/woocommerce/blob/11.2.1/plugins/woocommerce/client/blocks/assets/js/blocks/checkout/block.tsx)
- [CheckboxControl](https://github.com/woocommerce/woocommerce/blob/11.2.1/plugins/woocommerce/client/blocks/packages/public-api/blocks-components/checkbox-control/index.tsx)
- [withScrollToTop](https://github.com/woocommerce/woocommerce/blob/11.2.1/plugins/woocommerce/client/blocks/assets/js/base/hocs/with-scroll-to-top/index.tsx)
- [Validation Store API](https://developer.woocommerce.com/docs/block-development/reference/data-store/validation/)

## Uygulama

`assets/js/blocks/frontend.jsx`: Görünür hata durumu resmi `CheckboxControl.hasError` özelliğine aktarılıyor. `getValidationErrorId()` ile alınan kimlik, hata mesajına ve kutunun `aria-describedby` özelliğine bağlanıyor. Odak ve kaydırmayı WooCommerce yönetmeye devam ediyor; özel kaydırma, zamanlayıcı, DOM taşıma veya düğme olayını engelleme eklenmedi.

Sözleşme tek hatalı alansa kutuya odaklanılır. Kutu zaten görünürse WooCommerce onu yeniden kaydırmaz. Görünür alanın dışındaysa kutu görünür alana getirilir. Daha önce gelen eksik müşteri/adres alanı varsa standart ilk hatalı alan önceliği korunur.

Onay zorunluluğu, Store API verisi, sunucu doğrulaması, klasik checkout ve kayıtlı ayarlar değiştirilmedi.

`tests/blocks.test.cjs`: Gizli/görünür hata, kabul, kabulü geri alma, yeniden gönderim ve isteğe bağlı kabul durumlarında hata özelliği ve erişilebilir mesaj ilişkisi denetleniyor. Test dublörü gerçek `useSelect` aboneliği yapmadığı için effect sonrası yeniden çizim açıkça tetikleniyor.

`build/irem-block-frontend.js` ve `.asset.php`: Kaynak değişiklikten yeniden üretildi; içerik tabanlı asset sürümü güncellendi. `readme.txt`: Unreleased değişiklik notu eklendi.

## Bu değişiklik için çalıştırılan kontroller

- `npm run build`: Başarılı.
- `npm test`: 6 JavaScript/React testi başarılı.
- `node --check build/irem-block-frontend.js`: Başarılı.
- PHP 8.2.30 ile `php tests/php-regression.php /path/to/wordpress`: WordPress 6.9'un gerçek parser/serializer/çeviri koduyla 42 kontrol başarılı. Bu testte veritabanı ve WooCommerce sipariş nesneleri dublördür.
- Yenilenen `build/irem-block-frontend.asset.php` PHP syntax kontrolü başarılı.
- Google Chrome: 1280×800 ve 390×844 boyutlarında toplam 32 bileşen kontrolü başarılı. WooCommerce 11.2.1 etiketinden alınan gerçek `CheckboxControl`, `ScrollOnError` ve `withScrollToTop` kaynakları, eklentinin gerçek derlenmiş frontend dosyasıyla birlikte çalıştırıldı. Mağaza/checkout durum deposu ve gönderim işlemi test dublörüdür; test sayfasında temel checkbox yerleşim stilleri kullanılmıştır.
- Tarayıcıda kutuya odaklanma, görünürken kaydırmanın sabit kalması, ekran dışından görünür alana getirme, diğer eksik alana öncelik verme, tekrar gönderme, kabulü geri alma, geçerli kabul ve isteğe bağlı kabul kontrol edildi. JavaScript çalışma zamanı hatası oluşmadı.
- Aynı tarayıcı düzeneği yayımlanmış `tags/2.4.12` frontend dosyasıyla çalıştırıldığında ilk odak kontrolünde başarısız oldu: odak kutuya geçmedi. Düzeltilmiş dosya aynı kontrolden geçti.

Geçici test düzeneği ve indirilen resmi kaynaklar `/tmp/kc-focus-20261028/` içindedir; `node /tmp/kc-focus-20261028/run.cjs` ile tekrar çalıştırılabilir. Bu dizin geçicidir ve dağıtım paketine dahil değildir.

## Sınırlar

Bu değişiklik için tam WordPress/WooCommerce kurulumu üzerinden uçtan uca ödeme, gerçek ödeme sağlayıcısı, canlı müşteri mağazası ve Safari testi yapılmadı. Önceki sürümün geniş uyumluluk testleri `UYUMLULUK-RAPORU.md` içinde ayrı tarihle kayıtlıdır; bu değişiklikte yeniden çalıştırılmış sayılmamalıdır. Canlı mağazadaki tema ve diğer eklentilerle son doğrulama gereklidir.

Sonraki doğrulama: Aynı gün Dompdf güncellemesi için ayrı ve kalıcı bir yerel WordPress/WooCommerce kurulumu oluşturuldu. Odak düzeltmesi bu kez gerçek blok ödeme sayfasında masaüstü ve mobil Chrome görünümünde doğrulandı. İlk gönderimde ve onayın geri alınmasından sonraki gönderimde kutuya odaklanma, görünür kutuda kaydırmanın korunması ve ekran dışındaki kutunun görünür alana getirilmesi geçti. WooCommerce 11.2.1, aynı görünür hata ile tekrar gönderimde odağı düğmede bırakabiliyor; bu durumda da sayfa başına kayma veya onaysız checkout POST'u görülmedi. Önceki bileşen testindeki tekrar odak iddiası gerçek checkout için genellenmemelidir. Ayrıntılı yeni sonuçlar `DOMPDF-YEREL-TEST-RAPORU.md` içindedir. Safari ve canlı müşteri mağazası bu sonraki kontrolde de denenmedi.
