diff --git a/packages/connect-react/CHANGELOG.md b/packages/connect-react/CHANGELOG.md index ecf02d4922374..91eb9e0021eed 100644 --- a/packages/connect-react/CHANGELOG.md +++ b/packages/connect-react/CHANGELOG.md @@ -2,6 +2,11 @@ # Changelog +# [1.2.1] - 2025-06-07 + +- Fixing the SelectApp component to properly handle controlled values when not found in search results +- Fixing infinite re-render issue in ComponentFormContainer by memoizing configurableProps + # [1.2.0] - 2025-06-05 - Adding basic support for 'sql' prop types diff --git a/packages/connect-react/package.json b/packages/connect-react/package.json index deccc7509f710..84c28e1962c22 100644 --- a/packages/connect-react/package.json +++ b/packages/connect-react/package.json @@ -1,6 +1,6 @@ { "name": "@pipedream/connect-react", - "version": "1.2.0", + "version": "1.2.1", "description": "Pipedream Connect library for React", "files": [ "dist" diff --git a/packages/connect-react/src/components/SelectApp.tsx b/packages/connect-react/src/components/SelectApp.tsx index 834082c2b7ba2..0042e4b0446ec 100644 --- a/packages/connect-react/src/components/SelectApp.tsx +++ b/packages/connect-react/src/components/SelectApp.tsx @@ -1,5 +1,5 @@ import { - useId, useState, + useId, useState, useEffect, } from "react"; import Select, { components } from "react-select"; import { useApps } from "../hooks/use-apps"; @@ -13,11 +13,28 @@ type SelectAppProps = { export function SelectApp({ value, onChange, }: SelectAppProps) { + const [ + inputValue, + setInputValue, + ] = useState(""); const [ q, setQ, - ] = useState(""); // XXX can we just use Select ref.value instead? + ] = useState(""); // Debounced query value + const instanceId = useId(); + + // Debounce the search query + useEffect(() => { + const timer = setTimeout(() => { + setQ(inputValue); + }, 300); // 300ms delay + + return () => clearTimeout(timer); + }, [ + inputValue, + ]); + const { isLoading, // TODO error @@ -29,7 +46,11 @@ export function SelectApp({ Option, SingleValue, } = components; - const selectedValue = apps?.find((o) => o.name_slug === value?.name_slug) || null; + // If we have a value prop but it's not in the search results, use the value prop directly + const selectedValue = apps?.find((o) => o.name_slug === value?.name_slug) + || (value?.name_slug + ? value as AppResponse + : null); return (