fix: apply the persisted Favorites filter on initial load (reload shows filtered tasks) - EXO-88376 - #628
Merged
Jihed525 merged 1 commit intoJul 21, 2026
Conversation
… shows filtered tasks - EXO-88376 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
ahamdi
approved these changes
Jul 20, 2026
Jihed525
added a commit
that referenced
this pull request
Jul 22, 2026
## What Backport of #619, #624, #628, #629 onto `develop`. Adds a **"Favorites only"** filter for tasks (follow-up to Favorites #615 / EXO-88316), with the fixes that followed after real-world testing: - **#619** — `favorite` query param on `GET /tasks/filter` (batched via `FavoriteService`) + a "Favorites only" toggle in the Sort & Filter drawer, persisted in localStorage. - **#624** — un-bookmarking a task now removes it from the favorites-filtered list immediately (list rows carry `favorite` state, front-end listens for `metadata.favorite.updated`); drawer star recolored to neutral grey. - **#628** — the persisted "Favorites only" toggle is now honored on the *first* fetch after a page reload in My Tasks (was previously applied only after the initial unfiltered fetch). - **#629** — same reload fix extended to the project/space board view, which #628 had missed. ## Backport notes Cherry-picked the 4 commits onto `develop`. Two conflicts, both resolved: - `TaskRestService.java`: import conflict (develop already had `FavoriteService` imported for an unrelated feature); also dropped a private `isFavorite(String, long)` helper introduced by #624 that duplicated `FavoriteUtil.isFavorite`, already present on `develop` since #622 (`Favorites for projects & tasks - EXO-88316`) — it was unused here since `getTaskById` on `develop` already goes through `FavoriteUtil`. - `TasksViewDashboard.vue`: #629's diff assumed `favorite` had been dropped from this file by an intermediate commit that only exists on `feature/ai-contribution`, not `develop` — on `develop` the field was already being carried through (from #619/#624), so the "fix" was already effectively in place; resolved by keeping upstream's exact wording where it was purely a stylistic difference (`!!x` vs `x || false`), for consistency. ## Test - `mvn -pl services -am -Dcheckstyle.skip=true -DskipTests install` → BUILD SUCCESS - `mvn -pl services -Dcheckstyle.skip=true -Dtest=TestTaskRestService test` → 20 tests, 0 failures/errors 🤖 Generated with [Claude Code](https://claude.com/claude-code)
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.



Follow-up to #619/#624 addressing @jihed_chabbeh's report on EXO-88376: after a page reload, the "Favorites only" toggle is restored ON but the displayed list is not filtered (shows all tasks).
Root cause
In
TasksDashboard.vuecreated(),this.getTasksByPrimary(this.primaryFilter)fires the initialsearchTasks()before the persisted filters are restored from localStorage.searchTasks()readsthis.filterTasks, whosefavoriteis still the defaultfalseat that moment; the persisted value is only restored a few lines later. So the toggle ends up ON while the initial/tasks/filterrequest went out withfavorite=(empty) → unfiltered list. (The restoredgroupBy/orderBy/showCompletedTaskswere also applied after the first fetch — same ordering flaw.)Fix
Move the localStorage-restore block above
getTasksByPrimary(...)increated(), so the first fetch honors the persisted filters. Confirmed the only primary filter on load isALL, whose branch does not clobberfavoriteand re-readsgroupBy/orderByfrom the same key — so no regression to the date-primary filters (which force ungrouped and are only reached via toolbar events, never on load).TasksViewDashboard.vue(project view) needs no change — it does not persist the favorite filter (only group/order/completed), so it has no restore-on-reload mismatch.Verification
Built the task WAR and verified live on a 7.3.x-ai-contribution build: with the favorites filter persisted, after a page reload the initial
GET /tasks/filternow carriesfavorite=true(wasfavorite=before the fix) → the list is filtered from the first render. Front-end only, lint clean.🤖 Generated with Claude Code