Skip to content

Commit fa00c2d

Browse files
author
Dominik Grenz
committed
Update handlekeydown
1 parent 39e12d1 commit fa00c2d

File tree

1 file changed

+39
-28
lines changed

1 file changed

+39
-28
lines changed

personalization-webcomponents/src/components/ChecklistList.vue

Lines changed: 39 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -132,38 +132,49 @@ function closeDialog() {
132132
}
133133
134134
function handleKeyDown(event: KeyboardEvent) {
135-
if (!props.isDraggable) return;
136-
if (focusedIndex.value === null) return;
135+
if (!props.isDraggable || focusedIndex.value === null) return;
137136
138137
const maxIndex = props.modelValue.length - 1;
139-
140138
if (event.key === "Enter") {
141-
if (draggedIndex.value === null) {
142-
draggedIndex.value = focusedIndex.value;
143-
} else {
144-
draggedIndex.value = null;
145-
}
146-
} else if (draggedIndex.value !== null) {
147-
if (event.key === "ArrowUp" && draggedIndex.value > 0) {
148-
event.preventDefault();
149-
const list = [...props.modelValue];
150-
const temp = list[draggedIndex.value];
151-
list[draggedIndex.value] = list[draggedIndex.value - 1];
152-
list[draggedIndex.value - 1] = temp;
153-
emit("update:modelValue", list);
154-
draggedIndex.value = draggedIndex.value - 1;
155-
focusedIndex.value = draggedIndex.value;
156-
} else if (event.key === "ArrowDown" && draggedIndex.value < maxIndex) {
157-
event.preventDefault();
158-
const list = [...props.modelValue];
159-
const temp = list[draggedIndex.value];
160-
list[draggedIndex.value] = list[draggedIndex.value + 1];
161-
list[draggedIndex.value + 1] = temp;
162-
emit("update:modelValue", list);
163-
draggedIndex.value = draggedIndex.value + 1;
164-
focusedIndex.value = draggedIndex.value;
165-
}
139+
draggedIndex.value =
140+
draggedIndex.value === null ? focusedIndex.value : null;
141+
return;
166142
}
143+
if (draggedIndex.value === null) return;
144+
145+
const move = (direction: number) => {
146+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
147+
const newIndex = draggedIndex.value! + direction;
148+
if (newIndex < 0 || newIndex > maxIndex) return;
149+
150+
event.preventDefault();
151+
152+
const updatedList = swapItems(
153+
[...props.modelValue],
154+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
155+
draggedIndex.value!,
156+
newIndex
157+
);
158+
emit("update:modelValue", updatedList);
159+
draggedIndex.value = newIndex;
160+
focusedIndex.value = newIndex;
161+
};
162+
163+
if (event.key === "ArrowUp") move(-1);
164+
if (event.key === "ArrowDown") move(1);
165+
}
166+
167+
function swapItems(
168+
array: DummyChecklistItem[],
169+
i: number,
170+
j: number
171+
): DummyChecklistItem[] {
172+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
173+
const temp = array[i]!;
174+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
175+
array[i] = array[j]!;
176+
array[j] = temp;
177+
return array;
167178
}
168179
</script>
169180

0 commit comments

Comments
 (0)