From 429ed0842eef1e31b66e56dc2a028694880f8d00 Mon Sep 17 00:00:00 2001 From: Isaac Sanchez-Hawkins <266845420+isanchez404@users.noreply.github.com> Date: Fri, 8 May 2026 08:32:05 -0400 Subject: [PATCH] fix(multirun): disable adding models at limit (#1145) * fix(multirun): disable adding models at limit * fix(multirun): remove redundant add guards --------- Co-authored-by: Isaac Sanchez --- .../components/multirun/ModelMultiSelect.tsx | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/packages/ui/src/components/multirun/ModelMultiSelect.tsx b/packages/ui/src/components/multirun/ModelMultiSelect.tsx index 4aea1e3e..e10fcc22 100644 --- a/packages/ui/src/components/multirun/ModelMultiSelect.tsx +++ b/packages/ui/src/components/multirun/ModelMultiSelect.tsx @@ -128,6 +128,7 @@ export const ModelMultiSelect: React.FC = ({ const dropdownRef = React.useRef(null); const triggerRef = React.useRef(null); const itemRefs = React.useRef<(HTMLButtonElement | null)[]>([]); + const canAddModel = maxModels === undefined || selectedModels.length < maxModels; // Count occurrences of each model for display purposes const modelCounts = React.useMemo(() => { @@ -239,6 +240,14 @@ export const ModelMultiSelect: React.FC = ({ } }, [isOpen]); + React.useEffect(() => { + if (!canAddModel && isOpen) { + setIsOpen(false); + setSearchQuery(''); + setSelectedIndex(0); + } + }, [canAddModel, isOpen]); + // Close dropdown when clicking outside React.useEffect(() => { if (!isOpen) return; @@ -281,6 +290,7 @@ export const ModelMultiSelect: React.FC = ({ key={`${keyPrefix}-${key}`} ref={(el) => { itemRefs.current[flatIndex] = el; }} type="button" + disabled={!canAddModel} onClick={() => { onAdd({ providerID, @@ -293,7 +303,8 @@ export const ModelMultiSelect: React.FC = ({ onMouseEnter={() => setSelectedIndex(flatIndex)} className={cn( 'w-full text-left px-2 py-1.5 rounded-md typography-meta transition-colors flex items-center gap-2', - isHighlighted ? 'bg-interactive-selection' : 'hover:bg-interactive-hover/50' + canAddModel && (isHighlighted ? 'bg-interactive-selection' : 'hover:bg-interactive-hover/50'), + !canAddModel && 'cursor-not-allowed opacity-60' )} >
@@ -333,7 +344,10 @@ export const ModelMultiSelect: React.FC = ({ '!border-border/80 !bg-[var(--surface-subtle)] hover:!bg-[var(--interactive-hover)]/70', addButtonClassName, )} - onClick={() => setIsOpen(!isOpen)} + disabled={!canAddModel} + onClick={() => { + setIsOpen(!isOpen); + }} > {addButtonLabel ?? t('multirun.modelMultiSelect.actions.addModel')} @@ -383,7 +397,7 @@ export const ModelMultiSelect: React.FC = ({ e.preventDefault(); e.stopPropagation(); const selectedItem = flatModelList[selectedIndex]; - if (selectedItem) { + if (selectedItem && canAddModel) { onAdd({ providerID: selectedItem.providerID, modelID: selectedItem.modelID,