import { createSignal, onMount, Show } from "solid-js"; import { Title } from "@solidjs/meta"; import { useNavigate, useSearchParams } from "@solidjs/router"; import EmbeddedCheckout from "~/components/EmbeddedCheckout"; import { api } from "~/lib/api"; import PageContainer from "~/components/layout/PageContainer"; const priceMap: Record = { basic: process.env.STRIPE_PRICE_BASIC ?? "", plus: process.env.STRIPE_PRICE_PLUS ?? "", premium: process.env.STRIPE_PRICE_PREMIUM ?? "", }; export default function CheckoutPage() { const navigate = useNavigate(); const [searchParams] = useSearchParams(); const [clientSecret, setClientSecret] = createSignal(""); const [error, setError] = createSignal(null); const [loading, setLoading] = createSignal(true); onMount(async () => { const plan = Array.isArray(searchParams.plan) ? searchParams.plan[0] : searchParams.plan; const priceIdParam = Array.isArray(searchParams.priceId) ? searchParams.priceId[0] : searchParams.priceId; const priceId = priceIdParam ?? (plan ? priceMap[plan] : ""); if (!priceId) { setError("No plan selected. Please select a plan to continue."); setLoading(false); return; } try { const returnUrl = `${window.location.origin}/billing/return`; const result = await api.billing.createCheckoutSession.mutate({ priceId, returnUrl, }); setClientSecret(result.clientSecret); } catch (err) { setError(err instanceof Error ? err.message : "Failed to create checkout session"); } finally { setLoading(false); } }); return (
Checkout — Kordant

Complete your purchase

Secure payment powered by Stripe

Preparing checkout...

{error()}

navigate("/dashboard")} />
); }