Skip to content

Commit bbbe8fa

Browse files
committed
select engine version to update to
1 parent 2684176 commit bbbe8fa

File tree

6 files changed

+65
-57
lines changed

6 files changed

+65
-57
lines changed

apps/dashboard/src/@3rdweb-sdk/react/hooks/useEngine.ts

Lines changed: 9 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -195,31 +195,19 @@ interface GetDeploymentPublicConfigurationInput {
195195
teamId: string;
196196
}
197197

198+
interface DeploymentPublicConfigurationResponse {
199+
serverVersions: {
200+
name: string;
201+
createdAt: string;
202+
}[];
203+
}
204+
198205
export function useEngineGetDeploymentPublicConfiguration(
199206
input: GetDeploymentPublicConfigurationInput,
200207
) {
201-
return useQuery({
208+
return useQuery<DeploymentPublicConfigurationResponse>({
202209
queryKey: engineKeys.deployment(),
203210
queryFn: async () => {
204-
// DEBUG
205-
return {
206-
serverVersions: {
207-
latest: "v2.1.0",
208-
recent: [
209-
"v2.0.35",
210-
"v2.0.34",
211-
"v2.0.33",
212-
"v2.0.32",
213-
"v2.0.31",
214-
"v2.0.30",
215-
"v2.0.29",
216-
"v2.0.28",
217-
"v2.0.27",
218-
"v2.0.26",
219-
],
220-
},
221-
};
222-
223211
const res = await fetch(
224212
`${THIRDWEB_API_HOST}/v1/teams/${input.teamId}/engine/deployments/public-configuration`,
225213
{ method: "GET" },
@@ -229,12 +217,7 @@ export function useEngineGetDeploymentPublicConfiguration(
229217
}
230218

231219
const json = await res.json();
232-
return json.data as {
233-
serverVersions: {
234-
latest: string;
235-
recent: string[];
236-
};
237-
};
220+
return json.data as DeploymentPublicConfigurationResponse;
238221
},
239222
});
240223
}

apps/dashboard/src/app/team/[team_slug]/(team)/~/engine/(instance)/[engineId]/_components/EnginePageLayout.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,7 @@ function RenderEngineInstanceHeader(props: {
261261
)}
262262
</div>
263263
</div>
264-
<EngineVersionBadge instance={instance} />
264+
<EngineVersionBadge instance={instance} teamId={instance.accountId} />
265265
</div>
266266

267267
<div className="h-5" />

apps/dashboard/src/app/team/[team_slug]/(team)/~/engine/(instance)/[engineId]/_components/version.tsx

Lines changed: 40 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import {
2626
useEngineSystemHealth,
2727
useEngineUpdateDeployment,
2828
} from "@3rdweb-sdk/react/hooks/useEngine";
29+
import { formatDistanceToNow } from "date-fns";
2930
import {
3031
CircleArrowDownIcon,
3132
CloudDownloadIcon,
@@ -37,24 +38,27 @@ import invariant from "tiny-invariant";
3738

3839
export const EngineVersionBadge = ({
3940
instance,
41+
teamId,
4042
}: {
4143
instance: EngineInstance;
44+
teamId: string;
4245
}) => {
43-
const teamId = "DEBUG - UNIMPLEMENTED";
44-
4546
const healthQuery = useEngineSystemHealth(instance.url);
4647
const publicConfigurationQuery = useEngineGetDeploymentPublicConfiguration({
4748
teamId,
4849
});
4950
const [isModalOpen, setModalOpen] = useState(false);
5051

51-
if (!healthQuery.data || !publicConfigurationQuery.data) {
52+
if (
53+
!healthQuery.data ||
54+
publicConfigurationQuery.data.serverVersions?.length === 0
55+
) {
5256
return null;
5357
}
5458

59+
const serverVersions = publicConfigurationQuery.data.serverVersions;
5560
const currentVersion = healthQuery.data.engineVersion ?? "N/A";
56-
const hasNewerVersion =
57-
publicConfigurationQuery.data.serverVersions.latest !== currentVersion;
61+
const hasNewerVersion = serverVersions[0].name !== currentVersion;
5862

5963
// Hide the change version modal unless owner.
6064
if (!instance.deploymentId) {
@@ -98,7 +102,8 @@ export const EngineVersionBadge = ({
98102
onOpenChange={setModalOpen}
99103
instance={instance}
100104
currentVersion={currentVersion}
101-
serverVersions={publicConfigurationQuery.data.serverVersions}
105+
serverVersions={serverVersions}
106+
teamId={teamId}
102107
/>
103108
</>
104109
);
@@ -109,12 +114,20 @@ const ChangeVersionModal = (props: {
109114
onOpenChange: (open: boolean) => void;
110115
instance: EngineInstance;
111116
currentVersion: string;
112-
serverVersions: { latest: string; recent: string[] };
117+
serverVersions: { name: string; createdAt: string }[];
118+
teamId: string;
113119
}) => {
114-
const teamId = "DEBUG - UNIMPLEMENTED";
115-
const { open, onOpenChange, instance, currentVersion, serverVersions } =
116-
props;
117-
const [selectedVersion, setSelectedVersion] = useState(serverVersions.latest);
120+
const {
121+
open,
122+
onOpenChange,
123+
instance,
124+
currentVersion,
125+
serverVersions,
126+
teamId,
127+
} = props;
128+
const [selectedVersion, setSelectedVersion] = useState(
129+
serverVersions[0]?.name,
130+
);
118131
const updateDeploymentMutation = useEngineUpdateDeployment();
119132

120133
if (!instance.deploymentId) {
@@ -188,26 +201,27 @@ const ChangeVersionModal = (props: {
188201
</SelectTrigger>
189202
<SelectContent className="z-[10001]">
190203
<SelectGroup>
191-
<SelectItem
192-
value={serverVersions.latest}
193-
id={serverVersions.latest}
194-
>
195-
{serverVersions.latest}
196-
<Badge className="ml-2">latest</Badge>
197-
</SelectItem>
198-
{serverVersions.recent.map((version) => {
199-
const isCurrentVersion = version === currentVersion;
204+
{serverVersions.map(({ name, createdAt }, idx) => {
205+
const isCurrentVersion = name === currentVersion;
206+
const isLatestVersion = idx === 0;
200207
return (
201208
<SelectItem
202-
key={version}
203-
value={version}
204-
id={version}
209+
key={name}
210+
value={name}
211+
id={name}
205212
disabled={isCurrentVersion}
206213
>
207-
{version}
208-
{isCurrentVersion && (
214+
<span>{name}</span>
215+
<span className="ml-4 text-muted-foreground">
216+
{formatDistanceToNow(new Date(createdAt), {
217+
addSuffix: true,
218+
})}
219+
</span>
220+
{isCurrentVersion ? (
209221
<Badge className="ml-2">current</Badge>
210-
)}
222+
) : isLatestVersion ? (
223+
<Badge className="ml-2">latest</Badge>
224+
) : null}
211225
</SelectItem>
212226
);
213227
})}

apps/dashboard/src/app/team/[team_slug]/(team)/~/engine/(instance)/[engineId]/overview/overview-page.client.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,16 @@ import { EngineOverview } from "./components/engine-overview";
55

66
export function EngineOverviewPage(props: {
77
engineId: string;
8-
team_slug: string;
8+
teamSlug: string;
9+
teamId: string;
910
}) {
1011
return (
1112
<WithEngineInstance
1213
engineId={props.engineId}
1314
content={(res) => (
14-
<EngineOverview instance={res.instance} teamSlug={props.team_slug} />
15+
<EngineOverview instance={res.instance} teamSlug={props.teamSlug} />
1516
)}
16-
teamSlug={props.team_slug}
17+
teamId={props.teamId}
1718
/>
1819
);
1920
}
Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,20 @@
1+
import { getTeamBySlug } from "@/api/team";
2+
import { redirect } from "next/navigation";
13
import { EngineOverviewPage } from "./overview/overview-page.client";
24
import type { EngineInstancePageProps } from "./types";
35

46
export default async function Page(props: EngineInstancePageProps) {
57
const params = await props.params;
8+
const team = await getTeamBySlug(params.team_slug);
9+
if (!team) {
10+
redirect("/team");
11+
}
12+
613
return (
714
<EngineOverviewPage
815
engineId={params.engineId}
9-
team_slug={params.team_slug}
16+
teamSlug={params.team_slug}
17+
teamId={team.id}
1018
/>
1119
);
1220
}

apps/dashboard/src/data/analytics/fetch-analytics.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ export async function fetchAnalytics(
44
input: string | URL,
55
init?: RequestInit,
66
): Promise<Response> {
7+
return;
8+
79
const [pathname, searchParams] = input.toString().split("?");
810
if (!pathname) {
911
throw new Error("Invalid input, no pathname provided");

0 commit comments

Comments
 (0)