Skip to main content

Sürüm Notları — OKR Yönetimi UX İyileştirmeleri

Tarih: 11 Şubat 2026
Etkilenen Modüller: OKR Yönetimi (Odak Görünümü), OKR Döngü Detay
Etkilenen Dosyalar: OkrManagePage.tsx, OkrManagePageV3.tsx, OkrCycleDetailDrawer.tsx


Hata Düzeltmeleri

1. Onay Butonlarında Loading Sorunu

Sorun: OKR Yönetimi sayfasında herhangi bir birimin onay butonuna (Onaya Gönder, Onayla, Revize Et, Geri Çek) tıklandığında, ağaçtaki tüm birimlerin aynı tip butonları da loading gösteriyordu.

Kök Neden: approvalMutation.isPending tek bir boolean olarak tüm UnitTree düğümlerine aynı şekilde iletiliyordu; hangi birimin butonuna tıklandığı ayırt edilemiyordu.

Çözüm:

  • OkrManagePage.tsx: approvalLoading prop'u boolean yerine string | null (tıklanan birimin ID'si) olarak değiştirildi. Her UnitTree düğümü approvalLoading === node.id karşılaştırmasıyla sadece kendisi loading olduğunda butonunu spinner ile gösterir.
  • OkrManagePageV3.tsx: pendingApprovalStatus değişkeniyle hangi durum geçişinin beklemede olduğu takip edilir. Aynı paneldeki birden fazla buton (ör. "Revize Et" ve "Onayla") arasında yalnızca tıklananın loading göstermesi sağlandı.

2. "Role is not defined" Runtime Hatası

Sorun: /okr/cycles sayfasında OkrCycleDetailDrawer açıldığında konsolda Role is not defined hatası oluşuyordu.

Kök Neden: import { Role } from '../../types/rbac.types' ifadesi, isolatedModules: true + Vite HMR ortamında enum'un runtime değerinin silinmesine neden oluyordu.

Çözüm: import type { Role } kullanılarak tip-düzeyinde import yapıldı; enum değerleri yerine string literal dizisi (['SUPER_ADMIN', 'ADMIN', ...] as Role[]) kullanıldı.


İyileştirmeler

3. OKR İstatistik Kartları — Doğru Hesaplama

Sorun: OKR Yönetimi (Odak görünümü) sayfasında seçili birimin üst kısmındaki istatistik kartları (Toplam Hedef, Toplam KR, İnisiyatifler vb.) yanlış sayılar gösteriyordu. Örneğin, 1 hedefi olan bir birimde "Toplam Hedef: 3" yazıyordu.

Kök Neden: İstatistikler backend /new-okr/stats API'sinden çekiliyordu; bu API seçili birim + tüm alt birimlerin objective, KR ve initiative sayılarını topluyordu. Ancak hedef listesi yalnızca seçili birimin kendi hedeflerini gösterdiğinden tutarsızlık oluşuyordu.

Çözüm: Backend API çağrısı kaldırılarak istatistikler frontend'de useMemo ile hesaplanır hale getirildi:

MetrikKapsam
Toplam HedefSeçili birim + tüm alt birimler (sadece objective sayısı, KR/initiative dahil değil)
Onaylanan / Bekleyen / Taslak HedefSeçili birim + tüm alt birimler (her birimin onay durumuna göre)
Toplam KRSeçili birim + tüm alt birimler
İnisiyatiflerSeçili birim + tüm alt birimler
Alt BirimlerSeçili birim + tüm alt birimler
Ağırlıklı BaşarımYalnızca seçili birimin doğrudan hedeflerinden
Ağırlıklı SağlıkYalnızca seçili birimin doğrudan hedeflerinden

Neden ayrım? Ağırlıklı başarım ve sağlık, seçili birimin kendi performansını yansıtmalıdır; alt birimlerin metrikleri kendi sayfalarında görüntülenir.


Bilinen Sorunlar

  • Yok.

Yeni Özellikler

4. OKR Owner & Contributor Sistemi

Açıklama: OKR Objective, Key Result ve Initiative seviyelerinde ayrıntılı sahiplik (owner) ve katkıda bulunan (contributor) atama sistemi eklendi.

Sahiplik Kuralları:

OKR KaydıOwnerContributor
ObjectiveOtomatik: Birim lideri (read-only)Çoklu seçim (oluşturma + düzenleme)
Key ResultTekli arama + seçimÇoklu seçim (oluşturma + düzenleme)
InitiativeTekli arama + seçimÇoklu seçim (oluşturma + düzenleme)

Gizlilik Görünürlük:

  • Bir kaydın owner veya contributor'ı, gizli (confidential) kayıtları birim üyeliğinden bağımsız görebilir.
  • Üst birim liderleri (ancestor) tüm alt kayıtları her durumda görebilir.
  • SUPER_ADMIN ve GROUP_ADMIN tüm kayıtları görebilir.

Backend Değişiklikleri:

  • new-okr.service.ts: 6 CRUD metodu ownerMembershipId ve contributorIds desteği
  • new-okr.controller.ts: Objective contributor CRUD endpoint'leri
  • confidentiality.service.ts: 3 yeni owner/contributor görünürlük metodu
  • Hierarchy response: ownerMembership ve contributors verisi dahil

Frontend Değişiklikleri:

  • OkrManagePageV3.tsx ve OkrManagePage.tsx: Her iki sayfada da 6 form çekmecesinde (3 create + 3 edit) owner/contributor UI
  • Edit/görüntüleme çekmeceleri 2 sekmeli yapıya ("Detay" + "Katkıda Bulunanlar") dönüştürüldü
  • Görüntüleme modunda "Düzenle" butonu eklendi (kilitli birimlerde gizlenir)
  • Create formları düzenle formlarıyla uyumlu tasarıma geçirildi (grid md:grid-cols-2, bölüm ayırıcılar)
  • Üye arama API'si üzerinden dinamik owner/contributor seçimi

Etkilenen Dosyalar:

  • cos-be/src/new-okr/new-okr.service.ts
  • cos-be/src/new-okr/new-okr.controller.ts
  • cos-be/src/common/services/confidentiality.service.ts
  • cos-be/src/rbac/registries/okr.registry.ts
  • cos-fe/src/pages/Okr/OkrManagePageV3.tsx
  • cos-fe/src/pages/Okr/OkrManagePage.tsx

Kurulum / Yükseltme

Bu sürüm hem frontend hem backend değişiklikleri içerir. Prisma şeması önceki sürümlerde güncellenmiş olup ek migration gerekmez.

  1. cd cos-be && npm run build ile backend'i yeniden derleyin.
  2. cd cos-fe && npm run build ile frontend'i yeniden derleyin.
  3. Deploy edin.