diff --git a/cvat-ui/src/components/task-page/user-selector.tsx b/cvat-ui/src/components/task-page/user-selector.tsx index 4f54e023..39ee2110 100644 --- a/cvat-ui/src/components/task-page/user-selector.tsx +++ b/cvat-ui/src/components/task-page/user-selector.tsx @@ -61,18 +61,29 @@ export default function UserSelector(props: Props): JSX.Element { setUsers(initialUsers); }, [initialUsers]); - const handleSearch = (searchValue: string): void => { - if (searchValue) { - searchUsers(searchValue, setUsers); + useEffect(() => { + if (searchPhrase) { + searchUsers(searchPhrase, setUsers); } else { setUsers(initialUsers); } + }, [searchPhrase]); + + const handleSearch = (searchValue: string): void => { setSearchPhrase(searchValue); }; const onBlur = (): void => { if (!searchPhrase && value) { onSelect(null); + } else if (searchPhrase) { + const potentialUsers = users.filter((_user) => _user.username.includes(searchPhrase)); + if (potentialUsers.length === 1) { + setSearchPhrase(potentialUsers[0].username); + onSelect(potentialUsers[0]); + } else { + setSearchPhrase(value?.username || ''); + } } }; diff --git a/tests/cypress/integration/actions_users/issue_2440_value_must_be_a_user_instance.js b/tests/cypress/integration/actions_users/issue_2440_value_must_be_a_user_instance.js index 1fb53919..70b8c304 100644 --- a/tests/cypress/integration/actions_users/issue_2440_value_must_be_a_user_instance.js +++ b/tests/cypress/integration/actions_users/issue_2440_value_must_be_a_user_instance.js @@ -37,10 +37,10 @@ context('Value must be a user instance.', () => { // Before fix: // The following error originated from your application code, not from Cypress. // > Value must be a user instance - cy.get('.cvat-spinner').should('exist'); + cy.get('.cvat-spinner', { timeout: 500 }).should('not.exist'); // Remove the user's assignment for next tests. cy.get('.cvat-task-details-user-block').within(() => { - cy.get('[type="text"]').click().clear().type('{Enter}'); + cy.get('[type="search"]').click().clear().type('{Enter}'); }); }); });