Skip to content

Commit 266afab

Browse files
refactor: replace setTimeout polling with event relay in PdfEditor
The PdfEditor component was still using setTimeout-based polling to detect when pdf-elements placement completed. With pdf-elements v1.2.0, this event is now exposed directly via 'pdf-elements:adding-ended' event with a complete event contract including the placement reason ('placed' or 'cancelled'). Changes: - Remove pendingAddedObjectCount and pendingAddCheckTimer state - Remove polling functions: clearPendingAddCheck, finishPendingAddCheck, checkSignerAdded, scheduleSignerAddedCheck - Remove document event listener registration (mouseup, touchend, keyup) - Add handleAddingEnded(event: Event) to relay pdf-elements:adding-ended directly to pdf-editor:adding-ended with the reason payload - Update emit type definition to include payload with reason field This completes the v1.2.0 migration from polling-based to event-driven completion detection. Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
1 parent 24b119a commit 266afab

1 file changed

Lines changed: 10 additions & 61 deletions

File tree

src/components/PdfEditor/PdfEditor.vue

Lines changed: 10 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@
1919
:style="toolbarStyleVars"
2020
@pdf-elements:end-init="endInit"
2121
@pdf-elements:object-click="handleObjectClick"
22-
@pdf-elements:delete-object="handleDeleteObject">
22+
@pdf-elements:delete-object="handleDeleteObject"
23+
@pdf-elements:adding-ended="handleAddingEnded">
2324
<template #actions="slotProps">
2425
<slot name="actions" v-bind="slotProps">
2526
<SignerMenu
@@ -150,13 +151,10 @@ const emit = defineEmits<{
150151
(event: 'pdf-editor:end-init', payload: EndInitPayload): void
151152
(event: 'pdf-editor:on-delete-signer', payload: VisibleElementRecord): void
152153
(event: 'pdf-editor:object-click', payload: Record<string, unknown>): void
153-
(event: 'pdf-editor:adding-ended'): void
154+
(event: 'pdf-editor:adding-ended', payload: { reason?: string }): void
154155
}>()
155156
156157
const pdfElements = ref<PdfElementsInstance | null>(null)
157-
const pendingAddedObjectCount = ref<number | null>(null)
158-
159-
let pendingAddCheckTimer: ReturnType<typeof setTimeout> | null = null
160158
161159
const ignoreClickOutsideSelectors = computed(() => ['.action-item__popper', '.action-item'])
162160
@@ -268,50 +266,12 @@ function getTotalObjectsCount() {
268266
}, 0)
269267
}
270268
271-
function clearPendingAddCheck() {
272-
if (pendingAddCheckTimer !== null) {
273-
clearTimeout(pendingAddCheckTimer)
274-
pendingAddCheckTimer = null
275-
}
276-
pendingAddedObjectCount.value = null
277-
}
278-
279-
function finishPendingAddCheck() {
280-
clearPendingAddCheck()
281-
emit('pdf-editor:adding-ended')
282-
}
283-
284-
function checkSignerAdded() {
285-
const objectsBefore = pendingAddedObjectCount.value
286-
if (objectsBefore === null) {
287-
return
288-
}
289-
290-
pendingAddCheckTimer = null
291-
const isAddingMode = pdfElements.value?.isAddingMode === true
292-
const objectsAfter = getTotalObjectsCount()
293-
294-
if (objectsAfter > objectsBefore) {
295-
finishPendingAddCheck()
296-
return
297-
}
298-
299-
if (!isAddingMode) {
300-
finishPendingAddCheck()
301-
return
302-
}
303-
}
269+
function handleAddingEnded(event: Event) {
270+
emit('pdf-editor:adding-ended', {
271+
reason: (event as CustomEvent)?.detail?.reason,
272+
})
304273
305-
function scheduleSignerAddedCheck() {
306-
if (pendingAddedObjectCount.value === null) {
307-
return
308-
}
309-
if (pendingAddCheckTimer !== null) {
310-
clearTimeout(pendingAddCheckTimer)
311-
}
312-
pendingAddCheckTimer = setTimeout(checkSignerAdded, 0)
313274
}
314-
315275
function startAddingSigner(signer: SignerSummaryRecord | SignerDetailRecord | null | undefined, size: { width?: number, height?: number }) {
316276
if (!pdfElements.value || !size?.width || !size?.height) {
317277
return false
@@ -330,17 +290,12 @@ function startAddingSigner(signer: SignerSummaryRecord | SignerDetailRecord | nu
330290
height: size.height,
331291
signer: signerPayload,
332292
})
333-
pendingAddedObjectCount.value = getTotalObjectsCount()
334-
if (pendingAddCheckTimer !== null) {
335-
clearTimeout(pendingAddCheckTimer)
336-
}
337293
338294
return true
339295
}
340296
341297
function cancelAdding() {
342298
pdfElements.value?.cancelAdding()
343-
clearPendingAddCheck()
344299
}
345300
346301
async function addSigner(signer: SignerSummaryRecord | SignerDetailRecord, visibleElement: VisibleElementRecord, options: { documentIndex?: number } = {}) {
@@ -397,16 +352,11 @@ async function waitForPageRender(docIndex: number, pageIndex: number) {
397352
}
398353
399354
onMounted(() => {
400-
document.addEventListener('mouseup', scheduleSignerAddedCheck)
401-
document.addEventListener('touchend', scheduleSignerAddedCheck)
402-
document.addEventListener('keyup', scheduleSignerAddedCheck)
355+
// PDF worker and listeners are already handled by pdf-elements component
403356
})
404357
405358
onBeforeUnmount(() => {
406-
document.removeEventListener('mouseup', scheduleSignerAddedCheck)
407-
document.removeEventListener('touchend', scheduleSignerAddedCheck)
408-
document.removeEventListener('keyup', scheduleSignerAddedCheck)
409-
clearPendingAddCheck()
359+
// Cleanup is handled by pdf-elements component
410360
})
411361
412362
defineExpose({
@@ -431,8 +381,7 @@ defineExpose({
431381
addSigner,
432382
waitForPageRender,
433383
getTotalObjectsCount,
434-
checkSignerAdded,
435-
scheduleSignerAddedCheck,
384+
handleAddingEnded,
436385
})
437386
</script>
438387

0 commit comments

Comments
 (0)