Skip to content

feat(marketplace): cross-instance browse page + entry points - #8478

Merged
LWS49 merged 1 commit into
lws49/feat-marketplace-pr1-foundationfrom
lws49/feat-marketplace-pr3-page
Jul 29, 2026
Merged

feat(marketplace): cross-instance browse page + entry points#8478
LWS49 merged 1 commit into
lws49/feat-marketplace-pr1-foundationfrom
lws49/feat-marketplace-pr3-page

Conversation

@LWS49

@LWS49 LWS49 commented Jul 8, 2026

Copy link
Copy Markdown
Collaborator
  • add cross-instance listings index (published only, live counts)
  • add browse page with title search, adoptions/newest sort, row select
  • add sidebar admin entry + /courses/:id/marketplace route
  • add "Import Assessments" button on assessments index (from_tab)
  • add FE api/operations/types, controller + component specs

@LWS49
LWS49 force-pushed the lws49/feat-marketplace-pr2-publish branch 2 times, most recently from cbdd315 to dd68b1c Compare July 8, 2026 04:07
@LWS49
LWS49 force-pushed the lws49/feat-marketplace-pr3-page branch 4 times, most recently from 9b44774 to 052b93c Compare July 8, 2026 04:13
@LWS49
LWS49 force-pushed the lws49/feat-marketplace-pr2-publish branch from dd68b1c to c15d911 Compare July 17, 2026 08:08
@LWS49
LWS49 force-pushed the lws49/feat-marketplace-pr3-page branch from 052b93c to 9169fa1 Compare July 17, 2026 08:09
@LWS49
LWS49 force-pushed the lws49/feat-marketplace-pr2-publish branch from c15d911 to eb92f7b Compare July 29, 2026 10:15
@LWS49
LWS49 force-pushed the lws49/feat-marketplace-pr3-page branch from 9169fa1 to e532cc2 Compare July 29, 2026 10:16
@LWS49
LWS49 force-pushed the lws49/feat-marketplace-pr2-publish branch from eb92f7b to 73a9fc5 Compare July 29, 2026 10:27
@LWS49
LWS49 force-pushed the lws49/feat-marketplace-pr3-page branch from e532cc2 to 97c5401 Compare July 29, 2026 10:28
Base automatically changed from lws49/feat-marketplace-pr2-publish to lws49/feat-marketplace-pr1-foundation July 29, 2026 10:46
@LWS49
LWS49 force-pushed the lws49/feat-marketplace-pr3-page branch from 97c5401 to 2e480cd Compare July 29, 2026 10:49
class Course::AssessmentMarketplaceComponent < SimpleDelegator
include Course::ControllerComponentHost::Component

def self.display_name

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this display_name referenced anywhere?

(Just realizing this now, but gradebook component has a similar field that should also probably be removed.)

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yep, both should be removed. Not removing the gradebook one in this commit so that this branch stays marketplace-only; lmk if you prefer for me to do so instead.

Thought I needed to add it because app/controllers/components/course/controller_component_host.rb has a def display_name; this is meant to override that, but that's old code that is meant to feed the Slim view, which is now fully retired in favour of jbuilder. Component titles now come from course.componentTitles.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a new “Assessment Marketplace” feature area under a course, including a cross-instance listings index endpoint, a React browse page (sorting + title search + row selection), new navigation entry points (sidebar + route), and an “Import Assessments” button that deep-links into the marketplace.

Changes:

  • Introduces backend marketplace index controller + JSON payload, with controller/component specs.
  • Adds frontend marketplace route, page/table, API client + operations/types, and component/page tests.
  • Wires new entry points: admin sidebar item, /courses/:id/marketplace route, and an “Import Assessments” button on the assessments index.

Reviewed changes

Copilot reviewed 24 out of 24 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
spec/controllers/course/assessment/marketplace/listings_controller_spec.rb Controller spec coverage for marketplace listings JSON (published-only + cross-instance visibility).
spec/controllers/course/assessment_marketplace_component_spec.rb Spec coverage for sidebar visibility gating by ability.
config/routes.rb Adds /courses/:id/marketplace and marketplace listings routes.
client/locales/zh.json Adds marketplace/import translations (zh).
client/locales/ko.json Adds marketplace/import translations (ko).
client/locales/en.json Adds marketplace/import translations (en).
client/app/routers/course/marketplace.tsx New course sub-router for marketplace page.
client/app/routers/course/index.tsx Registers marketplace router under course routes.
client/app/bundles/course/translations.ts Adds course component title + sidebar item translation keys.
client/app/bundles/course/marketplace/types.ts Defines MarketplaceListing FE type.
client/app/bundles/course/marketplace/translations.ts Adds marketplace page/table translation messages.
client/app/bundles/course/marketplace/pages/MarketplaceIndex/MarketplaceTable.tsx Implements listings table (sort/search/select + bulk duplicate toolbar).
client/app/bundles/course/marketplace/pages/MarketplaceIndex/index.tsx Marketplace index page that preloads listings and renders the table.
client/app/bundles/course/marketplace/pages/MarketplaceIndex/test/index.test.tsx Tests default sorting, re-sorting, and title filtering behavior.
client/app/bundles/course/marketplace/operations.ts Adds fetchListings operation using the marketplace API.
client/app/bundles/course/assessment/translations.ts Adds “Import Assessments” translation entry for assessments index.
client/app/bundles/course/assessment/pages/AssessmentsIndex/index.tsx Adds Import button alongside New Assessment button.
client/app/bundles/course/assessment/pages/AssessmentsIndex/ImportAssessmentsButton.tsx New button linking to marketplace with from_tab query param.
client/app/bundles/course/assessment/pages/AssessmentsIndex/test/ImportAssessmentsButton.test.tsx Tests the marketplace deep-link and hidden state when disallowed.
client/app/api/course/Marketplace.ts Adds marketplace index() API call + typing for response payload.
app/views/course/assessment/marketplace/listings/index.json.jbuilder Adds listings index JSON response shape for the marketplace page.
app/controllers/course/assessment/marketplace/listings_controller.rb New marketplace listings controller (index + aggregation queries).
app/controllers/course/assessment/marketplace/controller.rb New base controller binding marketplace component.
app/controllers/components/course/assessment_marketplace_component.rb Adds marketplace component + admin sidebar item gate by ability.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread config/routes.rb
Comment thread client/locales/zh.json
@LWS49
LWS49 force-pushed the lws49/feat-marketplace-pr3-page branch from 2e480cd to 9eccba7 Compare July 29, 2026 11:34
- add cross-instance listings index (published only, live counts)
- add browse page with title search, adoptions/newest sort, row select
- add sidebar admin entry + /courses/:id/marketplace route
- add "Import Assessments" button on assessments index (from_tab)
- add FE api/operations/types, controller + component specs
@LWS49
LWS49 force-pushed the lws49/feat-marketplace-pr3-page branch from 9eccba7 to c1588e3 Compare July 29, 2026 11:40
@LWS49
LWS49 merged commit 936edc8 into lws49/feat-marketplace-pr1-foundation Jul 29, 2026
11 checks passed
@LWS49
LWS49 deleted the lws49/feat-marketplace-pr3-page branch July 29, 2026 12:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants