fix: back/forward navigation won't reset scroll in timeline
This commit is contained in:
@@ -7,8 +7,10 @@
|
||||
type RelativeResult,
|
||||
} from '$lib/components/shared-components/change-date.svelte';
|
||||
import {
|
||||
setFocusToAsset as setFocusAssetInit,
|
||||
setFocusTo as setFocusToInit,
|
||||
setFocusToAsset as setFocusAssetUtil,
|
||||
setFocusTo as setFocusToUtil,
|
||||
type FocusDirection,
|
||||
type FocusInterval,
|
||||
} from '$lib/components/timeline/actions/focus-actions';
|
||||
import { AppRoute } from '$lib/constants';
|
||||
import { TimelineManager } from '$lib/managers/timeline-manager/timeline-manager.svelte';
|
||||
@@ -32,7 +34,7 @@
|
||||
assetInteraction: AssetInteraction;
|
||||
isShowDeleteConfirmation: boolean;
|
||||
onEscape?: () => void;
|
||||
scrollToAsset: (asset: TimelineAsset) => boolean;
|
||||
scrollToAsset: (asset: TimelineAsset) => Promise<boolean>;
|
||||
}
|
||||
|
||||
let {
|
||||
@@ -147,8 +149,10 @@
|
||||
}
|
||||
});
|
||||
|
||||
const setFocusTo = setFocusToInit.bind(undefined, scrollToAsset, timelineManager);
|
||||
const setFocusAsset = setFocusAssetInit.bind(undefined, scrollToAsset);
|
||||
const setFocusTo = (direction: FocusDirection, interval: FocusInterval) =>
|
||||
setFocusToUtil(scrollToAsset, timelineManager, direction, interval);
|
||||
|
||||
const setFocusAsset = (asset: TimelineAsset) => setFocusAssetUtil(scrollToAsset, asset);
|
||||
|
||||
let shortcutList = $derived(
|
||||
(() => {
|
||||
@@ -212,7 +216,7 @@
|
||||
(DateTime.fromISO(dateString.date) as DateTime<true>).toObject(),
|
||||
);
|
||||
if (asset) {
|
||||
setFocusAsset(asset);
|
||||
void setFocusAsset(asset);
|
||||
}
|
||||
}
|
||||
}}
|
||||
|
||||
@@ -21,19 +21,26 @@ export const focusPreviousAsset = () =>
|
||||
|
||||
const queryHTMLElement = (query: string) => document.querySelector(query) as HTMLElement;
|
||||
|
||||
export const setFocusToAsset = (scrollToAsset: (asset: TimelineAsset) => boolean, asset: TimelineAsset) => {
|
||||
const scrolled = scrollToAsset(asset);
|
||||
export const setFocusToAsset = async (
|
||||
scrollToAsset: (asset: TimelineAsset) => Promise<boolean>,
|
||||
asset: TimelineAsset,
|
||||
) => {
|
||||
const scrolled = await scrollToAsset(asset);
|
||||
if (scrolled) {
|
||||
const element = queryHTMLElement(`[data-thumbnail-focus-container][data-asset="${asset.id}"]`);
|
||||
element?.focus();
|
||||
}
|
||||
};
|
||||
|
||||
export type FocusDirection = 'earlier' | 'later';
|
||||
|
||||
export type FocusInterval = 'day' | 'month' | 'year' | 'asset';
|
||||
|
||||
export const setFocusTo = async (
|
||||
scrollToAsset: (asset: TimelineAsset) => boolean,
|
||||
scrollToAsset: (asset: TimelineAsset) => Promise<boolean>,
|
||||
store: TimelineManager,
|
||||
direction: 'earlier' | 'later',
|
||||
interval: 'day' | 'month' | 'year' | 'asset',
|
||||
direction: FocusDirection,
|
||||
interval: FocusInterval,
|
||||
) => {
|
||||
if (tracker.isActive()) {
|
||||
// there are unfinished running invocations, so return early
|
||||
@@ -65,7 +72,10 @@ export const setFocusTo = async (
|
||||
return;
|
||||
}
|
||||
|
||||
const scrolled = scrollToAsset(asset);
|
||||
const scrolled = await scrollToAsset(asset);
|
||||
if (!invocation.isStillValid()) {
|
||||
return;
|
||||
}
|
||||
if (scrolled) {
|
||||
await tick();
|
||||
if (!invocation.isStillValid()) {
|
||||
|
||||
Reference in New Issue
Block a user