'use client'; import Link from 'next/link'; import type { ColumnDef } from '@tanstack/react-table'; import { EllipsisIcon } from 'lucide-react'; import { getI18n } from 'react-i18next'; import { Button } from '@kit/ui/button'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuTrigger, } from '@kit/ui/dropdown-menu'; import pricingConfig from '@/config/pricing.config'; import { DataTable } from '@/components/app/DataTable'; import SubscriptionStatusBadge from '../../../(app)/[account]/components/organizations/SubscriptionStatusBadge'; import type { getOrganizations } from '../queries'; type Response = Awaited>; type Organizations = Response['organizations']; const columns: ColumnDef[] = [ { header: 'ID', accessorKey: 'id', id: 'id', size: 10, }, { header: 'UUID', accessorKey: 'uuid', id: 'uuid', size: 200, }, { header: 'Name', accessorKey: 'name', id: 'name', }, { header: 'Subscription', id: 'subscription', cell: ({ row }) => { const priceId = row.original?.subscription?.data?.priceId; const plan = pricingConfig.products.find((product) => { return product.plans.some((plan) => plan.stripePriceId === priceId); }); if (plan) { const price = plan.plans.find((plan) => plan.stripePriceId === priceId); if (!price) { return 'Unknown Price'; } return `${plan.name} - ${price.name}`; } return '-'; }, }, { header: 'Subscription Status', id: 'subscription-status', cell: ({ row }) => { const subscription = row.original?.subscription?.data; if (!subscription) { return '-'; } return ; }, }, { header: 'Subscription Period', id: 'subscription-period', cell: ({ row }) => { const subscription = row.original?.subscription?.data; const i18n = getI18n(); const language = i18n.language ?? 'en'; if (!subscription) { return '-'; } const canceled = subscription.cancelAtPeriodEnd; const date = subscription.periodEndsAt; const formattedDate = new Date(date).toLocaleDateString(language); return canceled ? ( Stops on {formattedDate} ) : ( Renews on {formattedDate} ); }, }, { header: 'Members', id: 'members', cell: ({ row }) => { const memberships = row.original.memberships.filter((item) => !item.code); const invites = row.original.memberships.length - memberships.length; const uid = row.original.uuid; const length = memberships.length; return ( {length} member{length === 1 ? '' : 's'}{' '} {invites ? `(${invites} invites)` : ''} ); }, }, { header: '', id: 'actions', cell: ({ row }) => { const organization = row.original; const uid = organization.uuid; return (
Actions navigator.clipboard.writeText(uid)} > Copy UUID View Members Delete
); }, }, ]; function OrganizationsTable({ organizations, pageCount, perPage, page, }: React.PropsWithChildren<{ organizations: Organizations; pageCount: number; perPage: number; page: number; }>) { return ( ); } export default OrganizationsTable;