Skip to content

Commit 40ff12b

Browse files
vaebekagol
authored andcommitted
feat(tag-input): add useInputKeydown
1 parent ed8b5a9 commit 40ff12b

File tree

3 files changed

+48
-28
lines changed

3 files changed

+48
-28
lines changed
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import { TagInputProps, HandleEnter, OnSelectIndexChange, UseInputKeydownReturnTypes } from '../tag-input-types';
2+
3+
export const useInputKeydown = (
4+
props: TagInputProps,
5+
handleEnter: HandleEnter,
6+
onSelectIndexChange: OnSelectIndexChange): UseInputKeydownReturnTypes => {
7+
8+
const KEYS_MAP = {
9+
tab: 'Tab',
10+
down: 'ArrowDown',
11+
up: 'ArrowUp',
12+
enter: 'Enter',
13+
space: ' ',
14+
} as const;
15+
16+
const onInputKeydown = ($event: KeyboardEvent) => {
17+
switch ($event.key) {
18+
case KEYS_MAP.tab:
19+
case KEYS_MAP.enter:
20+
case KEYS_MAP.space:
21+
if (!props.isAddBySpace && KEYS_MAP.space) {
22+
return;
23+
}
24+
handleEnter();
25+
break;
26+
case KEYS_MAP.down:
27+
onSelectIndexChange(true);
28+
break;
29+
case KEYS_MAP.up:
30+
onSelectIndexChange(false);
31+
break;
32+
default:
33+
break;
34+
}
35+
};
36+
37+
return { onInputKeydown };
38+
};

packages/devui-vue/devui/tag-input/src/tag-input-types.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import type { ExtractPropTypes, PropType } from 'vue';
22

33
export interface Suggestion {
44
__index?: number;
5+
56
[x: string]: unknown;
67
}
78

@@ -65,3 +66,10 @@ export const tagInputProps = {
6566
} as const;
6667

6768
export type TagInputProps = ExtractPropTypes<typeof tagInputProps>;
69+
70+
export type HandleEnter = () => void;
71+
export type OnSelectIndexChange = (isUp: boolean) => void;
72+
73+
export interface UseInputKeydownReturnTypes {
74+
onInputKeydown: (e: KeyboardEvent) => void;
75+
}

packages/devui-vue/devui/tag-input/src/tag-input.tsx

Lines changed: 2 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,7 @@ import { useNamespace } from '../../shared/hooks/use-namespace';
1818
import removeBtnSvg from './components/icon-remove';
1919
import { Suggestion, TagInputProps, tagInputProps } from './tag-input-types';
2020
import './tag-input.scss';
21-
22-
const KEYS_MAP = {
23-
tab: 'Tab',
24-
down: 'ArrowDown',
25-
up: 'ArrowUp',
26-
enter: 'Enter',
27-
space: ' ',
28-
} as const;
21+
import { useInputKeydown } from './composables/use-input-keydown';
2922

3023
export default defineComponent({
3124
name: 'DTagInput',
@@ -126,26 +119,7 @@ export default defineComponent({
126119
mergedSuggestions.value.length === 0 && (tagInputVal.value = '');
127120
};
128121

129-
const onInputKeydown = ($event: KeyboardEvent) => {
130-
switch ($event.key) {
131-
case KEYS_MAP.tab:
132-
case KEYS_MAP.enter:
133-
case KEYS_MAP.space:
134-
if (!props.isAddBySpace && KEYS_MAP.space) {
135-
return;
136-
}
137-
handleEnter();
138-
break;
139-
case KEYS_MAP.down:
140-
onSelectIndexChange(true);
141-
break;
142-
case KEYS_MAP.up:
143-
onSelectIndexChange();
144-
break;
145-
default:
146-
break;
147-
}
148-
};
122+
const { onInputKeydown } = useInputKeydown(props, handleEnter, onSelectIndexChange);
149123

150124
const removeTag = ($event: Event, tagIdx: number) => {
151125
$event.preventDefault();

0 commit comments

Comments
 (0)