Skip to content

Commit 3c3745c

Browse files
committed
feat: onboarding flow
1 parent ee43930 commit 3c3745c

File tree

3 files changed

+47
-3
lines changed

3 files changed

+47
-3
lines changed

src/lib/context/store-context.tsx

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import {
1111
} from "medusa-react"
1212
import React, { useEffect, useState } from "react"
1313
import { useCartDropdown } from "./cart-dropdown-context"
14+
import { useSearchParams } from "next/navigation"
1415

1516
interface VariantInfoProps {
1617
variantId: string
@@ -57,6 +58,17 @@ export const StoreProvider = ({ children }: StoreProps) => {
5758
const removeLineItem = useDeleteLineItem(cart?.id!)
5859
const adjustLineItem = useUpdateLineItem(cart?.id!)
5960

61+
// check if the user is onboarding and sets the onboarding session storage
62+
const searchParams = useSearchParams()
63+
const onboardingCartId = searchParams.get("cart_id")
64+
const isOnboarding = searchParams.get("onboarding")
65+
66+
useEffect(() => {
67+
if (isOnboarding === "true") {
68+
sessionStorage.setItem("onboarding", "true")
69+
}
70+
}, [isOnboarding])
71+
6072
const storeRegion = (regionId: string, countryCode: string) => {
6173
if (!IS_SERVER) {
6274
localStorage.setItem(
@@ -195,7 +207,7 @@ export const StoreProvider = ({ children }: StoreProps) => {
195207

196208
useEffect(() => {
197209
const ensureCart = async () => {
198-
const cartId = getCart()
210+
const cartId = onboardingCartId || getCart()
199211
const region = getRegion()
200212

201213
if (cartId) {
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import Button from "@modules/common/components/button"
2+
3+
const OnboardingCta = ({ orderId }: { orderId: string }) => {
4+
return (
5+
<div className="max-w-4xl h-full bg-white w-full mb-4">
6+
<div className="flex flex-col gap-y-6 center p-10 md:items-center">
7+
<span className="text-gray-700 text-xl">
8+
Your test order was successfully created! 🎉
9+
</span>
10+
<span className="text-gray-700 text-small-regular">
11+
You can now complete setting up your store in the admin.
12+
</span>
13+
<a
14+
href={`http://localhost:7001/a/orders/?order_id=${orderId}&onboarding_step=setup_finished_nextjs`}
15+
>
16+
<Button className="md:w-80">Complete setup in admin</Button>
17+
</a>
18+
</div>
19+
</div>
20+
)
21+
}
22+
23+
export default OnboardingCta

src/modules/order/templates/order-completed-template.tsx

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ import Items from "@modules/order/components/items"
66
import OrderDetails from "@modules/order/components/order-details"
77
import OrderSummary from "@modules/order/components/order-summary"
88
import ShippingDetails from "@modules/order/components/shipping-details"
9-
import React from "react"
9+
import OnboardingCta from "@modules/order/components/onboarding-cta"
10+
import React, { useEffect, useState } from "react"
1011

1112
type OrderCompletedTemplateProps = {
1213
order: Order
@@ -15,9 +16,17 @@ type OrderCompletedTemplateProps = {
1516
const OrderCompletedTemplate: React.FC<OrderCompletedTemplateProps> = ({
1617
order,
1718
}) => {
19+
const [isOnboarding, setIsOnboarding] = useState<boolean>(false)
20+
21+
useEffect(() => {
22+
const onboarding = window.sessionStorage.getItem("onboarding")
23+
setIsOnboarding(onboarding === "true")
24+
}, [])
25+
1826
return (
1927
<div className="bg-gray-50 py-6 min-h-[calc(100vh-64px)]">
20-
<div className="content-container flex justify-center">
28+
<div className="content-container flex flex-col justify-center items-center">
29+
{isOnboarding && <OnboardingCta orderId={order.id} />}
2130
<div className="max-w-4xl h-full bg-white w-full">
2231
<OrderDetails order={order} />
2332
<Items

0 commit comments

Comments
 (0)