- 25 Dec, 2025 1 commit
-
-
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 6 commits
-
-
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>
-
Steven authored
The CodeBlock component was refactored in v0.25.3 to use navigator.clipboard.writeText(), which requires HTTPS or localhost. This caused the copy button to fail silently for users accessing Memos over HTTP. This fix adds a fallback to the copy-to-clipboard library (already used by all other copy operations in the codebase) when the native clipboard API is unavailable or fails, ensuring the copy button works reliably in all deployment scenarios.
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By:Claude Sonnet 4.5 <noreply@anthropic.com>
-
Steven authored
-
Steven authored
- Extract shared utilities and constants to eliminate code duplication - Create dedicated Calendar page with year view and month grid - Add date filter navigation with bidirectional URL sync - Fix useTodayDate memoization bug causing stale date references - Standardize naming conventions (get vs generate functions) - Add comprehensive type exports and proper store encapsulation - Implement size variants for compact calendar display
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By:Claude Sonnet 4.5 <noreply@anthropic.com>
-
Johnny authored
-
Davide Truffa authored
-