@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
|
@@ -4469,20 +4469,13 @@ const VerdocsSigningProgress = class {
|
|
|
4469
4469
|
if (this.mode === 'start') {
|
|
4470
4470
|
return index.h("div", { class: "field-label" }, this.fieldLabel);
|
|
4471
4471
|
}
|
|
4472
|
-
const allRequiredFieldsCompleted = this.progress && this.progress.required.filled >= this.progress.required.total;
|
|
4473
|
-
if (this.fieldCompleted && allRequiredFieldsCompleted) {
|
|
4474
|
-
return (index.h("div", { class: "field-completed" }, index.h("div", { class: "icon" }, this.renderSuccessIcon()), index.h("span", { class: "text" }, "Ready to submit.")));
|
|
4475
|
-
}
|
|
4476
4472
|
return index.h("div", { class: "field-label" }, this.fieldLabel);
|
|
4477
4473
|
}
|
|
4478
4474
|
renderFooter() {
|
|
4479
4475
|
if (this.mode === 'start') {
|
|
4480
4476
|
return (index.h("button", { class: "btn start", onClick: () => this.started.emit() }, "Start Signing"));
|
|
4481
4477
|
}
|
|
4482
|
-
return (index.h("div", { class: "nav-buttons" },
|
|
4483
|
-
index.h("button", { class: "btn previous", disabled: this.current <= 1, onClick: () => this.previous.emit() }, "Previous"),
|
|
4484
|
-
index.h("button", { class: "btn next", disabled: this.current >= this.total, onClick: () => this.next.emit() }, "Next"),
|
|
4485
|
-
])));
|
|
4478
|
+
return (index.h("div", { class: "nav-buttons" }, index.h("button", { class: "btn previous", disabled: this.current <= 1, onClick: () => this.previous.emit() }, "Previous"), index.h("button", { class: "btn next", disabled: this.current >= this.total, onClick: () => this.next.emit() }, "Next")));
|
|
4486
4479
|
}
|
|
4487
4480
|
renderCompleted() {
|
|
4488
4481
|
return (index.h("div", { class: "card completed" }, index.h("div", { class: "header-completed" }, index.h("div", { class: "icon" }, this.renderSuccessIcon()), "Ready to Submit"), index.h("div", { class: "description" }, "You have entered all requested signatures. Select Submit to complete the signing process."), index.h("div", { class: "separator" }), index.h("button", { class: "btn submit", onClick: () => this.exit.emit() }, "Submit")));
|
|
@@ -679,7 +679,7 @@ const VerdocsFieldInitial = class {
|
|
|
679
679
|
};
|
|
680
680
|
VerdocsFieldInitial.style = verdocsFieldInitialCss;
|
|
681
681
|
|
|
682
|
-
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
|
|
682
|
+
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)}}";
|
|
683
683
|
|
|
684
684
|
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>`;
|
|
685
685
|
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>`;
|
|
@@ -48,7 +48,7 @@ const VerdocsSign = class {
|
|
|
48
48
|
/**
|
|
49
49
|
* The endpoint to use to communicate with Verdocs. If not set, the default endpoint will be used.
|
|
50
50
|
*/
|
|
51
|
-
this.endpoint = new jsSdk.VerdocsEndpoint({ sessionType: 'signing' });
|
|
51
|
+
this.endpoint = new jsSdk.VerdocsEndpoint({ sessionType: 'signing', baseURL: 'https://esign-dev.hubsync.com/api' });
|
|
52
52
|
/**
|
|
53
53
|
* The ID of the envelope to sign.
|
|
54
54
|
*/
|
|
@@ -107,6 +107,9 @@ const VerdocsSign = class {
|
|
|
107
107
|
this.delegated = false;
|
|
108
108
|
this.kbaChoices = [];
|
|
109
109
|
this.showDownloadDialog = false;
|
|
110
|
+
this.signingStarted = false;
|
|
111
|
+
this.skippedOptionalFields = [];
|
|
112
|
+
this.visitedFieldNames = [];
|
|
110
113
|
this.loading = true;
|
|
111
114
|
this.envelope = null;
|
|
112
115
|
this.zoomLevel = 'normal';
|
|
@@ -219,6 +222,9 @@ const VerdocsSign = class {
|
|
|
219
222
|
this.agreed = recipient.agreed;
|
|
220
223
|
this.signatureId = ((_e = (_d = response.signatures) === null || _d === void 0 ? void 0 : _d[0]) === null || _e === void 0 ? void 0 : _e.id) || null;
|
|
221
224
|
this.initialId = ((_g = (_f = response.initials) === null || _f === void 0 ? void 0 : _f[0]) === null || _g === void 0 ? void 0 : _g.id) || null;
|
|
225
|
+
this.signingStarted = false;
|
|
226
|
+
this.skippedOptionalFields = [];
|
|
227
|
+
this.visitedFieldNames = [];
|
|
222
228
|
this.submitted = recipient.status === 'submitted';
|
|
223
229
|
this.loading = false;
|
|
224
230
|
this.isDone = this.submitted;
|
|
@@ -326,6 +332,9 @@ const VerdocsSign = class {
|
|
|
326
332
|
}
|
|
327
333
|
updateRecipientFieldValue(fieldName, updateResult) {
|
|
328
334
|
console.log('[SIGN] updateRecipientFieldValue', fieldName, updateResult);
|
|
335
|
+
if (this.skippedOptionalFields.includes(fieldName)) {
|
|
336
|
+
this.skippedOptionalFields = this.skippedOptionalFields.filter(name => name !== fieldName);
|
|
337
|
+
}
|
|
329
338
|
this.getRecipientFields().forEach(oldField => {
|
|
330
339
|
if (oldField.name === fieldName) {
|
|
331
340
|
oldField.value = updateResult.value;
|
|
@@ -363,6 +372,8 @@ const VerdocsSign = class {
|
|
|
363
372
|
});
|
|
364
373
|
}
|
|
365
374
|
async handleFieldChange(field, e) {
|
|
375
|
+
this.signingStarted = true;
|
|
376
|
+
this.markFieldVisited(field.name);
|
|
366
377
|
const { value, checked } = e.target;
|
|
367
378
|
switch (field.type) {
|
|
368
379
|
// TODO: Remove legacy type when no longer needed
|
|
@@ -484,8 +495,46 @@ const VerdocsSign = class {
|
|
|
484
495
|
jsSdk.sortFields(recipientFields);
|
|
485
496
|
return recipientFields;
|
|
486
497
|
}
|
|
498
|
+
markFieldVisited(fieldName) {
|
|
499
|
+
if (!fieldName || this.visitedFieldNames.includes(fieldName)) {
|
|
500
|
+
return;
|
|
501
|
+
}
|
|
502
|
+
this.visitedFieldNames = [...this.visitedFieldNames, fieldName];
|
|
503
|
+
}
|
|
504
|
+
focusField(field, scrollInline = 'center') {
|
|
505
|
+
var _a;
|
|
506
|
+
if (!field)
|
|
507
|
+
return;
|
|
508
|
+
const id = utils.getFieldId(field);
|
|
509
|
+
const el = document.getElementById(id);
|
|
510
|
+
el === null || el === void 0 ? void 0 : el.scrollIntoView({ behavior: 'smooth', block: 'center', inline: scrollInline });
|
|
511
|
+
(_a = el === null || el === void 0 ? void 0 : el.focusField) === null || _a === void 0 ? void 0 : _a.call(el);
|
|
512
|
+
this.focusedField = field.name;
|
|
513
|
+
this.markFieldVisited(field.name);
|
|
514
|
+
this.checkRecipientFields();
|
|
515
|
+
}
|
|
516
|
+
handleSkipField(fieldToSkip) {
|
|
517
|
+
if (fieldToSkip.required) {
|
|
518
|
+
return;
|
|
519
|
+
}
|
|
520
|
+
this.signingStarted = true;
|
|
521
|
+
this.markFieldVisited(fieldToSkip.name);
|
|
522
|
+
if (!this.skippedOptionalFields.includes(fieldToSkip.name)) {
|
|
523
|
+
this.skippedOptionalFields = [...this.skippedOptionalFields, fieldToSkip.name];
|
|
524
|
+
}
|
|
525
|
+
const fields = this.getSortedFillableFields();
|
|
526
|
+
const currentIndex = fields.findIndex(field => field.name === fieldToSkip.name);
|
|
527
|
+
const nextField = currentIndex >= 0 && currentIndex < fields.length - 1 ? fields[currentIndex + 1] : null;
|
|
528
|
+
if (nextField) {
|
|
529
|
+
this.focusField(nextField);
|
|
530
|
+
return;
|
|
531
|
+
}
|
|
532
|
+
// If this was the last field, still re-evaluate completion/submit state.
|
|
533
|
+
this.checkRecipientFields([fieldToSkip.name]);
|
|
534
|
+
}
|
|
487
535
|
handleNext() {
|
|
488
536
|
var _a;
|
|
537
|
+
this.signingStarted = true;
|
|
489
538
|
if (this.nextSubmits) {
|
|
490
539
|
try {
|
|
491
540
|
// Patches the date picker to be forcibly removed if still showing during submission
|
|
@@ -503,23 +552,34 @@ const VerdocsSign = class {
|
|
|
503
552
|
}
|
|
504
553
|
return;
|
|
505
554
|
}
|
|
506
|
-
const
|
|
507
|
-
if (
|
|
508
|
-
|
|
509
|
-
const el = document.getElementById(id);
|
|
510
|
-
el === null || el === void 0 ? void 0 : el.scrollIntoView({ behavior: 'smooth', block: 'center', inline: 'center' });
|
|
511
|
-
el === null || el === void 0 ? void 0 : el.focusField();
|
|
512
|
-
this.focusedField = nextField.name;
|
|
555
|
+
const fields = this.getSortedFillableFields();
|
|
556
|
+
if (fields.length < 1) {
|
|
557
|
+
return;
|
|
513
558
|
}
|
|
559
|
+
if (!this.focusedField) {
|
|
560
|
+
this.focusField(fields[0]);
|
|
561
|
+
return;
|
|
562
|
+
}
|
|
563
|
+
const nextField = this.getNextFieldFromList(fields);
|
|
564
|
+
this.focusField(nextField);
|
|
514
565
|
}
|
|
515
566
|
getRecipientFields() {
|
|
516
567
|
var _a;
|
|
517
568
|
return ((_a = this.envelope) === null || _a === void 0 ? void 0 : _a.fields.filter(field => field.role_name === this.recipient.role_name)) || [];
|
|
518
569
|
}
|
|
519
570
|
// See if everything that "needs to be" filled in is, and all "fillable fields" are valid
|
|
520
|
-
checkRecipientFields() {
|
|
521
|
-
const
|
|
522
|
-
|
|
571
|
+
checkRecipientFields(extraVisitedFieldNames = []) {
|
|
572
|
+
const recipientFields = this.getRecipientFields();
|
|
573
|
+
const fillableFields = this.getSortedFillableFields();
|
|
574
|
+
const requiredFields = fillableFields.filter(field => !!field.required);
|
|
575
|
+
const allRequiredFieldsSubmitted = requiredFields.every(field => this.isFieldValidForRecipient(field, recipientFields));
|
|
576
|
+
const visitedFieldNames = new Set([...this.visitedFieldNames, ...extraVisitedFieldNames]);
|
|
577
|
+
// 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
|
|
578
|
+
const allFieldsHandled = fillableFields.every(field => visitedFieldNames.has(field.name) ||
|
|
579
|
+
this.skippedOptionalFields.includes(field.name) ||
|
|
580
|
+
this.isFieldFilledForNav(field, recipientFields));
|
|
581
|
+
const canSubmit = allRequiredFieldsSubmitted && allFieldsHandled;
|
|
582
|
+
if (canSubmit) {
|
|
523
583
|
this.nextButtonLabel = 'Finish';
|
|
524
584
|
if (!this.nextSubmits) {
|
|
525
585
|
this.nextSubmits = true;
|
|
@@ -531,6 +591,12 @@ const VerdocsSign = class {
|
|
|
531
591
|
}
|
|
532
592
|
this.updateAllFlags();
|
|
533
593
|
}
|
|
594
|
+
isFieldValidForRecipient(field, recipientFields) {
|
|
595
|
+
if (field.type === 'signature' || field.type === 'initial') {
|
|
596
|
+
return !field.required || this.isFieldFilledForNav(field, recipientFields);
|
|
597
|
+
}
|
|
598
|
+
return jsSdk.isFieldValid(field, recipientFields);
|
|
599
|
+
}
|
|
534
600
|
getNextFieldInOrder() {
|
|
535
601
|
// Find the next incomplete field in overall order (required + optional).
|
|
536
602
|
const fields = this.getSortedFillableFields();
|
|
@@ -549,13 +615,38 @@ const VerdocsSign = class {
|
|
|
549
615
|
return null;
|
|
550
616
|
}
|
|
551
617
|
isFieldFilledForNav(field, recipientFields) {
|
|
618
|
+
if (!field.required && this.skippedOptionalFields.includes(field.name)) {
|
|
619
|
+
return true;
|
|
620
|
+
}
|
|
552
621
|
if (field.type === 'signature' || field.type === 'initial') {
|
|
622
|
+
const settings = (field.settings || {});
|
|
623
|
+
const idKey = field.type === 'signature' ? 'signature_id' : 'initial_id';
|
|
624
|
+
const hasSignatureId = Object.prototype.hasOwnProperty.call(settings, 'signature_id');
|
|
625
|
+
const hasInitialId = Object.prototype.hasOwnProperty.call(settings, 'initial_id');
|
|
626
|
+
// For signature/initial fields, settings.* id is the authoritative state.
|
|
627
|
+
// This avoids stale top-level field.value (e.g. "signed") after clearing.
|
|
628
|
+
if (Object.prototype.hasOwnProperty.call(settings, idKey) || hasSignatureId || hasInitialId) {
|
|
629
|
+
const idValue = Object.prototype.hasOwnProperty.call(settings, idKey)
|
|
630
|
+
? settings[idKey]
|
|
631
|
+
: hasSignatureId
|
|
632
|
+
? settings.signature_id
|
|
633
|
+
: settings.initial_id;
|
|
634
|
+
return typeof idValue === 'string' ? idValue.trim().length > 0 : !!idValue;
|
|
635
|
+
}
|
|
636
|
+
if (Object.prototype.hasOwnProperty.call(settings, 'value')) {
|
|
637
|
+
const settingsValue = typeof settings.value === 'string' ? settings.value.trim() : settings.value;
|
|
638
|
+
return !!settingsValue;
|
|
639
|
+
}
|
|
640
|
+
if (Object.prototype.hasOwnProperty.call(settings, 'result')) {
|
|
641
|
+
const settingsResult = typeof settings.result === 'string' ? settings.result.trim() : settings.result;
|
|
642
|
+
return !!settingsResult;
|
|
643
|
+
}
|
|
644
|
+
if (Object.prototype.hasOwnProperty.call(settings, 'base64')) {
|
|
645
|
+
const settingsBase64 = typeof settings.base64 === 'string' ? settings.base64.trim() : settings.base64;
|
|
646
|
+
return !!settingsBase64;
|
|
647
|
+
}
|
|
553
648
|
const value = typeof field.value === 'string' ? field.value.trim() : field.value;
|
|
554
|
-
|
|
555
|
-
return false;
|
|
556
|
-
if (value === 'signed' || value === 'initialed')
|
|
557
|
-
return false;
|
|
558
|
-
return true;
|
|
649
|
+
return !!value;
|
|
559
650
|
}
|
|
560
651
|
if (field.type === 'dropdown') {
|
|
561
652
|
return jsSdk.isFieldFilled(field, recipientFields) && !!field.value;
|
|
@@ -572,16 +663,11 @@ const VerdocsSign = class {
|
|
|
572
663
|
return fields[nextFocusedIndex];
|
|
573
664
|
}
|
|
574
665
|
handlePrev() {
|
|
575
|
-
|
|
666
|
+
this.signingStarted = true;
|
|
576
667
|
const allFields = this.getSortedFillableFields();
|
|
577
668
|
const focusedIndex = allFields.findIndex(f => f.name === this.focusedField);
|
|
578
669
|
if (focusedIndex > 0) {
|
|
579
|
-
|
|
580
|
-
const id = utils.getFieldId(prevField);
|
|
581
|
-
const el = document.getElementById(id);
|
|
582
|
-
el === null || el === void 0 ? void 0 : el.scrollIntoView({ behavior: 'smooth', block: 'center' });
|
|
583
|
-
(_a = el === null || el === void 0 ? void 0 : el.focusField) === null || _a === void 0 ? void 0 : _a.call(el);
|
|
584
|
-
this.focusedField = prevField.name;
|
|
670
|
+
this.focusField(allFields[focusedIndex - 1]);
|
|
585
671
|
}
|
|
586
672
|
}
|
|
587
673
|
updateAllFlags() {
|
|
@@ -618,8 +704,12 @@ const VerdocsSign = class {
|
|
|
618
704
|
variant,
|
|
619
705
|
label,
|
|
620
706
|
showSkip,
|
|
707
|
+
onClick: () => {
|
|
708
|
+
this.signingStarted = true;
|
|
709
|
+
this.focusField(nextField);
|
|
710
|
+
},
|
|
621
711
|
onSkip: () => {
|
|
622
|
-
this.
|
|
712
|
+
this.handleSkipField(nextField);
|
|
623
713
|
},
|
|
624
714
|
});
|
|
625
715
|
}
|
|
@@ -692,8 +782,15 @@ const VerdocsSign = class {
|
|
|
692
782
|
el.addEventListener('fieldChange', e => {
|
|
693
783
|
this.handleFieldChange(field, e).finally(() => this.checkRecipientFields());
|
|
694
784
|
});
|
|
785
|
+
el.addEventListener('click', () => {
|
|
786
|
+
this.focusedField = field.name;
|
|
787
|
+
this.markFieldVisited(field.name);
|
|
788
|
+
this.checkRecipientFields();
|
|
789
|
+
});
|
|
695
790
|
el.addEventListener('adopt', () => {
|
|
696
791
|
this.focusedField = field.name;
|
|
792
|
+
this.markFieldVisited(field.name);
|
|
793
|
+
this.checkRecipientFields();
|
|
697
794
|
this.adoptingSignature = true;
|
|
698
795
|
});
|
|
699
796
|
el.setAttribute('templateid', this.envelope.template_id);
|
|
@@ -883,7 +980,8 @@ const VerdocsSign = class {
|
|
|
883
980
|
inProgressMenuOptions.unshift({ id: 'delegate', label: 'Delegate' });
|
|
884
981
|
}
|
|
885
982
|
console.log('this.getRecipientFields()', this.getRecipientFields());
|
|
886
|
-
const
|
|
983
|
+
const recipientFields = this.getRecipientFields();
|
|
984
|
+
const invalidFields = recipientFields.filter(field => !this.isFieldValidForRecipient(field, recipientFields));
|
|
887
985
|
invalidFields.length > 0
|
|
888
986
|
? console.log('[SIGN] Invalid fields remaining', invalidFields.map(field => field.name))
|
|
889
987
|
: console.log('[SIGN] All field valid');
|
|
@@ -896,7 +994,7 @@ const VerdocsSign = class {
|
|
|
896
994
|
// Calculate detailed progress
|
|
897
995
|
const allFields = this.getSortedFillableFields();
|
|
898
996
|
const recipientFields = this.getRecipientFields();
|
|
899
|
-
const isFilled = (f) =>
|
|
997
|
+
const isFilled = (f) => this.isFieldFilledForNav(f, recipientFields);
|
|
900
998
|
const requiredFields = allFields.filter(f => f.required);
|
|
901
999
|
const requiredRemaining = requiredFields.filter(f => !isFilled(f)).length;
|
|
902
1000
|
const requiredFilled = requiredFields.length - requiredRemaining;
|
|
@@ -928,18 +1026,18 @@ const VerdocsSign = class {
|
|
|
928
1026
|
filledFields: recipientFields.filter(f => isFilled(f)).map(f => ({ name: f.name, type: f.type, val: f.value })),
|
|
929
1027
|
});
|
|
930
1028
|
let mode = 'start';
|
|
931
|
-
// We only consider the user to have started "signing" if they have filled out at least one *fillable* field.
|
|
932
|
-
// Readonly fields do not count.
|
|
933
|
-
const anyFieldFilled = requiredRemaining < requiredFields.length || optionalRemaining < optionalFields.length;
|
|
934
1029
|
if (this.nextSubmits) {
|
|
935
1030
|
mode = 'completed';
|
|
936
1031
|
}
|
|
937
|
-
else if (
|
|
1032
|
+
else if (this.signingStarted) {
|
|
938
1033
|
mode = 'signing';
|
|
939
1034
|
}
|
|
940
1035
|
return (index.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: () => {
|
|
1036
|
+
this.signingStarted = true;
|
|
941
1037
|
this.adoptingSignature = true;
|
|
942
|
-
this.
|
|
1038
|
+
const fields = this.getSortedFillableFields();
|
|
1039
|
+
const startField = fields.find(f => f.name === this.focusedField) || fields[0];
|
|
1040
|
+
this.focusField(startField || null);
|
|
943
1041
|
}, onNext: () => this.handleNext(), onPrevious: () => this.handlePrev(), onExit: () => this.handleNext() }));
|
|
944
1042
|
})(), index.h("div", { class: `document signed-document-container zoom-${this.zoomLevel}` }, (this.envelope.documents || []).map(envelopeDocument => {
|
|
945
1043
|
const pageNumbers = jsSdk.integerSequence(1, envelopeDocument.pages);
|