From 075adea637a791db76ffd5269db59ec1da0a0e27 Mon Sep 17 00:00:00 2001 From: Vitor Mattos <1079143+vitormattos@users.noreply.github.com> Date: Thu, 11 Dec 2025 15:53:38 -0300 Subject: [PATCH 1/4] refactor: rename requestSignaturesWithVisibleElements to updateSignatureRequest - Add status parameter with default value 1 - Make method more flexible for different status transitions Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com> --- src/store/files.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/store/files.js b/src/store/files.js index 71fb93b98..990d576f0 100644 --- a/src/store/files.js +++ b/src/store/files.js @@ -399,7 +399,7 @@ export const useFilesStore = function(...args) { this.addFile(data.ocs.data.data) return data.ocs.data }, - async requestSignaturesWithVisibleElements({ visibleElements = [], signers = null, uuid = null, nodeId = null }) { + async updateSignatureRequest({ visibleElements = [], signers = null, uuid = null, nodeId = null, status = 1 }) { const file = this.getFile() const config = { url: generateOcsUrl('/apps/libresign/api/v1/request-signature'), @@ -408,7 +408,7 @@ export const useFilesStore = function(...args) { name: file?.name, users: signers || file.signers, visibleElements, - status: 1, + status, }, } From c8484973bfa587f33c03c84a8b45c29dcf1396fa Mon Sep 17 00:00:00 2001 From: Vitor Mattos <1079143+vitormattos@users.noreply.github.com> Date: Thu, 11 Dec 2025 15:53:47 -0300 Subject: [PATCH 2/4] feat: add conditional buttons for draft and pending signers - Show 'Request signature' button for draft status (status === 0) - Show 'Send reminder' button for pending status (status === 1) - Implement requestSignatureForSigner method to update signer status - Use signRequestId instead of identify for signer identification Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com> --- .../RightSidebar/RequestSignatureTab.vue | 37 ++++++++++++++++++- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/src/Components/RightSidebar/RequestSignatureTab.vue b/src/Components/RightSidebar/RequestSignatureTab.vue index 4dccfb081..eb95fe96c 100644 --- a/src/Components/RightSidebar/RequestSignatureTab.vue +++ b/src/Components/RightSidebar/RequestSignatureTab.vue @@ -32,7 +32,15 @@ {{ t('libresign', 'Delete') }} - + + {{ t('libresign', 'Request signature') }} + + @@ -415,6 +423,31 @@ export default { }) }, + async requestSignatureForSigner(signer) { + this.hasLoading = true + try { + const file = this.filesStore.getFile() + const signers = file.signers.map(s => { + if (s.signRequestId === signer.signRequestId) { + return { ...s, status: 1 } + } + return s + }) + await this.filesStore.updateSignatureRequest({ + visibleElements: [], + signers, + status: 1, + }) + showSuccess(t('libresign', 'Signature requested')) + } catch (error) { + if (error.response?.data?.ocs?.data?.message) { + showError(error.response.data.ocs.data.message) + } else if (error.response?.data?.ocs?.data?.errors) { + error.response.data.ocs.data.errors.forEach(error => showError(error.message)) + } + } + this.hasLoading = false + }, async sign() { const uuid = this.filesStore.getFile().signers .reduce((accumulator, signer) => { @@ -448,7 +481,7 @@ export default { async request() { this.hasLoading = true try { - const response = await this.filesStore.requestSignaturesWithVisibleElements({ visibleElements: [] }) + const response = await this.filesStore.updateSignatureRequest({ visibleElements: [], status: 1 }) showSuccess(t('libresign', response.message)) } catch (error) { if (error.response?.data?.ocs?.data?.message) { From a25ccf5279666f54dba865c94301f5e0a1f65a1f Mon Sep 17 00:00:00 2001 From: Vitor Mattos <1079143+vitormattos@users.noreply.github.com> Date: Thu, 11 Dec 2025 15:53:55 -0300 Subject: [PATCH 3/4] refactor: update VisibleElements to use updateSignatureRequest method Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com> --- src/Components/Request/VisibleElements.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Components/Request/VisibleElements.vue b/src/Components/Request/VisibleElements.vue index 7dac0cc7e..bb8075d95 100644 --- a/src/Components/Request/VisibleElements.vue +++ b/src/Components/Request/VisibleElements.vue @@ -313,7 +313,7 @@ export default { const visibleElements = this.buildVisibleElements() try { - const response = await this.filesStore.requestSignaturesWithVisibleElements({ visibleElements }) + const response = await this.filesStore.updateSignatureRequest({ visibleElements, status: 1 }) this.filesStore.addFile(response.data) this.showConfirm = false showSuccess(t('libresign', response.message)) From 7513bb2869135ebe8e1b8df154d700cd492f7fa4 Mon Sep 17 00:00:00 2001 From: Vitor Mattos <1079143+vitormattos@users.noreply.github.com> Date: Thu, 11 Dec 2025 15:58:54 -0300 Subject: [PATCH 4/4] refactor: extract signer action conditions to computed properties - Add canEditSigningOrder, canDelete, canRequestSignature, canSendReminder - Improve code readability and maintainability - Ensure consistent reactive behavior across all conditions Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com> --- .../RightSidebar/RequestSignatureTab.vue | 39 +++++++++++++++++-- 1 file changed, 35 insertions(+), 4 deletions(-) diff --git a/src/Components/RightSidebar/RequestSignatureTab.vue b/src/Components/RightSidebar/RequestSignatureTab.vue index eb95fe96c..582f5e9f4 100644 --- a/src/Components/RightSidebar/RequestSignatureTab.vue +++ b/src/Components/RightSidebar/RequestSignatureTab.vue @@ -12,7 +12,7 @@ - @@ -32,7 +32,7 @@ {{ t('libresign', 'Delete') }} - {{ t('libresign', 'Request signature') }} - @@ -248,6 +248,37 @@ export default { isOrderedNumeric() { return this.signatureFlow === 'ordered_numeric' }, + canEditSigningOrder() { + return (signer) => { + return this.isOrderedNumeric + && this.totalSigners > 1 + && this.filesStore.canSave() + && !signer.signed + } + }, + canDelete() { + return (signer) => { + return this.filesStore.canSave() && !signer.signed + } + }, + canRequestSignature() { + return (signer) => { + return this.filesStore.canRequestSign + && !signer.signed + && signer.signRequestId + && !signer.me + && signer.status === 0 + } + }, + canSendReminder() { + return (signer) => { + return this.filesStore.canRequestSign + && !signer.signed + && signer.signRequestId + && !signer.me + && signer.status === 1 + } + }, showSaveButton() { if (!this.filesStore.canSave()) { return false