SIGN IN SIGN UP

refactor: convert course recommendations to React Query (#1967)

Replace the Redux `recommendations` slice + thunk with a
`useCourseRecommendations` React Query hook, as the pattern-setter for the
wider Redux -> React Query migration (#1946).

- Add the app-level QueryClient/QueryClientProvider (bare, matching the
  frontend-base shell) and a QueryClientProvider wrapper in the test render.
- Add a colocated data layer: data/queryKeys.ts (rooted at a new `appId`
  constant) + data/apiHooks.ts (useQuery over the existing getCourseRecommendations).
- Delete data/slice.js and data/thunks.js; CourseExit now calls
  postUnsubscribeFromGoalReminders directly from data/api.js.
- Remove the `recommendations` reducer from the store and the test store.
- CourseRecommendations branches on React Query flags (isPending/isError/
  isSuccess) instead of a status string; the tracking event moves to a
  colocated track.js. Behavior is unchanged.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
B
Brian Smith committed
49b102afc05e6d312a28276e8a4ea203de77c99b
Parent: db2134c
Committed by GitHub <noreply@github.com> on 8/7/2026, 6:16:26 AM