Skip to content

Commit d21801c

Browse files
refactor(validation): reduce type mutation surface in view
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
1 parent b748168 commit d21801c

1 file changed

Lines changed: 34 additions & 30 deletions

File tree

src/views/Validation.vue

Lines changed: 34 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,12 @@ type RouteState = {
149149
query: Record<string, string>
150150
}
151151
152+
type ValidationRouteName =
153+
| 'validation'
154+
| 'ValidationFile'
155+
| 'ValidationFileExternal'
156+
| 'ValidationFileShortUrl'
157+
152158
type RouterState = {
153159
push: (location: unknown) => void
154160
replace: (location: unknown) => void
@@ -255,28 +261,31 @@ function toNumber(value: unknown): number | null {
255261
return typeof value === 'number' && Number.isFinite(value) ? value : null
256262
}
257263
258-
const VALIDATION_STATUS_VALUES: readonly ValidationStatus[] = [
259-
FILE_STATUS.DRAFT,
260-
FILE_STATUS.ABLE_TO_SIGN,
261-
FILE_STATUS.PARTIAL_SIGNED,
262-
FILE_STATUS.SIGNED,
263-
FILE_STATUS.DELETED,
264-
]
265-
266264
function isValidationStatus(value: unknown): value is ValidationStatus {
267265
const normalizedValue = toNumber(value)
268-
return normalizedValue !== null && VALIDATION_STATUS_VALUES.includes(normalizedValue as ValidationStatus)
266+
return normalizedValue === FILE_STATUS.DRAFT
267+
|| normalizedValue === FILE_STATUS.ABLE_TO_SIGN
268+
|| normalizedValue === FILE_STATUS.PARTIAL_SIGNED
269+
|| normalizedValue === FILE_STATUS.SIGNED
270+
|| normalizedValue === FILE_STATUS.DELETED
269271
}
270272
271-
const SIGNER_STATUS_VALUES: readonly SignerDetailRecord['status'][] = [
272-
SIGN_REQUEST_STATUS.DRAFT,
273-
SIGN_REQUEST_STATUS.ABLE_TO_SIGN,
274-
SIGN_REQUEST_STATUS.SIGNED,
275-
]
276-
277273
function isSignerStatus(value: unknown): value is SignerDetailRecord['status'] {
278274
const normalizedValue = toNumber(value)
279-
return normalizedValue !== null && SIGNER_STATUS_VALUES.includes(normalizedValue as SignerDetailRecord['status'])
275+
return normalizedValue === SIGN_REQUEST_STATUS.DRAFT
276+
|| normalizedValue === SIGN_REQUEST_STATUS.ABLE_TO_SIGN
277+
|| normalizedValue === SIGN_REQUEST_STATUS.SIGNED
278+
}
279+
280+
function isValidationRouteName(value: RouteState['name']): value is ValidationRouteName {
281+
return value === 'validation'
282+
|| value === 'ValidationFile'
283+
|| value === 'ValidationFileExternal'
284+
|| value === 'ValidationFileShortUrl'
285+
}
286+
287+
function isSignedDocumentStatus(status: unknown): boolean {
288+
return Number(status) === FILE_STATUS.SIGNED
280289
}
281290
282291
function isString(value: unknown): value is string {
@@ -962,11 +971,7 @@ function handleValidationSuccess(data: unknown) {
962971
setValidationError(t('libresign', 'Failed to validate document'))
963972
return
964973
}
965-
const routeName = route.value?.name || ''
966-
const shouldUpdateRoute = routeName === 'validation'
967-
|| routeName === 'ValidationFile'
968-
|| routeName === 'ValidationFileExternal'
969-
|| routeName === 'ValidationFileShortUrl'
974+
const shouldUpdateRoute = isValidationRouteName(route.value.name)
970975
if (shouldUpdateRoute && route.value.params.uuid !== normalizedDocument.uuid) {
971976
router.value.replace({
972977
name: route.value.name,
@@ -979,16 +984,16 @@ function handleValidationSuccess(data: unknown) {
979984
}
980985
document.value = normalizedDocument
981986
hasInfo.value = true
982-
const isSignedStatus = (status: unknown) => Number(status) === FILE_STATUS.SIGNED
983-
const isSignedDoc = isSignedStatus(document.value?.status)
987+
const isSignedDoc = isSignedDocumentStatus(document.value?.status)
984988
const allFilesSigned = Array.isArray(document.value?.files)
985989
&& document.value.files.length > 0
986-
&& document.value.files.every(file => isSignedStatus(file.status))
990+
&& document.value.files.every(file => isSignedDocumentStatus(file.status))
987991
const signerCompleted = isCurrentSignerSigned()
988-
if (isSignedDoc || allFilesSigned || signerCompleted) {
992+
const shouldSyncSignedState = isSignedDoc || allFilesSigned || signerCompleted
993+
if (shouldSyncSignedState) {
989994
syncValidatedDocumentToFilesStore(normalizedDocument)
990995
}
991-
if ((isSignedDoc || allFilesSigned || signerCompleted) && (isAfterSigned.value || shouldFireAsyncConfetti.value)) {
996+
if (shouldSyncSignedState && (isAfterSigned.value || shouldFireAsyncConfetti.value)) {
992997
const capabilities = getCapabilities() as { libresign?: { config?: Record<string, unknown> } } | undefined
993998
if (capabilities?.libresign?.config?.['show-confetti'] === true) {
994999
const jsConfetti = new JSConfetti()
@@ -1010,11 +1015,10 @@ async function refreshAfterAsyncSigning() {
10101015
return
10111016
}
10121017
1013-
const isSignedStatus = (status: unknown) => Number(status) === FILE_STATUS.SIGNED
1014-
const isSigned = isSignedStatus(document.value?.status)
1018+
const isSigned = isSignedDocumentStatus(document.value?.status)
10151019
const allFilesSigned = Array.isArray(document.value?.files)
10161020
&& document.value.files.length > 0
1017-
&& document.value.files.every(file => isSignedStatus(file.status))
1021+
&& document.value.files.every(file => isSignedDocumentStatus(file.status))
10181022
10191023
if (isSigned || allFilesSigned) {
10201024
return
@@ -1050,7 +1054,7 @@ function handleSigningError(message?: string) {
10501054
}
10511055
10521056
function isCurrentSignerSigned() {
1053-
const signer = document.value?.signers?.find(row => row.me)
1057+
const signer = document.value?.signers.find(row => row.me)
10541058
return !!signer?.signed || Number(signer?.status) === SIGN_REQUEST_STATUS.SIGNED
10551059
}
10561060

0 commit comments

Comments
 (0)