diff --git a/apps/desktop/src/renderer/screens/main/components/WorkspaceSidebar/PortsList/components/MergedPortBadge/MergedPortBadge.tsx b/apps/desktop/src/renderer/screens/main/components/WorkspaceSidebar/PortsList/components/MergedPortBadge/MergedPortBadge.tsx index ca14cda322b..6162cd84ce6 100644 --- a/apps/desktop/src/renderer/screens/main/components/WorkspaceSidebar/PortsList/components/MergedPortBadge/MergedPortBadge.tsx +++ b/apps/desktop/src/renderer/screens/main/components/WorkspaceSidebar/PortsList/components/MergedPortBadge/MergedPortBadge.tsx @@ -81,7 +81,7 @@ export function MergedPortBadge({ port }: MergedPortBadgeProps) { type="button" onClick={handleClose} aria-label={`Close ${port.label || `port ${port.port}`}`} - className="opacity-0 group-hover:opacity-100 pr-1 transition-opacity text-muted-foreground hover:text-destructive focus-visible:opacity-100 focus-visible:outline-none" + className="opacity-0 group-hover:opacity-100 pr-1 transition-opacity text-muted-foreground hover:text-primary focus-visible:opacity-100 focus-visible:outline-none" > diff --git a/apps/desktop/src/renderer/screens/main/components/WorkspaceSidebar/PortsList/components/WorkspacePortGroup/WorkspacePortGroup.tsx b/apps/desktop/src/renderer/screens/main/components/WorkspaceSidebar/PortsList/components/WorkspacePortGroup/WorkspacePortGroup.tsx index 2079ff93e2b..e0ae493fc74 100644 --- a/apps/desktop/src/renderer/screens/main/components/WorkspaceSidebar/PortsList/components/WorkspacePortGroup/WorkspacePortGroup.tsx +++ b/apps/desktop/src/renderer/screens/main/components/WorkspaceSidebar/PortsList/components/WorkspacePortGroup/WorkspacePortGroup.tsx @@ -41,7 +41,7 @@ export function WorkspacePortGroup({ group }: WorkspacePortGroupProps) { 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 2453df26867..77175a3dfb2 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 @@ -187,6 +187,7 @@ export function DiffViewer({ const diffEditor = ( s.panes[paneId]?.fileViewer); + const { viewMode: diffViewMode, setViewMode: setDiffViewMode } = + useChangesStore(); const editorRef = useRef(null); const [isDirty, setIsDirty] = useState(false); @@ -117,6 +120,8 @@ export function FileViewerPane({ useEffect(() => { setIsDirty(false); originalContentRef.current = ""; + originalDiffContentRef.current = ""; + currentDiffContentRef.current = ""; draftContentRef.current = null; }, [filePath]); @@ -249,8 +254,6 @@ export function FileViewerPane({ const hasDraft = draftContentRef.current !== null; const isDiffEditable = (diffCategory === "staged" || diffCategory === "unstaged") && !hasDraft; - const showEditableBadge = - viewMode === "raw" || (viewMode === "diff" && isDiffEditable); return ( <> @@ -268,14 +271,14 @@ export function FileViewerPane({ ; initialLine?: number; initialColumn?: number; + diffViewMode: DiffViewMode; onSaveRaw: () => Promise; onSaveDiff?: (content: string) => Promise; onEditorChange: (value: string | undefined) => void; @@ -80,6 +82,7 @@ export function FileViewerContent({ draftContentRef, initialLine, initialColumn, + diffViewMode, onSaveRaw, onSaveDiff, onEditorChange, @@ -186,7 +189,7 @@ export function FileViewerContent({ modified: diffData.modified, language: diffData.language, }} - viewMode="inline" + viewMode={diffViewMode} 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 e278ebb3d07..e6868ec6239 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 @@ -1,9 +1,12 @@ -import { Badge } from "@superset/ui/badge"; import { ToggleGroup, ToggleGroupItem } from "@superset/ui/toggle-group"; import { Tooltip, TooltipContent, TooltipTrigger } from "@superset/ui/tooltip"; import { cn } from "@superset/ui/utils"; -import { HiMiniPencil } from "react-icons/hi2"; -import { TbPinFilled } from "react-icons/tb"; +import { + TbLayoutSidebarRightFilled, + TbListDetails, + TbPinFilled, +} from "react-icons/tb"; +import type { DiffViewMode } from "shared/changes-types"; import type { FileViewerMode } from "shared/tabs-types"; import { PaneToolbarActions } from "../../../components"; import type { SplitOrientation } from "../../../hooks"; @@ -11,15 +14,15 @@ import type { SplitOrientation } from "../../../hooks"; interface FileViewerToolbarProps { fileName: string; isDirty: boolean; - isSaving: boolean; viewMode: FileViewerMode; /** If false, this is a preview pane (italic name, can be replaced) */ isPinned: boolean; isMarkdown: boolean; hasDiff: boolean; - showEditableBadge: boolean; splitOrientation: SplitOrientation; + diffViewMode: DiffViewMode; onViewModeChange: (value: string) => void; + onDiffViewModeChange: (mode: DiffViewMode) => void; onSplitPane: (e: React.MouseEvent) => void; /** Pin this pane (convert from preview to permanent) */ onPin: () => void; @@ -29,14 +32,14 @@ interface FileViewerToolbarProps { export function FileViewerToolbar({ fileName, isDirty, - isSaving, viewMode, isPinned, isMarkdown, hasDiff, - showEditableBadge, splitOrientation, + diffViewMode, onViewModeChange, + onDiffViewModeChange, onSplitPane, onPin, onClosePane, @@ -65,12 +68,6 @@ export function FileViewerToolbar({ )} - {showEditableBadge && ( - - - {isSaving ? "Saving..." : "⌘S"} - - )} )} + {viewMode === "diff" && ( + + + + onDiffViewModeChange( + diffViewMode === "side-by-side" ? "inline" : "side-by-side", + ) + } + className="rounded p-0.5 text-muted-foreground/60 transition-colors hover:text-muted-foreground" + > + {diffViewMode === "side-by-side" ? ( + + ) : ( + + )} + + + + {diffViewMode === "side-by-side" + ? "Switch to inline diff" + : "Switch to side by side diff"} + + + )} { - if (diffData?.modified && !isDirty) { + if (diffData && !isDirty) { originalDiffContentRef.current = diffData.modified; } }, [diffData]); diff --git a/apps/desktop/src/renderer/screens/main/components/WorkspaceView/Sidebar/ChangesView/components/ChangesHeader/ChangesHeader.tsx b/apps/desktop/src/renderer/screens/main/components/WorkspaceView/Sidebar/ChangesView/components/ChangesHeader/ChangesHeader.tsx index 8eca56bb855..8a26ba3f763 100644 --- a/apps/desktop/src/renderer/screens/main/components/WorkspaceView/Sidebar/ChangesView/components/ChangesHeader/ChangesHeader.tsx +++ b/apps/desktop/src/renderer/screens/main/components/WorkspaceView/Sidebar/ChangesView/components/ChangesHeader/ChangesHeader.tsx @@ -16,12 +16,13 @@ import { import { Tooltip, TooltipContent, TooltipTrigger } from "@superset/ui/tooltip"; import { useEffect, useRef, useState } from "react"; import { HiArrowPath } from "react-icons/hi2"; -import { LuLoaderCircle } from "react-icons/lu"; +import { LuExpand, LuLoaderCircle, LuX } from "react-icons/lu"; import { VscGitStash, VscGitStashApply } from "react-icons/vsc"; import { electronTrpc } from "renderer/lib/electron-trpc"; import { PRIcon } from "renderer/screens/main/components/PRIcon"; import { usePRStatus } from "renderer/screens/main/hooks"; import { useChangesStore } from "renderer/stores/changes"; +import { useSidebarStore } from "renderer/stores/sidebar-state"; import type { ChangesViewMode } from "../../types"; import { ViewModeToggle } from "../ViewModeToggle"; @@ -231,6 +232,8 @@ export function ChangesHeader({ onStashPop, isStashPending, }: ChangesHeaderProps) { + const { toggleSidebar } = useSidebarStore(); + return ( @@ -238,6 +241,32 @@ export function ChangesHeader({ Base: + + + + + + + + + Expand sidebar + + + + + + + + + + Close sidebar + +