navkit-vue
Version:
Vue navigation and utility composables
48 lines (39 loc) • 1.14 kB
text/typescript
import { onMounted, onUnmounted, ref, unref, watch, type Ref } from "vue";
import { KeyboardEnum } from "../enums/keyboard.enum";
export function useNavigationReturn({
onReturn,
disabled,
}: {
onReturn: () => void;
disabled?: Ref<boolean>;
}) {
// Disabling the hook
const isDisabled = ref(unref(disabled));
const toggleDisabled = (value?: boolean) => {
if (value !== undefined) {
isDisabled.value = value;
} else {
isDisabled.value = !isDisabled.value;
}
};
const handleKeyDown = (event: KeyboardEvent) => {
if (event.key === KeyboardEnum.Back) {
onReturn();
}
};
// Check for disabled value, remove listeners if is disabled
watch(isDisabled, (newValue) => {
if (newValue) {
window.removeEventListener("keydown", handleKeyDown);
} else {
window.addEventListener("keydown", handleKeyDown);
}
});
onMounted(() => {
window.addEventListener("keydown", handleKeyDown);
});
onUnmounted(() => {
window.removeEventListener("keydown", handleKeyDown);
});
return { toggleDisabled };
}