Split up Repository File Tree Browser into smaller components
## Problem The File Tree Browser (FTB) components have been growing and we should start looking into how we can split them before they become harder to maintain. The main `tree_list.vue` component now starts its template at line 363, indicating it's getting bigger and would benefit from being split into smaller, more focused components. Context: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/210274#note_2853919984 ## Current State - `app/assets/javascripts/repository/file_tree_browser/components/tree_list.vue` is starting to grow with the template beginning at line 363 - Several utility functions are embedded within components that could be extracted - Mixed responsibilities within single components ## Proposed Refactoring ### Extract Filter Bar Component The filter functionality could be moved to a dedicated component to improve separation of concerns. ### Extract Utility Functions Several functions in `tree_list.vue` could be moved to utility modules: - `isCurrentPath(path)` - Compares a path with the current route path - `getDirectoryContents(path)` - Simple getter that returns cached directory contents - `shouldRenderShowMore(itemPath, parentPath)` - Determines if "show more" should be rendered based on pagination state - `siblingInfo(item)` - Calculates sibling information for accessibility attributes - `filterInputTooltipTarget()` - Returns the filter input element reference - `processDirectories({ trees, path, level })` - Transforms tree data into list items - `processFiles({ blobs, path, level })` - Transforms blob data into list items - `processSubmodules({ submodules, path, level })` - Transforms submodule data into list items ### Extract Popover Component In `file_tree_browser_toggle.vue`, the popover functionality could be moved to a dedicated component for better reusability. ## Benefits - **Improved maintainability**: Smaller, focused components are easier to understand and modify - **Better developer experience**: Future work on FTB features will be easier with a cleaner codebase - **Enhanced reusability**: Extracted utilities and components can be reused across the codebase ## Acceptance Criteria - [ ] Extract filter bar into a separate component - [ ] Move utility functions to appropriate utility modules - [ ] Extract popover functionality from `file_tree_browser_toggle.vue` - [ ] Ensure all existing functionality remains intact - [ ] Update tests to cover the new component structure ## Priority This refactoring should be completed before the FTB rollout to ensure we maintain a good developer experience as the feature continues to evolve. Related to !210274
issue