Merge "Fix scrolling comments into view"
diff --git a/polygerrit-ui/app/elements/shared/gr-comment-thread/gr-comment-thread.ts b/polygerrit-ui/app/elements/shared/gr-comment-thread/gr-comment-thread.ts
index ee40ad5..151556c 100644
--- a/polygerrit-ui/app/elements/shared/gr-comment-thread/gr-comment-thread.ts
+++ b/polygerrit-ui/app/elements/shared/gr-comment-thread/gr-comment-thread.ts
@@ -72,6 +72,7 @@
import {notDeepEqual} from '../../../utils/deep-util';
import {resolve} from '../../../models/dependency';
import {commentsModelToken} from '../../../models/comments/comments-model';
+import {whenRendered} from '../../../utils/dom-util';
const NEWLINE_PATTERN = /\n/g;
@@ -626,8 +627,11 @@
override firstUpdated() {
if (this.shouldScrollIntoView) {
- this.commentBox?.focus();
- this.scrollIntoView();
+ whenRendered(this, () => {
+ this.expandCollapseComments(false);
+ this.commentBox?.focus();
+ this.scrollIntoView({block: 'center'});
+ });
}
}
diff --git a/polygerrit-ui/app/utils/dom-util.ts b/polygerrit-ui/app/utils/dom-util.ts
index b96ebe6..34f0bc1 100644
--- a/polygerrit-ui/app/utils/dom-util.ts
+++ b/polygerrit-ui/app/utils/dom-util.ts
@@ -490,3 +490,18 @@
}
return false;
}
+
+/** Executes the given callback when the element's height is > 0. */
+export function whenRendered(el: HTMLElement, callback: () => void) {
+ if (el.clientHeight > 0) {
+ callback();
+ return;
+ }
+ const obs = new ResizeObserver(() => {
+ if (el.clientHeight > 0) {
+ callback();
+ obs.unobserve(el);
+ }
+ });
+ obs.observe(el);
+}