Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Problem
The original file tree conversion logic used in the system was inefficient and had some issues handling both modified and deleted file paths. There were multiple cases where folders were incorrectly marked as deleted if only some children were deleted. Additionally, there was a lack of deduplication in handling file paths, which caused unnecessary redundancy. There was also no way to associate actions or details with the nodes (files or folders) in the file tree.
Solution
Deduplication:
Folder Deletion Logic:
markFoldersAsDeletedIfApplicable
) was introduced. This function walks through the folder nodes and checks if all their children are deleted. If all children are deleted, the folder is also marked as deleted. This prevents folders from being incorrectly marked as deleted when some files are still present.Handling
actions
anddetails
:Efficient Tree Construction:
findOrCreateFolderNode
andaddFileNode
to handle files and folders dynamically during the tree creation process.File Path Handling:
./
, ensuring that root-level files are correctly placed without unnecessary prefixing in their file paths.Files Changed:
fileListToTree
function:exampleFileListChatItem
:Testing:
Warning
npm run dev
&& husky break things for module importNote
Add dynamic import, easy clean up
License
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.