Skip to content

Commit ed66738

Browse files
Add sticky positioning support for commit messages in details panel
1 parent 61334af commit ed66738

File tree

2 files changed

+41
-1
lines changed

2 files changed

+41
-1
lines changed

src/webviews/apps/plus/composer/components/details-panel.ts

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,11 @@ export class DetailsPanel extends LitElement {
5656
display: flex;
5757
flex-direction: column;
5858
gap: 3.2rem;
59+
--commit-message-sticky-top: 0;
60+
}
61+
62+
.change-details gl-commit-message {
63+
--sticky-top: var(--commit-message-sticky-top);
5964
}
6065
6166
.change-details {
@@ -257,10 +262,14 @@ export class DetailsPanel extends LitElement {
257262
private draggedHunkIds: string[] = [];
258263
private autoScrollInterval?: number;
259264
private dragOverCleanupTimeout?: number;
265+
private commitMessageResizeObserver?: ResizeObserver;
260266

261267
@query('.details-panel')
262268
private detailsPanel!: HTMLDivElement;
263269

270+
@query('.changes-list')
271+
private changesList?: HTMLDivElement;
272+
264273
override updated(changedProperties: Map<string | number | symbol, unknown>) {
265274
super.updated(changedProperties);
266275

@@ -274,6 +283,33 @@ export class DetailsPanel extends LitElement {
274283
this.initializeHunksSortable();
275284
this.setupAutoScroll();
276285
}
286+
287+
if (changedProperties.has('selectedCommits')) {
288+
this.updateCommitMessageStickyOffset();
289+
}
290+
}
291+
292+
private updateCommitMessageStickyOffset() {
293+
if (!this.commitMessageResizeObserver) {
294+
this.commitMessageResizeObserver = new ResizeObserver(() => {
295+
const commitMessage = this.shadowRoot?.querySelector('gl-commit-message');
296+
if (commitMessage && this.changesList) {
297+
const height = commitMessage.getBoundingClientRect().height;
298+
this.changesList.style.setProperty('--file-header-sticky-top', `${height}px`);
299+
}
300+
});
301+
}
302+
303+
this.commitMessageResizeObserver.disconnect();
304+
305+
const commitMessage = this.shadowRoot?.querySelector('gl-commit-message');
306+
if (commitMessage) {
307+
this.commitMessageResizeObserver.observe(commitMessage);
308+
if (this.changesList) {
309+
const height = commitMessage.getBoundingClientRect().height;
310+
this.changesList.style.setProperty('--file-header-sticky-top', `${height}px`);
311+
}
312+
}
277313
}
278314

279315
override disconnectedCallback() {
@@ -284,6 +320,10 @@ export class DetailsPanel extends LitElement {
284320
clearTimeout(this.dragOverCleanupTimeout);
285321
this.dragOverCleanupTimeout = undefined;
286322
}
323+
if (this.commitMessageResizeObserver) {
324+
this.commitMessageResizeObserver.disconnect();
325+
this.commitMessageResizeObserver = undefined;
326+
}
287327
}
288328

289329
private destroyHunksSortables() {

src/webviews/apps/plus/composer/components/diff/diff.css.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ export const diff2htmlStyles = css`
136136
}
137137
.d2h-file-header.d2h-sticky-header {
138138
position: sticky;
139-
top: 0;
139+
top: var(--file-header-sticky-top, 0);
140140
z-index: 1;
141141
}
142142
.d2h-file-stats {

0 commit comments

Comments
 (0)