11import { API } from "api/api" ;
22import { getErrorDetail , getErrorMessage } from "api/errors" ;
33import { disabledRefetchOptions } from "api/queries/util" ;
4- import type {
5- Template ,
6- Workspace ,
7- WorkspaceAgent ,
8- WorkspaceApp ,
9- } from "api/typesGenerated" ;
4+ import type { Template } from "api/typesGenerated" ;
105import { Avatar } from "components/Avatar/Avatar" ;
116import { AvatarData } from "components/Avatar/AvatarData" ;
127import { Button } from "components/Button/Button" ;
13- import { ExternalImage } from "components/ExternalImage/ExternalImage" ;
148import { displayError } from "components/GlobalSnackbar/utils" ;
159import { Margins } from "components/Margins/Margins" ;
1610import {
@@ -34,23 +28,15 @@ import {
3428TableHeader ,
3529TableRow ,
3630} from "components/Table/Table" ;
37- import {
38- Tooltip ,
39- TooltipContent ,
40- TooltipProvider ,
41- TooltipTrigger ,
42- } from "components/Tooltip/Tooltip" ;
4331import { useAuthenticated } from "hooks" ;
4432import { ExternalLinkIcon , RotateCcwIcon , SendIcon } from "lucide-react" ;
45- import { useAppLink } from "modules/apps/useAppLink" ;
4633import { AI_PROMPT_PARAMETER_NAME , type Task } from "modules/tasks/tasks" ;
4734import { WorkspaceAppStatus } from "modules/workspaces/WorkspaceAppStatus/WorkspaceAppStatus" ;
48- import type { FC , PropsWithChildren , ReactNode } from "react" ;
35+ import type { FC , ReactNode } from "react" ;
4936import { Helmet } from "react-helmet-async" ;
5037import { useMutation , useQuery , useQueryClient } from "react-query" ;
5138import { Link as RouterLink } from "react-router-dom" ;
5239import TextareaAutosize from "react-textarea-autosize" ;
53- import { cn } from "utils/cn" ;
5440import { pageTitle } from "utils/page" ;
5541import { relativeTime } from "utils/time" ;
5642
@@ -351,11 +337,6 @@ const TasksTable: FC<TasksTableProps> = ({ templates }) => {
351337src = { workspace . owner_avatar_url }
352338/>
353339</ TableCell >
354- < TableCell className = "pl-10" >
355- { agent && app && (
356- < IconAppLink app = { app } workspace = { workspace } agent = { agent } />
357- ) }
358- </ TableCell >
359340</ TableRow >
360341) ;
361342} )
@@ -387,82 +368,13 @@ const TasksTable: FC<TasksTableProps> = ({ templates }) => {
387368< TableHead > Task</ TableHead >
388369< TableHead > Status</ TableHead >
389370< TableHead > Created by</ TableHead >
390- < TableHead className = "w-0" />
391371</ TableRow >
392372</ TableHeader >
393373< TableBody > { body } </ TableBody >
394374</ Table >
395375) ;
396376} ;
397377
398- type IconAppLinkProps = {
399- app :WorkspaceApp ;
400- workspace :Workspace ;
401- agent :WorkspaceAgent ;
402- } ;
403-
404- const IconAppLink :FC < IconAppLinkProps > = ( { app, workspace, agent} ) => {
405- const link = useAppLink ( app , {
406- workspace,
407- agent,
408- } ) ;
409-
410- return (
411- < BaseIconLink
412- key = { app . id }
413- label = { `Open${ link . label } ` }
414- href = { link . href }
415- onClick = { ( e ) => {
416- link . onClick ?.( e ) ;
417- e . stopPropagation ( ) ;
418- } }
419- >
420- < ExternalImage src = { app . icon ?? "/icon/widgets.svg" } />
421- </ BaseIconLink >
422- ) ;
423- } ;
424-
425- type BaseIconLinkProps = PropsWithChildren < {
426- label :string ;
427- href :string ;
428- isLoading ?:boolean ;
429- target ?:string ;
430- onClick ?:( e :React . MouseEvent < HTMLAnchorElement > ) => void ;
431- } > ;
432-
433- const BaseIconLink :FC < BaseIconLinkProps > = ( {
434- href,
435- isLoading,
436- label,
437- children,
438- target,
439- onClick,
440- } ) => {
441- return (
442- < TooltipProvider >
443- < Tooltip >
444- < TooltipTrigger asChild >
445- < Button variant = "outline" size = "icon-lg" asChild >
446- < a
447- target = { target }
448- className = { cn ( [ "z-10 relative" , { "animate-pulse" :isLoading } ] ) }
449- href = { href }
450- onClick = { ( e ) => {
451- e . stopPropagation ( ) ;
452- onClick ?.( e ) ;
453- } }
454- >
455- { children }
456- < span className = "sr-only" > { label } </ span >
457- </ a >
458- </ Button >
459- </ TooltipTrigger >
460- < TooltipContent > { label } </ TooltipContent >
461- </ Tooltip >
462- </ TooltipProvider >
463- ) ;
464- } ;
465-
466378export const data = {
467379// TODO: This function is currently inefficient because it fetches all templates
468380// and their parameters individually, resulting in many API calls and slow