@hubsync/esign-web-sdk 6.5.6 → 6.5.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/verdocs-adopt-signature-dialog.verdocs-delegate-dialog.verdocs-disclosure-dialog.verdocs-kba-dialog.verdocs-otp-dialog.verdocs-passcode-dialog.verdocs-signing-progress.verdocs-view.entry.cjs.js.map +1 -1
- package/dist/cjs/verdocs-adopt-signature-dialog_8.cjs.entry.js +1 -8
- package/dist/cjs/verdocs-field-attachment_11.cjs.entry.js +1 -1
- package/dist/cjs/verdocs-sign.cjs.entry.js +129 -31
- package/dist/cjs/verdocs-sign.entry.cjs.js.map +1 -1
- package/dist/cjs/verdocs-web-sdk.cjs.js +1 -1
- package/dist/collection/components/dialogs/verdocs-signing-progress/verdocs-signing-progress.js +1 -8
- package/dist/collection/components/dialogs/verdocs-signing-progress/verdocs-signing-progress.js.map +1 -1
- package/dist/collection/components/embeds/verdocs-sign/verdocs-sign.js +133 -32
- package/dist/collection/components/embeds/verdocs-sign/verdocs-sign.js.map +1 -1
- package/dist/collection/components/fields/verdocs-field-radio/verdocs-field-radio.css +4 -5
- package/dist/components/{p-GnE8WZrr.js → p-1MIt5Mm9.js} +4 -4
- package/dist/components/{p-GnE8WZrr.js.map → p-1MIt5Mm9.js.map} +1 -1
- package/dist/components/{p-LfDLlp5r.js → p-BvPd1sPA.js} +3 -3
- package/dist/components/p-BvPd1sPA.js.map +1 -0
- package/dist/components/{p-COiuyfp1.js → p-CY3peFvA.js} +3 -10
- package/dist/components/p-CY3peFvA.js.map +1 -0
- package/dist/components/{p-4KJMQrRB.js → p-D3-Ing_B.js} +4 -4
- package/dist/components/{p-4KJMQrRB.js.map → p-D3-Ing_B.js.map} +1 -1
- package/dist/components/{p-Bv2DuncC.js → p-Dz20noaY.js} +3 -3
- package/dist/components/{p-Bv2DuncC.js.map → p-Dz20noaY.js.map} +1 -1
- package/dist/components/verdocs-build.js +4 -4
- package/dist/components/verdocs-field-radio.js +1 -1
- package/dist/components/verdocs-preview.js +1 -1
- package/dist/components/verdocs-sign.js +133 -32
- package/dist/components/verdocs-sign.js.map +1 -1
- package/dist/components/verdocs-signing-progress.js +1 -1
- package/dist/components/verdocs-template-document-page.js +1 -1
- package/dist/components/verdocs-template-fields.js +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/esm/verdocs-adopt-signature-dialog.verdocs-delegate-dialog.verdocs-disclosure-dialog.verdocs-kba-dialog.verdocs-otp-dialog.verdocs-passcode-dialog.verdocs-signing-progress.verdocs-view.entry.js.map +1 -1
- package/dist/esm/verdocs-adopt-signature-dialog_8.entry.js +1 -8
- package/dist/esm/verdocs-field-attachment_11.entry.js +1 -1
- package/dist/esm/verdocs-sign.entry.js +129 -31
- package/dist/esm/verdocs-sign.entry.js.map +1 -1
- package/dist/esm/verdocs-web-sdk.js +1 -1
- package/dist/esm-es5/loader.js +1 -1
- package/dist/esm-es5/verdocs-adopt-signature-dialog.verdocs-delegate-dialog.verdocs-disclosure-dialog.verdocs-kba-dialog.verdocs-otp-dialog.verdocs-passcode-dialog.verdocs-signing-progress.verdocs-view.entry.js.map +1 -1
- package/dist/esm-es5/verdocs-adopt-signature-dialog_8.entry.js +1 -1
- package/dist/esm-es5/verdocs-adopt-signature-dialog_8.entry.js.map +1 -1
- package/dist/esm-es5/verdocs-field-attachment_11.entry.js +1 -1
- package/dist/esm-es5/verdocs-field-attachment_11.entry.js.map +1 -1
- package/dist/esm-es5/verdocs-sign.entry.js +1 -1
- package/dist/esm-es5/verdocs-sign.entry.js.map +1 -1
- package/dist/esm-es5/verdocs-web-sdk.js +1 -1
- package/dist/types/components/embeds/verdocs-sign/verdocs-sign.d.ts +8 -1
- package/dist/types/components.d.ts +2 -2
- package/dist/verdocs-web-sdk/p-2b277797.system.entry.js +2 -0
- package/dist/verdocs-web-sdk/p-2b277797.system.entry.js.map +1 -0
- package/dist/verdocs-web-sdk/{p-6719e636.entry.js → p-3e12a9d6.entry.js} +2 -2
- package/dist/verdocs-web-sdk/p-3e12a9d6.entry.js.map +1 -0
- package/dist/verdocs-web-sdk/{p-2db89a87.system.entry.js → p-7389986e.system.entry.js} +2 -2
- package/dist/verdocs-web-sdk/{p-2db89a87.system.entry.js.map → p-7389986e.system.entry.js.map} +1 -1
- package/dist/verdocs-web-sdk/{p-e0253fa3.entry.js → p-7a2be757.entry.js} +2 -2
- package/dist/verdocs-web-sdk/{p-e0253fa3.entry.js.map → p-7a2be757.entry.js.map} +1 -1
- package/dist/verdocs-web-sdk/{p-8a8460c0.system.entry.js → p-8777a11b.system.entry.js} +2 -2
- package/dist/verdocs-web-sdk/p-8777a11b.system.entry.js.map +1 -0
- package/dist/verdocs-web-sdk/p-B8zpaHu-.system.js +1 -1
- package/dist/verdocs-web-sdk/p-Bcp-PA2y.system.js.map +1 -0
- package/dist/verdocs-web-sdk/p-e1de2584.entry.js +2 -0
- package/dist/verdocs-web-sdk/p-e1de2584.entry.js.map +1 -0
- package/dist/verdocs-web-sdk/p-ojX3wTEW.system.js.map +1 -0
- package/dist/verdocs-web-sdk/{p-BjIdBebp.system.js.map → p-qKdY3jhy.system.js.map} +1 -1
- package/dist/verdocs-web-sdk/verdocs-adopt-signature-dialog.verdocs-delegate-dialog.verdocs-disclosure-dialog.verdocs-kba-dialog.verdocs-otp-dialog.verdocs-passcode-dialog.verdocs-signing-progress.verdocs-view.entry.esm.js.map +1 -1
- package/dist/verdocs-web-sdk/verdocs-sign.entry.esm.js.map +1 -1
- package/dist/verdocs-web-sdk/verdocs-web-sdk.esm.js +1 -1
- package/package.json +2 -2
- package/dist/components/p-COiuyfp1.js.map +0 -1
- package/dist/components/p-LfDLlp5r.js.map +0 -1
- package/dist/verdocs-web-sdk/p-6719e636.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-8a8460c0.system.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-CJ9IvZJ5.system.js.map +0 -1
- package/dist/verdocs-web-sdk/p-D85w8lT9.system.js.map +0 -1
- package/dist/verdocs-web-sdk/p-a29fa382.system.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-a29fa382.system.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-cf08e7c2.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-cf08e7c2.entry.js.map +0 -1
|
@@ -4467,20 +4467,13 @@ const VerdocsSigningProgress = class {
|
|
|
4467
4467
|
if (this.mode === 'start') {
|
|
4468
4468
|
return h("div", { class: "field-label" }, this.fieldLabel);
|
|
4469
4469
|
}
|
|
4470
|
-
const allRequiredFieldsCompleted = this.progress && this.progress.required.filled >= this.progress.required.total;
|
|
4471
|
-
if (this.fieldCompleted && allRequiredFieldsCompleted) {
|
|
4472
|
-
return (h("div", { class: "field-completed" }, h("div", { class: "icon" }, this.renderSuccessIcon()), h("span", { class: "text" }, "Ready to submit.")));
|
|
4473
|
-
}
|
|
4474
4470
|
return h("div", { class: "field-label" }, this.fieldLabel);
|
|
4475
4471
|
}
|
|
4476
4472
|
renderFooter() {
|
|
4477
4473
|
if (this.mode === 'start') {
|
|
4478
4474
|
return (h("button", { class: "btn start", onClick: () => this.started.emit() }, "Start Signing"));
|
|
4479
4475
|
}
|
|
4480
|
-
return (h("div", { class: "nav-buttons" },
|
|
4481
|
-
h("button", { class: "btn previous", disabled: this.current <= 1, onClick: () => this.previous.emit() }, "Previous"),
|
|
4482
|
-
h("button", { class: "btn next", disabled: this.current >= this.total, onClick: () => this.next.emit() }, "Next"),
|
|
4483
|
-
])));
|
|
4476
|
+
return (h("div", { class: "nav-buttons" }, h("button", { class: "btn previous", disabled: this.current <= 1, onClick: () => this.previous.emit() }, "Previous"), h("button", { class: "btn next", disabled: this.current >= this.total, onClick: () => this.next.emit() }, "Next")));
|
|
4484
4477
|
}
|
|
4485
4478
|
renderCompleted() {
|
|
4486
4479
|
return (h("div", { class: "card completed" }, h("div", { class: "header-completed" }, h("div", { class: "icon" }, this.renderSuccessIcon()), "Ready to Submit"), h("div", { class: "description" }, "You have entered all requested signatures. Select Submit to complete the signing process."), h("div", { class: "separator" }), h("button", { class: "btn submit", onClick: () => this.exit.emit() }, "Submit")));
|
|
@@ -677,7 +677,7 @@ const VerdocsFieldInitial = class {
|
|
|
677
677
|
};
|
|
678
678
|
VerdocsFieldInitial.style = verdocsFieldInitialCss;
|
|
679
679
|
|
|
680
|
-
const verdocsFieldRadioCss = "@-webkit-keyframes verdocs-field-pulse{0%{background-color:rgba(0, 0, 0, 0.35)}50%{background-color:rgba(0, 0, 0, 0)}100%{background-color:rgba(0, 0, 0, 0.35)}}@keyframes verdocs-field-pulse{0%{background-color:rgba(0, 0, 0, 0.35)}50%{background-color:rgba(0, 0, 0, 0)}100%{background-color:rgba(0, 0, 0, 0.35)}}verdocs-field-radio{font-family:var(--verdocs-primary-font, \"Inter\", \"Barlow\", sans-serif);width:14px;height:14px;display:block;font-size:11px;position:relative;scroll-margin:20px 0;background-color:transparent;-webkit-transform-origin:bottom left;transform-origin:bottom left
|
|
680
|
+
const verdocsFieldRadioCss = "@-webkit-keyframes verdocs-field-pulse{0%{background-color:rgba(0, 0, 0, 0.35)}50%{background-color:rgba(0, 0, 0, 0)}100%{background-color:rgba(0, 0, 0, 0.35)}}@keyframes verdocs-field-pulse{0%{background-color:rgba(0, 0, 0, 0.35)}50%{background-color:rgba(0, 0, 0, 0)}100%{background-color:rgba(0, 0, 0, 0.35)}}verdocs-field-radio{font-family:var(--verdocs-primary-font, \"Inter\", \"Barlow\", sans-serif);width:14px;height:14px;display:block;font-size:11px;position:relative;scroll-margin:20px 0;background-color:transparent;-webkit-transform-origin:bottom left;transform-origin:bottom left}verdocs-field-radio.focused{-webkit-animation:verdocs-field-pulse 0.4s 1;animation:verdocs-field-pulse 0.4s 1}verdocs-field-radio svg{margin-top:4px}verdocs-field-radio.disabled.done{opacity:1}verdocs-field-radio div.label{top:0;left:16px;height:14px;color:white;padding:0 4px;font-size:9px;line-height:13px;position:absolute;background:#4a4a99;border-radius:2px;white-space:nowrap}verdocs-field-radio div.group{top:14px;left:-1px;height:14px;color:white;padding:0 4px;font-size:9px;line-height:13px;position:absolute;background:#bb0589;border-bottom-left-radius:2px;border-bottom-right-radius:2px}verdocs-field-radio input{cursor:inherit}verdocs-field-radio.disabled input{opacity:0.5}verdocs-field-radio.done input[type=radio]{margin:0;padding:0;width:10px;height:10px}verdocs-field-radio:not(.done) input[type=radio]{position:absolute;opacity:0}verdocs-field-radio:not(.done) input[type=radio]+label:before{content:\"\";border-radius:100%;border:1px solid rgba(0, 0, 0, 0.6);display:inline-block;width:12px;height:12px;position:absolute;left:1px;top:1px;cursor:pointer;text-align:center;-webkit-transition:all 250ms ease;transition:all 250ms ease}verdocs-field-radio:not(.done) input[type=radio]:checked+label:before{background-color:#55bc81;-webkit-box-shadow:inset 0 0 0 2px #f5f5fa;box-shadow:inset 0 0 0 2px #f5f5fa}verdocs-field-radio:not(.done) input[type=radio]:focus+label:before{outline:none;border-color:#55bc81}verdocs-field-radio:not(.done) input[type=radio]:disabled+label:before{-webkit-box-shadow:inset 0 0 0 4px #f5f5fa;box-shadow:inset 0 0 0 4px #f5f5fa;border-color:#f3f3fc;background:#f3f3fc}verdocs-field-radio:not(.done) input[type=radio]+label:empty:before{margin-right:0}verdocs-field-radio.required{border:1px solid var(--verdocs-required-field-border)}verdocs-field-radio.hide{display:none}verdocs-field-radio.focused{-webkit-animation:verdocs-field-pulse 0.4s 1;animation:verdocs-field-pulse 0.4s 1}verdocs-field-radio verdocs-button-panel{margin-left:-20px;margin-top:-7px;-webkit-transform:scale(0.7);transform:scale(0.7)}verdocs-field-radio .settings-icon{position:absolute;top:-6px;left:-20px;display:inline-block;cursor:pointer;opacity:0.3}verdocs-field-radio .settings-icon svg{fill:#707ae5}verdocs-field-radio .settings-icon:hover{opacity:1}@keyframes verdocs-field-pulse{0%{background-color:rgba(0, 0, 0, 0.35)}50%{background-color:rgba(0, 0, 0, 0)}100%{background-color:rgba(0, 0, 0, 0.35)}}";
|
|
681
681
|
|
|
682
682
|
const RadioIconUnselected = `<svg focusable="false" aria-hidden="true" viewBox="0 0 24 24"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"></path></svg>`;
|
|
683
683
|
const RadioIconSelected = `<svg focusable="false" aria-hidden="true" viewBox="0 0 24 24"><path d="M12 7c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5zm0-5C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"></path></svg>`;
|
|
@@ -46,7 +46,7 @@ const VerdocsSign = class {
|
|
|
46
46
|
/**
|
|
47
47
|
* The endpoint to use to communicate with Verdocs. If not set, the default endpoint will be used.
|
|
48
48
|
*/
|
|
49
|
-
this.endpoint = new VerdocsEndpoint({ sessionType: 'signing' });
|
|
49
|
+
this.endpoint = new VerdocsEndpoint({ sessionType: 'signing', baseURL: 'https://esign-dev.hubsync.com/api' });
|
|
50
50
|
/**
|
|
51
51
|
* The ID of the envelope to sign.
|
|
52
52
|
*/
|
|
@@ -105,6 +105,9 @@ const VerdocsSign = class {
|
|
|
105
105
|
this.delegated = false;
|
|
106
106
|
this.kbaChoices = [];
|
|
107
107
|
this.showDownloadDialog = false;
|
|
108
|
+
this.signingStarted = false;
|
|
109
|
+
this.skippedOptionalFields = [];
|
|
110
|
+
this.visitedFieldNames = [];
|
|
108
111
|
this.loading = true;
|
|
109
112
|
this.envelope = null;
|
|
110
113
|
this.zoomLevel = 'normal';
|
|
@@ -217,6 +220,9 @@ const VerdocsSign = class {
|
|
|
217
220
|
this.agreed = recipient.agreed;
|
|
218
221
|
this.signatureId = ((_e = (_d = response.signatures) === null || _d === void 0 ? void 0 : _d[0]) === null || _e === void 0 ? void 0 : _e.id) || null;
|
|
219
222
|
this.initialId = ((_g = (_f = response.initials) === null || _f === void 0 ? void 0 : _f[0]) === null || _g === void 0 ? void 0 : _g.id) || null;
|
|
223
|
+
this.signingStarted = false;
|
|
224
|
+
this.skippedOptionalFields = [];
|
|
225
|
+
this.visitedFieldNames = [];
|
|
220
226
|
this.submitted = recipient.status === 'submitted';
|
|
221
227
|
this.loading = false;
|
|
222
228
|
this.isDone = this.submitted;
|
|
@@ -324,6 +330,9 @@ const VerdocsSign = class {
|
|
|
324
330
|
}
|
|
325
331
|
updateRecipientFieldValue(fieldName, updateResult) {
|
|
326
332
|
console.log('[SIGN] updateRecipientFieldValue', fieldName, updateResult);
|
|
333
|
+
if (this.skippedOptionalFields.includes(fieldName)) {
|
|
334
|
+
this.skippedOptionalFields = this.skippedOptionalFields.filter(name => name !== fieldName);
|
|
335
|
+
}
|
|
327
336
|
this.getRecipientFields().forEach(oldField => {
|
|
328
337
|
if (oldField.name === fieldName) {
|
|
329
338
|
oldField.value = updateResult.value;
|
|
@@ -361,6 +370,8 @@ const VerdocsSign = class {
|
|
|
361
370
|
});
|
|
362
371
|
}
|
|
363
372
|
async handleFieldChange(field, e) {
|
|
373
|
+
this.signingStarted = true;
|
|
374
|
+
this.markFieldVisited(field.name);
|
|
364
375
|
const { value, checked } = e.target;
|
|
365
376
|
switch (field.type) {
|
|
366
377
|
// TODO: Remove legacy type when no longer needed
|
|
@@ -482,8 +493,46 @@ const VerdocsSign = class {
|
|
|
482
493
|
sortFields(recipientFields);
|
|
483
494
|
return recipientFields;
|
|
484
495
|
}
|
|
496
|
+
markFieldVisited(fieldName) {
|
|
497
|
+
if (!fieldName || this.visitedFieldNames.includes(fieldName)) {
|
|
498
|
+
return;
|
|
499
|
+
}
|
|
500
|
+
this.visitedFieldNames = [...this.visitedFieldNames, fieldName];
|
|
501
|
+
}
|
|
502
|
+
focusField(field, scrollInline = 'center') {
|
|
503
|
+
var _a;
|
|
504
|
+
if (!field)
|
|
505
|
+
return;
|
|
506
|
+
const id = getFieldId(field);
|
|
507
|
+
const el = document.getElementById(id);
|
|
508
|
+
el === null || el === void 0 ? void 0 : el.scrollIntoView({ behavior: 'smooth', block: 'center', inline: scrollInline });
|
|
509
|
+
(_a = el === null || el === void 0 ? void 0 : el.focusField) === null || _a === void 0 ? void 0 : _a.call(el);
|
|
510
|
+
this.focusedField = field.name;
|
|
511
|
+
this.markFieldVisited(field.name);
|
|
512
|
+
this.checkRecipientFields();
|
|
513
|
+
}
|
|
514
|
+
handleSkipField(fieldToSkip) {
|
|
515
|
+
if (fieldToSkip.required) {
|
|
516
|
+
return;
|
|
517
|
+
}
|
|
518
|
+
this.signingStarted = true;
|
|
519
|
+
this.markFieldVisited(fieldToSkip.name);
|
|
520
|
+
if (!this.skippedOptionalFields.includes(fieldToSkip.name)) {
|
|
521
|
+
this.skippedOptionalFields = [...this.skippedOptionalFields, fieldToSkip.name];
|
|
522
|
+
}
|
|
523
|
+
const fields = this.getSortedFillableFields();
|
|
524
|
+
const currentIndex = fields.findIndex(field => field.name === fieldToSkip.name);
|
|
525
|
+
const nextField = currentIndex >= 0 && currentIndex < fields.length - 1 ? fields[currentIndex + 1] : null;
|
|
526
|
+
if (nextField) {
|
|
527
|
+
this.focusField(nextField);
|
|
528
|
+
return;
|
|
529
|
+
}
|
|
530
|
+
// If this was the last field, still re-evaluate completion/submit state.
|
|
531
|
+
this.checkRecipientFields([fieldToSkip.name]);
|
|
532
|
+
}
|
|
485
533
|
handleNext() {
|
|
486
534
|
var _a;
|
|
535
|
+
this.signingStarted = true;
|
|
487
536
|
if (this.nextSubmits) {
|
|
488
537
|
try {
|
|
489
538
|
// Patches the date picker to be forcibly removed if still showing during submission
|
|
@@ -501,23 +550,34 @@ const VerdocsSign = class {
|
|
|
501
550
|
}
|
|
502
551
|
return;
|
|
503
552
|
}
|
|
504
|
-
const
|
|
505
|
-
if (
|
|
506
|
-
|
|
507
|
-
const el = document.getElementById(id);
|
|
508
|
-
el === null || el === void 0 ? void 0 : el.scrollIntoView({ behavior: 'smooth', block: 'center', inline: 'center' });
|
|
509
|
-
el === null || el === void 0 ? void 0 : el.focusField();
|
|
510
|
-
this.focusedField = nextField.name;
|
|
553
|
+
const fields = this.getSortedFillableFields();
|
|
554
|
+
if (fields.length < 1) {
|
|
555
|
+
return;
|
|
511
556
|
}
|
|
557
|
+
if (!this.focusedField) {
|
|
558
|
+
this.focusField(fields[0]);
|
|
559
|
+
return;
|
|
560
|
+
}
|
|
561
|
+
const nextField = this.getNextFieldFromList(fields);
|
|
562
|
+
this.focusField(nextField);
|
|
512
563
|
}
|
|
513
564
|
getRecipientFields() {
|
|
514
565
|
var _a;
|
|
515
566
|
return ((_a = this.envelope) === null || _a === void 0 ? void 0 : _a.fields.filter(field => field.role_name === this.recipient.role_name)) || [];
|
|
516
567
|
}
|
|
517
568
|
// See if everything that "needs to be" filled in is, and all "fillable fields" are valid
|
|
518
|
-
checkRecipientFields() {
|
|
519
|
-
const
|
|
520
|
-
|
|
569
|
+
checkRecipientFields(extraVisitedFieldNames = []) {
|
|
570
|
+
const recipientFields = this.getRecipientFields();
|
|
571
|
+
const fillableFields = this.getSortedFillableFields();
|
|
572
|
+
const requiredFields = fillableFields.filter(field => !!field.required);
|
|
573
|
+
const allRequiredFieldsSubmitted = requiredFields.every(field => this.isFieldValidForRecipient(field, recipientFields));
|
|
574
|
+
const visitedFieldNames = new Set([...this.visitedFieldNames, ...extraVisitedFieldNames]);
|
|
575
|
+
// A field is considered "handled" if it's visited OR if it's an optional field that was skipped OR if it's already filled
|
|
576
|
+
const allFieldsHandled = fillableFields.every(field => visitedFieldNames.has(field.name) ||
|
|
577
|
+
this.skippedOptionalFields.includes(field.name) ||
|
|
578
|
+
this.isFieldFilledForNav(field, recipientFields));
|
|
579
|
+
const canSubmit = allRequiredFieldsSubmitted && allFieldsHandled;
|
|
580
|
+
if (canSubmit) {
|
|
521
581
|
this.nextButtonLabel = 'Finish';
|
|
522
582
|
if (!this.nextSubmits) {
|
|
523
583
|
this.nextSubmits = true;
|
|
@@ -529,6 +589,12 @@ const VerdocsSign = class {
|
|
|
529
589
|
}
|
|
530
590
|
this.updateAllFlags();
|
|
531
591
|
}
|
|
592
|
+
isFieldValidForRecipient(field, recipientFields) {
|
|
593
|
+
if (field.type === 'signature' || field.type === 'initial') {
|
|
594
|
+
return !field.required || this.isFieldFilledForNav(field, recipientFields);
|
|
595
|
+
}
|
|
596
|
+
return isFieldValid(field, recipientFields);
|
|
597
|
+
}
|
|
532
598
|
getNextFieldInOrder() {
|
|
533
599
|
// Find the next incomplete field in overall order (required + optional).
|
|
534
600
|
const fields = this.getSortedFillableFields();
|
|
@@ -547,13 +613,38 @@ const VerdocsSign = class {
|
|
|
547
613
|
return null;
|
|
548
614
|
}
|
|
549
615
|
isFieldFilledForNav(field, recipientFields) {
|
|
616
|
+
if (!field.required && this.skippedOptionalFields.includes(field.name)) {
|
|
617
|
+
return true;
|
|
618
|
+
}
|
|
550
619
|
if (field.type === 'signature' || field.type === 'initial') {
|
|
620
|
+
const settings = (field.settings || {});
|
|
621
|
+
const idKey = field.type === 'signature' ? 'signature_id' : 'initial_id';
|
|
622
|
+
const hasSignatureId = Object.prototype.hasOwnProperty.call(settings, 'signature_id');
|
|
623
|
+
const hasInitialId = Object.prototype.hasOwnProperty.call(settings, 'initial_id');
|
|
624
|
+
// For signature/initial fields, settings.* id is the authoritative state.
|
|
625
|
+
// This avoids stale top-level field.value (e.g. "signed") after clearing.
|
|
626
|
+
if (Object.prototype.hasOwnProperty.call(settings, idKey) || hasSignatureId || hasInitialId) {
|
|
627
|
+
const idValue = Object.prototype.hasOwnProperty.call(settings, idKey)
|
|
628
|
+
? settings[idKey]
|
|
629
|
+
: hasSignatureId
|
|
630
|
+
? settings.signature_id
|
|
631
|
+
: settings.initial_id;
|
|
632
|
+
return typeof idValue === 'string' ? idValue.trim().length > 0 : !!idValue;
|
|
633
|
+
}
|
|
634
|
+
if (Object.prototype.hasOwnProperty.call(settings, 'value')) {
|
|
635
|
+
const settingsValue = typeof settings.value === 'string' ? settings.value.trim() : settings.value;
|
|
636
|
+
return !!settingsValue;
|
|
637
|
+
}
|
|
638
|
+
if (Object.prototype.hasOwnProperty.call(settings, 'result')) {
|
|
639
|
+
const settingsResult = typeof settings.result === 'string' ? settings.result.trim() : settings.result;
|
|
640
|
+
return !!settingsResult;
|
|
641
|
+
}
|
|
642
|
+
if (Object.prototype.hasOwnProperty.call(settings, 'base64')) {
|
|
643
|
+
const settingsBase64 = typeof settings.base64 === 'string' ? settings.base64.trim() : settings.base64;
|
|
644
|
+
return !!settingsBase64;
|
|
645
|
+
}
|
|
551
646
|
const value = typeof field.value === 'string' ? field.value.trim() : field.value;
|
|
552
|
-
|
|
553
|
-
return false;
|
|
554
|
-
if (value === 'signed' || value === 'initialed')
|
|
555
|
-
return false;
|
|
556
|
-
return true;
|
|
647
|
+
return !!value;
|
|
557
648
|
}
|
|
558
649
|
if (field.type === 'dropdown') {
|
|
559
650
|
return isFieldFilled(field, recipientFields) && !!field.value;
|
|
@@ -570,16 +661,11 @@ const VerdocsSign = class {
|
|
|
570
661
|
return fields[nextFocusedIndex];
|
|
571
662
|
}
|
|
572
663
|
handlePrev() {
|
|
573
|
-
|
|
664
|
+
this.signingStarted = true;
|
|
574
665
|
const allFields = this.getSortedFillableFields();
|
|
575
666
|
const focusedIndex = allFields.findIndex(f => f.name === this.focusedField);
|
|
576
667
|
if (focusedIndex > 0) {
|
|
577
|
-
|
|
578
|
-
const id = getFieldId(prevField);
|
|
579
|
-
const el = document.getElementById(id);
|
|
580
|
-
el === null || el === void 0 ? void 0 : el.scrollIntoView({ behavior: 'smooth', block: 'center' });
|
|
581
|
-
(_a = el === null || el === void 0 ? void 0 : el.focusField) === null || _a === void 0 ? void 0 : _a.call(el);
|
|
582
|
-
this.focusedField = prevField.name;
|
|
668
|
+
this.focusField(allFields[focusedIndex - 1]);
|
|
583
669
|
}
|
|
584
670
|
}
|
|
585
671
|
updateAllFlags() {
|
|
@@ -616,8 +702,12 @@ const VerdocsSign = class {
|
|
|
616
702
|
variant,
|
|
617
703
|
label,
|
|
618
704
|
showSkip,
|
|
705
|
+
onClick: () => {
|
|
706
|
+
this.signingStarted = true;
|
|
707
|
+
this.focusField(nextField);
|
|
708
|
+
},
|
|
619
709
|
onSkip: () => {
|
|
620
|
-
this.
|
|
710
|
+
this.handleSkipField(nextField);
|
|
621
711
|
},
|
|
622
712
|
});
|
|
623
713
|
}
|
|
@@ -690,8 +780,15 @@ const VerdocsSign = class {
|
|
|
690
780
|
el.addEventListener('fieldChange', e => {
|
|
691
781
|
this.handleFieldChange(field, e).finally(() => this.checkRecipientFields());
|
|
692
782
|
});
|
|
783
|
+
el.addEventListener('click', () => {
|
|
784
|
+
this.focusedField = field.name;
|
|
785
|
+
this.markFieldVisited(field.name);
|
|
786
|
+
this.checkRecipientFields();
|
|
787
|
+
});
|
|
693
788
|
el.addEventListener('adopt', () => {
|
|
694
789
|
this.focusedField = field.name;
|
|
790
|
+
this.markFieldVisited(field.name);
|
|
791
|
+
this.checkRecipientFields();
|
|
695
792
|
this.adoptingSignature = true;
|
|
696
793
|
});
|
|
697
794
|
el.setAttribute('templateid', this.envelope.template_id);
|
|
@@ -881,7 +978,8 @@ const VerdocsSign = class {
|
|
|
881
978
|
inProgressMenuOptions.unshift({ id: 'delegate', label: 'Delegate' });
|
|
882
979
|
}
|
|
883
980
|
console.log('this.getRecipientFields()', this.getRecipientFields());
|
|
884
|
-
const
|
|
981
|
+
const recipientFields = this.getRecipientFields();
|
|
982
|
+
const invalidFields = recipientFields.filter(field => !this.isFieldValidForRecipient(field, recipientFields));
|
|
885
983
|
invalidFields.length > 0
|
|
886
984
|
? console.log('[SIGN] Invalid fields remaining', invalidFields.map(field => field.name))
|
|
887
985
|
: console.log('[SIGN] All field valid');
|
|
@@ -894,7 +992,7 @@ const VerdocsSign = class {
|
|
|
894
992
|
// Calculate detailed progress
|
|
895
993
|
const allFields = this.getSortedFillableFields();
|
|
896
994
|
const recipientFields = this.getRecipientFields();
|
|
897
|
-
const isFilled = (f) =>
|
|
995
|
+
const isFilled = (f) => this.isFieldFilledForNav(f, recipientFields);
|
|
898
996
|
const requiredFields = allFields.filter(f => f.required);
|
|
899
997
|
const requiredRemaining = requiredFields.filter(f => !isFilled(f)).length;
|
|
900
998
|
const requiredFilled = requiredFields.length - requiredRemaining;
|
|
@@ -926,18 +1024,18 @@ const VerdocsSign = class {
|
|
|
926
1024
|
filledFields: recipientFields.filter(f => isFilled(f)).map(f => ({ name: f.name, type: f.type, val: f.value })),
|
|
927
1025
|
});
|
|
928
1026
|
let mode = 'start';
|
|
929
|
-
// We only consider the user to have started "signing" if they have filled out at least one *fillable* field.
|
|
930
|
-
// Readonly fields do not count.
|
|
931
|
-
const anyFieldFilled = requiredRemaining < requiredFields.length || optionalRemaining < optionalFields.length;
|
|
932
1027
|
if (this.nextSubmits) {
|
|
933
1028
|
mode = 'completed';
|
|
934
1029
|
}
|
|
935
|
-
else if (
|
|
1030
|
+
else if (this.signingStarted) {
|
|
936
1031
|
mode = 'signing';
|
|
937
1032
|
}
|
|
938
1033
|
return (h("verdocs-signing-progress", { mode: mode, current: Math.max(1, currentIndex), total: totalFields, remainingFields: remainingFields, progress: progress, fieldLabel: getFieldLabel(focusedFieldObj), fieldCompleted: focusedFieldObj ? !!isFilled(focusedFieldObj) : false, onStarted: () => {
|
|
1034
|
+
this.signingStarted = true;
|
|
939
1035
|
this.adoptingSignature = true;
|
|
940
|
-
this.
|
|
1036
|
+
const fields = this.getSortedFillableFields();
|
|
1037
|
+
const startField = fields.find(f => f.name === this.focusedField) || fields[0];
|
|
1038
|
+
this.focusField(startField || null);
|
|
941
1039
|
}, onNext: () => this.handleNext(), onPrevious: () => this.handlePrev(), onExit: () => this.handleNext() }));
|
|
942
1040
|
})(), h("div", { class: `document signed-document-container zoom-${this.zoomLevel}` }, (this.envelope.documents || []).map(envelopeDocument => {
|
|
943
1041
|
const pageNumbers = integerSequence(1, envelopeDocument.pages);
|