From a8198f9934993aac90984f0833c35088b4542c8d Mon Sep 17 00:00:00 2001 From: Jason Rasmussen Date: Mon, 19 Jan 2026 11:47:58 -0500 Subject: [PATCH] refactor: lock session (#25366) refafctor: lock session --- web/src/lib/managers/event-manager.svelte.ts | 2 ++ web/src/lib/services/user.service.ts | 34 +++++++++++++++++-- .../[[assetId=id]]/+page.svelte | 25 ++++++++------ 3 files changed, 48 insertions(+), 13 deletions(-) diff --git a/web/src/lib/managers/event-manager.svelte.ts b/web/src/lib/managers/event-manager.svelte.ts index d612d4fe8c..f6ef83386f 100644 --- a/web/src/lib/managers/event-manager.svelte.ts +++ b/web/src/lib/managers/event-manager.svelte.ts @@ -65,6 +65,8 @@ export type Events = { // confirmed permanently deleted from server UserAdminDeleted: [{ id: string }]; + SessionLocked: []; + SystemConfigUpdate: [SystemConfigDto]; LibraryCreate: [LibraryResponseDto]; diff --git a/web/src/lib/services/user.service.ts b/web/src/lib/services/user.service.ts index fbb562b2c0..a1fead693f 100644 --- a/web/src/lib/services/user.service.ts +++ b/web/src/lib/services/user.service.ts @@ -1,8 +1,38 @@ import { eventManager } from '$lib/managers/event-manager.svelte'; import { handleError } from '$lib/utils/handle-error'; import { getFormatter } from '$lib/utils/i18n'; -import { changePassword, resetPinCode, type ChangePasswordDto, type PinCodeResetDto } from '@immich/sdk'; -import { toastManager } from '@immich/ui'; +import { + changePassword, + lockAuthSession, + resetPinCode, + type ChangePasswordDto, + type PinCodeResetDto, +} from '@immich/sdk'; +import { toastManager, type ActionItem } from '@immich/ui'; +import { mdiLockOutline } from '@mdi/js'; +import type { MessageFormatter } from 'svelte-i18n'; + +export const getUserActions = ($t: MessageFormatter) => { + const LockSession: ActionItem = { + title: $t('lock'), + color: 'primary', + icon: mdiLockOutline, + onAction: () => handleLockSession(), + }; + + return { LockSession }; +}; + +const handleLockSession = async () => { + const $t = await getFormatter(); + + try { + await lockAuthSession(); + eventManager.emit('SessionLocked'); + } catch (error) { + handleError(error, $t('errors.something_went_wrong')); + } +}; export const handleResetPinCode = async (dto: PinCodeResetDto) => { const $t = await getFormatter(); diff --git a/web/src/routes/(user)/locked/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/locked/[[photos=photos]]/[[assetId=id]]/+page.svelte index 43d05f6265..931c19341b 100644 --- a/web/src/routes/(user)/locked/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/locked/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -1,6 +1,7 @@ - - {#snippet buttons()} - - {/snippet} + +