-
-
Notifications
You must be signed in to change notification settings - Fork 414
fix(filePanel): allow focusType to be set correctly #1033
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
The defaultFilePanel function previously hardcoded focusType to 'focus', causing multiple panels to appear focused simultaneously. Now, defaultFilePanel accepts a focusType parameter, allowing callers to initialize panels with the correct focus state. This ensures only one panel is focused at initialization, and others are set to 'noneFocus' or 'secondFocus' as needed. Fixes the inconsistent panel focus issue introduced in PR yorukot#759.
WalkthroughUpdates focus handling for file panels: the first panel receives focus and subsequent panels receive secondFocus. The defaultFilePanel function now accepts a focus type parameter, and filePanelSlice computes and passes the appropriate focus type. Minor formatting adjustment to a sorting options slice. Changes
Sequence Diagram(s)sequenceDiagram
autonumber
actor App
participant TU as type_utils.go
participant FP as FilePanel
App->>TU: filePanelSlice(dirs)
loop for each dir in dirs
TU->>TU: determine focusType (first: focus, others: secondFocus)
TU->>FP: defaultFilePanel(dir, focusType)
activate FP
FP-->>TU: filePanel with focusType
deactivate FP
end
TU-->>App: []filePanel (first focused, others secondFocused)
note over App,TU: Control flow modified to pass focusType into panel construction
Estimated code review effort🎯 2 (Simple) | ⏱️ ~10 minutes Possibly related issues
Poem
Tip 🔌 Remote MCP (Model Context Protocol) integration is now available!Pro plan users can now connect to remote MCP servers from the Integrations page. Connect with popular remote MCPs such as Notion and Linear to add more context to your reviews and chats. ✨ Finishing Touches
🧪 Generate unit tests
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. CodeRabbit Commands (Invoked using PR/Issue comments)Type Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (2)
src/internal/type_utils.go (2)
53-74: Signature change ripple: ensure all call sites updated; consider a temporary compatibility helperChanging
defaultFilePanelto require afilePanelFocusTypeis sensible. Verify all invocations compile and pass an explicit focus type. If you want a softer transition, add a small wrapper (unexported) used only by legacy code and remove it in a follow-up.Example wrapper (optional, short-lived):
// deprecated: prefer defaultFilePanel(dir, focusType) func defaultFocusedFilePanel(dir string) filePanel { return defaultFilePanel(dir, focus) }One nit:
currentFocusTypereads more clearly asinitialFocusType.-func defaultFilePanel(dir string, currentFocusType filePanelFocusType) filePanel { +func defaultFilePanel(dir string, initialFocusType filePanelFocusType) filePanel { return filePanel{ ... - focusType: currentFocusType, + focusType: initialFocusType, ... } }
53-74: Keep sort options height in sync with the options listHard-coding
height: 4risks drift. Compute it from the options slice to avoid future mismatches.-func defaultFilePanel(dir string, currentFocusType filePanelFocusType) filePanel { - return filePanel{ +func defaultFilePanel(dir string, currentFocusType filePanelFocusType) filePanel { + opts := []string{ + string(sortingName), + string(sortingSize), + string(sortingDateModified), + string(sortingFileType), + } + return filePanel{ render: 0, cursor: 0, location: dir, sortOptions: sortOptionsModel{ width: 20, - height: 4, + height: len(opts), open: false, cursor: common.Config.DefaultSortType, data: sortOptionsModelData{ - options: []string{ - string(sortingName), string(sortingSize), - string(sortingDateModified), string(sortingFileType), - }, + options: opts, selected: common.Config.DefaultSortType, reversed: common.Config.SortOrderReversed, }, }, panelMode: browserMode, focusType: currentFocusType, directoryRecords: make(map[string]directoryRecord), searchBar: common.GenerateSearchBar(), } }
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
💡 Knowledge Base configuration:
- MCP integration is disabled by default for public repositories
- Jira integration is disabled by default for public repositories
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (1)
src/internal/type_utils.go(2 hunks)
🧰 Additional context used
🧠 Learnings (1)
📓 Common learnings
Learnt from: lazysegtree
PR: yorukot/superfile#0
File: :0-0
Timestamp: 2025-04-12T12:00:32.688Z
Learning: In PR #767 for yorukot/superfile, the focus is on moving code (especially sidebar-related functionality) to a more organized structure without changing functionality. Pre-existing issues should be ignored since the purpose is code reorganization, not fixing existing problems.
🧬 Code graph analysis (1)
src/internal/type_utils.go (4)
src/internal/handle_panel_navigation.go (5)
m(136-145)m(160-171)m(148-157)m(78-109)m(174-186)src/internal/function.go (1)
returnFocusType(58-63)src/internal/type.go (1)
filePanels(149-155)src/internal/handle_panel_movement.go (1)
m(107-122)
🔇 Additional comments (1)
src/internal/type_utils.go (1)
42-48: Initialization logic verified
Confirmed no other default initialization path assignsfocusto all panels; navigation assignments are expected behavior.
|
PR #1033 raised for the fix. Kindly review the changes. |
lazysegtree
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM. Thanks @faisal-990
|
Failures due to |
|
@lazysegtree thanks for the review . Do you have some suggestions to refactor this filePanelFocusType typed constant? or should i change the names to something more intuitive ,and make the default focusType to noneFocus instead of second Focus. |
The constants themselves dont make any sense. Only thing there should be is |
|
Yes #938 Needs work. The tests are flaky and fails and works on retry. |
|
Github isn't letting me assign you. You can just comment on them saying you are working on it. |
The previous implementation used a typed constant with multiple states (noneFocus, secondFocus, focus). This has been deprecated in favor of a simpler boolean field. This makes it easier to determine whether the panel is focused (true) or not (false), removes unnecessary enum complexity, and improves readability/maintainability of the file panel logic. Refs: yorukot#1033
#1040) The filePanelFocusType typed constant with multiple states (noneFocus, secondFocus, focus) added unnecessary complexity for managing panel focus. It also made the code harder to read and maintain. Solution Replaced filePanelFocusType with a simple isFocused boolean field in filePanel. isFocused = true → panel is focused isFocused = false → panel is not focused This change removes unused constants and simplifies focus handling. Refs #1033 Refs #1030 <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - Refactor - Simplified panel focus handling to a single, consistent indicator across navigation, rendering, and key interactions, improving reliability and consistency in focus behavior. - Style - Minor formatting cleanups for readability without changing behavior. - Chores - Consolidated internal variable declarations and adjusted logging to reflect the updated focus indicator. No user-facing features changed; interactions should feel more consistent and stable, especially when switching panels and using the sidebar or process bar. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: lazysegtree <59679977+lazysegtree@users.noreply.github.com>
This MR contains the following updates: | Package | Update | Change | |---|---|---| | [yorukot/superfile](https://github.com/yorukot/superfile) | minor | `v1.3.3` -> `v1.4.0` | MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot). **Proposed changes to behavior should be submitted there as MRs.** --- ### Release Notes <details> <summary>yorukot/superfile (yorukot/superfile)</summary> ### [`v1.4.0`](https://github.com/yorukot/superfile/releases/tag/v1.4.0) [Compare Source](yorukot/superfile@v1.3.3...v1.4.0) Hey folks. Releasing v1.4.0 with many new features, improvements, and bug fixes. We have an async file preview now, a zoxide panel, and various new features improving UX. #### Install: [**Click me to know how to install**](https://github.com/yorukot/superfile?tab=readme-ov-file#installation) #### Highlights - We have the Zoxide Panel now. Ensure zoxide is installed on your system, set `zoxide_support` to `true` in the config, and press `z` to use zoxide. <img width="645" height="295" alt="Image" src="https://github.com/user-attachments/assets/238f6549-5318-49d1-a3a0-14cf8a686955" /> - File previewing is now async, meaning reduced lag while scrolling through images, or on slow systems. - Many bug fixes. See 'Detailed Change Summary' ##### Internal Updates - Most file operations are now truly async with the usage of the recommended `tea.Cmd` pattern. - Enabled many new linters to improve code quality. - Moved golangci-lint to v2. Now developers don't need to keep the old v1 in their systems. - Refactored file preview in its own package for better maintainability and readability. - Fixed flaky unit tests. #### Detailed Change Summary <details><summary>Details</summary> <p> ##### Update - feat: File operation via tea cmd [#​963](yorukot/superfile#963) by @​lazysegtree - feat: processbar improvements, package separation, better channel management [#​973](yorukot/superfile#973) by @​lazysegtree - feat: enable lll and recvcheck linter, fix tests, more refactors [#​977](yorukot/superfile#977) by @​lazysegtree - feat: Remove channel for notification models [#​979](yorukot/superfile#979) by @​lazysegtree - feat: enable cyclop, funlen, gocognit, gocyclo linters, and refactor large functions [#​984](yorukot/superfile#984) by @​lazysegtree - feat: Add a new hotkey to handle cd-on-quit whenever needed [#​924](yorukot/superfile#924) by @​ahmed-habbachi - feat: added option to permanently delete files [#​987](yorukot/superfile#987) by @​hupender - feat: Preview panel separation [#​1021](yorukot/superfile#1021) by @​lazysegtree - feat: Add search functionality to help menu [#​1011](yorukot/superfile#1011) by @​iZarrios - feat: Use zoxide lib [#​1036](yorukot/superfile#1036) by @​lazysegtree - feat: Add zoxide directory tracking on navigation [#​1041](yorukot/superfile#1041) by @​lazysegtree - feat: Zoxide integration [#​1039](yorukot/superfile#1039) by @​lazysegtree - feat: Select mode with better feedback [#​1074](yorukot/superfile#1074) by @​lazysegtree - feat: owner/group in the metadata [#​1093](yorukot/superfile#1093) by @​xelavopelk - feat: Async zoxide [#​1104](yorukot/superfile#1104) by @​lazysegtree ##### Bug Fix - fix: sorting in searchbar [#​985](yorukot/superfile#985) by @​hupender - fix: Async rendering, Include clipboard check in paste items, and update linter configs [#​997](yorukot/superfile#997) by @​lazysegtree - fix: Move utility functions to utils package [#​1012](yorukot/superfile#1012) by @​lazysegtree - fix: Refactoring and separation of preview panel and searchbar in help menu [#​1013](yorukot/superfile#1013) by @​lazysegtree - fix(filePanel): allow focusType to be set correctly [#​1033](yorukot/superfile#1033) by @​faisal-990 - fix(ci): Update gomod2nix.toml, allow pre release in version output, release 1.4.0-rc1, bug fixes, and improvements [#​1054](yorukot/superfile#1054) by @​lazysegtree - fix(nix): resolve build failures in the nix flake [#​1068](yorukot/superfile#1068) by @​Frost-Phoenix - fix: Retry the file deletion to prevent flakies (#​938) [#​1076](yorukot/superfile#1076) by @​lazysegtree - fix(issue-1066): Fixed issue where enter was not searchable [#​1078](yorukot/superfile#1078) by @​Simpaqt - fix(#​1073): Tech debt fix [#​1077](yorukot/superfile#1077) by @​Simpaqt - fix: fix deleted directory not able to remove from pins (#​1067) [#​1081](yorukot/superfile#1081) by @​yorukot - fix: fix child process spawning attached [#​1084](yorukot/superfile#1084) by @​guemidiborhane - fix: always clear images when showing a FullScreenStyle [#​1094](yorukot/superfile#1094) by @​snikoletopoulos - fix: Allow j and k keys in zoxide [#​1102](yorukot/superfile#1102) by @​lazysegtree - fix: Zoxide improvements and 1.4.0-rc2 [#​1105](yorukot/superfile#1105) by @​lazysegtree - fix: rename cursor beginning on wrong character because of multiple dots in name (#​813) [#​1112](yorukot/superfile#1112) by @​SyedAsadK - fix: check and fix file panel scroll position on height changes [#​1095](yorukot/superfile#1095) by @​snikoletopoulos ##### Optimization - perf(website): optimize font loading and asset organization [#​1089](yorukot/superfile#1089) by @​yorukot ##### Documentation - docs: fix incorrect zoxide plugin config name [#​1049](yorukot/superfile#1049) by @​shree-xvi - docs(hotkeys): Fix typo in vimHotkeys.toml comments [#​1080](yorukot/superfile#1080) by @​wleoncio - docs: add section for core maintainers in README.md [#​1088](yorukot/superfile#1088) by @​yorukot - chore: add winget install instruction to readme and website [#​943](yorukot/superfile#943) by @​claykom ##### Dependencies - chore(deps): update dependency go to v1.25.0, golangci-lint to v2, golangci-lint actions to v8 [#​750](yorukot/superfile#750) by @​renovate[bot] - chore(deps): update amannn/action-semantic-pull-request action to v6 [#​1006](yorukot/superfile#1006) by @​renovate[bot] - chore(deps): update actions/first-interaction action to v3 [#​1005](yorukot/superfile#1005) by @​renovate[bot] - chore(deps): update actions/checkout action to v5 [#​1004](yorukot/superfile#1004) by @​renovate[bot] - chore(deps): bump astro from 5.10.1 to 5.12.8 [#​982](yorukot/superfile#982) by @​dependabot[bot] - fix(deps): update module golang.org/x/mod to v0.27.0 [#​989](yorukot/superfile#989) by @​renovate[bot] - fix(deps): update dependency @​expressive-code/plugin-collapsible-sections to v0.41.3 [#​990](yorukot/superfile#990) by @​renovate[bot] - fix(deps): update dependency sharp to v0.34.3 [#​992](yorukot/superfile#992) by @​renovate[bot] - fix(deps): update dependency @​expressive-code/plugin-line-numbers to v0.41.3 [#​991](yorukot/superfile#991) by @​renovate[bot] - chore(deps): update dependency go to v1.25.0 [#​994](yorukot/superfile#994) by @​renovate[bot] - fix(deps): update astro monorepo [#​995](yorukot/superfile#995) by @​renovate[bot] - fix(deps): update dependency @​astrojs/starlight to ^0.35.0 [#​1000](yorukot/superfile#1000) by @​renovate[bot] - fix(deps): update module github.com/urfave/cli/v3 to v3.4.1 [#​1001](yorukot/superfile#1001) by @​renovate[bot] - fix(deps): update module golang.org/x/text to v0.28.0 [#​1003](yorukot/superfile#1003) by @​renovate[bot] ##### Misc - chore: migrate from superfile.netlify.app to superfile.dev [#​1087](yorukot/superfile#1087) by @​yorukot - refactor(filepanel): replace filePanelFocusType with isFocused boolean [#​1040](yorukot/superfile#1040) by @​faisal-990 - refactor(ansi): Migrate from github.com/charmbracelet/x/exp/term/ansi to github.com/charmbracelet/x/ansi [#​1044](yorukot/superfile#1044) by @​faisal-990 - refactor: common operation on pinned directory file using PinnedManager [#​1085](yorukot/superfile#1085) by @​Manaswa-S - test: unit tests for pinned manager [#​1090](yorukot/superfile#1090) by @​Manaswa-S </p> </details> #### New Contributors * @​hupender made their first contribution in yorukot/superfile#985 * @​ahmed-habbachi made their first contribution in yorukot/superfile#924 * @​iZarrios made their first contribution in yorukot/superfile#1011 * @​faisal-990 made their first contribution in yorukot/superfile#1033 * @​shree-xvi made their first contribution in yorukot/superfile#1049 * @​Simpaqt made their first contribution in yorukot/superfile#1078 * @​wleoncio made their first contribution in yorukot/superfile#1080 * @​guemidiborhane made their first contribution in yorukot/superfile#1084 * @​Manaswa-S made their first contribution in yorukot/superfile#1085 * @​xelavopelk made their first contribution in yorukot/superfile#1093 * @​snikoletopoulos made their first contribution in yorukot/superfile#1094 * @​SyedAsadK made their first contribution in yorukot/superfile#1112 **Full Changelog**: <yorukot/superfile@v1.3.3...v1.4.0> </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this MR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box --- This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS4xNDYuMCIsInVwZGF0ZWRJblZlciI6IjQxLjE0Ni4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJSZW5vdmF0ZSBCb3QiXX0=-->
The defaultFilePanel function previously hardcoded focusType to 'focus', causing multiple panels to appear focused simultaneously.
Now, defaultFilePanel accepts a focusType parameter, allowing callers to initialize panels with the correct focus state. This ensures only one panel is focused at initialization, and others are set to 'noneFocus' or 'secondFocus' as needed.
Fixes the inconsistent panel focus issue introduced in PR #759.
Summary by CodeRabbit