From 6fa3751a725205775c5a1d60258a143062f7a423 Mon Sep 17 00:00:00 2001 From: David Nguyen Date: Thu, 6 Feb 2025 14:09:44 +1100 Subject: [PATCH] fix: wip --- .../embed/embed-direct-template-client-page.tsx | 4 ++-- .../components/embed/embed-document-completed.tsx | 2 +- .../app/components/embed/embed-document-fields.tsx | 4 ++-- .../embed/embed-document-signing-page.tsx | 4 ++-- .../general/teams/team-layout-billing-banner.tsx | 4 ++-- apps/remix/app/root.tsx | 14 +++++++++++++- .../routes/_authenticated+/t.$teamUrl+/_index.tsx | 13 +++++++++++++ .../_unauthenticated+/team.decline.$token.tsx | 2 +- .../_unauthenticated+/team.invite.$token.tsx | 2 +- apps/remix/app/routes/embed+/sign.$url.tsx | 2 +- apps/remix/package.json | 3 ++- package-lock.json | 10 ++++++++++ 12 files changed, 50 insertions(+), 14 deletions(-) create mode 100644 apps/remix/app/routes/_authenticated+/t.$teamUrl+/_index.tsx diff --git a/apps/remix/app/components/embed/embed-direct-template-client-page.tsx b/apps/remix/app/components/embed/embed-direct-template-client-page.tsx index f30dda8ea..05d903364 100644 --- a/apps/remix/app/components/embed/embed-direct-template-client-page.tsx +++ b/apps/remix/app/components/embed/embed-direct-template-client-page.tsx @@ -2,6 +2,8 @@ import { useEffect, useLayoutEffect, useState } from 'react'; import { Trans, msg } from '@lingui/macro'; import { useLingui } from '@lingui/react'; +import { type DocumentData, type Field, FieldType } from '@prisma/client'; +import type { DocumentMeta, Recipient, Signature, TemplateMeta } from '@prisma/client'; import { LucideChevronDown, LucideChevronUp } from 'lucide-react'; import { DateTime } from 'luxon'; import { useSearchParams } from 'react-router'; @@ -11,8 +13,6 @@ import { DEFAULT_DOCUMENT_DATE_FORMAT } from '@documenso/lib/constants/date-form import { PDF_VIEWER_PAGE_SELECTOR } from '@documenso/lib/constants/pdf-viewer'; import { DEFAULT_DOCUMENT_TIME_ZONE } from '@documenso/lib/constants/time-zones'; import { validateFieldsInserted } from '@documenso/lib/utils/fields'; -import type { DocumentMeta, Recipient, Signature, TemplateMeta } from '@documenso/prisma/client'; -import { type DocumentData, type Field, FieldType } from '@documenso/prisma/client'; import { trpc } from '@documenso/trpc/react'; import type { TRemovedSignedFieldWithTokenMutationSchema, diff --git a/apps/remix/app/components/embed/embed-document-completed.tsx b/apps/remix/app/components/embed/embed-document-completed.tsx index 1cfc07d3b..163406563 100644 --- a/apps/remix/app/components/embed/embed-document-completed.tsx +++ b/apps/remix/app/components/embed/embed-document-completed.tsx @@ -1,7 +1,7 @@ import { Trans } from '@lingui/macro'; +import type { Signature } from '@prisma/client'; import signingCelebration from '@documenso/assets/images/signing-celebration.png'; -import type { Signature } from '@documenso/prisma/client'; import { SigningCard3D } from '@documenso/ui/components/signing-card'; export type EmbedDocumentCompletedPageProps = { diff --git a/apps/remix/app/components/embed/embed-document-fields.tsx b/apps/remix/app/components/embed/embed-document-fields.tsx index 8675eabcf..5c0329214 100644 --- a/apps/remix/app/components/embed/embed-document-fields.tsx +++ b/apps/remix/app/components/embed/embed-document-fields.tsx @@ -1,3 +1,5 @@ +import type { DocumentMeta, Recipient, TemplateMeta } from '@prisma/client'; +import { type Field, FieldType } from '@prisma/client'; import { match } from 'ts-pattern'; import { DEFAULT_DOCUMENT_DATE_FORMAT } from '@documenso/lib/constants/date-formats'; @@ -10,8 +12,6 @@ import { ZRadioFieldMeta, ZTextFieldMeta, } from '@documenso/lib/types/field-meta'; -import type { DocumentMeta, Recipient, TemplateMeta } from '@documenso/prisma/client'; -import { type Field, FieldType } from '@documenso/prisma/client'; import type { FieldWithSignatureAndFieldMeta } from '@documenso/prisma/types/field-with-signature-and-fieldmeta'; import type { TRemovedSignedFieldWithTokenMutationSchema, diff --git a/apps/remix/app/components/embed/embed-document-signing-page.tsx b/apps/remix/app/components/embed/embed-document-signing-page.tsx index bc2b039f7..22ef78942 100644 --- a/apps/remix/app/components/embed/embed-document-signing-page.tsx +++ b/apps/remix/app/components/embed/embed-document-signing-page.tsx @@ -2,13 +2,13 @@ import { useEffect, useLayoutEffect, useState } from 'react'; import { Trans, msg } from '@lingui/macro'; import { useLingui } from '@lingui/react'; +import type { DocumentMeta, Recipient, TemplateMeta } from '@prisma/client'; +import { type DocumentData, type Field, FieldType } from '@prisma/client'; import { LucideChevronDown, LucideChevronUp } from 'lucide-react'; import { useThrottleFn } from '@documenso/lib/client-only/hooks/use-throttle-fn'; import { PDF_VIEWER_PAGE_SELECTOR } from '@documenso/lib/constants/pdf-viewer'; import { validateFieldsInserted } from '@documenso/lib/utils/fields'; -import type { DocumentMeta, Recipient, TemplateMeta } from '@documenso/prisma/client'; -import { type DocumentData, type Field, FieldType } from '@documenso/prisma/client'; import { trpc } from '@documenso/trpc/react'; import { FieldToolTip } from '@documenso/ui/components/field/field-tooltip'; import { Button } from '@documenso/ui/primitives/button'; diff --git a/apps/remix/app/components/general/teams/team-layout-billing-banner.tsx b/apps/remix/app/components/general/teams/team-layout-billing-banner.tsx index becea0d22..c48649e92 100644 --- a/apps/remix/app/components/general/teams/team-layout-billing-banner.tsx +++ b/apps/remix/app/components/general/teams/team-layout-billing-banner.tsx @@ -2,12 +2,12 @@ import { useState } from 'react'; import { Trans, msg } from '@lingui/macro'; import { useLingui } from '@lingui/react'; +import type { TeamMemberRole } from '@prisma/client'; +import { type Subscription, SubscriptionStatus } from '@prisma/client'; import { AlertTriangle } from 'lucide-react'; import { match } from 'ts-pattern'; import { canExecuteTeamAction } from '@documenso/lib/utils/teams'; -import type { TeamMemberRole } from '@documenso/prisma/client'; -import { type Subscription, SubscriptionStatus } from '@documenso/prisma/client'; import { trpc } from '@documenso/trpc/react'; import { cn } from '@documenso/ui/lib/utils'; import { Button } from '@documenso/ui/primitives/button'; diff --git a/apps/remix/app/root.tsx b/apps/remix/app/root.tsx index 58198760f..784e83e8a 100644 --- a/apps/remix/app/root.tsx +++ b/apps/remix/app/root.tsx @@ -1,5 +1,6 @@ -import { Suspense } from 'react'; +import { Suspense, useEffect } from 'react'; +import Plausible from 'plausible-tracker'; import { Links, Meta, @@ -9,6 +10,7 @@ import { data, isRouteErrorResponse, useLoaderData, + useLocation, } from 'react-router'; import { ThemeProvider } from 'remix-themes'; @@ -27,6 +29,10 @@ import { PostHogPageview } from './providers/posthog'; import { langCookie } from './storage/lang-cookie.server'; import { themeSessionResolver } from './storage/theme-session.server'; +const { trackPageview } = Plausible({ + domain: 'documenso.com', +}); + export const links: Route.LinksFunction = () => [ { rel: 'preconnect', href: 'https://fonts.googleapis.com' }, { @@ -145,6 +151,12 @@ export function Layout({ children }: { children: React.ReactNode }) { } export default function App({ loaderData }: Route.ComponentProps) { + const location = useLocation(); + + useEffect(() => { + trackPageview(); + }, [location.pathname]); + return ( {/* Todo: Themes (this won't work for now) */} diff --git a/apps/remix/app/routes/_authenticated+/t.$teamUrl+/_index.tsx b/apps/remix/app/routes/_authenticated+/t.$teamUrl+/_index.tsx new file mode 100644 index 000000000..de665bd2d --- /dev/null +++ b/apps/remix/app/routes/_authenticated+/t.$teamUrl+/_index.tsx @@ -0,0 +1,13 @@ +import { redirect } from 'react-router'; + +import { formatDocumentsPath } from '@documenso/lib/utils/teams'; + +import type { Route } from './+types/_index'; + +export function loader({ context }: Route.LoaderArgs) { + if (!context.session?.currentTeam) { + throw redirect('/documents'); + } + + throw redirect(formatDocumentsPath(context.session.currentTeam.url)); +} diff --git a/apps/remix/app/routes/_unauthenticated+/team.decline.$token.tsx b/apps/remix/app/routes/_unauthenticated+/team.decline.$token.tsx index e6a402ac9..ad3363ded 100644 --- a/apps/remix/app/routes/_unauthenticated+/team.decline.$token.tsx +++ b/apps/remix/app/routes/_unauthenticated+/team.decline.$token.tsx @@ -1,4 +1,5 @@ import { Trans } from '@lingui/macro'; +import { TeamMemberInviteStatus } from '@prisma/client'; import { DateTime } from 'luxon'; import { Link } from 'react-router'; @@ -6,7 +7,6 @@ import { encryptSecondaryData } from '@documenso/lib/server-only/crypto/encrypt' import { declineTeamInvitation } from '@documenso/lib/server-only/team/decline-team-invitation'; import { getTeamById } from '@documenso/lib/server-only/team/get-team'; import { prisma } from '@documenso/prisma'; -import { TeamMemberInviteStatus } from '@documenso/prisma/client'; import { Button } from '@documenso/ui/primitives/button'; import type { Route } from './+types/team.decline.$token'; diff --git a/apps/remix/app/routes/_unauthenticated+/team.invite.$token.tsx b/apps/remix/app/routes/_unauthenticated+/team.invite.$token.tsx index 561f96d8e..a06f98dcb 100644 --- a/apps/remix/app/routes/_unauthenticated+/team.invite.$token.tsx +++ b/apps/remix/app/routes/_unauthenticated+/team.invite.$token.tsx @@ -1,4 +1,5 @@ import { Trans } from '@lingui/macro'; +import { TeamMemberInviteStatus } from '@prisma/client'; import { DateTime } from 'luxon'; import { Link } from 'react-router'; @@ -6,7 +7,6 @@ import { encryptSecondaryData } from '@documenso/lib/server-only/crypto/encrypt' import { acceptTeamInvitation } from '@documenso/lib/server-only/team/accept-team-invitation'; import { getTeamById } from '@documenso/lib/server-only/team/get-team'; import { prisma } from '@documenso/prisma'; -import { TeamMemberInviteStatus } from '@documenso/prisma/client'; import { Button } from '@documenso/ui/primitives/button'; import type { Route } from './+types/team.invite.$token'; diff --git a/apps/remix/app/routes/embed+/sign.$url.tsx b/apps/remix/app/routes/embed+/sign.$url.tsx index b1efe250b..432f85a3b 100644 --- a/apps/remix/app/routes/embed+/sign.$url.tsx +++ b/apps/remix/app/routes/embed+/sign.$url.tsx @@ -1,3 +1,4 @@ +import { DocumentStatus } from '@prisma/client'; import { data } from 'react-router'; import { getRequiredLoaderSession } from 'server/utils/get-loader-session'; import { match } from 'ts-pattern'; @@ -11,7 +12,6 @@ import { getRecipientByToken } from '@documenso/lib/server-only/recipient/get-re import { getTeamById } from '@documenso/lib/server-only/team/get-team'; import { DocumentAccessAuth } from '@documenso/lib/types/document-auth'; import { extractDocumentAuthMethods } from '@documenso/lib/utils/document-auth'; -import { DocumentStatus } from '@documenso/prisma/client'; import { EmbedSignDocumentClientPage } from '~/components/embed/embed-document-signing-page'; import { DocumentSigningAuthProvider } from '~/components/general/document-signing/document-signing-auth-provider'; diff --git a/apps/remix/package.json b/apps/remix/package.json index 9ed2ed65a..e4fe5be3e 100644 --- a/apps/remix/package.json +++ b/apps/remix/package.json @@ -47,6 +47,7 @@ "lucide-react": "^0.279.0", "luxon": "^3.4.0", "papaparse": "^5.4.1", + "plausible-tracker": "^0.3.9", "posthog-js": "^1.75.3", "posthog-node": "^3.1.1", "react": "^18", @@ -86,4 +87,4 @@ "vite-plugin-babel-macros": "^1.0.6", "vite-tsconfig-paths": "^5.1.4" } -} \ No newline at end of file +} diff --git a/package-lock.json b/package-lock.json index 83d9678da..30a8b9f04 100644 --- a/package-lock.json +++ b/package-lock.json @@ -130,6 +130,7 @@ "lucide-react": "^0.279.0", "luxon": "^3.4.0", "papaparse": "^5.4.1", + "plausible-tracker": "^0.3.9", "posthog-js": "^1.75.3", "posthog-node": "^3.1.1", "react": "^18", @@ -29970,6 +29971,15 @@ "node": ">=4" } }, + "node_modules/plausible-tracker": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/plausible-tracker/-/plausible-tracker-0.3.9.tgz", + "integrity": "sha512-hMhneYm3GCPyQon88SZrVJx+LlqhM1kZFQbuAgXPoh/Az2YvO1B6bitT9qlhpiTdJlsT5lsr3gPmzoVjb5CDXA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, "node_modules/playwright": { "version": "1.43.0", "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.43.0.tgz",