fix: self-hosting
This commit is contained in:
@@ -18,12 +18,7 @@ type Props = {
|
|||||||
onVerified: (verified: boolean) => void;
|
onVerified: (verified: boolean) => void;
|
||||||
};
|
};
|
||||||
|
|
||||||
const VerifyListener = ({
|
const VerifyListener = ({ client, events: _events, onVerified }: Props) => {
|
||||||
client,
|
|
||||||
events: _events,
|
|
||||||
onVerified,
|
|
||||||
project,
|
|
||||||
}: Props) => {
|
|
||||||
const [events, setEvents] = useState<IServiceEvent[]>(_events ?? []);
|
const [events, setEvents] = useState<IServiceEvent[]>(_events ?? []);
|
||||||
useWS<IServiceEvent>(
|
useWS<IServiceEvent>(
|
||||||
`/live/events/${client?.projectId}?type=received`,
|
`/live/events/${client?.projectId}?type=received`,
|
||||||
|
|||||||
@@ -130,10 +130,10 @@ export function SidebarContainer({
|
|||||||
>
|
>
|
||||||
{children}
|
{children}
|
||||||
|
|
||||||
<div className="mt-auto w-full ">
|
<div className="mt-auto w-full pt-6">
|
||||||
<FeedbackButton />
|
<FeedbackButton />
|
||||||
{isSelfHosted && (
|
{isSelfHosted && (
|
||||||
<div className={cn('text-sm w-full text-center')}>
|
<div className={cn('text-sm w-full text-left mt-2')}>
|
||||||
Self-hosted instance
|
Self-hosted instance
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|||||||
@@ -5,7 +5,11 @@ export function useAppContext() {
|
|||||||
strict: false,
|
strict: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!params.apiUrl || !params.dashboardUrl || !params.isSelfHosted) {
|
if (
|
||||||
|
!params.apiUrl ||
|
||||||
|
!params.dashboardUrl ||
|
||||||
|
typeof params.isSelfHosted === 'undefined'
|
||||||
|
) {
|
||||||
throw new Error('API URL or dashboard URL is not set');
|
throw new Error('API URL or dashboard URL is not set');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import {
|
|||||||
HeadContent,
|
HeadContent,
|
||||||
Scripts,
|
Scripts,
|
||||||
createRootRouteWithContext,
|
createRootRouteWithContext,
|
||||||
|
useRouteContext,
|
||||||
} from '@tanstack/react-router';
|
} from '@tanstack/react-router';
|
||||||
|
|
||||||
import 'flag-icons/css/flag-icons.min.css';
|
import 'flag-icons/css/flag-icons.min.css';
|
||||||
@@ -23,7 +24,9 @@ import { op } from '@/utils/op';
|
|||||||
import type { AppRouter } from '@openpanel/trpc';
|
import type { AppRouter } from '@openpanel/trpc';
|
||||||
import type { TRPCOptionsProxy } from '@trpc/tanstack-react-query';
|
import type { TRPCOptionsProxy } from '@trpc/tanstack-react-query';
|
||||||
|
|
||||||
op.init();
|
if (import.meta.env.VITE_OP_CLIENT_ID) {
|
||||||
|
op.init();
|
||||||
|
}
|
||||||
|
|
||||||
interface MyRouterContext {
|
interface MyRouterContext {
|
||||||
queryClient: QueryClient;
|
queryClient: QueryClient;
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import { PAGE_TITLES, createEntityTitle } from '@/utils/title';
|
|||||||
import { useQuery } from '@tanstack/react-query';
|
import { useQuery } from '@tanstack/react-query';
|
||||||
import { Link, createFileRoute, redirect } from '@tanstack/react-router';
|
import { Link, createFileRoute, redirect } from '@tanstack/react-router';
|
||||||
import { BoxSelectIcon } from 'lucide-react';
|
import { BoxSelectIcon } from 'lucide-react';
|
||||||
|
import { useEffect, useState } from 'react';
|
||||||
|
|
||||||
export const Route = createFileRoute('/_steps/onboarding/$projectId/verify')({
|
export const Route = createFileRoute('/_steps/onboarding/$projectId/verify')({
|
||||||
head: () => ({
|
head: () => ({
|
||||||
@@ -32,6 +33,7 @@ export const Route = createFileRoute('/_steps/onboarding/$projectId/verify')({
|
|||||||
});
|
});
|
||||||
|
|
||||||
function Component() {
|
function Component() {
|
||||||
|
const [isVerified, setIsVerified] = useState(false);
|
||||||
const { projectId } = Route.useParams();
|
const { projectId } = Route.useParams();
|
||||||
const trpc = useTRPC();
|
const trpc = useTRPC();
|
||||||
const { data: events, refetch } = useQuery(
|
const { data: events, refetch } = useQuery(
|
||||||
@@ -41,7 +43,11 @@ function Component() {
|
|||||||
trpc.project.getProjectWithClients.queryOptions({ projectId }),
|
trpc.project.getProjectWithClients.queryOptions({ projectId }),
|
||||||
);
|
);
|
||||||
|
|
||||||
const isVerified = events && events.data.length > 0;
|
useEffect(() => {
|
||||||
|
if (events && events.data.length > 0) {
|
||||||
|
setIsVerified(true);
|
||||||
|
}
|
||||||
|
}, [events]);
|
||||||
|
|
||||||
if (!project) {
|
if (!project) {
|
||||||
return (
|
return (
|
||||||
@@ -60,7 +66,10 @@ function Component() {
|
|||||||
project={project}
|
project={project}
|
||||||
client={client}
|
client={client}
|
||||||
events={events?.data ?? []}
|
events={events?.data ?? []}
|
||||||
onVerified={() => refetch()}
|
onVerified={() => {
|
||||||
|
refetch();
|
||||||
|
setIsVerified(true);
|
||||||
|
}}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<CurlPreview project={project} />
|
<CurlPreview project={project} />
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { OpenPanel } from '@openpanel/web';
|
import { OpenPanel } from '@openpanel/web';
|
||||||
|
|
||||||
export const op = new OpenPanel({
|
export const op = new OpenPanel({
|
||||||
clientId: '301c6dc1-424c-4bc3-9886-a8beab09b615',
|
clientId: import.meta.env.VITE_OP_CLIENT_ID,
|
||||||
trackScreenViews: true,
|
trackScreenViews: true,
|
||||||
trackOutgoingLinks: true,
|
trackOutgoingLinks: true,
|
||||||
trackAttributes: true,
|
trackAttributes: true,
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"vars": {
|
"vars": {
|
||||||
|
"VITE_OP_CLIENT_ID": "301c6dc1-424c-4bc3-9886-a8beab09b615",
|
||||||
"API_URL": "https://api.openpanel.dev",
|
"API_URL": "https://api.openpanel.dev",
|
||||||
"DASHBOARD_URL": "https://dashboard.openpanel.dev",
|
"DASHBOARD_URL": "https://dashboard.openpanel.dev",
|
||||||
"NODE_ENV": "production",
|
"NODE_ENV": "production",
|
||||||
|
|||||||
Reference in New Issue
Block a user