1
0
mirror of https://github.com/immich-app/immich.git synced 2025-06-27 05:11:11 +02:00

chore(web): migration svelte 5 syntax (#13883)

This commit is contained in:
Alex
2024-11-14 08:43:25 -06:00
committed by GitHub
parent 9203a61709
commit 0b3742cf13
310 changed files with 6435 additions and 4176 deletions

View File

@ -1,33 +1,30 @@
<script lang="ts">
import { tick } from 'svelte';
import { tick, type Snippet } from 'svelte';
import ContextMenu from '$lib/components/shared-components/context-menu/context-menu.svelte';
import { shortcuts } from '$lib/actions/shortcut';
import { generateId } from '$lib/utils/generate-id';
import { contextMenuNavigation } from '$lib/actions/context-menu-navigation';
import { optionClickCallbackStore, selectedIdStore } from '$lib/stores/context-menu.store';
export let title: string;
export let direction: 'left' | 'right' = 'right';
export let x = 0;
export let y = 0;
export let isOpen = false;
export let onClose: (() => unknown) | undefined;
interface Props {
title: string;
direction?: 'left' | 'right';
x?: number;
y?: number;
isOpen?: boolean;
onClose: (() => unknown) | undefined;
children?: Snippet;
}
let uniqueKey = {};
let menuContainer: HTMLUListElement;
let triggerElement: HTMLElement | undefined = undefined;
let { title, direction = 'right', x = 0, y = 0, isOpen = false, onClose, children }: Props = $props();
let uniqueKey = $state({});
let menuContainer: HTMLUListElement | undefined = $state();
let triggerElement: HTMLElement | undefined = $state(undefined);
const id = generateId();
const menuId = `context-menu-${id}`;
$: {
if (isOpen && menuContainer) {
triggerElement = document.activeElement as HTMLElement;
menuContainer.focus();
$optionClickCallbackStore = closeContextMenu;
}
}
const reopenContextMenu = async (event: MouseEvent) => {
const contextMenuEvent = new MouseEvent('contextmenu', {
bubbles: true,
@ -39,7 +36,7 @@
const elements = document.elementsFromPoint(event.x, event.y);
if (elements.includes(menuContainer)) {
if (menuContainer && elements.includes(menuContainer)) {
// User right-clicked on the context menu itself, we keep the context
// menu as is
return;
@ -58,6 +55,18 @@
triggerElement?.focus();
onClose?.();
};
$effect(() => {
if (isOpen && menuContainer) {
triggerElement = document.activeElement as HTMLElement;
menuContainer.focus();
$optionClickCallbackStore = closeContextMenu;
}
});
const oncontextmenu = async (event: MouseEvent) => {
event.preventDefault();
await reopenContextMenu(event);
};
</script>
{#key uniqueKey}
@ -81,11 +90,7 @@
},
]}
>
<section
class="fixed left-0 top-0 z-10 flex h-screen w-screen"
on:contextmenu|preventDefault={reopenContextMenu}
role="presentation"
>
<section class="fixed left-0 top-0 z-10 flex h-screen w-screen" {oncontextmenu} role="presentation">
<ContextMenu
{direction}
{x}
@ -97,7 +102,7 @@
isVisible
onClose={closeContextMenu}
>
<slot />
{@render children?.()}
</ContextMenu>
</section>
</div>