Skip to content

Commit e2c4c2d

Browse files
dimaMachinagithub-actions[bot]claude
authored
reduce TooltipProviders components on pages (#2801)
* upd * lint fix * Add changeset for TooltipProvider deduplication Co-authored-by: Dimitri POSTOLOV <dimaMachina@users.noreply.github.com> Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by: Dimitri POSTOLOV <dimaMachina@users.noreply.github.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
1 parent ed09910 commit e2c4c2d

11 files changed

Lines changed: 217 additions & 238 deletions

File tree

.changeset/gentle-lions-glow.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@inkeep/agents-manage-ui": patch
3+
---
4+
5+
Remove redundant TooltipProvider wrappers to reduce unnecessary React context overhead

agents-manage-ui/src/app/[tenantId]/profile/layout.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { PageHeader } from '@/components/layout/page-header';
33
import { STATIC_LABELS } from '@/constants/theme';
44

55
export const metadata = {
6-
title: STATIC_LABELS['profile'],
6+
title: STATIC_LABELS.profile,
77
description: 'Manage your personal preferences.',
88
} satisfies Metadata;
99

agents-manage-ui/src/components/access/resource-members-page.tsx

Lines changed: 24 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { type FC, useRef, useState } from 'react';
55
import { Badge } from '@/components/ui/badge';
66
import { Button } from '@/components/ui/button';
77
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card';
8-
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';
8+
import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';
99
import { useAuthSession } from '@/hooks/use-auth';
1010
import { useProjectPermissionsQuery } from '@/lib/query/projects';
1111
import { PrincipalAvatar } from './principal-avatar';
@@ -156,32 +156,30 @@ export const ResourceMembersPage: FC<ResourceMembersPageProps> = ({
156156
<UserPlus className="size-4 text-muted-foreground shrink-0" />
157157

158158
{/* Selected member badges (after search icon) */}
159-
<TooltipProvider>
160-
{selectedMembers.map((member) => (
161-
<Tooltip key={member.id}>
162-
<TooltipTrigger asChild>
163-
<span className="inline-flex items-center gap-1 px-2 py-0.5 text-sm bg-primary/10 text-primary rounded-full">
164-
<span className="max-w-[100px] truncate">
165-
{member.displayName.split(' ')[0]}
166-
</span>
167-
<button
168-
type="button"
169-
onClick={() => removeMember(member.id)}
170-
className="hover:text-destructive"
171-
>
172-
<X className="size-3" />
173-
</button>
159+
{selectedMembers.map((member) => (
160+
<Tooltip key={member.id}>
161+
<TooltipTrigger asChild>
162+
<span className="inline-flex items-center gap-1 px-2 py-0.5 text-sm bg-primary/10 text-primary rounded-full">
163+
<span className="max-w-[100px] truncate">
164+
{member.displayName.split(' ')[0]}
174165
</span>
175-
</TooltipTrigger>
176-
<TooltipContent>
177-
<p className="font-medium">{member.displayName}</p>
178-
{member.subtitle && (
179-
<p className="text-xs text-muted-foreground">{member.subtitle}</p>
180-
)}
181-
</TooltipContent>
182-
</Tooltip>
183-
))}
184-
</TooltipProvider>
166+
<button
167+
type="button"
168+
onClick={() => removeMember(member.id)}
169+
className="hover:text-destructive"
170+
>
171+
<X className="size-3" />
172+
</button>
173+
</span>
174+
</TooltipTrigger>
175+
<TooltipContent>
176+
<p className="font-medium">{member.displayName}</p>
177+
{member.subtitle && (
178+
<p className="text-xs text-muted-foreground">{member.subtitle}</p>
179+
)}
180+
</TooltipContent>
181+
</Tooltip>
182+
))}
185183

186184
{/* Search input with dropdown */}
187185
<div className="flex-1 min-w-[80px] relative">
Lines changed: 23 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
'use client';
22

33
import { AlertCircle } from 'lucide-react';
4-
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';
4+
import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';
55
import type { ProcessedAgentError } from '@/lib/utils/agent-error-parser';
66

77
interface ErrorIndicatorProps {
@@ -23,29 +23,27 @@ export function ErrorIndicator({ errors, className = '' }: ErrorIndicatorProps)
2323
);
2424

2525
return (
26-
<TooltipProvider>
27-
<Tooltip>
28-
<TooltipTrigger asChild>{indicator}</TooltipTrigger>
29-
<TooltipContent
30-
side="top"
31-
className="max-w-xs [--bg-color:var(--color-red-50)] dark:[--bg-color:var(--color-red-950)] border-red-200 dark:border-red-700 text-red-800 dark:text-red-300 bg-red-50 dark:bg-red-950/90"
32-
>
33-
<div className="space-y-1">
34-
<div className="font-medium">Validation Error{errors.length > 1 ? 's' : ''}</div>
35-
{errors.slice(0, 3).map((error, index) => (
36-
<div key={index} className="text-xs">
37-
<span className="font-medium">{error.field}:</span> {error.message}
38-
</div>
39-
))}
40-
{errors.length > 3 && (
41-
<div className="text-xs text-red-600 dark:text-red-400">
42-
...and {errors.length - 3} more error
43-
{errors.length - 3 > 1 ? 's' : ''}
44-
</div>
45-
)}
46-
</div>
47-
</TooltipContent>
48-
</Tooltip>
49-
</TooltipProvider>
26+
<Tooltip>
27+
<TooltipTrigger asChild>{indicator}</TooltipTrigger>
28+
<TooltipContent
29+
side="top"
30+
className="max-w-xs [--bg-color:var(--color-red-50)] dark:[--bg-color:var(--color-red-950)] border-red-200 dark:border-red-700 text-red-800 dark:text-red-300 bg-red-50 dark:bg-red-950/90"
31+
>
32+
<div className="space-y-1">
33+
<div className="font-medium">Validation Error{errors.length > 1 ? 's' : ''}</div>
34+
{errors.slice(0, 3).map((error, index) => (
35+
<div key={index} className="text-xs">
36+
<span className="font-medium">{error.field}:</span> {error.message}
37+
</div>
38+
))}
39+
{errors.length > 3 && (
40+
<div className="text-xs text-red-600 dark:text-red-400">
41+
...and {errors.length - 3} more error
42+
{errors.length - 3 > 1 ? 's' : ''}
43+
</div>
44+
)}
45+
</div>
46+
</TooltipContent>
47+
</Tooltip>
5048
);
5149
}

agents-manage-ui/src/components/credentials/views/nango-providers-grid.tsx

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import { Button } from '@/components/ui/button';
1111
import { CardTitle } from '@/components/ui/card';
1212
import { CardGrid } from '@/components/ui/card-grid';
1313
import { Input } from '@/components/ui/input';
14-
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';
14+
import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';
1515

1616
interface NangoProvidersGridProps {
1717
providers: ApiProvider[];
@@ -27,18 +27,16 @@ export function NangoProvidersGrid({ providers }: NangoProvidersGridProps) {
2727
const renderProviderHeader = (provider: ApiProvider) => (
2828
<div className="flex items-center gap-3 overflow-hidden">
2929
<ProviderIcon provider={provider.name} size={20} className="flex-shrink-0" />
30-
<TooltipProvider>
31-
<Tooltip>
32-
<TooltipTrigger asChild>
33-
<CardTitle className="text-sm font-medium leading-tight truncate flex-1 min-w-0 overflow-hidden text-ellipsis whitespace-nowrap">
34-
{provider.display_name || provider.name}
35-
</CardTitle>
36-
</TooltipTrigger>
37-
<TooltipContent>
38-
<p>{provider.display_name || provider.name}</p>
39-
</TooltipContent>
40-
</Tooltip>
41-
</TooltipProvider>
30+
<Tooltip>
31+
<TooltipTrigger asChild>
32+
<CardTitle className="text-sm font-medium leading-tight truncate flex-1 min-w-0 overflow-hidden text-ellipsis whitespace-nowrap">
33+
{provider.display_name || provider.name}
34+
</CardTitle>
35+
</TooltipTrigger>
36+
<TooltipContent>
37+
<p>{provider.display_name || provider.name}</p>
38+
</TooltipContent>
39+
</Tooltip>
4240
</div>
4341
);
4442

agents-manage-ui/src/components/project-triggers/project-scheduled-triggers-table.tsx

Lines changed: 24 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ import {
2626
DropdownMenuTrigger,
2727
} from '@/components/ui/dropdown-menu';
2828
import { Switch } from '@/components/ui/switch';
29-
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';
29+
import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';
3030
import { useAuthSession } from '@/hooks/use-auth';
3131
import { useIsOrgAdmin } from '@/hooks/use-is-org-admin';
3232
import { useOrgMembers } from '@/hooks/use-org-members';
@@ -237,18 +237,16 @@ export function ProjectScheduledTriggersTable({
237237
enableSorting: false,
238238
cell: ({ row }) =>
239239
row.original.runAsUserId ? (
240-
<TooltipProvider>
241-
<Tooltip>
242-
<TooltipTrigger asChild>
243-
<span className="text-sm text-muted-foreground truncate max-w-[150px] inline-block cursor-default">
244-
{getUserDisplayName(row.original.runAsUserId)}
245-
</span>
246-
</TooltipTrigger>
247-
<TooltipContent>
248-
<code className="font-mono text-xs">{row.original.runAsUserId}</code>
249-
</TooltipContent>
250-
</Tooltip>
251-
</TooltipProvider>
240+
<Tooltip>
241+
<TooltipTrigger asChild>
242+
<span className="text-sm text-muted-foreground truncate max-w-[150px] inline-block cursor-default">
243+
{getUserDisplayName(row.original.runAsUserId)}
244+
</span>
245+
</TooltipTrigger>
246+
<TooltipContent>
247+
<code className="font-mono text-xs">{row.original.runAsUserId}</code>
248+
</TooltipContent>
249+
</Tooltip>
252250
) : (
253251
<span className="text-muted-foreground"></span>
254252
),
@@ -277,21 +275,19 @@ export function ProjectScheduledTriggersTable({
277275
enableSorting: false,
278276
cell: ({ row }) =>
279277
row.original.cronExpression ? (
280-
<TooltipProvider>
281-
<Tooltip>
282-
<TooltipTrigger asChild>
283-
<code className="bg-muted text-muted-foreground rounded-md border px-2 py-1 text-xs w-fit">
284-
{getCronDescription(row.original.cronExpression)}{' '}
285-
{getTimezoneAbbreviation(getTriggerTimezone(row.original))}
286-
</code>
287-
</TooltipTrigger>
288-
<TooltipContent>
289-
<code className="font-mono">
290-
{row.original.cronExpression} ({getTriggerTimezone(row.original)})
291-
</code>
292-
</TooltipContent>
293-
</Tooltip>
294-
</TooltipProvider>
278+
<Tooltip>
279+
<TooltipTrigger asChild>
280+
<code className="bg-muted text-muted-foreground rounded-md border px-2 py-1 text-xs w-fit">
281+
{getCronDescription(row.original.cronExpression)}{' '}
282+
{getTimezoneAbbreviation(getTriggerTimezone(row.original))}
283+
</code>
284+
</TooltipTrigger>
285+
<TooltipContent>
286+
<code className="font-mono">
287+
{row.original.cronExpression} ({getTriggerTimezone(row.original)})
288+
</code>
289+
</TooltipContent>
290+
</Tooltip>
295291
) : (
296292
<code className="bg-muted text-muted-foreground rounded-md border px-2 py-1 text-xs w-fit">
297293
{row.original.runAt ? formatDateTimeLocal(row.original.runAt) : '—'}

agents-manage-ui/src/components/project-triggers/project-triggers-table.tsx

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import {
1717
DropdownMenuTrigger,
1818
} from '@/components/ui/dropdown-menu';
1919
import { Switch } from '@/components/ui/switch';
20-
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';
20+
import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';
2121
import { useAuthSession } from '@/hooks/use-auth';
2222
import { useIsOrgAdmin } from '@/hooks/use-is-org-admin';
2323
import { useOrgMembers } from '@/hooks/use-org-members';
@@ -159,18 +159,16 @@ export function ProjectTriggersTable({ triggers, tenantId, projectId }: ProjectT
159159
enableSorting: false,
160160
cell: ({ row }) =>
161161
row.original.runAsUserId ? (
162-
<TooltipProvider>
163-
<Tooltip>
164-
<TooltipTrigger asChild>
165-
<span className="text-sm text-muted-foreground truncate max-w-[150px] inline-block cursor-default">
166-
{getUserDisplayName(row.original.runAsUserId)}
167-
</span>
168-
</TooltipTrigger>
169-
<TooltipContent>
170-
<code className="font-mono text-xs">{row.original.runAsUserId}</code>
171-
</TooltipContent>
172-
</Tooltip>
173-
</TooltipProvider>
162+
<Tooltip>
163+
<TooltipTrigger asChild>
164+
<span className="text-sm text-muted-foreground truncate max-w-[150px] inline-block cursor-default">
165+
{getUserDisplayName(row.original.runAsUserId)}
166+
</span>
167+
</TooltipTrigger>
168+
<TooltipContent>
169+
<code className="font-mono text-xs">{row.original.runAsUserId}</code>
170+
</TooltipContent>
171+
</Tooltip>
174172
) : (
175173
<span className="text-muted-foreground"></span>
176174
),

agents-manage-ui/src/components/traces/charts/chart-card.tsx

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import {
1010
CardHeader,
1111
CardTitle,
1212
} from '@/components/ui/card';
13-
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';
13+
import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';
1414
import { cn } from '@/lib/utils';
1515
import { ChartError } from './chart-error';
1616

@@ -58,16 +58,14 @@ export function ChartCard({
5858
{title}
5959
</div>
6060
{tooltip && (
61-
<TooltipProvider>
62-
<Tooltip delayDuration={0}>
63-
<TooltipTrigger>
64-
<Info className="w-4 h-4 text-gray-300 dark:text-white/300" />
65-
</TooltipTrigger>
66-
<TooltipContent>
67-
<p className="text-sm text-gray-600 dark:text-white/60">{tooltip}</p>
68-
</TooltipContent>
69-
</Tooltip>
70-
</TooltipProvider>
61+
<Tooltip delayDuration={0}>
62+
<TooltipTrigger>
63+
<Info className="w-4 h-4 text-gray-300 dark:text-white/300" />
64+
</TooltipTrigger>
65+
<TooltipContent>
66+
<p className="text-sm text-gray-600 dark:text-white/60">{tooltip}</p>
67+
</TooltipContent>
68+
</Tooltip>
7169
)}
7270
{onClick && (
7371
<Button

0 commit comments

Comments
 (0)