From e884c1a3444b15ac411cacf07dd65dc3b02961d8 Mon Sep 17 00:00:00 2001 From: waleed Date: Fri, 27 Mar 2026 12:20:18 -0700 Subject: [PATCH] fix(knowledge): fix search input flicker on clear and plan display name fallback --- .../workspace/[workspaceId]/knowledge/knowledge.tsx | 12 +++++++++--- .../components/workspace-header/workspace-header.tsx | 7 +++++-- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/apps/sim/app/workspace/[workspaceId]/knowledge/knowledge.tsx b/apps/sim/app/workspace/[workspaceId]/knowledge/knowledge.tsx index a65068a67cd..c5b35bc713d 100644 --- a/apps/sim/app/workspace/[workspaceId]/knowledge/knowledge.tsx +++ b/apps/sim/app/workspace/[workspaceId]/knowledge/knowledge.tsx @@ -60,16 +60,22 @@ export function Knowledge() { const { mutateAsync: updateKnowledgeBaseMutation } = useUpdateKnowledgeBase(workspaceId) const { mutateAsync: deleteKnowledgeBaseMutation } = useDeleteKnowledgeBase(workspaceId) + const [searchInputValue, setSearchInputValue] = useState('') const [debouncedSearchQuery, setDebouncedSearchQuery] = useState('') const searchTimerRef = useRef>(null) const handleSearchChange = useCallback((value: string) => { + setSearchInputValue(value) if (searchTimerRef.current) clearTimeout(searchTimerRef.current) searchTimerRef.current = setTimeout(() => { setDebouncedSearchQuery(value) }, 300) }, []) + const handleSearchClearAll = useCallback(() => { + handleSearchChange('') + }, [handleSearchChange]) + const [isCreateModalOpen, setIsCreateModalOpen] = useState(false) const [activeKnowledgeBase, setActiveKnowledgeBase] = useState( @@ -256,12 +262,12 @@ export function Knowledge() { const searchConfig: SearchConfig = useMemo( () => ({ - value: debouncedSearchQuery, + value: searchInputValue, onChange: handleSearchChange, - onClearAll: () => handleSearchChange(''), + onClearAll: handleSearchClearAll, placeholder: 'Search knowledge bases...', }), - [handleSearchChange, debouncedSearchQuery] + [searchInputValue, handleSearchChange, handleSearchClearAll] ) return ( diff --git a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/workspace-header/workspace-header.tsx b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/workspace-header/workspace-header.tsx index f2cba67f629..ce5b8c67b57 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/workspace-header/workspace-header.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/workspace-header/workspace-header.tsx @@ -138,8 +138,11 @@ export function WorkspaceHeader({ const currentPlan = subscriptionResponse?.data?.plan const showPlanInfo = isBillingEnabled && typeof currentPlan !== 'undefined' const rawPlanName = showPlanInfo ? getDisplayPlanName(currentPlan) : '' - const planDisplayName = - showPlanInfo && rawPlanName.includes('for Teams') ? rawPlanName : `${rawPlanName} Plan` + const planDisplayName = showPlanInfo + ? rawPlanName.includes('for Teams') + ? rawPlanName + : `${rawPlanName} Plan` + : '' const isFreePlan = showPlanInfo && isFree(currentPlan) // Listen for open-invite-modal event from context menu