Skip to content

Commit 9076663

Browse files
committed
Fixing bug in zip visualization on the Solution Detail page.
1 parent 1ccd3f6 commit 9076663

2 files changed

Lines changed: 17 additions & 11 deletions

File tree

‎src/components/Solutions/SolutionFiles/SolutionFiles.js‎

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ const SolutionFiles = ({
2828
<ResourceRenderer resource={files}>
2929
{files => {
3030
const filesSize = files.reduce((acc, { size }) => acc + size, 0);
31-
const processedFiles = preprocessFiles(files);
31+
const processedFiles = preprocessFiles(files, true); // true = keep zip files as well
3232
const canDisplayFiles = processedFiles.length <= 50;
3333

3434
return (
@@ -104,7 +104,7 @@ const SolutionFiles = ({
104104
? 'text-success fw-bold'
105105
: ''
106106
}>
107-
{file.name}
107+
{file.entryName || file.name}
108108
</code>
109109

110110
{file.zipEntriesBadNames && (
@@ -138,7 +138,11 @@ const SolutionFiles = ({
138138
}>
139139
<Button
140140
onClick={() =>
141-
openFile(file.parentId || file.id, file.name, file.parentId ? file.name : null)
141+
openFile(
142+
file.parentId || file.id,
143+
file.entryName || file.name,
144+
file.parentId ? file.entryName : null
145+
)
142146
}
143147
size="xs"
144148
variant="secondary">
@@ -160,7 +164,7 @@ const SolutionFiles = ({
160164
}>
161165
<Button
162166
onClick={() =>
163-
download(file.parentId || file.id, file.parentId ? file.name : null)
167+
download(file.parentId || file.id, file.parentId ? file.entryName : null)
164168
}
165169
size="xs"
166170
variant="primary">

‎src/helpers/solutionFiles.js‎

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,9 @@ const nameComparator = (a, b) => a.name.localeCompare(b.name, 'en');
88
*/
99
const preprocessZipEntries = ({ zipEntries, ...file }) => {
1010
if (zipEntries) {
11+
file.zipEntriesBadNames = zipEntries.reduce((bad, { name }) => bad || name.includes('\\'), false);
1112
file.zipEntries = zipEntries
12-
.filter(({ name, size }) => !name.endsWith('/') || size !== 0)
13+
.filter(({ name, size }) => !(name.endsWith('/') || name.endsWith('\\') || size === 0))
1314
.map(({ name, size }) => ({
1415
entryName: name,
1516
name: `${file.name}#${name}`,
@@ -25,12 +26,13 @@ const preprocessZipEntries = ({ zipEntries, ...file }) => {
2526
/**
2627
* Preprocess zip entries, consolidate, and sort by names.
2728
*/
28-
export const preprocessFiles = lruMemoize(files =>
29-
files
30-
.sort(nameComparator)
31-
.map(preprocessZipEntries)
32-
.reduce((acc, file) => [...acc, ...(file.zipEntries || [file])], [])
33-
);
29+
export const preprocessFiles = lruMemoize((files, keepZipFiles = false) => {
30+
const reducer = keepZipFiles
31+
? (acc, file) => [...acc, file, ...(file.zipEntries || [])]
32+
: (acc, file) => [...acc, ...(file.zipEntries || [file]), file];
33+
34+
return files.sort(nameComparator).map(preprocessZipEntries).reduce(reducer, []);
35+
});
3436

3537
export const filesCanBeDisplayed = files =>
3638
files &&

0 commit comments

Comments
 (0)