Files
EnvelopeGenerator/OPEN_TASK.md
TekH 465986b527 Fix cross-page signature navigation and counter logic
The commit implements cross-page navigation for signatures in the `EnvelopeViewer.razor` component. Users can now navigate between signatures across pages using "Next Signature" and "Previous Signature" buttons.

Key changes:
- Fixed `getSignatureNavState()` to correctly calculate total, signed, and unsigned signatures globally.
- Updated `goToNextSignature()` to navigate to the next unsigned signature, including automatic page changes and scrolling.
- Updated `goToPreviousSignature()` to navigate to the last signed signature, including automatic page changes and scrolling.
- Ensured navigation buttons are properly disabled when no further navigation is possible.

The toolbar design remains unchanged, as requested. These changes address issues caused by a previous implementation that broke the counter and navigation functionality.
2026-06-07 16:15:32 +02:00

7.9 KiB

OPEN TASK: Cross-Page Signature Navigation

?? Görev Özeti

EnvelopeViewer.razor'da tüm sayfalarda imza navigasyonu implement et. Kullan?c? "Nächste Unterschrift" (?) ve "Vorherige Unterschrift" (?) butonlar? ile farkl? sayfalardaki imzalar aras?nda gezinebilmeli.


? Ba?ar?l? Olan K?s?m: Toolbar Tasar?m?

Görünüm:

[? ?? 2 / 5] [3 OFFEN] [?]

Özellikler:

  • ? Modern purple gradient tasar?m
  • ? Compact layout
  • ? "Nächste Unterschrift" butonu (?)
  • ? "Vorherige Unterschrift" butonu (?)
  • ? Counter alan? (2 / 5)
  • ? Badge ("3 offen" veya "? Komplett")

?? UYARI: TASARIMA DOKUNMA!

  • Kullan?c? tasar?m?n mükemmel oldu?unu onaylad?
  • CSS de?i?tirme
  • Layout de?i?tirme
  • Sadece JavaScript logic düzelt

? Ba?ar?s?z Olan K?s?mlar

Sorun 1: Counter Yanl?? De?erler Gösteriyor

Mevcut Durum (Revert sonras? bozuldu):

// Counter logic geri al?nd?, ?imdi yanl?? de?erler gösteriyor
// Düzeltilmesi gerekiyor

Olmas? Gereken:

  • Counter HER ZAMAN tüm sayfalardaki toplam imzay? göstermeli
  • Örnek: "2 / 5" = 5 toplam imza (tüm sayfalar), 2'si imzaland?
  • Kullan?c? farkl? sayfalara geçse de "2 / 5" de?i?memeli

Düzeltme:

getSignatureNavState() {
    if (!this._allSignatures || this._allSignatures.length === 0) {
        return { total: 0, signed: 0, unsigned: 0, ... };
    }
    
    const total = this._allSignatures.length;        // TÜM imzalar
    const signed = this.appliedSignatures.length;    // ?mzalananlar
    const unsigned = total - signed;
    
    return { total, signed, unsigned, ... };
}

Sorun 2: Navigasyon Sadece Mevcut Sayfada Çal???yor

Kullan?c?n?n Aç?klamas?:

"imzalar aras?nda gezinme butonu var ya (yeni ekledik hani bir önceki bir sonraki imzaya direkt atlamak için. i?te onu düzeltmen laz?m. ?uanda sadece görüntülenen sayfada gezinilebiliyor."

Mevcut Durum (BOZUK):

  • Kullan?c? Sayfa 1'de, tüm imzalar? (#1, #2, #3) imzalad?
  • "Sonraki ?mza" (?) butonuna bast?
  • ? Hiçbir ?ey olmuyor (mevcut sayfada imza kalmad??? için)

Olmas? Gereken:

  • Kullan?c? Sayfa 1'de, tüm imzalar? (#1, #2, #3) imzalad?
  • "Sonraki ?mza" (?) butonuna bast?
  • ? Otomatik Sayfa 2'ye geçer
  • ? ?mza #4 butonunu görünür hale getirir (scroll ile)

Ba?ka Senaryo:

  • Kullan?c? Sayfa 2'de, ?mza #4'ü yeni imzalad?
  • "Önceki ?mza" (?) butonuna bast?
  • ? Otomatik Sayfa 1'e döner
  • ? ?mzalanm?? ?mza #3'ü görünür hale getirir

?? Davran?? Spesifikasyonu

Senaryo: 3 Sayfada 5 ?mza

  • Sayfa 1: ?mza #1, #2, #3
  • Sayfa 2: ?mza #4
  • Sayfa 3: ?mza #5

Kullan?c? Aksiyonlar?:

Mevcut Durum Kullan?c? T?klar Beklenen Davran??
Sayfa 1, imza yok "Sonraki" (?) ?mza #1'e focus (ayn? sayfa)
Sayfa 1, #1 imzal? "Sonraki" (?) ?mza #2'ye focus (ayn? sayfa)
Sayfa 1, #1,#2,#3 imzal? "Sonraki" (?) Sayfa 2'ye geç, ?mza #4'e focus
Sayfa 2, #4 imzal? "Sonraki" (?) Sayfa 3'e geç, ?mza #5'e focus
Sayfa 3, hepsi imzal? "Sonraki" (?) Buton disabled
Sayfa 2, #4 imzal? "Önceki" (?) Sayfa 1'e dön, ?mza #3'e focus

Counter Görünümü (Her zaman global):

  • Sayfa 1: [?? 0 / 5] [5 OFFEN] (ba?lang?ç)
  • Sayfa 2: [?? 3 / 5] [2 OFFEN] (3 imza sonras?) ? TÜM sayfalarda ayn?
  • Sayfa 3: [?? 5 / 5] [? KOMPLETT] (hepsi imzal?)

?? ?mplementasyon Stratejisi

1. Counter Düzelt (ÖNCEL?K!)

Dosya: EnvelopeGenerator.ReceiverUI/wwwroot/js/pdf-viewer.js

getSignatureNavState() {
    if (!this._allSignatures || this._allSignatures.length === 0) {
        return {
            total: 0,
            signed: 0,
            unsigned: 0,
            currentIndex: -1,
            canGoPrev: false,
            canGoNext: false
        };
    }
    
    const total = this._allSignatures.length;        // Global say?m
    const signed = this.appliedSignatures.length;    // ?mzalananlar
    const unsigned = total - signed;
    
    return {
        total: total,
        signed: signed,
        unsigned: unsigned,
        currentIndex: signed,
        canGoPrev: signed > 0,
        canGoNext: unsigned > 0
    };
}

2. Sonraki ?mza Navigasyonu Düzelt

async goToNextSignature(dotNetRef) {
    if (!this._allSignatures || this._allSignatures.length === 0) {
        return false;
    }

    // ?lk imzalanmam?? imzay? bul (TÜM sayfalar aras?nda ara)
    const appliedIds = new Set(this.appliedSignatures.map(s => s.id));
    const nextSignature = this._allSignatures.find(sig => !appliedIds.has(sig.id));
    
    if (!nextSignature) {
        return false; // Hepsi imzalanm??
    }

    // Farkl? sayfadaysa sayfa de?i?tir
    if (nextSignature.page !== this.pageNum) {
        await this.goToPage(nextSignature.page);
        await new Promise(resolve => setTimeout(resolve, 300)); // Render bekle
    }
    
    // Mevcut sayfadaki butonu bul
    const button = this.signatureButtons.find(btn => 
        parseInt(btn.getAttribute('data-signature-id')) === nextSignature.id
    );
    
    // Görünür hale getir (gerekirse scroll yap)
    if (button) {
        this.scrollToButton(button);
    }

    // Counter güncelle
    if (dotNetRef) {
        dotNetRef.invokeMethodAsync('OnSignatureNavChanged');
    }

    return true;
}

3. Önceki ?mza Navigasyonu Düzelt

async goToPreviousSignature(dotNetRef) {
    if (this.appliedSignatures.length === 0) {
        return false;
    }

    // Son imzalanan imzay? al
    const lastApplied = this.appliedSignatures[this.appliedSignatures.length - 1];
    
    // Farkl? sayfadaysa sayfa de?i?tir
    if (lastApplied.page !== this.pageNum) {
        await this.goToPage(lastApplied.page);
        await new Promise(resolve => setTimeout(resolve, 300)); // Render bekle
    }

    // ?mzalanm?? imza container'?n? bul (HTML overlay)
    const container = document.querySelector(
        `.applied-signature[data-signature-id="${lastApplied.id}"]`
    );
    
    // Görünür hale getir
    if (container) {
        this.scrollToElement(container);
    }

    // Counter güncelle
    if (dotNetRef) {
        dotNetRef.invokeMethodAsync('OnSignatureNavChanged');
    }

    return true;
}

4. Veri Yap?lar? (Referans)

// Global tracking (TÜM imzalar, TÜM sayfalar)
this._allSignatures = [
    { id: 1, page: 1, x: 100, y: 200 },
    { id: 2, page: 1, x: 100, y: 400 },
    { id: 3, page: 1, x: 100, y: 600 },
    { id: 4, page: 2, x: 100, y: 200 },
    { id: 5, page: 3, x: 100, y: 200 }
];

// ?mzalanm?? imzalar (sayfalar aras? kal?c?)
this.appliedSignatures = [
    { id: 1, page: 1 },
    { id: 3, page: 1 }
];

// Mevcut sayfa butonlar? (geçici, sayfa de?i?ince yeniden olu?ur)
this.signatureButtons = [
    <button data-signature-id="2">  // Sadece Sayfa 1'deki imzalanmam??lar
];

?? De?i?tirilmeyecek Dosyalar

DOKUNMA:

  1. EnvelopeGenerator.ReceiverUI/Pages/EnvelopeViewer.razor - UI mükemmel
  2. EnvelopeGenerator.ReceiverUI/wwwroot/css/envelope-viewer.css - Stil mükemmel

SADECE DE???T?R:

  1. EnvelopeGenerator.ReceiverUI/wwwroot/js/pdf-viewer.js
    • getSignatureNavState() - Counter düzelt
    • goToNextSignature() - Cross-page ekle
    • goToPreviousSignature() - Cross-page ekle

? Ba?ar? Kriterleri

  • Counter tüm sayfalarda do?ru gösteriliyor (örn: "2 / 5")
  • ?mza uyguland?ktan sonra counter hemen güncelleniyor
  • "Sonraki" butonu bir sonraki imzalanmam?? imzaya gidiyor (cross-page)
  • "Önceki" butonu son imzalanan imzaya gidiyor (cross-page)
  • Hedef imza farkl? sayfadaysa otomatik sayfa de?i?iyor
  • ?mza butonu/overlay görünür hale geliyor (scroll ile)
  • Butonlar do?ru disable oluyor (Sonraki=hepsi imzal?, Önceki=hiç imzalanmam??)
  • Tasar?m de?i?medi (purple tema, compact layout)

Durum: ? BA?ARISIZ - YEN?DEN BA?LA
Tarih: 2025-01-26
Sebep: Önceki agent counter'? ve navigation'? bozdu
Kullan?c? Karar?: De?i?iklikleri geri al, sadece counter + navigation düzelt
Tasar?m: ? MÜKEMMEL - DOKUNMA