openedx / openedx/frontend-app-learning
Convert the plugin-store override registry off Redux to React context
@brian-smith-tcril is already working on this.
Since Aug 20, 2026.
- Dominant language
- JavaScript
- Stars
- 70
- Forks
- 335
- Avg merge
- 1d 17h
- Merged PRs (30d)
- 35
Description
Part of #1946 — Redux → React Query migration (Stage 1).
Goal: convert the plugin-store override registry off Redux to a React context / module-level registry, so the plugins reducer can leave src/store.ts.
Context — this is not @openedx/frontend-plugin-framework (FPF). FPF is the declarative PluginSlot system (PluginSlot / DIRECT_PLUGIN / PLUGIN_OPERATIONS), used in src/plugin-slots/* and config-driven — it never touches state.plugins. generic/plugin-store is a separate, bespoke Redux "override-method" registry: registerOverrideMethod stores function references by plugin+method (hence the serializable-check exemption in store.ts), and usePluginsCallback(name, default) folds registered overrides over a default. Its only in-repo consumer is the iframe-URL override in src/courseware/course/sequence/Unit/index.jsx.
Why Stage 1: this is learning's own Redux. Getting redux / react-redux / @reduxjs/toolkit out of learning's package.json must happen before the frontend-base move, so this slice has to go regardless of the special-exams blocker. Only the later reshaping of the override API onto the frontend-base Slot system is Stage 2.
Tasks
- Replace the
pluginslice +registerOverrideMethod+usePluginsCallbackwith a React context / module-level registry. - Remove the
pluginsreducer fromstore.ts(and itsignoredActionsserializable exemption). - Keep the single in-repo consumer (
Unit/index.jsxiframe-URL override) working.
Open question (settle when scoped): whether the external registerOverrideMethod dispatch contract can be preserved in Stage 1, or whether that reshaping must wait for the Stage-2 Slot migration — the redux removal itself does not.
Verify: iframe-URL override still applies; plugins reducer gone from the store; no react-redux in the plugin-store.
Prerequisite for #1978's "specialExams-only" store endpoint.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.