fix: add posthog error monitor

This commit is contained in:
David Nguyen
2025-02-25 15:14:45 +11:00
parent cedd5e87b1
commit 7e8955b89c
17 changed files with 175 additions and 148 deletions

View File

@ -3,10 +3,12 @@ import { useCallback, useEffect } from 'react';
import { useRevalidator } from 'react-router';
export const RefreshOnFocus = () => {
const { revalidate } = useRevalidator();
const { revalidate, state } = useRevalidator();
const onFocus = useCallback(() => {
void revalidate();
if (state === 'idle') {
void revalidate();
}
}, [revalidate]);
useEffect(() => {

View File

@ -1,21 +1,30 @@
import { StrictMode, startTransition } from 'react';
import { StrictMode, startTransition, useEffect } from 'react';
import { i18n } from '@lingui/core';
import { detect, fromHtmlTag } from '@lingui/detect-locale';
import { I18nProvider } from '@lingui/react';
import posthog from 'posthog-js';
import { hydrateRoot } from 'react-dom/client';
import { HydratedRouter } from 'react-router/dom';
import { Theme, ThemeProvider } from 'remix-themes';
import { match } from 'ts-pattern';
import { extractPostHogConfig } from '@documenso/lib/constants/feature-flags';
import { dynamicActivate } from '@documenso/lib/utils/i18n';
async function main() {
const theme = match(document.documentElement.getAttribute('data-theme'))
.with('dark', () => Theme.DARK)
.with('light', () => Theme.LIGHT)
.otherwise(() => null);
function PosthogInit() {
const postHogConfig = extractPostHogConfig();
useEffect(() => {
if (postHogConfig) {
posthog.init(postHogConfig.key, {
api_host: postHogConfig.host,
});
}
}, []);
return null;
}
async function main() {
const locale = detect(fromHtmlTag('lang')) || 'en';
await dynamicActivate(locale);
@ -25,10 +34,10 @@ async function main() {
document,
<StrictMode>
<I18nProvider i18n={i18n}>
<ThemeProvider specifiedTheme={theme} themeAction="/api/theme">
<HydratedRouter />
</ThemeProvider>
<HydratedRouter />
</I18nProvider>
<PosthogInit />
</StrictMode>,
);
});

View File

@ -7,13 +7,11 @@ import type { RenderToPipeableStreamOptions } from 'react-dom/server';
import { renderToPipeableStream } from 'react-dom/server';
import type { AppLoadContext, EntryContext } from 'react-router';
import { ServerRouter } from 'react-router';
import { ThemeProvider } from 'remix-themes';
import { APP_I18N_OPTIONS } from '@documenso/lib/constants/i18n';
import { dynamicActivate, extractLocaleData } from '@documenso/lib/utils/i18n';
import { langCookie } from './storage/lang-cookie.server';
import { themeSessionResolver } from './storage/theme-session.server';
export const streamTimeout = 5_000;
@ -32,10 +30,6 @@ export default async function handleRequest(
await dynamicActivate(language);
const { getTheme } = await themeSessionResolver(request);
const theme = getTheme();
return new Promise((resolve, reject) => {
let shellRendered = false;
const userAgent = request.headers.get('user-agent');
@ -47,9 +41,7 @@ export default async function handleRequest(
const { pipe, abort } = renderToPipeableStream(
<I18nProvider i18n={i18n}>
<ThemeProvider specifiedTheme={theme} themeAction="/api/theme">
<ServerRouter context={routerContext} url={request.url} />
</ThemeProvider>
<ServerRouter context={routerContext} url={request.url} />
</I18nProvider>,
{
[readyOption]() {

View File

@ -1,47 +0,0 @@
import { useEffect } from 'react';
import posthog from 'posthog-js';
import { useLocation, useSearchParams } from 'react-router';
import { extractPostHogConfig } from '@documenso/lib/constants/feature-flags';
export function PostHogPageview() {
const postHogConfig = extractPostHogConfig();
const { pathname } = useLocation();
const [searchParams] = useSearchParams();
// const { sessionData } = useOptionalSession();
// const user = sessionData?.user;
if (typeof window !== 'undefined' && postHogConfig) {
posthog.init(postHogConfig.key, {
api_host: postHogConfig.host,
disable_session_recording: true,
// loaded: () => {
// if (user) {
// posthog.identify(user.email ?? user.id.toString());
// } else {
// posthog.reset();
// }
// },
custom_campaign_params: ['src'],
});
}
useEffect(() => {
if (!postHogConfig || !pathname) {
return;
}
let url = window.origin + pathname;
if (searchParams && searchParams.toString()) {
url = url + `?${searchParams.toString()}`;
}
posthog.capture('$pageview', {
$current_url: url,
});
}, [pathname, searchParams, postHogConfig]);
return null;
}

View File

@ -1,4 +1,4 @@
import { Suspense, useEffect } from 'react';
import { useEffect } from 'react';
import Plausible from 'plausible-tracker';
import {
@ -12,7 +12,7 @@ import {
useLoaderData,
useLocation,
} from 'react-router';
import { PreventFlashOnWrongTheme, useTheme } from 'remix-themes';
import { PreventFlashOnWrongTheme, ThemeProvider, useTheme } from 'remix-themes';
import { getOptionalSession } from '@documenso/auth/server/lib/utils/get-session';
import { SessionProvider } from '@documenso/lib/client-only/providers/session';
@ -28,7 +28,6 @@ import type { Route } from './+types/root';
import stylesheet from './app.css?url';
import { GenericErrorLayout } from './components/general/generic-error-layout';
import { RefreshOnFocus } from './components/general/refresh-on-focus';
import { PostHogPageview } from './providers/posthog';
import { langCookie } from './storage/lang-cookie.server';
import { themeSessionResolver } from './storage/theme-session.server';
import { appMetaTags } from './utils/meta';
@ -106,9 +105,7 @@ export async function loader({ request }: Route.LoaderArgs) {
}
export function Layout({ children }: { children: React.ReactNode }) {
const { publicEnv, lang, session, ...data } = useLoaderData<typeof loader>() || {};
const [theme] = useTheme();
const { theme } = useLoaderData<typeof loader>() || {};
const location = useLocation();
@ -118,6 +115,18 @@ export function Layout({ children }: { children: React.ReactNode }) {
}
}, [location.pathname]);
return (
<ThemeProvider specifiedTheme={theme} themeAction="/api/theme">
<LayoutContent>{children}</LayoutContent>
</ThemeProvider>
);
}
export function LayoutContent({ children }: { children: React.ReactNode }) {
const { publicEnv, session, lang, ...data } = useLoaderData<typeof loader>() || {};
const [theme] = useTheme();
return (
<html translate="no" lang={lang} data-theme={theme} className={theme ?? ''}>
<head>
@ -133,10 +142,6 @@ export function Layout({ children }: { children: React.ReactNode }) {
<meta name="google" content="notranslate" />
<PreventFlashOnWrongTheme ssrTheme={Boolean(data.theme)} />
<Suspense>
<PostHogPageview />
</Suspense>
{/* Fix: https://stackoverflow.com/questions/21147149/flash-of-unstyled-content-fouc-in-firefox-only-is-ff-slow-renderer */}
<script>0</script>
</head>

View File

@ -23,6 +23,8 @@ const posthogProxy = async (request: Request) => {
method: request.method,
headers,
body: request.body,
// @ts-expect-error - Not really sure about this
duplex: 'half',
});
return new Response(response.body, {

View File

@ -48,8 +48,8 @@
"luxon": "^3.4.0",
"papaparse": "^5.4.1",
"plausible-tracker": "^0.3.9",
"posthog-js": "^1.75.3",
"posthog-node": "^3.1.1",
"posthog-js": "^1.223.3",
"posthog-node": "^4.7.0",
"react": "^18",
"react-call": "^1.3.0",
"react-dom": "^18",
@ -99,4 +99,4 @@
"vite-plugin-babel-macros": "^1.0.6",
"vite-tsconfig-paths": "^5.1.4"
}
}
}

65
package-lock.json generated
View File

@ -131,8 +131,8 @@
"luxon": "^3.4.0",
"papaparse": "^5.4.1",
"plausible-tracker": "^0.3.9",
"posthog-js": "^1.75.3",
"posthog-node": "^3.1.1",
"posthog-js": "^1.223.3",
"posthog-node": "^4.7.0",
"react": "^18",
"react-call": "^1.3.0",
"react-dom": "^18",
@ -849,6 +849,17 @@
"win32"
]
},
"apps/remix/node_modules/axios": {
"version": "1.7.9",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz",
"integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==",
"license": "MIT",
"dependencies": {
"follow-redirects": "^1.15.6",
"form-data": "^4.0.0",
"proxy-from-env": "^1.1.0"
}
},
"apps/remix/node_modules/esbuild": {
"version": "0.24.2",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.2.tgz",
@ -890,6 +901,18 @@
"@esbuild/win32-x64": "0.24.2"
}
},
"apps/remix/node_modules/posthog-node": {
"version": "4.7.0",
"resolved": "https://registry.npmjs.org/posthog-node/-/posthog-node-4.7.0.tgz",
"integrity": "sha512-RgdUKSW8MfMOkjUa8cYVqWndNjPePNuuxlGbrZC6z1WRBsVc6TdGl8caidmC10RW8mu/BOfmrGbP4cRTo2jARg==",
"license": "MIT",
"dependencies": {
"axios": "^1.7.4"
},
"engines": {
"node": ">=15.0.0"
}
},
"apps/remix/node_modules/rollup": {
"version": "4.34.5",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.34.5.tgz",
@ -9751,6 +9774,16 @@
"win32"
]
},
"node_modules/@rrweb/types": {
"version": "2.0.0-alpha.17",
"resolved": "https://registry.npmjs.org/@rrweb/types/-/types-2.0.0-alpha.17.tgz",
"integrity": "sha512-AfDTVUuCyCaIG0lTSqYtrZqJX39ZEYzs4fYKnexhQ+id+kbZIpIJtaut5cto6dWZbB3SEe4fW0o90Po3LvTmfg==",
"license": "MIT",
"peer": true,
"dependencies": {
"rrweb-snapshot": "^2.0.0-alpha.17"
}
},
"node_modules/@rtsao/scc": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz",
@ -31027,21 +31060,24 @@
"license": "MIT"
},
"node_modules/posthog-js": {
"version": "1.215.3",
"resolved": "https://registry.npmjs.org/posthog-js/-/posthog-js-1.215.3.tgz",
"integrity": "sha512-vTk8/gyjbKP7EbDxWzo/GBCK7Ok7M6RTqEWOzRgIxCPf/KA5faFi5z1T4cRR1oPgcDqLeB1ZGa04Za/cPEHxgA==",
"version": "1.223.3",
"resolved": "https://registry.npmjs.org/posthog-js/-/posthog-js-1.223.3.tgz",
"integrity": "sha512-ZQTc17M21IzkQmECJa2Xjont4tZrvIn252uGT3sTfmahTqZoW4j+kBj4eOJt9SNR6hOheFNkg7MSiI/rA6FaDA==",
"license": "MIT",
"dependencies": {
"core-js": "^3.38.1",
"fflate": "^0.4.8",
"preact": "^10.19.3",
"web-vitals": "^4.2.0"
},
"peerDependencies": {
"@rrweb/types": "2.0.0-alpha.17"
}
},
"node_modules/posthog-js/node_modules/preact": {
"version": "10.25.4",
"resolved": "https://registry.npmjs.org/preact/-/preact-10.25.4.tgz",
"integrity": "sha512-jLdZDb+Q+odkHJ+MpW/9U5cODzqnB+fy2EiHSZES7ldV5LK7yjlVzTp7R8Xy6W6y75kfK8iWYtFVH7lvjwrCMA==",
"version": "10.26.2",
"resolved": "https://registry.npmjs.org/preact/-/preact-10.26.2.tgz",
"integrity": "sha512-0gNmv4qpS9HaN3+40CLBAnKe0ZfyE4ZWo5xKlC1rVrr0ckkEvJvAQqKaHANdFKsGstoxrY4AItZ7kZSGVoVjgg==",
"license": "MIT",
"funding": {
"type": "opencollective",
@ -31052,6 +31088,7 @@
"version": "3.6.3",
"resolved": "https://registry.npmjs.org/posthog-node/-/posthog-node-3.6.3.tgz",
"integrity": "sha512-JB+ei0LkwE+rKHyW5z79Nd1jUaGxU6TvkfjFqY9vQaHxU5aU8dRl0UUaEmZdZbHwjp3WmXCBQQRNyimwbNQfCw==",
"dev": true,
"license": "MIT",
"dependencies": {
"axios": "^1.6.2",
@ -31065,6 +31102,7 @@
"version": "1.7.9",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz",
"integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==",
"dev": true,
"license": "MIT",
"dependencies": {
"follow-redirects": "^1.15.6",
@ -33884,6 +33922,16 @@
"fsevents": "~2.3.2"
}
},
"node_modules/rrweb-snapshot": {
"version": "2.0.0-alpha.18",
"resolved": "https://registry.npmjs.org/rrweb-snapshot/-/rrweb-snapshot-2.0.0-alpha.18.tgz",
"integrity": "sha512-hBHZL/NfgQX6wO1D9mpwqFu1NJPpim+moIcKhFEjVTZVRUfCln+LOugRc4teVTCISYHN8Cw5e2iNTWCSm+SkoA==",
"license": "MIT",
"peer": true,
"dependencies": {
"postcss": "^8.4.38"
}
},
"node_modules/run-async": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz",
@ -33921,6 +33969,7 @@
"version": "0.8.14",
"resolved": "https://registry.npmjs.org/rusha/-/rusha-0.8.14.tgz",
"integrity": "sha512-cLgakCUf6PedEu15t8kbsjnwIFFR2D4RfL+W3iWFJ4iac7z4B0ZI8fxy4R3J956kAI68HclCFGL8MPoUVC3qVA==",
"dev": true,
"license": "MIT"
},
"node_modules/rw": {

View File

@ -20,6 +20,20 @@ export function useAnalytics() {
posthog.capture(event, properties);
};
/**
* Capture an analytic event.
*
* @param error The error to capture.
* @param properties Properties to attach to the event.
*/
const captureException = (error: Error, properties?: Record<string, unknown>) => {
if (!isPostHogEnabled) {
return;
}
posthog.captureException(error, properties);
};
/**
* Start the session recording.
*
@ -53,6 +67,7 @@ export function useAnalytics() {
return {
capture,
captureException,
startSessionRecording,
stopSessionRecording,
};

View File

@ -998,7 +998,7 @@ msgstr "Ein Fehler ist aufgetreten, während der Benutzer aktiviert wurde."
msgid "An error occurred while loading team members. Please try again later."
msgstr "Ein Fehler ist aufgetreten, während die Teammitglieder geladen wurden. Bitte versuchen Sie es später erneut."
#: packages/ui/primitives/pdf-viewer.tsx:169
#: packages/ui/primitives/pdf-viewer.tsx:167
msgid "An error occurred while loading the document."
msgstr "Ein Fehler ist beim Laden des Dokuments aufgetreten."
@ -1410,7 +1410,7 @@ msgstr ""
#: apps/remix/app/components/forms/2fa/view-recovery-codes-dialog.tsx:172
#: apps/remix/app/components/forms/2fa/enable-authenticator-app-dialog.tsx:263
#: apps/remix/app/components/dialogs/webhook-delete-dialog.tsx:156
#: apps/remix/app/components/dialogs/webhook-create-dialog.tsx:235
#: apps/remix/app/components/dialogs/webhook-create-dialog.tsx:234
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx:167
#: apps/remix/app/components/dialogs/template-move-dialog.tsx:145
#: apps/remix/app/components/dialogs/template-duplicate-dialog.tsx:71
@ -2734,7 +2734,7 @@ msgstr "Geben Sie hier Ihren Text ein"
#: apps/remix/app/components/dialogs/admin-user-enable-dialog.tsx:59
#: apps/remix/app/components/dialogs/admin-user-disable-dialog.tsx:62
#: apps/remix/app/components/dialogs/admin-user-delete-dialog.tsx:62
#: packages/ui/primitives/pdf-viewer.tsx:168
#: packages/ui/primitives/pdf-viewer.tsx:166
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:222
msgid "Error"
msgstr "Fehler"
@ -3268,7 +3268,7 @@ msgid "Load older activity"
msgstr "Ältere Aktivitäten laden"
#: apps/remix/app/components/general/skeletons/document-edit-skeleton.tsx:29
#: packages/ui/primitives/pdf-viewer.tsx:46
#: packages/ui/primitives/pdf-viewer.tsx:44
#: packages/ui/primitives/lazy-pdf-viewer.tsx:12
msgid "Loading document..."
msgstr "Lade Dokument..."
@ -3740,7 +3740,7 @@ msgid "Page {0} of {1}"
msgstr "Seite {0} von {1}"
#. placeholder {0}: i + 1
#: packages/ui/primitives/pdf-viewer.tsx:261
#: packages/ui/primitives/pdf-viewer.tsx:259
msgid "Page {0} of {numPages}"
msgstr "Seite {0} von {numPages}"
@ -4009,8 +4009,8 @@ msgstr "Bitte versuchen Sie es erneut und stellen Sie sicher, dass Sie die korre
msgid "Please try again later."
msgstr "Bitte versuchen Sie es später noch einmal."
#: packages/ui/primitives/pdf-viewer.tsx:225
#: packages/ui/primitives/pdf-viewer.tsx:240
#: packages/ui/primitives/pdf-viewer.tsx:223
#: packages/ui/primitives/pdf-viewer.tsx:238
msgid "Please try again or contact our support."
msgstr "Bitte versuchen Sie es erneut oder kontaktieren Sie unseren Support."
@ -4906,8 +4906,8 @@ msgstr "Etwas ist schiefgelaufen beim Versuch, das Eigentum des Teams <0>{0}</0>
msgid "Something went wrong while attempting to verify your email address for <0>{0}</0>. Please try again later."
msgstr "Etwas ist schiefgelaufen beim Versuch, Ihre E-Mail-Adresse für <0>{0}</0> zu bestätigen. Bitte versuchen Sie es später erneut."
#: packages/ui/primitives/pdf-viewer.tsx:222
#: packages/ui/primitives/pdf-viewer.tsx:237
#: packages/ui/primitives/pdf-viewer.tsx:220
#: packages/ui/primitives/pdf-viewer.tsx:235
msgid "Something went wrong while loading the document."
msgstr "Beim Laden des Dokuments ist ein Fehler aufgetreten."

View File

@ -993,7 +993,7 @@ msgstr "An error occurred while enabling the user."
msgid "An error occurred while loading team members. Please try again later."
msgstr "An error occurred while loading team members. Please try again later."
#: packages/ui/primitives/pdf-viewer.tsx:169
#: packages/ui/primitives/pdf-viewer.tsx:167
msgid "An error occurred while loading the document."
msgstr "An error occurred while loading the document."
@ -1405,7 +1405,7 @@ msgstr "Can prepare"
#: apps/remix/app/components/forms/2fa/view-recovery-codes-dialog.tsx:172
#: apps/remix/app/components/forms/2fa/enable-authenticator-app-dialog.tsx:263
#: apps/remix/app/components/dialogs/webhook-delete-dialog.tsx:156
#: apps/remix/app/components/dialogs/webhook-create-dialog.tsx:235
#: apps/remix/app/components/dialogs/webhook-create-dialog.tsx:234
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx:167
#: apps/remix/app/components/dialogs/template-move-dialog.tsx:145
#: apps/remix/app/components/dialogs/template-duplicate-dialog.tsx:71
@ -2729,7 +2729,7 @@ msgstr "Enter your text here"
#: apps/remix/app/components/dialogs/admin-user-enable-dialog.tsx:59
#: apps/remix/app/components/dialogs/admin-user-disable-dialog.tsx:62
#: apps/remix/app/components/dialogs/admin-user-delete-dialog.tsx:62
#: packages/ui/primitives/pdf-viewer.tsx:168
#: packages/ui/primitives/pdf-viewer.tsx:166
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:222
msgid "Error"
msgstr "Error"
@ -3263,7 +3263,7 @@ msgid "Load older activity"
msgstr "Load older activity"
#: apps/remix/app/components/general/skeletons/document-edit-skeleton.tsx:29
#: packages/ui/primitives/pdf-viewer.tsx:46
#: packages/ui/primitives/pdf-viewer.tsx:44
#: packages/ui/primitives/lazy-pdf-viewer.tsx:12
msgid "Loading document..."
msgstr "Loading document..."
@ -3735,7 +3735,7 @@ msgid "Page {0} of {1}"
msgstr "Page {0} of {1}"
#. placeholder {0}: i + 1
#: packages/ui/primitives/pdf-viewer.tsx:261
#: packages/ui/primitives/pdf-viewer.tsx:259
msgid "Page {0} of {numPages}"
msgstr "Page {0} of {numPages}"
@ -4004,8 +4004,8 @@ msgstr "Please try again and make sure you enter the correct email address."
msgid "Please try again later."
msgstr "Please try again later."
#: packages/ui/primitives/pdf-viewer.tsx:225
#: packages/ui/primitives/pdf-viewer.tsx:240
#: packages/ui/primitives/pdf-viewer.tsx:223
#: packages/ui/primitives/pdf-viewer.tsx:238
msgid "Please try again or contact our support."
msgstr "Please try again or contact our support."
@ -4901,8 +4901,8 @@ msgstr "Something went wrong while attempting to transfer the ownership of team
msgid "Something went wrong while attempting to verify your email address for <0>{0}</0>. Please try again later."
msgstr "Something went wrong while attempting to verify your email address for <0>{0}</0>. Please try again later."
#: packages/ui/primitives/pdf-viewer.tsx:222
#: packages/ui/primitives/pdf-viewer.tsx:237
#: packages/ui/primitives/pdf-viewer.tsx:220
#: packages/ui/primitives/pdf-viewer.tsx:235
msgid "Something went wrong while loading the document."
msgstr "Something went wrong while loading the document."

View File

@ -998,7 +998,7 @@ msgstr "Se produjo un error al habilitar al usuario."
msgid "An error occurred while loading team members. Please try again later."
msgstr "Ocurrió un error al cargar los miembros del equipo. Por favor intenta de nuevo más tarde."
#: packages/ui/primitives/pdf-viewer.tsx:169
#: packages/ui/primitives/pdf-viewer.tsx:167
msgid "An error occurred while loading the document."
msgstr "Se produjo un error al cargar el documento."
@ -1410,7 +1410,7 @@ msgstr ""
#: apps/remix/app/components/forms/2fa/view-recovery-codes-dialog.tsx:172
#: apps/remix/app/components/forms/2fa/enable-authenticator-app-dialog.tsx:263
#: apps/remix/app/components/dialogs/webhook-delete-dialog.tsx:156
#: apps/remix/app/components/dialogs/webhook-create-dialog.tsx:235
#: apps/remix/app/components/dialogs/webhook-create-dialog.tsx:234
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx:167
#: apps/remix/app/components/dialogs/template-move-dialog.tsx:145
#: apps/remix/app/components/dialogs/template-duplicate-dialog.tsx:71
@ -2734,7 +2734,7 @@ msgstr "Ingresa tu texto aquí"
#: apps/remix/app/components/dialogs/admin-user-enable-dialog.tsx:59
#: apps/remix/app/components/dialogs/admin-user-disable-dialog.tsx:62
#: apps/remix/app/components/dialogs/admin-user-delete-dialog.tsx:62
#: packages/ui/primitives/pdf-viewer.tsx:168
#: packages/ui/primitives/pdf-viewer.tsx:166
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:222
msgid "Error"
msgstr "Error"
@ -3268,7 +3268,7 @@ msgid "Load older activity"
msgstr "Cargar actividad anterior"
#: apps/remix/app/components/general/skeletons/document-edit-skeleton.tsx:29
#: packages/ui/primitives/pdf-viewer.tsx:46
#: packages/ui/primitives/pdf-viewer.tsx:44
#: packages/ui/primitives/lazy-pdf-viewer.tsx:12
msgid "Loading document..."
msgstr "Cargando documento..."
@ -3740,7 +3740,7 @@ msgid "Page {0} of {1}"
msgstr "Página {0} de {1}"
#. placeholder {0}: i + 1
#: packages/ui/primitives/pdf-viewer.tsx:261
#: packages/ui/primitives/pdf-viewer.tsx:259
msgid "Page {0} of {numPages}"
msgstr "Página {0} de {numPages}"
@ -4009,8 +4009,8 @@ msgstr "Por favor, intenta de nuevo y asegúrate de ingresar la dirección de co
msgid "Please try again later."
msgstr "Por favor, intenta de nuevo más tarde."
#: packages/ui/primitives/pdf-viewer.tsx:225
#: packages/ui/primitives/pdf-viewer.tsx:240
#: packages/ui/primitives/pdf-viewer.tsx:223
#: packages/ui/primitives/pdf-viewer.tsx:238
msgid "Please try again or contact our support."
msgstr "Por favor, inténtalo de nuevo o contacta a nuestro soporte."
@ -4906,8 +4906,8 @@ msgstr "Algo salió mal al intentar transferir la propiedad del equipo <0>{0}</0
msgid "Something went wrong while attempting to verify your email address for <0>{0}</0>. Please try again later."
msgstr "Algo salió mal al intentar verificar tu dirección de correo electrónico para <0>{0}</0>. Por favor, intenta de nuevo más tarde."
#: packages/ui/primitives/pdf-viewer.tsx:222
#: packages/ui/primitives/pdf-viewer.tsx:237
#: packages/ui/primitives/pdf-viewer.tsx:220
#: packages/ui/primitives/pdf-viewer.tsx:235
msgid "Something went wrong while loading the document."
msgstr "Algo salió mal al cargar el documento."

View File

@ -998,7 +998,7 @@ msgstr "Une erreur est survenue lors de l'activation de l'utilisateur."
msgid "An error occurred while loading team members. Please try again later."
msgstr "Une erreur est survenue lors du chargement des membres de l'équipe. Veuillez réessayer plus tard."
#: packages/ui/primitives/pdf-viewer.tsx:169
#: packages/ui/primitives/pdf-viewer.tsx:167
msgid "An error occurred while loading the document."
msgstr "Une erreur est survenue lors du chargement du document."
@ -1410,7 +1410,7 @@ msgstr ""
#: apps/remix/app/components/forms/2fa/view-recovery-codes-dialog.tsx:172
#: apps/remix/app/components/forms/2fa/enable-authenticator-app-dialog.tsx:263
#: apps/remix/app/components/dialogs/webhook-delete-dialog.tsx:156
#: apps/remix/app/components/dialogs/webhook-create-dialog.tsx:235
#: apps/remix/app/components/dialogs/webhook-create-dialog.tsx:234
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx:167
#: apps/remix/app/components/dialogs/template-move-dialog.tsx:145
#: apps/remix/app/components/dialogs/template-duplicate-dialog.tsx:71
@ -2734,7 +2734,7 @@ msgstr "Entrez votre texte ici"
#: apps/remix/app/components/dialogs/admin-user-enable-dialog.tsx:59
#: apps/remix/app/components/dialogs/admin-user-disable-dialog.tsx:62
#: apps/remix/app/components/dialogs/admin-user-delete-dialog.tsx:62
#: packages/ui/primitives/pdf-viewer.tsx:168
#: packages/ui/primitives/pdf-viewer.tsx:166
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:222
msgid "Error"
msgstr "Erreur"
@ -3268,7 +3268,7 @@ msgid "Load older activity"
msgstr "Charger l'activité plus ancienne"
#: apps/remix/app/components/general/skeletons/document-edit-skeleton.tsx:29
#: packages/ui/primitives/pdf-viewer.tsx:46
#: packages/ui/primitives/pdf-viewer.tsx:44
#: packages/ui/primitives/lazy-pdf-viewer.tsx:12
msgid "Loading document..."
msgstr "Chargement du document..."
@ -3740,7 +3740,7 @@ msgid "Page {0} of {1}"
msgstr "Page {0} sur {1}"
#. placeholder {0}: i + 1
#: packages/ui/primitives/pdf-viewer.tsx:261
#: packages/ui/primitives/pdf-viewer.tsx:259
msgid "Page {0} of {numPages}"
msgstr "Page {0} sur {numPages}"
@ -4009,8 +4009,8 @@ msgstr "Veuillez réessayer et assurez-vous d'entrer la bonne adresse email."
msgid "Please try again later."
msgstr "Veuillez réessayer plus tard."
#: packages/ui/primitives/pdf-viewer.tsx:225
#: packages/ui/primitives/pdf-viewer.tsx:240
#: packages/ui/primitives/pdf-viewer.tsx:223
#: packages/ui/primitives/pdf-viewer.tsx:238
msgid "Please try again or contact our support."
msgstr "Veuillez réessayer ou contacter notre support."
@ -4906,8 +4906,8 @@ msgstr "Quelque chose a mal tourné lors de la tentative de transfert de la prop
msgid "Something went wrong while attempting to verify your email address for <0>{0}</0>. Please try again later."
msgstr "Quelque chose a mal tourné lors de la tentative de vérification de votre adresse e-mail pour <0>{0}</0>. Veuillez réessayer plus tard."
#: packages/ui/primitives/pdf-viewer.tsx:222
#: packages/ui/primitives/pdf-viewer.tsx:237
#: packages/ui/primitives/pdf-viewer.tsx:220
#: packages/ui/primitives/pdf-viewer.tsx:235
msgid "Something went wrong while loading the document."
msgstr "Une erreur s'est produite lors du chargement du document."

View File

@ -998,7 +998,7 @@ msgstr "Si è verificato un errore durante l'abilitazione dell'utente."
msgid "An error occurred while loading team members. Please try again later."
msgstr "Si è verificato un errore durante il caricamento dei membri del team. Per favore riprova più tardi."
#: packages/ui/primitives/pdf-viewer.tsx:169
#: packages/ui/primitives/pdf-viewer.tsx:167
msgid "An error occurred while loading the document."
msgstr "Si è verificato un errore durante il caricamento del documento."
@ -1410,7 +1410,7 @@ msgstr ""
#: apps/remix/app/components/forms/2fa/view-recovery-codes-dialog.tsx:172
#: apps/remix/app/components/forms/2fa/enable-authenticator-app-dialog.tsx:263
#: apps/remix/app/components/dialogs/webhook-delete-dialog.tsx:156
#: apps/remix/app/components/dialogs/webhook-create-dialog.tsx:235
#: apps/remix/app/components/dialogs/webhook-create-dialog.tsx:234
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx:167
#: apps/remix/app/components/dialogs/template-move-dialog.tsx:145
#: apps/remix/app/components/dialogs/template-duplicate-dialog.tsx:71
@ -2734,7 +2734,7 @@ msgstr "Inserisci il tuo testo qui"
#: apps/remix/app/components/dialogs/admin-user-enable-dialog.tsx:59
#: apps/remix/app/components/dialogs/admin-user-disable-dialog.tsx:62
#: apps/remix/app/components/dialogs/admin-user-delete-dialog.tsx:62
#: packages/ui/primitives/pdf-viewer.tsx:168
#: packages/ui/primitives/pdf-viewer.tsx:166
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:222
msgid "Error"
msgstr "Errore"
@ -3268,7 +3268,7 @@ msgid "Load older activity"
msgstr "Carica attività precedente"
#: apps/remix/app/components/general/skeletons/document-edit-skeleton.tsx:29
#: packages/ui/primitives/pdf-viewer.tsx:46
#: packages/ui/primitives/pdf-viewer.tsx:44
#: packages/ui/primitives/lazy-pdf-viewer.tsx:12
msgid "Loading document..."
msgstr "Caricamento del documento..."
@ -3740,7 +3740,7 @@ msgid "Page {0} of {1}"
msgstr "Pagina {0} di {1}"
#. placeholder {0}: i + 1
#: packages/ui/primitives/pdf-viewer.tsx:261
#: packages/ui/primitives/pdf-viewer.tsx:259
msgid "Page {0} of {numPages}"
msgstr "Pagina {0} di {numPages}"
@ -4009,8 +4009,8 @@ msgstr "Si prega di riprovare assicurandosi di inserire l'indirizzo email corret
msgid "Please try again later."
msgstr "Si prega di riprovare più tardi."
#: packages/ui/primitives/pdf-viewer.tsx:225
#: packages/ui/primitives/pdf-viewer.tsx:240
#: packages/ui/primitives/pdf-viewer.tsx:223
#: packages/ui/primitives/pdf-viewer.tsx:238
msgid "Please try again or contact our support."
msgstr "Per favore, riprova o contatta il nostro supporto."
@ -4906,8 +4906,8 @@ msgstr "Qualcosa è andato storto durante il tentativo di trasferimento della pr
msgid "Something went wrong while attempting to verify your email address for <0>{0}</0>. Please try again later."
msgstr "Qualcosa è andato storto durante il tentativo di verifica del tuo indirizzo e-mail per <0>{0}</0>. Riprova più tardi."
#: packages/ui/primitives/pdf-viewer.tsx:222
#: packages/ui/primitives/pdf-viewer.tsx:237
#: packages/ui/primitives/pdf-viewer.tsx:220
#: packages/ui/primitives/pdf-viewer.tsx:235
msgid "Something went wrong while loading the document."
msgstr "Qualcosa è andato storto durante il caricamento del documento."

View File

@ -998,7 +998,7 @@ msgstr "Wystąpił błąd podczas włączania użytkownika."
msgid "An error occurred while loading team members. Please try again later."
msgstr "Wystąpił błąd podczas ładowania członków zespołu. Proszę spróbować ponownie później."
#: packages/ui/primitives/pdf-viewer.tsx:169
#: packages/ui/primitives/pdf-viewer.tsx:167
msgid "An error occurred while loading the document."
msgstr "Wystąpił błąd podczas ładowania dokumentu."
@ -1410,7 +1410,7 @@ msgstr ""
#: apps/remix/app/components/forms/2fa/view-recovery-codes-dialog.tsx:172
#: apps/remix/app/components/forms/2fa/enable-authenticator-app-dialog.tsx:263
#: apps/remix/app/components/dialogs/webhook-delete-dialog.tsx:156
#: apps/remix/app/components/dialogs/webhook-create-dialog.tsx:235
#: apps/remix/app/components/dialogs/webhook-create-dialog.tsx:234
#: apps/remix/app/components/dialogs/token-delete-dialog.tsx:167
#: apps/remix/app/components/dialogs/template-move-dialog.tsx:145
#: apps/remix/app/components/dialogs/template-duplicate-dialog.tsx:71
@ -2734,7 +2734,7 @@ msgstr "Wprowadź swój tekst tutaj"
#: apps/remix/app/components/dialogs/admin-user-enable-dialog.tsx:59
#: apps/remix/app/components/dialogs/admin-user-disable-dialog.tsx:62
#: apps/remix/app/components/dialogs/admin-user-delete-dialog.tsx:62
#: packages/ui/primitives/pdf-viewer.tsx:168
#: packages/ui/primitives/pdf-viewer.tsx:166
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:222
msgid "Error"
msgstr "Błąd"
@ -3268,7 +3268,7 @@ msgid "Load older activity"
msgstr "Załaduj starszą aktywność"
#: apps/remix/app/components/general/skeletons/document-edit-skeleton.tsx:29
#: packages/ui/primitives/pdf-viewer.tsx:46
#: packages/ui/primitives/pdf-viewer.tsx:44
#: packages/ui/primitives/lazy-pdf-viewer.tsx:12
msgid "Loading document..."
msgstr "Ładowanie dokumentu..."
@ -3740,7 +3740,7 @@ msgid "Page {0} of {1}"
msgstr "Strona {0} z {1}"
#. placeholder {0}: i + 1
#: packages/ui/primitives/pdf-viewer.tsx:261
#: packages/ui/primitives/pdf-viewer.tsx:259
msgid "Page {0} of {numPages}"
msgstr "Strona {0} z {numPages}"
@ -4009,8 +4009,8 @@ msgstr "Spróbuj ponownie i upewnij się, że wprowadzasz poprawny adres email."
msgid "Please try again later."
msgstr "Proszę spróbować ponownie później."
#: packages/ui/primitives/pdf-viewer.tsx:225
#: packages/ui/primitives/pdf-viewer.tsx:240
#: packages/ui/primitives/pdf-viewer.tsx:223
#: packages/ui/primitives/pdf-viewer.tsx:238
msgid "Please try again or contact our support."
msgstr "Spróbuj ponownie lub skontaktuj się z naszym wsparciem."
@ -4906,8 +4906,8 @@ msgstr "Coś poszło nie tak podczas próby przeniesienia własności zespołu <
msgid "Something went wrong while attempting to verify your email address for <0>{0}</0>. Please try again later."
msgstr "Coś poszło nie tak podczas próby weryfikacji adresu e-mail dla <0>{0}</0>. Proszę spróbować ponownie później."
#: packages/ui/primitives/pdf-viewer.tsx:222
#: packages/ui/primitives/pdf-viewer.tsx:237
#: packages/ui/primitives/pdf-viewer.tsx:220
#: packages/ui/primitives/pdf-viewer.tsx:235
msgid "Something went wrong while loading the document."
msgstr "Coś poszło nie tak podczas ładowania dokumentu."

View File

@ -2,6 +2,8 @@ import { DocumentDataType } from '@prisma/client';
import { base64 } from '@scure/base';
import { match } from 'ts-pattern';
import { getPresignGetUrl } from './server-actions';
export type GetFileOptions = {
type: DocumentDataType;
data: string;
@ -30,8 +32,6 @@ const getFileFromBytes64 = (data: string) => {
};
const getFileFromS3 = async (key: string) => {
const { getPresignGetUrl } = await import('./server-actions');
const { url } = await getPresignGetUrl(key);
const response = await fetch(url, {

View File

@ -2,6 +2,8 @@ import { DocumentDataType } from '@prisma/client';
import { base64 } from '@scure/base';
import { match } from 'ts-pattern';
import { getAbsolutePresignPostUrl } from './server-actions';
export type UpdateFileOptions = {
type: DocumentDataType;
oldData: string;
@ -37,8 +39,6 @@ const updateFileWithBytes64 = (data: string) => {
};
const updateFileWithS3 = async (key: string, data: string) => {
const { getAbsolutePresignPostUrl } = await import('./server-actions');
const { url } = await getAbsolutePresignPostUrl(key);
const response = await fetch(url, {