@hubsync/esign-web-sdk 6.5.6 → 6.5.7
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 +126 -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 +130 -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 +130 -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 +126 -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-38577511.system.entry.js +2 -0
- package/dist/verdocs-web-sdk/p-38577511.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-f624338c.entry.js +2 -0
- package/dist/verdocs-web-sdk/p-f624338c.entry.js.map +1 -0
- package/dist/verdocs-web-sdk/p-gUJxKxOG.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,31 @@ 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
|
+
const allFieldsVisited = fillableFields.every(field => visitedFieldNames.has(field.name));
|
|
576
|
+
const canSubmit = allRequiredFieldsSubmitted && allFieldsVisited;
|
|
577
|
+
if (canSubmit) {
|
|
521
578
|
this.nextButtonLabel = 'Finish';
|
|
522
579
|
if (!this.nextSubmits) {
|
|
523
580
|
this.nextSubmits = true;
|
|
@@ -529,6 +586,12 @@ const VerdocsSign = class {
|
|
|
529
586
|
}
|
|
530
587
|
this.updateAllFlags();
|
|
531
588
|
}
|
|
589
|
+
isFieldValidForRecipient(field, recipientFields) {
|
|
590
|
+
if (field.type === 'signature' || field.type === 'initial') {
|
|
591
|
+
return !field.required || this.isFieldFilledForNav(field, recipientFields);
|
|
592
|
+
}
|
|
593
|
+
return isFieldValid(field, recipientFields);
|
|
594
|
+
}
|
|
532
595
|
getNextFieldInOrder() {
|
|
533
596
|
// Find the next incomplete field in overall order (required + optional).
|
|
534
597
|
const fields = this.getSortedFillableFields();
|
|
@@ -547,13 +610,38 @@ const VerdocsSign = class {
|
|
|
547
610
|
return null;
|
|
548
611
|
}
|
|
549
612
|
isFieldFilledForNav(field, recipientFields) {
|
|
613
|
+
if (!field.required && this.skippedOptionalFields.includes(field.name)) {
|
|
614
|
+
return true;
|
|
615
|
+
}
|
|
550
616
|
if (field.type === 'signature' || field.type === 'initial') {
|
|
617
|
+
const settings = (field.settings || {});
|
|
618
|
+
const idKey = field.type === 'signature' ? 'signature_id' : 'initial_id';
|
|
619
|
+
const hasSignatureId = Object.prototype.hasOwnProperty.call(settings, 'signature_id');
|
|
620
|
+
const hasInitialId = Object.prototype.hasOwnProperty.call(settings, 'initial_id');
|
|
621
|
+
// For signature/initial fields, settings.* id is the authoritative state.
|
|
622
|
+
// This avoids stale top-level field.value (e.g. "signed") after clearing.
|
|
623
|
+
if (Object.prototype.hasOwnProperty.call(settings, idKey) || hasSignatureId || hasInitialId) {
|
|
624
|
+
const idValue = Object.prototype.hasOwnProperty.call(settings, idKey)
|
|
625
|
+
? settings[idKey]
|
|
626
|
+
: hasSignatureId
|
|
627
|
+
? settings.signature_id
|
|
628
|
+
: settings.initial_id;
|
|
629
|
+
return typeof idValue === 'string' ? idValue.trim().length > 0 : !!idValue;
|
|
630
|
+
}
|
|
631
|
+
if (Object.prototype.hasOwnProperty.call(settings, 'value')) {
|
|
632
|
+
const settingsValue = typeof settings.value === 'string' ? settings.value.trim() : settings.value;
|
|
633
|
+
return !!settingsValue;
|
|
634
|
+
}
|
|
635
|
+
if (Object.prototype.hasOwnProperty.call(settings, 'result')) {
|
|
636
|
+
const settingsResult = typeof settings.result === 'string' ? settings.result.trim() : settings.result;
|
|
637
|
+
return !!settingsResult;
|
|
638
|
+
}
|
|
639
|
+
if (Object.prototype.hasOwnProperty.call(settings, 'base64')) {
|
|
640
|
+
const settingsBase64 = typeof settings.base64 === 'string' ? settings.base64.trim() : settings.base64;
|
|
641
|
+
return !!settingsBase64;
|
|
642
|
+
}
|
|
551
643
|
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;
|
|
644
|
+
return !!value;
|
|
557
645
|
}
|
|
558
646
|
if (field.type === 'dropdown') {
|
|
559
647
|
return isFieldFilled(field, recipientFields) && !!field.value;
|
|
@@ -570,16 +658,11 @@ const VerdocsSign = class {
|
|
|
570
658
|
return fields[nextFocusedIndex];
|
|
571
659
|
}
|
|
572
660
|
handlePrev() {
|
|
573
|
-
|
|
661
|
+
this.signingStarted = true;
|
|
574
662
|
const allFields = this.getSortedFillableFields();
|
|
575
663
|
const focusedIndex = allFields.findIndex(f => f.name === this.focusedField);
|
|
576
664
|
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;
|
|
665
|
+
this.focusField(allFields[focusedIndex - 1]);
|
|
583
666
|
}
|
|
584
667
|
}
|
|
585
668
|
updateAllFlags() {
|
|
@@ -616,8 +699,12 @@ const VerdocsSign = class {
|
|
|
616
699
|
variant,
|
|
617
700
|
label,
|
|
618
701
|
showSkip,
|
|
702
|
+
onClick: () => {
|
|
703
|
+
this.signingStarted = true;
|
|
704
|
+
this.focusField(nextField);
|
|
705
|
+
},
|
|
619
706
|
onSkip: () => {
|
|
620
|
-
this.
|
|
707
|
+
this.handleSkipField(nextField);
|
|
621
708
|
},
|
|
622
709
|
});
|
|
623
710
|
}
|
|
@@ -690,8 +777,15 @@ const VerdocsSign = class {
|
|
|
690
777
|
el.addEventListener('fieldChange', e => {
|
|
691
778
|
this.handleFieldChange(field, e).finally(() => this.checkRecipientFields());
|
|
692
779
|
});
|
|
780
|
+
el.addEventListener('click', () => {
|
|
781
|
+
this.focusedField = field.name;
|
|
782
|
+
this.markFieldVisited(field.name);
|
|
783
|
+
this.checkRecipientFields();
|
|
784
|
+
});
|
|
693
785
|
el.addEventListener('adopt', () => {
|
|
694
786
|
this.focusedField = field.name;
|
|
787
|
+
this.markFieldVisited(field.name);
|
|
788
|
+
this.checkRecipientFields();
|
|
695
789
|
this.adoptingSignature = true;
|
|
696
790
|
});
|
|
697
791
|
el.setAttribute('templateid', this.envelope.template_id);
|
|
@@ -881,7 +975,8 @@ const VerdocsSign = class {
|
|
|
881
975
|
inProgressMenuOptions.unshift({ id: 'delegate', label: 'Delegate' });
|
|
882
976
|
}
|
|
883
977
|
console.log('this.getRecipientFields()', this.getRecipientFields());
|
|
884
|
-
const
|
|
978
|
+
const recipientFields = this.getRecipientFields();
|
|
979
|
+
const invalidFields = recipientFields.filter(field => !this.isFieldValidForRecipient(field, recipientFields));
|
|
885
980
|
invalidFields.length > 0
|
|
886
981
|
? console.log('[SIGN] Invalid fields remaining', invalidFields.map(field => field.name))
|
|
887
982
|
: console.log('[SIGN] All field valid');
|
|
@@ -894,7 +989,7 @@ const VerdocsSign = class {
|
|
|
894
989
|
// Calculate detailed progress
|
|
895
990
|
const allFields = this.getSortedFillableFields();
|
|
896
991
|
const recipientFields = this.getRecipientFields();
|
|
897
|
-
const isFilled = (f) =>
|
|
992
|
+
const isFilled = (f) => this.isFieldFilledForNav(f, recipientFields);
|
|
898
993
|
const requiredFields = allFields.filter(f => f.required);
|
|
899
994
|
const requiredRemaining = requiredFields.filter(f => !isFilled(f)).length;
|
|
900
995
|
const requiredFilled = requiredFields.length - requiredRemaining;
|
|
@@ -926,18 +1021,18 @@ const VerdocsSign = class {
|
|
|
926
1021
|
filledFields: recipientFields.filter(f => isFilled(f)).map(f => ({ name: f.name, type: f.type, val: f.value })),
|
|
927
1022
|
});
|
|
928
1023
|
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
1024
|
if (this.nextSubmits) {
|
|
933
1025
|
mode = 'completed';
|
|
934
1026
|
}
|
|
935
|
-
else if (
|
|
1027
|
+
else if (this.signingStarted) {
|
|
936
1028
|
mode = 'signing';
|
|
937
1029
|
}
|
|
938
1030
|
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: () => {
|
|
1031
|
+
this.signingStarted = true;
|
|
939
1032
|
this.adoptingSignature = true;
|
|
940
|
-
this.
|
|
1033
|
+
const fields = this.getSortedFillableFields();
|
|
1034
|
+
const startField = fields.find(f => f.name === this.focusedField) || fields[0];
|
|
1035
|
+
this.focusField(startField || null);
|
|
941
1036
|
}, onNext: () => this.handleNext(), onPrevious: () => this.handlePrev(), onExit: () => this.handleNext() }));
|
|
942
1037
|
})(), h("div", { class: `document signed-document-container zoom-${this.zoomLevel}` }, (this.envelope.documents || []).map(envelopeDocument => {
|
|
943
1038
|
const pageNumbers = integerSequence(1, envelopeDocument.pages);
|