Skip to content

Commit e46ca29

Browse files
jason-rlclaude
andcommitted
feat: use smart default download path in TUI screens
Update both object list and detail TUI screens to use getDefaultDownloadPath, which infers file extensions from the object's content_type when pre-filling the download path. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent dcc36f0 commit e46ca29

2 files changed

Lines changed: 23 additions & 6 deletions

File tree

src/commands/object/list.tsx

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import { useListSearch } from "../../hooks/useListSearch.js";
2424
import { useNavigation } from "../../store/navigationStore.js";
2525
import { formatFileSize } from "../../services/objectService.js";
2626
import { ConfirmationPrompt } from "../../components/ConfirmationPrompt.js";
27+
import { getDefaultDownloadPath } from "../../utils/downloadPath.js";
2728

2829
interface ListOptions {
2930
name?: string;
@@ -471,8 +472,13 @@ const ListObjectsUI = ({
471472
} else if (operationKey === "download") {
472473
// Show download prompt
473474
setSelectedObject(selectedObjectItem);
474-
const defaultName = selectedObjectItem.name || selectedObjectItem.id;
475-
setDownloadPath(`./${defaultName}`);
475+
setDownloadPath(
476+
getDefaultDownloadPath(
477+
selectedObjectItem.name,
478+
selectedObjectItem.id,
479+
selectedObjectItem.content_type,
480+
),
481+
);
476482
setShowDownloadPrompt(true);
477483
} else if (operationKey === "delete") {
478484
// Show delete confirmation
@@ -497,8 +503,13 @@ const ListObjectsUI = ({
497503
// Download hotkey - show prompt
498504
setShowPopup(false);
499505
setSelectedObject(selectedObjectItem);
500-
const defaultName = selectedObjectItem.name || selectedObjectItem.id;
501-
setDownloadPath(`./${defaultName}`);
506+
setDownloadPath(
507+
getDefaultDownloadPath(
508+
selectedObjectItem.name,
509+
selectedObjectItem.id,
510+
selectedObjectItem.content_type,
511+
),
512+
);
502513
setShowDownloadPrompt(true);
503514
} else if (input === "d") {
504515
// Delete hotkey - show confirmation

src/screens/ObjectDetailScreen.tsx

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import { Breadcrumb } from "../components/Breadcrumb.js";
3232
import { Header } from "../components/Header.js";
3333
import { ConfirmationPrompt } from "../components/ConfirmationPrompt.js";
3434
import { colors } from "../utils/theme.js";
35+
import { getDefaultDownloadPath } from "../utils/downloadPath.js";
3536

3637
interface ObjectDetailScreenProps {
3738
objectId?: string;
@@ -249,8 +250,13 @@ export function ObjectDetailScreen({ objectId }: ObjectDetailScreenProps) {
249250
switch (operation) {
250251
case "download":
251252
// Show download prompt
252-
const defaultName = resource.name || resource.id;
253-
setDownloadPath(`./${defaultName}`);
253+
setDownloadPath(
254+
getDefaultDownloadPath(
255+
resource.name,
256+
resource.id,
257+
resource.content_type,
258+
),
259+
);
254260
setShowDownloadPrompt(true);
255261
break;
256262
case "delete":

0 commit comments

Comments
 (0)