feat: migrate Manage Categories to the shared tile-ordering workflow - #999
Open
devin-ai-integration[bot] wants to merge 3 commits into
Open
Conversation
The Manage Categories dialog now persists ordering through the shared tile-ordering coordinator and the atomic PUT /api/tile-order contract instead of the legacy per-entity reorder endpoints. Parent moves persist first via the versioned category PATCH, then the full interleaved order of every changed scope is reported to the coordinator (CAS revisions, explicit conflict handling). The dialog renders sibling order from the coordinator's display orders and shows the shared save-state indicator. Legacy endpoint/fallback removal is tracked in #998. Refs #975. Closes #982. Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Contributor
Author
🤖 Devin AI EngineerI'll be helping with this pull request! Here's what you should know: ✅ I will automatically:
Note: I can only respond to comments from users who have write access to this repository. ⚙️ Control Options:
|
- Use the coordinator's pending display order as the interleaving template so a category-only reorder never reverts a pending image reorder for the same scope; skip scopes left with no members. - Memoize the reordered flat options on baseOptions + coordinator version. - Track all scopes touched by a dialog reorder and surface the one that most urgently needs attention (useMostSevereScope) in the indicator. Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
…ly stale Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
This was referenced Jul 29, 2026
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.
Summary
Closes #982 (epic #975). Manage Categories no longer has its own ordering contract — it persists through the same coordinator + atomic
PUT /api/tile-orderpath as Browse.Before, a dialog drop persisted via two independent requests that could partially succeed:
Now the drop is decomposed into parent moves and per-scope mixed orders:
Key pieces:
interleavedTileOrders(newCats, oldCats, imagesByParent): ScopeOrder[]replacesinterleavedSortOrders, emitting the full interleavedTileOrderItemRef[]per changed scope (image slots keep their positions; unchanged scopes are omitted).displayOrder(reorderFlatOptions+ a coordinator subscription), so pending order doesn't snap back while a save is in flight, and shows the sharedReorderStatusIndicator(unsaved/saving/saved/conflict Refresh–Keep my order/error Retry) for the last-reordered scope.reorderCategoriesInline/reorderImagesInlinewrappers are removed; no runtime frontend caller usesPUT /categories/reorder/PUT /images/reorderanymore. Remaining legacy surface (backend endpoints,api.tswrappers,SortableTileGridnon-coordinator fallback used only by tests) is tracked for removal in chore: remove legacy per-entity reorder endpoints and SortableTileGrid fallback #998.docs/tile-ordering.mdgains a "Manage Categories migration (Migrate Manage Categories to the shared ordering workflow and complete end-to-end verification #982)" section and updated legacy-endpoint notes.Needs human verification (non-blocking): drag feel of the dialog tree with the coordinator-driven order, and the conflict UX ("Keep my order") when two tabs reorder the same scope from Browse and Manage simultaneously.
Refs #975.
Link to Devin session: https://app.devin.ai/sessions/414754bd88374dc693f47100ac269e78