Commit Graph
8 Commits
Author SHA1 Message Date
ZacharyZcRandClaude d1635c35f3 Add tab navigation dropdown menu for better multi-tab management
Implement Issue #130 suggestion: Add dropdown menu in top tab bar to help
users quickly navigate between open hosts/tabs when many are open.

Features:
- Smart visibility: Only shows when multiple tabs are open
- Visual identification: Each tab type has corresponding icon (Home, Terminal, Server, etc.)
- Active tab indicator: Current tab highlighted with blue dot
- Quick switching: Click any tab to switch instantly
- Seamless integration: Positioned in top navbar without disrupting existing UI

New Components:
- src/components/ui/dropdown-menu.tsx: Radix UI based dropdown component
- src/ui/Desktop/Navigation/Tabs/TabDropdown.tsx: Tab navigation dropdown logic
- Updated TopNavbar.tsx with integrated dropdown

UI/UX Improvements:
- Consistent dark theme styling (#18181b background, #303032 borders)
- 30x30px button size matching existing toolbar buttons
- Right-aligned dropdown to avoid screen boundary issues
- Hover effects and smooth transitions
- Responsive design for different screen sizes

i18n Support:
- Added "tabNavigation" key in both English and Chinese translations
- Accessible tooltips and labels

Technical Implementation:
- Zero breaking changes: Pure incremental feature
- Reuses existing tab context and switching logic
- TypeScript safe with proper type definitions
- Performance optimized: Only renders when needed
- Follows existing code patterns and conventions

This enhancement significantly improves the user experience when managing
multiple host connections, providing quick access to any tab without scrolling.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <[email protected]>
2025-09-07 16:35:09 +08:00
ZacharyZcRandClaude bfd441e1f3 Fix SSH host metrics authentication bug after credential changes
Problem: When users changed host authentication credentials, the main SSH
connection worked fine, but metrics collection failed with "All configured
authentication methods failed" error.

Root Cause: The metrics collection system (server-stats.ts) had its own
separate authentication implementation that only supported legacy password/key
fields and didn't integrate with the credential-based authentication system.

Solution:
- Remove duplicate HostRecord type, use unified SSHHostWithCredentials
- Import and use ssh-host.service for consistent credential resolution
- Update fetchAllHosts() to properly resolve credentials using getHostWithCredentials()
- Enhance buildSshConfig() with same authentication logic as main connections
- Add proper error handling for missing credentials
- Support both credential-based and legacy authentication methods

Benefits:
- Eliminates authentication logic duplication (follows "good taste" principle)
- Metrics collection now works after changing host credentials
- Uses single source of truth for credential resolution
- Maintains backward compatibility with legacy authentication
- Better error messages for debugging authentication issues

Now both main SSH connections and metrics collection use the same robust
authentication system, eliminating the authentication divergence that caused
the metrics failures.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <[email protected]>
2025-09-07 15:42:43 +08:00
ZacharyZcRandClaude 60fb70ad5f Fix issue #144: Set cursor focus to IP address field when adding/editing hosts
Problem: When opening Add Host or Edit Host, cursor was not focusing on any field,
making it less convenient for users to start entering connection details.

Root cause: The react-hook-form field spread operator {...field} was overriding
our custom ref, preventing proper ref binding to the IP input element.

Solution:
- Use function ref to properly bind both react-hook-form ref and our custom ref
- Set focus on component mount and when editingHost changes
- Focus on IP address field as it's the first logical field in connection details
- Use 300ms timeout to ensure DOM rendering is complete

Now when users click "Add Host" or edit a host, the cursor automatically
focuses on the IP address input field for better UX.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <[email protected]>
2025-09-07 15:29:32 +08:00
ZacharyZcR f9891b8099 Fix issue #144: Set cursor focus to IP address field instead of username field
When adding or editing a host, the cursor now automatically focuses on the IP address field, which is the first field in the connection details section. This improves UX by allowing users to immediately start typing the most logical first piece of information.

Changes:
- Added useRef for IP address input field
- Added useEffect to focus IP field when component mounts or editingHost changes
- Uses setTimeout to ensure DOM is ready before focusing
- Works for both adding new hosts and editing existing hosts
2025-09-07 15:21:22 +08:00
ZacharyZcR 71c54fccc5 Fix issue #125: Make import JSON button available even when no hosts exist
- Modified empty state in HostManagerHostViewer to include all import controls
- Import JSON button, sample download, and format guide now appear consistently
- Maintained existing functionality while improving user experience
- Added helpful message directing users to use import functionality
- Fixed conditional rendering logic that was hiding import options

Resolves #125
2025-09-07 14:39:07 +08:00
ZacharyZcRandClaude e5939dadbe Comprehensive credentials management and SSH host system fixes
Backend improvements:
- Fix SSH host update authentication system (use effectiveAuthType)
- Support both authType and authMethod field mapping
- Prevent empty password/key from overwriting existing credentials
- Add proper credentialId support for credential-based authentication

Frontend enhancements:
- Add dedicated "Add Credential" page similar to Add Host
- Refactor credentials management with consistent Host Manager styling
- Fix credential display bug (hide keyType for password credentials)
- Enhance CredentialSelector with improved API response handling

i18n internationalization:
- Fix Admin Settings i18n issues with comprehensive translation support
- Add missing credentials.* translation keys for both English and Chinese
- Fix hardcoded key type labels (RSA, ECDSA, Ed25519) with proper translations
- Add missing placeholders and form labels

UI/UX improvements:
- Update HostManager with 4-tab structure including credential management
- Improve visual consistency across credential components
- Better error handling and user feedback
- Enhanced form validation and submission logic

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <[email protected]>
2025-09-07 04:28:25 +08:00
ZacharyZcR 199a9f6e52 Integrate credentials manager with host authentication system
- Add credential selection tab to Host Manager editor
- Create CredentialSelector component for credential selection
- Update form validation to support credential-based authentication
- Extend SSH host interfaces with credentialId field
- Add internationalization support for credential authentication
- Fix OIDC config endpoint to return 200 with null data instead of 404
- Improve credentials UI spacing and color consistency
- Remove hardcoded colors and use Zinc theme throughout
2025-09-06 17:44:41 +08:00
ZacharyZcRandClaude 81fca5b074 feat: implement comprehensive SSH credentials management system
- Add complete SSH credentials CRUD operations with AES-256 encryption
- Implement database migration system for schema versioning
- Create modern UI with Zinc theme for credentials management
- Add credential viewer and editor with responsive design
- Support password and SSH key authentication methods
- Include usage tracking and folder organization
- Enhance sidebar width and improve page spacing
- Add comprehensive i18n support (EN/ZH)
- Integrate with existing SSH host management

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <[email protected]>
2025-09-06 16:21:18 +08:00