Files
docuseal/app/javascript/template_builder/document.vue
T

154 lines
3.4 KiB
Vue
Raw Normal View History

2023-05-21 17:59:36 +03:00
<template>
2023-05-31 00:50:43 +03:00
<div>
<Page
v-for="(image, index) in sortedPreviewImages"
:key="image.id"
2023-06-03 00:53:46 +03:00
:ref="setPageRefs"
2024-07-16 19:01:44 +03:00
:input-mode="inputMode"
2023-05-31 00:50:43 +03:00
:number="index"
2023-11-04 01:19:32 +02:00
:editable="editable"
2023-05-31 00:50:43 +03:00
:areas="areasIndex[index]"
2024-01-05 18:40:45 +02:00
:allow-draw="allowDraw"
2023-05-31 00:50:43 +03:00
:is-drag="isDrag"
2024-07-15 14:03:36 +03:00
:with-field-placeholder="withFieldPlaceholder"
2023-11-27 20:24:58 +02:00
:default-fields="defaultFields"
2024-01-23 23:20:19 +02:00
:default-submitters="defaultSubmitters"
2023-06-27 00:57:29 +03:00
:draw-field="drawField"
2024-03-27 13:47:17 +02:00
:draw-field-type="drawFieldType"
2023-06-07 01:16:43 +03:00
:selected-submitter="selectedSubmitter"
2024-12-28 13:08:00 +02:00
:total-pages="sortedPreviewImages.length"
2023-05-31 00:50:43 +03:00
:image="image"
@drop-field="$emit('drop-field', {...$event, attachment_uuid: document.uuid })"
2023-06-04 01:08:45 +03:00
@remove-area="$emit('remove-area', $event)"
2024-05-05 16:57:04 +03:00
@scroll-to="scrollToArea"
2023-05-31 00:50:43 +03:00
@draw="$emit('draw', {...$event, attachment_uuid: document.uuid })"
/>
</div>
2023-05-21 17:59:36 +03:00
</template>
<script>
import Page from './page'
export default {
2023-05-31 23:19:20 +03:00
name: 'TemplateDocument',
2023-05-21 17:59:36 +03:00
components: {
Page
},
props: {
document: {
type: Object,
required: true
},
2024-07-16 19:01:44 +03:00
inputMode: {
type: Boolean,
required: false,
default: false
},
2023-05-21 17:59:36 +03:00
areasIndex: {
type: Object,
required: false,
default: () => ({})
},
2023-11-27 20:24:58 +02:00
defaultFields: {
type: Array,
required: false,
default: () => []
},
2024-07-15 14:03:36 +03:00
withFieldPlaceholder: {
type: Boolean,
required: false,
default: false
},
2024-03-27 13:47:17 +02:00
drawFieldType: {
type: String,
required: false,
default: ''
},
2024-01-23 23:20:19 +02:00
defaultSubmitters: {
type: Array,
required: false,
default: () => []
},
2024-01-05 18:40:45 +02:00
allowDraw: {
type: Boolean,
required: false,
default: true
},
2023-06-07 01:16:43 +03:00
selectedSubmitter: {
type: Object,
required: true
2023-05-23 00:03:26 +03:00
},
2023-11-04 01:19:32 +02:00
editable: {
type: Boolean,
required: false,
default: true
},
2023-06-27 00:57:29 +03:00
drawField: {
type: Object,
2023-06-08 00:20:42 +03:00
required: false,
2023-06-27 00:57:29 +03:00
default: null
2023-06-08 00:20:42 +03:00
},
2023-11-11 21:16:29 +02:00
baseUrl: {
type: String,
required: false,
default: ''
},
2023-05-23 00:03:26 +03:00
isDrag: {
type: Boolean,
required: false,
default: false
2023-05-21 17:59:36 +03:00
}
},
2023-06-04 01:08:45 +03:00
emits: ['draw', 'drop-field', 'remove-area'],
2023-06-03 00:53:46 +03:00
data () {
return {
pageRefs: []
}
},
2023-05-21 17:59:36 +03:00
computed: {
2023-11-11 21:16:29 +02:00
basePreviewUrl () {
if (this.baseUrl) {
return new URL(this.baseUrl).origin
} else {
return ''
}
},
2023-10-22 01:54:20 +03:00
numberOfPages () {
return this.document.metadata?.pdf?.number_of_pages || this.document.preview_images.length
},
2023-05-21 17:59:36 +03:00
sortedPreviewImages () {
2023-10-22 01:54:20 +03:00
const lazyloadMetadata = this.document.preview_images[this.document.preview_images.length - 1].metadata
return [...Array(this.numberOfPages).keys()].map((i) => {
return this.previewImagesIndex[i] || {
metadata: lazyloadMetadata,
id: Math.random().toString(),
2024-02-17 22:14:28 +02:00
url: this.basePreviewUrl + `/preview/${this.document.signed_uuid || this.document.uuid}/${i}.jpg`
2023-10-22 01:54:20 +03:00
}
})
},
previewImagesIndex () {
return this.document.preview_images.reduce((acc, e) => {
acc[parseInt(e.filename)] = e
return acc
}, {})
2023-05-21 17:59:36 +03:00
}
2023-06-03 00:53:46 +03:00
},
beforeUpdate () {
this.pageRefs = []
},
methods: {
scrollToArea (area) {
2024-05-05 16:57:04 +03:00
this.$nextTick(() => {
this.pageRefs[area.page].areaRefs.find((e) => e.area === area).$el.scrollIntoView({ behavior: 'smooth', block: 'center' })
})
2023-06-03 00:53:46 +03:00
},
setPageRefs (el) {
if (el) {
this.pageRefs.push(el)
}
}
2023-05-21 17:59:36 +03:00
}
}
</script>