mirror of
https://github.com/getpaseo/paseo.git
synced 2026-07-29 12:01:31 +00:00
fix(explorer): show hidden files before restoration
This commit is contained in:
@@ -42,6 +42,7 @@ import {
|
||||
flattenExplorerTree,
|
||||
reconcileRestoredExpandedPaths,
|
||||
restoreExpandedDirectories,
|
||||
showHiddenFilesAndRestoreExpandedDirectories,
|
||||
type ExplorerTreeRow,
|
||||
} from "@/file-explorer/tree";
|
||||
import { useWorkspaceFileDragSource } from "@/attachments/use-workspace-file-drag-source";
|
||||
@@ -375,10 +376,10 @@ export function FileExplorerPane({
|
||||
toggleExplorerShowHiddenFiles();
|
||||
return;
|
||||
}
|
||||
void restoreExpandedDirectories({
|
||||
void showHiddenFilesAndRestoreExpandedDirectories({
|
||||
rootDirectory,
|
||||
persistedExpandedPaths: expandedPaths,
|
||||
showHiddenFiles: true,
|
||||
showHiddenFiles: toggleExplorerShowHiddenFiles,
|
||||
requestDirectoryListing: (path) =>
|
||||
requestDirectoryListing(path, {
|
||||
recordHistory: false,
|
||||
@@ -392,7 +393,6 @@ export function FileExplorerPane({
|
||||
restoredExpandedPaths: restoredPaths,
|
||||
}),
|
||||
);
|
||||
toggleExplorerShowHiddenFiles();
|
||||
return null;
|
||||
});
|
||||
}, [
|
||||
|
||||
@@ -5,6 +5,7 @@ import {
|
||||
flattenExplorerTree,
|
||||
reconcileRestoredExpandedPaths,
|
||||
restoreExpandedDirectories,
|
||||
showHiddenFilesAndRestoreExpandedDirectories,
|
||||
} from "./tree";
|
||||
|
||||
function makeDirectoryEntry(name: string, path: string): ExplorerEntry {
|
||||
@@ -151,4 +152,29 @@ describe("file explorer tree", () => {
|
||||
|
||||
expect(paths).toEqual([".", "manual"]);
|
||||
});
|
||||
|
||||
it("shows hidden files before waiting for expanded directories to restore", async () => {
|
||||
const rootDirectory = {
|
||||
path: ".",
|
||||
entries: [makeDirectoryEntry(".hidden", ".hidden")],
|
||||
};
|
||||
let resolveDirectory!: (directory: { path: string; entries: ExplorerEntry[] }) => void;
|
||||
const directoryListing = new Promise<{ path: string; entries: ExplorerEntry[] }>((resolve) => {
|
||||
resolveDirectory = resolve;
|
||||
});
|
||||
let hiddenFilesAreShown = false;
|
||||
|
||||
const restoration = showHiddenFilesAndRestoreExpandedDirectories({
|
||||
rootDirectory,
|
||||
persistedExpandedPaths: new Set([".hidden"]),
|
||||
showHiddenFiles: () => {
|
||||
hiddenFilesAreShown = true;
|
||||
},
|
||||
requestDirectoryListing: () => directoryListing,
|
||||
});
|
||||
|
||||
expect(hiddenFilesAreShown).toBe(true);
|
||||
resolveDirectory({ path: ".hidden", entries: [] });
|
||||
await expect(restoration).resolves.toEqual([".", ".hidden"]);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -23,6 +23,13 @@ interface RestoreExpandedDirectoriesInput {
|
||||
requestDirectoryListing: (path: string) => Promise<ExplorerDirectory | null>;
|
||||
}
|
||||
|
||||
interface ShowHiddenFilesAndRestoreExpandedDirectoriesInput extends Omit<
|
||||
RestoreExpandedDirectoriesInput,
|
||||
"showHiddenFiles"
|
||||
> {
|
||||
showHiddenFiles: () => void;
|
||||
}
|
||||
|
||||
interface ReconcileRestoredExpandedPathsInput {
|
||||
persistedExpandedPaths: ReadonlySet<string>;
|
||||
currentExpandedPaths: ReadonlySet<string>;
|
||||
@@ -110,6 +117,21 @@ export async function restoreExpandedDirectories({
|
||||
return restoredPaths;
|
||||
}
|
||||
|
||||
export function showHiddenFilesAndRestoreExpandedDirectories({
|
||||
rootDirectory,
|
||||
persistedExpandedPaths,
|
||||
showHiddenFiles,
|
||||
requestDirectoryListing,
|
||||
}: ShowHiddenFilesAndRestoreExpandedDirectoriesInput): Promise<string[]> {
|
||||
showHiddenFiles();
|
||||
return restoreExpandedDirectories({
|
||||
rootDirectory,
|
||||
persistedExpandedPaths,
|
||||
showHiddenFiles: true,
|
||||
requestDirectoryListing,
|
||||
});
|
||||
}
|
||||
|
||||
export function reconcileRestoredExpandedPaths({
|
||||
persistedExpandedPaths,
|
||||
currentExpandedPaths,
|
||||
|
||||
Reference in New Issue
Block a user