Skip to content

chore: remove journey provider context wrapper from journey cards#8586

Merged
Ur-imazing merged 33 commits intomainfrom
urimchae/nes-316-substitute-journey-provider-wrapping-for-individual-journey
Feb 19, 2026
Merged

chore: remove journey provider context wrapper from journey cards#8586
Ur-imazing merged 33 commits intomainfrom
urimchae/nes-316-substitute-journey-provider-wrapping-for-individual-journey

Conversation

@Ur-imazing
Copy link
Copy Markdown
Contributor

@Ur-imazing Ur-imazing commented Jan 13, 2026

Summary by CodeRabbit

  • Refactor

    • Simplified list and template rendering by removing intermediate providers so item cards render directly.
  • New Features

    • Toolbar and menu items now accept journey/journeyId props enabling direct, prop-driven links and actions (analytics, responses, create/use/duplicate/copy flows).
    • Added extra template journey fixtures for template-related flows.
  • Tests

    • Expanded and parameterized tests to cover both prop-driven and context-driven scenarios across duplication, copy-to-team, template actions and toolbar items.

@Ur-imazing Ur-imazing requested a review from jianwei1 January 13, 2026 03:52
@Ur-imazing Ur-imazing self-assigned this Jan 13, 2026
@Ur-imazing Ur-imazing added effort: 2 priority: soon type: chore updating folder structure, initializing projects etc; no production code change on stage labels Jan 13, 2026
@linear
Copy link
Copy Markdown

linear Bot commented Jan 13, 2026

@stage-branch-merger
Copy link
Copy Markdown
Contributor

I see you added the "on stage" label, I'll get this merged to the stage branch!

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Jan 13, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

Removed per-item JourneyProvider wrappers; components now accept explicit journey or journeyId props and propagate them through JourneyCard menus, toolbar items, copy/duplicate dialogs, template actions, and tests; added template fixtures and parameterized tests.

Changes

Cohort / File(s) Summary
Journey & Template list renderers
apps/journeys-admin/src/components/JourneyList/...
ActivePriorityList/ActivePriorityList.tsx, ArchivedJourneyList/ArchivedJourneyList.tsx, JourneyListContent/JourneyListContent.tsx, TrashedJourneyList/TrashedJourneyList.tsx, TemplateList/...
ActiveTemplateList/ActiveTemplateList.tsx, ArchivedTemplateList/ArchivedTemplateList.tsx, TrashedTemplateList/TrashedTemplateList.tsx
Removed per-item JourneyProvider wrappers and JourneyFields casts; render JourneyCard directly and removed unused imports.
JourneyCard menu & actions
apps/journeys-admin/src/components/JourneyList/JourneyCard/...
JourneyCardInfo/JourneyCardInfo.tsx, JourneyCardMenu/DefaultMenu.tsx, JourneyCardMenu/DuplicateJourneyMenuItem/*
Threaded journey prop into menu items and dialog invocations; updated callsites to pass journey / journeyId and added JourneyFields typing where needed.
Copy/Duplicate dialogs & dialog tests
libs/journeys/ui/src/components/CopyToTeamDialog/*, apps/journeys-admin/src/components/Team/CopyToTeamMenuItem/CopyToTeamMenuItem.tsx
Replaced useJourney context with optional journey?: JourneyFields prop; updated component props and tests to support context-or-prop usage.
Toolbar items (analytics/responses)
apps/journeys-admin/src/components/Editor/Toolbar/Items/...
AnalyticsItem/*, ResponsesItem/*, Items.tsx
Added optional journeyId prop to AnalyticsItem and ResponsesItem; replaced useJourney usage with prop-driven journeyId for queries, links, and effects; updated tests and callsites.
Template action & create flows
libs/journeys/ui/src/components/TemplateView/..., apps/journeys-admin/.../CreateTemplateItem/*
CreateJourneyButton/*, CreateTemplateItem/*, TemplateActionButton/*, UseThisTemplateButton/*
Introduced optional `journey?: JourneyFields
Test fixtures & large test updates
apps/journeys-admin/src/components/JourneyList/journeyListData.ts, multiple *.spec.tsx across apps/libs
Added new template fixture journeys; many tests were parameterized/rewritten to pass journey or journeyId props instead of relying on JourneyProvider; large new/expanded tests for duplicate/copy/menu/template paths.

Sequence Diagram(s)

sequenceDiagram
  participant User as User
  participant JourneyCard as JourneyCard
  participant DefaultMenu as DefaultMenu
  participant DuplicateItem as DuplicateJourneyMenuItem
  participant CopyDialog as CopyToTeamDialog
  participant API as GraphQL_API

  User->>JourneyCard: open card menu
  JourneyCard->>DefaultMenu: render menu (pass journey prop)
  User->>DefaultMenu: click "Duplicate" / "Copy"
  DefaultMenu->>DuplicateItem: invoke duplicate action (journey forwarded)
  DuplicateItem->>CopyDialog: open CopyToTeamDialog (journey prop)
  CopyDialog->>API: duplicateJourney mutation (uses journey.id)
  API-->>CopyDialog: mutation result
  CopyDialog-->>User: show success / trigger navigation
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

Suggested reviewers

  • tataihono
  • mikeallisonJS
🚥 Pre-merge checks | ✅ 5 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 15.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'chore: remove journey provider context wrapper from journey cards' directly summarizes the main change—removing Journey context provider wrappers from cards.
Linked Issues check ✅ Passed The PR implements the core requirement from NES-316: replacing per-card Journey context provider wrapping with prop drilling, reducing context providers instantiated during card rendering.
Out of Scope Changes check ✅ Passed All changes directly support the objective of removing Journey provider context wrappers and passing journey data via props through subcomponents; no unrelated modifications detected.
Merge Conflict Detection ✅ Passed ✅ No merge conflicts detected when merging into main

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch urimchae/nes-316-substitute-journey-provider-wrapping-for-individual-journey

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@nx-cloud
Copy link
Copy Markdown

nx-cloud Bot commented Jan 13, 2026

View your CI Pipeline Execution ↗ for commit 9391ad9

Command Status Duration Result
nx run journeys-admin-e2e:e2e ✅ Succeeded 32s View ↗

☁️ Nx Cloud last updated this comment at 2026-02-19 21:57:15 UTC

@github-actions github-actions Bot temporarily deployed to Preview - journeys-admin January 13, 2026 03:54 Inactive
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jan 13, 2026

The latest updates on your projects.

Name Status Preview Updated (UTC)
journeys-admin ✅ Ready journeys-admin preview Fri Feb 20 09:42:13 NZDT 2026

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Nitpick comments (7)
apps/journeys-admin/src/components/JourneyList/ArchivedJourneyList/ArchivedJourneyList.tsx (1)

151-155: Redundant key prop on JourneyCard.

The key is already specified on the parent Grid component (line 148). The key on JourneyCard is unnecessary since React only needs the key on the outermost element in the map iteration.

Suggested fix
-                <JourneyCard
-                  key={journey.id}
-                  journey={journey}
-                  refetch={refetch}
-                />
+                <JourneyCard journey={journey} refetch={refetch} />
apps/journeys-admin/src/components/TemplateList/TrashedTemplateList/TrashedTemplateList.tsx (1)

153-157: Redundant key prop on JourneyCard.

The key is already specified on the parent Grid component (line 150). Remove the duplicate key from JourneyCard.

Suggested fix
-                <JourneyCard
-                  key={journey.id}
-                  journey={journey}
-                  refetch={refetch}
-                />
+                <JourneyCard journey={journey} refetch={refetch} />
apps/journeys-admin/src/components/JourneyList/TrashedJourneyList/TrashedJourneyList.tsx (1)

163-167: Redundant key prop on JourneyCard.

The key is already specified on the parent Grid component (line 160). Remove the duplicate key from JourneyCard.

Suggested fix
-                <JourneyCard
-                  key={journey.id}
-                  journey={journey}
-                  refetch={refetch}
-                />
+                <JourneyCard journey={journey} refetch={refetch} />
apps/journeys-admin/src/components/TemplateList/ActiveTemplateList/ActiveTemplateList.tsx (1)

139-143: Redundant key prop on JourneyCard.

The key is already specified on the parent Grid component (line 136). Remove the duplicate key from JourneyCard.

Suggested fix
-                <JourneyCard
-                  key={journey.id}
-                  journey={journey}
-                  refetch={refetch}
-                />
+                <JourneyCard journey={journey} refetch={refetch} />
apps/journeys-admin/src/components/JourneyList/ActiveJourneyList/ActivePriorityList/ActivePriorityList.tsx (1)

88-93: LGTM with minor nit: redundant key prop.

The variant handling is correct—casting key as JourneyCardVariant works since allActiveJourneys is keyed by JourneyCardVariant enum values. The direct rendering without JourneyProvider simplifies the component hierarchy.

Minor: The key on JourneyCard (line 89) is redundant since Grid (line 87) already has key={journey.id}.

Optional: Remove redundant key
             <JourneyCard
-              key={journey.id}
               journey={journey}
               refetch={refetch}
               variant={key as JourneyCardVariant}
             />
apps/journeys-admin/src/components/JourneyList/JourneyListContent/JourneyListContent.tsx (1)

586-590: Remove duplicate key prop.

The key is already set on the parent Grid element (line 574). The key on JourneyCard is redundant.

Suggested fix
-                    <JourneyCard
-                      key={journey.id}
-                      journey={journey}
-                      refetch={refetch}
-                    />
+                    <JourneyCard journey={journey} refetch={refetch} />
apps/journeys-admin/src/components/TemplateList/ArchivedTemplateList/ArchivedTemplateList.tsx (1)

140-144: Remove duplicate key prop.

Same issue as JourneyListContent.tsx — the key is already on the parent Grid (line 137).

Suggested fix
-                <JourneyCard
-                  key={journey.id}
-                  journey={journey}
-                  refetch={refetch}
-                />
+                <JourneyCard journey={journey} refetch={refetch} />
📜 Review details

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between ab58543 and 228851d.

📒 Files selected for processing (7)
  • apps/journeys-admin/src/components/JourneyList/ActiveJourneyList/ActivePriorityList/ActivePriorityList.tsx
  • apps/journeys-admin/src/components/JourneyList/ArchivedJourneyList/ArchivedJourneyList.tsx
  • apps/journeys-admin/src/components/JourneyList/JourneyListContent/JourneyListContent.tsx
  • apps/journeys-admin/src/components/JourneyList/TrashedJourneyList/TrashedJourneyList.tsx
  • apps/journeys-admin/src/components/TemplateList/ActiveTemplateList/ActiveTemplateList.tsx
  • apps/journeys-admin/src/components/TemplateList/ArchivedTemplateList/ArchivedTemplateList.tsx
  • apps/journeys-admin/src/components/TemplateList/TrashedTemplateList/TrashedTemplateList.tsx
🧰 Additional context used
📓 Path-based instructions (3)
**/*.{ts,tsx,js,jsx}

📄 CodeRabbit inference engine (.cursor/rules/base.mdc)

**/*.{ts,tsx,js,jsx}: Use early returns whenever possible to make the code more readable.
Use descriptive variable and function/const names.
Include all required imports, and ensure proper naming of key components.

Files:

  • apps/journeys-admin/src/components/TemplateList/ArchivedTemplateList/ArchivedTemplateList.tsx
  • apps/journeys-admin/src/components/TemplateList/TrashedTemplateList/TrashedTemplateList.tsx
  • apps/journeys-admin/src/components/JourneyList/ActiveJourneyList/ActivePriorityList/ActivePriorityList.tsx
  • apps/journeys-admin/src/components/JourneyList/TrashedJourneyList/TrashedJourneyList.tsx
  • apps/journeys-admin/src/components/JourneyList/JourneyListContent/JourneyListContent.tsx
  • apps/journeys-admin/src/components/JourneyList/ArchivedJourneyList/ArchivedJourneyList.tsx
  • apps/journeys-admin/src/components/TemplateList/ActiveTemplateList/ActiveTemplateList.tsx
**/*.{ts,tsx}

📄 CodeRabbit inference engine (.cursor/rules/base.mdc)

Define a type if possible.

Files:

  • apps/journeys-admin/src/components/TemplateList/ArchivedTemplateList/ArchivedTemplateList.tsx
  • apps/journeys-admin/src/components/TemplateList/TrashedTemplateList/TrashedTemplateList.tsx
  • apps/journeys-admin/src/components/JourneyList/ActiveJourneyList/ActivePriorityList/ActivePriorityList.tsx
  • apps/journeys-admin/src/components/JourneyList/TrashedJourneyList/TrashedJourneyList.tsx
  • apps/journeys-admin/src/components/JourneyList/JourneyListContent/JourneyListContent.tsx
  • apps/journeys-admin/src/components/JourneyList/ArchivedJourneyList/ArchivedJourneyList.tsx
  • apps/journeys-admin/src/components/TemplateList/ActiveTemplateList/ActiveTemplateList.tsx
apps/**/*.{js,jsx,ts,tsx}

📄 CodeRabbit inference engine (.cursor/rules/apps.mdc)

apps/**/*.{js,jsx,ts,tsx}: Always use MUI over HTML elements; avoid using CSS or tags.
Use descriptive variable and function/const names. Also, event functions should be named with a “handle” prefix, like “handleClick” for onClick and “handleKeyDown” for onKeyDown.
Implement accessibility features on elements. For example, a tag should have a tabindex=“0”, aria-label, on:click, and on:keydown, and similar attributes.

Files:

  • apps/journeys-admin/src/components/TemplateList/ArchivedTemplateList/ArchivedTemplateList.tsx
  • apps/journeys-admin/src/components/TemplateList/TrashedTemplateList/TrashedTemplateList.tsx
  • apps/journeys-admin/src/components/JourneyList/ActiveJourneyList/ActivePriorityList/ActivePriorityList.tsx
  • apps/journeys-admin/src/components/JourneyList/TrashedJourneyList/TrashedJourneyList.tsx
  • apps/journeys-admin/src/components/JourneyList/JourneyListContent/JourneyListContent.tsx
  • apps/journeys-admin/src/components/JourneyList/ArchivedJourneyList/ArchivedJourneyList.tsx
  • apps/journeys-admin/src/components/TemplateList/ActiveTemplateList/ActiveTemplateList.tsx
🧠 Learnings (7)
📚 Learning: 2025-12-19T04:58:24.460Z
Learnt from: CR
Repo: JesusFilm/core PR: 0
File: apps/watch/AGENTS.md:0-0
Timestamp: 2025-12-19T04:58:24.460Z
Learning: Applies to apps/watch/src/**/*.{ts,tsx} : Preserve existing contracts in components like `VideoBlock` which depend on the full provider stack, video.js, and mux metadata so autoplay, subtitles, and analytics remain intact.

Applied to files:

  • apps/journeys-admin/src/components/TemplateList/ArchivedTemplateList/ArchivedTemplateList.tsx
  • apps/journeys-admin/src/components/JourneyList/ActiveJourneyList/ActivePriorityList/ActivePriorityList.tsx
  • apps/journeys-admin/src/components/JourneyList/JourneyListContent/JourneyListContent.tsx
  • apps/journeys-admin/src/components/JourneyList/ArchivedJourneyList/ArchivedJourneyList.tsx
  • apps/journeys-admin/src/components/TemplateList/ActiveTemplateList/ActiveTemplateList.tsx
📚 Learning: 2025-11-11T23:22:02.196Z
Learnt from: mikeallisonJS
Repo: JesusFilm/core PR: 8156
File: apis/api-journeys-modern/src/lib/google/googleAuth.ts:0-0
Timestamp: 2025-11-11T23:22:02.196Z
Learning: In apis/api-journeys-modern, use the validated `env` object from `../../env` instead of accessing `process.env` directly for environment variables that are defined in env.ts (e.g., GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, INTEGRATION_ACCESS_KEY_ENCRYPTION_SECRET). This eliminates the need for runtime validation checks since Zod validates them at application startup.

Applied to files:

  • apps/journeys-admin/src/components/JourneyList/ActiveJourneyList/ActivePriorityList/ActivePriorityList.tsx
  • apps/journeys-admin/src/components/JourneyList/JourneyListContent/JourneyListContent.tsx
📚 Learning: 2025-04-29T04:56:45.588Z
Learnt from: Ur-imazing
Repo: JesusFilm/core PR: 6382
File: apps/journeys-admin/src/components/JourneyList/ArchivedJourneyList/ArchivedJourneyList.spec.tsx:149-150
Timestamp: 2025-04-29T04:56:45.588Z
Learning: The trailing "00" characters in journey card text content assertions are intentional in the JourneyList component tests.

Applied to files:

  • apps/journeys-admin/src/components/JourneyList/JourneyListContent/JourneyListContent.tsx
📚 Learning: 2025-09-16T04:10:28.624Z
Learnt from: jaco-brink
Repo: JesusFilm/core PR: 7679
File: apis/api-gateway/schema.graphql:0-0
Timestamp: 2025-09-16T04:10:28.624Z
Learning: In PR #7679 (showAssistant field), the showAssistant field was intentionally excluded from JourneyUpdateInput because it will be controlled through direct database operations rather than through GraphQL mutations, keeping it out of the public API surface while still being queryable.

Applied to files:

  • apps/journeys-admin/src/components/JourneyList/JourneyListContent/JourneyListContent.tsx
📚 Learning: 2025-12-19T04:58:24.460Z
Learnt from: CR
Repo: JesusFilm/core PR: 0
File: apps/watch/AGENTS.md:0-0
Timestamp: 2025-12-19T04:58:24.460Z
Learning: Applies to apps/watch/src/**/*.tsx : Use optional props with sensible defaults, include className prop for extensibility, and use ReactNode for children and content slots. Name interfaces with component name prefix (e.g., `ComponentNameProps`).

Applied to files:

  • apps/journeys-admin/src/components/JourneyList/JourneyListContent/JourneyListContent.tsx
📚 Learning: 2025-09-08T22:56:21.606Z
Learnt from: mikeallisonJS
Repo: JesusFilm/core PR: 7498
File: apis/api-journeys-modern/src/schema/action/emailAction/blockUpdateEmailAction.mutation.ts:26-36
Timestamp: 2025-09-08T22:56:21.606Z
Learning: In the action mutations migration (PR #7498), the `journeyId` parameter is intentionally kept in blockUpdate*Action mutations even when unused in the resolver, to maintain API compatibility during the migration from the old "api-journeys" endpoint to the modern "api-journeys-modern" endpoint.

Applied to files:

  • apps/journeys-admin/src/components/JourneyList/JourneyListContent/JourneyListContent.tsx
📚 Learning: 2025-12-19T04:58:24.460Z
Learnt from: CR
Repo: JesusFilm/core PR: 0
File: apps/watch/AGENTS.md:0-0
Timestamp: 2025-12-19T04:58:24.460Z
Learning: Applies to apps/watch/src/**/*.{ts,tsx} : Do not introduce new MUI usage; migrate existing MUI to shadcn/Tailwind. New shadcn work should coexist with core shells/wrappers still using MUI until explicit migration tasks retire them.

Applied to files:

  • apps/journeys-admin/src/components/TemplateList/ActiveTemplateList/ActiveTemplateList.tsx
🧬 Code graph analysis (5)
apps/journeys-admin/src/components/TemplateList/ArchivedTemplateList/ArchivedTemplateList.tsx (1)
apps/journeys-admin/src/components/JourneyList/JourneyCard/JourneyCard.tsx (1)
  • JourneyCard (53-383)
apps/journeys-admin/src/components/TemplateList/TrashedTemplateList/TrashedTemplateList.tsx (1)
apps/journeys-admin/src/components/JourneyList/JourneyCard/JourneyCard.tsx (1)
  • JourneyCard (53-383)
apps/journeys-admin/src/components/JourneyList/ActiveJourneyList/ActivePriorityList/ActivePriorityList.tsx (2)
apps/journeys-admin/src/components/JourneyList/JourneyCard/JourneyCard.tsx (1)
  • JourneyCard (53-383)
apps/journeys-admin/src/components/JourneyList/ActiveJourneyList/ActivePriorityList/ActiveJourneyListData.ts (1)
  • journey (93-97)
apps/journeys-admin/src/components/JourneyList/JourneyListContent/JourneyListContent.tsx (1)
apps/journeys-admin/src/components/JourneyList/JourneyCard/JourneyCard.tsx (1)
  • JourneyCard (53-383)
apps/journeys-admin/src/components/TemplateList/ActiveTemplateList/ActiveTemplateList.tsx (1)
apps/journeys-admin/src/components/JourneyList/JourneyCard/JourneyCard.tsx (1)
  • JourneyCard (53-383)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Deploy Preview (journeys-admin, 8586/merge, pull_request, 22)
🔇 Additional comments (1)
apps/journeys-admin/src/components/JourneyList/JourneyListContent/JourneyListContent.tsx (1)

19-22: LGTM!

Import cleanup is appropriate — removed unused JourneyProvider, JourneyFields, and narrowed to only the required exports.

@Ur-imazing Ur-imazing removed the request for review from jianwei1 January 19, 2026 01:31
@github-actions github-actions Bot temporarily deployed to Preview - journeys-admin January 21, 2026 01:28 Inactive
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In
`@apps/journeys-admin/src/components/JourneyList/ArchivedJourneyList/ArchivedJourneyList.tsx`:
- Around line 170-174: The JourneyCard in ArchivedJourneyList is given a
redundant key prop; remove the duplicate key={journey.id} from the JourneyCard
component (leave the key on the parent Grid item) so only the Grid retains the
unique key, updating the JSX where JourneyCard is rendered inside
ArchivedJourneyList/Grid.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jan 22, 2026

Warnings
⚠️ ❗ Big PR (4718 changes)

(change count - 4718): Pull Request size seems relatively large. If Pull Request contains multiple changes, split each into separate PR will helps faster, easier review.

Generated by 🚫 dangerJS against 9391ad9

…or-individual-journey' of https://github.com/JesusFilm/core into urimchae/nes-316-substitute-journey-provider-wrapping-for-individual-journey
@github-actions github-actions Bot temporarily deployed to Preview - journeys January 23, 2026 03:31 Inactive
@github-actions github-actions Bot temporarily deployed to Preview - resources January 23, 2026 03:31 Inactive
@github-actions github-actions Bot temporarily deployed to Preview - videos-admin January 23, 2026 03:31 Inactive
@github-actions github-actions Bot temporarily deployed to Preview - journeys-admin January 23, 2026 03:31 Inactive
@blacksmith-sh

This comment has been minimized.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
libs/journeys/ui/src/components/TemplateView/CreateJourneyButton/CreateJourneyButton.tsx (1)

313-313: Boolean null-check is always truthy.

openTeamDialog is a boolean state initialized with useState(false). The condition openTeamDialog != null is always true for booleans. This should simply be openTeamDialog to conditionally render the dialog.

Proposed fix
-      {openTeamDialog != null && (
+      {openTeamDialog && (
🤖 Fix all issues with AI agents
In
`@libs/journeys/ui/src/components/TemplateView/CreateJourneyButton/CreateJourneyButton.tsx`:
- Line 334: Remove the redundant double-cast on the journey prop: instead of
passing journey={journeyData as unknown as JourneyFields} pass
journey={journeyData} because journeyData is already typed as JourneyFields |
undefined and CopyToTeamDialog accepts an optional journey?: JourneyFields;
update the JSX where CopyToTeamDialog (or the component receiving the prop) is
called so it uses journey={journeyData} and remove the unnecessary casts to
improve clarity.
🧹 Nitpick comments (1)
apps/journeys-admin/src/components/JourneyList/JourneyCard/JourneyCardMenu/DuplicateJourneyMenuItem/DuplicateJourneyMenuItem.spec.tsx (1)

418-445: Fail fast when no primary dialog action is found.

If none of the fallback paths locate a clickable action, the test silently proceeds and later times out. Consider throwing an explicit error to make failures clearer.

♻️ Suggested tweak
       } else {
         // Last resort: click the last button that's not the close button
         const actionButtons = dialogButtons.filter(
           (btn) => !btn.getAttribute('data-testid')?.includes('close')
         )
         if (actionButtons.length > 0) {
           fireEvent.click(actionButtons[actionButtons.length - 1])
+        } else {
+          throw new Error(
+            'Unable to locate a primary action button in CopyToTeamDialog'
+          )
         }
       }
     }

Comment thread libs/journeys/ui/src/components/CopyToTeamDialog/CopyToTeamDialog.spec.tsx Outdated
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

🤖 Fix all issues with AI agents
Verify each finding against the current code and only fix it if needed.


In
`@apps/journeys-admin/src/components/JourneyList/JourneyCard/JourneyCardMenu/DefaultMenu/DefaultMenu.tsx`:
- Line 30: The import JourneyFields is only used for an unsafe cast at the
TemplateActionButton usage around line 269 in DefaultMenu.tsx; update the
TemplateActionButton typing instead of relying on the cast and remove the
JourneyFields import if it becomes unused. Specifically, fix the type
incompatibility at the TemplateActionButton prop (or local variable) so it
accepts the correct shape, replace the unsafe cast currently referencing
JourneyFields with the proper typed interface, and then delete the JourneyFields
import from DefaultMenu.tsx if rg confirms no other references.

In
`@apps/journeys-admin/src/components/Team/CopyToTeamMenuItem/CopyToTeamMenuItem.tsx`:
- Line 232: The prop `journey={journeyData as unknown as JourneyFields}`
bypasses type safety; instead narrow the type so CopyToTeamDialog only receives
what it needs: create a small interface (e.g. JourneyPreview) containing
template and fromTemplateId and type the `journey` prop accordingly, or change
the prop type to a union `journey?: JourneyFields | GetAdminJourneys_journeys`
so TS can verify compatibility; alternatively, if you must cast, use a single
`as JourneyFields` only after confirming the shapes match. Ensure you update the
`CopyToTeamDialog` prop type or the `journey` prop site in CopyToTeamMenuItem to
reference the new JourneyPreview or union type (not `unknown as JourneyFields`).
🧹 Nitpick comments (2)
🤖 Fix all nitpicks with AI agents
Verify each finding against the current code and only fix it if needed.


In
`@apps/journeys-admin/src/components/JourneyList/JourneyCard/JourneyCardMenu/DefaultMenu/DefaultMenu.tsx`:
- Line 30: The import JourneyFields is only used for an unsafe cast at the
TemplateActionButton usage around line 269 in DefaultMenu.tsx; update the
TemplateActionButton typing instead of relying on the cast and remove the
JourneyFields import if it becomes unused. Specifically, fix the type
incompatibility at the TemplateActionButton prop (or local variable) so it
accepts the correct shape, replace the unsafe cast currently referencing
JourneyFields with the proper typed interface, and then delete the JourneyFields
import from DefaultMenu.tsx if rg confirms no other references.

In
`@apps/journeys-admin/src/components/Team/CopyToTeamMenuItem/CopyToTeamMenuItem.tsx`:
- Line 232: The prop `journey={journeyData as unknown as JourneyFields}`
bypasses type safety; instead narrow the type so CopyToTeamDialog only receives
what it needs: create a small interface (e.g. JourneyPreview) containing
template and fromTemplateId and type the `journey` prop accordingly, or change
the prop type to a union `journey?: JourneyFields | GetAdminJourneys_journeys`
so TS can verify compatibility; alternatively, if you must cast, use a single
`as JourneyFields` only after confirming the shapes match. Ensure you update the
`CopyToTeamDialog` prop type or the `journey` prop site in CopyToTeamMenuItem to
reference the new JourneyPreview or union type (not `unknown as JourneyFields`).
apps/journeys-admin/src/components/JourneyList/JourneyCard/JourneyCardMenu/DefaultMenu/DefaultMenu.tsx (1)

30-30: JourneyFields import is only used for the unsafe cast on line 269.

If the TemplateActionButton type incompatibility is resolved (per the existing review comment), this import may no longer be needed. Keep it in sync with whatever fix is applied.

#!/bin/bash
# Check if JourneyFields is used anywhere else in this file besides the cast
rg -n "JourneyFields" apps/journeys-admin/src/components/JourneyList/JourneyCard/JourneyCardMenu/DefaultMenu/DefaultMenu.tsx
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@apps/journeys-admin/src/components/JourneyList/JourneyCard/JourneyCardMenu/DefaultMenu/DefaultMenu.tsx`
at line 30, The import JourneyFields is only used for an unsafe cast at the
TemplateActionButton usage around line 269 in DefaultMenu.tsx; update the
TemplateActionButton typing instead of relying on the cast and remove the
JourneyFields import if it becomes unused. Specifically, fix the type
incompatibility at the TemplateActionButton prop (or local variable) so it
accepts the correct shape, replace the unsafe cast currently referencing
JourneyFields with the proper typed interface, and then delete the JourneyFields
import from DefaultMenu.tsx if rg confirms no other references.
apps/journeys-admin/src/components/Team/CopyToTeamMenuItem/CopyToTeamMenuItem.tsx (1)

232-232: Replace the double cast with a narrower type or union type.

as unknown as JourneyFields bypasses all type safety to accommodate structural mismatch between GetAdminJourneys_journeys (admin list query) and JourneyFields (full fragment). Although CopyToTeamDialog only uses template and fromTemplateId—both present in GetAdminJourneys_journeys—the double cast obscures this requirement.

Instead:

  1. Define a JourneyPreview interface with only template and fromTemplateId, and type the journey prop to that.
  2. Or use a union type: journey?: JourneyFields | GetAdminJourneys_journeys and let TypeScript verify compatibility.
  3. If a single cast is preferred, use as JourneyFields without unknown—if it errors, the mismatch is real and worth addressing.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@apps/journeys-admin/src/components/Team/CopyToTeamMenuItem/CopyToTeamMenuItem.tsx`
at line 232, The prop `journey={journeyData as unknown as JourneyFields}`
bypasses type safety; instead narrow the type so CopyToTeamDialog only receives
what it needs: create a small interface (e.g. JourneyPreview) containing
template and fromTemplateId and type the `journey` prop accordingly, or change
the prop type to a union `journey?: JourneyFields | GetAdminJourneys_journeys`
so TS can verify compatibility; alternatively, if you must cast, use a single
`as JourneyFields` only after confirming the shapes match. Ensure you update the
`CopyToTeamDialog` prop type or the `journey` prop site in CopyToTeamMenuItem to
reference the new JourneyPreview or union type (not `unknown as JourneyFields`).

csiyang
csiyang previously approved these changes Feb 18, 2026
…e-journey-provider-wrapping-for-individual-journey
…or-individual-journey' of https://github.com/JesusFilm/core into urimchae/nes-316-substitute-journey-provider-wrapping-for-individual-journey
@jesus-film-bot
Copy link
Copy Markdown

Plan Error

cannot run "plan": the default workspace at path . is currently locked for this pull request by "plan".
Wait until the previous command is complete and try again

@blacksmith-sh

This comment has been minimized.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Chore effort: 8 priority: soon type: chore updating folder structure, initializing projects etc; no production code change

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants