Skip to content

Commit e7bf48a

Browse files
ui/project_form: Improve file handling in UI
- Enhance file input handling in the UI to avoid losing selected files when adding new inputs. - Introduce a `selectedFiles` array to store and manage selected files. - Display selected files in the UI with additional features, including a delete button. - Update the `removeFile` function to correctly remove files from both the UI and the `selectedFiles` array. Fixes: #991 Signed-off-by: Jayanth Kumar <[email protected]>
1 parent ce4cae0 commit e7bf48a

File tree

1 file changed

+39
-2
lines changed

1 file changed

+39
-2
lines changed

scancodeio/static/add-inputs.js

+39-2
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,33 @@
2121
// Visit https://github.com/nexB/scancode.io for support and download.
2222

2323
const fileInput = document.querySelector('#id_input_files');
24+
let selectedFiles = []; // Store selected files
25+
2426
fileInput.onchange = updateFiles;
2527

2628
// Update the list of files to be uploaded in the UI
2729
function updateFiles() {
2830
if (fileInput.files.length > 0) {
2931
const fileName = document.querySelector('#inputs_file_name');
3032
fileName.innerHTML = "";
31-
for (let file of fileInput.files) {
32-
fileName.innerHTML += `<span class="is-block">${file.name}</span>`;
33+
34+
// Update the selectedFiles array
35+
selectedFiles = selectedFiles.concat(Array.from(fileInput.files));
36+
37+
for (let file of selectedFiles) {
38+
const fileNameWithoutSpaces = file.name.replace(/\s/g, '');
39+
fileName.innerHTML += `
40+
<span class="is-flex is-justify-content-space-between is-block" id="file-name-${fileNameWithoutSpaces}">
41+
<span class="is-block">${file.name}</span>
42+
<a href="#" onclick="removeFile('${fileNameWithoutSpaces}')" class="model-button" id="file-delete-btn-${fileNameWithoutSpaces}">
43+
<i class="fa-solid fa-trash-can mr-2"></i>
44+
</a>
45+
</span>
46+
`;
47+
document.getElementById("file-delete-btn-"+ fileNameWithoutSpaces).addEventListener("click", function(event){
48+
disableEvent(event);
49+
removeFile(fileNameWithoutSpaces);
50+
});
3351
}
3452
}
3553
}
@@ -40,6 +58,25 @@ function disableEvent(event) {
4058
event.preventDefault();
4159
}
4260

61+
function removeFile(fileName) {
62+
selectedFiles = selectedFiles.filter(file => {
63+
const fileNameWithoutSpaces = file.name.replace(/\s/g, '');
64+
return fileNameWithoutSpaces !== fileName;
65+
});
66+
67+
const fileNameElement = document.getElementById(`file-name-${fileName}`);
68+
if (fileNameElement) {
69+
fileNameElement.remove();
70+
}
71+
72+
const dataTransfer = new DataTransfer();
73+
for (let file of selectedFiles) {
74+
dataTransfer.items.add(file);
75+
}
76+
77+
fileInput.files = dataTransfer.files;
78+
}
79+
4380
function dropHandler(event) {
4481
disableEvent(event);
4582
const droppedFiles = event.dataTransfer.files;

0 commit comments

Comments
 (0)