Skip to content

Commit 9789df9

Browse files
committed
chore: improve iframe loading time
1 parent 216fe44 commit 9789df9

File tree

1 file changed

+41
-19
lines changed

1 file changed

+41
-19
lines changed

site/src/pages/TaskPage/TaskPage.tsx

Lines changed: 41 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,13 @@ import {
1919
TooltipProvider,
2020
TooltipTrigger,
2121
} from "components/Tooltip/Tooltip";
22-
import { useProxy } from "contexts/ProxyContext";
2322
import {
2423
ArrowLeftIcon,
2524
ChevronDownIcon,
2625
LayoutGridIcon,
2726
RotateCcwIcon,
2827
} from "lucide-react";
2928
import { AppStatusIcon } from "modules/apps/AppStatusIcon";
30-
import { getAppHref } from "modules/apps/apps";
3129
import { useAppLink } from "modules/apps/useAppLink";
3230
import { AI_PROMPT_PARAMETER_NAME, type Task } from "modules/tasks/tasks";
3331
import { WorkspaceAppStatus } from "modules/workspaces/WorkspaceAppStatus/WorkspaceAppStatus";
@@ -312,17 +310,6 @@ const TaskApps: FC<TaskAppsProps> = ({ task }) => {
312310
throw new Error(`Agent for app ${activeAppId} not found in task workspace`);
313311
}
314312

315-
const { proxy } = useProxy();
316-
const [iframeSrc, setIframeSrc] = useState(() => {
317-
const src = getAppHref(activeApp, {
318-
agent,
319-
workspace: task.workspace,
320-
path: proxy.preferredPathAppURL,
321-
host: proxy.preferredWildcardHostname,
322-
});
323-
return src;
324-
});
325-
326313
const embeddedApps = apps.filter((app) => !app.external);
327314
const externalApps = apps.filter((app) => app.external);
328315

@@ -344,7 +331,6 @@ const TaskApps: FC<TaskAppsProps> = ({ task }) => {
344331

345332
e.preventDefault();
346333
setActiveAppId(app.id);
347-
setIframeSrc(e.currentTarget.href);
348334
}}
349335
/>
350336
))}
@@ -387,11 +373,16 @@ const TaskApps: FC<TaskAppsProps> = ({ task }) => {
387373
</div>
388374

389375
<div className="flex-1">
390-
<iframe
391-
title={activeApp.display_name ?? activeApp.slug}
392-
className="w-full h-full border-0"
393-
src={iframeSrc}
394-
/>
376+
{embeddedApps.map((app) => {
377+
return (
378+
<TaskAppIFrame
379+
key={app.id}
380+
active={activeAppId === app.id}
381+
app={app}
382+
task={task}
383+
/>
384+
);
385+
})}
395386
</div>
396387
</main>
397388
);
@@ -443,6 +434,37 @@ const TaskAppButton: FC<TaskAppButtonProps> = ({
443434
);
444435
};
445436

437+
type TaskAppIFrameProps = {
438+
task: Task;
439+
app: WorkspaceApp;
440+
active: boolean;
441+
};
442+
443+
const TaskAppIFrame: FC<TaskAppIFrameProps> = ({ task, app, active }) => {
444+
const agent = task.workspace.latest_build.resources
445+
.flatMap((r) => r.agents)
446+
.filter((a) => !!a)
447+
.find((a) => a.apps.some((a) => a.id === app.id));
448+
449+
if (!agent) {
450+
throw new Error(`Agent for app ${app.id} not found in task workspace`);
451+
}
452+
453+
const link = useAppLink(app, {
454+
agent,
455+
workspace: task.workspace,
456+
});
457+
458+
return (
459+
<iframe
460+
src={link.href}
461+
title={link.label}
462+
loading="eager"
463+
className={cn([active ? "block" : "hidden", "w-full h-full border-0"])}
464+
/>
465+
);
466+
};
467+
446468
export const data = {
447469
fetchTask: async (workspaceOwnerUsername: string, workspaceName: string) => {
448470
const workspace = await API.getWorkspaceByOwnerAndName(

0 commit comments

Comments
 (0)