Files
immich/web/src/lib/services/shared-link.service.ts

65 lines
2.1 KiB
TypeScript
Raw Normal View History

2025-11-10 13:40:58 -05:00
import { eventManager } from '$lib/managers/event-manager.svelte';
2025-11-10 12:21:26 -05:00
import QrCodeModal from '$lib/modals/QrCodeModal.svelte';
import { serverConfig } from '$lib/stores/server-config.store';
import { copyToClipboard } from '$lib/utils';
2025-11-10 13:40:58 -05:00
import { handleError } from '$lib/utils/handle-error';
2025-11-10 12:21:26 -05:00
import { getFormatter } from '$lib/utils/i18n';
2025-11-10 13:40:58 -05:00
import {
createSharedLink,
updateSharedLink,
type SharedLinkCreateDto,
type SharedLinkEditDto,
type SharedLinkResponseDto,
} from '@immich/sdk';
import { modalManager, toastManager } from '@immich/ui';
2025-11-10 12:21:26 -05:00
import { get } from 'svelte/store';
const makeSharedLinkUrl = (sharedLink: SharedLinkResponseDto) => {
const path = sharedLink.slug ? `s/${sharedLink.slug}` : `share/${sharedLink.key}`;
return new URL(path, get(serverConfig).externalDomain || globalThis.location.origin).href;
};
2025-11-10 13:40:58 -05:00
export const handleCreateSharedLink = async (dto: SharedLinkCreateDto) => {
const $t = await getFormatter();
try {
const sharedLink = await createSharedLink({ sharedLinkCreateDto: dto });
eventManager.emit('SharedLinkCreate', sharedLink);
// prevent nested modal
void handleShowSharedLinkQrCode(sharedLink);
return true;
} catch (error) {
handleError(error, $t('errors.failed_to_create_shared_link'));
return false;
}
};
export const handleUpdateSharedLink = async (sharedLink: SharedLinkResponseDto, dto: SharedLinkEditDto) => {
const $t = await getFormatter();
try {
const response = await updateSharedLink({ id: sharedLink.id, sharedLinkEditDto: dto });
eventManager.emit('SharedLinkUpdate', { album: sharedLink.album, ...response });
toastManager.success($t('saved'));
return true;
} catch (error) {
handleError(error, $t('errors.failed_to_edit_shared_link'));
return false;
}
};
export const handleShowSharedLinkQrCode = async (sharedLink: SharedLinkResponseDto) => {
2025-11-10 12:21:26 -05:00
const $t = await getFormatter();
await modalManager.show(QrCodeModal, { title: $t('view_link'), value: makeSharedLinkUrl(sharedLink) });
};
export const handleCopySharedLinkUrl = async (sharedLink: SharedLinkResponseDto) => {
await copyToClipboard(makeSharedLinkUrl(sharedLink));
};