Skip to content

Commit d4fa658

Browse files
authored
Avoid showing placeholders for the same element multiple times (#365)
Even without the hideTrackingElement code path, there are some situations that can lead to duplicate placeholders from being shown for an element. Let's explicitly prevent that from happening.
1 parent ad5783e commit d4fa658

File tree

1 file changed

+9
-0
lines changed

1 file changed

+9
-0
lines changed

src/features/click-to-load.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ let sharedStrings = null
2121
const entities = []
2222
const entityData = {}
2323

24+
// Used to avoid displaying placeholders for the same tracking element twice.
25+
const knownTrackingElements = new WeakSet()
26+
2427
let readyResolver
2528
const ready = new Promise(resolve => { readyResolver = resolve })
2629

@@ -509,6 +512,12 @@ async function replaceClickToLoadElements (targetElement) {
509512
}
510513

511514
await Promise.all(trackingElements.map(trackingElement => {
515+
if (knownTrackingElements.has(trackingElement)) {
516+
return Promise.resolve()
517+
}
518+
519+
knownTrackingElements.add(trackingElement)
520+
512521
const widget = new DuckWidget(widgetData, trackingElement, entity)
513522
return createPlaceholderElementAndReplace(widget, trackingElement)
514523
}))

0 commit comments

Comments
 (0)