From eda34f6c4da2d08f6f1f1d16a67617340f1dedb7 Mon Sep 17 00:00:00 2001 From: Vivek Kumar Date: Wed, 15 Apr 2026 16:52:25 +0530 Subject: [PATCH 1/2] sync signature URL state and avoid duplicate change events --- Sources/JoyfillUI/View/Fields/SignatureView.swift | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Sources/JoyfillUI/View/Fields/SignatureView.swift b/Sources/JoyfillUI/View/Fields/SignatureView.swift index acd8bd45..9a9a176d 100644 --- a/Sources/JoyfillUI/View/Fields/SignatureView.swift +++ b/Sources/JoyfillUI/View/Fields/SignatureView.swift @@ -107,10 +107,24 @@ struct SignatureView: View { } } .onChange(of: signatureURL) { newValue in + if newValue == (signatureDataModel.signatureURL ?? "") { + return + } let newSignatureImageValue = ValueUnion.string(newValue) let fieldEvent = FieldChangeData(fieldIdentifier: signatureDataModel.fieldIdentifier, updateValue: newSignatureImageValue) eventHandler.onChange(event: fieldEvent) } + .onChange(of: signatureDataModel.signatureURL ?? "") { latestURL in + guard latestURL != signatureURL else { + return + } + signatureURL = latestURL + if latestURL.isEmpty { + signatureImage = nil + } else { + loadImageFromURL() + } + } } func loadImageFromURL() { From 00e6fd2489aefff0137eca4a9e6d29b82cc866ed Mon Sep 17 00:00:00 2001 From: Vivek Kumar Date: Fri, 17 Apr 2026 15:49:08 +0530 Subject: [PATCH 2/2] Add test for signature field in changehandler --- .../OnChangeHandlerUITests.swift | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/JoyfillSwiftUIExample/JoyfillUITests/ChangeUITests/OnChangeHandlerUITests.swift b/JoyfillSwiftUIExample/JoyfillUITests/ChangeUITests/OnChangeHandlerUITests.swift index fd4d0242..ce483729 100644 --- a/JoyfillSwiftUIExample/JoyfillUITests/ChangeUITests/OnChangeHandlerUITests.swift +++ b/JoyfillSwiftUIExample/JoyfillUITests/ChangeUITests/OnChangeHandlerUITests.swift @@ -2603,6 +2603,30 @@ final class OnChangeHandlerUITests: JoyfillUITestsBaseClass { deleteSelectedImages() } + func testSignatureCoordinatess() throws { + guard UIDevice.current.userInterfaceIdiom == .pad else { + return + } + + let pageSelectionButton = app.buttons.matching(identifier: "PageNavigationIdentifier") + let pageSheetSelectionButton = app.buttons.matching(identifier: "PageSelectionIdentifier") + + pageSelectionButton.element(boundBy: 0).tap() + pageSheetSelectionButton.element(boundBy: 3).tap() + pageSelectionButton.element(boundBy: 1).tap() + pageSheetSelectionButton.element(boundBy: 3).tap() + + let signatureButtons = app.buttons.matching(identifier: "SignatureIdentifier") + let leftSignatureButton = signatureButtons.element(boundBy: 0) + let rightSignatureButton = signatureButtons.element(boundBy: 1) + + leftSignatureButton.tap() + drawSignatureLine() + app.buttons["SaveSignatureIdentifier"].tap() + + XCTAssertEqual(rightSignatureButton.label, "Edit Signature", "Signature added on left should reflect on right side.") + } + func deleteSelectedImages() { app.buttons["ImageDeleteIdentifier"].tap() }