refactor: Get rid of getServerSideProps for /getting-started pages#23003
refactor: Get rid of getServerSideProps for /getting-started pages#23003
getServerSideProps for /getting-started pages#23003Conversation
WalkthroughReplaced the previous getServerSideProps-based data loading with inline server-side logic inside the Page component. The Page now calls getServerSession(buildLegacyRequest(headers, cookies)), redirects to /auth/login if session or session.user is missing, instantiates UserRepository(prisma), loads the user’s teams via findUserTeams({ id: session.user.id }), redirects if no user is found, and computes hasPendingInvites from teams. Updated imports (redirect, getServerSession, UserRepository, prisma, buildLegacyRequest) and removed withAppDirSsr/getServerSideProps and the deleted file apps/web/lib/getting-started/[[...step]]/getServerSideProps.tsx. Metadata generation unchanged. Estimated code review effort🎯 3 (Moderate) | ⏱️ ~15 minutes ✨ Finishing Touches
🧪 Generate unit tests
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. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
getServerSideProps for /getting-started pages
Graphite Automations"Add consumer team as reviewer" took an action on this PR • (08/11/25)1 reviewer was added to this PR based on Keith Williams's automation. |
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (3)
apps/web/app/(use-page-wrapper)/getting-started/[[...step]]/page.tsx (3)
29-29: Remove unnecessary awaits on headers() and cookies()headers() and cookies() are synchronous in the App Router. Dropping await improves clarity and avoids confusing types.
- const session = await getServerSession({ req: buildLegacyRequest(await headers(), await cookies()) }); + const session = await getServerSession({ req: buildLegacyRequest(headers(), cookies()) });
31-33: Call redirect() without return for idiomatic Next.js usageredirect() throws to short-circuit the render. The return is redundant.
- return redirect("/auth/login"); + redirect("/auth/login");(Apply in both places.)
Also applies to: 40-42
35-39: Consider minimal error handling/logging around DB accessfindUserTeams can throw (DB/network). Optional: wrap with try/catch to capture to telemetry (Sentry/Datadog) and let Next’s error boundary handle the rest, or redirect to a safe page if desired.
If you share your logging/telemetry helper, I can propose an idiomatic snippet.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (2)
apps/web/app/(use-page-wrapper)/getting-started/[[...step]]/page.tsx(2 hunks)apps/web/lib/getting-started/[[...step]]/getServerSideProps.tsx(0 hunks)
💤 Files with no reviewable changes (1)
- apps/web/lib/getting-started/[[...step]]/getServerSideProps.tsx
🧰 Additional context used
📓 Path-based instructions (2)
**/*.tsx
📄 CodeRabbit Inference Engine (.cursor/rules/review.mdc)
Always use
t()for text localization in frontend code; direct text embedding should trigger a warning
Files:
apps/web/app/(use-page-wrapper)/getting-started/[[...step]]/page.tsx
**/*.{ts,tsx}
📄 CodeRabbit Inference Engine (.cursor/rules/review.mdc)
Flag excessive Day.js use in performance-critical code; prefer native Date or Day.js
.utc()in hot paths like loops
Files:
apps/web/app/(use-page-wrapper)/getting-started/[[...step]]/page.tsx
🧬 Code Graph Analysis (1)
apps/web/app/(use-page-wrapper)/getting-started/[[...step]]/page.tsx (1)
packages/features/auth/lib/getServerSession.ts (1)
getServerSession(32-136)
apps/web/app/(use-page-wrapper)/getting-started/[[...step]]/page.tsx
Outdated
Show resolved
Hide resolved
|
The latest updates on your projects. Learn more about Vercel for Git ↗︎ |
There was a problem hiding this comment.
Actionable comments posted: 0
🔭 Outside diff range comments (1)
apps/web/modules/getting-started/[[...step]]/onboarding-view.tsx (1)
151-153: Localize “Undefined title” (avoid hardcoded user-facing strings)Per frontend i18n guidelines, avoid embedded literals. Use t() as a fallback.
- <p className="font-cal mb-3 text-[28px] font-medium leading-7"> - {headers[currentStepIndex]?.title || "Undefined title"} - </p> + <p className="font-cal mb-3 text-[28px] font-medium leading-7"> + {headers[currentStepIndex]?.title ?? t("undefined_title")} + </p>Note: Add the "undefined_title" key to locales.
🧹 Nitpick comments (1)
apps/web/modules/getting-started/[[...step]]/onboarding-view.tsx (1)
127-133: Guard next step navigation at end of the flowIf nextIndex >= steps.length, newStep is undefined and stepTransform will send users back to the first step. Add an explicit guard or final redirect.
const goToNextStep = () => { const nextIndex = currentStepIndex + 1; - const newStep = steps[nextIndex]; + if (nextIndex >= steps.length) { + // Consider redirecting to dashboard/event-types or a success page. + router.push("/event-types"); + return; + } + const newStep = steps[nextIndex]; startTransition(() => { router.push(`/getting-started/${stepTransform(newStep)}`); }); };
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (2)
apps/web/app/(use-page-wrapper)/getting-started/[[...step]]/page.tsx(2 hunks)apps/web/modules/getting-started/[[...step]]/onboarding-view.tsx(1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
- apps/web/app/(use-page-wrapper)/getting-started/[[...step]]/page.tsx
🧰 Additional context used
📓 Path-based instructions (2)
**/*.tsx
📄 CodeRabbit Inference Engine (.cursor/rules/review.mdc)
Always use
t()for text localization in frontend code; direct text embedding should trigger a warning
Files:
apps/web/modules/getting-started/[[...step]]/onboarding-view.tsx
**/*.{ts,tsx}
📄 CodeRabbit Inference Engine (.cursor/rules/review.mdc)
Flag excessive Day.js use in performance-critical code; prefer native Date or Day.js
.utc()in hot paths like loops
Files:
apps/web/modules/getting-started/[[...step]]/onboarding-view.tsx
🧬 Code Graph Analysis (1)
apps/web/modules/getting-started/[[...step]]/onboarding-view.tsx (2)
apps/web/modules/auth/login-view.tsx (1)
PageProps(47-47)apps/web/modules/bookings/views/bookings-single-view.getServerSideProps.tsx (1)
PageProps(38-38)
⏰ 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: Install dependencies / Yarn install & cache
🔇 Additional comments (2)
apps/web/modules/getting-started/[[...step]]/onboarding-view.tsx (2)
14-14: AI summary inconsistency: inferSSRProps import still presentThe summary states SSR imports were removed, but this line still imports inferSSRProps and it’s unused. Remove to avoid confusion and potential lints.
-import type { inferSSRProps } from "@calcom/types/inferSSRProps";
86-88: hasPendingInvites prop is correctly passed
Verified that inapps/web/app/(use-page-wrapper)/getting-started/[[...step]]/page.tsxthe<Page>component (imported from~/getting-started/[[...step]]/onboarding-view) is rendered with<Page hasPendingInvites={!!user.teams.find(team => team.accepted === false)} />so the
PagePropstype inonboarding-view.tsxis actively used. No further action required.
E2E results are ready! |
…23003) * refactor * fix type check
…ice class with DI (#22974) * refactor: convert findQualifiedHostsWithDelegationCredentials to service class with DI - Create QualifiedHostsService class following UserAvailabilityService pattern - Add IQualifiedHostsService interface with prisma and bookingRepo dependencies - Create DI module and container for qualified hosts service - Update filterHostsBySameRoundRobinHost to accept prisma as parameter - Update all usage sites to use the new service: - loadAndValidateUsers.ts - slots/util.ts - test mocks in _post.test.ts - Maintain backward compatibility with original function export - Fix type issues in team properties (rrResetInterval, rrTimestampBasis) Co-Authored-By: morgan@cal.com <morgan@cal.com> * fix: update filterHostsBySameRoundRobinHost test to include prisma parameter - Add missing prisma parameter to all test function calls - Resolves unit test failure caused by function signature change Co-Authored-By: morgan@cal.com <morgan@cal.com> * fix: resolve type issues in FilterHostsService - Import PrismaClient type instead of using unknown - Fix type compatibility for BookingRepository constructor - Update test mocks to use proper BookingRepository type - Ensure all DI dependencies are properly typed Co-Authored-By: morgan@cal.com <morgan@cal.com> * refactor: rename DI files to CamelCase and update imports - Rename all files in packages/lib/di from kebab-case to CamelCase - Update 22 external files with import statements to use new file names - Update internal DI module files with corrected imports - Maintain consistency with TypeScript naming conventions Co-Authored-By: morgan@cal.com <morgan@cal.com> * chore: bump platform libs * chore: bump platform libs * fix: remove obsolete vitest mock after service class refactoring - Remove obsolete mock for old function module - Keep correct mock for new DI container - Resolves CI unit test failures Co-Authored-By: morgan@cal.com <morgan@cal.com> * fix: correct import path for calAIPhone zod-utils module Co-Authored-By: morgan@cal.com <morgan@cal.com> * fix: Booker active booking limit can't be switched off (#23005) * refactor: Get rid of `getServerSideProps` for /getting-started pages (#23003) * refactor * fix type check * fix: Remove Reporting page within Routing Forms (#22990) * fix error in handleNewBooking (#23011) Co-authored-by: CarinaWolli <wollencarina@gmail.com> * Documentation edits made through Mintlify web editor (#23007) Co-authored-by: mintlify[bot] <109931778+mintlify[bot]@users.noreply.github.com> * fix: Contact support button position changed from absolute to fixed (#23002) * feat: Add private links to API (#22943) * --init * address change requests * adding further changes * address feedback * further changes * further clean-up * clean up * fix module import and others * add guards * remove unnecessary comments * remove unnecessary comments * cleanup * sort coderabbig suggestions * improve check * chore: bump platform libraries --------- Co-authored-by: Lauris Skraucis <lauris.skraucis@gmail.com> Co-authored-by: supalarry <laurisskraucis@gmail.com> * chore: release v5.5.15 * chore: bump platform libs * chore: bump platform libs --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-authored-by: morgan@cal.com <morgan@cal.com> Co-authored-by: Anik Dhabal Babu <81948346+anikdhabal@users.noreply.github.com> Co-authored-by: Benny Joo <sldisek783@gmail.com> Co-authored-by: Sahitya Chandra <sahityajb@gmail.com> Co-authored-by: Carina Wollendorfer <30310907+CarinaWolli@users.noreply.github.com> Co-authored-by: CarinaWolli <wollencarina@gmail.com> Co-authored-by: mintlify[bot] <109931778+mintlify[bot]@users.noreply.github.com> Co-authored-by: Ayush Kumar <kumarayushkumar@protonmail.com> Co-authored-by: Syed Ali Shahbaz <52925846+alishaz-polymath@users.noreply.github.com> Co-authored-by: Lauris Skraucis <lauris.skraucis@gmail.com> Co-authored-by: supalarry <laurisskraucis@gmail.com> Co-authored-by: emrysal <me@alexvanandel.com>
What does this PR do?
getServerSidePropsfor /getting-started pages and rather have business logic directly inside RSC in app routerMandatory Tasks (DO NOT REMOVE)
How should this be tested?
/getting-startedand see if it loads fine