feat: dashboard v2, esm, upgrades (#211)

* esm

* wip

* wip

* wip

* wip

* wip

* wip

* subscription notice

* wip

* wip

* wip

* fix envs

* fix: update docker build

* fix

* esm/types

* delete dashboard :D

* add patches to dockerfiles

* update packages + catalogs + ts

* wip

* remove native libs

* ts

* improvements

* fix redirects and fetching session

* try fix favicon

* fixes

* fix

* order and resize reportds within a dashboard

* improvements

* wip

* added userjot to dashboard

* fix

* add op

* wip

* different cache key

* improve date picker

* fix table

* event details loading

* redo onboarding completely

* fix login

* fix

* fix

* extend session, billing and improve bars

* fix

* reduce price on 10M
This commit is contained in:
Carl-Gerhard Lindesvärd
2025-10-16 12:27:44 +02:00
committed by GitHub
parent 436e81ecc9
commit 81a7e5d62e
741 changed files with 32695 additions and 16996 deletions

View File

@@ -0,0 +1,64 @@
import { FullPageEmptyState } from '@/components/full-page-empty-state';
import FullPageLoadingState from '@/components/full-page-loading-state';
import Billing from '@/components/organization/billing';
import { BillingFaq } from '@/components/organization/billing-faq';
import CurrentSubscription from '@/components/organization/current-subscription';
import Usage from '@/components/organization/usage';
import { PageHeader } from '@/components/page-header';
import { useTRPC } from '@/integrations/trpc/react';
import { PAGE_TITLES, createOrganizationTitle } from '@/utils/title';
import { useQuery } from '@tanstack/react-query';
import { createFileRoute } from '@tanstack/react-router';
import { BoxSelectIcon } from 'lucide-react';
export const Route = createFileRoute('/_app/$organizationId/billing')({
component: OrganizationPage,
head: () => {
return {
meta: [
{
title: createOrganizationTitle(PAGE_TITLES.BILLING),
},
],
};
},
});
function OrganizationPage() {
const { organizationId } = Route.useParams();
const trpc = useTRPC();
const { data: organization, isLoading } = useQuery(
trpc.organization.get.queryOptions({
organizationId,
}),
);
if (isLoading) {
return <FullPageLoadingState />;
}
if (!organization) {
return (
<FullPageEmptyState title="Organization not found" icon={BoxSelectIcon} />
);
}
return (
<div className="container p-8">
<PageHeader
title="Billing"
description="Manage your billing here"
className="mb-8"
/>
<div className="flex flex-col-reverse md:flex-row gap-8 max-w-screen-lg">
<div className="col gap-8 w-full">
<Billing organization={organization} />
<Usage organization={organization} />
<BillingFaq />
</div>
<CurrentSubscription organization={organization} />
</div>
</div>
);
}