Skip to content

Commit a8256cf

Browse files
authored
Merge pull request #6508 from LibreSign/fix/improve-ux-when-node-was-deleted
fix: improve ux when node was deleted
2 parents 3e41332 + 67177f6 commit a8256cf

4 files changed

Lines changed: 111 additions & 52 deletions

File tree

src/components/RightSidebar/RequestSignatureTab.vue

Lines changed: 90 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -7,78 +7,83 @@
77
<NcNoteCard v-if="showDocMdpWarning" type="warning">
88
{{ t('libresign', 'This document has been certified with no changes allowed. You cannot add more signers to this document.') }}
99
</NcNoteCard>
10+
<NcNoteCard v-if="isOriginalFileDeleted" type="warning">
11+
{{ t('libresign', 'The original file was deleted. You can no longer add signers or open it.') }}
12+
</NcNoteCard>
1013
<NcNoteCard v-if="hasSignersWithDisabledMethods" type="warning">
1114
{{ t('libresign', 'Some signers use identification methods that have been disabled. Please remove or update them before requesting signatures.') }}
1215
</NcNoteCard>
13-
<NcButton v-if="filesStore.canAddSigner()"
16+
<NcButton v-if="filesStore.canAddSigner() && !isOriginalFileDeleted"
1417
:variant="hasSigners ? 'secondary' : 'primary'"
1518
@click="addSigner">
1619
<template #icon>
1720
<AccountPlus :size="20" />
1821
</template>
1922
{{ t('libresign', 'Add signer') }}
2023
</NcButton>
21-
<NcCheckboxRadioSwitch v-if="showPreserveOrder"
24+
<NcCheckboxRadioSwitch v-if="showPreserveOrder && !isOriginalFileDeleted"
2225
v-model="preserveOrder"
2326
type="switch"
2427
@update:checked="onPreserveOrderChange">
2528
{{ t('libresign', 'Preserve signing order') }}
2629
</NcCheckboxRadioSwitch>
27-
<NcButton v-if="showViewOrderButton"
30+
<NcButton v-if="showViewOrderButton && !isOriginalFileDeleted"
2831
type="tertiary"
2932
@click="showOrderDiagram = true">
3033
<template #icon>
3134
<ChartGantt :size="20" />
3235
</template>
3336
{{ t('libresign', 'View signing order') }}
3437
</NcButton>
35-
<Signers event="libresign:edit-signer"
38+
<Signers :event="isOriginalFileDeleted ? '' : 'libresign:edit-signer'"
3639
@signing-order-changed="debouncedSave">
3740
<template #actions="{signer, closeActions}">
38-
<NcActionInput v-if="canEditSigningOrder(signer)"
39-
:label="t('libresign', 'Signing order')"
40-
type="number"
41-
:value="signer.signingOrder || 1"
42-
@update:value="updateSigningOrder(signer, $event)"
43-
@submit="confirmSigningOrder(signer); closeActions()"
44-
@blur="confirmSigningOrder(signer)">
45-
<template #icon>
46-
<OrderNumericAscending :size="20" />
47-
</template>
48-
</NcActionInput>
49-
<NcActionButton v-if="canCustomizeMessage(signer)"
50-
:close-after-click="true"
51-
@click="customizeMessage(signer); closeActions()">
52-
<template #icon>
53-
<MessageText :size="20" />
54-
</template>
55-
{{ t('libresign', 'Customize message') }}
56-
</NcActionButton>
57-
<NcActionButton v-if="canDelete(signer)"
58-
aria-label="Delete"
59-
:close-after-click="true"
60-
@click="filesStore.deleteSigner(signer)">
61-
<template #icon>
62-
<Delete :size="20" />
63-
</template>
64-
{{ t('libresign', 'Delete') }}
65-
</NcActionButton>
66-
<NcActionButton v-if="canRequestSignature(signer)"
67-
:close-after-click="true"
68-
@click="requestSignatureForSigner(signer)">
69-
<template #icon>
70-
<Send :size="20" />
71-
</template>
72-
{{ t('libresign', 'Request signature') }}
73-
</NcActionButton>
74-
<NcActionButton v-if="canSendReminder(signer)"
75-
:close-after-click="true"
76-
@click="sendNotify(signer)">
77-
<template #icon>
78-
<Bell :size="20" />
79-
</template>
80-
{{ t('libresign', 'Send reminder') }}
81-
</NcActionButton>
41+
<template v-if="!isOriginalFileDeleted">
42+
<NcActionInput v-if="canEditSigningOrder(signer)"
43+
:label="t('libresign', 'Signing order')"
44+
type="number"
45+
:value="signer.signingOrder || 1"
46+
@update:value="updateSigningOrder(signer, $event)"
47+
@submit="confirmSigningOrder(signer); closeActions()"
48+
@blur="confirmSigningOrder(signer)">
49+
<template #icon>
50+
<OrderNumericAscending :size="20" />
51+
</template>
52+
</NcActionInput>
53+
<NcActionButton v-if="canCustomizeMessage(signer)"
54+
:close-after-click="true"
55+
@click="customizeMessage(signer); closeActions()">
56+
<template #icon>
57+
<MessageText :size="20" />
58+
</template>
59+
{{ t('libresign', 'Customize message') }}
60+
</NcActionButton>
61+
<NcActionButton v-if="canDelete(signer)"
62+
aria-label="Delete"
63+
:close-after-click="true"
64+
@click="filesStore.deleteSigner(signer)">
65+
<template #icon>
66+
<Delete :size="20" />
67+
</template>
68+
{{ t('libresign', 'Delete') }}
69+
</NcActionButton>
70+
<NcActionButton v-if="canRequestSignature(signer)"
71+
:close-after-click="true"
72+
@click="requestSignatureForSigner(signer)">
73+
<template #icon>
74+
<Send :size="20" />
75+
</template>
76+
{{ t('libresign', 'Request signature') }}
77+
</NcActionButton>
78+
<NcActionButton v-if="canSendReminder(signer)"
79+
:close-after-click="true"
80+
@click="sendNotify(signer)">
81+
<template #icon>
82+
<Bell :size="20" />
83+
</template>
84+
{{ t('libresign', 'Send reminder') }}
85+
</NcActionButton>
86+
</template>
8287
</template>
8388
</Signers>
8489
<NcFormBox v-if="isEnvelope" class="action-form-box">
@@ -147,7 +152,7 @@
147152
</template>
148153
{{ t('libresign', 'Validation info') }}
149154
</NcButton>
150-
<NcButton v-if="!isEnvelope"
155+
<NcButton v-if="!isEnvelope && !isOriginalFileDeleted"
151156
wide
152157
variant="secondary"
153158
@click="openFile()">
@@ -417,13 +422,22 @@ export default {
417422
return this.signatureFlow === 'ordered_numeric'
418423
},
419424
showSigningOrderOptions() {
420-
return this.hasSigners && this.filesStore.canSave() && !this.isAdminFlowForced
425+
return !this.isOriginalFileDeleted
426+
&& this.hasSigners
427+
&& this.filesStore.canSave()
428+
&& !this.isAdminFlowForced
421429
},
422430
showPreserveOrder() {
423-
return this.totalSigners > 1 && this.filesStore.canSave() && !this.isAdminFlowForced
431+
return !this.isOriginalFileDeleted
432+
&& this.totalSigners > 1
433+
&& this.filesStore.canSave()
434+
&& !this.isAdminFlowForced
424435
},
425436
showViewOrderButton() {
426-
return this.isOrderedNumeric && this.totalSigners > 1 && this.hasSigners
437+
return !this.isOriginalFileDeleted
438+
&& this.isOrderedNumeric
439+
&& this.totalSigners > 1
440+
&& this.hasSigners
427441
},
428442
shouldShowOrderedOptions() {
429443
return this.isOrderedNumeric && this.totalSigners > 1
@@ -434,8 +448,14 @@ export default {
434448
showDocMdpWarning() {
435449
return this.filesStore.isDocMdpNoChangesAllowed() && !this.filesStore.canAddSigner()
436450
},
451+
isOriginalFileDeleted() {
452+
return this.filesStore.isOriginalFileDeleted()
453+
},
437454
canEditSigningOrder() {
438455
return (signer) => {
456+
if (this.isOriginalFileDeleted) {
457+
return false
458+
}
439459
const minSigners = this.isAdminFlowForced ? 1 : 2
440460
441461
return this.isOrderedNumeric
@@ -446,11 +466,17 @@ export default {
446466
},
447467
canDelete() {
448468
return (signer) => {
469+
if (this.isOriginalFileDeleted) {
470+
return false
471+
}
449472
return this.filesStore.canSave() && !signer.signed
450473
}
451474
},
452475
canCustomizeMessage() {
453476
return (signer) => {
477+
if (this.isOriginalFileDeleted) {
478+
return false
479+
}
454480
if (signer.signed || !signer.signRequestId || signer.me) {
455481
return false
456482
}
@@ -469,6 +495,9 @@ export default {
469495
},
470496
canRequestSignature() {
471497
return (signer) => {
498+
if (this.isOriginalFileDeleted) {
499+
return false
500+
}
472501
if (!this.filesStore.canRequestSign
473502
|| signer.signed
474503
|| !signer.signRequestId
@@ -482,6 +511,9 @@ export default {
482511
},
483512
canSendReminder() {
484513
return (signer) => {
514+
if (this.isOriginalFileDeleted) {
515+
return false
516+
}
485517
if (!this.filesStore.canRequestSign
486518
|| signer.signed
487519
|| !signer.signRequestId
@@ -512,6 +544,9 @@ export default {
512544
})
513545
},
514546
showSaveButton() {
547+
if (this.isOriginalFileDeleted) {
548+
return false
549+
}
515550
if (!this.filesStore.canSave()) {
516551
return false
517552
}
@@ -533,6 +568,9 @@ export default {
533568
return true
534569
},
535570
showRequestButton() {
571+
if (this.isOriginalFileDeleted) {
572+
return false
573+
}
536574
if (!this.filesStore.canSave()) {
537575
return false
538576
}

src/components/Signers/Signer.vue

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,9 @@ export default {
155155
if (!this.draggable) {
156156
return false
157157
}
158+
if (this.filesStore.isOriginalFileDeleted()) {
159+
return false
160+
}
158161
const file = this.filesStore.getFile()
159162
if (!file || !file.signers) {
160163
return false
@@ -196,6 +199,9 @@ export default {
196199
if (!this.canRequestSign) {
197200
return
198201
}
202+
if (this.filesStore.isOriginalFileDeleted()) {
203+
return
204+
}
199205
if (this.event.length === 0) {
200206
return
201207
}

src/store/files.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,9 @@ export const useFilesStore = function(...args) {
248248
},
249249
canSign(file) {
250250
file = this.getFile(file)
251+
if (this.isOriginalFileDeleted(file)) {
252+
return false
253+
}
251254
return !this.isFullSigned(file)
252255
&& file.status > 0
253256
&& file?.signers?.filter(signer => signer.me).length > 0
@@ -270,6 +273,10 @@ export const useFilesStore = function(...args) {
270273
canAddSigner(file) {
271274
file = this.getFile(file)
272275

276+
if (this.isOriginalFileDeleted(file)) {
277+
return false
278+
}
279+
273280
if (this.isDocMdpNoChangesAllowed(file)) {
274281
return false
275282
}
@@ -286,8 +293,15 @@ export const useFilesStore = function(...args) {
286293
file = this.getFile(file)
287294
return file.docmdpLevel === 1 && file.signers && file.signers.length > 0
288295
},
296+
isOriginalFileDeleted(file) {
297+
file = this.getFile(file)
298+
return !!file?.metadata?.original_file_deleted
299+
},
289300
canSave(file) {
290301
file = this.getFile(file)
302+
if (this.isOriginalFileDeleted(file)) {
303+
return false
304+
}
291305
return this.canRequestSign
292306
&& (
293307
!Object.hasOwn(file, 'requested_by')

src/views/FilesList/FileEntry/FileEntryActions.vue

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,7 @@ export default {
193193
visible = this.filesStore.canDelete(this.file)
194194
} else if (action.id === 'open') {
195195
visible = this.source?.nodeType !== 'envelope'
196+
&& !this.filesStore.isOriginalFileDeleted(this.file)
196197
}
197198
return visible
198199
},

0 commit comments

Comments
 (0)