immich/web/src/lib/actions/zoom-image.ts

32 lines
828 B
TypeScript
Raw Normal View History

import { photoZoomState, zoomed } from '$lib/stores/zoom-image.store';
import { useZoomImageWheel } from '@zoom-image/svelte';
import { get } from 'svelte/store';
export { zoomed } from '$lib/stores/zoom-image.store';
export const zoomImageAction = (node: HTMLElement) => {
const { createZoomImage, zoomImageState, setZoomImageState } = useZoomImageWheel();
createZoomImage(node, {
maxZoom: 10,
wheelZoomRatio: 0.2,
});
const state = get(photoZoomState);
if (state) {
setZoomImageState(state);
}
const unsubscribes = [
zoomed.subscribe((state) => setZoomImageState({ currentZoom: state ? 2 : 1 })),
zoomImageState.subscribe((state) => photoZoomState.set(state)),
];
return {
destroy() {
for (const unsubscribe of unsubscribes) {
unsubscribe();
}
},
};
};