Skip to content
Draft
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
77 commits
Select commit Hold shift + click to select a range
89559a4
refactor: migrate to frontend-base
arbrandes Apr 27, 2025
1d29810
refactor: remove/update dotfiles
arbrandes Jun 25, 2025
b8f4d49
fix: test environment selection
arbrandes Jun 26, 2025
9b439d7
fix: i18n message export
arbrandes Jun 26, 2025
2045854
fix: make pull_translations
arbrandes Jun 26, 2025
268ccc8
fix: a couple of appId imports
arbrandes Jun 26, 2025
c621d58
test: remove unused setupTest line
arbrandes Jun 27, 2025
d0051d0
chore: prepare for publication
arbrandes Jun 27, 2025
8175d7e
chore: clean up npmignore
arbrandes Jun 27, 2025
b2c6ec2
chore: clean up gitignore
arbrandes Jun 27, 2025
d0c27f4
fix: dev site title
arbrandes Jun 27, 2025
6202f7b
feat: handle dashboard role
arbrandes Jun 28, 2025
057b925
feat: Prepare for publication to NPM (#673)
arbrandes Jun 28, 2025
6bed030
chore: bump frontend-base
arbrandes Jun 28, 2025
6f4bf0a
1.0.0-alpha.1
arbrandes Jun 28, 2025
dd70abd
chore: bump frontend-base
arbrandes Jun 28, 2025
2509d1b
1.0.0-alpha.2
arbrandes Jun 28, 2025
3adbbbd
fix: turns out react-unit-test-utils was a straight dependency
arbrandes Jun 28, 2025
7f604ba
1.0.0-alpha.3
arbrandes Jun 28, 2025
f1d18c4
fix: work around inotify handle starvation
arbrandes Jul 24, 2025
a6c5f87
fix: external route roles in dev mode
arbrandes Aug 8, 2025
31581eb
chore: bump frontend-base and regenerate package-lock
arbrandes Aug 20, 2025
117b518
1.0.0-alpha.4
arbrandes Aug 20, 2025
2c295e8
feat!: add design tokens support
arbrandes Dec 8, 2025
0d96fff
build: Update to Node 24
arbrandes Dec 12, 2025
648be5f
fix: missing styles
arbrandes Jan 6, 2026
48eeff4
test: Remove react-unit-test-utils
diana-villalvazo-wgu Jun 17, 2025
21cb518
fix: tests fixed after design tokens support change (#1)
jesusbalderramawgu Jan 27, 2026
4f117df
test: fix minor issues with tests
arbrandes Feb 6, 2026
852444a
1.0.0-alpha.5
arbrandes Feb 9, 2026
35283df
feat: added code spliting on main module
holaontiveros Feb 5, 2026
70576cf
feat!: compile to JS before publishing
arbrandes Feb 6, 2026
0632525
1.0.0-alpha.6
arbrandes Mar 4, 2026
d63d9b7
chore: update base route path to match old paths (#797)
holaontiveros Mar 11, 2026
8f0791e
feat: added a generic creditPurchase Url logic (#675)
NoyanAziz Jun 30, 2025
09748bc
feat: improve unenrollment process (#704)
mubbsharanwar Sep 3, 2025
a7c5da6
feat: added the ability for instances to use local translations fro…
jajjibhai008 Dec 3, 2025
dc10279
fix(deps): remove filesize dependency (#767)
MaxFrank13 Mar 4, 2026
3d66fc9
fix: update react-share to v5 (#795)
MaxFrank13 Mar 4, 2026
69f04d6
fix(docs): use correct image for custom course banner (#796)
brian-smith-tcril Mar 4, 2026
4607ffe
fix: break circular dependency in site.config.test.tsx
arbrandes Mar 4, 2026
ace3a08
refactor: migrate from Redux to React Query
arbrandes Mar 4, 2026
fc81a30
fix: add staleTime to prevent excessive refetching
arbrandes Mar 4, 2026
fff7b19
fix: remove redundant manual refetch on unenroll
arbrandes Mar 4, 2026
cbf7a5b
fix: compute Date.now() per call instead of at module load
arbrandes Mar 4, 2026
07c7083
fix: close modals only after mutation succeeds
arbrandes Mar 4, 2026
9f44855
style: fix lint errors across migrated files
arbrandes Mar 4, 2026
2cbf382
fix: type GlobalDataContext to fix build
arbrandes Mar 5, 2026
97846cd
fix: add @types/jest so ForkTsCheckerWebpackPlugin sees jest globals
arbrandes Mar 5, 2026
909c289
perf: transform course data once in queryFn instead of per card
arbrandes Mar 4, 2026
6a98ddb
refactor: replace BackedDataProvider with React Query cache lookup
arbrandes Mar 4, 2026
a0f6d4f
fix: use explicit initializeBase key for query invalidation
arbrandes Mar 4, 2026
7519b96
fix: use smart retry that skips 4xx errors but retries server/network…
arbrandes Mar 4, 2026
cb3fa6e
refactor: separate mutation keys from query keys
arbrandes Mar 4, 2026
59ce68e
refactor: replace useReducer with useState in context providers
arbrandes Mar 4, 2026
741fd58
test: add normal user happy path test for useInitializeLearnerHome
arbrandes Mar 4, 2026
9522e27
style: fix lint errors in queryHooks test
arbrandes Mar 4, 2026
a932c55
feat: Unenroll survey is configurable through environment variable
marslanabdulrauf Mar 9, 2026
660da94
fix: run tsc-alias after copying assets and limit asset copy to asset…
arbrandes Mar 9, 2026
757064c
fix: address PR #801 review feedback
arbrandes Mar 18, 2026
18f3619
feat: add authenticatedLoader to learner dashboard route
arbrandes Mar 13, 2026
4b636d0
fix: simplify i18n extraction pipeline (#812)
brian-smith-tcril Mar 27, 2026
03f3d7d
feat: support npm workspaces for local development
arbrandes Mar 12, 2026
08b54cd
build: add semantic-release for automated npm publishing
arbrandes Apr 2, 2026
a5e861b
feat: add atlasTranslations to package.json
brian-smith-tcril Apr 6, 2026
59a80e6
feat: wire up frontend-base i18n support
brian-smith-tcril Apr 9, 2026
eb9a2b1
fix: remove App.messages from app.ts (removed in frontend-base)
brian-smith-tcril Apr 9, 2026
c540a57
fix: remove learnerDashboardMessages export from index.ts
brian-smith-tcril Apr 9, 2026
205cc6b
fix: use actual URLs in course action button hrefs
arbrandes Apr 6, 2026
1fa94a4
fix: update tests for link role after href change
arbrandes Apr 6, 2026
3c2ccdc
fix: scope header slot widgets to dashboard role
arbrandes Apr 13, 2026
4a75852
fix: prepend lmsBaseUrl to relative resumeUrl in ResumeButton
arbrandes Apr 13, 2026
a1bc648
fix: fix the header
arbrandes Apr 15, 2026
8976fa3
fix: adopt frontend-base shell style manifest
arbrandes Apr 21, 2026
ad39800
fix: name learner-dashboard-main chunk in routes
arbrandes Apr 22, 2026
0364a0f
chore: add build:ci smoke test to verify webpack build
arbrandes Apr 22, 2026
56b971c
fix: wrap certPreviewUrl with baseAppUrl in CertificateBanner
arbrandes Apr 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 0 additions & 44 deletions .env

This file was deleted.

50 changes: 0 additions & 50 deletions .env.development

This file was deleted.

49 changes: 0 additions & 49 deletions .env.test

This file was deleted.

22 changes: 0 additions & 22 deletions .eslintrc.js

This file was deleted.

3 changes: 1 addition & 2 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
.DS_Store
.eslintcache
env.config.*
node_modules
npm-debug.log
coverage
Expand All @@ -26,4 +25,4 @@ module.config.js
### transifex ###
src/i18n/transifex_input.json
temp
src/i18n/messages
src/i18n/messages
3 changes: 1 addition & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -47,10 +47,9 @@ pull_translations:
&& atlas pull $(ATLAS_OPTIONS) \
translations/frontend-platform/src/i18n/messages:frontend-platform \
Comment thread
arbrandes marked this conversation as resolved.
Outdated
translations/paragon/src/i18n/messages:paragon \
translations/frontend-component-footer/src/i18n/messages:frontend-component-footer \
translations/frontend-app-learner-dashboard/src/i18n/messages:frontend-app-learner-dashboard

$(intl_imports) frontend-platform paragon frontend-component-footer frontend-app-learner-dashboard
$(intl_imports) frontend-platform paragon frontend-app-learner-dashboard

# This target is used by CI.
validate-no-uncommitted-package-lock-changes:
Expand Down
29 changes: 4 additions & 25 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ frontend-app-learner-dashboard
The Learner Home app is a microfrontend (MFE) course listing experience for the Open edX Learning Management System
(LMS). This experience was designed to provide a clean and functional interface to allow learners to view all of their
open enrollments, as well as take relevant actions on those enrollments. It also serves as host to a number of exposed
"widget" containers to provide upsell and discovery widgets as sidebar/footer components.
"widget" containers to provide upsell and discovery widgets as sidebar components.

Quickstart
----------
Expand All @@ -30,31 +30,10 @@ To start the MFE and enable the feature in LMS:
From there, simply load the configured address/port. You should be prompted to log into your LMS if you are not
already, and then redirected to your home page.

Plugins
Widgets
-------
This MFE can be customized using `Frontend Plugin Framework <https://github.com/openedx/frontend-plugin-framework>`_.

The parts of this MFE that can be customized in that manner are documented `here </src/plugin-slots>`_.

Contributing
------------

A core goal of this app is to provide a clean experimentation interface. To promote this end, we have provided a
silo'ed code directory at ``src/widgets`` in which contributors should add their custom widget components. In order to
ensure our ability to maintain the code stability of the app, the code for these widgets should be strictly contained
within the bounds of that directory.

Once written, the widgets can be configured into one of our widget containers at ``src/containers/WidgetContainers``.
This can include conditional logic, as well as Optimizely triggers. It is important to note that our integration tests
will isolate and ignore these containers, and thus testing your widget is the response of the creator/maintainer of the
widget itself.

Some guidelines for writing widgets:

* Code for the widget should be strictly confined to the ``src/widgets`` directory.
* You can load data from the redux store, but should not add or modify fields in that structure.
* Network events should be managed in component hooks, though can use our ``data/constants/requests:requestStates`` for
ease of tracking the request states.
This MFE can be customized with widgets. The parts of this MFE that can be customized in that manner are documented
`here </src/slots>`_.

License
-------
Expand Down
10 changes: 10 additions & 0 deletions app.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
/// <reference types="@openedx/frontend-base" />

declare module 'site.config' {
export default SiteConfig;
}

declare module '*.svg' {
const content: string;
export default content;
}
3 changes: 3 additions & 0 deletions babel.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
const { createConfig } = require('@openedx/frontend-base/config');

module.exports = createConfig('babel');
22 changes: 22 additions & 0 deletions eslint.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
// @ts-check

const { createLintConfig } = require('@openedx/frontend-base/config');

module.exports = createLintConfig(
{
files: [
'src/**/*',
'site.config.*',
],
},
{
ignores: [
'coverage/*',
'dist/*',
'documentation/*',
'node_modules/*',
'**/__mocks__/*',
'**/__snapshots__/*',
],
},
);
72 changes: 0 additions & 72 deletions example.env.config.js

This file was deleted.

11 changes: 7 additions & 4 deletions jest.config.js
Original file line number Diff line number Diff line change
@@ -1,18 +1,21 @@
const { createConfig } = require('@openedx/frontend-build');
const { createConfig } = require('@openedx/frontend-base/config');

module.exports = createConfig('jest', {
module.exports = createConfig('test', {
setupFilesAfterEnv: [
'jest-expect-message',
'<rootDir>/src/setupTest.jsx',
],
modulePaths: ['<rootDir>/src/'],
coveragePathIgnorePatterns: [
'src/segment.js',
'src/postcss.config.js',
'testUtils', // don't unit test jest mocking tools
'src/data/services/lms/fakeData', // don't unit test mock data
'src/test', // don't unit test integration test utils
'src/__mocks__',
],
moduleNameMapper: {
'\\.svg$': '<rootDir>/src/__mocks__/svg.js',
'\\.(jpg|jpeg|png|gif|eot|otf|webp|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$': '<rootDir>/src/__mocks__/file.js',
},
testTimeout: 120000,
testEnvironment: 'jsdom',
});
Loading