@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
|
@@ -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,31 @@ 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
|
+
const allFieldsVisited = fillableFields.every(field => visitedFieldNames.has(field.name));
|
|
578
|
+
const canSubmit = allRequiredFieldsSubmitted && allFieldsVisited;
|
|
579
|
+
if (canSubmit) {
|
|
523
580
|
this.nextButtonLabel = 'Finish';
|
|
524
581
|
if (!this.nextSubmits) {
|
|
525
582
|
this.nextSubmits = true;
|
|
@@ -531,6 +588,12 @@ const VerdocsSign = class {
|
|
|
531
588
|
}
|
|
532
589
|
this.updateAllFlags();
|
|
533
590
|
}
|
|
591
|
+
isFieldValidForRecipient(field, recipientFields) {
|
|
592
|
+
if (field.type === 'signature' || field.type === 'initial') {
|
|
593
|
+
return !field.required || this.isFieldFilledForNav(field, recipientFields);
|
|
594
|
+
}
|
|
595
|
+
return jsSdk.isFieldValid(field, recipientFields);
|
|
596
|
+
}
|
|
534
597
|
getNextFieldInOrder() {
|
|
535
598
|
// Find the next incomplete field in overall order (required + optional).
|
|
536
599
|
const fields = this.getSortedFillableFields();
|
|
@@ -549,13 +612,38 @@ const VerdocsSign = class {
|
|
|
549
612
|
return null;
|
|
550
613
|
}
|
|
551
614
|
isFieldFilledForNav(field, recipientFields) {
|
|
615
|
+
if (!field.required && this.skippedOptionalFields.includes(field.name)) {
|
|
616
|
+
return true;
|
|
617
|
+
}
|
|
552
618
|
if (field.type === 'signature' || field.type === 'initial') {
|
|
619
|
+
const settings = (field.settings || {});
|
|
620
|
+
const idKey = field.type === 'signature' ? 'signature_id' : 'initial_id';
|
|
621
|
+
const hasSignatureId = Object.prototype.hasOwnProperty.call(settings, 'signature_id');
|
|
622
|
+
const hasInitialId = Object.prototype.hasOwnProperty.call(settings, 'initial_id');
|
|
623
|
+
// For signature/initial fields, settings.* id is the authoritative state.
|
|
624
|
+
// This avoids stale top-level field.value (e.g. "signed") after clearing.
|
|
625
|
+
if (Object.prototype.hasOwnProperty.call(settings, idKey) || hasSignatureId || hasInitialId) {
|
|
626
|
+
const idValue = Object.prototype.hasOwnProperty.call(settings, idKey)
|
|
627
|
+
? settings[idKey]
|
|
628
|
+
: hasSignatureId
|
|
629
|
+
? settings.signature_id
|
|
630
|
+
: settings.initial_id;
|
|
631
|
+
return typeof idValue === 'string' ? idValue.trim().length > 0 : !!idValue;
|
|
632
|
+
}
|
|
633
|
+
if (Object.prototype.hasOwnProperty.call(settings, 'value')) {
|
|
634
|
+
const settingsValue = typeof settings.value === 'string' ? settings.value.trim() : settings.value;
|
|
635
|
+
return !!settingsValue;
|
|
636
|
+
}
|
|
637
|
+
if (Object.prototype.hasOwnProperty.call(settings, 'result')) {
|
|
638
|
+
const settingsResult = typeof settings.result === 'string' ? settings.result.trim() : settings.result;
|
|
639
|
+
return !!settingsResult;
|
|
640
|
+
}
|
|
641
|
+
if (Object.prototype.hasOwnProperty.call(settings, 'base64')) {
|
|
642
|
+
const settingsBase64 = typeof settings.base64 === 'string' ? settings.base64.trim() : settings.base64;
|
|
643
|
+
return !!settingsBase64;
|
|
644
|
+
}
|
|
553
645
|
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;
|
|
646
|
+
return !!value;
|
|
559
647
|
}
|
|
560
648
|
if (field.type === 'dropdown') {
|
|
561
649
|
return jsSdk.isFieldFilled(field, recipientFields) && !!field.value;
|
|
@@ -572,16 +660,11 @@ const VerdocsSign = class {
|
|
|
572
660
|
return fields[nextFocusedIndex];
|
|
573
661
|
}
|
|
574
662
|
handlePrev() {
|
|
575
|
-
|
|
663
|
+
this.signingStarted = true;
|
|
576
664
|
const allFields = this.getSortedFillableFields();
|
|
577
665
|
const focusedIndex = allFields.findIndex(f => f.name === this.focusedField);
|
|
578
666
|
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;
|
|
667
|
+
this.focusField(allFields[focusedIndex - 1]);
|
|
585
668
|
}
|
|
586
669
|
}
|
|
587
670
|
updateAllFlags() {
|
|
@@ -618,8 +701,12 @@ const VerdocsSign = class {
|
|
|
618
701
|
variant,
|
|
619
702
|
label,
|
|
620
703
|
showSkip,
|
|
704
|
+
onClick: () => {
|
|
705
|
+
this.signingStarted = true;
|
|
706
|
+
this.focusField(nextField);
|
|
707
|
+
},
|
|
621
708
|
onSkip: () => {
|
|
622
|
-
this.
|
|
709
|
+
this.handleSkipField(nextField);
|
|
623
710
|
},
|
|
624
711
|
});
|
|
625
712
|
}
|
|
@@ -692,8 +779,15 @@ const VerdocsSign = class {
|
|
|
692
779
|
el.addEventListener('fieldChange', e => {
|
|
693
780
|
this.handleFieldChange(field, e).finally(() => this.checkRecipientFields());
|
|
694
781
|
});
|
|
782
|
+
el.addEventListener('click', () => {
|
|
783
|
+
this.focusedField = field.name;
|
|
784
|
+
this.markFieldVisited(field.name);
|
|
785
|
+
this.checkRecipientFields();
|
|
786
|
+
});
|
|
695
787
|
el.addEventListener('adopt', () => {
|
|
696
788
|
this.focusedField = field.name;
|
|
789
|
+
this.markFieldVisited(field.name);
|
|
790
|
+
this.checkRecipientFields();
|
|
697
791
|
this.adoptingSignature = true;
|
|
698
792
|
});
|
|
699
793
|
el.setAttribute('templateid', this.envelope.template_id);
|
|
@@ -883,7 +977,8 @@ const VerdocsSign = class {
|
|
|
883
977
|
inProgressMenuOptions.unshift({ id: 'delegate', label: 'Delegate' });
|
|
884
978
|
}
|
|
885
979
|
console.log('this.getRecipientFields()', this.getRecipientFields());
|
|
886
|
-
const
|
|
980
|
+
const recipientFields = this.getRecipientFields();
|
|
981
|
+
const invalidFields = recipientFields.filter(field => !this.isFieldValidForRecipient(field, recipientFields));
|
|
887
982
|
invalidFields.length > 0
|
|
888
983
|
? console.log('[SIGN] Invalid fields remaining', invalidFields.map(field => field.name))
|
|
889
984
|
: console.log('[SIGN] All field valid');
|
|
@@ -896,7 +991,7 @@ const VerdocsSign = class {
|
|
|
896
991
|
// Calculate detailed progress
|
|
897
992
|
const allFields = this.getSortedFillableFields();
|
|
898
993
|
const recipientFields = this.getRecipientFields();
|
|
899
|
-
const isFilled = (f) =>
|
|
994
|
+
const isFilled = (f) => this.isFieldFilledForNav(f, recipientFields);
|
|
900
995
|
const requiredFields = allFields.filter(f => f.required);
|
|
901
996
|
const requiredRemaining = requiredFields.filter(f => !isFilled(f)).length;
|
|
902
997
|
const requiredFilled = requiredFields.length - requiredRemaining;
|
|
@@ -928,18 +1023,18 @@ const VerdocsSign = class {
|
|
|
928
1023
|
filledFields: recipientFields.filter(f => isFilled(f)).map(f => ({ name: f.name, type: f.type, val: f.value })),
|
|
929
1024
|
});
|
|
930
1025
|
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
1026
|
if (this.nextSubmits) {
|
|
935
1027
|
mode = 'completed';
|
|
936
1028
|
}
|
|
937
|
-
else if (
|
|
1029
|
+
else if (this.signingStarted) {
|
|
938
1030
|
mode = 'signing';
|
|
939
1031
|
}
|
|
940
1032
|
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: () => {
|
|
1033
|
+
this.signingStarted = true;
|
|
941
1034
|
this.adoptingSignature = true;
|
|
942
|
-
this.
|
|
1035
|
+
const fields = this.getSortedFillableFields();
|
|
1036
|
+
const startField = fields.find(f => f.name === this.focusedField) || fields[0];
|
|
1037
|
+
this.focusField(startField || null);
|
|
943
1038
|
}, onNext: () => this.handleNext(), onPrevious: () => this.handlePrev(), onExit: () => this.handleNext() }));
|
|
944
1039
|
})(), index.h("div", { class: `document signed-document-container zoom-${this.zoomLevel}` }, (this.envelope.documents || []).map(envelopeDocument => {
|
|
945
1040
|
const pageNumbers = jsSdk.integerSequence(1, envelopeDocument.pages);
|