Skip to content

Commit

Permalink
Merge pull request #18829 from Snuffleupagus/PDFLayerViewer-update-UI
Browse files Browse the repository at this point in the history
Re-factor how `PDFLayerViewer` decides if the UI needs to updated on "optionalcontentconfigchanged" events
  • Loading branch information
Snuffleupagus authored Oct 1, 2024
2 parents 783facb + 655ef12 commit 35a9a6a
Showing 1 changed file with 28 additions and 11 deletions.
39 changes: 28 additions & 11 deletions web/pdf_layer_viewer.js
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,9 @@ class PDFLayerViewer extends BaseTreeViewer {
reset() {
super.reset();
this._optionalContentConfig = null;
this._optionalContentHash = null;

this._optionalContentVisibility?.clear();
this._optionalContentVisibility = null;
}

/**
Expand All @@ -68,8 +70,13 @@ class PDFLayerViewer extends BaseTreeViewer {
*/
_bindLink(element, { groupId, input }) {
const setVisibility = () => {
this._optionalContentConfig.setVisibility(groupId, input.checked);
this._optionalContentHash = this._optionalContentConfig.getHash();
const visible = input.checked;
this._optionalContentConfig.setVisibility(groupId, visible);

const cached = this._optionalContentVisibility.get(groupId);
if (cached) {
cached.visible = visible;
}

this.eventBus.dispatch("optionalcontentconfig", {
source: this,
Expand Down Expand Up @@ -137,7 +144,7 @@ class PDFLayerViewer extends BaseTreeViewer {
this._dispatchEvent(/* layersCount = */ 0);
return;
}
this._optionalContentHash = optionalContentConfig.getHash();
this._optionalContentVisibility = new Map();

const fragment = document.createDocumentFragment(),
queue = [{ parent: fragment, groups }];
Expand Down Expand Up @@ -170,6 +177,11 @@ class PDFLayerViewer extends BaseTreeViewer {
input.type = "checkbox";
input.checked = group.visible;

this._optionalContentVisibility.set(groupId, {
input,
visible: input.checked,
});

const label = document.createElement("label");
label.textContent = this._normalizeTextContent(group.name);

Expand Down Expand Up @@ -197,15 +209,20 @@ class PDFLayerViewer extends BaseTreeViewer {
return; // The document was closed while the optional content resolved.
}
if (promise) {
if (optionalContentConfig.getHash() === this._optionalContentHash) {
return; // The optional content didn't change, hence no need to reset the UI.
// Ensure that the UI displays the correct state (e.g. with RBGroups).
for (const [groupId, cached] of this._optionalContentVisibility) {
const group = optionalContentConfig.getGroup(groupId);

if (group && cached.visible !== group.visible) {
cached.input.checked = cached.visible = !cached.visible;
}
}
} else {
this.eventBus.dispatch("optionalcontentconfig", {
source: this,
promise: Promise.resolve(optionalContentConfig),
});
return;
}
this.eventBus.dispatch("optionalcontentconfig", {
source: this,
promise: Promise.resolve(optionalContentConfig),
});

// Reset the sidebarView to the new state.
this.render({
Expand Down

0 comments on commit 35a9a6a

Please sign in to comment.