feat: Revert ability to create Legacy Libraries - #3077
Conversation
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
Thanks for the pull request, @salman2013! This repository is currently maintained by Once you've gone through the following steps feel free to tag them in a comment and let them know that your changes are ready for engineering review. 🔘 Get product approvalIf you haven't already, check this list to see if your contribution needs to go through the product review process.
🔘 Provide contextTo help your reviewers and other members of the community understand the purpose and larger context of your changes, feel free to add as much of the following information to the PR description as you can:
🔘 Get a green buildIf one or more checks are failing, continue working on your changes until this is no longer the case and your build turns green. DetailsWhere can I find more information?If you'd like to get more details on all aspects of the review process for open source pull requests (OSPRs), check out the following resources: When can I expect my changes to be merged?Our goal is to get community contributions seen and reviewed as efficiently as possible. However, the amount of time that it takes to review and merge a PR can vary significantly based on factors such as:
💡 As a result it may take up to several weeks or months to complete a review and merge your PR. |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #3077 +/- ##
==========================================
+ Coverage 95.61% 95.64% +0.02%
==========================================
Files 1391 1403 +12
Lines 33075 33307 +232
Branches 7680 7812 +132
==========================================
+ Hits 31626 31855 +229
- Misses 1384 1389 +5
+ Partials 65 63 -2 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
Pull request overview
Note
Copilot was unable to run its full agentic suite in this review.
This PR removes the in-app “Create Legacy Library” flow and instead routes legacy-library creation users to the Studio “home_library” page via a direct URL.
Changes:
- Update StudioHome “New library” behavior for legacy (v1) libraries to open
${STUDIO_BASE_URL}/home_library. - Update StudioHome tests to assert
window.openis called instead of SPA navigation. - Remove legacy library creation UI/API/hooks/messages and the
/libraries-v1/createroute/export.
Reviewed changes
Copilot reviewed 10 out of 10 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| src/studio-home/StudioHome.tsx | Opens legacy library creation via window.open to home_library instead of client-side routing. |
| src/studio-home/StudioHome.test.tsx | Updates expectation to window.open for legacy library creation. |
| src/library-authoring/index.tsx | Removes export for legacy library creation component. |
| src/library-authoring/create-legacy-library/messages.ts | Deletes legacy create-library i18n messages. |
| src/library-authoring/create-legacy-library/index.ts | Deletes legacy create-library module export. |
| src/library-authoring/create-legacy-library/data/apiHooks.ts | Deletes legacy create-library mutation hook. |
| src/library-authoring/create-legacy-library/data/api.ts | Deletes legacy create-library API helper. |
| src/library-authoring/create-legacy-library/CreateLegacyLibrary.tsx | Deletes legacy create-library page/component. |
| src/library-authoring/create-legacy-library/CreateLegacyLibrary.test.tsx | Removes tests for deleted legacy create-library flow. |
| src/index.jsx | Removes /libraries-v1/create route and CreateLegacyLibrary import usage. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| // Studio home library for legacy libraries | ||
| window.open(`${getConfig().STUDIO_BASE_URL}/home_library`); |
There was a problem hiding this comment.
Actually we need to remove window.open completely - see comment below.
|
Two non-code notes: Testing instructions are stale — the "Getting there" section still says "You should be brought to the new CreateLegacyLibraries page", but that page no longer exists. The instructions should describe what actually happens now (e.g. a new browser tab opens to Commit type — |
|
@irfanuddinahmad This PR is actually the revert of this #2551 I did not make any improvement or any other code addition. |
| {intl.formatMessage(messages.addNewLibraryBtnText)} | ||
| </Button>, | ||
| ); | ||
| } |
There was a problem hiding this comment.
This whole thing needs to be radically simplified:
- We don't want to send users to
${getConfig().STUDIO_BASE_URL}/home_library- that's a legacy UI page for creating v1 libraries. Instead we want to remove all references to creating a v1 library. - Remove
showNewLibraryButton,showV2LibraryURL,showV2LibraryURL,showNewLibraryV2Button- we don't need these flags anymore. We just need one,canCreateNewLibrary(does the user have permission to create v2 libraries?) - Do not use imperative
navigateorwindow.open. Use<Button as="link" ...>instead, since this goes to a new URL.
| if (canCreateNewLibrary) { | |
| headerButtons.push( | |
| <Button | |
| as={Link} | |
| to="/library/create" | |
| variant="outline-primary" | |
| iconBefore={AddIcon} | |
| size="sm" | |
| > | |
| <FormattedMessage {...messages.addNewLibraryBtnText}/> | |
| </Button>, | |
| ); | |
| } |
There was a problem hiding this comment.
@bradenmacdonald
As I understand it, the canCreateNewLibrary flag does not currently exist. The showNewLibraryV2Button field is provided by the backend and indicates whether the user has permission to create a new library.
I see two possibilities:
-
Introduce a new flag in
hooks.tsx, for example:const canCreateNewLibrary = librariesV2Enabled && showNewLibraryV2Button;
-
Since we plan to remove
showNewLibraryV2Button, are you suggesting introducing a new backend flag to represent this permission instead?
Could you clarify which approach you have in mind?
There was a problem hiding this comment.
I was thinking 1. A new variable that represents that libraries v2 are (A) enabled and (B) that the user has permission. But you can keep them split up as two separate variables, if you prefer.
There was a problem hiding this comment.
Thanks for those changes. This looks good now. Do you want me to review and merge?
There was a problem hiding this comment.
@bradenmacdonald Yes please review the changes and if they look fine to you, merge them. Thanks
bradenmacdonald
left a comment
There was a problem hiding this comment.
Thanks! However a simple revert is not the right solution here, as the code we had before still includes some way to create a legacy library. So we need to update this to remove it completely.
Removes all legacy library creation UI, flags, and routing. Replaces showNewLibraryButton/showNewLibraryV2Button with a single canCreateNewLibrary flag computed in the hook, and uses declarative Link navigation instead of imperative navigate/window.open. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
Adding some more clarity: There used to be a legacy frontend page to create Legacy Libraries. It was removed here: openedx/openedx-platform#37454 But, we weren't ready to remove Legacy Libraries yet at that point. So we had to add a temporary MFE frontend page to create Legacy Libraries: #2551 . Reverting that PR will remove the MFE frontend page, which is why I'd suggested it in the parent ticket. However, as @bradenmacdonald pointed out, it seems like there also underlying Legacy Library creation logic which was shared by both the legacy frontend page and the MFE frontend page, and we will need to remove that too. |
Description
In this PR, we reverted the code that added the ability to create legacy libraries.
Ref: #2551
Ticket: openedx/openedx-platform#38056
Testing instructions
Getting there:
Test v2 CreateLibrary unchanged:
Best Practices Checklist
We're trying to move away from some deprecated patterns in this codebase. Please
check if your PR meets these recommendations before asking for a review:
.ts,.tsx).propTypesanddefaultPropsin any new or modified code.src/testUtils.tsx(specificallyinitializeMocks)apiHooks.tsin this repo for examples.messages.tsfiles have adescriptionfor translators to use.../in import paths. To import from parent folders, use@src, e.g.import { initializeMocks } from '@src/testUtils';instead offrom '../../../../testUtils'Settings