Skip to content

Commit 796e587

Browse files
committed
Got rid of stupid extra /dev, added a connecting state with icon
1 parent cd8bc95 commit 796e587

File tree

4 files changed

+54
-16
lines changed

4 files changed

+54
-16
lines changed

apps/webapp/app/assets/icons/ConnectionIcons.tsx

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,3 +46,25 @@ export function DisconnectedIcon({ className }: { className?: string }) {
4646
</svg>
4747
);
4848
}
49+
50+
export function CheckingConnectionIcon({ className }: { className?: string }) {
51+
return (
52+
<svg className={className} viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
53+
<rect
54+
x="0.5"
55+
y="-0.5"
56+
width="19"
57+
height="1"
58+
rx="0.5"
59+
transform="matrix(1 0 0 -1 1.99998 20)"
60+
stroke="#878C99"
61+
/>
62+
<path
63+
fillRule="evenodd"
64+
clipRule="evenodd"
65+
d="M18 6.5L6.00001 6.5C5.72387 6.5 5.50001 6.72386 5.50001 7L5.50001 15C5.50001 15.2761 5.72387 15.5 6.00001 15.5L18 15.5C18.2762 15.5 18.5 15.2761 18.5 15V7C18.5 6.72386 18.2762 6.5 18 6.5ZM6.00001 5C4.89545 5 4.00001 5.89543 4.00001 7L4.00001 15C4.00001 16.1046 4.89545 17 6.00001 17L18 17C19.1046 17 20 16.1046 20 15V7C20 5.89543 19.1046 5 18 5L6.00001 5Z"
66+
fill="#878C99"
67+
/>
68+
</svg>
69+
);
70+
}

apps/webapp/app/components/DevPresence.tsx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@ import { useProject } from "~/hooks/useProject";
66

77
// Define Context types
88
type DevPresenceContextType = {
9-
isConnected: boolean;
9+
isConnected: boolean | undefined;
1010
};
1111

1212
// Create Context with default values
1313
const DevPresenceContext = createContext<DevPresenceContextType>({
14-
isConnected: false,
14+
isConnected: undefined,
1515
});
1616

1717
// Provider component with enabled prop
@@ -27,19 +27,19 @@ export function DevPresenceProvider({ children, enabled = true }: DevPresencePro
2727

2828
// Only subscribe to event source if enabled is true
2929
const streamedEvents = useEventSource(
30-
`/resources/orgs/${organization.slug}/projects/${project.slug}/env/${environment.slug}/dev/presence`,
30+
`/resources/orgs/${organization.slug}/projects/${project.slug}/dev/presence`,
3131
{
3232
event: "presence",
3333
disabled: !enabled,
3434
}
3535
);
3636

37-
const [isConnected, setIsConnected] = useState<boolean>(false);
37+
const [isConnected, setIsConnected] = useState<boolean | undefined>(undefined);
3838

3939
useEffect(() => {
40-
// If disabled or no events, set lastSeen to null
40+
// If disabled or no events
4141
if (!enabled || streamedEvents === null) {
42-
setIsConnected(false);
42+
setIsConnected(undefined);
4343
return;
4444
}
4545

apps/webapp/app/components/navigation/SideMenu.tsx

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,11 @@ import {
2020
import { useNavigation } from "@remix-run/react";
2121
import { useEffect, useRef, useState, type ReactNode } from "react";
2222
import simplur from "simplur";
23-
import { ConnectedIcon, DisconnectedIcon } from "~/assets/icons/ConnectionIcons";
23+
import {
24+
CheckingConnectionIcon,
25+
ConnectedIcon,
26+
DisconnectedIcon,
27+
} from "~/assets/icons/ConnectionIcons";
2428
import { RunsIconExtraSmall, RunsIconSmall } from "~/assets/icons/RunsIcon";
2529
import { TaskIconSmall } from "~/assets/icons/TaskIcon";
2630
import { Avatar } from "~/components/primitives/Avatar";
@@ -82,6 +86,7 @@ import { SideMenuHeader } from "./SideMenuHeader";
8286
import { SideMenuItem } from "./SideMenuItem";
8387
import { SideMenuSection } from "./SideMenuSection";
8488
import { WaitpointTokenIcon } from "~/assets/icons/WaitpointTokenIcon";
89+
import { Spinner } from "../primitives/Spinner";
8590

8691
type SideMenuUser = Pick<User, "email" | "admin"> & { isImpersonating: boolean };
8792
export type SideMenuProject = Pick<
@@ -532,7 +537,9 @@ export function DevConnection() {
532537
variant="minimal/small"
533538
className="aspect-square h-7 p-1"
534539
LeadingIcon={
535-
isConnected ? (
540+
isConnected === undefined ? (
541+
<CheckingConnectionIcon className="size-5" />
542+
) : isConnected ? (
536543
<ConnectedIcon className="size-5" />
537544
) : (
538545
<DisconnectedIcon className="size-5" />
@@ -543,24 +550,34 @@ export function DevConnection() {
543550
</div>
544551
</TooltipTrigger>
545552
<TooltipContent side="right" className={"text-xs"}>
546-
{isConnected ? "Your dev server is connected" : "Your dev server is not connected"}
553+
{isConnected === undefined
554+
? "Checking connection..."
555+
: isConnected
556+
? "Your dev server is connected"
557+
: "Your dev server is not connected"}
547558
</TooltipContent>
548559
</Tooltip>
549560
</TooltipProvider>
550561
<DialogContent>
551562
<DialogHeader>
552-
{isConnected ? "Your dev server is connected" : "Your dev server is not connected"}
563+
{isConnected === undefined
564+
? "Checking connection..."
565+
: isConnected
566+
? "Your dev server is connected"
567+
: "Your dev server is not connected"}
553568
</DialogHeader>
554569
<div className="mt-2 flex flex-col gap-3 px-2">
555570
<div className="flex flex-col items-center justify-center gap-6 px-6 py-10">
556571
<img
557-
src={isConnected ? connectedImage : disconnectedImage}
558-
alt={isConnected ? "Connected" : "Disconnected"}
572+
src={isConnected === true ? connectedImage : disconnectedImage}
573+
alt={isConnected === true ? "Connected" : "Disconnected"}
559574
width={282}
560575
height={45}
561576
/>
562577
<Paragraph variant="small" className={isConnected ? "text-success" : "text-error"}>
563-
{isConnected
578+
{isConnected === undefined
579+
? "Checking connection..."
580+
: isConnected
564581
? "Your local dev server is connected to Trigger.dev"
565582
: "Your local dev server is not connected to Trigger.dev"}
566583
</Paragraph>
Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { env } from "~/env.server";
33
import { devPresence } from "~/presenters/v3/DevPresence.server";
44
import { logger } from "~/services/logger.server";
55
import { requireUserId } from "~/services/session.server";
6-
import { EnvironmentParamSchema } from "~/utils/pathBuilder";
6+
import { ProjectParamSchema } from "~/utils/pathBuilder";
77
import { createSSELoader, type SendFunction } from "~/utils/sse";
88

99
export const loader = createSSELoader({
@@ -12,11 +12,10 @@ export const loader = createSSELoader({
1212
debug: true,
1313
handler: async ({ id, controller, debug, request, params }) => {
1414
const userId = await requireUserId(request);
15-
const { organizationSlug, projectParam, envParam } = EnvironmentParamSchema.parse(params);
15+
const { organizationSlug, projectParam } = ProjectParamSchema.parse(params);
1616

1717
const environment = await $replica.runtimeEnvironment.findFirst({
1818
where: {
19-
slug: envParam,
2019
type: "DEVELOPMENT",
2120
orgMember: {
2221
userId,

0 commit comments

Comments
 (0)