diff --git a/frontend/editor/public/locales/en-US/translation.toml b/frontend/editor/public/locales/en-US/translation.toml index 882fde45b8..a8585debd3 100644 --- a/frontend/editor/public/locales/en-US/translation.toml +++ b/frontend/editor/public/locales/en-US/translation.toml @@ -4419,10 +4419,6 @@ offlineHint = "Reconnect to load your cloud library." offlineTitle = "No cached cloud files" title = "No cloud files yet" -[filesPage.empty.local] -hint = "Files saved without uploading stay here. Drop a file to add one." -title = "No local-only files" - [filesPage.empty.noResults] hint = "No files in this folder match your filter. Try a different term or clear the filter." title = "No matching files" diff --git a/frontend/editor/src/core/components/filesPage/FileGrid.tsx b/frontend/editor/src/core/components/filesPage/FileGrid.tsx index 28eb6bbc0d..eb1bb5df3e 100644 --- a/frontend/editor/src/core/components/filesPage/FileGrid.tsx +++ b/frontend/editor/src/core/components/filesPage/FileGrid.tsx @@ -153,7 +153,7 @@ interface FileGridProps { sortMode?: FilesPageSortMode; onChangeSortMode?: (mode: FilesPageSortMode) => void; /** Drives the empty-state copy. */ - currentTab?: "all" | "local" | "cloud" | "recent" | "shared" | "sharedByMe"; + currentTab?: "all" | "cloud" | "recent" | "shared" | "sharedByMe"; /** A filter is applied; an empty result then means "no matches", not "no files". */ searchActive?: boolean; /** Cloud reachability; switches the cloud empty-state copy. */ @@ -384,7 +384,7 @@ function SkeletonGrid({ viewMode }: { viewMode: FilesPageViewMode }) { interface EmptyStateProps { /** Drives copy + iconography. */ - tab?: "all" | "local" | "cloud" | "recent" | "shared" | "sharedByMe"; + tab?: "all" | "cloud" | "recent" | "shared" | "sharedByMe"; /** When true the empty list is the result of a filter, not a bare folder. */ searchActive?: boolean; /** Switches the cloud empty-state copy. */ @@ -429,14 +429,6 @@ function EmptyState({ const { titleKey, titleFallback, hintKey, hintFallback } = (() => { switch (tab) { - case "local": - return { - titleKey: "filesPage.empty.local.title", - titleFallback: "No local-only files", - hintKey: "filesPage.empty.local.hint", - hintFallback: - "Files saved without uploading stay here. Drop a file to add one.", - }; case "cloud": return serverReachable ? { @@ -489,8 +481,7 @@ function EmptyState({ const readOnlyTab = tab === "recent" || tab === "shared" || tab === "sharedByMe"; const showUpload = Boolean(onUpload) && !readOnlyTab; - const showCreateFolder = - Boolean(onCreateFolder) && !readOnlyTab && tab !== "local"; + const showCreateFolder = Boolean(onCreateFolder) && !readOnlyTab; const showCtas = showUpload || showCreateFolder; return (
diff --git a/frontend/editor/src/core/components/filesPage/FileManagerView.tsx b/frontend/editor/src/core/components/filesPage/FileManagerView.tsx index a8dce9a804..f7afd07dfb 100644 --- a/frontend/editor/src/core/components/filesPage/FileManagerView.tsx +++ b/frontend/editor/src/core/components/filesPage/FileManagerView.tsx @@ -290,7 +290,6 @@ export default function FileManagerView() { const visibleFolders = useMemo(() => { // Folders only appear in cloud-rooted tabs. if ( - currentTab === "local" || currentTab === "recent" || currentTab === "shared" || currentTab === "sharedByMe" @@ -321,12 +320,6 @@ export default function FileManagerView() { const filesInCurrentFolder = useMemo(() => { // Tab overrides folder navigation for Local/Recent/Shared. switch (currentTab) { - case "local": - // Both halves: a local file inside a browser folder belongs to that folder, - // not here as well. - return allFiles.filter( - (f) => f.remoteStorageId == null && (f.folderId ?? null) === null, - ); case "cloud": // Cloud bucket; search widens to subtree, else direct-folder match. return allFiles.filter((f) => { @@ -1101,7 +1094,6 @@ export default function FileManagerView() { const newFolderDisabledReason: string | null = useMemo(() => { // Only All/Cloud render folders, so creating one elsewhere would look inert. if ( - currentTab === "local" || currentTab === "recent" || currentTab === "shared" || currentTab === "sharedByMe" @@ -1143,8 +1135,7 @@ export default function FileManagerView() {
{/* Breadcrumb only for folder-rooted tabs. */} {(currentTab === "all" || currentTab === "cloud") && } - {(currentTab === "local" || - currentTab === "recent" || + {(currentTab === "recent" || currentTab === "shared" || currentTab === "sharedByMe") && (
- {currentTab === "local" - ? t("filesPage.tabName.local", "Local") - : currentTab === "recent" - ? t("filesPage.tabName.recent", "Recent") - : currentTab === "shared" - ? t("filesPage.tabName.shared", "Shared with me") - : t("filesPage.tabName.sharedByMe", "Shared by me")} + {currentTab === "recent" + ? t("filesPage.tabName.recent", "Recent") + : currentTab === "shared" + ? t("filesPage.tabName.shared", "Shared with me") + : t("filesPage.tabName.sharedByMe", "Shared by me")}
)} {(() => { diff --git a/frontend/editor/src/core/components/filesPage/FolderTreeSidebar.tsx b/frontend/editor/src/core/components/filesPage/FolderTreeSidebar.tsx index 918dbe9880..95e6d86d06 100644 --- a/frontend/editor/src/core/components/filesPage/FolderTreeSidebar.tsx +++ b/frontend/editor/src/core/components/filesPage/FolderTreeSidebar.tsx @@ -72,7 +72,13 @@ export function FolderTreeSidebar({ }: FolderTreeSidebarProps) { const { t } = useTranslation(); const { tree, currentFolderId, setCurrentFolderId } = useFolders(); - const { currentTab, setCurrentTab, moveFolderTo } = useFilesPage(); + const { + currentTab, + setCurrentTab, + moveFolderTo, + originFilter, + setOriginFilter, + } = useFilesPage(); return (
setCurrentTab("local")} + isActive={originFilter === "local"} + onSelect={() => setOriginFilter("local")} /> {tree.map((node) => (