diff --git a/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/ChangesContent/components/DiffViewer/DiffViewer.tsx b/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/ChangesContent/components/DiffViewer/DiffViewer.tsx
index 77175a3dfb2..bd191dd5a5f 100644
--- a/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/ChangesContent/components/DiffViewer/DiffViewer.tsx
+++ b/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/ChangesContent/components/DiffViewer/DiffViewer.tsx
@@ -48,6 +48,7 @@ export interface DiffViewerContextMenuProps {
interface DiffViewerProps {
contents: FileContents;
viewMode: DiffViewMode;
+ hideUnchangedRegions?: boolean;
filePath: string;
editable?: boolean;
onSave?: (content: string) => void;
@@ -59,6 +60,7 @@ interface DiffViewerProps {
export function DiffViewer({
contents,
viewMode,
+ hideUnchangedRegions = false,
filePath,
editable = false,
onSave,
@@ -187,7 +189,7 @@ export function DiffViewer({
const diffEditor = (
);
diff --git a/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/TabView/FileViewerPane/FileViewerPane.tsx b/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/TabView/FileViewerPane/FileViewerPane.tsx
index cf17304c941..3c2e5cea3cc 100644
--- a/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/TabView/FileViewerPane/FileViewerPane.tsx
+++ b/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/TabView/FileViewerPane/FileViewerPane.tsx
@@ -58,8 +58,12 @@ export function FileViewerPane({
}: FileViewerPaneProps) {
// Use granular selector to only get this pane's fileViewer data
const fileViewer = useTabsStore((s) => s.panes[paneId]?.fileViewer);
- const { viewMode: diffViewMode, setViewMode: setDiffViewMode } =
- useChangesStore();
+ const {
+ viewMode: diffViewMode,
+ setViewMode: setDiffViewMode,
+ hideUnchangedRegions,
+ toggleHideUnchangedRegions,
+ } = useChangesStore();
const editorRef = useRef(null);
const [isDirty, setIsDirty] = useState(false);
@@ -277,8 +281,10 @@ export function FileViewerPane({
hasDiff={hasDiff}
splitOrientation={handlers.splitOrientation}
diffViewMode={diffViewMode}
+ hideUnchangedRegions={hideUnchangedRegions}
onViewModeChange={handleViewModeChange}
onDiffViewModeChange={setDiffViewMode}
+ onToggleHideUnchangedRegions={toggleHideUnchangedRegions}
onSplitPane={handlers.onSplitPane}
onPin={handlePin}
onClosePane={handlers.onClosePane}
@@ -300,6 +306,7 @@ export function FileViewerPane({
initialLine={initialLine}
initialColumn={initialColumn}
diffViewMode={diffViewMode}
+ hideUnchangedRegions={hideUnchangedRegions}
onSaveRaw={handleSaveRaw}
onSaveDiff={isDiffEditable ? handleSaveDiff : undefined}
onEditorChange={handleEditorChange}
diff --git a/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/TabView/FileViewerPane/components/FileViewerContent/FileViewerContent.tsx b/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/TabView/FileViewerPane/components/FileViewerContent/FileViewerContent.tsx
index 1875db7f057..cdbde9c17a6 100644
--- a/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/TabView/FileViewerPane/components/FileViewerContent/FileViewerContent.tsx
+++ b/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/TabView/FileViewerPane/components/FileViewerContent/FileViewerContent.tsx
@@ -54,6 +54,7 @@ interface FileViewerContentProps {
initialLine?: number;
initialColumn?: number;
diffViewMode: DiffViewMode;
+ hideUnchangedRegions: boolean;
onSaveRaw: () => Promise;
onSaveDiff?: (content: string) => Promise;
onEditorChange: (value: string | undefined) => void;
@@ -83,6 +84,7 @@ export function FileViewerContent({
initialLine,
initialColumn,
diffViewMode,
+ hideUnchangedRegions,
onSaveRaw,
onSaveDiff,
onEditorChange,
@@ -190,6 +192,7 @@ export function FileViewerContent({
language: diffData.language,
}}
viewMode={diffViewMode}
+ hideUnchangedRegions={hideUnchangedRegions}
filePath={filePath}
editable={isDiffEditable}
onSave={isDiffEditable ? onSaveDiff : undefined}
diff --git a/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/TabView/FileViewerPane/components/FileViewerToolbar/FileViewerToolbar.tsx b/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/TabView/FileViewerPane/components/FileViewerToolbar/FileViewerToolbar.tsx
index e6868ec6239..d62851994d7 100644
--- a/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/TabView/FileViewerPane/components/FileViewerToolbar/FileViewerToolbar.tsx
+++ b/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/TabView/FileViewerPane/components/FileViewerToolbar/FileViewerToolbar.tsx
@@ -2,6 +2,7 @@ import { ToggleGroup, ToggleGroupItem } from "@superset/ui/toggle-group";
import { Tooltip, TooltipContent, TooltipTrigger } from "@superset/ui/tooltip";
import { cn } from "@superset/ui/utils";
import {
+ TbFold,
TbLayoutSidebarRightFilled,
TbListDetails,
TbPinFilled,
@@ -21,8 +22,10 @@ interface FileViewerToolbarProps {
hasDiff: boolean;
splitOrientation: SplitOrientation;
diffViewMode: DiffViewMode;
+ hideUnchangedRegions: boolean;
onViewModeChange: (value: string) => void;
onDiffViewModeChange: (mode: DiffViewMode) => void;
+ onToggleHideUnchangedRegions: () => void;
onSplitPane: (e: React.MouseEvent) => void;
/** Pin this pane (convert from preview to permanent) */
onPin: () => void;
@@ -38,8 +41,10 @@ export function FileViewerToolbar({
hasDiff,
splitOrientation,
diffViewMode,
+ hideUnchangedRegions,
onViewModeChange,
onDiffViewModeChange,
+ onToggleHideUnchangedRegions,
onSplitPane,
onPin,
onClosePane,
@@ -75,50 +80,81 @@ export function FileViewerToolbar({
value={viewMode}
onValueChange={onViewModeChange}
size="sm"
- className="h-5"
+ className="h-5 bg-muted/50 rounded-md"
>
{isMarkdown && (
Rendered
)}
-
+
Raw
{hasDiff && (
-
+
Diff
)}
{viewMode === "diff" && (
-
-
-
-
-
- {diffViewMode === "side-by-side"
- ? "Switch to inline diff"
- : "Switch to side by side diff"}
-
-
+ <>
+
+
+
+
+
+ {diffViewMode === "side-by-side"
+ ? "Switch to inline diff"
+ : "Switch to side by side diff"}
+
+
+
+
+
+
+
+ {hideUnchangedRegions
+ ? "Show all lines"
+ : "Hide unchanged regions"}
+
+
+ >
)}
;
baseBranch: string | null;
showRenderedMarkdown: Record;
+ hideUnchangedRegions: boolean;
selectFile: (
worktreePath: string,
@@ -36,6 +37,7 @@ interface ChangesState {
setBaseBranch: (branch: string | null) => void;
toggleRenderedMarkdown: (worktreePath: string) => void;
getShowRenderedMarkdown: (worktreePath: string) => boolean;
+ toggleHideUnchangedRegions: () => void;
reset: (worktreePath: string) => void;
}
@@ -51,6 +53,7 @@ const initialState = {
},
baseBranch: null,
showRenderedMarkdown: {} as Record,
+ hideUnchangedRegions: false,
};
export const useChangesStore = create()(
@@ -125,6 +128,10 @@ export const useChangesStore = create()(
return get().showRenderedMarkdown[worktreePath] ?? false;
},
+ toggleHideUnchangedRegions: () => {
+ set({ hideUnchangedRegions: !get().hideUnchangedRegions });
+ },
+
reset: (worktreePath) => {
const { selectedFiles } = get();
set({
@@ -144,6 +151,7 @@ export const useChangesStore = create()(
expandedSections: state.expandedSections,
baseBranch: state.baseBranch,
showRenderedMarkdown: state.showRenderedMarkdown,
+ hideUnchangedRegions: state.hideUnchangedRegions,
}),
},
),
diff --git a/bun.lock b/bun.lock
index 0396673968d..f3cfa340843 100644
--- a/bun.lock
+++ b/bun.lock
@@ -122,7 +122,7 @@
},
"apps/desktop": {
"name": "@superset/desktop",
- "version": "0.0.57",
+ "version": "0.0.58",
"dependencies": {
"@dnd-kit/core": "^6.3.1",
"@dnd-kit/sortable": "^10.0.0",