Skip to content

Commit 24c5138

Browse files
fix(validation): normalize optional document fields
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
1 parent 68b8851 commit 24c5138

1 file changed

Lines changed: 57 additions & 9 deletions

File tree

src/views/Validation.vue

Lines changed: 57 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -134,8 +134,6 @@ import { useFilesStore } from '../store/files.js'
134134
import { useSignStore } from '../store/sign.js'
135135
import { useSidebarStore } from '../store/sidebar.js'
136136
import type {
137-
LoadedValidationEnvelopeDocument,
138-
LoadedValidationFileDocument,
139137
SignerDetailRecord,
140138
ValidatedChildFileRecord,
141139
ValidationFileRecord,
@@ -200,6 +198,20 @@ type ValidationMetadataDimension = {
200198
h: number
201199
}
202200
201+
type ValidationDocumentState = ValidationFileRecord & {
202+
signers: SignerDetailRecord[]
203+
metadata: NonNullable<ValidationFileRecord['metadata']>
204+
settings: NonNullable<ValidationFileRecord['settings']>
205+
}
206+
207+
type LoadedValidationEnvelopeDocumentState = ValidationDocumentState & {
208+
nodeType: 'envelope'
209+
}
210+
211+
type LoadedValidationFileDocumentState = ValidationDocumentState & {
212+
nodeType: 'file'
213+
}
214+
203215
type UnknownRecord = Record<string, unknown>
204216
205217
function isRecord(value: unknown): value is Record<string, unknown> {
@@ -420,8 +432,44 @@ function isValidationDocumentRecord(data: unknown): data is ValidationFileRecord
420432
return true
421433
}
422434
423-
function toValidationDocument(data: unknown): ValidationFileRecord | null {
424-
return isValidationDocumentRecord(data) ? data : null
435+
const DEFAULT_VALIDATION_METADATA: NonNullable<ValidationFileRecord['metadata']> = {
436+
extension: 'pdf',
437+
p: 0,
438+
}
439+
440+
const DEFAULT_VALIDATION_SETTINGS: NonNullable<ValidationFileRecord['settings']> = {
441+
canSign: false,
442+
canRequestSign: false,
443+
phoneNumber: '',
444+
hasSignatureFile: false,
445+
needIdentificationDocuments: false,
446+
identificationDocumentsWaitingApproval: false,
447+
}
448+
449+
function toValidationDocument(data: unknown): ValidationDocumentState | null {
450+
if (!isValidationDocumentRecord(data)) {
451+
return null
452+
}
453+
454+
const metadata = isValidationMetadata(data.metadata)
455+
? data.metadata
456+
: {
457+
...DEFAULT_VALIDATION_METADATA,
458+
p: data.totalPages,
459+
}
460+
461+
const settings = isValidationSettings(data.settings)
462+
? data.settings
463+
: DEFAULT_VALIDATION_SETTINGS
464+
465+
const signers = Array.isArray(data.signers) ? data.signers : []
466+
467+
return {
468+
...data,
469+
metadata,
470+
settings,
471+
signers,
472+
}
425473
}
426474
427475
function getValidationErrorMessage(response: ValidationErrorResponse | undefined, fallback: string): string {
@@ -431,11 +479,11 @@ function getValidationErrorMessage(response: ValidationErrorResponse | undefined
431479
return fallback
432480
}
433481
434-
function isLoadedValidationEnvelopeDocument(document: ValidationFileRecord | null): document is LoadedValidationEnvelopeDocument {
482+
function isLoadedValidationEnvelopeDocument(document: ValidationDocumentState | null): document is LoadedValidationEnvelopeDocumentState {
435483
return document?.nodeType === 'envelope'
436484
}
437485
438-
function isLoadedValidationFileDocument(document: ValidationFileRecord | null): document is LoadedValidationFileDocument {
486+
function isLoadedValidationFileDocument(document: ValidationDocumentState | null): document is LoadedValidationFileDocumentState {
439487
return document?.nodeType === 'file'
440488
}
441489
@@ -459,7 +507,7 @@ const logo = ref(logoGray)
459507
const uuidToValidate = ref(route.value.params.uuid ?? '')
460508
const hasInfo = ref(false)
461509
const loading = ref(false)
462-
const document = ref<ValidationFileRecord | null>(null)
510+
const document = ref<ValidationDocumentState | null>(null)
463511
const legalInformation = ref(loadState('libresign', 'legal_information', ''))
464512
const clickedValidate = ref(false)
465513
const getUUID = ref(false)
@@ -491,8 +539,8 @@ const isEnvelope = computed(() => document.value?.nodeType === 'envelope')
491539
492540
const validationComponent = computed(() => (isEnvelope.value ? EnvelopeValidation : FileValidation))
493541
const validationDocument = computed(() => document.value)
494-
const validationEnvelopeDocument = computed<LoadedValidationEnvelopeDocument | null>(() => (isLoadedValidationEnvelopeDocument(document.value) ? document.value : null))
495-
const validationFileDocument = computed<LoadedValidationFileDocument | null>(() => (isLoadedValidationFileDocument(document.value) ? document.value : null))
542+
const validationEnvelopeDocument = computed<LoadedValidationEnvelopeDocumentState | null>(() => (isLoadedValidationEnvelopeDocument(document.value) ? document.value : null))
543+
const validationFileDocument = computed<LoadedValidationFileDocumentState | null>(() => (isLoadedValidationFileDocument(document.value) ? document.value : null))
496544
497545
const canValidate = computed(() => {
498546
if (!uuidToValidate.value) {

0 commit comments

Comments
 (0)