From beb21a6dbc07c67176c2abc6d9151938b308e712 Mon Sep 17 00:00:00 2001 From: Darren Yu Date: Tue, 16 Sep 2025 11:44:02 +0800 Subject: [PATCH] fix(archive preview): archive file view with leading slashes display abnormally (in addition to #2865) (#314) * fix(archive preview): archive file view with leading slashes display abnormally (in addition to #2865) * Update ArchivePreview.tsx --- .../Viewers/ArchivePreview/ArchivePreview.tsx | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/component/Viewers/ArchivePreview/ArchivePreview.tsx b/src/component/Viewers/ArchivePreview/ArchivePreview.tsx index e38fc0a..47bd900 100644 --- a/src/component/Viewers/ArchivePreview/ArchivePreview.tsx +++ b/src/component/Viewers/ArchivePreview/ArchivePreview.tsx @@ -93,6 +93,14 @@ const ArchivePreview = () => { return currentPath.split("/").filter(Boolean); }, [currentPath]); + // 规范化路径,去除开头可能存在的 `/` + const normalizeName = (name: string) => { + if (name && typeof name === "string" && name.startsWith("/")) { + return name.slice(1); + } + return name; + }; + useEffect(() => { if (!viewerState || !viewerState.open) { setEncoding(defaultEncodingValue); @@ -122,17 +130,25 @@ const ArchivePreview = () => { res.files .filter((item) => item.is_directory) .forEach((item) => { - allDirs.add(item.name); - allItems.push(item); + const normalizedName = normalizeName(item.name); + allItems.push({ + ...item, + name: normalizedName, + }); + allDirs.add(normalizedName); }); // 文件项,并补齐缺失目录 res.files .filter((item) => !item.is_directory) .forEach((item) => { - allItems.push(item); + const normalizedName = normalizeName(item.name); + allItems.push({ + ...item, + name: normalizedName, + }); - const dirElements = item.name.split("/"); + const dirElements = normalizedName.split("/"); for (let i = 1; i < dirElements.length; i++) { const dirName = dirElements.slice(0, i).join("/"); if (!allDirs.has(dirName)) {