Skip to content

Commit 8c2430e

Browse files
author
AndyLnd
authored
fix: Clear UserInput when selecting a user from the list (#11979)
1 parent d425d04 commit 8c2430e

File tree

4 files changed

+12
-21
lines changed

4 files changed

+12
-21
lines changed

src/script/components/UserInput.test.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import TestPage from 'Util/test/TestPage';
2121
import UserInput, {UserInputProps} from 'Components/UserInput';
2222
import ko from 'knockout';
2323
import {User} from '../entity/User';
24-
import {KEY_CODE} from 'Util/KeyboardUtil';
24+
import {KEY} from 'Util/KeyboardUtil';
2525

2626
class UserInputPage extends TestPage<UserInputProps> {
2727
constructor(props?: UserInputProps) {
@@ -30,7 +30,7 @@ class UserInputPage extends TestPage<UserInputProps> {
3030

3131
getInput = () => this.get('[data-uie-name="enter-users"]');
3232
getSelectedUsers = () => this.get('[data-uie-name="item-selected"]');
33-
pressBackSpace = () => this.keyCodeDown(this.getInput(), KEY_CODE.BACKSPACE);
33+
pressBackSpace = () => this.keyDown(this.getInput(), KEY.BACKSPACE);
3434
}
3535

3636
describe('UserInput', () => {

src/script/components/UserInput.tsx

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
*
1818
*/
1919

20-
import React, {useLayoutEffect, useRef} from 'react';
20+
import React, {useEffect, useLayoutEffect, useRef} from 'react';
2121
import {registerReactComponent} from 'Util/ComponentUtil';
2222
import type {User} from '../entity/User';
2323
import {MAX_HANDLE_LENGTH} from '../user/UserHandleGenerator';
@@ -48,14 +48,12 @@ const UserInput: React.FC<UserInputProps> = ({
4848

4949
useLayoutEffect(() => {
5050
inputElement.current.focus();
51-
const handle = window.requestAnimationFrame(() => {
52-
innerElement.current.scrollTop = inputElement.current.scrollHeight;
53-
});
51+
innerElement.current.scrollTop = inputElement.current.scrollHeight;
52+
}, [selectedUsers.length]);
5453

55-
return () => {
56-
window.cancelAnimationFrame(handle);
57-
};
58-
}, [selectedUsers]);
54+
useEffect(() => {
55+
setInput('');
56+
}, [selectedUsers.length]);
5957

6058
const placeHolderText = emptyInput && noSelectedUsers ? placeholder : '';
6159

@@ -75,7 +73,7 @@ const UserInput: React.FC<UserInputProps> = ({
7573
maxLength={MAX_HANDLE_LENGTH}
7674
onChange={event => setInput(event.target.value)}
7775
onKeyDown={(event: React.KeyboardEvent<HTMLInputElement>) => {
78-
if (isRemovalAction(event.keyCode) && emptyInput) {
76+
if (isRemovalAction(event.key) && emptyInput) {
7977
setSelectedUsers(selectedUsers.slice(0, -1));
8078
} else if (isEnterKey(event.nativeEvent)) {
8179
event.preventDefault();

src/script/util/KeyboardUtil.ts

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,6 @@
1919

2020
import {Runtime} from '@wireapp/commons';
2121

22-
export const KEY_CODE = {
23-
BACKSPACE: 8,
24-
DELETE: 46,
25-
};
26-
2722
export const KEY = {
2823
ARROW_DOWN: Runtime.isEdge() ? 'Down' : 'ArrowDown',
2924
ARROW_LEFT: Runtime.isEdge() ? 'Left' : 'ArrowLeft',
@@ -73,9 +68,7 @@ export const isMetaKey = (keyboardEvent: KeyboardEvent): boolean =>
7368
export const isPasteAction = (keyboardEvent: KeyboardEvent): boolean =>
7469
isMetaKey(keyboardEvent) && isKey(keyboardEvent, KEY.KEY_V);
7570

76-
export const isRemovalAction = (keyCode: number): boolean => {
77-
return [KEY_CODE.BACKSPACE, KEY_CODE.DELETE].includes(keyCode);
78-
};
71+
export const isRemovalAction = (key: string): boolean => [KEY.BACKSPACE, KEY.DELETE].includes(key);
7972

8073
export const insertAtCaret = (areaId: string, text: string) => {
8174
// http://stackoverflow.com/a/1064139

src/script/util/test/TestPage.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@ export default class TestPage<T> {
5151
changeFiles = (element: ReactWrapper, files: File[]) => this.do(() => element.simulate('change', {target: {files}}));
5252
submit = (element: ReactWrapper) => this.do(() => element.simulate('submit'));
5353
mouseEnter = (element: ReactWrapper) => this.do(() => element.simulate('mouseenter'));
54-
keyCodeUp = (element: ReactWrapper, keyCode: number) => this.do(() => element.simulate('keyup', {keyCode}));
55-
keyCodeDown = (element: ReactWrapper, keyCode: number) => this.do(() => element.simulate('keydown', {keyCode}));
54+
keyUp = (element: ReactWrapper, key: string) => this.do(() => element.simulate('keyup', {key}));
55+
keyDown = (element: ReactWrapper, key: string) => this.do(() => element.simulate('keydown', {key}));
5656

5757
update = () => this.driver.update();
5858
setProps = (props: T) => this.do(() => this.driver.setProps(props));

0 commit comments

Comments
 (0)