diff --git a/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Components/PdfEditor/SenderPdfImageEditor.razor b/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Components/PdfEditor/SenderPdfImageEditor.razor index 738babe8..d0ca42b4 100644 --- a/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Components/PdfEditor/SenderPdfImageEditor.razor +++ b/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Components/PdfEditor/SenderPdfImageEditor.razor @@ -9,15 +9,21 @@ @if (PageCount > 0) {
- + ZoomPercent="112" + GoFirstPage="OnGoFirstPageAsync" + GoPreviousPage="OnGoPreviousPageAsync" + GoNextPage="OnGoNextPageAsync" + GoLastPage="OnGoLastPageAsync" + GoToPage="OnGoToPageAsync" />
}
@@ -121,6 +127,7 @@ private bool _isDragging; private double _grabOffsetXPt; private double _grabOffsetYPt; + private int _currentPage = 1; private static string GetFieldStyle(SenderPdfFieldOverlay field, double pageWidthPt, double pageHeightPt) { @@ -163,6 +170,17 @@ return $"aspect-ratio:{ratioText};cursor:{cursor};"; } + protected override void OnParametersSet() + { + if (PageCount <= 0) + { + _currentPage = 1; + return; + } + + _currentPage = Math.Max(1, Math.Min(_currentPage, PageCount)); + } + private async Task HandleClickAsync(MouseEventArgs args) { if (EditorClick.HasDelegate) @@ -219,6 +237,65 @@ await MoveField.InvokeAsync(new SenderPdfFieldMoveRequest(_draggedFieldIndex.Value, pageNumber, xPt, yPt)); } + private async Task OnGoFirstPageAsync() + { + await NavigateToPageAsync(1); + } + + private async Task OnGoPreviousPageAsync() + { + await NavigateToPageAsync(_currentPage - 1); + } + + private async Task OnGoNextPageAsync() + { + await NavigateToPageAsync(_currentPage + 1); + } + + private async Task OnGoLastPageAsync() + { + await NavigateToPageAsync(PageCount); + } + + private async Task OnGoToPageAsync(int page) + { + await NavigateToPageAsync(page); + } + + private async Task NavigateToPageAsync(int targetPage) + { + if (PageCount <= 0) + return; + + var page = Math.Max(1, Math.Min(targetPage, PageCount)); + _currentPage = page; + + await JSRuntime.InvokeVoidAsync( + "envelopeEditor.scrollToPdfPage", + "sender-editor-pdf-viewer", + page); + } + + private async Task OnEditorScrollAsync(EventArgs _) + { + if (PageCount <= 0) + return; + + var visiblePage = await JSRuntime.InvokeAsync( + "envelopeEditor.getVisiblePdfPageNumber", + "sender-editor-pdf-viewer"); + + if (!visiblePage.HasValue) + return; + + var clamped = Math.Max(1, Math.Min(visiblePage.Value, PageCount)); + if (clamped == _currentPage) + return; + + _currentPage = clamped; + await InvokeAsync(StateHasChanged); + } + private void OnEditorMouseUp(MouseEventArgs args) { _draggedFieldIndex = null; diff --git a/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Components/PdfEditor/SenderPdfImageEditorToolbar.razor b/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Components/PdfEditor/SenderPdfImageEditorToolbar.razor index 28137a86..0f2a3e36 100644 --- a/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Components/PdfEditor/SenderPdfImageEditorToolbar.razor +++ b/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Components/PdfEditor/SenderPdfImageEditorToolbar.razor @@ -1,35 +1,55 @@
- - -