Skip to content

Commit e2dc694

Browse files
committed
Files Changed Overview- Separated Inline styling to css
1 parent 49ae8e1 commit e2dc694

File tree

2 files changed

+66
-10
lines changed

2 files changed

+66
-10
lines changed
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
/* Files Changed Overview CSS Module */
2+
3+
.header {
4+
/* Dynamic border bottom controlled via CSS custom property */
5+
border-bottom: var(--header-border-bottom, none);
6+
}
7+
8+
.content {
9+
/* Dynamic opacity controlled via CSS custom property */
10+
opacity: var(--content-opacity, 1);
11+
max-height: 300px;
12+
overflow-y: auto;
13+
transition: opacity 200ms ease-in-out;
14+
position: relative;
15+
padding-top: 0.5rem;
16+
}
17+
18+
.virtualizationContainer {
19+
/* Dynamic height controlled via CSS custom property */
20+
height: var(--virtualization-height, auto);
21+
position: relative;
22+
}
23+
24+
.virtualizationOffset {
25+
/* Dynamic transform controlled via CSS custom property */
26+
transform: var(--virtualization-transform, translateY(0));
27+
}

webview-ui/src/components/file-changes/FilesChangedOverview.tsx

Lines changed: 39 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { useExtensionState } from "@/context/ExtensionStateContext"
55
import { vscode } from "@/utils/vscode"
66
import { useDebouncedAction } from "@/hooks/useDebouncedAction"
77
import { EXPERIMENT_IDS } from "../../../../src/shared/experiments"
8+
import styles from "./FilesChangedOverview.module.css"
89

910
// Helper functions for file path display
1011
const getFileName = (uri: string): string => {
@@ -35,6 +36,12 @@ const FilesChangedOverview: React.FC = () => {
3536
const [changeset, setChangeset] = React.useState<FileChangeset | null>(null)
3637
const [isInitialized, setIsInitialized] = React.useState(false)
3738

39+
// Refs for dynamic CSS custom properties
40+
const headerRef = React.useRef<HTMLDivElement>(null)
41+
const contentRef = React.useRef<HTMLDivElement>(null)
42+
const virtualizationContainerRef = React.useRef<HTMLDivElement>(null)
43+
const virtualizationOffsetRef = React.useRef<HTMLDivElement>(null)
44+
3845
const files = React.useMemo<FileChange[]>(() => changeset?.files ?? [], [changeset?.files])
3946
const [isCollapsed, setIsCollapsed] = React.useState(true)
4047

@@ -63,6 +70,32 @@ const FilesChangedOverview: React.FC = () => {
6370

6471
const { items: visibleItems, totalHeight, offsetY } = virtualizationState
6572

73+
// Update CSS custom properties for dynamic styling
74+
React.useEffect(() => {
75+
if (headerRef.current) {
76+
const borderValue = isCollapsed ? "none" : "1px solid var(--vscode-panel-border)"
77+
headerRef.current.style.setProperty("--header-border-bottom", borderValue)
78+
}
79+
}, [isCollapsed])
80+
81+
React.useEffect(() => {
82+
if (contentRef.current) {
83+
contentRef.current.style.setProperty("--content-opacity", isCollapsed ? "0" : "1")
84+
}
85+
}, [isCollapsed])
86+
87+
React.useEffect(() => {
88+
if (virtualizationContainerRef.current && shouldVirtualize) {
89+
virtualizationContainerRef.current.style.setProperty("--virtualization-height", `${totalHeight}px`)
90+
}
91+
}, [totalHeight, shouldVirtualize])
92+
93+
React.useEffect(() => {
94+
if (virtualizationOffsetRef.current && shouldVirtualize) {
95+
virtualizationOffsetRef.current.style.setProperty("--virtualization-transform", `translateY(${offsetY}px)`)
96+
}
97+
}, [offsetY, shouldVirtualize])
98+
6699
// Debounced click handling for double-click prevention
67100
const { isProcessing, handleWithDebounce } = useDebouncedAction(300)
68101

@@ -230,10 +263,8 @@ const FilesChangedOverview: React.FC = () => {
230263
data-testid="files-changed-overview">
231264
{/* Collapsible header */}
232265
<div
233-
className="flex justify-between items-center mt-0 cursor-pointer select-none"
234-
style={{
235-
borderBottom: isCollapsed ? "none" : "1px solid var(--vscode-panel-border)",
236-
}}
266+
ref={headerRef}
267+
className={`flex justify-between items-center mt-0 cursor-pointer select-none ${styles.header}`}
237268
onClick={() => setIsCollapsed(!isCollapsed)}
238269
onKeyDown={(e) => {
239270
if (e.key === "Enter" || e.key === " ") {
@@ -300,16 +331,14 @@ const FilesChangedOverview: React.FC = () => {
300331
{/* Collapsible content area */}
301332
{!isCollapsed && (
302333
<div
303-
className="max-h-[300px] overflow-y-auto transition-opacity duration-200 ease-in-out relative pt-2"
304-
style={{
305-
opacity: isCollapsed ? 0 : 1,
306-
}}
334+
ref={contentRef}
335+
className={styles.content}
307336
onScroll={handleScroll}
308337
role="region"
309338
aria-label={t("file-changes:header.files_changed", { defaultValue: "Files changed" })}>
310339
{shouldVirtualize && (
311-
<div style={{ height: totalHeight, position: "relative" }}>
312-
<div style={{ transform: `translateY(${offsetY}px)` }}>
340+
<div ref={virtualizationContainerRef} className={styles.virtualizationContainer}>
341+
<div ref={virtualizationOffsetRef} className={styles.virtualizationOffset}>
313342
{visibleItems.map((file) => (
314343
<FileItem
315344
key={file.uri}

0 commit comments

Comments
 (0)