Skip to content

Commit da746f6

Browse files
committed
jump to previous/next page if at the last log entry, when moving through logs via keyboard
1 parent f4c3265 commit da746f6

File tree

5 files changed

+34
-5
lines changed

5 files changed

+34
-5
lines changed

public/app.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

public/mix-manifest.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"/app.js": "/app.js?id=c6b0db33328045843a901c6840bbbb55",
2+
"/app.js": "/app.js?id=10fd202d284550adc56be1499fbd44c1",
33
"/app.css": "/app.css?id=12c5e78a91987c11d8a0cc04436541e9",
44
"/img/log-viewer-128.png": "/img/log-viewer-128.png?id=d576c6d2e16074d3f064e60fe4f35166",
55
"/img/log-viewer-32.png": "/img/log-viewer-32.png?id=f8ec67d10f996aa8baf00df3b61eea6d",

resources/js/components/Pagination.vue

+11-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
import { ArrowLeftIcon, ArrowRightIcon } from '@heroicons/vue/24/outline';
3636
import { usePaginationStore } from '../stores/pagination.js';
3737
import { useRoute, useRouter } from 'vue-router';
38-
import { computed } from 'vue';
38+
import {computed, onBeforeUnmount, onMounted} from 'vue';
3939
import { replaceQuery } from '../helpers.js';
4040
4141
const props = defineProps({
@@ -69,4 +69,14 @@ const gotoPage = (page) => {
6969
7070
const nextPage = () => gotoPage(paginationStore.page + 1);
7171
const previousPage = () => gotoPage(paginationStore.page - 1);
72+
73+
onMounted(() => {
74+
document.addEventListener('goToNextPage', nextPage);
75+
document.addEventListener('goToPreviousPage', previousPage);
76+
})
77+
78+
onBeforeUnmount(() => {
79+
document.removeEventListener('goToNextPage', nextPage);
80+
document.removeEventListener('goToPreviousPage', previousPage);
81+
})
7282
</script>

resources/js/keyboardNavigation/shared.js

+18-2
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,16 @@ export const openNextLogEntry = () => {
5050
const el = document.activeElement;
5151
const nextElement = getNextElementWithClass(el, logToggleButtonClass);
5252
if (!nextElement) {
53+
const onNextPageLoad = () => {
54+
setTimeout(() => {
55+
focusFirstLogEntry();
56+
ensureIsExpanded(document.activeElement);
57+
}, 50)
58+
document.removeEventListener('logsPageLoaded', onNextPageLoad);
59+
};
60+
document.addEventListener('logsPageLoaded', onNextPageLoad);
61+
document.dispatchEvent(new Event('goToNextPage'));
5362
return;
54-
// TODO: check if there's a next pagination page to load and open the next log entry.
5563
}
5664
ensureIsCollapsed(el);
5765
nextElement.focus();
@@ -62,8 +70,16 @@ export const openPreviousLogEntry = () => {
6270
const el = document.activeElement;
6371
const previousElement = getPreviousElementWithClass(el, logToggleButtonClass);
6472
if (!previousElement) {
73+
const onPreviousPageLoad = () => {
74+
setTimeout(() => {
75+
focusLastLogEntry();
76+
ensureIsExpanded(document.activeElement);
77+
}, 50)
78+
document.removeEventListener('logsPageLoaded', onPreviousPageLoad);
79+
};
80+
document.addEventListener('logsPageLoaded', onPreviousPageLoad);
81+
document.dispatchEvent(new Event('goToPreviousPage'));
6582
return;
66-
// TODO: check if there's a previous pagination page to load and open the previous log entry.
6783
}
6884
ensureIsCollapsed(el);
6985
previousElement.focus();

resources/js/stores/logViewer.js

+3
Original file line numberDiff line numberDiff line change
@@ -234,11 +234,14 @@ export const useLogViewerStore = defineStore({
234234

235235
if (!silently) {
236236
nextTick(() => {
237+
document.dispatchEvent(new Event('logsPageLoaded'));
237238
this.reset();
238239
if (data.expandAutomatically) {
239240
this.stacksOpen.push(0);
240241
}
241242
});
243+
} else {
244+
document.dispatchEvent(new Event('logsPageLoadedSilently'));
242245
}
243246

244247
if (this.hasMoreResults) {

0 commit comments

Comments
 (0)