"use client";
import { Check } from "lucide-react";
import { Fragment, useTransition } from "react";
import { Button } from "@/components/ui/button";
import {
Table,
TableBody,
TableCaption,
TableCell,
TableHead,
TableHeader,
TableRow,
} from "@/components/ui/table";
import { Badge } from "@/components/ui/badge";
import { config as featureGroups, plans } from "@/data/plans";
import { useCookieState } from "@/hooks/use-cookie-state";
import { getStripe } from "@/lib/stripe";
import { useTRPC } from "@/lib/trpc/client";
import { cn } from "@/lib/utils";
import type { WorkspacePlan } from "@openstatus/db/src/schema";
import {
getAddonPriceConfig,
getPriceConfig,
} from "@openstatus/db/src/schema/plan/utils";
import { useMutation, useQuery } from "@tanstack/react-query";
const BASE_URL =
process.env.NODE_ENV === "production"
? "https://app.openstatus.dev"
: "http://localhost:3000";
export function DataTable({ restrictTo }: { restrictTo?: WorkspacePlan[] }) {
const [currency] = useCookieState("x-currency", "USD");
const trpc = useTRPC();
const [isPending, startTransition] = useTransition();
const { data: workspace } = useQuery(trpc.workspace.get.queryOptions());
const checkoutSessionMutation = useMutation(
trpc.stripeRouter.getCheckoutSession.mutationOptions({
onSuccess: async (data) => {
if (!data) return;
const stripe = await getStripe();
stripe?.redirectToCheckout({ sessionId: data.id });
},
}),
);
if (!workspace) return null;
const filteredPlans = Object.values(plans).filter((plan) =>
restrictTo ? restrictTo.includes(plan.id) : true,
);
return (
A list to compare the different features by plan.
Features comparison
{filteredPlans.map(({ id, ...plan }) => {
const isCurrentPlan = workspace.plan === id;
const price = getPriceConfig(id, currency);
return (