Conversation
Implements infinite scroll pagination for menu list, menu item list, and linkable items dropdown with page size of 20. Shows loading spinner when fetching more items. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Fix pagination not triggering after second page by properly tracking state changes in LaunchedEffect keys - Remove inaccurate menu item count from menu list - Remove unused fetchAllMenuItems function - Move Edit Items button to end of menu card, centered vertically - Fix detekt warnings: swallowed exceptions, unused imports, complexity - Extract MenuItemListContent and sibling helper functions Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The ExposedDropdownMenu doesn't support LazyColumn (SubcomposeLayout intrinsic measurement issue), causing crashes when opening the dropdown. This replaces it with a ModalBottomSheet which properly supports pagination with LazyColumn. Also restores PAGE_SIZE to 20 (was 5 for testing). Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This resource was left over after removing the menu item count feature. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Extract duplicate type selection label logic to helper function - Simplify parseErrorMessage by consolidating redundant cases - Consolidate findPreviousSiblingIndex/findNextSiblingIndex into single function Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Prevents race conditions when multiple pagination requests occur in rapid succession. Each pagination function now uses a mutex to ensure atomic read-check-update operations, preventing duplicate items or incorrect pagination state. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Ensure canLoadMore remains true when pagination fails, allowing users to retry after transient errors (network issues, timeouts, etc.). Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Prevents stale data from overwriting state when user rapidly switches between menu item types. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Support all 22 protocols from wp_allowed_protocols(): http, https, ftp, ftps, mailto, news, irc, irc6, ircs, gopher, nntp, feed, telnet, mms, rtsp, sms, svn, tel, fax, xmpp, webcal, urn. Also adds support for anchor links (#section) and protocol-relative URLs (//). Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Derive offset from UI state instead of cache variables to avoid race conditions between initial load and pagination - Set canLoadMore=true on initial load errors to allow retry Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Pre-compute parent-to-children mapping to reduce child lookup from O(n) to O(1) per item, improving overall complexity from O(n²) to O(n log n). Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Use when expression to reduce return statements from 4 to 2. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add light and dark mode previews for MenuListScreen, MenuDetailScreen, MenuItemListScreen, and MenuItemDetailScreen showing various states including loading, empty, error, and populated views. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…-Android into issue/menus-compose-previews Conflicts: WordPress/src/main/java/org/wordpress/android/ui/navmenus/screens/MenuItemDetailScreen.kt
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Restore onDismissRequest and reset showBottomSheet after hiding, so users can dismiss by tapping the scrim or swiping down, and the sheet is properly removed from composition after item selection. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Sync currentMenuItems cache after successful reorder to prevent stale data - Show error to user instead of silently returning on cache misses in navigation - Add navigateTo() helper with null-check logging for navController - Log JSON parsing failures in parseJsonStringArray() instead of silently swallowing Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Collaborator
Generated by 🚫 Danger |
Contributor
|
|
Contributor
|
|
- Sync currentMenuItems cache after successful reorder to prevent stale data - Show error to user instead of silently returning on cache misses in navigation - Add navigateTo() helper with null-check logging for navController - Log JSON parsing failures in parseJsonStringArray() instead of silently swallowing Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> � Conflicts: � WordPress/src/main/java/org/wordpress/android/ui/navmenus/NavMenusViewModel.kt
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## trunk #22576 +/- ##
==========================================
- Coverage 38.18% 38.17% -0.01%
==========================================
Files 2238 2238
Lines 111776 111808 +32
Branches 15586 15591 +5
==========================================
+ Hits 42677 42680 +3
- Misses 65558 65588 +30
+ Partials 3541 3540 -1 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
1 task
Add navMenuItemType to buildMenuItemCreateParams and buildMenuItemUpdateParams so the API receives the correct item type (custom, post_type, taxonomy, post_type_archive). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The previous approach used mapTypeLabelToType() which matched against hardcoded English display strings (e.g. "Page", "Post"). These labels are localized by the WordPress API, so on non-English sites all items would incorrectly map to TYPE_CUSTOM. Now uses the NavMenuItemType enum from the API response directly. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
sanitizeInput() was calling trim() on every keystroke, which stripped trailing spaces while typing and made it difficult to enter multi-word text. Now only enforces max length during input, and trims whitespace when building models at save time. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add imePadding() to MenuDetailScreen and MenuItemDetailScreen so the Save button remains visible above the keyboard. Also inset the auto-add switch row to prevent it from extending to the screen edge. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Instead of rejecting URLs without recognized protocols, normalize them at save time by prepending https:// when needed. Anchor links, relative paths, and recognized protocols (mailto:, tel:, etc.) are preserved as-is. This matches WordPress web behavior. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.





Description
Partially addresses CMM-1166.
This PR is the result of asking Claude to investigate the Menus feature and locate potentially serious issues. The following problems were found and fixed in this PR:
updateMenuItemOrder()now updatescurrentMenuItemsafter a successful server-side swap, preventing stale data from causing incorrect menu order assignments, wrong available parents, and cascading reorder failuresnavigateToEditMenu(),navigateToMenuItems(), andnavigateToEditMenuItem()now log a warning and show an error to the user instead of silently returning when an item isn't found in cachenavigateTo()helper with null-check logging so navigation failures whennavControllerisn't set are visible in logs instead of silently swallowedparseJsonStringArray()now logs parse failures viaAppLog.winstead of silently returning an empty listThese two bugs found during testing are also fixed:
Testing instructions
Reorder menu items:
Navigation error handling:
Sanitize input:
Keyboard hides Save button:
Link URL validation: