diff --git a/web/src/app.d.ts b/web/src/app.d.ts index acacd3506..13619596b 100644 --- a/web/src/app.d.ts +++ b/web/src/app.d.ts @@ -16,5 +16,6 @@ declare namespace svelte.JSX { // eslint-disable-next-line @typescript-eslint/no-unused-vars interface HTMLAttributes { oncopyImage?: () => void; + onoutclick?: () => void; } } diff --git a/web/src/lib/components/shared-components/base-modal.svelte b/web/src/lib/components/shared-components/base-modal.svelte index 4a445453d..c1bcae920 100644 --- a/web/src/lib/components/shared-components/base-modal.svelte +++ b/web/src/lib/components/shared-components/base-modal.svelte @@ -35,7 +35,7 @@ >
dispatch('close')} + on:outclick={() => dispatch('close')} class="bg-immich-bg dark:bg-immich-dark-gray dark:text-immich-dark-fg w-[450px] min-h-[200px] max-h-[500px] rounded-lg shadow-md" >
diff --git a/web/src/lib/components/shared-components/context-menu/context-menu.svelte b/web/src/lib/components/shared-components/context-menu/context-menu.svelte index 641b629ab..32e2e2c55 100644 --- a/web/src/lib/components/shared-components/context-menu/context-menu.svelte +++ b/web/src/lib/components/shared-components/context-menu/context-menu.svelte @@ -35,7 +35,7 @@ class="absolute w-[200px] z-[99999] rounded-lg overflow-hidden" style={`top: ${y}px; left: ${x}px;`} use:clickOutside - on:out-click={() => dispatch('clickoutside')} + on:outclick={() => dispatch('clickoutside')} >
diff --git a/web/src/lib/components/shared-components/full-screen-modal.svelte b/web/src/lib/components/shared-components/full-screen-modal.svelte index 5e6fad489..40f84da9e 100644 --- a/web/src/lib/components/shared-components/full-screen-modal.svelte +++ b/web/src/lib/components/shared-components/full-screen-modal.svelte @@ -11,7 +11,7 @@ out:fade={{ duration: 100 }} class="absolute left-0 top-0 w-full h-full bg-black/40 z-[100] flex place-items-center place-content-center" > -
dispatch('clickOutside')}> +
dispatch('clickOutside')}>
diff --git a/web/src/lib/components/shared-components/navigation-bar/account-info-panel.svelte b/web/src/lib/components/shared-components/navigation-bar/account-info-panel.svelte new file mode 100644 index 000000000..849af8615 --- /dev/null +++ b/web/src/lib/components/shared-components/navigation-bar/account-info-panel.svelte @@ -0,0 +1,79 @@ + + +
dispatch('close')} +> +
+ +
+ +

+ {user.firstName} + {user.lastName} +

+ +

{user.email}

+ +
+ +
+ +
+
+
+ +
+ +
+
diff --git a/web/src/lib/components/shared-components/navigation-bar.svelte b/web/src/lib/components/shared-components/navigation-bar/navigation-bar.svelte similarity index 65% rename from web/src/lib/components/shared-components/navigation-bar.svelte rename to web/src/lib/components/shared-components/navigation-bar/navigation-bar.svelte index b66f47099..8d9b0056b 100644 --- a/web/src/lib/components/shared-components/navigation-bar.svelte +++ b/web/src/lib/components/shared-components/navigation-bar/navigation-bar.svelte @@ -4,16 +4,14 @@ import { createEventDispatcher, onMount } from 'svelte'; import { fade, fly } from 'svelte/transition'; import TrayArrowUp from 'svelte-material-icons/TrayArrowUp.svelte'; - import { clickOutside } from '../../utils/click-outside'; import { api, UserResponseDto } from '@api'; - import ThemeButton from './theme-button.svelte'; - import { AppRoute } from '../../constants'; - + import ThemeButton from '../theme-button.svelte'; + import { AppRoute } from '../../../constants'; + import AccountInfoPanel from './account-info-panel.svelte'; export let user: UserResponseDto; export let shouldShowUploadButton = true; let shouldShowAccountInfo = false; - let shouldShowProfileImage = false; const dispatch = createEventDispatcher(); let shouldShowAccountInfoPanel = false; @@ -23,12 +21,7 @@ }); const getUserProfileImage = async () => { - try { - await api.userApi.getProfileImage(user.id); - shouldShowProfileImage = true; - } catch (e) { - shouldShowProfileImage = false; - } + return await api.userApi.getProfileImage(user.id); }; const getFirstLetter = (text?: string) => { return text?.charAt(0).toUpperCase(); @@ -103,15 +96,16 @@ {#if shouldShowAccountInfo} @@ -129,49 +123,10 @@
{#if shouldShowAccountInfoPanel} -
(shouldShowAccountInfoPanel = false)} - > -
- -
- -

- {user.firstName} - {user.lastName} -

- -

{user.email}

- -
-
-
- -
- -
-
+ (shouldShowAccountInfoPanel = false)} + on:logout={logOut} + /> {/if} diff --git a/web/src/lib/components/user-settings-page/user-settings-list.svelte b/web/src/lib/components/user-settings-page/user-settings-list.svelte new file mode 100644 index 000000000..a7a967715 --- /dev/null +++ b/web/src/lib/components/user-settings-page/user-settings-list.svelte @@ -0,0 +1,27 @@ + + + +
+ + + +
+
diff --git a/web/src/lib/constants.ts b/web/src/lib/constants.ts index 60ed0957c..1cca2c1bd 100644 --- a/web/src/lib/constants.ts +++ b/web/src/lib/constants.ts @@ -3,7 +3,7 @@ export const loginPageMessage: string | undefined = env.PUBLIC_LOGIN_PAGE_MESSAG export enum AppRoute { ADMIN_USER_MANAGEMENT = '/admin/user-management', - ADMIN_SETTINGS = '/admin/settings', + ADMIN_SETTINGS = '/admin/system-settings', ADMIN_STATS = '/admin/server-status', ADMIN_JOBS = '/admin/jobs-status', diff --git a/web/src/lib/utils/click-outside.ts b/web/src/lib/utils/click-outside.ts index 0afdf8923..dae984862 100644 --- a/web/src/lib/utils/click-outside.ts +++ b/web/src/lib/utils/click-outside.ts @@ -2,7 +2,7 @@ export function clickOutside(node: Node) { const handleClick = (event: Event) => { const targetNode = event.target as Node | null; if (!node.contains(targetNode)) { - node.dispatchEvent(new CustomEvent('out-click')); + node.dispatchEvent(new CustomEvent('outclick')); } }; diff --git a/web/src/routes/admin/+layout.svelte b/web/src/routes/admin/+layout.svelte index f00887740..2d50faaab 100644 --- a/web/src/routes/admin/+layout.svelte +++ b/web/src/routes/admin/+layout.svelte @@ -1,6 +1,6 @@ - Settings - Immich + System Settings - Immich
diff --git a/web/src/routes/albums/+page.svelte b/web/src/routes/albums/+page.svelte index fa6a8537c..e59d63e3a 100644 --- a/web/src/routes/albums/+page.svelte +++ b/web/src/routes/albums/+page.svelte @@ -6,7 +6,7 @@ import MenuOption from '$lib/components/shared-components/context-menu/menu-option.svelte'; import DeleteOutline from 'svelte-material-icons/DeleteOutline.svelte'; import type { PageData } from './$types'; - import NavigationBar from '$lib/components/shared-components/navigation-bar.svelte'; + import NavigationBar from '$lib/components/shared-components/navigation-bar/navigation-bar.svelte'; import SideBar from '$lib/components/shared-components/side-bar/side-bar.svelte'; import PlusBoxOutline from 'svelte-material-icons/PlusBoxOutline.svelte'; import { useAlbums } from './albums.bloc'; diff --git a/web/src/routes/photos/+page.svelte b/web/src/routes/photos/+page.svelte index 1e82688cf..f25873ed1 100644 --- a/web/src/routes/photos/+page.svelte +++ b/web/src/routes/photos/+page.svelte @@ -1,5 +1,5 @@ + + + Settings - Immich + + +
+ +
+ +
+ + +
+
+

+ User Settings +

+
+
+ +
+
+ +
+
+
+