-
-
Notifications
You must be signed in to change notification settings - Fork 708
Updates to the pricing page #2067
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
|
## Walkthrough
This update introduces new pricing details for additional usage features and displays these as supplementary text under relevant feature counts in the plan selection UI. Button styles for plan actions are updated, a component typo is corrected, and minor UI styling adjustments are made. No changes to business logic or control flow occur.
## Changes
| File(s) | Change Summary |
|----------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| apps/webapp/app/routes/resources.orgs.$organizationSlug.select-plan.tsx | Added new pricing definitions for additional features; updated button variants for plan actions; fixed typo in `RealtimeConnecurrency` (now `RealtimeConcurrency`); passed extra pricing info as children to feature components; UI style tweaks. |
| .../ConcurrentRuns.tsx, .../TeamMembers.tsx, .../Schedules.tsx, .../RealtimeConcurrency.tsx | Updated function signatures to accept optional `children` prop; render children as dimmed text under main feature count. |
| .../FeatureItem.tsx | Adjusted icon alignment and spacing; changed highlight and border colors to specific indigo shades. |
| apps/webapp/app/assets/icons/MoveToTopIcon.tsx | Added new `MoveToTopIcon` React component rendering an SVG "move to top" icon with stroke styling and clipping path. |
| apps/webapp/app/assets/icons/MoveUpIcon.tsx | Added new `MoveUpIcon` React component rendering an SVG "move up" icon with stroke styling and clipping path. |
| apps/webapp/app/components/Shortcuts.tsx | Added two new keyboard shortcuts for the Run page: "Jump to root run" (key "t") and "Jump to parent run" (key "p"). |
| apps/webapp/app/components/primitives/TextLink.tsx | Enhanced `TextLink` to support keyboard shortcuts and tooltips; added props `shortcut`, `hideShortcutKey`, and `tooltip`; refactored to unify link content rendering and conditionally wrap with tooltip. |
| apps/webapp/app/presenters/v3/RunPresenter.server.ts | Modified Prisma query to include `parentTaskRun` object with selected fields; removed `parentRunFriendlyId` from returned trace data; no signature changes. |
| apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.runs.$runParam/route.tsx | Removed unused imports; replaced old parent/root icons with new `MoveToTopIcon` and `MoveUpIcon`; updated `TasksTreeView` to accept `parentRun` object instead of `parentRunFriendlyId`; replaced `ShowParentLink` with `ShowParentOrRootLinks` component rendering conditional root/parent links with new icons and shortcuts; minor UI adjustments. |
## Sequence Diagram(s)
```mermaid
sequenceDiagram
User->>RunPage: View run details
RunPage->>RunPresenter: Fetch run with parentTaskRun data
RunPresenter->>RunPage: Return run data including parentTaskRun
RunPage->>TasksTreeView: Render with parentRun prop
TasksTreeView->>ShowParentOrRootLinks: Render root and/or parent links
ShowParentOrRootLinks->>UI: Display "Root" and/or "Parent" links with icons
User->>UI: Use shortcuts "t" (root) or "p" (parent) to navigate Poem
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
🧹 Nitpick comments (1)
apps/webapp/app/components/primitives/TextLink.tsx (1)
60-66
: Minor: repeated shortcut rendering logic can be simplified
renderShortcutKey()
already checksshortcut
andhideShortcutKey
.
The extrashortcut && !tooltip
guard duplicates that logic.
Consider relying on the helper’s own guard to reduce condition nesting.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
Cache: Disabled due to data retention organization setting
Knowledge Base: Disabled due to data retention organization setting
📒 Files selected for processing (6)
apps/webapp/app/assets/icons/MoveToTopIcon.tsx
(1 hunks)apps/webapp/app/assets/icons/MoveUpIcon.tsx
(1 hunks)apps/webapp/app/components/Shortcuts.tsx
(1 hunks)apps/webapp/app/components/primitives/TextLink.tsx
(3 hunks)apps/webapp/app/presenters/v3/RunPresenter.server.ts
(2 hunks)apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.runs.$runParam/route.tsx
(9 hunks)
✅ Files skipped from review due to trivial changes (3)
- apps/webapp/app/components/Shortcuts.tsx
- apps/webapp/app/assets/icons/MoveUpIcon.tsx
- apps/webapp/app/assets/icons/MoveToTopIcon.tsx
⏰ Context from checks skipped due to timeout of 90000ms (7)
- GitHub Check: e2e / 🧪 CLI v3 tests (windows-latest - pnpm)
- GitHub Check: e2e / 🧪 CLI v3 tests (windows-latest - npm)
- GitHub Check: e2e / 🧪 CLI v3 tests (ubuntu-latest - pnpm)
- GitHub Check: e2e / 🧪 CLI v3 tests (ubuntu-latest - npm)
- GitHub Check: units / 🧪 Unit Tests
- GitHub Check: typecheck / typecheck
- GitHub Check: Analyze (javascript-typescript)
🔇 Additional comments (3)
apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.runs.$runParam/route.tsx (1)
1198-1244
: VerifyLinkButton
API accepts the new props
LinkButton
is now passedhideShortcutKey
,shortcut
,LeadingIcon
, and a newvariant="minimal/small"
.
WhileLeadingIcon
andvariant
existed before,hideShortcutKey
&shortcut
are freshly added forTextLink
.If
LinkButton
still forwards unknown props with...rest
things will work, otherwise TypeScript will error or the props will be silently ignored (no shortcut registered).Please double-check the
LinkButton
definition or add the props there as well.apps/webapp/app/presenters/v3/RunPresenter.server.ts (2)
64-71
: Looks good – consistent selection forparentTaskRun
The additional select block mirrors
rootTaskRun
and keeps the query lean.
No objections.
120-121
: Expose nullableparentTaskRun
inrunData
Nice pass-through; downstream consumers can safely rely on the same shape as
rootTaskRun
.
if (shortcut) { | ||
useShortcutKeys({ | ||
shortcut: shortcut, | ||
action: () => { | ||
if (innerRef.current) { | ||
innerRef.current.click(); | ||
} | ||
}, | ||
}); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Avoid conditional hook calls – they break the Rules of Hooks
useShortcutKeys
is invoked only when shortcut
is truthy.
If the component first renders with shortcut={undefined}
and later re-renders with a shortcut the hook order will change, throwing Invariant Violation: Rendered fewer hooks than expected
.
Unconditionally call the hook and gate the feature inside the hook’s own options instead:
- if (shortcut) {
- useShortcutKeys({
- shortcut: shortcut,
- action: () => {
- if (innerRef.current) {
- innerRef.current.click();
- }
- },
- });
- }
+ useShortcutKeys(
+ shortcut
+ ? {
+ shortcut,
+ action: () => innerRef.current?.click(),
+ }
+ : undefined // hook still called, but no-op when undefined
+ );
🤖 Prompt for AI Agents
In apps/webapp/app/components/primitives/TextLink.tsx around lines 45 to 54, the
hook useShortcutKeys is called conditionally based on the shortcut prop, which
violates the Rules of Hooks and can cause runtime errors. To fix this, call
useShortcutKeys unconditionally every render and move the conditional logic
inside the hook's options or implementation so that the shortcut feature is
enabled or disabled internally without changing the hook call order.
{rootRun || parentRun ? ( | ||
<ShowParentOrRootLinks | ||
relationships={{ | ||
root: rootRun | ||
? { | ||
friendlyId: rootRun.friendlyId, | ||
taskIdentifier: rootRun.taskIdentifier, | ||
spanId: rootRun.spanId, | ||
isParent: parentRun ? rootRun.friendlyId === parentRun.friendlyId : true, | ||
} | ||
: undefined, | ||
parent: | ||
parentRun && rootRun?.friendlyId !== parentRun.friendlyId | ||
? { | ||
friendlyId: parentRun.friendlyId, | ||
taskIdentifier: "", | ||
spanId: "", | ||
} | ||
: undefined, | ||
}} | ||
/> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Parent-run link loses its spanId (and taskIdentifier) – navigation will break
relationships.parent
is intentionally created with empty strings:
taskIdentifier: "",
spanId: "",
Yet those empty values are later forwarded to v3RunSpanPath
, resulting in
URLs like /runs/ABC?span=
which 404s and breaks keyboard shortcuts.
Pass the real values that are already present on parentRun
:
- parentRun && rootRun?.friendlyId !== parentRun.friendlyId
- ? { friendlyId: parentRun.friendlyId, taskIdentifier: "", spanId: "" }
+ parentRun && rootRun?.friendlyId !== parentRun.friendlyId
+ ? {
+ friendlyId: parentRun.friendlyId,
+ taskIdentifier: parentRun.taskIdentifier,
+ spanId: parentRun.spanId,
+ }
🤖 Prompt for AI Agents
In
apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.runs.$runParam/route.tsx
around lines 592 to 612, the parentRun object is passed with empty strings for
taskIdentifier and spanId, causing broken navigation links. Update the
relationships.parent object to use the actual taskIdentifier and spanId values
from parentRun instead of empty strings to ensure URLs are correctly formed and
navigation works properly.
The information for the Pro plan now matches the marketing site

Nicer styling for the selected plan state on the onboarding pricing page

Summary by CodeRabbit