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",