- 25 Dec, 2025 6 commits
-
-
Steven authored
-
Steven authored
The translation files ca.json and gl.json existed but weren't registered in the locales array, preventing users from selecting these languages.
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By:Claude Sonnet 4.5 <noreply@anthropic.com>
-
Steven authored
This commit combines multiple improvements to the React Query migration: Performance Optimization: - Increase default staleTime from 10s to 30s for better performance - Reduces unnecessary network requests while maintaining data freshness Error Handling: - Add ErrorBoundary component with user-friendly error UI - Integrated at app root level for comprehensive coverage - Provides error details and reload option Documentation: - Add docs/auth-architecture.md explaining AuthContext design decisions - Document why AuthContext is preferred over React Query for current user Code Cleanup: - Remove all JSDoc comments from hooks and components - Keep essential inline comments for clarity - Simplifies code readability Files modified: - src/lib/query-client.ts - Optimized staleTime - src/main.tsx - Added ErrorBoundary wrapper - src/components/ErrorBoundary.tsx - New component - src/hooks/useMemoQueries.ts - Removed JSDoc - src/hooks/useUserQueries.ts - Removed JSDoc - src/components/PagedMemoList/PagedMemoList.tsx - Removed JSDoc - docs/auth-architecture.md - New documentation All changes verified with TypeScript compilation and production build.
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By:Claude Sonnet 4.5 <noreply@anthropic.com>
-
ghose authored
Signed-off-by:ghose <704948+xmgz@users.noreply.github.com>
-
dwojtas authored
-
Steven authored
Optimizes React Query migration with performance and consistency improvements: Performance: - Memoize AuthContext and InstanceContext provider values to prevent unnecessary re-renders - Convert InstanceContext getter functions to useMemo hooks - Fix refetchSettings to avoid state dependency that caused frequent recreations Type Safety: - Replace 'any' types in useAttachmentQueries with proper protobuf types - Add Attachment and ListAttachmentsRequest type imports Query Key Consistency: - Replace hardcoded ["users", "stats"] with userKeys.stats() factory function - Ensures consistent cache key management across mutations Developer Experience: - Rename unused useCurrentUser to useCurrentUserQuery to avoid confusion - Add documentation explaining AuthContext-based vs React Query current user hooks - Update internal references in useNotifications and useTagCounts All changes verified with TypeScript compilation and build tests.
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By:Claude Sonnet 4.5 <noreply@anthropic.com>
-
- 24 Dec, 2025 1 commit
-
-
Johnny authored
-
- 23 Dec, 2025 9 commits
-
-
Johnny authored
-
Johnny authored
-
Johnny authored
- Wrap actions.toggleFocusMode() with dispatch() call - Create toggleFocusMode helper function for callbacks - Fix focus mode not toggling due to action not being dispatched
-
Johnny authored
- Add useFocusMode hook to lock body scroll in focus mode - Add 'f' key keyboard shortcut to toggle focus mode - Add FocusModeExitButton inside editor - Import and wire up all focus mode components and hooks - Update useKeyboard to handle focus mode toggle
-
Johnny authored
- Import and use FOCUS_MODE_STYLES from constants - Apply proper fixed positioning, shadow, and spacing in focus mode - Add transition animation for smooth mode switching - Replace empty 'focus-mode' class with actual Tailwind utilities
-
Johnny authored
- Add back Tailwind utility classes for proper layout - Restore padding, border, background, and flex styles - Fix missing styles on memo-editor-wrapper element
-
Johnny authored
- Add back descriptive comments removed by editor refactoring commit - Restore original timestamp calculation format in MemoHeader - Improve code readability with section comments
-
Johnny authored
Complete refactoring of MemoView components for better code quality: - Split useMemoViewState into individual hook files (useMemoActions, useKeyboardShortcuts, useNsfwContent, useImagePreview, useMemoCreator) for single responsibility principle - Consolidate types closer to usage - move hook-specific types to respective files, keep only component props in shared types.ts - Optimize context with separate static/dynamic memoization to reduce unnecessary re-renders - Simplify barrel exports to only expose public API (MemoView component and MemoViewProps type) - Add comprehensive JSDoc documentation to all public APIs with usage examples Benefits: - Better maintainability: each hook file has one clear purpose - Improved performance: context optimization prevents unnecessary re-renders - Enhanced developer experience: clear documentation and encapsulation - Cleaner architecture: public API is minimal, internal details hidden All automated checks pass (TypeScript compilation, linter, production build).
-
Johnny authored
BREAKING CHANGE: MemoEditor internal architecture completely refactored ## Summary Refactored MemoEditor from hooks-based state management to a three-layer architecture (Presentation → State → Services) using useReducer pattern. ## Changes ### Architecture - **State Layer** (5 new files): types, actions, reducer, context, barrel export - **Service Layer** (6 new files): error, validation, upload, cache, memo services + barrel - **Component Layer** (3 new files): EditorToolbar, EditorContent, EditorMetadata - **Simplified Hooks** (3 new files): useMemoInit, useAutoSave, useKeyboard ### Code Reduction - Main component: ~380 lines → ~140 lines (-63%) - Hooks removed: 5 old hooks (useMemoEditorState, useMemoSave, etc.) - Total lines removed: 508 lines of old code - Utility hooks preserved: 8 hooks still in use (useLocation, useDragAndDrop, etc.) ### Improvements -
✅ Predictable state transitions with useReducer -✅ Testable business logic in pure service functions -✅ Cleaner component code (presentation only) -✅ Better separation of concerns -✅ Type-safe actions with discriminated unions -✅ Centralized error handling ## Statistics - Files changed: 26 - Commits created: 25 (squashed into 1) - New files: 17 - Removed files: 5 - TypeScript errors: 0 - Lint errors: 0 ## Testing Manual testing required for: - Editor functionality (create, edit, save) - Drag and drop - Focus mode - Keyboard shortcuts (Cmd/Ctrl + Enter) - Auto-save to localStorage
-
- 22 Dec, 2025 6 commits
-
-
Johnny authored
-
Johnny authored
-
Steven authored
- Adjust CodeBlock styling for better layout and spacing - Reorganize copy button positioning with absolute positioning - Simplify button styling and reduce icon sizes - Wrap MermaidBlock in pre tag for consistent structure - Format useDropdownMenuSubHoverDelay hook call for readability
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By:Claude Haiku 4.5 <noreply@anthropic.com>
-
Steven authored
- Create useDropdownMenuSubHoverDelay hook in dropdown-menu component - Encapsulates hover delay behavior for preventing accidental submenu closure - Eliminates code duplication at component usage sites - Simplifies InsertMenu by removing 45 lines of timeout/state management code - Hook provides handleTriggerEnter/Leave and handleContentEnter/Leave handlers - Configurable closeDelay parameter (default 150ms) This makes the hover behavior pattern reusable across any dropdown menu submenus.
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By:Claude Haiku 4.5 <noreply@anthropic.com>
-
Steven authored
Convert protobuf Timestamp objects to Date before formatting to prevent "[object Object]" from appearing in the UI. Fixes #5368
-
Steven authored
- Add request deduplication to getOrFetchUser using RequestDeduplicator - Consolidates multiple simultaneous calls for same user into single API request - Prevents duplicate 401 errors and wasted network traffic - Matches pattern already used by fetchUsers and fetchUserStats - Remove backwards compatibility aliases (getOrFetchUserByName, getOrFetchUserByUsername) - Update all call sites to use canonical getOrFetchUser method Fixes issue where PagedMemoList, useMemoViewState, MainLayout, and UserProfile were making duplicate user fetch requests when loading user data.
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By:Claude Haiku 4.5 <noreply@anthropic.com>
-
- 20 Dec, 2025 5 commits
-
-
Johnny authored
- Added `scheduler` package with core functionalities for job scheduling. - Implemented job registration, execution, and graceful shutdown mechanisms. - Introduced middleware support for logging, recovery from panics, and timeout handling. - Developed cron expression parser to support both 5-field and 6-field formats. - Created comprehensive integration and unit tests for scheduler, job definitions, middleware, and parser functionalities. - Enhanced logging capabilities to track job execution and errors.
-
Johnny authored
- Implemented the Email Plugin for self-hosted Memos instances, providing SMTP email sending capabilities. - Created configuration structure for SMTP settings with validation. - Developed message structure for email content with validation and formatting. - Added synchronous and asynchronous email sending methods. - Implemented error handling and logging for email sending processes. - Included tests for client, configuration, and message functionalities to ensure reliability. - Updated documentation to reflect new features and usage instructions.
-
Johnny authored
-
Johnny authored
-
Johnny authored
-
- 19 Dec, 2025 2 commits
-
-
Steven authored
- Add custom zoom controls with modern glassmorphism styling - Add "Open in Google Maps" button for location markers - Refactor to React component architecture with proper Leaflet integration - Create reusable GlassButton component for maintainability - Use React 18 createRoot for portal rendering - Replace imperative DOM manipulation with declarative React patterns - Add coordinate display to location metadata
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By:Claude Sonnet 4.5 <noreply@anthropic.com>
-
Steven authored
- Remove ListSessions and RevokeSession RPC endpoints - Remove Session message and SessionsSetting from UserSetting - Remove ACCESS_TOKENS key and AccessTokensSetting - Update references to use RefreshTokensUserSetting with its own ClientInfo - Remove UserSessionsSection frontend component - Clean up user store to remove session and access token settings - Regenerate protobuf files The system now uses: - REFRESH_TOKENS for session management with sliding expiration - PERSONAL_ACCESS_TOKENS for long-lived API tokens
-
- 18 Dec, 2025 4 commits
-
-
Steven authored
- Remove SessionCookieName and SessionSlidingDuration constants - Remove ExtractSessionCookieFromHeader() function - Remove SessionIDContextKey and GetSessionID() function - Remove sessionID parameter from SetUserInContext() - Remove SessionID field from AuthResult struct - Remove session cookie extraction from middleware - Update documentation to reflect JWT + PAT only auth Session cookies were never being set since migration to refresh token authentication. This change removes ~50 lines of dead code and clarifies that the system uses JWT access tokens, refresh tokens, and PATs only.
-
Steven authored
- Extract route paths to router/routes.ts as single source of truth - Refactor connect.ts auth interceptor with better structure and error handling - Add TokenRefreshManager class to prevent race conditions - Implement smart redirect logic for public/private routes - Support unauthenticated access to explore and user profile pages - Add proper error handling for missing access tokens - Extract magic strings to named constants - Maintain backward compatibility by aliasing Routes to ROUTES
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By:Claude Sonnet 4.5 <noreply@anthropic.com>
-
Johnny authored
- Fix cookie expiration timezone to use GMT (RFC 6265 compliance) - Use Connect RPC client for token refresh instead of fetch - Fix error code checking (numeric Code.Unauthenticated instead of string) - Prevent infinite redirect loop when already on /auth page - Fix protobuf Timestamp conversion using timestampDate helper - Store access token in sessionStorage to avoid unnecessary refreshes on page reload - Add refresh token cookie fallback for attachment authentication - Improve error handling with proper type checking
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By:Claude Sonnet 4.5 <noreply@anthropic.com>
-
Johnny authored
-
- 17 Dec, 2025 3 commits
- 16 Dec, 2025 3 commits
-
-
Johnny authored
-
Johnny authored
-
Steven authored
- Rename grpcweb.ts to connect.ts to reflect ConnectRPC usage - Enable binary protobuf format for improved performance - Update all imports across 26 files from @/grpcweb to @/connect
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By:Claude Sonnet 4.5 <noreply@anthropic.com>
-
- 15 Dec, 2025 1 commit
-
-
Steven authored
Add CreateUser to PublicMethods ACL whitelist to fix "authentication required" error during first-time setup. The CreateUser method already has proper security logic that automatically assigns HOST role to the first user and enforces DisallowUserRegistration setting for subsequent users. Fixes #5352
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By:Claude Sonnet 4.5 <noreply@anthropic.com>
-