refactor: Enhance EndpointItem and renderEndpoints for improved model render keys

- Updated EndpointItem to accept an endpointIndex prop for better indexing of endpoints.
- Modified renderEndpoints to pass the endpointIndex to EndpointItem, improving the rendering of endpoint models.
- Adjusted renderEndpointModels to utilize the endpointIndex for unique key generation, enhancing performance and preventing rendering issues.
This commit is contained in:
Danny Avila 2025-12-12 20:29:00 -05:00
parent 20db2394d2
commit 12584e42b3
No known key found for this signature in database
GPG key ID: BF31EEB2C5CA0956
2 changed files with 27 additions and 8 deletions

View file

@ -14,6 +14,7 @@ import { cn } from '~/utils';
interface EndpointItemProps {
endpoint: Endpoint;
endpointIndex: number;
}
const SettingsButton = ({
@ -54,7 +55,7 @@ const SettingsButton = ({
);
};
export function EndpointItem({ endpoint }: EndpointItemProps) {
export function EndpointItem({ endpoint, endpointIndex }: EndpointItemProps) {
const localize = useLocalize();
const {
agentsMap,
@ -153,8 +154,21 @@ export function EndpointItem({ endpoint }: EndpointItemProps) {
))}
{/* Render endpoint models */}
{filteredModels
? renderEndpointModels(endpoint, endpoint.models || [], selectedModel, filteredModels)
: endpoint.models && renderEndpointModels(endpoint, endpoint.models, selectedModel)}
? renderEndpointModels(
endpoint,
endpoint.models || [],
selectedModel,
filteredModels,
endpointIndex,
)
: endpoint.models &&
renderEndpointModels(
endpoint,
endpoint.models,
selectedModel,
undefined,
endpointIndex,
)}
</>
)}
</Menu>
@ -198,7 +212,11 @@ export function EndpointItem({ endpoint }: EndpointItemProps) {
}
export function renderEndpoints(mappedEndpoints: Endpoint[]) {
return mappedEndpoints.map((endpoint) => (
<EndpointItem endpoint={endpoint} key={`endpoint-${endpoint.value}-item`} />
return mappedEndpoints.map((endpoint, index) => (
<EndpointItem
endpoint={endpoint}
endpointIndex={index}
key={`endpoint-${endpoint.value}-${index}`}
/>
));
}

View file

@ -109,7 +109,6 @@ export function EndpointModelItem({ modelId, endpoint, isSelected }: EndpointMod
return (
<MenuItem
ref={itemRef}
key={modelId}
onClick={() => handleSelectModel(endpoint, modelId ?? '')}
className="group flex w-full cursor-pointer items-center justify-between rounded-lg px-2 text-sm"
>
@ -161,14 +160,16 @@ export function renderEndpointModels(
models: Array<{ name: string; isGlobal?: boolean }>,
selectedModel: string | null,
filteredModels?: string[],
endpointIndex?: number,
) {
const modelsToRender = filteredModels || models.map((model) => model.name);
const indexSuffix = endpointIndex != null ? `-${endpointIndex}` : '';
return modelsToRender.map(
(modelId) =>
(modelId, modelIndex) =>
endpoint && (
<EndpointModelItem
key={modelId}
key={`${endpoint.value}${indexSuffix}-${modelId}-${modelIndex}`}
modelId={modelId}
endpoint={endpoint}
isSelected={selectedModel === modelId}