diff --git a/apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/components/external-id-field.tsx b/apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/components/external-id-field.tsx index e94465f796..6e939d8213 100644 --- a/apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/components/external-id-field.tsx +++ b/apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/components/external-id-field.tsx @@ -21,14 +21,7 @@ export const ExternalIdField = ({ disabled = false, }: ExternalIdFieldProps) => { const [searchValue, setSearchValue] = useState(""); - const { identities, isFetchingNextPage, hasNextPage, loadMore } = useFetchIdentities(); - const identityOptions = createIdentityOptions({ - identities, - hasNextPage, - isFetchingNextPage, - loadMore, - }); const createIdentity = useCreateIdentity((data) => { onChange(data.identityId); @@ -43,17 +36,66 @@ export const ExternalIdField = ({ } }; + const exactMatch = identities.some( + (id) => id.externalId.toLowerCase() === searchValue.toLowerCase().trim(), + ); + + const filteredIdentities = searchValue.trim() + ? identities.filter((identity) => + identity.externalId.toLowerCase().includes(searchValue.toLowerCase().trim()), + ) + : identities; + + const hasPartialMatches = filteredIdentities.length > 0; + + const baseOptions = createIdentityOptions({ + identities: filteredIdentities, + hasNextPage, + isFetchingNextPage, + loadMore, + }); + + const createOption = + searchValue.trim() && !exactMatch && hasPartialMatches + ? { + label: ( +