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));
|
|
|
|
|
};
|