Files
kandev/apps/web/components/task/file-browser-content-area.tsx
T
2026-09-12 16:26:35 +01:00

77 lines
2.4 KiB
TypeScript

"use client";
import { useTranslation } from "react-i18next";
import { renderSessionOrLoadState } from "./file-browser-load-state";
import {
FileTreeView,
SearchResultsList,
type FileBrowserContentAreaProps,
} from "./file-browser-parts";
import { WorkspaceUnavailable } from "./workspace-unavailable";
export function FileBrowserContentArea(props: FileBrowserContentAreaProps) {
const { t } = useTranslation();
const workspaceBlocked = Boolean(
props.workspaceRestoration && props.workspaceRestoration.status !== "ready",
);
if (workspaceBlocked) {
const notice = (
<WorkspaceUnavailable
restoration={props.workspaceRestoration}
onRetry={props.onRestoreWorkspace}
retryDisabled={props.restoreWorkspaceDisabled}
compact
/>
);
if (props.isSearchActive && props.searchResults !== null) {
return (
<div className="flex min-h-0 flex-col">
{notice}
<SearchResultsList
searchResults={props.searchResults}
fileStatuses={props.fileStatuses}
onOpenFile={props.onOpenFile}
showTouchActions={props.showTouchActions}
onAddToChatContext={props.onAddToChatContext}
/>
</div>
);
}
if (props.tree) {
return (
<div className="flex min-h-0 flex-col">
{notice}
<FileTreeView {...props} />
</div>
);
}
return notice;
}
if (props.isSearchActive && props.searchResults !== null) {
return (
<SearchResultsList
searchResults={props.searchResults}
fileStatuses={props.fileStatuses}
onOpenFile={props.onOpenFile}
showTouchActions={props.showTouchActions}
onAddToChatContext={props.onAddToChatContext}
/>
);
}
const loadStateResult = renderSessionOrLoadState({
isSessionFailed: props.isSessionFailed,
sessionError: props.sessionError,
loadState: props.loadState,
isLoadingTree: props.isLoadingTree,
tree: props.tree,
loadError: props.loadError,
onRetry: props.onRetry,
workspaceRestoration: props.workspaceRestoration,
onRestoreWorkspace: props.onRestoreWorkspace,
restoreWorkspaceDisabled: props.restoreWorkspaceDisabled,
});
if (loadStateResult) return loadStateResult;
if (props.tree) return <FileTreeView {...props} />;
return <div className="p-4 text-sm text-muted-foreground">{t("task:noFilesFound")}</div>;
}