Skip to content

Commit f19b455

Browse files
committed
refactor(desktop): match tooltip styling, surface configured editor name
- Tooltip now uses the same bg-foreground/text-background/rounded-md/px-3/py-1.5/text-xs tokens as the project's TooltipContent, so it visually matches the rest of the app (was a custom border/popover style before). - Shift-modifier tooltip text now says "Open in Cursor" / "Open in VS Code" / etc. based on the user's configured defaultEditor setting, resolved via electronTrpcClient.settings.getDefaultEditor + getAppOption display label. Falls back to "Open externally" if no editor is configured.
1 parent 6d88f92 commit f19b455

File tree

1 file changed

+37
-6
lines changed
  • apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/$workspaceId/hooks/usePaneRegistry/components/TerminalPane/components/LinkHoverTooltip

1 file changed

+37
-6
lines changed

apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/$workspaceId/hooks/usePaneRegistry/components/TerminalPane/components/LinkHoverTooltip/LinkHoverTooltip.tsx

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
1+
import type { ExternalApp } from "@superset/local-db";
12
import { useCallback, useEffect, useState } from "react";
23
import { createPortal } from "react-dom";
4+
import { getAppOption } from "renderer/components/OpenInExternalDropdown/constants";
35
import type { LinkHoverInfo } from "renderer/lib/terminal/terminal-runtime-registry";
6+
import { electronTrpcClient } from "renderer/lib/trpc-client";
47

58
interface HoveredLink {
69
clientX: number;
@@ -14,24 +17,52 @@ interface LinkHoverTooltipProps {
1417
hoveredLink: HoveredLink | null;
1518
}
1619

17-
function getLabel(info: LinkHoverInfo, shift: boolean): string {
20+
function getAppLabel(app: ExternalApp): string {
21+
const option = getAppOption(app);
22+
return option?.displayLabel ?? option?.label ?? "external editor";
23+
}
24+
25+
function getLabel(
26+
info: LinkHoverInfo,
27+
shift: boolean,
28+
defaultEditor: ExternalApp | null,
29+
): string {
1830
if (info.kind === "url") {
1931
return shift ? "Open in external browser" : "Open in browser";
2032
}
21-
if (info.isDirectory) {
22-
return shift ? "Open externally" : "Reveal in sidebar";
33+
if (shift) {
34+
return defaultEditor
35+
? `Open in ${getAppLabel(defaultEditor)}`
36+
: "Open externally";
2337
}
24-
return shift ? "Open externally" : "Open in editor";
38+
return info.isDirectory ? "Reveal in sidebar" : "Open in editor";
2539
}
2640

2741
export function LinkHoverTooltip({ hoveredLink }: LinkHoverTooltipProps) {
42+
const [defaultEditor, setDefaultEditor] = useState<ExternalApp | null>(null);
43+
44+
useEffect(() => {
45+
let cancelled = false;
46+
electronTrpcClient.settings.getDefaultEditor
47+
.query()
48+
.then((editor) => {
49+
if (!cancelled) setDefaultEditor(editor);
50+
})
51+
.catch(() => {
52+
if (!cancelled) setDefaultEditor(null);
53+
});
54+
return () => {
55+
cancelled = true;
56+
};
57+
}, []);
58+
2859
if (!hoveredLink || !hoveredLink.modifier) return null;
2960

30-
const label = getLabel(hoveredLink.info, hoveredLink.shift);
61+
const label = getLabel(hoveredLink.info, hoveredLink.shift, defaultEditor);
3162

3263
return createPortal(
3364
<div
34-
className="pointer-events-none fixed z-50 rounded-md border border-border bg-popover px-2 py-1 text-xs text-popover-foreground shadow-md"
65+
className="pointer-events-none fixed z-50 w-fit rounded-md bg-foreground px-3 py-1.5 text-xs text-background"
3566
style={{
3667
left: hoveredLink.clientX + 14,
3768
top: hoveredLink.clientY + 14,

0 commit comments

Comments
 (0)