From 15caea9e18a15e0026b9128b5e48ed01f611b4f5 Mon Sep 17 00:00:00 2001 From: OpenStaxClaude Date: Wed, 29 Oct 2025 10:46:11 -0400 Subject: [PATCH 1/4] CORE-1287: Port remaining book details page modules from JS to TS (#2786) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Port remaining book details page modules from JS to TS Converted all remaining JavaScript files in src/app/pages/details to TypeScript: Desktop view modules: - desktop-view.js → desktop-view.tsx - details-tab.js → details-tab.tsx - videos-tab.js → videos-tab.tsx - partners.js → partners.tsx - import-*.js → import-*.ts Phone view modules: - phone-view.js → phone-view.tsx - details-pane.js → details-pane.tsx - student-resources-pane.js → student-resources-pane.tsx - instructor-resources-pane.js → instructor-resources-pane.tsx All conversions follow TypeScript best practices: - Avoided using 'any' type - Preferred 'type' to 'interface' - Used type inference where possible - Inline type definitions for function parameters - Line lengths kept under 120 characters 🤖 Generated with [Claude Code](https://claude.com/claude-code) Port remaining book details page modules from JS to TS Converted all remaining JavaScript files in src/app/pages/details to TypeScript: Desktop view modules: - desktop-view.js → desktop-view.tsx - details-tab.js → details-tab.tsx - videos-tab.js → videos-tab.tsx - partners.js → partners.tsx - import-*.js → import-*.ts Phone view modules: - phone-view.js → phone-view.tsx - details-pane.js → details-pane.tsx - student-resources-pane.js → student-resources-pane.tsx - instructor-resources-pane.js → instructor-resources-pane.tsx All conversions follow TypeScript best practices: - Avoided using 'any' type - Preferred 'type' to 'interface' - Used type inference where possible - Inline type definitions for function parameters - Line lengths kept under 120 characters 🤖 Generated with [Claude Code](https://claude.com/claude-code) Revert to JS (loaders) Co-Authored-By: Claude * Lint clean * Test coverage --------- Co-authored-by: Claude Co-authored-by: Roy Johnson --- .../accordion-group/accordion-group.tsx | 22 +-- .../common/get-this-title-files/options.tsx | 20 +-- .../pages/details/common/get-this-title.tsx | 14 +- src/app/pages/details/common/hooks.tsx | 4 +- .../pages/details/common/publication-info.tsx | 6 +- .../common/resource-box/left-content.tsx | 2 +- .../resource-box/resource-box-utils.tsx | 13 +- .../pages/details/{context.tsx => context.ts} | 8 +- .../details/desktop-view/desktop-view.js | 109 -------------- .../details/desktop-view/desktop-view.tsx | 138 ++++++++++++++++++ .../{details-tab.js => details-tab.tsx} | 31 +++- .../details-tab/import-details-tab.js | 3 + ...b.js => import-instructor-resource-tab.ts} | 0 .../partners/{partners.js => partners.tsx} | 50 +++++-- ...-tab.js => import-student-resource-tab.ts} | 0 .../desktop-view/videos-tab/videos-tab.js | 19 --- .../desktop-view/videos-tab/videos-tab.tsx | 21 +++ .../{details-pane.js => details-pane.tsx} | 15 +- .../instructor-resources-pane.js | 104 ------------- .../instructor-resources-pane.tsx | 121 +++++++++++++++ .../pages/details/phone-view/phone-view.js | 104 ------------- .../pages/details/phone-view/phone-view.tsx | 136 +++++++++++++++++ .../student-resources-pane.js | 34 ----- .../student-resources-pane.tsx | 56 +++++++ test/src/data/details-college-algebra.js | 14 +- test/src/pages/details/details-tab.test.tsx | 36 +++++ test/src/pages/details/details.test.tsx | 93 +++++++++++- test/src/pages/details/left-content.test.tsx | 7 +- 28 files changed, 737 insertions(+), 443 deletions(-) rename src/app/pages/details/{context.tsx => context.ts} (93%) delete mode 100644 src/app/pages/details/desktop-view/desktop-view.js create mode 100644 src/app/pages/details/desktop-view/desktop-view.tsx rename src/app/pages/details/desktop-view/details-tab/{details-tab.js => details-tab.tsx} (72%) create mode 100644 src/app/pages/details/desktop-view/details-tab/import-details-tab.js rename src/app/pages/details/desktop-view/instructor-resource-tab/{import-instructor-resource-tab.js => import-instructor-resource-tab.ts} (100%) rename src/app/pages/details/desktop-view/instructor-resource-tab/partners/{partners.js => partners.tsx} (59%) rename src/app/pages/details/desktop-view/student-resource-tab/{import-student-resource-tab.js => import-student-resource-tab.ts} (100%) delete mode 100644 src/app/pages/details/desktop-view/videos-tab/videos-tab.js create mode 100644 src/app/pages/details/desktop-view/videos-tab/videos-tab.tsx rename src/app/pages/details/phone-view/details-pane/{details-pane.js => details-pane.tsx} (70%) delete mode 100644 src/app/pages/details/phone-view/instructor-resources-pane/instructor-resources-pane.js create mode 100644 src/app/pages/details/phone-view/instructor-resources-pane/instructor-resources-pane.tsx delete mode 100644 src/app/pages/details/phone-view/phone-view.js create mode 100644 src/app/pages/details/phone-view/phone-view.tsx delete mode 100644 src/app/pages/details/phone-view/student-resources-pane/student-resources-pane.js create mode 100644 src/app/pages/details/phone-view/student-resources-pane/student-resources-pane.tsx create mode 100644 test/src/pages/details/details-tab.test.tsx diff --git a/src/app/components/accordion-group/accordion-group.tsx b/src/app/components/accordion-group/accordion-group.tsx index b7e57ffb9..31426eee4 100644 --- a/src/app/components/accordion-group/accordion-group.tsx +++ b/src/app/components/accordion-group/accordion-group.tsx @@ -109,8 +109,9 @@ function Item({ type ItemType = { title: string; - inline?: React.ReactNode; contentComponent: React.ReactNode; +} | { + inline: React.ReactNode; }; export default function AccordionGroup({ @@ -161,16 +162,15 @@ export default function AccordionGroup({ preExpanded={preExpandedUuids} data-analytics-nav={analyticsNav} > - {items.map( - (item) => - item.inline || ( - - ) + {items.filter((i) => 'title' in i).map( + (item) => ( + + ) )} diff --git a/src/app/pages/details/common/get-this-title-files/options.tsx b/src/app/pages/details/common/get-this-title-files/options.tsx index da09edad3..e3466066f 100644 --- a/src/app/pages/details/common/get-this-title-files/options.tsx +++ b/src/app/pages/details/common/get-this-title-files/options.tsx @@ -121,7 +121,7 @@ export function WebviewOption({model}: {model: Model}) { const {GiveDialog, openGiveDialog} = useOpenGiveDialog(); const trackDownload = React.useCallback( (event: TrackedMouseEvent) => { - trackLink(event, model.id); + trackLink(event, model.id.toString()); }, [model.id] ); @@ -140,10 +140,10 @@ export function WebviewOption({model}: {model: Model}) { {showCallout && (
@@ -173,12 +173,12 @@ export function PdfOption({model}: {model: Model}) { const {GiveDialog, openGiveDialog} = useOpenGiveDialog(); const trackDownload = React.useCallback( (event: TrackedMouseEvent) => { - trackLink(event, model.id); + trackLink(event, model.id.toString()); }, [model.id] ); - return ( + return pdfLink ? ( - ); + ) : null; } export function usePrintCopyDialog() { @@ -254,8 +254,8 @@ export function KindleOption({model}: {model: Model}) { export function CheggOption({model}: {model: Model}) { return ( -