diff --git a/src/Components/Request/VisibleElements.vue b/src/Components/Request/VisibleElements.vue
index 98f4d9052c..b7db33aee0 100644
--- a/src/Components/Request/VisibleElements.vue
+++ b/src/Components/Request/VisibleElements.vue
@@ -54,7 +54,8 @@
-
f.file)
+ return (this.document.files || []).map(f => f.file)
},
pdfFileNames() {
- return this.document.files.map(f => {
- const metadata = f.metadata
- const ext = metadata?.extension || 'pdf'
- return `${f.name}.${ext}`
- })
+ return (this.document.files || []).map(f => `${f.name}.${f.metadata?.extension || 'pdf'}`)
},
documentNameWithExtension() {
const doc = this.document
@@ -200,14 +197,56 @@ export default {
}
this.modal = true
this.filesStore.loading = true
+
+ if (this.document.nodeType === 'envelope' && this.document.files.length === 0) {
+ await this.fetchEnvelopeFiles()
+ } else if (this.document.nodeType !== 'envelope') {
+ if (!this.document.files || this.document.files.length === 0) {
+ const fileUrl = this.document.file || generateUrl('/apps/libresign/p/pdf/{uuid}', { uuid: this.document.uuid })
+ this.document.files = [{
+ id: this.document.id,
+ nodeId: this.document.nodeId,
+ uuid: this.document.uuid,
+ name: this.document.name,
+ file: fileUrl,
+ metadata: this.document.metadata,
+ signers: this.document.signers,
+ visibleElements: this.document.visibleElements || [],
+ }]
+ } else {
+ this.document.files = this.document.files.map(f => {
+ if (!f.file) {
+ const fileUrl = this.document.file || generateUrl('/apps/libresign/p/pdf/{uuid}', { uuid: f.uuid || this.document.uuid })
+ return { ...f, file: fileUrl }
+ }
+ return f
+ })
+ }
+ }
+
this.buildFilePagesMap()
this.filesStore.loading = false
},
+ async fetchEnvelopeFiles() {
+ const response = await axios.get(generateOcsUrl('/apps/libresign/api/v1/file/list'), {
+ params: {
+ parentFileId: this.document.id,
+ force_fetch: true,
+ },
+ })
+ const childFiles = response?.data?.ocs?.data?.data || []
+ this.document.files = Array.isArray(childFiles) ? childFiles : []
+ },
buildFilePagesMap() {
this.filePagesMap = {}
+ const filesToProcess = this.document.files || []
+ if (!Array.isArray(filesToProcess)) {
+ return
+ }
+
let currentPage = 1
- this.document.files.forEach((file, index) => {
+ filesToProcess.forEach((file, index) => {
const metadata = file.metadata
const pageCount = metadata?.p || 0
for (let i = 0; i < pageCount; i++) {
@@ -228,21 +267,22 @@ export default {
this.loadedPdfsCount = 0
},
getPageHeightForFile(fileId, page) {
- const fileInfo = this.document.files.find(f => f.id === fileId)
+ const filesToSearch = this.document.files || []
+ const fileInfo = filesToSearch.find(f => f.id === fileId)
const metadata = fileInfo?.metadata
return metadata?.d?.[page - 1]?.h
},
updateSigners(data) {
this.loadedPdfsCount++
- const expectedPdfsCount = this.document.files.length
+ const filesToProcess = this.document.files || []
+ const expectedPdfsCount = filesToProcess.length
if (this.elementsLoaded || this.loadedPdfsCount < expectedPdfsCount) {
return
}
- // Coletar visibleElements de mĂșltiplas fontes no array unificado `files`
let visibleElementsToAdd = []
- this.document.files.forEach((f, fileIndex) => {
+ filesToProcess.forEach((f, fileIndex) => {
const elements = Array.isArray(f.visibleElements) ? f.visibleElements : []
elements.forEach(element => {
visibleElementsToAdd.push({
@@ -253,12 +293,11 @@ export default {
})
})
- // Adicionar signers com seus elementos usando correspondĂȘncia por identifyMethods
visibleElementsToAdd.forEach(element => {
let envelopeSignerMatch = null
let childSigner = null
if (element.fileId) {
- const fileInfo = this.document.files.find(f => f.id === element.fileId)
+ const fileInfo = filesToProcess.find(f => f.id === element.fileId)
if (fileInfo) {
childSigner = (fileInfo.signers || []).find(s => s.signRequestId === element.signRequestId)
}
@@ -286,7 +325,6 @@ export default {
return
}
- // fallback: add without documentIndex
object.element = element
this.$refs.pdfEditor.addSigner(object)
})
@@ -413,7 +451,6 @@ export default {
objects.forEach(object => {
if (!object.signer) return
- // Map per-file page index to global using filePagesMap
let globalPageNumber = object.pageNumber
for (const [page, info] of Object.entries(this.filePagesMap)) {
if (info.fileIndex === docIndex) {
@@ -422,7 +459,6 @@ export default {
}
}
- // Coordinates normalized for PDF editor
const pageInfo = this.filePagesMap[globalPageNumber]
const pageHeight = this.getPageHeightForFile(pageInfo.id, object.pageNumber)
if (!pageHeight) {
@@ -448,12 +484,10 @@ export default {
coordinates,
}
- // Target file and per-file page number
const targetFileId = pageInfo.id
element.fileId = targetFileId
element.coordinates.page = globalPageNumber - pageInfo.startPage + 1
- // Resolve child signer SR for the specific file via identifyMethods
const fileInfo = this.document.files.find(f => f.id === targetFileId)
if (!fileInfo || !Array.isArray(fileInfo.signers)) {
return