Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@ import { msg } from "@lingui/core/macro";
import {
BeakerIcon,
BellIcon,
BookmarkIcon,
BuildingIcon,
ChartBarIcon,
CreditCardIcon,
FileTextIcon,
FolderIcon,
GitBranchIcon,
KeyboardIcon,
Expand Down Expand Up @@ -113,10 +113,11 @@ const TABS: SettingsTab[] = [
keywords: ["hotkeys", "shortcuts"],
},
{
id: "links",
title: msg({ message: "Links" }),
path: "/settings/links",
icon: BookmarkIcon,
id: "files",
title: msg({ message: "Files & Editor" }),
path: "/settings/files",
keywords: ["links", "files", "folders", "editor", "auto save"],
icon: FileTextIcon,
},
{
id: "permissions",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { Trans, useLingui } from "@lingui/react/macro";
import type { FileAutoSaveMode, FileOpenMode } from "@superset/local-db";
import { Label } from "@superset/ui/label";
import {
Select,
Expand Down Expand Up @@ -31,14 +30,6 @@ export function BehaviorSettings({ visibleItems }: BehaviorSettingsProps) {
SETTING_ITEM_ID.BEHAVIOR_CONFIRM_QUIT,
visibleItems,
);
const showFileOpenMode = isItemVisible(
SETTING_ITEM_ID.BEHAVIOR_FILE_OPEN_MODE,
visibleItems,
);
const showFileAutoSave = isItemVisible(
SETTING_ITEM_ID.BEHAVIOR_FILE_AUTO_SAVE,
visibleItems,
);
const showChangesOpenTarget = isItemVisible(
SETTING_ITEM_ID.BEHAVIOR_CHANGES_OPEN_TARGET,
visibleItems,
Expand All @@ -47,10 +38,6 @@ export function BehaviorSettings({ visibleItems }: BehaviorSettingsProps) {
SETTING_ITEM_ID.BEHAVIOR_RESOURCE_MONITOR,
visibleItems,
);
const showOpenLinksInApp = isItemVisible(
SETTING_ITEM_ID.BEHAVIOR_OPEN_LINKS_IN_APP,
visibleItems,
);
const showStarGithub = isItemVisible(
SETTING_ITEM_ID.BEHAVIOR_STAR_GITHUB,
visibleItems,
Expand Down Expand Up @@ -83,44 +70,6 @@ export function BehaviorSettings({ visibleItems }: BehaviorSettingsProps) {
setConfirmOnQuit.mutate({ enabled });
};

const { data: fileOpenMode, isLoading: isFileOpenModeLoading } =
electronTrpc.settings.getFileOpenMode.useQuery();
const setFileOpenMode = electronTrpc.settings.setFileOpenMode.useMutation({
onMutate: async ({ mode }) => {
await utils.settings.getFileOpenMode.cancel();
const previous = utils.settings.getFileOpenMode.getData();
utils.settings.getFileOpenMode.setData(undefined, mode);
return { previous };
},
onError: (_err, _vars, context) => {
if (context?.previous !== undefined) {
utils.settings.getFileOpenMode.setData(undefined, context.previous);
}
},
onSettled: () => {
utils.settings.getFileOpenMode.invalidate();
},
});

const { data: fileAutoSave, isLoading: isFileAutoSaveLoading } =
electronTrpc.settings.getFileAutoSave.useQuery();
const setFileAutoSave = electronTrpc.settings.setFileAutoSave.useMutation({
onMutate: async ({ mode }) => {
await utils.settings.getFileAutoSave.cancel();
const previous = utils.settings.getFileAutoSave.getData();
utils.settings.getFileAutoSave.setData(undefined, mode);
return { previous };
},
onError: (_err, _vars, context) => {
if (context?.previous !== undefined) {
utils.settings.getFileAutoSave.setData(undefined, context.previous);
}
},
onSettled: () => {
utils.settings.getFileAutoSave.invalidate();
},
});

const { data: resourceMonitorEnabled, isLoading: isResourceMonitorLoading } =
electronTrpc.settings.getShowResourceMonitor.useQuery();
const setShowResourceMonitor =
Expand All @@ -144,27 +93,6 @@ export function BehaviorSettings({ visibleItems }: BehaviorSettingsProps) {
},
});

const { data: openLinksInApp, isLoading: isOpenLinksInAppLoading } =
electronTrpc.settings.getOpenLinksInApp.useQuery();
const setOpenLinksInApp = electronTrpc.settings.setOpenLinksInApp.useMutation(
{
onMutate: async ({ enabled }) => {
await utils.settings.getOpenLinksInApp.cancel();
const previous = utils.settings.getOpenLinksInApp.getData();
utils.settings.getOpenLinksInApp.setData(undefined, enabled);
return { previous };
},
onError: (_err, _vars, context) => {
if (context?.previous !== undefined) {
utils.settings.getOpenLinksInApp.setData(undefined, context.previous);
}
},
onSettled: () => {
utils.settings.getOpenLinksInApp.invalidate();
},
},
);

return (
<div className="p-6 max-w-4xl w-full">
<div className="mb-8">
Expand Down Expand Up @@ -201,84 +129,6 @@ export function BehaviorSettings({ visibleItems }: BehaviorSettingsProps) {
</div>
)}

{showFileOpenMode && (
<div className="flex items-center justify-between">
<div className="space-y-0.5">
<Label htmlFor="file-open-mode" className="text-sm font-medium">
<HighlightText
text={t({
message: "File open mode",
})}
query={searchQuery}
/>
</Label>
<p className="text-xs text-muted-foreground">
<Trans>Choose how files open when no preview pane exists</Trans>
</p>
</div>
<Select
value={fileOpenMode ?? "split-pane"}
onValueChange={(value) =>
setFileOpenMode.mutate({ mode: value as FileOpenMode })
}
disabled={isFileOpenModeLoading || setFileOpenMode.isPending}
>
<SelectTrigger id="file-open-mode" className="w-[180px]">
<SelectValue />
</SelectTrigger>
<SelectContent>
<SelectItem value="split-pane">
<Trans>Split pane</Trans>
</SelectItem>
<SelectItem value="new-tab">
<Trans>New tab</Trans>
</SelectItem>
</SelectContent>
</Select>
</div>
)}

{showFileAutoSave && (
<div className="flex items-center justify-between">
<div className="space-y-0.5">
<Label htmlFor="file-auto-save" className="text-sm font-medium">
<HighlightText
text={t({ message: "Auto Save" })}
query={searchQuery}
/>
</Label>
<p className="text-xs text-muted-foreground">
<Trans>Controls when manually edited files are saved</Trans>
</p>
</div>
<Select
value={fileAutoSave ?? "off"}
onValueChange={(value) =>
setFileAutoSave.mutate({ mode: value as FileAutoSaveMode })
}
disabled={isFileAutoSaveLoading || setFileAutoSave.isPending}
>
<SelectTrigger id="file-auto-save" className="w-[180px]">
<SelectValue />
</SelectTrigger>
<SelectContent>
<SelectItem value="off">
<Trans>Off</Trans>
</SelectItem>
<SelectItem value="afterDelay">
<Trans>After delay (3s)</Trans>
</SelectItem>
<SelectItem value="onFocusChange">
<Trans>On focus change</Trans>
</SelectItem>
<SelectItem value="onWindowChange">
<Trans>On window change</Trans>
</SelectItem>
</SelectContent>
</Select>
</div>
)}

{showChangesOpenTarget && (
<div className="flex items-center justify-between">
<div className="space-y-0.5">
Expand Down Expand Up @@ -348,38 +198,6 @@ export function BehaviorSettings({ visibleItems }: BehaviorSettingsProps) {
</div>
)}

{showOpenLinksInApp && (
<div className="flex items-center justify-between">
<div className="space-y-0.5">
<Label
htmlFor="open-links-in-app"
className="text-sm font-medium"
>
<HighlightText
text={t({
message: "Open links in the in-app browser",
})}
query={searchQuery}
/>
</Label>
<p className="text-xs text-muted-foreground">
<Trans>
Open links from chat and terminal in the in-app browser
instead of your default browser
</Trans>
</p>
</div>
<Switch
id="open-links-in-app"
checked={openLinksInApp ?? false}
onCheckedChange={(enabled) =>
setOpenLinksInApp.mutate({ enabled })
}
disabled={isOpenLinksInAppLoading || setOpenLinksInApp.isPending}
/>
</div>
)}

{showStarGithub && <GithubStarRow searchQuery={searchQuery} />}
</div>
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { Trans, useLingui } from "@lingui/react/macro";
import { Button } from "@superset/ui/button";
import { Input } from "@superset/ui/input";
import { Label } from "@superset/ui/label";
import { Switch } from "@superset/ui/switch";
import { useEffect, useState } from "react";
import { TbDownload } from "react-icons/tb";
import { ImportHistoryDialog } from "renderer/components/ImportHistoryDialog";
Expand All @@ -14,6 +15,8 @@ import {
type SettingItemId,
} from "../../../utils/settings-search";

import { BrowserLinkSettings } from "./components/BrowserLinkSettings";

interface BrowserSettingsProps {
visibleItems?: SettingItemId[] | null;
}
Expand All @@ -23,6 +26,10 @@ export function BrowserSettings({ visibleItems }: BrowserSettingsProps) {
const searchQuery = useSettingsSearchQuery();
const [isImportOpen, setIsImportOpen] = useState(false);

const showOpenLinksInApp = isItemVisible(
SETTING_ITEM_ID.BEHAVIOR_OPEN_LINKS_IN_APP,
visibleItems,
);
const showHomepage = isItemVisible(
SETTING_ITEM_ID.BROWSER_HOMEPAGE,
visibleItems,
Expand All @@ -42,6 +49,27 @@ export function BrowserSettings({ visibleItems }: BrowserSettingsProps) {
},
});

const { data: openLinksInApp, isLoading: isOpenLinksInAppLoading } =
electronTrpc.settings.getOpenLinksInApp.useQuery();
const setOpenLinksInApp = electronTrpc.settings.setOpenLinksInApp.useMutation(
{
onMutate: async ({ enabled }) => {
await utils.settings.getOpenLinksInApp.cancel();
const previous = utils.settings.getOpenLinksInApp.getData();
utils.settings.getOpenLinksInApp.setData(undefined, enabled);
return { previous };
},
onError: (_err, _vars, context) => {
if (context?.previous !== undefined) {
utils.settings.getOpenLinksInApp.setData(undefined, context.previous);
}
},
onSettled: () => {
utils.settings.getOpenLinksInApp.invalidate();
},
},
);

// Local draft so the field stays editable while the query/mutation settle.
const [draft, setDraft] = useState("");
useEffect(() => {
Expand All @@ -66,6 +94,38 @@ export function BrowserSettings({ visibleItems }: BrowserSettingsProps) {
</div>

<div className="space-y-6">
{showOpenLinksInApp && (
<div className="flex items-center justify-between">
<div className="space-y-0.5">
<Label
htmlFor="open-links-in-app"
className="text-sm font-medium"
>
<HighlightText
text={t({
message: "Open links in the in-app browser",
})}
query={searchQuery}
/>
</Label>
<p className="text-xs text-muted-foreground">
<Trans>
Open links from chat and terminal in the in-app browser
instead of your default browser
</Trans>
</p>
</div>
<Switch
id="open-links-in-app"
checked={openLinksInApp ?? false}
onCheckedChange={(enabled) =>
setOpenLinksInApp.mutate({ enabled })
}
disabled={isOpenLinksInAppLoading || setOpenLinksInApp.isPending}
/>
</div>
)}

{showHomepage && (
<div className="flex items-center justify-between gap-4">
<div className="space-y-0.5">
Expand Down Expand Up @@ -128,6 +188,13 @@ export function BrowserSettings({ visibleItems }: BrowserSettingsProps) {
</Button>
</div>
)}
{[
SETTING_ITEM_ID.LINKS_URL,
SETTING_ITEM_ID.LINKS_PORT,
SETTING_ITEM_ID.LINKS_PAGE,
].some((id) => isItemVisible(id, visibleItems)) && (
<BrowserLinkSettings visibleItems={visibleItems} />
)}
</div>

<ImportHistoryDialog open={isImportOpen} onOpenChange={setIsImportOpen} />
Expand Down
Loading
Loading