table keyboard navigation WIP

This commit is contained in:
SPRINX0\prochazka
2024-11-19 15:54:18 +01:00
parent 90946c582d
commit af17eceb27
7 changed files with 98 additions and 18 deletions

View File

@@ -0,0 +1,37 @@
<script lang="ts">
import keycodes from '../utility/keycodes';
import _ from 'lodash';
export let list;
export let selectedObjectStore;
export let getSelectedObject;
export let selectedObjectMatcher;
function handleKeyDown(ev) {
function selectByDiff(diff) {
const selected = getSelectedObject();
const index = _.findIndex(list, x => selectedObjectMatcher(x, selected));
if (index >= 0 && list[index + diff]) {
selectedObjectStore.set(list[index + diff]);
}
}
if (ev.keyCode == keycodes.upArrow) {
selectByDiff(-1);
ev.preventDefault();
}
if (ev.keyCode == keycodes.downArrow) {
selectByDiff(1);
ev.preventDefault();
}
}
</script>
<div tabindex="0" on:keydown={handleKeyDown} class="wrapper">
<slot />
</div>
<style>
.wrapper:focus {
outline: none;
}
</style>